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