# HG changeset patch # User Paul Boddie # Date 1700242724 -3600 # Node ID c705336ff60014d9d968ce3735219806eb40096f # Parent 6e1fae3404c55767fd4fe36d15eafb2a19a5a454 Introduced internal/chip-specific clock identifiers, starting with USB PHY source clocks. Replaced Clock_undefined with Clock_none, adjusting the clock identifier ordering. diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/include/clocks.h --- a/pkg/devices/include/clocks.h Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/include/clocks.h Fri Nov 17 18:38:44 2023 +0100 @@ -27,6 +27,8 @@ enum Clock_identifiers { + Clock_none, /* not a clock: special value */ + Clock_aic, Clock_aic_bitclk, Clock_aic_pclk, @@ -67,7 +69,6 @@ Clock_msc0, Clock_msc1, Clock_msc2, - Clock_none, Clock_otg0, Clock_otg1, Clock_pclock, /* APB */ @@ -95,9 +96,10 @@ Clock_udc, Clock_uhc, Clock_uprt, + Clock_usb_phy, Clock_vpu, - Clock_identifier_count, /* not a clock: limit for array definition */ - Clock_undefined, /* not a clock: special value */ + + Clock_specific_start, /* not a clock: start of chip-specific clocks */ }; // vim: tabstop=2 expandtab shiftwidth=2 diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/include/cpm-jz4780.h --- a/pkg/devices/lib/cpm/include/cpm-jz4780.h Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/include/cpm-jz4780.h Fri Nov 17 18:38:44 2023 +0100 @@ -27,6 +27,20 @@ +/* JZ4780-specific clocks. */ + +enum Clock_jz4780_identifiers +{ + Clock_jz4780_identifier_base = Clock_specific_start, + Clock_usb_phy_12MHz = Clock_specific_start, + Clock_usb_phy_19_2MHz, + Clock_usb_phy_24MHz, + Clock_usb_phy_48MHz, + Clock_jz4780_identifier_count, /* not a clock: limit for array definition */ +}; + + + #ifdef __cplusplus #include diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/include/cpm-x1600.h --- a/pkg/devices/lib/cpm/include/cpm-x1600.h Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/include/cpm-x1600.h Fri Nov 17 18:38:44 2023 +0100 @@ -27,6 +27,17 @@ +/* X1600-specific clocks. */ + +enum Clock_x1600_identifiers +{ + Clock_x1600_identifier_base = Clock_specific_start, + Clock_usb_phy_12MHz = Clock_specific_start, + Clock_x1600_identifier_count, /* not a clock: limit for array definition */ +}; + + + #ifdef __cplusplus #include diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/src/chip.cc --- a/pkg/devices/lib/cpm/src/chip.cc Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/src/chip.cc Fri Nov 17 18:38:44 2023 +0100 @@ -94,7 +94,7 @@ if (clk != NULL) return clk->get_source_clock(_cpm_regs); else - return Clock_undefined; + return Clock_none; } void diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/src/common.cc --- a/pkg/devices/lib/cpm/src/common.cc Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/src/common.cc Fri Nov 17 18:38:44 2023 +0100 @@ -89,9 +89,11 @@ if (num < _num_inputs) return _inputs[num]; else - return Clock_undefined; + return Clock_none; } + + // Clock sources. uint8_t @@ -133,7 +135,7 @@ { enum Clock_identifiers input = get_source_clock(regs); - if (input != Clock_undefined) + if (input != Clock_none) return regs.get_clock(input)->get_frequency(regs); else return 0; diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/src/jz4780.cc --- a/pkg/devices/lib/cpm/src/jz4780.cc Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/src/jz4780.cc Fri Nov 17 18:38:44 2023 +0100 @@ -92,6 +92,7 @@ Clock_source_pcm (Divider_pcm, 7, 29), // PCMS, PCMPCS Clock_source_ssi (Divider_ssi, 3, 30), // SCS, SPCS Clock_source_uhc (Divider_uhc, 3, 30), // UHCS + Clock_source_usb_phy (Usb_param_control1, 3, 24), // REFCLKDIV Clock_source_vpu (Divider_vpu, 3, 30), // VCS Clock_busy_cpu (Clock_status, 1, 0), @@ -239,8 +240,9 @@ // Multiplexer instances. #define Clocks(...) ((enum Clock_identifiers []) {__VA_ARGS__}) +#define Specific(CLOCK) ((enum Clock_identifiers) (CLOCK)) -static Mux mux_external (Clock_external), +static Mux mux_external (Clock_external), // Clocks being propagated to others. @@ -262,6 +264,8 @@ mux_dev (3, Clocks(Clock_none, Clock_main, Clock_pll_M)), mux_lcd (3, Clocks(Clock_main, Clock_pll_M, Clock_pll_V)), mux_usb (3, Clocks(Clock_main, Clock_pll_M, Clock_pll_E /* , OTG PHY */)), + mux_usb_phy (4, Clocks(Specific(Clock_usb_phy_12MHz), Specific(Clock_usb_phy_24MHz), + Specific(Clock_usb_phy_48MHz), Specific(Clock_usb_phy_19_2MHz))), // Clock selectors involving the external clock. @@ -277,7 +281,11 @@ static Clock_null clock_none; static Clock_passive clock_external(48000000), - clock_rtc_external(32768); + clock_rtc_external(32768), + clock_usb_phy_12MHz(12000000), + clock_usb_phy_19_2MHz(19200000), + clock_usb_phy_24MHz(24000000), + clock_usb_phy_48MHz(48000000); @@ -348,6 +356,8 @@ clock_uart4((Source(mux_external)), (Control(Clock_gate_uart4))), + clock_usb_phy(Source(mux_usb_phy, Clock_source_usb_phy)), + clock_x2d((Source(mux_external)), (Control(Clock_gate_x2d))), // Special parent clock for hclock2 and pclock. @@ -475,7 +485,9 @@ // Clock register. -static Clock_base *clocks[Clock_identifier_count] = { +static Clock_base *clocks[Clock_jz4780_identifier_count] = { + &clock_none, + &clock_none, // Clock_aic &clock_none, // Clock_aic_bitclk &clock_none, // Clock_aic_pclk @@ -516,7 +528,6 @@ &clock_msc0, &clock_msc1, &clock_msc2, - &clock_none, // Clock_none &clock_otg0, &clock_otg1, &clock_pclock, @@ -544,7 +555,15 @@ &clock_none, // Clock_udc &clock_uhc, &clock_none, // Clock_uprt + &clock_usb_phy, &clock_vpu, + + /* JZ4780-specific clocks. */ + + &clock_usb_phy_12MHz, + &clock_usb_phy_19_2MHz, + &clock_usb_phy_24MHz, + &clock_usb_phy_48MHz, }; diff -r 6e1fae3404c5 -r c705336ff600 pkg/devices/lib/cpm/src/x1600.cc --- a/pkg/devices/lib/cpm/src/x1600.cc Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/devices/lib/cpm/src/x1600.cc Fri Nov 17 18:38:44 2023 +0100 @@ -203,6 +203,7 @@ Clock_gate_cdbus (Clock_gate1, 1, 2, true), // CDBUS Clock_gate_can1 (Clock_gate1, 1, 1, true), // CAN1 Clock_gate_can0 (Clock_gate1, 1, 0, true), // CAN0 + Clock_gate_usb_phy (Sleep_control, 1, 23, true), // gate_usbphy_clk Pll_enable_A (Pll_control_A, 1, 0), // APLLEN Pll_enable_E (Pll_control_E, 1, 0), // EPLLEN @@ -237,8 +238,9 @@ // Multiplexer instances. #define Clocks(...) ((enum Clock_identifiers []) {__VA_ARGS__}) +#define Specific(CLOCK) ((enum Clock_identifiers) (CLOCK)) -static Mux mux_external (Clock_external), +static Mux mux_external (Clock_external), // Clocks being propagated to others. @@ -248,6 +250,7 @@ mux_hclock2_pclock (Clock_hclock2_pclock), mux_i2s0_rx (Clock_i2s0), mux_i2s0_tx (Clock_i2s1), + mux_usb_phy (Specific(Clock_usb_phy_12MHz)), // Main peripheral and bus clock sources. @@ -265,7 +268,8 @@ static Clock_null clock_none; static Clock_passive clock_external(24000000), - clock_rtc_external(32768); + clock_rtc_external(32768), + clock_usb_phy_12MHz(12000000); // Note the use of extra parentheses due to the annoying C++ "most vexing parse" // problem. See: https://en.wikipedia.org/wiki/Most_vexing_parse @@ -300,6 +304,8 @@ clock_uart3((Source(mux_external)), (Control(Clock_gate_uart3))), + clock_usb_phy((Source(mux_usb_phy)), (Control(Clock_gate_usb_phy))), + // Special parent clock for hclock2 and pclock. clock_hclock2_pclock(Source(mux_core, Clock_source_hclock2), @@ -414,7 +420,9 @@ // Clock register. -static Clock_base *clocks[Clock_identifier_count] = { +static Clock_base *clocks[Clock_x1600_identifier_count] = { + &clock_none, + &clock_aic, &clock_none, // Clock_aic_bitclk &clock_none, // Clock_aic_pclk @@ -455,7 +463,6 @@ &clock_msc0, &clock_msc1, &clock_none, // Clock_msc2 - &clock_none, // Clock_none &clock_otg0, &clock_none, // Clock_otg1 &clock_pclock, @@ -483,7 +490,12 @@ &clock_none, // Clock_udc &clock_none, // Clock_uhc &clock_none, // Clock_uprt + &clock_usb_phy, &clock_none, // Clock_vpu + + /* X1600-specific clocks. */ + + &clock_usb_phy_12MHz, }; diff -r 6e1fae3404c5 -r c705336ff600 pkg/landfall-examples/hw_info/hw_info.c --- a/pkg/landfall-examples/hw_info/hw_info.c Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/landfall-examples/hw_info/hw_info.c Fri Nov 17 18:38:44 2023 +0100 @@ -323,7 +323,7 @@ return clocks[i].clock; } - return Clock_undefined; + return Clock_none; } static const char list_clocks_separator[] = "--------------------------------"; @@ -375,14 +375,14 @@ enum Clock_identifiers clock; if ((token = read_token("Clock")) == NULL) - return Clock_undefined; + return Clock_none; clock = get_clock(token); - if (clock == Clock_undefined) + if (clock == Clock_none) { printf("Unrecognised clock: %s\n", token); - return Clock_undefined; + return Clock_none; } return clock; @@ -395,7 +395,7 @@ clock = get_clock_by_name(); - if (clock == Clock_undefined) + if (clock == Clock_none) return; if (!read_number("Frequency", &frequency)) @@ -414,7 +414,7 @@ clock = get_clock_by_name(); - if (clock == Clock_undefined) + if (clock == Clock_none) return; for (num_parameters = 0; num_parameters < 4; num_parameters++) @@ -442,7 +442,7 @@ clock = get_clock_by_name(); - if (clock == Clock_undefined) + if (clock == Clock_none) return; if (!read_number("Source", &source)) @@ -457,7 +457,7 @@ clock = get_clock_by_name(); - if (clock == Clock_undefined) + if (clock == Clock_none) return; cpm_start_clock(cpm, clock); @@ -469,7 +469,7 @@ clock = get_clock_by_name(); - if (clock == Clock_undefined) + if (clock == Clock_none) return; cpm_stop_clock(cpm, clock); diff -r 6e1fae3404c5 -r c705336ff600 pkg/landfall-examples/hw_info/jz4780.c --- a/pkg/landfall-examples/hw_info/jz4780.c Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/landfall-examples/hw_info/jz4780.c Fri Nov 17 18:38:44 2023 +0100 @@ -531,7 +531,8 @@ {"uart2", Clock_uart2, "UART2"}, {"uart3", Clock_uart3, "UART3"}, {"uart4", Clock_uart4, "UART4"}, - {NULL, Clock_undefined, NULL}, + {"usbphy", Clock_usb_phy, "USB PHY"}, + {NULL, Clock_none, NULL}, }; diff -r 6e1fae3404c5 -r c705336ff600 pkg/landfall-examples/hw_info/x1600.c --- a/pkg/landfall-examples/hw_info/x1600.c Fri Nov 17 14:09:35 2023 +0100 +++ b/pkg/landfall-examples/hw_info/x1600.c Fri Nov 17 18:38:44 2023 +0100 @@ -505,7 +505,8 @@ {"uart1", Clock_uart1, "UART1"}, {"uart2", Clock_uart2, "UART2"}, {"uart3", Clock_uart3, "UART3"}, - {NULL, Clock_undefined, NULL}, + {"usbphy", Clock_usb_phy, "USB PHY"}, + {NULL, Clock_none, NULL}, };