Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Binding for a type of flexgen structure found on certain
STMicroelectronics consumer electronics SoC devices

This structure includes:
- a clock cross bar (represented by a mux element)
- a pre and final dividers (represented by a divider and gate elements)

Flexgen structure is a part of Clockgen[1].

Please find an example below:

    Clockgen block diagram
    -------------------------------------------------------------------
   |                     Flexgen structure                             |
   |                  ---------------------------------------------    |
   |                 |    -------       --------       --------    |   |
clk_sysin            |   |       |     |        |     |        |   |   |
---|-----------------|-->|       |     |        |     |        |   |   |
   | |               |   |       |     |        |     |        |   |   |
   | |   -------     |   |       |     |Pre     |     |Final   |   |   |
   | |  |PLL0   |    |   |       |     |Dividers|     |Dividers|   |   |
   | |->|       |    |   |       |     |  x32   |     |  x32   |   |   |
   | |  |  odf_0|----|-->|       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |   -------     |   |       |     |        |     |        |   |   |
   | |               |   |       |     |        |     |        |   |   |
   | |   -------     |   | Clock |     |        |     |        |   |   |
   | |  |PLL1   |    |   |       |     |        |     |        |   |   |
   | |->|       |    |   | Cross |     |        |     |        |   |   |
   | |  |  odf_0|----|-->|       |     |        |     |        | CLK_DIV[31:0]
   | |  |       |    |   | Bar   |====>|        |====>|        |===|=========>
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |  |       |    |   |       |     |        |     |        |   |   |
   | |   -------     |   |       |     |        |     |        |   |   |
   | |               |   |       |     |        |     |        |   |   |
   | |   -------     |   |       |     |        |     |        |   |   |
   | |  |QUADFS |    |   |       |     |        |     |        |   |   |
   | |->|    ch0|----|-->|       |     |        |     |        |   |   |
   |    |       |    |   |       |     |        |     |        |   |   |
   |    |    ch1|----|-->|       |     |        |     |        |   |   |
   |    |       |    |   |       |     |        |     |        |   |   |
   |    |    ch2|----|-->|       |     | DIV    |     | DIV    |   |   |
   |    |       |    |   |       |     |  1 to  |     |  1 to  |   |   |
   |    |    ch3|----|-->|       |     |   1024 |     |     64 |   |   |
   |     -------     |   |       |     |        |     |        |   |   |
   |                 |    -------       --------       --------    |   |
   |                   --------------------------------------------    |
   |                                                                   |
    -------------------------------------------------------------------

This binding uses the common clock binding[2].

[1] Documentation/devicetree/bindings/clock/st/st,clkgen.txt
[2] Documentation/devicetree/bindings/clock/clock-bindings.txt

Required properties:
- compatible : shall be:
  "st,flexgen"
  "st,flexgen-audio", "st,flexgen" (enable clock propagation on parent for
  audio use case)
  "st,flexgen-video", "st,flexgen" (enable clock propagation on parent
					and activate synchronous mode)

- #clock-cells : from common clock binding; shall be set to 1 (multiple clock
  outputs).

- clocks : must be set to the parent's phandle. it's could be output clocks of
  a quadsfs or/and a pll or/and clk_sysin (up to 7 clocks)

- clock-output-names : List of strings used to name the clock outputs.

Example:

	clk_s_c0_flexgen: clk-s-c0-flexgen {

		#clock-cells = <1>;
		compatible = "st,flexgen";

		clocks = <&clk_s_c0_pll0 0>,
			 <&clk_s_c0_pll1 0>,
			 <&clk_s_c0_quadfs 0>,
			 <&clk_s_c0_quadfs 1>,
			 <&clk_s_c0_quadfs 2>,
			 <&clk_s_c0_quadfs 3>,
			 <&clk_sysin>;

		clock-output-names = "clk-icn-gpu",
				     "clk-fdma",
				     "clk-nand",
				     "clk-hva",
				     "clk-proc-stfe",
				     "clk-proc-tp",
				     "clk-rx-icn-dmu",
				     "clk-rx-icn-hva",
				     "clk-icn-cpu",
				     "clk-tx-icn-dmu",
				     "clk-mmc-0",
				     "clk-mmc-1",
				     "clk-jpegdec",
				     "clk-ext2fa9",
				     "clk-ic-bdisp-0",
				     "clk-ic-bdisp-1",
				     "clk-pp-dmu",
				     "clk-vid-dmu",
				     "clk-dss-lpc",
				     "clk-st231-aud-0",
				     "clk-st231-gp-1",
				     "clk-st231-dmu",
				     "clk-icn-lmi",
				     "clk-tx-icn-disp-1",
				     "clk-icn-sbc",
				     "clk-stfe-frc2",
				     "clk-eth-phy",
				     "clk-eth-ref-phyclk",
				     "clk-flash-promip",
				     "clk-main-disp",
				     "clk-aux-disp",
				     "clk-compo-dvp";
	};