162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* The pxa3xx skeleton simply augments the 2xx version */ 362306a36Sopenharmony_ci#include "pxa2xx.dtsi" 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#define MFP_PIN_PXA300(gpio) \ 662306a36Sopenharmony_ci ((gpio <= 2) ? (0x00b4 + 4 * gpio) : \ 762306a36Sopenharmony_ci (gpio <= 26) ? (0x027c + 4 * (gpio - 3)) : \ 862306a36Sopenharmony_ci (gpio <= 98) ? (0x0400 + 4 * (gpio - 27)) : \ 962306a36Sopenharmony_ci (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 1062306a36Sopenharmony_ci 0) 1162306a36Sopenharmony_ci#define MFP_PIN_PXA300_2(gpio) \ 1262306a36Sopenharmony_ci ((gpio <= 1) ? (0x674 + 4 * gpio) : \ 1362306a36Sopenharmony_ci (gpio <= 6) ? (0x2dc + 4 * gpio) : \ 1462306a36Sopenharmony_ci 0) 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define MFP_PIN_PXA310(gpio) \ 1762306a36Sopenharmony_ci ((gpio <= 2) ? (0x00b4 + 4 * gpio) : \ 1862306a36Sopenharmony_ci (gpio <= 26) ? (0x027c + 4 * (gpio - 3)) : \ 1962306a36Sopenharmony_ci (gpio <= 29) ? (0x0400 + 4 * (gpio - 27)) : \ 2062306a36Sopenharmony_ci (gpio <= 98) ? (0x0418 + 4 * (gpio - 30)) : \ 2162306a36Sopenharmony_ci (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 2262306a36Sopenharmony_ci (gpio <= 262) ? 0 : \ 2362306a36Sopenharmony_ci (gpio <= 268) ? (0x052c + 4 * (gpio - 263)) : \ 2462306a36Sopenharmony_ci 0) 2562306a36Sopenharmony_ci#define MFP_PIN_PXA310_2(gpio) \ 2662306a36Sopenharmony_ci ((gpio <= 1) ? (0x674 + 4 * gpio) : \ 2762306a36Sopenharmony_ci (gpio <= 6) ? (0x2dc + 4 * gpio) : \ 2862306a36Sopenharmony_ci (gpio <= 10) ? (0x52c + 4 * gpio) : \ 2962306a36Sopenharmony_ci 0) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define MFP_PIN_PXA320(gpio) \ 3262306a36Sopenharmony_ci ((gpio <= 4) ? (0x0124 + 4 * gpio) : \ 3362306a36Sopenharmony_ci (gpio <= 9) ? (0x028c + 4 * (gpio - 5)) : \ 3462306a36Sopenharmony_ci (gpio <= 10) ? (0x0458 + 4 * (gpio - 10)) : \ 3562306a36Sopenharmony_ci (gpio <= 26) ? (0x02a0 + 4 * (gpio - 11)) : \ 3662306a36Sopenharmony_ci (gpio <= 48) ? (0x0400 + 4 * (gpio - 27)) : \ 3762306a36Sopenharmony_ci (gpio <= 62) ? (0x045c + 4 * (gpio - 49)) : \ 3862306a36Sopenharmony_ci (gpio <= 73) ? (0x04b4 + 4 * (gpio - 63)) : \ 3962306a36Sopenharmony_ci (gpio <= 98) ? (0x04f0 + 4 * (gpio - 74)) : \ 4062306a36Sopenharmony_ci (gpio <= 127) ? (0x0600 + 4 * (gpio - 99)) : \ 4162306a36Sopenharmony_ci 0) 4262306a36Sopenharmony_ci#define MFP_PIN_PXA320_2(gpio) \ 4362306a36Sopenharmony_ci ((gpio <= 3) ? (0x674 + 4 * gpio) : \ 4462306a36Sopenharmony_ci (gpio <= 5) ? (0x284 + 4 * gpio) : \ 4562306a36Sopenharmony_ci 0) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* 4862306a36Sopenharmony_ci * MFP Alternate functions for pins having a gpio. 4962306a36Sopenharmony_ci * Example of use: pinctrl-single,pins = < MFP_PIN_PXA310(21) MFP_AF1 > 5062306a36Sopenharmony_ci */ 5162306a36Sopenharmony_ci#define MFP_AF0 (0 << 0) 5262306a36Sopenharmony_ci#define MFP_AF1 (1 << 0) 5362306a36Sopenharmony_ci#define MFP_AF2 (2 << 0) 5462306a36Sopenharmony_ci#define MFP_AF3 (3 << 0) 5562306a36Sopenharmony_ci#define MFP_AF4 (4 << 0) 5662306a36Sopenharmony_ci#define MFP_AF5 (5 << 0) 5762306a36Sopenharmony_ci#define MFP_AF6 (6 << 0) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci/* 6062306a36Sopenharmony_ci * MFP drive strength functions for pins. 6162306a36Sopenharmony_ci * Example of use: pinctrl-single,drive-strength = MFP_DS03X; 6262306a36Sopenharmony_ci */ 6362306a36Sopenharmony_ci#define MFP_DSMSK (0x7 << 10) 6462306a36Sopenharmony_ci#define MFP_DS01X < (0x0 << 10) MFP_DSMSK > 6562306a36Sopenharmony_ci#define MFP_DS02X < (0x1 << 10) MFP_DSMSK > 6662306a36Sopenharmony_ci#define MFP_DS03X < (0x2 << 10) MFP_DSMSK > 6762306a36Sopenharmony_ci#define MFP_DS04X < (0x3 << 10) MFP_DSMSK > 6862306a36Sopenharmony_ci#define MFP_DS06X < (0x4 << 10) MFP_DSMSK > 6962306a36Sopenharmony_ci#define MFP_DS08X < (0x5 << 10) MFP_DSMSK > 7062306a36Sopenharmony_ci#define MFP_DS10X < (0x6 << 10) MFP_DSMSK > 7162306a36Sopenharmony_ci#define MFP_DS13X < (0x7 << 10) MFP_DSMSK > 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* 7462306a36Sopenharmony_ci * MFP bias pull mode for pins. 7562306a36Sopenharmony_ci * Example of use: pinctrl-single,bias-pullup = MPF_PULL_UP; 7662306a36Sopenharmony_ci */ 7762306a36Sopenharmony_ci#define MPF_PULL_MSK (0x7 << 13) 7862306a36Sopenharmony_ci#define MPF_PULL_DOWN < (0x5 << 13) (0x5 << 13) 0 MPF_PULL_MSK > 7962306a36Sopenharmony_ci#define MPF_PULL_UP < (0x6 << 13) (0x6 << 13) 0 MPF_PULL_MSK > 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci/* 8262306a36Sopenharmony_ci * MFP low power mode for pins. 8362306a36Sopenharmony_ci * Example of use: 8462306a36Sopenharmony_ci * pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW|MFP_LPM_EDGE_FALL); 8562306a36Sopenharmony_ci * 8662306a36Sopenharmony_ci * Table that determines the low power modes outputs, with actual settings 8762306a36Sopenharmony_ci * used in parentheses for don't-care values. Except for the float output, 8862306a36Sopenharmony_ci * the configured driven and pulled levels match, so if there is a need for 8962306a36Sopenharmony_ci * non-LPM pulled output, the same configuration could probably be used. 9062306a36Sopenharmony_ci * 9162306a36Sopenharmony_ci * Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel 9262306a36Sopenharmony_ci * (bit 7) (bit 8) (bit 14) (bit 13) (bit 15) 9362306a36Sopenharmony_ci * 9462306a36Sopenharmony_ci * Input 0 X(0) X(0) X(0) 0 9562306a36Sopenharmony_ci * Drive 0 0 0 0 X(1) 0 9662306a36Sopenharmony_ci * Drive 1 0 1 X(1) 0 0 9762306a36Sopenharmony_ci * Pull hi (1) 1 X(1) 1 0 0 9862306a36Sopenharmony_ci * Pull lo (0) 1 X(0) 0 1 0 9962306a36Sopenharmony_ci * Z (float) 1 X(0) 0 0 0 10062306a36Sopenharmony_ci */ 10162306a36Sopenharmony_ci#define MFP_LPM(x) < (x) MFP_LPM_MSK > 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#define MFP_LPM_MSK 0xe1f0 10462306a36Sopenharmony_ci#define MFP_LPM_INPUT 0x0000 10562306a36Sopenharmony_ci#define MFP_LPM_DRIVE_LOW 0x2000 10662306a36Sopenharmony_ci#define MFP_LPM_DRIVE_HIGH 0x4100 10762306a36Sopenharmony_ci#define MFP_LPM_PULL_LOW 0x2080 10862306a36Sopenharmony_ci#define MFP_LPM_PULL_HIGH 0x4180 10962306a36Sopenharmony_ci#define MFP_LPM_FLOAT 0x0080 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci#define MFP_LPM_EDGE_NONE 0x0000 11262306a36Sopenharmony_ci#define MFP_LPM_EDGE_RISE 0x0010 11362306a36Sopenharmony_ci#define MFP_LPM_EDGE_FALL 0x0020 11462306a36Sopenharmony_ci#define MFP_LPM_EDGE_BOTH 0x0030 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci/ { 11762306a36Sopenharmony_ci model = "Marvell PXA3xx familiy SoC"; 11862306a36Sopenharmony_ci compatible = "marvell,pxa3xx"; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci pxabus { 12162306a36Sopenharmony_ci pdma: dma-controller@40000000 { 12262306a36Sopenharmony_ci compatible = "marvell,pdma-1.0"; 12362306a36Sopenharmony_ci reg = <0x40000000 0x10000>; 12462306a36Sopenharmony_ci interrupts = <25>; 12562306a36Sopenharmony_ci #dma-cells = <2>; 12662306a36Sopenharmony_ci /* For backwards compatibility: */ 12762306a36Sopenharmony_ci #dma-channels = <32>; 12862306a36Sopenharmony_ci dma-channels = <32>; 12962306a36Sopenharmony_ci #dma-requests = <100>; 13062306a36Sopenharmony_ci dma-requests = <100>; 13162306a36Sopenharmony_ci status = "okay"; 13262306a36Sopenharmony_ci }; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci pwri2c: i2c@40f500c0 { 13562306a36Sopenharmony_ci compatible = "mrvl,pwri2c"; 13662306a36Sopenharmony_ci reg = <0x40f500c0 0x30>; 13762306a36Sopenharmony_ci interrupts = <6>; 13862306a36Sopenharmony_ci clocks = <&clks CLK_PWRI2C>; 13962306a36Sopenharmony_ci #address-cells = <0x1>; 14062306a36Sopenharmony_ci #size-cells = <0>; 14162306a36Sopenharmony_ci status = "disabled"; 14262306a36Sopenharmony_ci }; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci nand_controller: nand-controller@43100000 { 14562306a36Sopenharmony_ci compatible = "marvell,pxa3xx-nand-controller"; 14662306a36Sopenharmony_ci reg = <0x43100000 90>; 14762306a36Sopenharmony_ci interrupts = <45>; 14862306a36Sopenharmony_ci clocks = <&clks CLK_NAND>; 14962306a36Sopenharmony_ci clock-names = "core"; 15062306a36Sopenharmony_ci dmas = <&pdma 97 3>; 15162306a36Sopenharmony_ci dma-names = "data"; 15262306a36Sopenharmony_ci #address-cells = <1>; 15362306a36Sopenharmony_ci #size-cells = <0>; 15462306a36Sopenharmony_ci status = "disabled"; 15562306a36Sopenharmony_ci }; 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci pxairq: interrupt-controller@40d00000 { 15862306a36Sopenharmony_ci marvell,intc-priority; 15962306a36Sopenharmony_ci marvell,intc-nr-irqs = <56>; 16062306a36Sopenharmony_ci }; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci pinctrl: pinctrl@40e10000 { 16362306a36Sopenharmony_ci compatible = "pinconf-single"; 16462306a36Sopenharmony_ci reg = <0x40e10000 0xffff>; 16562306a36Sopenharmony_ci #pinctrl-cells = <1>; 16662306a36Sopenharmony_ci pinctrl-single,register-width = <32>; 16762306a36Sopenharmony_ci pinctrl-single,function-mask = <0x7>; 16862306a36Sopenharmony_ci }; 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci gpio: gpio@40e00000 { 17162306a36Sopenharmony_ci compatible = "intel,pxa3xx-gpio"; 17262306a36Sopenharmony_ci reg = <0x40e00000 0x10000>; 17362306a36Sopenharmony_ci clocks = <&clks CLK_GPIO>; 17462306a36Sopenharmony_ci gpio-ranges = <&pinctrl 0 0 128>; 17562306a36Sopenharmony_ci interrupt-names = "gpio0", "gpio1", "gpio_mux"; 17662306a36Sopenharmony_ci interrupts = <8>, <9>, <10>; 17762306a36Sopenharmony_ci gpio-controller; 17862306a36Sopenharmony_ci #gpio-cells = <0x2>; 17962306a36Sopenharmony_ci interrupt-controller; 18062306a36Sopenharmony_ci #interrupt-cells = <0x2>; 18162306a36Sopenharmony_ci }; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci mmc0: mmc@41100000 { 18462306a36Sopenharmony_ci compatible = "marvell,pxa-mmc"; 18562306a36Sopenharmony_ci reg = <0x41100000 0x1000>; 18662306a36Sopenharmony_ci interrupts = <23>; 18762306a36Sopenharmony_ci clocks = <&clks CLK_MMC1>; 18862306a36Sopenharmony_ci dmas = <&pdma 21 3 18962306a36Sopenharmony_ci &pdma 22 3>; 19062306a36Sopenharmony_ci dma-names = "rx", "tx"; 19162306a36Sopenharmony_ci status = "disabled"; 19262306a36Sopenharmony_ci }; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci mmc1: mmc@42000000 { 19562306a36Sopenharmony_ci compatible = "marvell,pxa-mmc"; 19662306a36Sopenharmony_ci reg = <0x42000000 0x1000>; 19762306a36Sopenharmony_ci interrupts = <41>; 19862306a36Sopenharmony_ci clocks = <&clks CLK_MMC2>; 19962306a36Sopenharmony_ci dmas = <&pdma 93 3 20062306a36Sopenharmony_ci &pdma 94 3>; 20162306a36Sopenharmony_ci dma-names = "rx", "tx"; 20262306a36Sopenharmony_ci status = "disabled"; 20362306a36Sopenharmony_ci }; 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci mmc2: mmc@42500000 { 20662306a36Sopenharmony_ci compatible = "marvell,pxa-mmc"; 20762306a36Sopenharmony_ci reg = <0x42500000 0x1000>; 20862306a36Sopenharmony_ci interrupts = <55>; 20962306a36Sopenharmony_ci clocks = <&clks CLK_MMC3>; 21062306a36Sopenharmony_ci dmas = <&pdma 46 3 21162306a36Sopenharmony_ci &pdma 47 3>; 21262306a36Sopenharmony_ci dma-names = "rx", "tx"; 21362306a36Sopenharmony_ci status = "disabled"; 21462306a36Sopenharmony_ci }; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci usb0: usb@4c000000 { 21762306a36Sopenharmony_ci compatible = "marvell,pxa-ohci"; 21862306a36Sopenharmony_ci reg = <0x4c000000 0x10000>; 21962306a36Sopenharmony_ci interrupts = <3>; 22062306a36Sopenharmony_ci clocks = <&clks CLK_USBH>; 22162306a36Sopenharmony_ci status = "disabled"; 22262306a36Sopenharmony_ci }; 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci pwm0: pwm@40b00000 { 22562306a36Sopenharmony_ci compatible = "marvell,pxa270-pwm"; 22662306a36Sopenharmony_ci reg = <0x40b00000 0x10>; 22762306a36Sopenharmony_ci #pwm-cells = <1>; 22862306a36Sopenharmony_ci clocks = <&clks CLK_PWM0>; 22962306a36Sopenharmony_ci status = "disabled"; 23062306a36Sopenharmony_ci }; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci pwm1: pwm@40b00010 { 23362306a36Sopenharmony_ci compatible = "marvell,pxa270-pwm"; 23462306a36Sopenharmony_ci reg = <0x40b00010 0x10>; 23562306a36Sopenharmony_ci #pwm-cells = <1>; 23662306a36Sopenharmony_ci clocks = <&clks CLK_PWM1>; 23762306a36Sopenharmony_ci status = "disabled"; 23862306a36Sopenharmony_ci }; 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci pwm2: pwm@40c00000 { 24162306a36Sopenharmony_ci compatible = "marvell,pxa270-pwm"; 24262306a36Sopenharmony_ci reg = <0x40c00000 0x10>; 24362306a36Sopenharmony_ci #pwm-cells = <1>; 24462306a36Sopenharmony_ci clocks = <&clks CLK_PWM0>; 24562306a36Sopenharmony_ci status = "disabled"; 24662306a36Sopenharmony_ci }; 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci pwm3: pwm@40c00010 { 24962306a36Sopenharmony_ci compatible = "marvell,pxa270-pwm"; 25062306a36Sopenharmony_ci reg = <0x40c00010 0x10>; 25162306a36Sopenharmony_ci #pwm-cells = <1>; 25262306a36Sopenharmony_ci clocks = <&clks CLK_PWM1>; 25362306a36Sopenharmony_ci status = "disabled"; 25462306a36Sopenharmony_ci }; 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci ssp1: ssp@41000000 { 25762306a36Sopenharmony_ci compatible = "mrvl,pxa3xx-ssp"; 25862306a36Sopenharmony_ci reg = <0x41000000 0x40>; 25962306a36Sopenharmony_ci interrupts = <24>; 26062306a36Sopenharmony_ci clocks = <&clks CLK_SSP1>; 26162306a36Sopenharmony_ci status = "disabled"; 26262306a36Sopenharmony_ci }; 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci ssp2: ssp@41700000 { 26562306a36Sopenharmony_ci compatible = "mrvl,pxa3xx-ssp"; 26662306a36Sopenharmony_ci reg = <0x41700000 0x40>; 26762306a36Sopenharmony_ci interrupts = <16>; 26862306a36Sopenharmony_ci clocks = <&clks CLK_SSP2>; 26962306a36Sopenharmony_ci status = "disabled"; 27062306a36Sopenharmony_ci }; 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci ssp3: ssp@41900000 { 27362306a36Sopenharmony_ci compatible = "mrvl,pxa3xx-ssp"; 27462306a36Sopenharmony_ci reg = <0x41900000 0x40>; 27562306a36Sopenharmony_ci interrupts = <0>; 27662306a36Sopenharmony_ci clocks = <&clks CLK_SSP3>; 27762306a36Sopenharmony_ci status = "disabled"; 27862306a36Sopenharmony_ci }; 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci ssp4: ssp@41a00000 { 28162306a36Sopenharmony_ci compatible = "mrvl,pxa3xx-ssp"; 28262306a36Sopenharmony_ci reg = <0x41a00000 0x40>; 28362306a36Sopenharmony_ci interrupts = <13>; 28462306a36Sopenharmony_ci clocks = <&clks CLK_SSP4>; 28562306a36Sopenharmony_ci status = "disabled"; 28662306a36Sopenharmony_ci }; 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci timer@40a00000 { 28962306a36Sopenharmony_ci compatible = "marvell,pxa-timer"; 29062306a36Sopenharmony_ci reg = <0x40a00000 0x20>; 29162306a36Sopenharmony_ci interrupts = <26>; 29262306a36Sopenharmony_ci clocks = <&clks CLK_OSTIMER>; 29362306a36Sopenharmony_ci status = "okay"; 29462306a36Sopenharmony_ci }; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci gcu: display-controller@54000000 { 29762306a36Sopenharmony_ci compatible = "marvell,pxa300-gcu"; 29862306a36Sopenharmony_ci reg = <0x54000000 0x1000>; 29962306a36Sopenharmony_ci interrupts = <39>; 30062306a36Sopenharmony_ci clocks = <&clks CLK_PXA300_GCU>; 30162306a36Sopenharmony_ci status = "disabled"; 30262306a36Sopenharmony_ci }; 30362306a36Sopenharmony_ci }; 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci clocks { 30662306a36Sopenharmony_ci /* 30762306a36Sopenharmony_ci * The muxing of external clocks/internal dividers for osc* clock 30862306a36Sopenharmony_ci * sources has been hidden under the carpet by now. 30962306a36Sopenharmony_ci */ 31062306a36Sopenharmony_ci #address-cells = <1>; 31162306a36Sopenharmony_ci #size-cells = <1>; 31262306a36Sopenharmony_ci ranges; 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci clks: clocks { 31562306a36Sopenharmony_ci compatible = "marvell,pxa300-clocks"; 31662306a36Sopenharmony_ci #clock-cells = <1>; 31762306a36Sopenharmony_ci status = "okay"; 31862306a36Sopenharmony_ci }; 31962306a36Sopenharmony_ci }; 32062306a36Sopenharmony_ci}; 321