Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * NXP LPC32xx SoC
0004  *
0005  * Copyright (C) 2015-2019 Vladimir Zapolskiy <vz@mleia.com>
0006  * Copyright 2012 Roland Stigge <stigge@antcom.de>
0007  */
0008 
0009 #include <dt-bindings/clock/lpc32xx-clock.h>
0010 #include <dt-bindings/interrupt-controller/irq.h>
0011 
0012 / {
0013         #address-cells = <1>;
0014         #size-cells = <1>;
0015         compatible = "nxp,lpc3220";
0016         interrupt-parent = <&mic>;
0017 
0018         cpus {
0019                 #address-cells = <1>;
0020                 #size-cells = <0>;
0021 
0022                 cpu@0 {
0023                         compatible = "arm,arm926ej-s";
0024                         device_type = "cpu";
0025                         reg = <0x0>;
0026                 };
0027         };
0028 
0029         clocks {
0030                 xtal_32k: xtal_32k {
0031                         compatible = "fixed-clock";
0032                         #clock-cells = <0>;
0033                         clock-frequency = <32768>;
0034                         clock-output-names = "xtal_32k";
0035                 };
0036 
0037                 xtal: xtal {
0038                         compatible = "fixed-clock";
0039                         #clock-cells = <0>;
0040                         clock-frequency = <13000000>;
0041                         clock-output-names = "xtal";
0042                 };
0043         };
0044 
0045         ahb {
0046                 #address-cells = <1>;
0047                 #size-cells = <1>;
0048                 compatible = "simple-bus";
0049                 ranges = <0x00000000 0x00000000 0x10000000>,
0050                          <0x20000000 0x20000000 0x30000000>,
0051                          <0xe0000000 0xe0000000 0x04000000>;
0052 
0053                 iram: sram@8000000 {
0054                         compatible = "mmio-sram";
0055                         reg = <0x08000000 0x20000>;
0056 
0057                         #address-cells = <1>;
0058                         #size-cells = <1>;
0059                         ranges = <0x00000000 0x08000000 0x20000>;
0060                 };
0061 
0062                 /*
0063                  * Enable either SLC or MLC
0064                  */
0065                 slc: flash@20020000 {
0066                         compatible = "nxp,lpc3220-slc";
0067                         reg = <0x20020000 0x1000>;
0068                         clocks = <&clk LPC32XX_CLK_SLC>;
0069                         status = "disabled";
0070                 };
0071 
0072                 mlc: flash@200a8000 {
0073                         compatible = "nxp,lpc3220-mlc";
0074                         reg = <0x200a8000 0x11000>;
0075                         interrupts = <11 IRQ_TYPE_LEVEL_HIGH>;
0076                         clocks = <&clk LPC32XX_CLK_MLC>;
0077                         status = "disabled";
0078                 };
0079 
0080                 dma: dma@31000000 {
0081                         compatible = "arm,pl080", "arm,primecell";
0082                         reg = <0x31000000 0x1000>;
0083                         interrupts = <28 IRQ_TYPE_LEVEL_HIGH>;
0084                         clocks = <&clk LPC32XX_CLK_DMA>;
0085                         clock-names = "apb_pclk";
0086                 };
0087 
0088                 usb {
0089                         #address-cells = <1>;
0090                         #size-cells = <1>;
0091                         compatible = "simple-bus";
0092                         ranges = <0x0 0x31020000 0x00001000>;
0093 
0094                         /*
0095                          * Enable either ohci or usbd (gadget)!
0096                          */
0097                         ohci: ohci@0 {
0098                                 compatible = "nxp,ohci-nxp", "usb-ohci";
0099                                 reg = <0x0 0x300>;
0100                                 interrupt-parent = <&sic1>;
0101                                 interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
0102                                 clocks = <&usbclk LPC32XX_USB_CLK_HOST>;
0103                                 status = "disabled";
0104                         };
0105 
0106                         usbd: usbd@0 {
0107                                 compatible = "nxp,lpc3220-udc";
0108                                 reg = <0x0 0x300>;
0109                                 interrupt-parent = <&sic1>;
0110                                 interrupts = <29 IRQ_TYPE_LEVEL_HIGH>,
0111                                              <30 IRQ_TYPE_LEVEL_HIGH>,
0112                                              <28 IRQ_TYPE_LEVEL_HIGH>,
0113                                              <26 IRQ_TYPE_LEVEL_LOW>;
0114                                 clocks = <&usbclk LPC32XX_USB_CLK_DEVICE>;
0115                                 status = "disabled";
0116                         };
0117 
0118                         i2cusb: i2c@300 {
0119                                 compatible = "nxp,pnx-i2c";
0120                                 reg = <0x300 0x100>;
0121                                 interrupt-parent = <&sic1>;
0122                                 interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;
0123                                 clocks = <&usbclk LPC32XX_USB_CLK_I2C>;
0124                                 #address-cells = <1>;
0125                                 #size-cells = <0>;
0126                         };
0127 
0128                         usbclk: clock-controller@f00 {
0129                                 compatible = "nxp,lpc3220-usb-clk";
0130                                 reg = <0xf00 0x100>;
0131                                 #clock-cells = <1>;
0132                         };
0133                 };
0134 
0135                 clcd: clcd@31040000 {
0136                         compatible = "arm,pl111", "arm,primecell";
0137                         reg = <0x31040000 0x1000>;
0138                         interrupts = <14 IRQ_TYPE_LEVEL_HIGH>;
0139                         clocks = <&clk LPC32XX_CLK_LCD>, <&clk LPC32XX_CLK_LCD>;
0140                         clock-names = "clcdclk", "apb_pclk";
0141                         status = "disabled";
0142                 };
0143 
0144                 mac: ethernet@31060000 {
0145                         compatible = "nxp,lpc-eth";
0146                         reg = <0x31060000 0x1000>;
0147                         interrupts = <29 IRQ_TYPE_LEVEL_HIGH>;
0148                         clocks = <&clk LPC32XX_CLK_MAC>;
0149                         status = "disabled";
0150                 };
0151 
0152                 emc: memory-controller@31080000 {
0153                         compatible = "arm,pl175", "arm,primecell";
0154                         reg = <0x31080000 0x1000>;
0155                         clocks = <&clk LPC32XX_CLK_DDRAM>, <&clk LPC32XX_CLK_DDRAM>;
0156                         clock-names = "mpmcclk", "apb_pclk";
0157                         #address-cells = <1>;
0158                         #size-cells = <1>;
0159 
0160                         ranges = <0 0xe0000000 0x01000000>,
0161                                  <1 0xe1000000 0x01000000>,
0162                                  <2 0xe2000000 0x01000000>,
0163                                  <3 0xe3000000 0x01000000>;
0164                         status = "disabled";
0165                 };
0166 
0167                 apb {
0168                         #address-cells = <1>;
0169                         #size-cells = <1>;
0170                         compatible = "simple-bus";
0171                         ranges = <0x20000000 0x20000000 0x30000000>;
0172 
0173                         /*
0174                          * ssp0 and spi1 are shared pins;
0175                          * enable one in your board dts, as needed.
0176                          */
0177                         ssp0: spi@20084000 {
0178                                 compatible = "arm,pl022", "arm,primecell";
0179                                 reg = <0x20084000 0x1000>;
0180                                 interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
0181                                 clocks = <&clk LPC32XX_CLK_SSP0>;
0182                                 clock-names = "apb_pclk";
0183                                 #address-cells = <1>;
0184                                 #size-cells = <0>;
0185                                 status = "disabled";
0186                         };
0187 
0188                         spi1: spi@20088000 {
0189                                 compatible = "nxp,lpc3220-spi";
0190                                 reg = <0x20088000 0x1000>;
0191                                 clocks = <&clk LPC32XX_CLK_SPI1>;
0192                                 #address-cells = <1>;
0193                                 #size-cells = <0>;
0194                                 status = "disabled";
0195                         };
0196 
0197                         /*
0198                          * ssp1 and spi2 are shared pins;
0199                          * enable one in your board dts, as needed.
0200                          */
0201                         ssp1: spi@2008c000 {
0202                                 compatible = "arm,pl022", "arm,primecell";
0203                                 reg = <0x2008c000 0x1000>;
0204                                 interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
0205                                 clocks = <&clk LPC32XX_CLK_SSP1>;
0206                                 clock-names = "apb_pclk";
0207                                 #address-cells = <1>;
0208                                 #size-cells = <0>;
0209                                 status = "disabled";
0210                         };
0211 
0212                         spi2: spi@20090000 {
0213                                 compatible = "nxp,lpc3220-spi";
0214                                 reg = <0x20090000 0x1000>;
0215                                 clocks = <&clk LPC32XX_CLK_SPI2>;
0216                                 #address-cells = <1>;
0217                                 #size-cells = <0>;
0218                                 status = "disabled";
0219                         };
0220 
0221                         i2s0: i2s@20094000 {
0222                                 compatible = "nxp,lpc3220-i2s";
0223                                 reg = <0x20094000 0x1000>;
0224                                 status = "disabled";
0225                         };
0226 
0227                         sd: sd@20098000 {
0228                                 compatible = "arm,pl18x", "arm,primecell";
0229                                 reg = <0x20098000 0x1000>;
0230                                 interrupts = <15 IRQ_TYPE_LEVEL_HIGH>,
0231                                              <13 IRQ_TYPE_LEVEL_HIGH>;
0232                                 clocks = <&clk LPC32XX_CLK_SD>;
0233                                 clock-names = "apb_pclk";
0234                                 status = "disabled";
0235                         };
0236 
0237                         i2s1: i2s@2009c000 {
0238                                 compatible = "nxp,lpc3220-i2s";
0239                                 reg = <0x2009c000 0x1000>;
0240                                 status = "disabled";
0241                         };
0242 
0243                         /* UART5 first since it is the default console, ttyS0 */
0244                         uart5: serial@40090000 {
0245                                 /* actually, ns16550a w/ 64 byte fifos! */
0246                                 compatible = "nxp,lpc3220-uart";
0247                                 reg = <0x40090000 0x1000>;
0248                                 interrupts = <9 IRQ_TYPE_LEVEL_HIGH>;
0249                                 reg-shift = <2>;
0250                                 clocks = <&clk LPC32XX_CLK_UART5>;
0251                                 status = "disabled";
0252                         };
0253 
0254                         uart3: serial@40080000 {
0255                                 compatible = "nxp,lpc3220-uart";
0256                                 reg = <0x40080000 0x1000>;
0257                                 interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
0258                                 reg-shift = <2>;
0259                                 clocks = <&clk LPC32XX_CLK_UART3>;
0260                                 status = "disabled";
0261                         };
0262 
0263                         uart4: serial@40088000 {
0264                                 compatible = "nxp,lpc3220-uart";
0265                                 reg = <0x40088000 0x1000>;
0266                                 interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
0267                                 reg-shift = <2>;
0268                                 clocks = <&clk LPC32XX_CLK_UART4>;
0269                                 status = "disabled";
0270                         };
0271 
0272                         uart6: serial@40098000 {
0273                                 compatible = "nxp,lpc3220-uart";
0274                                 reg = <0x40098000 0x1000>;
0275                                 interrupts = <10 IRQ_TYPE_LEVEL_HIGH>;
0276                                 reg-shift = <2>;
0277                                 clocks = <&clk LPC32XX_CLK_UART6>;
0278                                 status = "disabled";
0279                         };
0280 
0281                         i2c1: i2c@400a0000 {
0282                                 compatible = "nxp,pnx-i2c";
0283                                 reg = <0x400a0000 0x100>;
0284                                 interrupt-parent = <&sic1>;
0285                                 interrupts = <19 IRQ_TYPE_LEVEL_LOW>;
0286                                 #address-cells = <1>;
0287                                 #size-cells = <0>;
0288                                 clocks = <&clk LPC32XX_CLK_I2C1>;
0289                         };
0290 
0291                         i2c2: i2c@400a8000 {
0292                                 compatible = "nxp,pnx-i2c";
0293                                 reg = <0x400a8000 0x100>;
0294                                 interrupt-parent = <&sic1>;
0295                                 interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
0296                                 #address-cells = <1>;
0297                                 #size-cells = <0>;
0298                                 clocks = <&clk LPC32XX_CLK_I2C2>;
0299                         };
0300 
0301                         mpwm: mpwm@400e8000 {
0302                                 compatible = "nxp,lpc3220-motor-pwm";
0303                                 reg = <0x400e8000 0x78>;
0304                                 status = "disabled";
0305                                 #pwm-cells = <2>;
0306                         };
0307                 };
0308 
0309                 fab {
0310                         #address-cells = <1>;
0311                         #size-cells = <1>;
0312                         compatible = "simple-bus";
0313                         ranges = <0x20000000 0x20000000 0x30000000>;
0314 
0315                         /* System Control Block */
0316                         scb {
0317                                 compatible = "simple-bus";
0318                                 ranges = <0x0 0x040004000 0x00001000>;
0319                                 #address-cells = <1>;
0320                                 #size-cells = <1>;
0321 
0322                                 clk: clock-controller@0 {
0323                                         compatible = "nxp,lpc3220-clk";
0324                                         reg = <0x00 0x114>;
0325                                         #clock-cells = <1>;
0326 
0327                                         clocks = <&xtal_32k>, <&xtal>;
0328                                         clock-names = "xtal_32k", "xtal";
0329                                 };
0330                         };
0331 
0332                         mic: interrupt-controller@40008000 {
0333                                 compatible = "nxp,lpc3220-mic";
0334                                 reg = <0x40008000 0x4000>;
0335                                 interrupt-controller;
0336                                 #interrupt-cells = <2>;
0337                         };
0338 
0339                         sic1: interrupt-controller@4000c000 {
0340                                 compatible = "nxp,lpc3220-sic";
0341                                 reg = <0x4000c000 0x4000>;
0342                                 interrupt-controller;
0343                                 #interrupt-cells = <2>;
0344 
0345                                 interrupt-parent = <&mic>;
0346                                 interrupts = <0 IRQ_TYPE_LEVEL_LOW>,
0347                                              <30 IRQ_TYPE_LEVEL_LOW>;
0348                                 };
0349 
0350                         sic2: interrupt-controller@40010000 {
0351                                 compatible = "nxp,lpc3220-sic";
0352                                 reg = <0x40010000 0x4000>;
0353                                 interrupt-controller;
0354                                 #interrupt-cells = <2>;
0355 
0356                                 interrupt-parent = <&mic>;
0357                                 interrupts = <1 IRQ_TYPE_LEVEL_LOW>,
0358                                              <31 IRQ_TYPE_LEVEL_LOW>;
0359                         };
0360 
0361                         uart1: serial@40014000 {
0362                                 compatible = "nxp,lpc3220-hsuart";
0363                                 reg = <0x40014000 0x1000>;
0364                                 interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
0365                                 status = "disabled";
0366                         };
0367 
0368                         uart2: serial@40018000 {
0369                                 compatible = "nxp,lpc3220-hsuart";
0370                                 reg = <0x40018000 0x1000>;
0371                                 interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
0372                                 status = "disabled";
0373                         };
0374 
0375                         uart7: serial@4001c000 {
0376                                 compatible = "nxp,lpc3220-hsuart";
0377                                 reg = <0x4001c000 0x1000>;
0378                                 interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
0379                                 status = "disabled";
0380                         };
0381 
0382                         rtc: rtc@40024000 {
0383                                 compatible = "nxp,lpc3220-rtc";
0384                                 reg = <0x40024000 0x1000>;
0385                                 interrupt-parent = <&sic1>;
0386                                 interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
0387                                 clocks = <&clk LPC32XX_CLK_RTC>;
0388                         };
0389 
0390                         gpio: gpio@40028000 {
0391                                 compatible = "nxp,lpc3220-gpio";
0392                                 reg = <0x40028000 0x1000>;
0393                                 gpio-controller;
0394                                 #gpio-cells = <3>; /* bank, pin, flags */
0395                         };
0396 
0397                         timer4: timer@4002c000 {
0398                                 compatible = "nxp,lpc3220-timer";
0399                                 reg = <0x4002c000 0x1000>;
0400                                 interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
0401                                 clocks = <&clk LPC32XX_CLK_TIMER4>;
0402                                 clock-names = "timerclk";
0403                                 status = "disabled";
0404                         };
0405 
0406                         timer5: timer@40030000 {
0407                                 compatible = "nxp,lpc3220-timer";
0408                                 reg = <0x40030000 0x1000>;
0409                                 interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
0410                                 clocks = <&clk LPC32XX_CLK_TIMER5>;
0411                                 clock-names = "timerclk";
0412                                 status = "disabled";
0413                         };
0414 
0415                         watchdog: watchdog@4003c000 {
0416                                 compatible = "nxp,pnx4008-wdt";
0417                                 reg = <0x4003c000 0x1000>;
0418                                 clocks = <&clk LPC32XX_CLK_WDOG>;
0419                         };
0420 
0421                         timer0: timer@40044000 {
0422                                 compatible = "nxp,lpc3220-timer";
0423                                 reg = <0x40044000 0x1000>;
0424                                 clocks = <&clk LPC32XX_CLK_TIMER0>;
0425                                 clock-names = "timerclk";
0426                                 interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
0427                         };
0428 
0429                         /*
0430                          * TSC vs. ADC: Since those two share the same
0431                          * hardware, you need to choose from one of the
0432                          * following two and do 'status = "okay";' for one of
0433                          * them
0434                          */
0435 
0436                         adc: adc@40048000 {
0437                                 compatible = "nxp,lpc3220-adc";
0438                                 reg = <0x40048000 0x1000>;
0439                                 interrupt-parent = <&sic1>;
0440                                 interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
0441                                 clocks = <&clk LPC32XX_CLK_ADC>;
0442                                 status = "disabled";
0443                         };
0444 
0445                         tsc: tsc@40048000 {
0446                                 compatible = "nxp,lpc3220-tsc";
0447                                 reg = <0x40048000 0x1000>;
0448                                 interrupt-parent = <&sic1>;
0449                                 interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
0450                                 clocks = <&clk LPC32XX_CLK_ADC>;
0451                                 status = "disabled";
0452                         };
0453 
0454                         timer1: timer@4004c000 {
0455                                 compatible = "nxp,lpc3220-timer";
0456                                 reg = <0x4004c000 0x1000>;
0457                                 interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
0458                                 clocks = <&clk LPC32XX_CLK_TIMER1>;
0459                                 clock-names = "timerclk";
0460                         };
0461 
0462                         key: key@40050000 {
0463                                 compatible = "nxp,lpc3220-key";
0464                                 reg = <0x40050000 0x1000>;
0465                                 clocks = <&clk LPC32XX_CLK_KEY>;
0466                                 interrupt-parent = <&sic1>;
0467                                 interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
0468                                 status = "disabled";
0469                         };
0470 
0471                         timer2: timer@40058000 {
0472                                 compatible = "nxp,lpc3220-timer";
0473                                 reg = <0x40058000 0x1000>;
0474                                 interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
0475                                 clocks = <&clk LPC32XX_CLK_TIMER2>;
0476                                 clock-names = "timerclk";
0477                                 status = "disabled";
0478                         };
0479 
0480                         pwm1: pwm@4005c000 {
0481                                 compatible = "nxp,lpc3220-pwm";
0482                                 reg = <0x4005c000 0x4>;
0483                                 clocks = <&clk LPC32XX_CLK_PWM1>;
0484                                 assigned-clocks = <&clk LPC32XX_CLK_PWM1>;
0485                                 assigned-clock-parents = <&clk LPC32XX_CLK_PERIPH>;
0486                                 status = "disabled";
0487                         };
0488 
0489                         pwm2: pwm@4005c004 {
0490                                 compatible = "nxp,lpc3220-pwm";
0491                                 reg = <0x4005c004 0x4>;
0492                                 clocks = <&clk LPC32XX_CLK_PWM2>;
0493                                 assigned-clocks = <&clk LPC32XX_CLK_PWM2>;
0494                                 assigned-clock-parents = <&clk LPC32XX_CLK_PERIPH>;
0495                                 status = "disabled";
0496                         };
0497 
0498                         timer3: timer@40060000 {
0499                                 compatible = "nxp,lpc3220-timer";
0500                                 reg = <0x40060000 0x1000>;
0501                                 interrupts = <19 IRQ_TYPE_LEVEL_LOW>;
0502                                 clocks = <&clk LPC32XX_CLK_TIMER3>;
0503                                 clock-names = "timerclk";
0504                                 status = "disabled";
0505                         };
0506                 };
0507         };
0508 };