Kernel-4.18.0-80.el8_at91-clock

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” or
    “atmel,sama5d4-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
    

    “atmel,sama5d2-clk-generated”:

      at91 generated clock
    

    “atmel,sama5d2-clk-audio-pll-frac”:

      at91 audio fractional pll
    

    “atmel,sama5d2-clk-audio-pll-pad”:

      at91 audio pll CLK_AUDIO output pin
    

    “atmel,sama5d2-clk-audio-pll-pmc”

      at91 audio pll output on AUDIOPLLCLK that feeds the PMC
      and can be used by peripheral clock or generic 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 peripheral 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>;
};

Required properties for generated 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 generated clock source phandles.
    e.g. clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>, <&mck>, <&audio_pll_pmc>;
  • name: device tree node describing a specific generated 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).

For example:
gck {
compatible = “atmel,sama5d2-clk-generated”;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>, <&mck>, <&audio_pll_pmc>;

    tcb0_gclk: tcb0_gclk {
        #clock-cells = <0>;
        reg = <35>;
        atmel,clk-output-range = <0 83000000>;
    };

    pwm_gclk: pwm_gclk {
        #clock-cells = <0>;
        reg = <38>;
        atmel,clk-output-range = <0 83000000>;
    };
};