1.1 --- a/pkg/devices/include/clocks.h Fri Nov 17 14:09:35 2023 +0100
1.2 +++ b/pkg/devices/include/clocks.h Fri Nov 17 18:38:44 2023 +0100
1.3 @@ -27,6 +27,8 @@
1.4
1.5 enum Clock_identifiers
1.6 {
1.7 + Clock_none, /* not a clock: special value */
1.8 +
1.9 Clock_aic,
1.10 Clock_aic_bitclk,
1.11 Clock_aic_pclk,
1.12 @@ -67,7 +69,6 @@
1.13 Clock_msc0,
1.14 Clock_msc1,
1.15 Clock_msc2,
1.16 - Clock_none,
1.17 Clock_otg0,
1.18 Clock_otg1,
1.19 Clock_pclock, /* APB */
1.20 @@ -95,9 +96,10 @@
1.21 Clock_udc,
1.22 Clock_uhc,
1.23 Clock_uprt,
1.24 + Clock_usb_phy,
1.25 Clock_vpu,
1.26 - Clock_identifier_count, /* not a clock: limit for array definition */
1.27 - Clock_undefined, /* not a clock: special value */
1.28 +
1.29 + Clock_specific_start, /* not a clock: start of chip-specific clocks */
1.30 };
1.31
1.32 // vim: tabstop=2 expandtab shiftwidth=2
2.1 --- a/pkg/devices/lib/cpm/include/cpm-jz4780.h Fri Nov 17 14:09:35 2023 +0100
2.2 +++ b/pkg/devices/lib/cpm/include/cpm-jz4780.h Fri Nov 17 18:38:44 2023 +0100
2.3 @@ -27,6 +27,20 @@
2.4
2.5
2.6
2.7 +/* JZ4780-specific clocks. */
2.8 +
2.9 +enum Clock_jz4780_identifiers
2.10 +{
2.11 + Clock_jz4780_identifier_base = Clock_specific_start,
2.12 + Clock_usb_phy_12MHz = Clock_specific_start,
2.13 + Clock_usb_phy_19_2MHz,
2.14 + Clock_usb_phy_24MHz,
2.15 + Clock_usb_phy_48MHz,
2.16 + Clock_jz4780_identifier_count, /* not a clock: limit for array definition */
2.17 +};
2.18 +
2.19 +
2.20 +
2.21 #ifdef __cplusplus
2.22
2.23 #include <l4/devices/cpm.h>
3.1 --- a/pkg/devices/lib/cpm/include/cpm-x1600.h Fri Nov 17 14:09:35 2023 +0100
3.2 +++ b/pkg/devices/lib/cpm/include/cpm-x1600.h Fri Nov 17 18:38:44 2023 +0100
3.3 @@ -27,6 +27,17 @@
3.4
3.5
3.6
3.7 +/* X1600-specific clocks. */
3.8 +
3.9 +enum Clock_x1600_identifiers
3.10 +{
3.11 + Clock_x1600_identifier_base = Clock_specific_start,
3.12 + Clock_usb_phy_12MHz = Clock_specific_start,
3.13 + Clock_x1600_identifier_count, /* not a clock: limit for array definition */
3.14 +};
3.15 +
3.16 +
3.17 +
3.18 #ifdef __cplusplus
3.19
3.20 #include <l4/devices/cpm.h>
4.1 --- a/pkg/devices/lib/cpm/src/chip.cc Fri Nov 17 14:09:35 2023 +0100
4.2 +++ b/pkg/devices/lib/cpm/src/chip.cc Fri Nov 17 18:38:44 2023 +0100
4.3 @@ -94,7 +94,7 @@
4.4 if (clk != NULL)
4.5 return clk->get_source_clock(_cpm_regs);
4.6 else
4.7 - return Clock_undefined;
4.8 + return Clock_none;
4.9 }
4.10
4.11 void
5.1 --- a/pkg/devices/lib/cpm/src/common.cc Fri Nov 17 14:09:35 2023 +0100
5.2 +++ b/pkg/devices/lib/cpm/src/common.cc Fri Nov 17 18:38:44 2023 +0100
5.3 @@ -89,9 +89,11 @@
5.4 if (num < _num_inputs)
5.5 return _inputs[num];
5.6 else
5.7 - return Clock_undefined;
5.8 + return Clock_none;
5.9 }
5.10
5.11 +
5.12 +
5.13 // Clock sources.
5.14
5.15 uint8_t
5.16 @@ -133,7 +135,7 @@
5.17 {
5.18 enum Clock_identifiers input = get_source_clock(regs);
5.19
5.20 - if (input != Clock_undefined)
5.21 + if (input != Clock_none)
5.22 return regs.get_clock(input)->get_frequency(regs);
5.23 else
5.24 return 0;
6.1 --- a/pkg/devices/lib/cpm/src/jz4780.cc Fri Nov 17 14:09:35 2023 +0100
6.2 +++ b/pkg/devices/lib/cpm/src/jz4780.cc Fri Nov 17 18:38:44 2023 +0100
6.3 @@ -92,6 +92,7 @@
6.4 Clock_source_pcm (Divider_pcm, 7, 29), // PCMS, PCMPCS
6.5 Clock_source_ssi (Divider_ssi, 3, 30), // SCS, SPCS
6.6 Clock_source_uhc (Divider_uhc, 3, 30), // UHCS
6.7 + Clock_source_usb_phy (Usb_param_control1, 3, 24), // REFCLKDIV
6.8 Clock_source_vpu (Divider_vpu, 3, 30), // VCS
6.9
6.10 Clock_busy_cpu (Clock_status, 1, 0),
6.11 @@ -239,8 +240,9 @@
6.12 // Multiplexer instances.
6.13
6.14 #define Clocks(...) ((enum Clock_identifiers []) {__VA_ARGS__})
6.15 +#define Specific(CLOCK) ((enum Clock_identifiers) (CLOCK))
6.16
6.17 -static Mux mux_external (Clock_external),
6.18 +static Mux mux_external (Clock_external),
6.19
6.20 // Clocks being propagated to others.
6.21
6.22 @@ -262,6 +264,8 @@
6.23 mux_dev (3, Clocks(Clock_none, Clock_main, Clock_pll_M)),
6.24 mux_lcd (3, Clocks(Clock_main, Clock_pll_M, Clock_pll_V)),
6.25 mux_usb (3, Clocks(Clock_main, Clock_pll_M, Clock_pll_E /* , OTG PHY */)),
6.26 + mux_usb_phy (4, Clocks(Specific(Clock_usb_phy_12MHz), Specific(Clock_usb_phy_24MHz),
6.27 + Specific(Clock_usb_phy_48MHz), Specific(Clock_usb_phy_19_2MHz))),
6.28
6.29 // Clock selectors involving the external clock.
6.30
6.31 @@ -277,7 +281,11 @@
6.32 static Clock_null clock_none;
6.33
6.34 static Clock_passive clock_external(48000000),
6.35 - clock_rtc_external(32768);
6.36 + clock_rtc_external(32768),
6.37 + clock_usb_phy_12MHz(12000000),
6.38 + clock_usb_phy_19_2MHz(19200000),
6.39 + clock_usb_phy_24MHz(24000000),
6.40 + clock_usb_phy_48MHz(48000000);
6.41
6.42
6.43
6.44 @@ -348,6 +356,8 @@
6.45
6.46 clock_uart4((Source(mux_external)), (Control(Clock_gate_uart4))),
6.47
6.48 + clock_usb_phy(Source(mux_usb_phy, Clock_source_usb_phy)),
6.49 +
6.50 clock_x2d((Source(mux_external)), (Control(Clock_gate_x2d))),
6.51
6.52 // Special parent clock for hclock2 and pclock.
6.53 @@ -475,7 +485,9 @@
6.54
6.55 // Clock register.
6.56
6.57 -static Clock_base *clocks[Clock_identifier_count] = {
6.58 +static Clock_base *clocks[Clock_jz4780_identifier_count] = {
6.59 + &clock_none,
6.60 +
6.61 &clock_none, // Clock_aic
6.62 &clock_none, // Clock_aic_bitclk
6.63 &clock_none, // Clock_aic_pclk
6.64 @@ -516,7 +528,6 @@
6.65 &clock_msc0,
6.66 &clock_msc1,
6.67 &clock_msc2,
6.68 - &clock_none, // Clock_none
6.69 &clock_otg0,
6.70 &clock_otg1,
6.71 &clock_pclock,
6.72 @@ -544,7 +555,15 @@
6.73 &clock_none, // Clock_udc
6.74 &clock_uhc,
6.75 &clock_none, // Clock_uprt
6.76 + &clock_usb_phy,
6.77 &clock_vpu,
6.78 +
6.79 + /* JZ4780-specific clocks. */
6.80 +
6.81 + &clock_usb_phy_12MHz,
6.82 + &clock_usb_phy_19_2MHz,
6.83 + &clock_usb_phy_24MHz,
6.84 + &clock_usb_phy_48MHz,
6.85 };
6.86
6.87
7.1 --- a/pkg/devices/lib/cpm/src/x1600.cc Fri Nov 17 14:09:35 2023 +0100
7.2 +++ b/pkg/devices/lib/cpm/src/x1600.cc Fri Nov 17 18:38:44 2023 +0100
7.3 @@ -203,6 +203,7 @@
7.4 Clock_gate_cdbus (Clock_gate1, 1, 2, true), // CDBUS
7.5 Clock_gate_can1 (Clock_gate1, 1, 1, true), // CAN1
7.6 Clock_gate_can0 (Clock_gate1, 1, 0, true), // CAN0
7.7 + Clock_gate_usb_phy (Sleep_control, 1, 23, true), // gate_usbphy_clk
7.8
7.9 Pll_enable_A (Pll_control_A, 1, 0), // APLLEN
7.10 Pll_enable_E (Pll_control_E, 1, 0), // EPLLEN
7.11 @@ -237,8 +238,9 @@
7.12 // Multiplexer instances.
7.13
7.14 #define Clocks(...) ((enum Clock_identifiers []) {__VA_ARGS__})
7.15 +#define Specific(CLOCK) ((enum Clock_identifiers) (CLOCK))
7.16
7.17 -static Mux mux_external (Clock_external),
7.18 +static Mux mux_external (Clock_external),
7.19
7.20 // Clocks being propagated to others.
7.21
7.22 @@ -248,6 +250,7 @@
7.23 mux_hclock2_pclock (Clock_hclock2_pclock),
7.24 mux_i2s0_rx (Clock_i2s0),
7.25 mux_i2s0_tx (Clock_i2s1),
7.26 + mux_usb_phy (Specific(Clock_usb_phy_12MHz)),
7.27
7.28 // Main peripheral and bus clock sources.
7.29
7.30 @@ -265,7 +268,8 @@
7.31 static Clock_null clock_none;
7.32
7.33 static Clock_passive clock_external(24000000),
7.34 - clock_rtc_external(32768);
7.35 + clock_rtc_external(32768),
7.36 + clock_usb_phy_12MHz(12000000);
7.37
7.38 // Note the use of extra parentheses due to the annoying C++ "most vexing parse"
7.39 // problem. See: https://en.wikipedia.org/wiki/Most_vexing_parse
7.40 @@ -300,6 +304,8 @@
7.41
7.42 clock_uart3((Source(mux_external)), (Control(Clock_gate_uart3))),
7.43
7.44 + clock_usb_phy((Source(mux_usb_phy)), (Control(Clock_gate_usb_phy))),
7.45 +
7.46 // Special parent clock for hclock2 and pclock.
7.47
7.48 clock_hclock2_pclock(Source(mux_core, Clock_source_hclock2),
7.49 @@ -414,7 +420,9 @@
7.50
7.51 // Clock register.
7.52
7.53 -static Clock_base *clocks[Clock_identifier_count] = {
7.54 +static Clock_base *clocks[Clock_x1600_identifier_count] = {
7.55 + &clock_none,
7.56 +
7.57 &clock_aic,
7.58 &clock_none, // Clock_aic_bitclk
7.59 &clock_none, // Clock_aic_pclk
7.60 @@ -455,7 +463,6 @@
7.61 &clock_msc0,
7.62 &clock_msc1,
7.63 &clock_none, // Clock_msc2
7.64 - &clock_none, // Clock_none
7.65 &clock_otg0,
7.66 &clock_none, // Clock_otg1
7.67 &clock_pclock,
7.68 @@ -483,7 +490,12 @@
7.69 &clock_none, // Clock_udc
7.70 &clock_none, // Clock_uhc
7.71 &clock_none, // Clock_uprt
7.72 + &clock_usb_phy,
7.73 &clock_none, // Clock_vpu
7.74 +
7.75 + /* X1600-specific clocks. */
7.76 +
7.77 + &clock_usb_phy_12MHz,
7.78 };
7.79
7.80
8.1 --- a/pkg/landfall-examples/hw_info/hw_info.c Fri Nov 17 14:09:35 2023 +0100
8.2 +++ b/pkg/landfall-examples/hw_info/hw_info.c Fri Nov 17 18:38:44 2023 +0100
8.3 @@ -323,7 +323,7 @@
8.4 return clocks[i].clock;
8.5 }
8.6
8.7 - return Clock_undefined;
8.8 + return Clock_none;
8.9 }
8.10
8.11 static const char list_clocks_separator[] = "--------------------------------";
8.12 @@ -375,14 +375,14 @@
8.13 enum Clock_identifiers clock;
8.14
8.15 if ((token = read_token("Clock")) == NULL)
8.16 - return Clock_undefined;
8.17 + return Clock_none;
8.18
8.19 clock = get_clock(token);
8.20
8.21 - if (clock == Clock_undefined)
8.22 + if (clock == Clock_none)
8.23 {
8.24 printf("Unrecognised clock: %s\n", token);
8.25 - return Clock_undefined;
8.26 + return Clock_none;
8.27 }
8.28
8.29 return clock;
8.30 @@ -395,7 +395,7 @@
8.31
8.32 clock = get_clock_by_name();
8.33
8.34 - if (clock == Clock_undefined)
8.35 + if (clock == Clock_none)
8.36 return;
8.37
8.38 if (!read_number("Frequency", &frequency))
8.39 @@ -414,7 +414,7 @@
8.40
8.41 clock = get_clock_by_name();
8.42
8.43 - if (clock == Clock_undefined)
8.44 + if (clock == Clock_none)
8.45 return;
8.46
8.47 for (num_parameters = 0; num_parameters < 4; num_parameters++)
8.48 @@ -442,7 +442,7 @@
8.49
8.50 clock = get_clock_by_name();
8.51
8.52 - if (clock == Clock_undefined)
8.53 + if (clock == Clock_none)
8.54 return;
8.55
8.56 if (!read_number("Source", &source))
8.57 @@ -457,7 +457,7 @@
8.58
8.59 clock = get_clock_by_name();
8.60
8.61 - if (clock == Clock_undefined)
8.62 + if (clock == Clock_none)
8.63 return;
8.64
8.65 cpm_start_clock(cpm, clock);
8.66 @@ -469,7 +469,7 @@
8.67
8.68 clock = get_clock_by_name();
8.69
8.70 - if (clock == Clock_undefined)
8.71 + if (clock == Clock_none)
8.72 return;
8.73
8.74 cpm_stop_clock(cpm, clock);
9.1 --- a/pkg/landfall-examples/hw_info/jz4780.c Fri Nov 17 14:09:35 2023 +0100
9.2 +++ b/pkg/landfall-examples/hw_info/jz4780.c Fri Nov 17 18:38:44 2023 +0100
9.3 @@ -531,7 +531,8 @@
9.4 {"uart2", Clock_uart2, "UART2"},
9.5 {"uart3", Clock_uart3, "UART3"},
9.6 {"uart4", Clock_uart4, "UART4"},
9.7 - {NULL, Clock_undefined, NULL},
9.8 + {"usbphy", Clock_usb_phy, "USB PHY"},
9.9 + {NULL, Clock_none, NULL},
9.10 };
9.11
9.12
10.1 --- a/pkg/landfall-examples/hw_info/x1600.c Fri Nov 17 14:09:35 2023 +0100
10.2 +++ b/pkg/landfall-examples/hw_info/x1600.c Fri Nov 17 18:38:44 2023 +0100
10.3 @@ -505,7 +505,8 @@
10.4 {"uart1", Clock_uart1, "UART1"},
10.5 {"uart2", Clock_uart2, "UART2"},
10.6 {"uart3", Clock_uart3, "UART3"},
10.7 - {NULL, Clock_undefined, NULL},
10.8 + {"usbphy", Clock_usb_phy, "USB PHY"},
10.9 + {NULL, Clock_none, NULL},
10.10 };
10.11
10.12