Tom Rini | 53633a8 | 2024-02-29 12:33:36 -0500 | [diff] [blame] | 1 | * NXP LPC1850 Clock Generation Unit (CGU) |
| 2 | |
| 3 | The CGU generates multiple independent clocks for the core and the |
| 4 | peripheral blocks of the LPC18xx. Each independent clock is called |
| 5 | a base clock and itself is one of the inputs to the two Clock |
| 6 | Control Units (CCUs) which control the branch clocks to the |
| 7 | individual peripherals. |
| 8 | |
| 9 | The CGU selects the inputs to the clock generators from multiple |
| 10 | clock sources, controls the clock generation, and routes the outputs |
| 11 | of the clock generators through the clock source bus to the output |
| 12 | stages. Each output stage provides an independent clock source and |
| 13 | corresponds to one of the base clocks for the LPC18xx. |
| 14 | |
| 15 | - Above text taken from NXP LPC1850 User Manual. |
| 16 | |
| 17 | |
| 18 | This binding uses the common clock binding: |
| 19 | Documentation/devicetree/bindings/clock/clock-bindings.txt |
| 20 | |
| 21 | Required properties: |
| 22 | - compatible: |
| 23 | Should be "nxp,lpc1850-cgu" |
| 24 | - reg: |
| 25 | Shall define the base and range of the address space |
| 26 | containing clock control registers |
| 27 | - #clock-cells: |
| 28 | Shall have value <1>. The permitted clock-specifier values |
| 29 | are the base clock numbers defined below. |
| 30 | - clocks: |
| 31 | Shall contain a list of phandles for the external input |
| 32 | sources to the CGU. The list shall be in the following |
| 33 | order: xtal, 32khz, enet_rx_clk, enet_tx_clk, gp_clkin. |
| 34 | - clock-indices: |
| 35 | Shall be an ordered list of numbers defining the base clock |
| 36 | number provided by the CGU. |
| 37 | - clock-output-names: |
| 38 | Shall be an ordered list of strings defining the names of |
| 39 | the clocks provided by the CGU. |
| 40 | |
| 41 | Which base clocks that are available on the CGU depends on the |
| 42 | specific LPC part. Base clocks are numbered from 0 to 27. |
| 43 | |
| 44 | Number: Name: Description: |
| 45 | 0 BASE_SAFE_CLK Base safe clock (always on) for WWDT |
| 46 | 1 BASE_USB0_CLK Base clock for USB0 |
| 47 | 2 BASE_PERIPH_CLK Base clock for Cortex-M0SUB subsystem, |
| 48 | SPI, and SGPIO |
| 49 | 3 BASE_USB1_CLK Base clock for USB1 |
| 50 | 4 BASE_CPU_CLK System base clock for ARM Cortex-M core |
| 51 | and APB peripheral blocks #0 and #2 |
| 52 | 5 BASE_SPIFI_CLK Base clock for SPIFI |
| 53 | 6 BASE_SPI_CLK Base clock for SPI |
| 54 | 7 BASE_PHY_RX_CLK Base clock for Ethernet PHY Receive clock |
| 55 | 8 BASE_PHY_TX_CLK Base clock for Ethernet PHY Transmit clock |
| 56 | 9 BASE_APB1_CLK Base clock for APB peripheral block # 1 |
| 57 | 10 BASE_APB3_CLK Base clock for APB peripheral block # 3 |
| 58 | 11 BASE_LCD_CLK Base clock for LCD |
| 59 | 12 BASE_ADCHS_CLK Base clock for ADCHS |
| 60 | 13 BASE_SDIO_CLK Base clock for SD/MMC |
| 61 | 14 BASE_SSP0_CLK Base clock for SSP0 |
| 62 | 15 BASE_SSP1_CLK Base clock for SSP1 |
| 63 | 16 BASE_UART0_CLK Base clock for UART0 |
| 64 | 17 BASE_UART1_CLK Base clock for UART1 |
| 65 | 18 BASE_UART2_CLK Base clock for UART2 |
| 66 | 19 BASE_UART3_CLK Base clock for UART3 |
| 67 | 20 BASE_OUT_CLK Base clock for CLKOUT pin |
| 68 | 24-21 - Reserved |
| 69 | 25 BASE_AUDIO_CLK Base clock for audio system (I2S) |
| 70 | 26 BASE_CGU_OUT0_CLK Base clock for CGU_OUT0 clock output |
| 71 | 27 BASE_CGU_OUT1_CLK Base clock for CGU_OUT1 clock output |
| 72 | |
| 73 | BASE_PERIPH_CLK and BASE_SPI_CLK is only available on LPC43xx. |
| 74 | BASE_ADCHS_CLK is only available on LPC4370. |
| 75 | |
| 76 | |
| 77 | Example board file: |
| 78 | |
| 79 | / { |
| 80 | clocks { |
| 81 | xtal: xtal { |
| 82 | compatible = "fixed-clock"; |
| 83 | #clock-cells = <0>; |
| 84 | clock-frequency = <12000000>; |
| 85 | }; |
| 86 | |
| 87 | xtal32: xtal32 { |
| 88 | compatible = "fixed-clock"; |
| 89 | #clock-cells = <0>; |
| 90 | clock-frequency = <32768>; |
| 91 | }; |
| 92 | |
| 93 | enet_rx_clk: enet_rx_clk { |
| 94 | compatible = "fixed-clock"; |
| 95 | #clock-cells = <0>; |
| 96 | clock-frequency = <0>; |
| 97 | clock-output-names = "enet_rx_clk"; |
| 98 | }; |
| 99 | |
| 100 | enet_tx_clk: enet_tx_clk { |
| 101 | compatible = "fixed-clock"; |
| 102 | #clock-cells = <0>; |
| 103 | clock-frequency = <0>; |
| 104 | clock-output-names = "enet_tx_clk"; |
| 105 | }; |
| 106 | |
| 107 | gp_clkin: gp_clkin { |
| 108 | compatible = "fixed-clock"; |
| 109 | #clock-cells = <0>; |
| 110 | clock-frequency = <0>; |
| 111 | clock-output-names = "gp_clkin"; |
| 112 | }; |
| 113 | }; |
| 114 | |
| 115 | soc { |
| 116 | cgu: clock-controller@40050000 { |
| 117 | compatible = "nxp,lpc1850-cgu"; |
| 118 | reg = <0x40050000 0x1000>; |
| 119 | #clock-cells = <1>; |
| 120 | clocks = <&xtal>, <&creg_clk 1>, <&enet_rx_clk>, <&enet_tx_clk>, <&gp_clkin>; |
| 121 | }; |
| 122 | |
| 123 | /* A CGU and CCU clock consumer */ |
| 124 | lcdc: lcdc@40008000 { |
| 125 | ... |
| 126 | clocks = <&cgu BASE_LCD_CLK>, <&ccu1 CLK_CPU_LCD>; |
| 127 | clock-names = "clcdclk", "apb_pclk"; |
| 128 | ... |
| 129 | }; |
| 130 | }; |
| 131 | }; |