162306a36Sopenharmony_ciMarvell Armada AP80x System Controller
262306a36Sopenharmony_ci======================================
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciThe AP806/AP807 is one of the two core HW blocks of the Marvell Armada
562306a36Sopenharmony_ci7K/8K/931x SoCs. It contains system controllers, which provide several
662306a36Sopenharmony_ciregisters giving access to numerous features: clocks, pin-muxing and
762306a36Sopenharmony_cimany other SoC configuration items. This DT binding allows to describe
862306a36Sopenharmony_cithese system controllers.
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciFor the top level node:
1162306a36Sopenharmony_ci - compatible: must be: "syscon", "simple-mfd";
1262306a36Sopenharmony_ci - reg: register area of the AP80x system controller
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciSYSTEM CONTROLLER 0
1562306a36Sopenharmony_ci===================
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciClocks:
1862306a36Sopenharmony_ci-------
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciThe Device Tree node representing the AP806/AP807 system controller
2262306a36Sopenharmony_ciprovides a number of clocks:
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci - 0: reference clock of CPU cluster 0
2562306a36Sopenharmony_ci - 1: reference clock of CPU cluster 1
2662306a36Sopenharmony_ci - 2: fixed PLL at 1200 Mhz
2762306a36Sopenharmony_ci - 3: MSS clock, derived from the fixed PLL
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciRequired properties:
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci - compatible: must be one of:
3262306a36Sopenharmony_ci   * "marvell,ap806-clock"
3362306a36Sopenharmony_ci   * "marvell,ap807-clock"
3462306a36Sopenharmony_ci - #clock-cells: must be set to 1
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciPinctrl:
3762306a36Sopenharmony_ci--------
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciFor common binding part and usage, refer to
4062306a36Sopenharmony_ciDocumentation/devicetree/bindings/pinctrl/marvell,mvebu-pinctrl.txt.
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciRequired properties:
4362306a36Sopenharmony_ci- compatible must be "marvell,ap806-pinctrl",
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciAvailable mpp pins/groups and functions:
4662306a36Sopenharmony_ciNote: brackets (x) are not part of the mpp name for marvell,function and given
4762306a36Sopenharmony_cionly for more detailed description in this document.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciname	pins	functions
5062306a36Sopenharmony_ci================================================================================
5162306a36Sopenharmony_cimpp0	0	gpio, sdio(clk), spi0(clk)
5262306a36Sopenharmony_cimpp1	1	gpio, sdio(cmd), spi0(miso)
5362306a36Sopenharmony_cimpp2	2	gpio, sdio(d0), spi0(mosi)
5462306a36Sopenharmony_cimpp3	3	gpio, sdio(d1), spi0(cs0n)
5562306a36Sopenharmony_cimpp4	4	gpio, sdio(d2), i2c0(sda)
5662306a36Sopenharmony_cimpp5	5	gpio, sdio(d3), i2c0(sdk)
5762306a36Sopenharmony_cimpp6	6	gpio, sdio(ds)
5862306a36Sopenharmony_cimpp7	7	gpio, sdio(d4), uart1(rxd)
5962306a36Sopenharmony_cimpp8	8	gpio, sdio(d5), uart1(txd)
6062306a36Sopenharmony_cimpp9	9	gpio, sdio(d6), spi0(cs1n)
6162306a36Sopenharmony_cimpp10	10	gpio, sdio(d7)
6262306a36Sopenharmony_cimpp11	11	gpio, uart0(txd)
6362306a36Sopenharmony_cimpp12	12	gpio, sdio(pw_off), sdio(hw_rst)
6462306a36Sopenharmony_cimpp13	13	gpio
6562306a36Sopenharmony_cimpp14	14	gpio
6662306a36Sopenharmony_cimpp15	15	gpio
6762306a36Sopenharmony_cimpp16	16	gpio
6862306a36Sopenharmony_cimpp17	17	gpio
6962306a36Sopenharmony_cimpp18	18	gpio
7062306a36Sopenharmony_cimpp19	19	gpio, uart0(rxd), sdio(pw_off)
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciGPIO:
7362306a36Sopenharmony_ci-----
7462306a36Sopenharmony_ciFor common binding part and usage, refer to
7562306a36Sopenharmony_ciDocumentation/devicetree/bindings/gpio/gpio-mvebu.yaml.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciRequired properties:
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci- compatible: "marvell,armada-8k-gpio"
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci- offset: offset address inside the syscon block
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciOptional properties:
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci- marvell,pwm-offset: offset address of PWM duration control registers inside
8662306a36Sopenharmony_ci  the syscon block
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciExample:
8962306a36Sopenharmony_ciap_syscon: system-controller@6f4000 {
9062306a36Sopenharmony_ci	compatible = "syscon", "simple-mfd";
9162306a36Sopenharmony_ci	reg = <0x6f4000 0x1000>;
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci	ap_clk: clock {
9462306a36Sopenharmony_ci		compatible = "marvell,ap806-clock";
9562306a36Sopenharmony_ci		#clock-cells = <1>;
9662306a36Sopenharmony_ci	};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci	ap_pinctrl: pinctrl {
9962306a36Sopenharmony_ci		compatible = "marvell,ap806-pinctrl";
10062306a36Sopenharmony_ci	};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci	ap_gpio: gpio {
10362306a36Sopenharmony_ci		compatible = "marvell,armada-8k-gpio";
10462306a36Sopenharmony_ci		offset = <0x1040>;
10562306a36Sopenharmony_ci		ngpios = <19>;
10662306a36Sopenharmony_ci		gpio-controller;
10762306a36Sopenharmony_ci		#gpio-cells = <2>;
10862306a36Sopenharmony_ci		gpio-ranges = <&ap_pinctrl 0 0 19>;
10962306a36Sopenharmony_ci		marvell,pwm-offset = <0x10c0>;
11062306a36Sopenharmony_ci		#pwm-cells = <2>;
11162306a36Sopenharmony_ci		clocks = <&ap_clk 3>;
11262306a36Sopenharmony_ci	};
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ciSYSTEM CONTROLLER 1
11662306a36Sopenharmony_ci===================
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ciThermal:
11962306a36Sopenharmony_ci--------
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ciFor common binding part and usage, refer to
12262306a36Sopenharmony_ciDocumentation/devicetree/bindings/thermal/thermal*.yaml
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ciThe thermal IP can probe the temperature all around the processor. It
12562306a36Sopenharmony_cimay feature several channels, each of them wired to one sensor.
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciIt is possible to setup an overheat interrupt by giving at least one
12862306a36Sopenharmony_cicritical point to any subnode of the thermal-zone node.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciRequired properties:
13162306a36Sopenharmony_ci- compatible: must be one of:
13262306a36Sopenharmony_ci  * marvell,armada-ap806-thermal
13362306a36Sopenharmony_ci- reg: register range associated with the thermal functions.
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ciOptional properties:
13662306a36Sopenharmony_ci- interrupts: overheat interrupt handle. Should point to line 18 of the
13762306a36Sopenharmony_ci  SEI irqchip. See interrupt-controller/interrupts.txt
13862306a36Sopenharmony_ci- #thermal-sensor-cells: shall be <1> when thermal-zones subnodes refer
13962306a36Sopenharmony_ci  to this IP and represents the channel ID. There is one sensor per
14062306a36Sopenharmony_ci  channel. O refers to the thermal IP internal channel, while positive
14162306a36Sopenharmony_ci  IDs refer to each CPU.
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ciExample:
14462306a36Sopenharmony_ciap_syscon1: system-controller@6f8000 {
14562306a36Sopenharmony_ci	compatible = "syscon", "simple-mfd";
14662306a36Sopenharmony_ci	reg = <0x6f8000 0x1000>;
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci	ap_thermal: thermal-sensor@80 {
14962306a36Sopenharmony_ci		compatible = "marvell,armada-ap806-thermal";
15062306a36Sopenharmony_ci		reg = <0x80 0x10>;
15162306a36Sopenharmony_ci		interrupt-parent = <&sei>;
15262306a36Sopenharmony_ci		interrupts = <18>;
15362306a36Sopenharmony_ci		#thermal-sensor-cells = <1>;
15462306a36Sopenharmony_ci	};
15562306a36Sopenharmony_ci};
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciCluster clocks:
15862306a36Sopenharmony_ci---------------
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ciDevice Tree Clock bindings for cluster clock of Marvell
16162306a36Sopenharmony_ciAP806/AP807. Each cluster contain up to 2 CPUs running at the same
16262306a36Sopenharmony_cifrequency.
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ciRequired properties:
16562306a36Sopenharmony_ci - compatible: must be one of:
16662306a36Sopenharmony_ci   * "marvell,ap806-cpu-clock"
16762306a36Sopenharmony_ci   * "marvell,ap807-cpu-clock"
16862306a36Sopenharmony_ci- #clock-cells : should be set to 1.
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci- clocks : shall be the input parent clock(s) phandle for the clock
17162306a36Sopenharmony_ci           (one per cluster)
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci- reg: register range associated with the cluster clocks
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ciap_syscon1: system-controller@6f8000 {
17662306a36Sopenharmony_ci	compatible = "marvell,armada-ap806-syscon1", "syscon", "simple-mfd";
17762306a36Sopenharmony_ci	reg = <0x6f8000 0x1000>;
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci	cpu_clk: clock-cpu@278 {
18062306a36Sopenharmony_ci		compatible = "marvell,ap806-cpu-clock";
18162306a36Sopenharmony_ci		clocks = <&ap_clk 0>, <&ap_clk 1>;
18262306a36Sopenharmony_ci		#clock-cells = <1>;
18362306a36Sopenharmony_ci		reg = <0x278 0xa30>;
18462306a36Sopenharmony_ci	};
18562306a36Sopenharmony_ci};
186