Device Tree Clock bindings for arch-at91 This binding uses the common clock binding[1]. [1] Documentation/devicetree/bindings/clock/clock-bindings.txt Required properties: - compatible : shall be one of the following: "atmel,at91sam9x5-sckc": at91 SCKC (Slow Clock Controller) This node contains the slow clock definitions. "atmel,at91sam9x5-clk-slow-osc": at91 slow oscillator "atmel,at91sam9x5-clk-slow-rc-osc": at91 internal slow RC oscillator "atmel,at91rm9200-pmc" or "atmel,at91sam9g45-pmc" or "atmel,at91sam9n12-pmc" or "atmel,at91sam9x5-pmc" or "atmel,sama5d3-pmc": at91 PMC (Power Management Controller) All at91 specific clocks (clocks defined below) must be child node of the PMC node. "atmel,at91sam9x5-clk-slow" (under sckc node) or "atmel,at91sam9260-clk-slow" (under pmc node): at91 slow clk "atmel,at91rm9200-clk-main-osc" "atmel,at91sam9x5-clk-main-rc-osc" at91 main clk sources "atmel,at91sam9x5-clk-main" "atmel,at91rm9200-clk-main": at91 main clock "atmel,at91rm9200-clk-master" or "atmel,at91sam9x5-clk-master": at91 master clock "atmel,at91sam9x5-clk-peripheral" or "atmel,at91rm9200-clk-peripheral": at91 peripheral clocks "atmel,at91rm9200-clk-pll" or "atmel,at91sam9g45-clk-pll" or "atmel,at91sam9g20-clk-pllb" or "atmel,sama5d3-clk-pll": at91 pll clocks "atmel,at91sam9x5-clk-plldiv": at91 plla divisor "atmel,at91rm9200-clk-programmable" or "atmel,at91sam9g45-clk-programmable" or "atmel,at91sam9x5-clk-programmable": at91 programmable clocks "atmel,at91sam9x5-clk-smd": at91 SMD (Soft Modem) clock "atmel,at91rm9200-clk-system": at91 system clocks "atmel,at91rm9200-clk-usb" or "atmel,at91sam9x5-clk-usb" or "atmel,at91sam9n12-clk-usb": at91 usb clock "atmel,at91sam9x5-clk-utmi": at91 utmi clock "atmel,sama5d4-clk-h32mx": at91 h32mx clock Required properties for SCKC node: - reg : defines the IO memory reserved for the SCKC. - #size-cells : shall be 0 (reg is used to encode clk id). - #address-cells : shall be 1 (reg is used to encode clk id). For example: sckc: sckc@fffffe50 { compatible = "atmel,sama5d3-pmc"; reg = <0xfffffe50 0x4> #size-cells = <0>; #address-cells = <1>; /* put at91 slow clocks here */ }; Required properties for internal slow RC oscillator: - #clock-cells : from common clock binding; shall be set to 0. - clock-frequency : define the internal RC oscillator frequency. Optional properties: - clock-accuracy : define the internal RC oscillator accuracy. For example: slow_rc_osc: slow_rc_osc { compatible = "atmel,at91sam9x5-clk-slow-rc-osc"; clock-frequency = <32768>; clock-accuracy = <50000000>; }; Required properties for slow oscillator: - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall encode the main osc source clk sources (see atmel datasheet). Optional properties: - atmel,osc-bypass : boolean property. Set this when a clock signal is directly provided on XIN. For example: slow_osc: slow_osc { compatible = "atmel,at91rm9200-clk-slow-osc"; #clock-cells = <0>; clocks = <&slow_xtal>; }; Required properties for slow clock: - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall encode the slow clk sources (see atmel datasheet). For example: clk32k: slck { compatible = "atmel,at91sam9x5-clk-slow"; #clock-cells = <0>; clocks = <&slow_rc_osc &slow_osc>; }; Required properties for PMC node: - reg : defines the IO memory reserved for the PMC. - #size-cells : shall be 0 (reg is used to encode clk id). - #address-cells : shall be 1 (reg is used to encode clk id). - interrupts : shall be set to PMC interrupt line. - interrupt-controller : tell that the PMC is an interrupt controller. - #interrupt-cells : must be set to 1. The first cell encodes the interrupt id, and reflect the bit position in the PMC_ER/DR/SR registers. You can use the dt macros defined in dt-bindings/clock/at91.h. 0 (AT91_PMC_MOSCS) -> main oscillator ready 1 (AT91_PMC_LOCKA) -> PLL A ready 2 (AT91_PMC_LOCKB) -> PLL B ready 3 (AT91_PMC_MCKRDY) -> master clock ready 6 (AT91_PMC_LOCKU) -> UTMI PLL clock ready 8 .. 15 (AT91_PMC_PCKRDY(id)) -> programmable clock ready 16 (AT91_PMC_MOSCSELS) -> main oscillator selected 17 (AT91_PMC_MOSCRCS) -> RC main oscillator stabilized 18 (AT91_PMC_CFDEV) -> clock failure detected For example: pmc: pmc@fffffc00 { compatible = "atmel,sama5d3-pmc"; interrupts = <1 4 7>; interrupt-controller; #interrupt-cells = <2>; #size-cells = <0>; #address-cells = <1>; /* put at91 clocks here */ }; Required properties for main clock internal RC oscillator: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "<0>". - clock-frequency : define the internal RC oscillator frequency. Optional properties: - clock-accuracy : define the internal RC oscillator accuracy. For example: main_rc_osc: main_rc_osc { compatible = "atmel,at91sam9x5-clk-main-rc-osc"; interrupt-parent = <&pmc>; interrupts = <0>; clock-frequency = <12000000>; clock-accuracy = <50000000>; }; Required properties for main clock oscillator: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "<0>". - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall encode the main osc source clk sources (see atmel datasheet). Optional properties: - atmel,osc-bypass : boolean property. Specified if a clock signal is provided on XIN. clock signal is directly provided on XIN pin. For example: main_osc: main_osc { compatible = "atmel,at91rm9200-clk-main-osc"; interrupt-parent = <&pmc>; interrupts = <0>; #clock-cells = <0>; clocks = <&main_xtal>; }; Required properties for main clock: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "<0>". - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall encode the main clk sources (see atmel datasheet). For example: main: mainck { compatible = "atmel,at91sam9x5-clk-main"; interrupt-parent = <&pmc>; interrupts = <0>; #clock-cells = <0>; clocks = <&main_rc_osc &main_osc>; }; Required properties for master clock: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "<3>". - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the master clock sources (see atmel datasheet) phandles. e.g. "<&ck32k>, <&main>, <&plla>, <&pllb>". - atmel,clk-output-range : minimum and maximum clock frequency (two u32 fields). e.g. output = <0 133000000>; <=> 0 to 133MHz. - atmel,clk-divisors : master clock divisors table (four u32 fields). 0 <=> reserved value. e.g. divisors = <1 2 4 6>; - atmel,master-clk-have-div3-pres : some SoC use the reserved value 7 in the PRES field as CLOCK_DIV3 (e.g sam9x5). For example: mck: mck { compatible = "atmel,at91rm9200-clk-master"; interrupt-parent = <&pmc>; interrupts = <3>; #clock-cells = <0>; atmel,clk-output-range = <0 133000000>; atmel,clk-divisors = <1 2 4 0>; }; Required properties for peripheral clocks: - #size-cells : shall be 0 (reg is used to encode clk id). - #address-cells : shall be 1 (reg is used to encode clk id). - clocks : shall be the master clock phandle. e.g. clocks = <&mck>; - name: device tree node describing a specific system clock. * #clock-cells : from common clock binding; shall be set to 0. * reg: peripheral id. See Atmel's datasheets to get a full list of peripheral ids. * atmel,clk-output-range : minimum and maximum clock frequency (two u32 fields). Only valid on at91sam9x5-clk-peripheral compatible IPs. For example: periph: periphck { compatible = "atmel,at91sam9x5-clk-peripheral"; #size-cells = <0>; #address-cells = <1>; clocks = <&mck>; ssc0_clk { #clock-cells = <0>; reg = <2>; atmel,clk-output-range = <0 133000000>; }; usart0_clk { #clock-cells = <0>; reg = <3>; atmel,clk-output-range = <0 66000000>; }; }; Required properties for pll clocks: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "<1>". - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the main clock phandle. - reg : pll id. 0 -> PLL A 1 -> PLL B - atmel,clk-input-range : minimum and maximum source clock frequency (two u32 fields). e.g. input = <1 32000000>; <=> 1 to 32MHz. - #atmel,pll-clk-output-range-cells : number of cells reserved for pll output range description. Sould be set to 2, 3 or 4. * 1st and 2nd cells represent the frequency range (min-max). * 3rd cell is optional and represents the OUT field value for the given range. * 4th cell is optional and represents the ICPLL field (PLLICPR register) - atmel,pll-clk-output-ranges : pll output frequency ranges + optional parameter depending on #atmel,pll-output-range-cells property value. For example: plla: pllack { compatible = "atmel,at91sam9g45-clk-pll"; interrupt-parent = <&pmc>; interrupts = <1>; #clock-cells = <0>; clocks = <&main>; reg = <0>; atmel,clk-input-range = <2000000 32000000>; #atmel,pll-clk-output-range-cells = <4>; atmel,pll-clk-output-ranges = <74500000 800000000 0 0 69500000 750000000 1 0 64500000 700000000 2 0 59500000 650000000 3 0 54500000 600000000 0 1 49500000 550000000 1 1 44500000 500000000 2 1 40000000 450000000 3 1>; }; Required properties for plldiv clocks (plldiv = pll / 2): - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the plla clock phandle. The pll divisor is equal to 2 and cannot be changed. For example: plladiv: plladivck { compatible = "atmel,at91sam9x5-clk-plldiv"; #clock-cells = <0>; clocks = <&plla>; }; Required properties for programmable clocks: - interrupt-parent : must reference the PMC node. - #size-cells : shall be 0 (reg is used to encode clk id). - #address-cells : shall be 1 (reg is used to encode clk id). - clocks : shall be the programmable clock source phandles. e.g. clocks = <&clk32k>, <&main>, <&plla>, <&pllb>; - name: device tree node describing a specific prog clock. * #clock-cells : from common clock binding; shall be set to 0. * reg : programmable clock id (register offset from PCKx register). * interrupts : shall be set to "<(8 + id)>". For example: prog: progck { compatible = "atmel,at91sam9g45-clk-programmable"; #size-cells = <0>; #address-cells = <1>; interrupt-parent = <&pmc>; clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>, <&mck>; prog0 { #clock-cells = <0>; reg = <0>; interrupts = <8>; }; prog1 { #clock-cells = <0>; reg = <1>; interrupts = <9>; }; }; Required properties for smd clock: - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the smd clock source phandles. e.g. clocks = <&plladiv>, <&utmi>; For example: smd: smdck { compatible = "atmel,at91sam9x5-clk-smd"; #clock-cells = <0>; clocks = <&plladiv>, <&utmi>; }; Required properties for system clocks: - #size-cells : shall be 0 (reg is used to encode clk id). - #address-cells : shall be 1 (reg is used to encode clk id). - name: device tree node describing a specific system clock. * #clock-cells : from common clock binding; shall be set to 0. * reg: system clock id (bit position in SCER/SCDR/SCSR registers). See Atmel's datasheet to get a full list of system clock ids. For example: system: systemck { compatible = "atmel,at91rm9200-clk-system"; #address-cells = <1>; #size-cells = <0>; ddrck { #clock-cells = <0>; reg = <2>; clocks = <&mck>; }; uhpck { #clock-cells = <0>; reg = <6>; clocks = <&usb>; }; udpck { #clock-cells = <0>; reg = <7>; clocks = <&usb>; }; }; Required properties for usb clock: - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the smd clock source phandles. e.g. clocks = <&pllb>; - atmel,clk-divisors (only available for "atmel,at91rm9200-clk-usb"): usb clock divisor table. e.g. divisors = <1 2 4 0>; For example: usb: usbck { compatible = "atmel,at91sam9x5-clk-usb"; #clock-cells = <0>; clocks = <&plladiv>, <&utmi>; }; usb: usbck { compatible = "atmel,at91rm9200-clk-usb"; #clock-cells = <0>; clocks = <&pllb>; atmel,clk-divisors = <1 2 4 0>; }; Required properties for utmi clock: - interrupt-parent : must reference the PMC node. - interrupts : shall be set to "". - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the main clock source phandle. For example: utmi: utmick { compatible = "atmel,at91sam9x5-clk-utmi"; interrupt-parent = <&pmc>; interrupts = ; #clock-cells = <0>; clocks = <&main>; }; Required properties for 32 bits bus Matrix clock (h32mx clock): - #clock-cells : from common clock binding; shall be set to 0. - clocks : shall be the master clock source phandle. For example: h32ck: h32mxck { #clock-cells = <0>; compatible = "atmel,sama5d4-clk-h32mx"; clocks = <&mck>; };