| 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>; | |
| }; |