| Imagination Technologies Pistachio SoC clock controllers |
| ======================================================== |
| |
| Pistachio has four clock controllers (core clock, peripheral clock, peripheral |
| general control, and top general control) which are instantiated individually |
| from the device-tree. |
| |
| External clocks: |
| ---------------- |
| |
| There are three external inputs to the clock controllers which should be |
| defined with the following clock-output-names: |
| - "xtal": External 52Mhz oscillator (required) |
| - "audio_clk_in": Alternate audio reference clock (optional) |
| - "enet_clk_in": Alternate ethernet PHY clock (optional) |
| |
| Core clock controller: |
| ---------------------- |
| |
| The core clock controller generates clocks for the CPU, RPU (WiFi + BT |
| co-processor), audio, and several peripherals. |
| |
| Required properties: |
| - compatible: Must be "img,pistachio-clk". |
| - reg: Must contain the base address and length of the core clock controller. |
| - #clock-cells: Must be 1. The single cell is the clock identifier. |
| See dt-bindings/clock/pistachio-clk.h for the list of valid identifiers. |
| - clocks: Must contain an entry for each clock in clock-names. |
| - clock-names: Must include "xtal" (see "External clocks") and |
| "audio_clk_in_gate", "enet_clk_in_gate" which are generated by the |
| top-level general control. |
| |
| Example: |
| clk_core: clock-controller@18144000 { |
| compatible = "img,pistachio-clk"; |
| reg = <0x18144000 0x800>; |
| clocks = <&xtal>, <&cr_top EXT_CLK_AUDIO_IN>, |
| <&cr_top EXT_CLK_ENET_IN>; |
| clock-names = "xtal", "audio_clk_in_gate", "enet_clk_in_gate"; |
| |
| #clock-cells = <1>; |
| }; |
| |
| Peripheral clock controller: |
| ---------------------------- |
| |
| The peripheral clock controller generates clocks for the DDR, ROM, and other |
| peripherals. The peripheral system clock ("periph_sys") generated by the core |
| clock controller is the input clock to the peripheral clock controller. |
| |
| Required properties: |
| - compatible: Must be "img,pistachio-periph-clk". |
| - reg: Must contain the base address and length of the peripheral clock |
| controller. |
| - #clock-cells: Must be 1. The single cell is the clock identifier. |
| See dt-bindings/clock/pistachio-clk.h for the list of valid identifiers. |
| - clocks: Must contain an entry for each clock in clock-names. |
| - clock-names: Must include "periph_sys", the peripheral system clock generated |
| by the core clock controller. |
| |
| Example: |
| clk_periph: clock-controller@18144800 { |
| compatible = "img,pistachio-clk-periph"; |
| reg = <0x18144800 0x800>; |
| clocks = <&clk_core CLK_PERIPH_SYS>; |
| clock-names = "periph_sys"; |
| |
| #clock-cells = <1>; |
| }; |
| |
| Peripheral general control: |
| --------------------------- |
| |
| The peripheral general control block generates system interface clocks and |
| resets for various peripherals. It also contains miscellaneous peripheral |
| control registers. The system clock ("sys") generated by the peripheral clock |
| controller is the input clock to the system clock controller. |
| |
| Required properties: |
| - compatible: Must include "img,pistachio-periph-cr" and "syscon". |
| - reg: Must contain the base address and length of the peripheral general |
| control registers. |
| - #clock-cells: Must be 1. The single cell is the clock identifier. |
| See dt-bindings/clock/pistachio-clk.h for the list of valid identifiers. |
| - clocks: Must contain an entry for each clock in clock-names. |
| - clock-names: Must include "sys", the system clock generated by the peripheral |
| clock controller. |
| |
| Example: |
| cr_periph: syscon@18144800 { |
| compatible = "img,pistachio-cr-periph", "syscon"; |
| reg = <0x18148000 0x1000>; |
| clocks = <&clock_periph PERIPH_CLK_PERIPH_SYS>; |
| clock-names = "sys"; |
| |
| #clock-cells = <1>; |
| }; |
| |
| Top-level general control: |
| -------------------------- |
| |
| The top-level general control block contains miscellaneous control registers and |
| gates for the external clocks "audio_clk_in" and "enet_clk_in". |
| |
| Required properties: |
| - compatible: Must include "img,pistachio-cr-top" and "syscon". |
| - reg: Must contain the base address and length of the top-level |
| control registers. |
| - clocks: Must contain an entry for each clock in clock-names. |
| - clock-names: Two optional clocks, "audio_clk_in" and "enet_clk_in" (see |
| "External clocks"). |
| - #clock-cells: Must be 1. The single cell is the clock identifier. |
| See dt-bindings/clock/pistachio-clk.h for the list of valid identifiers. |
| |
| Example: |
| cr_top: syscon@18144800 { |
| compatible = "img,pistachio-cr-top", "syscon"; |
| reg = <0x18149000 0x200>; |
| clocks = <&audio_refclk>, <&ext_enet_in>; |
| clock-names = "audio_clk_in", "enet_clk_in"; |
| |
| #clock-cells = <1>; |
| }; |