1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun/* The pxa3xx skeleton simply augments the 2xx version */ 3*4882a593Smuzhiyun#include "pxa2xx.dtsi" 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun#define MFP_PIN_PXA300(gpio) \ 6*4882a593Smuzhiyun ((gpio <= 2) ? (0x00b4 + 4 * gpio) : \ 7*4882a593Smuzhiyun (gpio <= 26) ? (0x027c + 4 * (gpio - 3)) : \ 8*4882a593Smuzhiyun (gpio <= 98) ? (0x0400 + 4 * (gpio - 27)) : \ 9*4882a593Smuzhiyun (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 10*4882a593Smuzhiyun 0) 11*4882a593Smuzhiyun#define MFP_PIN_PXA300_2(gpio) \ 12*4882a593Smuzhiyun ((gpio <= 1) ? (0x674 + 4 * gpio) : \ 13*4882a593Smuzhiyun (gpio <= 6) ? (0x2dc + 4 * gpio) : \ 14*4882a593Smuzhiyun 0) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun#define MFP_PIN_PXA310(gpio) \ 17*4882a593Smuzhiyun ((gpio <= 2) ? (0x00b4 + 4 * gpio) : \ 18*4882a593Smuzhiyun (gpio <= 26) ? (0x027c + 4 * (gpio - 3)) : \ 19*4882a593Smuzhiyun (gpio <= 29) ? (0x0400 + 4 * (gpio - 27)) : \ 20*4882a593Smuzhiyun (gpio <= 98) ? (0x0418 + 4 * (gpio - 30)) : \ 21*4882a593Smuzhiyun (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 22*4882a593Smuzhiyun (gpio <= 262) ? 0 : \ 23*4882a593Smuzhiyun (gpio <= 268) ? (0x052c + 4 * (gpio - 263)) : \ 24*4882a593Smuzhiyun 0) 25*4882a593Smuzhiyun#define MFP_PIN_PXA310_2(gpio) \ 26*4882a593Smuzhiyun ((gpio <= 1) ? (0x674 + 4 * gpio) : \ 27*4882a593Smuzhiyun (gpio <= 6) ? (0x2dc + 4 * gpio) : \ 28*4882a593Smuzhiyun (gpio <= 10) ? (0x52c + 4 * gpio) : \ 29*4882a593Smuzhiyun 0) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun#define MFP_PIN_PXA320(gpio) \ 32*4882a593Smuzhiyun ((gpio <= 4) ? (0x0124 + 4 * gpio) : \ 33*4882a593Smuzhiyun (gpio <= 9) ? (0x028c + 4 * (gpio - 5)) : \ 34*4882a593Smuzhiyun (gpio <= 10) ? (0x0458 + 4 * (gpio - 10)) : \ 35*4882a593Smuzhiyun (gpio <= 26) ? (0x02a0 + 4 * (gpio - 11)) : \ 36*4882a593Smuzhiyun (gpio <= 48) ? (0x0400 + 4 * (gpio - 27)) : \ 37*4882a593Smuzhiyun (gpio <= 62) ? (0x045c + 4 * (gpio - 49)) : \ 38*4882a593Smuzhiyun (gpio <= 73) ? (0x04b4 + 4 * (gpio - 63)) : \ 39*4882a593Smuzhiyun (gpio <= 98) ? (0x04f0 + 4 * (gpio - 74)) : \ 40*4882a593Smuzhiyun (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 41*4882a593Smuzhiyun 0) 42*4882a593Smuzhiyun#define MFP_PIN_PXA320_2(gpio) \ 43*4882a593Smuzhiyun ((gpio <= 3) ? (0x674 + 4 * gpio) : \ 44*4882a593Smuzhiyun (gpio <= 5) ? (0x284 + 4 * gpio) : \ 45*4882a593Smuzhiyun 0) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun/* 48*4882a593Smuzhiyun * MFP Alternate functions for pins having a gpio. 49*4882a593Smuzhiyun * Example of use: pinctrl-single,pins = < MFP_PIN_PXA310(21) MFP_AF1 > 50*4882a593Smuzhiyun */ 51*4882a593Smuzhiyun#define MFP_AF0 (0 << 0) 52*4882a593Smuzhiyun#define MFP_AF1 (1 << 0) 53*4882a593Smuzhiyun#define MFP_AF2 (2 << 0) 54*4882a593Smuzhiyun#define MFP_AF3 (3 << 0) 55*4882a593Smuzhiyun#define MFP_AF4 (4 << 0) 56*4882a593Smuzhiyun#define MFP_AF5 (5 << 0) 57*4882a593Smuzhiyun#define MFP_AF6 (6 << 0) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun/* 60*4882a593Smuzhiyun * MFP drive strength functions for pins. 61*4882a593Smuzhiyun * Example of use: pinctrl-single,drive-strength = MFP_DS03X; 62*4882a593Smuzhiyun */ 63*4882a593Smuzhiyun#define MFP_DSMSK (0x7 << 10) 64*4882a593Smuzhiyun#define MFP_DS01X < (0x0 << 10) MFP_DSMSK > 65*4882a593Smuzhiyun#define MFP_DS02X < (0x1 << 10) MFP_DSMSK > 66*4882a593Smuzhiyun#define MFP_DS03X < (0x2 << 10) MFP_DSMSK > 67*4882a593Smuzhiyun#define MFP_DS04X < (0x3 << 10) MFP_DSMSK > 68*4882a593Smuzhiyun#define MFP_DS06X < (0x4 << 10) MFP_DSMSK > 69*4882a593Smuzhiyun#define MFP_DS08X < (0x5 << 10) MFP_DSMSK > 70*4882a593Smuzhiyun#define MFP_DS10X < (0x6 << 10) MFP_DSMSK > 71*4882a593Smuzhiyun#define MFP_DS13X < (0x7 << 10) MFP_DSMSK > 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun/* 74*4882a593Smuzhiyun * MFP bias pull mode for pins. 75*4882a593Smuzhiyun * Example of use: pinctrl-single,bias-pullup = MPF_PULL_UP; 76*4882a593Smuzhiyun */ 77*4882a593Smuzhiyun#define MPF_PULL_MSK (0x7 << 13) 78*4882a593Smuzhiyun#define MPF_PULL_DOWN < (0x5 << 13) (0x5 << 13) 0 MPF_PULL_MSK > 79*4882a593Smuzhiyun#define MPF_PULL_UP < (0x6 << 13) (0x6 << 13) 0 MPF_PULL_MSK > 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun/* 82*4882a593Smuzhiyun * MFP low power mode for pins. 83*4882a593Smuzhiyun * Example of use: 84*4882a593Smuzhiyun * pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW|MFP_LPM_EDGE_FALL); 85*4882a593Smuzhiyun * 86*4882a593Smuzhiyun * Table that determines the low power modes outputs, with actual settings 87*4882a593Smuzhiyun * used in parentheses for don't-care values. Except for the float output, 88*4882a593Smuzhiyun * the configured driven and pulled levels match, so if there is a need for 89*4882a593Smuzhiyun * non-LPM pulled output, the same configuration could probably be used. 90*4882a593Smuzhiyun * 91*4882a593Smuzhiyun * Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel 92*4882a593Smuzhiyun * (bit 7) (bit 8) (bit 14) (bit 13) (bit 15) 93*4882a593Smuzhiyun * 94*4882a593Smuzhiyun * Input 0 X(0) X(0) X(0) 0 95*4882a593Smuzhiyun * Drive 0 0 0 0 X(1) 0 96*4882a593Smuzhiyun * Drive 1 0 1 X(1) 0 0 97*4882a593Smuzhiyun * Pull hi (1) 1 X(1) 1 0 0 98*4882a593Smuzhiyun * Pull lo (0) 1 X(0) 0 1 0 99*4882a593Smuzhiyun * Z (float) 1 X(0) 0 0 0 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun#define MFP_LPM(x) < (x) MFP_LPM_MSK > 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun#define MFP_LPM_MSK 0xe1f0 104*4882a593Smuzhiyun#define MFP_LPM_INPUT 0x0000 105*4882a593Smuzhiyun#define MFP_LPM_DRIVE_LOW 0x2000 106*4882a593Smuzhiyun#define MFP_LPM_DRIVE_HIGH 0x4100 107*4882a593Smuzhiyun#define MFP_LPM_PULL_LOW 0x2080 108*4882a593Smuzhiyun#define MFP_LPM_PULL_HIGH 0x4180 109*4882a593Smuzhiyun#define MFP_LPM_FLOAT 0x0080 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun#define MFP_LPM_EDGE_NONE 0x0000 112*4882a593Smuzhiyun#define MFP_LPM_EDGE_RISE 0x0010 113*4882a593Smuzhiyun#define MFP_LPM_EDGE_FALL 0x0020 114*4882a593Smuzhiyun#define MFP_LPM_EDGE_BOTH 0x0030 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun/ { 117*4882a593Smuzhiyun model = "Marvell PXA3xx familiy SoC"; 118*4882a593Smuzhiyun compatible = "marvell,pxa3xx"; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun pxabus { 121*4882a593Smuzhiyun pdma: dma-controller@40000000 { 122*4882a593Smuzhiyun compatible = "marvell,pdma-1.0"; 123*4882a593Smuzhiyun reg = <0x40000000 0x10000>; 124*4882a593Smuzhiyun interrupts = <25>; 125*4882a593Smuzhiyun #dma-channels = <32>; 126*4882a593Smuzhiyun #dma-cells = <2>; 127*4882a593Smuzhiyun #dma-requests = <100>; 128*4882a593Smuzhiyun status = "okay"; 129*4882a593Smuzhiyun }; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun pwri2c: i2c@40f500c0 { 132*4882a593Smuzhiyun compatible = "mrvl,pwri2c"; 133*4882a593Smuzhiyun reg = <0x40f500c0 0x30>; 134*4882a593Smuzhiyun interrupts = <6>; 135*4882a593Smuzhiyun clocks = <&clks CLK_PWRI2C>; 136*4882a593Smuzhiyun #address-cells = <0x1>; 137*4882a593Smuzhiyun #size-cells = <0>; 138*4882a593Smuzhiyun status = "disabled"; 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun nand_controller: nand-controller@43100000 { 142*4882a593Smuzhiyun compatible = "marvell,pxa3xx-nand-controller"; 143*4882a593Smuzhiyun reg = <0x43100000 90>; 144*4882a593Smuzhiyun interrupts = <45>; 145*4882a593Smuzhiyun clocks = <&clks CLK_NAND>; 146*4882a593Smuzhiyun clock-names = "core"; 147*4882a593Smuzhiyun dmas = <&pdma 97 3>; 148*4882a593Smuzhiyun dma-names = "data"; 149*4882a593Smuzhiyun #address-cells = <1>; 150*4882a593Smuzhiyun #size-cells = <0>; 151*4882a593Smuzhiyun status = "disabled"; 152*4882a593Smuzhiyun }; 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun pxairq: interrupt-controller@40d00000 { 155*4882a593Smuzhiyun marvell,intc-priority; 156*4882a593Smuzhiyun marvell,intc-nr-irqs = <56>; 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun pinctrl: pinctrl@40e10000 { 160*4882a593Smuzhiyun compatible = "pinconf-single"; 161*4882a593Smuzhiyun reg = <0x40e10000 0xffff>; 162*4882a593Smuzhiyun #pinctrl-cells = <1>; 163*4882a593Smuzhiyun pinctrl-single,register-width = <32>; 164*4882a593Smuzhiyun pinctrl-single,function-mask = <0x7>; 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun gpio: gpio@40e00000 { 168*4882a593Smuzhiyun compatible = "intel,pxa3xx-gpio"; 169*4882a593Smuzhiyun reg = <0x40e00000 0x10000>; 170*4882a593Smuzhiyun clocks = <&clks CLK_GPIO>; 171*4882a593Smuzhiyun gpio-ranges = <&pinctrl 0 0 128>; 172*4882a593Smuzhiyun interrupt-names = "gpio0", "gpio1", "gpio_mux"; 173*4882a593Smuzhiyun interrupts = <8>, <9>, <10>; 174*4882a593Smuzhiyun gpio-controller; 175*4882a593Smuzhiyun #gpio-cells = <0x2>; 176*4882a593Smuzhiyun interrupt-controller; 177*4882a593Smuzhiyun #interrupt-cells = <0x2>; 178*4882a593Smuzhiyun }; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun mmc0: mmc@41100000 { 181*4882a593Smuzhiyun compatible = "marvell,pxa-mmc"; 182*4882a593Smuzhiyun reg = <0x41100000 0x1000>; 183*4882a593Smuzhiyun interrupts = <23>; 184*4882a593Smuzhiyun clocks = <&clks CLK_MMC1>; 185*4882a593Smuzhiyun dmas = <&pdma 21 3 186*4882a593Smuzhiyun &pdma 22 3>; 187*4882a593Smuzhiyun dma-names = "rx", "tx"; 188*4882a593Smuzhiyun status = "disabled"; 189*4882a593Smuzhiyun }; 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun mmc1: mmc@42000000 { 192*4882a593Smuzhiyun compatible = "marvell,pxa-mmc"; 193*4882a593Smuzhiyun reg = <0x42000000 0x1000>; 194*4882a593Smuzhiyun interrupts = <41>; 195*4882a593Smuzhiyun clocks = <&clks CLK_MMC2>; 196*4882a593Smuzhiyun dmas = <&pdma 93 3 197*4882a593Smuzhiyun &pdma 94 3>; 198*4882a593Smuzhiyun dma-names = "rx", "tx"; 199*4882a593Smuzhiyun status = "disabled"; 200*4882a593Smuzhiyun }; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun mmc2: mmc@42500000 { 203*4882a593Smuzhiyun compatible = "marvell,pxa-mmc"; 204*4882a593Smuzhiyun reg = <0x42500000 0x1000>; 205*4882a593Smuzhiyun interrupts = <55>; 206*4882a593Smuzhiyun clocks = <&clks CLK_MMC3>; 207*4882a593Smuzhiyun dmas = <&pdma 46 3 208*4882a593Smuzhiyun &pdma 47 3>; 209*4882a593Smuzhiyun dma-names = "rx", "tx"; 210*4882a593Smuzhiyun status = "disabled"; 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun usb0: usb@4c000000 { 214*4882a593Smuzhiyun compatible = "marvell,pxa-ohci"; 215*4882a593Smuzhiyun reg = <0x4c000000 0x10000>; 216*4882a593Smuzhiyun interrupts = <3>; 217*4882a593Smuzhiyun clocks = <&clks CLK_USBH>; 218*4882a593Smuzhiyun status = "disabled"; 219*4882a593Smuzhiyun }; 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun pwm0: pwm@40b00000 { 222*4882a593Smuzhiyun compatible = "marvell,pxa270-pwm"; 223*4882a593Smuzhiyun reg = <0x40b00000 0x10>; 224*4882a593Smuzhiyun #pwm-cells = <1>; 225*4882a593Smuzhiyun clocks = <&clks CLK_PWM0>; 226*4882a593Smuzhiyun status = "disabled"; 227*4882a593Smuzhiyun }; 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun pwm1: pwm@40b00010 { 230*4882a593Smuzhiyun compatible = "marvell,pxa270-pwm"; 231*4882a593Smuzhiyun reg = <0x40b00010 0x10>; 232*4882a593Smuzhiyun #pwm-cells = <1>; 233*4882a593Smuzhiyun clocks = <&clks CLK_PWM1>; 234*4882a593Smuzhiyun status = "disabled"; 235*4882a593Smuzhiyun }; 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun pwm2: pwm@40c00000 { 238*4882a593Smuzhiyun compatible = "marvell,pxa270-pwm"; 239*4882a593Smuzhiyun reg = <0x40c00000 0x10>; 240*4882a593Smuzhiyun #pwm-cells = <1>; 241*4882a593Smuzhiyun clocks = <&clks CLK_PWM0>; 242*4882a593Smuzhiyun status = "disabled"; 243*4882a593Smuzhiyun }; 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun pwm3: pwm@40c00010 { 246*4882a593Smuzhiyun compatible = "marvell,pxa270-pwm"; 247*4882a593Smuzhiyun reg = <0x40c00010 0x10>; 248*4882a593Smuzhiyun #pwm-cells = <1>; 249*4882a593Smuzhiyun clocks = <&clks CLK_PWM1>; 250*4882a593Smuzhiyun status = "disabled"; 251*4882a593Smuzhiyun }; 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun ssp1: ssp@41000000 { 254*4882a593Smuzhiyun compatible = "mrvl,pxa3xx-ssp"; 255*4882a593Smuzhiyun reg = <0x41000000 0x40>; 256*4882a593Smuzhiyun interrupts = <24>; 257*4882a593Smuzhiyun clocks = <&clks CLK_SSP1>; 258*4882a593Smuzhiyun status = "disabled"; 259*4882a593Smuzhiyun }; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun ssp2: ssp@41700000 { 262*4882a593Smuzhiyun compatible = "mrvl,pxa3xx-ssp"; 263*4882a593Smuzhiyun reg = <0x41700000 0x40>; 264*4882a593Smuzhiyun interrupts = <16>; 265*4882a593Smuzhiyun clocks = <&clks CLK_SSP2>; 266*4882a593Smuzhiyun status = "disabled"; 267*4882a593Smuzhiyun }; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun ssp3: ssp@41900000 { 270*4882a593Smuzhiyun compatible = "mrvl,pxa3xx-ssp"; 271*4882a593Smuzhiyun reg = <0x41900000 0x40>; 272*4882a593Smuzhiyun interrupts = <0>; 273*4882a593Smuzhiyun clocks = <&clks CLK_SSP3>; 274*4882a593Smuzhiyun status = "disabled"; 275*4882a593Smuzhiyun }; 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun ssp4: ssp@41a00000 { 278*4882a593Smuzhiyun compatible = "mrvl,pxa3xx-ssp"; 279*4882a593Smuzhiyun reg = <0x41a00000 0x40>; 280*4882a593Smuzhiyun interrupts = <13>; 281*4882a593Smuzhiyun clocks = <&clks CLK_SSP4>; 282*4882a593Smuzhiyun status = "disabled"; 283*4882a593Smuzhiyun }; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun timer@40a00000 { 286*4882a593Smuzhiyun compatible = "marvell,pxa-timer"; 287*4882a593Smuzhiyun reg = <0x40a00000 0x20>; 288*4882a593Smuzhiyun interrupts = <26>; 289*4882a593Smuzhiyun clocks = <&clks CLK_OSTIMER>; 290*4882a593Smuzhiyun status = "okay"; 291*4882a593Smuzhiyun }; 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun gcu: display-controller@54000000 { 294*4882a593Smuzhiyun compatible = "marvell,pxa300-gcu"; 295*4882a593Smuzhiyun reg = <0x54000000 0x1000>; 296*4882a593Smuzhiyun interrupts = <39>; 297*4882a593Smuzhiyun clocks = <&clks CLK_PXA300_GCU>; 298*4882a593Smuzhiyun status = "disabled"; 299*4882a593Smuzhiyun }; 300*4882a593Smuzhiyun }; 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun clocks { 303*4882a593Smuzhiyun /* 304*4882a593Smuzhiyun * The muxing of external clocks/internal dividers for osc* clock 305*4882a593Smuzhiyun * sources has been hidden under the carpet by now. 306*4882a593Smuzhiyun */ 307*4882a593Smuzhiyun #address-cells = <1>; 308*4882a593Smuzhiyun #size-cells = <1>; 309*4882a593Smuzhiyun ranges; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun clks: clocks { 312*4882a593Smuzhiyun compatible = "marvell,pxa300-clocks"; 313*4882a593Smuzhiyun #clock-cells = <1>; 314*4882a593Smuzhiyun status = "okay"; 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun }; 317*4882a593Smuzhiyun}; 318