xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/arm/marvell/cp110-system-controller.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunMarvell Armada CP110 System Controller
2*4882a593Smuzhiyun======================================
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunThe CP110 is one of the two core HW blocks of the Marvell Armada 7K/8K
5*4882a593SmuzhiyunSoCs. It contains system controllers, which provide several registers
6*4882a593Smuzhiyungiving access to numerous features: clocks, pin-muxing and many other
7*4882a593SmuzhiyunSoC configuration items. This DT binding allows to describe these
8*4882a593Smuzhiyunsystem controllers.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunFor the top level node:
11*4882a593Smuzhiyun - compatible: must be: "syscon", "simple-mfd";
12*4882a593Smuzhiyun - reg: register area of the CP110 system controller
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunSYSTEM CONTROLLER 0
15*4882a593Smuzhiyun===================
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunClocks:
18*4882a593Smuzhiyun-------
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunThe Device Tree node representing this System Controller 0 provides a
21*4882a593Smuzhiyunnumber of clocks:
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun - a set of core clocks
24*4882a593Smuzhiyun - a set of gatable clocks
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunThose clocks can be referenced by other Device Tree nodes using two
27*4882a593Smuzhiyuncells:
28*4882a593Smuzhiyun - The first cell must be 0 or 1. 0 for the core clocks and 1 for the
29*4882a593Smuzhiyun   gatable clocks.
30*4882a593Smuzhiyun - The second cell identifies the particular core clock or gatable
31*4882a593Smuzhiyun   clocks.
32*4882a593Smuzhiyun
33*4882a593SmuzhiyunThe following clocks are available:
34*4882a593Smuzhiyun - Core clocks
35*4882a593Smuzhiyun   - 0 0	APLL
36*4882a593Smuzhiyun   - 0 1	PPv2 core
37*4882a593Smuzhiyun   - 0 2	EIP
38*4882a593Smuzhiyun   - 0 3	Core
39*4882a593Smuzhiyun   - 0 4	NAND core
40*4882a593Smuzhiyun   - 0 5	SDIO core
41*4882a593Smuzhiyun - Gatable clocks
42*4882a593Smuzhiyun   - 1 0	Audio
43*4882a593Smuzhiyun   - 1 1	Comm Unit
44*4882a593Smuzhiyun   - 1 2	NAND
45*4882a593Smuzhiyun   - 1 3	PPv2
46*4882a593Smuzhiyun   - 1 4	SDIO
47*4882a593Smuzhiyun   - 1 5	MG Domain
48*4882a593Smuzhiyun   - 1 6	MG Core
49*4882a593Smuzhiyun   - 1 7	XOR1
50*4882a593Smuzhiyun   - 1 8	XOR0
51*4882a593Smuzhiyun   - 1 9	GOP DP
52*4882a593Smuzhiyun   - 1 11	PCIe x1 0
53*4882a593Smuzhiyun   - 1 12	PCIe x1 1
54*4882a593Smuzhiyun   - 1 13	PCIe x4
55*4882a593Smuzhiyun   - 1 14	PCIe / XOR
56*4882a593Smuzhiyun   - 1 15	SATA
57*4882a593Smuzhiyun   - 1 16	SATA USB
58*4882a593Smuzhiyun   - 1 17	Main
59*4882a593Smuzhiyun   - 1 18	SD/MMC/GOP
60*4882a593Smuzhiyun   - 1 21	Slow IO (SPI, NOR, BootROM, I2C, UART)
61*4882a593Smuzhiyun   - 1 22	USB3H0
62*4882a593Smuzhiyun   - 1 23	USB3H1
63*4882a593Smuzhiyun   - 1 24	USB3 Device
64*4882a593Smuzhiyun   - 1 25	EIP150
65*4882a593Smuzhiyun   - 1 26	EIP197
66*4882a593Smuzhiyun
67*4882a593SmuzhiyunRequired properties:
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun - compatible: must be:
70*4882a593Smuzhiyun     "marvell,cp110-clock"
71*4882a593Smuzhiyun - #clock-cells: must be set to 2
72*4882a593Smuzhiyun
73*4882a593SmuzhiyunPinctrl:
74*4882a593Smuzhiyun--------
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunFor common binding part and usage, refer to the file
77*4882a593SmuzhiyunDocumentation/devicetree/bindings/pinctrl/marvell,mvebu-pinctrl.txt.
78*4882a593Smuzhiyun
79*4882a593SmuzhiyunRequired properties:
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun- compatible: "marvell,armada-7k-pinctrl", "marvell,armada-8k-cpm-pinctrl",
82*4882a593Smuzhiyun  "marvell,armada-8k-cps-pinctrl" or "marvell,cp115-standalone-pinctrl"
83*4882a593Smuzhiyun  depending on the specific variant of the SoC being used.
84*4882a593Smuzhiyun
85*4882a593SmuzhiyunAvailable mpp pins/groups and functions:
86*4882a593SmuzhiyunNote: brackets (x) are not part of the mpp name for marvell,function and given
87*4882a593Smuzhiyunonly for more detailed description in this document.
88*4882a593Smuzhiyun
89*4882a593Smuzhiyunname	pins	functions
90*4882a593Smuzhiyun================================================================================
91*4882a593Smuzhiyunmpp0	0	gpio, dev(ale1), au(i2smclk), ge0(rxd3), tdm(pclk), ptp(pulse), mss_i2c(sda), uart0(rxd), sata0(present_act), ge(mdio)
92*4882a593Smuzhiyunmpp1	1	gpio, dev(ale0), au(i2sdo_spdifo), ge0(rxd2), tdm(drx), ptp(clk), mss_i2c(sck), uart0(txd), sata1(present_act), ge(mdc)
93*4882a593Smuzhiyunmpp2	2	gpio, dev(ad15), au(i2sextclk), ge0(rxd1), tdm(dtx), mss_uart(rxd), ptp(pclk_out), i2c1(sck), uart1(rxd), sata0(present_act), xg(mdc)
94*4882a593Smuzhiyunmpp3	3	gpio, dev(ad14), au(i2slrclk), ge0(rxd0), tdm(fsync), mss_uart(txd), pcie(rstoutn), i2c1(sda), uart1(txd), sata1(present_act), xg(mdio)
95*4882a593Smuzhiyunmpp4	4	gpio, dev(ad13), au(i2sbclk), ge0(rxctl), tdm(rstn), mss_uart(rxd), uart1(cts), pcie0(clkreq), uart3(rxd), ge(mdc)
96*4882a593Smuzhiyunmpp5	5	gpio, dev(ad12), au(i2sdi), ge0(rxclk), tdm(intn), mss_uart(txd), uart1(rts), pcie1(clkreq), uart3(txd), ge(mdio)
97*4882a593Smuzhiyunmpp6	6	gpio, dev(ad11), ge0(txd3), spi0(csn2), au(i2sextclk), sata1(present_act), pcie2(clkreq), uart0(rxd), ptp(pulse)
98*4882a593Smuzhiyunmpp7	7	gpio, dev(ad10), ge0(txd2), spi0(csn1), spi1(csn1), sata0(present_act), led(data), uart0(txd), ptp(clk)
99*4882a593Smuzhiyunmpp8	8	gpio, dev(ad9), ge0(txd1), spi0(csn0), spi1(csn0), uart0(cts), led(stb), uart2(rxd), ptp(pclk_out), synce1(clk)
100*4882a593Smuzhiyunmpp9	9	gpio, dev(ad8), ge0(txd0), spi0(mosi), spi1(mosi), pcie(rstoutn), synce2(clk)
101*4882a593Smuzhiyunmpp10	10	gpio, dev(readyn), ge0(txctl), spi0(miso), spi1(miso), uart0(cts), sata1(present_act)
102*4882a593Smuzhiyunmpp11	11	gpio, dev(wen1), ge0(txclkout), spi0(clk), spi1(clk), uart0(rts), led(clk), uart2(txd), sata0(present_act)
103*4882a593Smuzhiyunmpp12	12	gpio, dev(clk_out), nf(rbn1), spi1(csn1), ge0(rxclk)
104*4882a593Smuzhiyunmpp13	13	gpio, dev(burstn), nf(rbn0), spi1(miso), ge0(rxctl), mss_spi(miso)
105*4882a593Smuzhiyunmpp14	14	gpio, dev(bootcsn), dev(csn0), spi1(csn0), spi0(csn3), au(i2sextclk), spi0(miso), sata0(present_act), mss_spi(csn)
106*4882a593Smuzhiyunmpp15	15	gpio, dev(ad7), spi1(mosi), spi0(mosi), mss_spi(mosi), ptp(pulse_cp2cp)
107*4882a593Smuzhiyunmpp16	16	gpio, dev(ad6), spi1(clk), mss_spi(clk)
108*4882a593Smuzhiyunmpp17	17	gpio, dev(ad5), ge0(txd3)
109*4882a593Smuzhiyunmpp18	18	gpio, dev(ad4), ge0(txd2), ptp(clk_cp2cp)
110*4882a593Smuzhiyunmpp19	19	gpio, dev(ad3), ge0(txd1), wakeup(out_cp2cp)
111*4882a593Smuzhiyunmpp20	20	gpio, dev(ad2), ge0(txd0)
112*4882a593Smuzhiyunmpp21	21	gpio, dev(ad1), ge0(txctl), sei(in_cp2cp)
113*4882a593Smuzhiyunmpp22	22	gpio, dev(ad0), ge0(txclkout), wakeup(in_cp2cp)
114*4882a593Smuzhiyunmpp23	23	gpio, dev(a1), au(i2smclk), link(rd_in_cp2cp)
115*4882a593Smuzhiyunmpp24	24	gpio, dev(a0), au(i2slrclk)
116*4882a593Smuzhiyunmpp25	25	gpio, dev(oen), au(i2sdo_spdifo)
117*4882a593Smuzhiyunmpp26	26	gpio, dev(wen0), au(i2sbclk)
118*4882a593Smuzhiyunmpp27	27	gpio, dev(csn0), spi1(miso), mss_gpio4, ge0(rxd3), spi0(csn4), ge(mdio), sata0(present_act), uart0(rts), rei(in_cp2cp)
119*4882a593Smuzhiyunmpp28	28	gpio, dev(csn1), spi1(csn0), mss_gpio5, ge0(rxd2), spi0(csn5), pcie2(clkreq), ptp(pulse), ge(mdc), sata1(present_act), uart0(cts), led(data)
120*4882a593Smuzhiyunmpp29	29	gpio, dev(csn2), spi1(mosi), mss_gpio6, ge0(rxd1), spi0(csn6), pcie1(clkreq), ptp(clk), mss_i2c(sda), sata0(present_act), uart0(rxd), led(stb)
121*4882a593Smuzhiyunmpp30	30	gpio, dev(csn3), spi1(clk), mss_gpio7, ge0(rxd0), spi0(csn7), pcie0(clkreq), ptp(pclk_out), mss_i2c(sck), sata1(present_act), uart0(txd), led(clk)
122*4882a593Smuzhiyunmpp31	31	gpio, dev(a2), mss_gpio4, pcie(rstoutn), ge(mdc)
123*4882a593Smuzhiyunmpp32	32	gpio, mii(col), mii(txerr), mss_spi(miso), tdm(drx), au(i2sextclk), au(i2sdi), ge(mdio), sdio(v18_en), pcie1(clkreq), mss_gpio0
124*4882a593Smuzhiyunmpp33	33	gpio, mii(txclk), sdio(pwr10), mss_spi(csn), tdm(fsync), au(i2smclk), sdio(bus_pwr), xg(mdio), pcie2(clkreq), mss_gpio1
125*4882a593Smuzhiyunmpp34	34	gpio, mii(rxerr), sdio(pwr11), mss_spi(mosi), tdm(dtx), au(i2slrclk), sdio(wr_protect), ge(mdc), pcie0(clkreq), mss_gpio2
126*4882a593Smuzhiyunmpp35	35	gpio, sata1(present_act), i2c1(sda), mss_spi(clk), tdm(pclk), au(i2sdo_spdifo), sdio(card_detect), xg(mdio), ge(mdio), pcie(rstoutn), mss_gpio3
127*4882a593Smuzhiyunmpp36	36	gpio, synce2(clk), i2c1(sck), ptp(clk), synce1(clk), au(i2sbclk), sata0(present_act), xg(mdc), ge(mdc), pcie2(clkreq), mss_gpio5
128*4882a593Smuzhiyunmpp37	37	gpio, uart2(rxd), i2c0(sck), ptp(pclk_out), tdm(intn), mss_i2c(sck), sata1(present_act), ge(mdc), xg(mdc), pcie1(clkreq), mss_gpio6, link(rd_out_cp2cp)
129*4882a593Smuzhiyunmpp38	38	gpio, uart2(txd), i2c0(sda), ptp(pulse), tdm(rstn), mss_i2c(sda), sata0(present_act), ge(mdio), xg(mdio), au(i2sextclk), mss_gpio7, ptp(pulse_cp2cp)
130*4882a593Smuzhiyunmpp39	39	gpio, sdio(wr_protect), au(i2sbclk), ptp(clk), spi0(csn1), sata1(present_act), mss_gpio0
131*4882a593Smuzhiyunmpp40	40	gpio, sdio(pwr11), synce1(clk), mss_i2c(sda), au(i2sdo_spdifo), ptp(pclk_out), spi0(clk), uart1(txd), ge(mdio), sata0(present_act), mss_gpio1
132*4882a593Smuzhiyunmpp41	41	gpio, sdio(pwr10), sdio(bus_pwr), mss_i2c(sck), au(i2slrclk), ptp(pulse), spi0(mosi), uart1(rxd), ge(mdc), sata1(present_act), mss_gpio2, rei(out_cp2cp)
133*4882a593Smuzhiyunmpp42	42	gpio, sdio(v18_en), sdio(wr_protect), synce2(clk), au(i2smclk), mss_uart(txd), spi0(miso), uart1(cts), xg(mdc), sata0(present_act), mss_gpio4
134*4882a593Smuzhiyunmpp43	43	gpio, sdio(card_detect), synce1(clk), au(i2sextclk), mss_uart(rxd), spi0(csn0), uart1(rts), xg(mdio), sata1(present_act), mss_gpio5, wakeup(out_cp2cp)
135*4882a593Smuzhiyunmpp44	44	gpio, ge1(txd2), uart0(rts), ptp(clk_cp2cp)
136*4882a593Smuzhiyunmpp45	45	gpio, ge1(txd3), uart0(txd), pcie(rstoutn)
137*4882a593Smuzhiyunmpp46	46	gpio, ge1(txd1), uart1(rts)
138*4882a593Smuzhiyunmpp47	47	gpio, ge1(txd0), spi1(clk), uart1(txd), ge(mdc)
139*4882a593Smuzhiyunmpp48	48	gpio, ge1(txctl_txen), spi1(mosi), xg(mdc), wakeup(in_cp2cp)
140*4882a593Smuzhiyunmpp49	49	gpio, ge1(txclkout), mii(crs), spi1(miso), uart1(rxd), ge(mdio), pcie0(clkreq), sdio(v18_en), sei(out_cp2cp)
141*4882a593Smuzhiyunmpp50	50	gpio, ge1(rxclk), mss_i2c(sda), spi1(csn0), uart2(txd), uart0(rxd), xg(mdio), sdio(pwr11)
142*4882a593Smuzhiyunmpp51	51	gpio, ge1(rxd0), mss_i2c(sck), spi1(csn1), uart2(rxd), uart0(cts), sdio(pwr10)
143*4882a593Smuzhiyunmpp52	52	gpio, ge1(rxd1), synce1(clk), synce2(clk), spi1(csn2), uart1(cts), led(clk), pcie(rstoutn), pcie0(clkreq)
144*4882a593Smuzhiyunmpp53	53	gpio, ge1(rxd2), ptp(clk), spi1(csn3), uart1(rxd), led(stb), sdio(led)
145*4882a593Smuzhiyunmpp54	54	gpio, ge1(rxd3), synce2(clk), ptp(pclk_out), synce1(clk), led(data), sdio(hw_rst), sdio(wr_protect)
146*4882a593Smuzhiyunmpp55	55	gpio, ge1(rxctl_rxdv), ptp(pulse), sdio(led), sdio(card_detect)
147*4882a593Smuzhiyunmpp56	56	gpio, tdm(drx), au(i2sdo_spdifo), spi0(clk), uart1(rxd), sata1(present_act), sdio(clk)
148*4882a593Smuzhiyunmpp57	57	gpio, mss_i2c(sda), ptp(pclk_out), tdm(intn), au(i2sbclk), spi0(mosi), uart1(txd), sata0(present_act), sdio(cmd)
149*4882a593Smuzhiyunmpp58	58	gpio, mss_i2c(sck), ptp(clk), tdm(rstn), au(i2sdi), spi0(miso), uart1(cts), led(clk), sdio(d0)
150*4882a593Smuzhiyunmpp59	59	gpio, mss_gpio7, synce2(clk), tdm(fsync), au(i2slrclk), spi0(csn0), uart0(cts), led(stb), uart1(txd), sdio(d1)
151*4882a593Smuzhiyunmpp60	60	gpio, mss_gpio6, ptp(pulse), tdm(dtx), au(i2smclk), spi0(csn1), uart0(rts), led(data), uart1(rxd), sdio(d2)
152*4882a593Smuzhiyunmpp61	61	gpio, mss_gpio5, ptp(clk), tdm(pclk), au(i2sextclk), spi0(csn2), uart0(txd), uart2(txd), sata1(present_act), ge(mdio), sdio(d3)
153*4882a593Smuzhiyunmpp62	62	gpio, mss_gpio4, synce1(clk), ptp(pclk_out), sata1(present_act), spi0(csn3), uart0(rxd), uart2(rxd), sata0(present_act), ge(mdc)
154*4882a593Smuzhiyun
155*4882a593SmuzhiyunGPIO:
156*4882a593Smuzhiyun-----
157*4882a593Smuzhiyun
158*4882a593SmuzhiyunFor common binding part and usage, refer to
159*4882a593SmuzhiyunDocumentation/devicetree/bindings/gpio/gpio-mvebu.txt.
160*4882a593Smuzhiyun
161*4882a593SmuzhiyunRequired properties:
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun- compatible: "marvell,armada-8k-gpio"
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun- offset: offset address inside the syscon block
166*4882a593Smuzhiyun
167*4882a593SmuzhiyunExample:
168*4882a593Smuzhiyun
169*4882a593SmuzhiyunCP110_LABEL(syscon0): system-controller@440000 {
170*4882a593Smuzhiyun	compatible = "syscon", "simple-mfd";
171*4882a593Smuzhiyun	reg = <0x440000 0x1000>;
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun	CP110_LABEL(clk): clock {
174*4882a593Smuzhiyun		compatible = "marvell,cp110-clock";
175*4882a593Smuzhiyun		#clock-cells = <2>;
176*4882a593Smuzhiyun	};
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun	CP110_LABEL(pinctrl): pinctrl {
179*4882a593Smuzhiyun		compatible = "marvell,armada-8k-cpm-pinctrl";
180*4882a593Smuzhiyun	};
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun	CP110_LABEL(gpio1): gpio@100 {
183*4882a593Smuzhiyun		compatible = "marvell,armada-8k-gpio";
184*4882a593Smuzhiyun		offset = <0x100>;
185*4882a593Smuzhiyun		ngpios = <32>;
186*4882a593Smuzhiyun		gpio-controller;
187*4882a593Smuzhiyun		#gpio-cells = <2>;
188*4882a593Smuzhiyun		gpio-ranges = <&CP110_LABEL(pinctrl) 0 0 32>;
189*4882a593Smuzhiyun	};
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun};
192*4882a593Smuzhiyun
193*4882a593SmuzhiyunSYSTEM CONTROLLER 1
194*4882a593Smuzhiyun===================
195*4882a593Smuzhiyun
196*4882a593SmuzhiyunThermal:
197*4882a593Smuzhiyun--------
198*4882a593Smuzhiyun
199*4882a593SmuzhiyunThe thermal IP can probe the temperature all around the processor. It
200*4882a593Smuzhiyunmay feature several channels, each of them wired to one sensor.
201*4882a593Smuzhiyun
202*4882a593SmuzhiyunIt is possible to setup an overheat interrupt by giving at least one
203*4882a593Smuzhiyuncritical point to any subnode of the thermal-zone node.
204*4882a593Smuzhiyun
205*4882a593SmuzhiyunFor common binding part and usage, refer to
206*4882a593SmuzhiyunDocumentation/devicetree/bindings/thermal/thermal*.yaml
207*4882a593Smuzhiyun
208*4882a593SmuzhiyunRequired properties:
209*4882a593Smuzhiyun- compatible: must be one of:
210*4882a593Smuzhiyun  * marvell,armada-cp110-thermal
211*4882a593Smuzhiyun- reg: register range associated with the thermal functions.
212*4882a593Smuzhiyun
213*4882a593SmuzhiyunOptional properties:
214*4882a593Smuzhiyun- interrupts-extended: overheat interrupt handle. Should point to
215*4882a593Smuzhiyun  a line of the ICU-SEI irqchip (116 is what is usually used by the
216*4882a593Smuzhiyun  firmware). The ICU-SEI will redirect towards interrupt line #37 of the
217*4882a593Smuzhiyun  AP SEI which is shared across all CPs.
218*4882a593Smuzhiyun  See interrupt-controller/interrupts.txt
219*4882a593Smuzhiyun- #thermal-sensor-cells: shall be <1> when thermal-zones subnodes refer
220*4882a593Smuzhiyun  to this IP and represents the channel ID. There is one sensor per
221*4882a593Smuzhiyun  channel. O refers to the thermal IP internal channel.
222*4882a593Smuzhiyun
223*4882a593SmuzhiyunExample:
224*4882a593SmuzhiyunCP110_LABEL(syscon1): system-controller@6f8000 {
225*4882a593Smuzhiyun	compatible = "syscon", "simple-mfd";
226*4882a593Smuzhiyun	reg = <0x6f8000 0x1000>;
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun	CP110_LABEL(thermal): thermal-sensor@70 {
229*4882a593Smuzhiyun		compatible = "marvell,armada-cp110-thermal";
230*4882a593Smuzhiyun		reg = <0x70 0x10>;
231*4882a593Smuzhiyun		interrupts-extended = <&CP110_LABEL(icu_sei) 116 IRQ_TYPE_LEVEL_HIGH>;
232*4882a593Smuzhiyun		#thermal-sensor-cells = <1>;
233*4882a593Smuzhiyun	};
234*4882a593Smuzhiyun};
235