18c2ecf20Sopenharmony_ciMarvell Armada AP80x System Controller
28c2ecf20Sopenharmony_ci======================================
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciThe AP806/AP807 is one of the two core HW blocks of the Marvell Armada
58c2ecf20Sopenharmony_ci7K/8K/931x SoCs. It contains system controllers, which provide several
68c2ecf20Sopenharmony_ciregisters giving access to numerous features: clocks, pin-muxing and
78c2ecf20Sopenharmony_cimany other SoC configuration items. This DT binding allows to describe
88c2ecf20Sopenharmony_cithese system controllers.
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ciFor the top level node:
118c2ecf20Sopenharmony_ci - compatible: must be: "syscon", "simple-mfd";
128c2ecf20Sopenharmony_ci - reg: register area of the AP80x system controller
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ciSYSTEM CONTROLLER 0
158c2ecf20Sopenharmony_ci===================
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ciClocks:
188c2ecf20Sopenharmony_ci-------
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciThe Device Tree node representing the AP806/AP807 system controller
228c2ecf20Sopenharmony_ciprovides a number of clocks:
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci - 0: reference clock of CPU cluster 0
258c2ecf20Sopenharmony_ci - 1: reference clock of CPU cluster 1
268c2ecf20Sopenharmony_ci - 2: fixed PLL at 1200 Mhz
278c2ecf20Sopenharmony_ci - 3: MSS clock, derived from the fixed PLL
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciRequired properties:
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci - compatible: must be one of:
328c2ecf20Sopenharmony_ci   * "marvell,ap806-clock"
338c2ecf20Sopenharmony_ci   * "marvell,ap807-clock"
348c2ecf20Sopenharmony_ci - #clock-cells: must be set to 1
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ciPinctrl:
378c2ecf20Sopenharmony_ci--------
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ciFor common binding part and usage, refer to
408c2ecf20Sopenharmony_ciDocumentation/devicetree/bindings/pinctrl/marvell,mvebu-pinctrl.txt.
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciRequired properties:
438c2ecf20Sopenharmony_ci- compatible must be "marvell,ap806-pinctrl",
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciAvailable mpp pins/groups and functions:
468c2ecf20Sopenharmony_ciNote: brackets (x) are not part of the mpp name for marvell,function and given
478c2ecf20Sopenharmony_cionly for more detailed description in this document.
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciname	pins	functions
508c2ecf20Sopenharmony_ci================================================================================
518c2ecf20Sopenharmony_cimpp0	0	gpio, sdio(clk), spi0(clk)
528c2ecf20Sopenharmony_cimpp1	1	gpio, sdio(cmd), spi0(miso)
538c2ecf20Sopenharmony_cimpp2	2	gpio, sdio(d0), spi0(mosi)
548c2ecf20Sopenharmony_cimpp3	3	gpio, sdio(d1), spi0(cs0n)
558c2ecf20Sopenharmony_cimpp4	4	gpio, sdio(d2), i2c0(sda)
568c2ecf20Sopenharmony_cimpp5	5	gpio, sdio(d3), i2c0(sdk)
578c2ecf20Sopenharmony_cimpp6	6	gpio, sdio(ds)
588c2ecf20Sopenharmony_cimpp7	7	gpio, sdio(d4), uart1(rxd)
598c2ecf20Sopenharmony_cimpp8	8	gpio, sdio(d5), uart1(txd)
608c2ecf20Sopenharmony_cimpp9	9	gpio, sdio(d6), spi0(cs1n)
618c2ecf20Sopenharmony_cimpp10	10	gpio, sdio(d7)
628c2ecf20Sopenharmony_cimpp11	11	gpio, uart0(txd)
638c2ecf20Sopenharmony_cimpp12	12	gpio, sdio(pw_off), sdio(hw_rst)
648c2ecf20Sopenharmony_cimpp13	13	gpio
658c2ecf20Sopenharmony_cimpp14	14	gpio
668c2ecf20Sopenharmony_cimpp15	15	gpio
678c2ecf20Sopenharmony_cimpp16	16	gpio
688c2ecf20Sopenharmony_cimpp17	17	gpio
698c2ecf20Sopenharmony_cimpp18	18	gpio
708c2ecf20Sopenharmony_cimpp19	19	gpio, uart0(rxd), sdio(pw_off)
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ciGPIO:
738c2ecf20Sopenharmony_ci-----
748c2ecf20Sopenharmony_ciFor common binding part and usage, refer to
758c2ecf20Sopenharmony_ciDocumentation/devicetree/bindings/gpio/gpio-mvebu.txt.
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ciRequired properties:
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci- compatible: "marvell,armada-8k-gpio"
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci- offset: offset address inside the syscon block
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciExample:
848c2ecf20Sopenharmony_ciap_syscon: system-controller@6f4000 {
858c2ecf20Sopenharmony_ci	compatible = "syscon", "simple-mfd";
868c2ecf20Sopenharmony_ci	reg = <0x6f4000 0x1000>;
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	ap_clk: clock {
898c2ecf20Sopenharmony_ci		compatible = "marvell,ap806-clock";
908c2ecf20Sopenharmony_ci		#clock-cells = <1>;
918c2ecf20Sopenharmony_ci	};
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci	ap_pinctrl: pinctrl {
948c2ecf20Sopenharmony_ci		compatible = "marvell,ap806-pinctrl";
958c2ecf20Sopenharmony_ci	};
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci	ap_gpio: gpio {
988c2ecf20Sopenharmony_ci		compatible = "marvell,armada-8k-gpio";
998c2ecf20Sopenharmony_ci		offset = <0x1040>;
1008c2ecf20Sopenharmony_ci		ngpios = <19>;
1018c2ecf20Sopenharmony_ci		gpio-controller;
1028c2ecf20Sopenharmony_ci		#gpio-cells = <2>;
1038c2ecf20Sopenharmony_ci		gpio-ranges = <&ap_pinctrl 0 0 19>;
1048c2ecf20Sopenharmony_ci	};
1058c2ecf20Sopenharmony_ci};
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ciSYSTEM CONTROLLER 1
1088c2ecf20Sopenharmony_ci===================
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ciThermal:
1118c2ecf20Sopenharmony_ci--------
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ciFor common binding part and usage, refer to
1148c2ecf20Sopenharmony_ciDocumentation/devicetree/bindings/thermal/thermal*.yaml
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ciThe thermal IP can probe the temperature all around the processor. It
1178c2ecf20Sopenharmony_cimay feature several channels, each of them wired to one sensor.
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ciIt is possible to setup an overheat interrupt by giving at least one
1208c2ecf20Sopenharmony_cicritical point to any subnode of the thermal-zone node.
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ciRequired properties:
1238c2ecf20Sopenharmony_ci- compatible: must be one of:
1248c2ecf20Sopenharmony_ci  * marvell,armada-ap806-thermal
1258c2ecf20Sopenharmony_ci- reg: register range associated with the thermal functions.
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ciOptional properties:
1288c2ecf20Sopenharmony_ci- interrupts: overheat interrupt handle. Should point to line 18 of the
1298c2ecf20Sopenharmony_ci  SEI irqchip. See interrupt-controller/interrupts.txt
1308c2ecf20Sopenharmony_ci- #thermal-sensor-cells: shall be <1> when thermal-zones subnodes refer
1318c2ecf20Sopenharmony_ci  to this IP and represents the channel ID. There is one sensor per
1328c2ecf20Sopenharmony_ci  channel. O refers to the thermal IP internal channel, while positive
1338c2ecf20Sopenharmony_ci  IDs refer to each CPU.
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ciExample:
1368c2ecf20Sopenharmony_ciap_syscon1: system-controller@6f8000 {
1378c2ecf20Sopenharmony_ci	compatible = "syscon", "simple-mfd";
1388c2ecf20Sopenharmony_ci	reg = <0x6f8000 0x1000>;
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ci	ap_thermal: thermal-sensor@80 {
1418c2ecf20Sopenharmony_ci		compatible = "marvell,armada-ap806-thermal";
1428c2ecf20Sopenharmony_ci		reg = <0x80 0x10>;
1438c2ecf20Sopenharmony_ci		interrupt-parent = <&sei>;
1448c2ecf20Sopenharmony_ci		interrupts = <18>;
1458c2ecf20Sopenharmony_ci		#thermal-sensor-cells = <1>;
1468c2ecf20Sopenharmony_ci	};
1478c2ecf20Sopenharmony_ci};
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ciCluster clocks:
1508c2ecf20Sopenharmony_ci---------------
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ciDevice Tree Clock bindings for cluster clock of Marvell
1538c2ecf20Sopenharmony_ciAP806/AP807. Each cluster contain up to 2 CPUs running at the same
1548c2ecf20Sopenharmony_cifrequency.
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ciRequired properties:
1578c2ecf20Sopenharmony_ci - compatible: must be one of:
1588c2ecf20Sopenharmony_ci   * "marvell,ap806-cpu-clock"
1598c2ecf20Sopenharmony_ci   * "marvell,ap807-cpu-clock"
1608c2ecf20Sopenharmony_ci- #clock-cells : should be set to 1.
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci- clocks : shall be the input parent clock(s) phandle for the clock
1638c2ecf20Sopenharmony_ci           (one per cluster)
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci- reg: register range associated with the cluster clocks
1668c2ecf20Sopenharmony_ci
1678c2ecf20Sopenharmony_ciap_syscon1: system-controller@6f8000 {
1688c2ecf20Sopenharmony_ci	compatible = "marvell,armada-ap806-syscon1", "syscon", "simple-mfd";
1698c2ecf20Sopenharmony_ci	reg = <0x6f8000 0x1000>;
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci	cpu_clk: clock-cpu@278 {
1728c2ecf20Sopenharmony_ci		compatible = "marvell,ap806-cpu-clock";
1738c2ecf20Sopenharmony_ci		clocks = <&ap_clk 0>, <&ap_clk 1>;
1748c2ecf20Sopenharmony_ci		#clock-cells = <1>;
1758c2ecf20Sopenharmony_ci		reg = <0x278 0xa30>;
1768c2ecf20Sopenharmony_ci	};
1778c2ecf20Sopenharmony_ci};
178