]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: nuvoton: Add support for Nuvoton NPCM750 BMC
authorJim Liu <jim.t90615@gmail.com>
Tue, 19 Apr 2022 05:32:19 +0000 (13:32 +0800)
committerTom Rini <trini@konsulko.com>
Thu, 5 May 2022 13:28:47 +0000 (09:28 -0400)
Add basic support for the Nuvoton NPCM750 EVB (Poleg).

Signed-off-by: Jim Liu <JJLIU0@nuvoton.com>
22 files changed:
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/dts/Makefile
arch/arm/dts/nuvoton-common-npcm7xx.dtsi [new file with mode: 0644]
arch/arm/dts/nuvoton-npcm750-evb.dts [new file with mode: 0644]
arch/arm/dts/nuvoton-npcm750-pincfg-evb.dtsi [new file with mode: 0644]
arch/arm/dts/nuvoton-npcm750.dtsi [new file with mode: 0644]
arch/arm/include/asm/arch-npcm7xx/gcr.h [new file with mode: 0644]
arch/arm/mach-npcm/Kconfig [new file with mode: 0644]
arch/arm/mach-npcm/Makefile [new file with mode: 0644]
arch/arm/mach-npcm/npcm7xx/Kconfig [new file with mode: 0644]
arch/arm/mach-npcm/npcm7xx/Makefile [new file with mode: 0644]
arch/arm/mach-npcm/npcm7xx/cpu.c [new file with mode: 0644]
arch/arm/mach-npcm/npcm7xx/l2_cache_pl310.c [new file with mode: 0644]
arch/arm/mach-npcm/npcm7xx/l2_cache_pl310_init.S [new file with mode: 0644]
board/nuvoton/poleg_evb/Kconfig [new file with mode: 0644]
board/nuvoton/poleg_evb/MAINTAINERS [new file with mode: 0644]
board/nuvoton/poleg_evb/Makefile [new file with mode: 0644]
board/nuvoton/poleg_evb/poleg_evb.c [new file with mode: 0644]
configs/poleg_evb_defconfig [new file with mode: 0644]
include/configs/poleg.h [new file with mode: 0644]
include/dt-bindings/reset/nuvoton,npcm7xx-reset.h [new file with mode: 0644]

index 57946f61fabe5f7736404ec025e3ad7409f22c9c..0afec5155b1b477cce2b71c45a39b40dbe8cd79c 100644 (file)
@@ -1004,6 +1004,12 @@ config ARCH_NEXELL
        select DM
        select GPIO_EXTRA_HEADER
 
+config ARCH_NPCM
+       bool "Support Nuvoton SoCs"
+       select DM
+       select OF_CONTROL
+       imply CMD_DM
+
 config ARCH_APPLE
        bool "Apple SoCs"
        select ARM64
@@ -2279,6 +2285,8 @@ source "arch/arm/mach-imx/Kconfig"
 
 source "arch/arm/mach-nexell/Kconfig"
 
+source "arch/arm/mach-npcm/Kconfig"
+
 source "board/armltd/total_compute/Kconfig"
 
 source "board/bosch/shc/Kconfig"
index ad757e982e37a3179a0adf13b3ac57c3bbffbfe7..85c23bcf775b7607278a58ff75777565d6e617f0 100644 (file)
@@ -72,6 +72,7 @@ machine-$(CONFIG_ARCH_MEDIATEK)               += mediatek
 machine-$(CONFIG_ARCH_MESON)           += meson
 machine-$(CONFIG_ARCH_MVEBU)           += mvebu
 machine-$(CONFIG_ARCH_NEXELL)          += nexell
+machine-$(CONFIG_ARCH_NPCM)             += npcm
 machine-$(CONFIG_ARCH_OMAP2PLUS)       += omap2
 machine-$(CONFIG_ARCH_ORION5X)         += orion5x
 machine-$(CONFIG_ARCH_OWL)             += owl
index ab2d0da192c63f37cd83272adc4c7ee63db0b4e1..83630af4f67bfc8576ef3122cb084f81bc0f2452 100644 (file)
@@ -1184,6 +1184,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
        mt8516-pumpkin.dtb \
        mt8518-ap1-emmc.dtb
 
+dtb-$(CONFIG_ARCH_NPCM7xx) += nuvoton-npcm750-evb.dtb
 dtb-$(CONFIG_XEN) += xenguest-arm64.dtb
 
 dtb-$(CONFIG_ARCH_OCTEONTX) += octeontx.dtb
diff --git a/arch/arm/dts/nuvoton-common-npcm7xx.dtsi b/arch/arm/dts/nuvoton-common-npcm7xx.dtsi
new file mode 100644 (file)
index 0000000..02ee4d7
--- /dev/null
@@ -0,0 +1,1120 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/nuvoton,npcm7xx-clock.h>
+#include <dt-bindings/reset/nuvoton,npcm7xx-reset.h>
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       interrupt-parent = <&gic>;
+
+       /* external reference clock */
+       clk_refclk: clk_refclk {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <25000000>;
+               clock-output-names = "refclk";
+       };
+
+       /* external reference clock for cpu. float in normal operation */
+       clk_sysbypck: clk_sysbypck {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <800000000>;
+               clock-output-names = "sysbypck";
+       };
+
+       /* external reference clock for MC. float in normal operation */
+       clk_mcbypck: clk_mcbypck {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <800000000>;
+               clock-output-names = "mcbypck";
+       };
+
+        /* external clock signal rg1refck, supplied by the phy */
+       clk_rg1refck: clk_rg1refck {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <125000000>;
+               clock-output-names = "clk_rg1refck";
+       };
+
+        /* external clock signal rg2refck, supplied by the phy */
+       clk_rg2refck: clk_rg2refck {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <125000000>;
+               clock-output-names = "clk_rg2refck";
+       };
+
+       clk_xin: clk_xin {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <50000000>;
+               clock-output-names = "clk_xin";
+       };
+
+       soc {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "simple-bus";
+               interrupt-parent = <&gic>;
+               ranges = <0x0 0xf0000000 0x00900000>;
+
+               scu: scu@3fe000 {
+                       compatible = "arm,cortex-a9-scu";
+                       reg = <0x3fe000 0x1000>;
+               };
+
+               l2: cache-controller@3fc000 {
+                       compatible = "arm,pl310-cache";
+                       reg = <0x3fc000 0x1000>;
+                       interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+                       cache-unified;
+                       cache-level = <2>;
+                       clocks = <&clk NPCM7XX_CLK_AXI>;
+                       arm,shared-override;
+               };
+
+               gic: interrupt-controller@3ff000 {
+                       compatible = "arm,cortex-a9-gic";
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       reg = <0x3ff000 0x1000>,
+                               <0x3fe100 0x100>;
+               };
+
+               gcr: gcr@800000 {
+                       compatible = "nuvoton,npcm750-gcr", "syscon", "simple-mfd";
+                       reg = <0x800000 0x1000>;
+               };
+
+               rst: rst@801000 {
+                       compatible = "nuvoton,npcm750-rst", "syscon", "simple-mfd";
+                       reg = <0x801000 0x6C>;
+               };
+       };
+
+       ahb {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "simple-bus";
+               interrupt-parent = <&gic>;
+               ranges;
+
+               rstc: rstc@f0801000 {
+                       compatible = "nuvoton,npcm750-reset";
+                       reg = <0xf0801000 0x70>;
+                       #reset-cells = <2>;
+               };
+
+               clk: clock-controller@f0801000 {
+                       compatible = "nuvoton,npcm750-clk", "syscon";
+                       #clock-cells = <1>;
+                       clock-controller;
+                       reg = <0xf0801000 0x1000>;
+                       clock-names = "refclk", "sysbypck", "mcbypck";
+                       clocks = <&clk_refclk>, <&clk_sysbypck>, <&clk_mcbypck>;
+               };
+
+               gmac0: eth@f0802000 {
+                       device_type = "network";
+                       compatible = "nuvoton,npcm-dwmac";
+                       reg = <0xf0802000 0x2000>;
+                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+                       ethernet = <0>;
+                       clocks  = <&clk_rg1refck>, <&clk NPCM7XX_CLK_AHB>;
+                       clock-names = "stmmaceth", "clk_gmac";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&rg1_pins
+                                       &rg1mdio_pins>;
+                       status = "disabled";
+               };
+
+               ehci1: usb@f0806000 {
+                       compatible = "nuvoton,npcm750-ehci";
+                       reg = <0xf0806000 0x1000>;
+                       interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
+                       status = "disabled";
+               };
+
+               fiu0: spi@fb000000 {
+                       compatible = "nuvoton,npcm750-fiu";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0xfb000000 0x1000>;
+                       reg-names = "control", "memory";
+                       clocks = <&clk NPCM7XX_CLK_SPI0>;
+                       clock-names = "clk_spi0";
+                       status = "disabled";
+               };
+
+               fiu3: spi@c0000000 {
+                       compatible = "nuvoton,npcm750-fiu";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0xc0000000 0x1000>;
+                       reg-names = "control", "memory";
+                       clocks = <&clk NPCM7XX_CLK_SPI3>;
+                       clock-names = "clk_spi3";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&spi3_pins>;
+                       status = "disabled";
+               };
+
+               fiux: spi@fb001000 {
+                       compatible = "nuvoton,npcm750-fiu";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0xfb001000 0x1000>;
+                       reg-names = "control", "memory";
+                       clocks = <&clk NPCM7XX_CLK_SPIX>;
+                       clock-names = "clk_spix";
+                       status = "disabled";
+               };
+
+               apb {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "simple-bus";
+                       interrupt-parent = <&gic>;
+                       ranges = <0x0 0xf0000000 0x00300000>;
+
+                       lpc_kcs: lpc_kcs@7000 {
+                               compatible = "nuvoton,npcm750-lpc-kcs", "simple-mfd", "syscon";
+                               reg = <0x7000 0x40>;
+                               reg-io-width = <1>;
+
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0x0 0x7000 0x40>;
+
+                               kcs1: kcs1@0 {
+                                       compatible = "nuvoton,npcm750-kcs-bmc";
+                                       reg = <0x0 0x40>;
+                                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                                       kcs_chan = <1>;
+                                       status = "disabled";
+                               };
+
+                               kcs2: kcs2@0 {
+                                       compatible = "nuvoton,npcm750-kcs-bmc";
+                                       reg = <0x0 0x40>;
+                                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                                       kcs_chan = <2>;
+                                       status = "disabled";
+                               };
+
+                               kcs3: kcs3@0 {
+                                       compatible = "nuvoton,npcm750-kcs-bmc";
+                                       reg = <0x0 0x40>;
+                                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                                       kcs_chan = <3>;
+                                       status = "disabled";
+                               };
+                       };
+
+                       spi0: spi@200000 {
+                               compatible = "nuvoton,npcm750-pspi";
+                               reg = <0x200000 0x1000>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pspi1_pins>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk NPCM7XX_CLK_APB5>;
+                               clock-names = "clk_apb5";
+                               resets = <&rstc NPCM7XX_RESET_IPSRST2 NPCM7XX_RESET_PSPI1>;
+                               status = "disabled";
+                       };
+
+                       spi1: spi@201000 {
+                               compatible = "nuvoton,npcm750-pspi";
+                               reg = <0x201000 0x1000>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pspi2_pins>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk NPCM7XX_CLK_APB5>;
+                               clock-names = "clk_apb5";
+                               resets = <&rstc NPCM7XX_RESET_IPSRST2 NPCM7XX_RESET_PSPI2>;
+                               status = "disabled";
+                       };
+
+                       timer0: timer@8000 {
+                               compatible = "nuvoton,npcm750-timer";
+                               interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x8000 0x1C>;
+                               clocks = <&clk NPCM7XX_CLK_TIMER>;
+                       };
+
+                       watchdog0: watchdog@801C {
+                               compatible = "nuvoton,npcm750-wdt";
+                               interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x801C 0x4>;
+                               status = "disabled";
+                               clocks = <&clk NPCM7XX_CLK_TIMER>;
+                       };
+
+                       watchdog1: watchdog@901C {
+                               compatible = "nuvoton,npcm750-wdt";
+                               interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x901C 0x4>;
+                               status = "disabled";
+                               clocks = <&clk NPCM7XX_CLK_TIMER>;
+                       };
+
+                       watchdog2: watchdog@a01C {
+                               compatible = "nuvoton,npcm750-wdt";
+                               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0xa01C 0x4>;
+                               status = "disabled";
+                               clocks = <&clk NPCM7XX_CLK_TIMER>;
+                       };
+
+                       serial0: serial@1000 {
+                               compatible = "nuvoton,npcm750-uart";
+                               reg = <0x1000 0x1000>;
+                               clocks = <&clk NPCM7XX_CLK_UART>, <&clk NPCM7XX_CLK_PLL2DIV2>;
+                               interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+                               reg-shift = <2>;
+                               status = "disabled";
+                       };
+
+                       serial1: serial@2000 {
+                               compatible = "nuvoton,npcm750-uart";
+                               reg = <0x2000 0x1000>;
+                               clocks = <&clk NPCM7XX_CLK_UART>, <&clk NPCM7XX_CLK_PLL2DIV2>;
+                               interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+                               reg-shift = <2>;
+                               status = "disabled";
+                       };
+
+                       serial2: serial@3000 {
+                               compatible = "nuvoton,npcm750-uart";
+                               reg = <0x3000 0x1000>;
+                               clocks = <&clk NPCM7XX_CLK_UART>, <&clk NPCM7XX_CLK_PLL2DIV2>;
+                               interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+                               reg-shift = <2>;
+                               status = "disabled";
+                       };
+
+                       serial3: serial@4000 {
+                               compatible = "nuvoton,npcm750-uart";
+                               reg = <0x4000 0x1000>;
+                               clocks = <&clk NPCM7XX_CLK_UART>, <&clk NPCM7XX_CLK_PLL2DIV2>;
+                               interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                               reg-shift = <2>;
+                               status = "disabled";
+                       };
+
+                       rng: rng@b000 {
+                               compatible = "nuvoton,npcm750-rng";
+                               reg = <0xb000 0x8>;
+                               status = "disabled";
+                       };
+
+                       adc: adc@c000 {
+                               compatible = "nuvoton,npcm750-adc";
+                               reg = <0xc000 0x8>;
+                               interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk NPCM7XX_CLK_ADC>;
+                               resets = <&rstc NPCM7XX_RESET_IPSRST1 NPCM7XX_RESET_ADC>;
+                               status = "disabled";
+                       };
+
+                       pwm_fan: pwm-fan-controller@103000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "nuvoton,npcm750-pwm-fan";
+                               reg = <0x103000 0x2000>, <0x180000 0x8000>;
+                               reg-names = "pwm", "fan";
+                               clocks = <&clk NPCM7XX_CLK_APB3>,
+                                       <&clk NPCM7XX_CLK_APB4>;
+                               clock-names = "pwm","fan";
+                               interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
+                                               <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pwm0_pins &pwm1_pins
+                                               &pwm2_pins &pwm3_pins
+                                               &pwm4_pins &pwm5_pins
+                                               &pwm6_pins &pwm7_pins
+                                               &fanin0_pins &fanin1_pins
+                                               &fanin2_pins &fanin3_pins
+                                               &fanin4_pins &fanin5_pins
+                                               &fanin6_pins &fanin7_pins
+                                               &fanin8_pins &fanin9_pins
+                                               &fanin10_pins &fanin11_pins
+                                               &fanin12_pins &fanin13_pins
+                                               &fanin14_pins &fanin15_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c0: i2c@80000 {
+                               reg = <0x80000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb0_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c1: i2c@81000 {
+                               reg = <0x81000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb1_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c2: i2c@82000 {
+                               reg = <0x82000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb2_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c3: i2c@83000 {
+                               reg = <0x83000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb3_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c4: i2c@84000 {
+                               reg = <0x84000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb4_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c5: i2c@85000 {
+                               reg = <0x85000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb5_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c6: i2c@86000 {
+                               reg = <0x86000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb6_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c7: i2c@87000 {
+                               reg = <0x87000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb7_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c8: i2c@88000 {
+                               reg = <0x88000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb8_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c9: i2c@89000 {
+                               reg = <0x89000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb9_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c10: i2c@8a000 {
+                               reg = <0x8a000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb10_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c11: i2c@8b000 {
+                               reg = <0x8b000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb11_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c12: i2c@8c000 {
+                               reg = <0x8c000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb12_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c13: i2c@8d000 {
+                               reg = <0x8d000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb13_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c14: i2c@8e000 {
+                               reg = <0x8e000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb14_pins>;
+                               status = "disabled";
+                       };
+
+                       i2c15: i2c@8f000 {
+                               reg = <0x8f000 0x1000>;
+                               compatible = "nuvoton,npcm750-i2c";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clk NPCM7XX_CLK_APB2>;
+                               interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&smb15_pins>;
+                               status = "disabled";
+                       };
+               };
+       };
+
+       pinctrl: pinctrl@f0800000 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "nuvoton,npcm750-pinctrl", "syscon", "simple-mfd";
+               ranges = <0 0xf0010000 0x8000>;
+               gpio0: gpio@f0010000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x0 0x80>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 0 32>;
+               };
+               gpio1: gpio@f0011000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x1000 0x80>;
+                       interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 32 32>;
+               };
+               gpio2: gpio@f0012000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x2000 0x80>;
+                       interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 64 32>;
+               };
+               gpio3: gpio@f0013000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x3000 0x80>;
+                       interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 96 32>;
+               };
+               gpio4: gpio@f0014000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x4000 0x80>;
+                       interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 128 32>;
+               };
+               gpio5: gpio@f0015000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x5000 0x80>;
+                       interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 160 32>;
+               };
+               gpio6: gpio@f0016000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x6000 0x80>;
+                       interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 192 32>;
+               };
+               gpio7: gpio@f0017000 {
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       reg = <0x7000 0x80>;
+                       interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&pinctrl 0 224 32>;
+               };
+
+               iox1_pins: iox1-pins {
+                       groups = "iox1";
+                       function = "iox1";
+               };
+               iox2_pins: iox2-pins {
+                       groups = "iox2";
+                       function = "iox2";
+               };
+               smb1d_pins: smb1d-pins {
+                       groups = "smb1d";
+                       function = "smb1d";
+               };
+               smb2d_pins: smb2d-pins {
+                       groups = "smb2d";
+                       function = "smb2d";
+               };
+               lkgpo1_pins: lkgpo1-pins {
+                       groups = "lkgpo1";
+                       function = "lkgpo1";
+               };
+               lkgpo2_pins: lkgpo2-pins {
+                       groups = "lkgpo2";
+                       function = "lkgpo2";
+               };
+               ioxh_pins: ioxh-pins {
+                       groups = "ioxh";
+                       function = "ioxh";
+               };
+               gspi_pins: gspi-pins {
+                       groups = "gspi";
+                       function = "gspi";
+               };
+               smb5b_pins: smb5b-pins {
+                       groups = "smb5b";
+                       function = "smb5b";
+               };
+               smb5c_pins: smb5c-pins {
+                       groups = "smb5c";
+                       function = "smb5c";
+               };
+               lkgpo0_pins: lkgpo0-pins {
+                       groups = "lkgpo0";
+                       function = "lkgpo0";
+               };
+               pspi2_pins: pspi2-pins {
+                       groups = "pspi2";
+                       function = "pspi2";
+               };
+               smb4den_pins: smb4den-pins {
+                       groups = "smb4den";
+                       function = "smb4den";
+               };
+               smb4b_pins: smb4b-pins {
+                       groups = "smb4b";
+                       function = "smb4b";
+               };
+               smb4c_pins: smb4c-pins {
+                       groups = "smb4c";
+                       function = "smb4c";
+               };
+               smb15_pins: smb15-pins {
+                       groups = "smb15";
+                       function = "smb15";
+               };
+               smb4d_pins: smb4d-pins {
+                       groups = "smb4d";
+                       function = "smb4d";
+               };
+               smb14_pins: smb14-pins {
+                       groups = "smb14";
+                       function = "smb14";
+               };
+               smb5_pins: smb5-pins {
+                       groups = "smb5";
+                       function = "smb5";
+               };
+               smb4_pins: smb4-pins {
+                       groups = "smb4";
+                       function = "smb4";
+               };
+               smb3_pins: smb3-pins {
+                       groups = "smb3";
+                       function = "smb3";
+               };
+               spi0cs1_pins: spi0cs1-pins {
+                       groups = "spi0cs1";
+                       function = "spi0cs1";
+               };
+               spi0cs2_pins: spi0cs2-pins {
+                       groups = "spi0cs2";
+                       function = "spi0cs2";
+               };
+               spi0cs3_pins: spi0cs3-pins {
+                       groups = "spi0cs3";
+                       function = "spi0cs3";
+               };
+               smb3c_pins: smb3c-pins {
+                       groups = "smb3c";
+                       function = "smb3c";
+               };
+               smb3b_pins: smb3b-pins {
+                       groups = "smb3b";
+                       function = "smb3b";
+               };
+               bmcuart0a_pins: bmcuart0a-pins {
+                       groups = "bmcuart0a";
+                       function = "bmcuart0a";
+               };
+               uart1_pins: uart1-pins {
+                       groups = "uart1";
+                       function = "uart1";
+               };
+               jtag2_pins: jtag2-pins {
+                       groups = "jtag2";
+                       function = "jtag2";
+               };
+               bmcuart1_pins: bmcuart1-pins {
+                       groups = "bmcuart1";
+                       function = "bmcuart1";
+               };
+               uart2_pins: uart2-pins {
+                       groups = "uart2";
+                       function = "uart2";
+               };
+               bmcuart0b_pins: bmcuart0b-pins {
+                       groups = "bmcuart0b";
+                       function = "bmcuart0b";
+               };
+               r1err_pins: r1err-pins {
+                       groups = "r1err";
+                       function = "r1err";
+               };
+               r1md_pins: r1md-pins {
+                       groups = "r1md";
+                       function = "r1md";
+               };
+               smb3d_pins: smb3d-pins {
+                       groups = "smb3d";
+                       function = "smb3d";
+               };
+               fanin0_pins: fanin0-pins {
+                       groups = "fanin0";
+                       function = "fanin0";
+               };
+               fanin1_pins: fanin1-pins {
+                       groups = "fanin1";
+                       function = "fanin1";
+               };
+               fanin2_pins: fanin2-pins {
+                       groups = "fanin2";
+                       function = "fanin2";
+               };
+               fanin3_pins: fanin3-pins {
+                       groups = "fanin3";
+                       function = "fanin3";
+               };
+               fanin4_pins: fanin4-pins {
+                       groups = "fanin4";
+                       function = "fanin4";
+               };
+               fanin5_pins: fanin5-pins {
+                       groups = "fanin5";
+                       function = "fanin5";
+               };
+               fanin6_pins: fanin6-pins {
+                       groups = "fanin6";
+                       function = "fanin6";
+               };
+               fanin7_pins: fanin7-pins {
+                       groups = "fanin7";
+                       function = "fanin7";
+               };
+               fanin8_pins: fanin8-pins {
+                       groups = "fanin8";
+                       function = "fanin8";
+               };
+               fanin9_pins: fanin9-pins {
+                       groups = "fanin9";
+                       function = "fanin9";
+               };
+               fanin10_pins: fanin10-pins {
+                       groups = "fanin10";
+                       function = "fanin10";
+               };
+               fanin11_pins: fanin11-pins {
+                       groups = "fanin11";
+                       function = "fanin11";
+               };
+               fanin12_pins: fanin12-pins {
+                       groups = "fanin12";
+                       function = "fanin12";
+               };
+               fanin13_pins: fanin13-pins {
+                       groups = "fanin13";
+                       function = "fanin13";
+               };
+               fanin14_pins: fanin14-pins {
+                       groups = "fanin14";
+                       function = "fanin14";
+               };
+               fanin15_pins: fanin15-pins {
+                       groups = "fanin15";
+                       function = "fanin15";
+               };
+               pwm0_pins: pwm0-pins {
+                       groups = "pwm0";
+                       function = "pwm0";
+               };
+               pwm1_pins: pwm1-pins {
+                       groups = "pwm1";
+                       function = "pwm1";
+               };
+               pwm2_pins: pwm2-pins {
+                       groups = "pwm2";
+                       function = "pwm2";
+               };
+               pwm3_pins: pwm3-pins {
+                       groups = "pwm3";
+                       function = "pwm3";
+               };
+               r2_pins: r2-pins {
+                       groups = "r2";
+                       function = "r2";
+               };
+               r2err_pins: r2err-pins {
+                       groups = "r2err";
+                       function = "r2err";
+               };
+               r2md_pins: r2md-pins {
+                       groups = "r2md";
+                       function = "r2md";
+               };
+               ga20kbc_pins: ga20kbc-pins {
+                       groups = "ga20kbc";
+                       function = "ga20kbc";
+               };
+               smb5d_pins: smb5d-pins {
+                       groups = "smb5d";
+                       function = "smb5d";
+               };
+               lpc_pins: lpc-pins {
+                       groups = "lpc";
+                       function = "lpc";
+               };
+               espi_pins: espi-pins {
+                       groups = "espi";
+                       function = "espi";
+               };
+               rg1_pins: rg1-pins {
+                       groups = "rg1";
+                       function = "rg1";
+               };
+               rg1mdio_pins: rg1mdio-pins {
+                       groups = "rg1mdio";
+                       function = "rg1mdio";
+               };
+               rg2_pins: rg2-pins {
+                       groups = "rg2";
+                       function = "rg2";
+               };
+               ddr_pins: ddr-pins {
+                       groups = "ddr";
+                       function = "ddr";
+               };
+               smb0_pins: smb0-pins {
+                       groups = "smb0";
+                       function = "smb0";
+               };
+               smb1_pins: smb1-pins {
+                       groups = "smb1";
+                       function = "smb1";
+               };
+               smb2_pins: smb2-pins {
+                       groups = "smb2";
+                       function = "smb2";
+               };
+               smb2c_pins: smb2c-pins {
+                       groups = "smb2c";
+                       function = "smb2c";
+               };
+               smb2b_pins: smb2b-pins {
+                       groups = "smb2b";
+                       function = "smb2b";
+               };
+               smb1c_pins: smb1c-pins {
+                       groups = "smb1c";
+                       function = "smb1c";
+               };
+               smb1b_pins: smb1b-pins {
+                       groups = "smb1b";
+                       function = "smb1b";
+               };
+               smb8_pins: smb8-pins {
+                       groups = "smb8";
+                       function = "smb8";
+               };
+               smb9_pins: smb9-pins {
+                       groups = "smb9";
+                       function = "smb9";
+               };
+               smb10_pins: smb10-pins {
+                       groups = "smb10";
+                       function = "smb10";
+               };
+               smb11_pins: smb11-pins {
+                       groups = "smb11";
+                       function = "smb11";
+               };
+               sd1_pins: sd1-pins {
+                       groups = "sd1";
+                       function = "sd1";
+               };
+               sd1pwr_pins: sd1pwr-pins {
+                       groups = "sd1pwr";
+                       function = "sd1pwr";
+               };
+               pwm4_pins: pwm4-pins {
+                       groups = "pwm4";
+                       function = "pwm4";
+               };
+               pwm5_pins: pwm5-pins {
+                       groups = "pwm5";
+                       function = "pwm5";
+               };
+               pwm6_pins: pwm6-pins {
+                       groups = "pwm6";
+                       function = "pwm6";
+               };
+               pwm7_pins: pwm7-pins {
+                       groups = "pwm7";
+                       function = "pwm7";
+               };
+               mmc8_pins: mmc8-pins {
+                       groups = "mmc8";
+                       function = "mmc8";
+               };
+               mmc_pins: mmc-pins {
+                       groups = "mmc";
+                       function = "mmc";
+               };
+               mmcwp_pins: mmcwp-pins {
+                       groups = "mmcwp";
+                       function = "mmcwp";
+               };
+               mmccd_pins: mmccd-pins {
+                       groups = "mmccd";
+                       function = "mmccd";
+               };
+               mmcrst_pins: mmcrst-pins {
+                       groups = "mmcrst";
+                       function = "mmcrst";
+               };
+               clkout_pins: clkout-pins {
+                       groups = "clkout";
+                       function = "clkout";
+               };
+               serirq_pins: serirq-pins {
+                       groups = "serirq";
+                       function = "serirq";
+               };
+               lpcclk_pins: lpcclk-pins {
+                       groups = "lpcclk";
+                       function = "lpcclk";
+               };
+               scipme_pins: scipme-pins {
+                       groups = "scipme";
+                       function = "scipme";
+               };
+               sci_pins: sci-pins {
+                       groups = "sci";
+                       function = "sci";
+               };
+               smb6_pins: smb6-pins {
+                       groups = "smb6";
+                       function = "smb6";
+               };
+               smb7_pins: smb7-pins {
+                       groups = "smb7";
+                       function = "smb7";
+               };
+               pspi1_pins: pspi1-pins {
+                       groups = "pspi1";
+                       function = "pspi1";
+               };
+               faninx_pins: faninx-pins {
+                       groups = "faninx";
+                       function = "faninx";
+               };
+               r1_pins: r1-pins {
+                       groups = "r1";
+                       function = "r1";
+               };
+               spi3_pins: spi3-pins {
+                       groups = "spi3";
+                       function = "spi3";
+               };
+               spi3cs1_pins: spi3cs1-pins {
+                       groups = "spi3cs1";
+                       function = "spi3cs1";
+               };
+               spi3quad_pins: spi3quad-pins {
+                       groups = "spi3quad";
+                       function = "spi3quad";
+               };
+               spi3cs2_pins: spi3cs2-pins {
+                       groups = "spi3cs2";
+                       function = "spi3cs2";
+               };
+               spi3cs3_pins: spi3cs3-pins {
+                       groups = "spi3cs3";
+                       function = "spi3cs3";
+               };
+               nprd_smi_pins: nprd-smi-pins {
+                       groups = "nprd_smi";
+                       function = "nprd_smi";
+               };
+               smb0b_pins: smb0b-pins {
+                       groups = "smb0b";
+                       function = "smb0b";
+               };
+               smb0c_pins: smb0c-pins {
+                       groups = "smb0c";
+                       function = "smb0c";
+               };
+               smb0den_pins: smb0den-pins {
+                       groups = "smb0den";
+                       function = "smb0den";
+               };
+               smb0d_pins: smb0d-pins {
+                       groups = "smb0d";
+                       function = "smb0d";
+               };
+               ddc_pins: ddc-pins {
+                       groups = "ddc";
+                       function = "ddc";
+               };
+               rg2mdio_pins: rg2mdio-pins {
+                       groups = "rg2mdio";
+                       function = "rg2mdio";
+               };
+               wdog1_pins: wdog1-pins {
+                       groups = "wdog1";
+                       function = "wdog1";
+               };
+               wdog2_pins: wdog2-pins {
+                       groups = "wdog2";
+                       function = "wdog2";
+               };
+               smb12_pins: smb12-pins {
+                       groups = "smb12";
+                       function = "smb12";
+               };
+               smb13_pins: smb13-pins {
+                       groups = "smb13";
+                       function = "smb13";
+               };
+               spix_pins: spix-pins {
+                       groups = "spix";
+                       function = "spix";
+               };
+               spixcs1_pins: spixcs1-pins {
+                       groups = "spixcs1";
+                       function = "spixcs1";
+               };
+               clkreq_pins: clkreq-pins {
+                       groups = "clkreq";
+                       function = "clkreq";
+               };
+               hgpio0_pins: hgpio0-pins {
+                       groups = "hgpio0";
+                       function = "hgpio0";
+               };
+               hgpio1_pins: hgpio1-pins {
+                       groups = "hgpio1";
+                       function = "hgpio1";
+               };
+               hgpio2_pins: hgpio2-pins {
+                       groups = "hgpio2";
+                       function = "hgpio2";
+               };
+               hgpio3_pins: hgpio3-pins {
+                       groups = "hgpio3";
+                       function = "hgpio3";
+               };
+               hgpio4_pins: hgpio4-pins {
+                       groups = "hgpio4";
+                       function = "hgpio4";
+               };
+               hgpio5_pins: hgpio5-pins {
+                       groups = "hgpio5";
+                       function = "hgpio5";
+               };
+               hgpio6_pins: hgpio6-pins {
+                       groups = "hgpio6";
+                       function = "hgpio6";
+               };
+               hgpio7_pins: hgpio7-pins {
+                       groups = "hgpio7";
+                       function = "hgpio7";
+               };
+       };
+};
diff --git a/arch/arm/dts/nuvoton-npcm750-evb.dts b/arch/arm/dts/nuvoton-npcm750-evb.dts
new file mode 100644 (file)
index 0000000..3e4abe6
--- /dev/null
@@ -0,0 +1,405 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018 Nuvoton Technology tomer.maimon@nuvoton.com
+// Copyright 2018 Google, Inc.
+
+/dts-v1/;
+#include "nuvoton-npcm750.dtsi"
+#include "dt-bindings/gpio/gpio.h"
+#include "nuvoton-npcm750-pincfg-evb.dtsi"
+
+/ {
+       model = "Nuvoton npcm750 Development Board (Device Tree)";
+       compatible = "nuvoton,npcm750-evb", "nuvoton,npcm750";
+
+       aliases {
+               ethernet2 = &gmac0;
+               ethernet3 = &gmac1;
+               serial0 = &serial0;
+               serial1 = &serial1;
+               serial2 = &serial2;
+               serial3 = &serial3;
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               i2c3 = &i2c3;
+               i2c4 = &i2c4;
+               i2c5 = &i2c5;
+               i2c6 = &i2c6;
+               i2c7 = &i2c7;
+               i2c8 = &i2c8;
+               i2c9 = &i2c9;
+               i2c10 = &i2c10;
+               i2c11 = &i2c11;
+               i2c12 = &i2c12;
+               i2c13 = &i2c13;
+               i2c14 = &i2c14;
+               i2c15 = &i2c15;
+               spi0 = &spi0;
+               spi1 = &spi1;
+               fiu0 = &fiu0;
+               fiu1 = &fiu3;
+               fiu2 = &fiux;
+       };
+
+       chosen {
+               stdout-path = &serial0;
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x0 0x20000000>;
+       };
+};
+
+&gmac0 {
+       phy-mode = "rgmii-id";
+       status = "okay";
+};
+
+&gmac1 {
+       phy-mode = "rgmii-id";
+       status = "okay";
+};
+
+&ehci1 {
+       status = "okay";
+};
+
+&fiu0 {
+       status = "okay";
+       spi-nor@0 {
+               compatible = "jedec,spi-nor";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               spi-rx-bus-width = <2>;
+               reg = <0>;
+               spi-max-frequency = <5000000>;
+               partitions@80000000 {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       bbuboot1@0 {
+                               label = "bb-uboot-1";
+                               reg = <0x0000000 0x80000>;
+                               read-only;
+                               };
+                       bbuboot2@80000 {
+                               label = "bb-uboot-2";
+                               reg = <0x0080000 0x80000>;
+                               read-only;
+                               };
+                       envparam@100000 {
+                               label = "env-param";
+                               reg = <0x0100000 0x40000>;
+                               read-only;
+                               };
+                       spare@140000 {
+                               label = "spare";
+                               reg = <0x0140000 0xC0000>;
+                               };
+                       kernel@200000 {
+                               label = "kernel";
+                               reg = <0x0200000 0x400000>;
+                               };
+                       rootfs@600000 {
+                               label = "rootfs";
+                               reg = <0x0600000 0x700000>;
+                               };
+                       spare1@d00000 {
+                               label = "spare1";
+                               reg = <0x0D00000 0x200000>;
+                               };
+                       spare2@f00000 {
+                               label = "spare2";
+                               reg = <0x0F00000 0x200000>;
+                               };
+                       spare3@1100000 {
+                               label = "spare3";
+                               reg = <0x1100000 0x200000>;
+                               };
+                       spare4@1300000 {
+                               label = "spare4";
+                               reg = <0x1300000 0x0>;
+                       };
+               };
+       };
+};
+
+&fiu3 {
+       pinctrl-0 = <&spi3_pins>, <&spi3quad_pins>;
+       status = "okay";
+       spi-nor@0 {
+               compatible = "jedec,spi-nor";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               spi-rx-bus-width = <2>;
+               reg = <0>;
+               spi-max-frequency = <5000000>;
+               partitions@A0000000 {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       system1@0 {
+                               label = "spi3-system1";
+                               reg = <0x0 0x0>;
+                       };
+               };
+       };
+};
+
+&fiux {
+       spix-mode;
+};
+
+&watchdog1 {
+       status = "okay";
+};
+
+&rng {
+       status = "okay";
+};
+
+&serial0 {
+       status = "okay";
+       clock-frequency = <24000000>;
+};
+
+&serial1 {
+       status = "okay";
+};
+
+&serial2 {
+       status = "okay";
+};
+
+&serial3 {
+       status = "okay";
+};
+
+&adc {
+       status = "okay";
+};
+
+&lpc_kcs {
+       kcs1: kcs1@0 {
+               status = "okay";
+       };
+
+       kcs2: kcs2@0 {
+               status = "okay";
+       };
+
+       kcs3: kcs3@0 {
+               status = "okay";
+       };
+};
+
+/* lm75 on SVB */
+&i2c0 {
+       clock-frequency = <100000>;
+       status = "okay";
+       lm75@48 {
+               compatible = "lm75";
+               reg = <0x48>;
+               status = "okay";
+       };
+};
+
+/* lm75 on EB */
+&i2c1 {
+       clock-frequency = <100000>;
+       status = "okay";
+       lm75@48 {
+               compatible = "lm75";
+               reg = <0x48>;
+               status = "okay";
+       };
+};
+
+/* tmp100 on EB */
+&i2c2 {
+       clock-frequency = <100000>;
+       status = "okay";
+       tmp100@48 {
+               compatible = "tmp100";
+               reg = <0x48>;
+               status = "okay";
+       };
+};
+
+&i2c3 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c5 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+/* tmp100 on SVB */
+&i2c6 {
+       clock-frequency = <100000>;
+       status = "okay";
+       tmp100@48 {
+               compatible = "tmp100";
+               reg = <0x48>;
+               status = "okay";
+       };
+};
+
+&i2c7 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c8 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c9 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c10 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c11 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&i2c14 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&pwm_fan {
+       status = "okay";
+       fan@0 {
+               reg = <0x00>;
+               fan-tach-ch = /bits/ 8 <0x00 0x01>;
+               cooling-levels = <127 255>;
+       };
+       fan@1 {
+               reg = <0x01>;
+               fan-tach-ch = /bits/ 8 <0x02 0x03>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@2 {
+               reg = <0x02>;
+               fan-tach-ch = /bits/ 8 <0x04 0x05>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@3 {
+               reg = <0x03>;
+               fan-tach-ch = /bits/ 8 <0x06 0x07>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@4 {
+               reg = <0x04>;
+               fan-tach-ch = /bits/ 8 <0x08 0x09>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@5 {
+               reg = <0x05>;
+               fan-tach-ch = /bits/ 8 <0x0A 0x0B>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@6 {
+               reg = <0x06>;
+               fan-tach-ch = /bits/ 8 <0x0C 0x0D>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+       fan@7 {
+               reg = <0x07>;
+               fan-tach-ch = /bits/ 8 <0x0E 0x0F>;
+               cooling-levels = /bits/ 8 <127 255>;
+       };
+};
+
+&spi0 {
+       cs-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
+       status = "okay";
+       Flash@0 {
+               compatible = "winbond,w25q128",
+               "jedec,spi-nor";
+               reg = <0x0>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               spi-max-frequency = <5000000>;
+               partition@0 {
+                       label = "spi0_spare1";
+                       reg = <0x0000000 0x800000>;
+               };
+               partition@1 {
+                       label = "spi0_spare2";
+                       reg = <0x800000 0x0>;
+               };
+       };
+};
+
+&spi1 {
+       cs-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
+       status = "okay";
+       Flash@0 {
+               compatible = "winbond,w25q128fw",
+               "jedec,spi-nor";
+               reg = <0x0>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               spi-max-frequency = <5000000>;
+               partition@0 {
+                       label = "spi1_spare1";
+                       reg = <0x0000000 0x800000>;
+               };
+               partition@1 {
+                       label = "spi1_spare2";
+                       reg = <0x800000 0x0>;
+               };
+       };
+};
+
+&pinctrl {
+       pinctrl-names = "default";
+       pinctrl-0 = <   &iox1_pins
+                       &pin8_input
+                       &pin9_output_high
+                       &pin10_input
+                       &pin11_output_high
+                       &pin16_input
+                       &pin24_output_high
+                       &pin25_output_low
+                       &pin32_output_high
+                       &jtag2_pins
+                       &pin61_output_high
+                       &pin62_output_high
+                       &pin63_output_high
+                       &lpc_pins
+                       &pin160_input
+                       &pin162_input
+                       &pin168_input
+                       &pin169_input
+                       &pin170_input
+                       &pin187_output_high
+                       &pin190_input
+                       &pin191_output_high
+                       &pin192_output_high
+                       &pin197_output_low
+                       &ddc_pins
+                       &pin218_input
+                       &pin219_output_low
+                       &pin220_output_low
+                       &pin221_output_high
+                       &pin222_input
+                       &pin223_output_low
+                       &spix_pins
+                       &pin228_output_low
+                       &pin231_output_high
+                       &pin255_input>;
+};
+
diff --git a/arch/arm/dts/nuvoton-npcm750-pincfg-evb.dtsi b/arch/arm/dts/nuvoton-npcm750-pincfg-evb.dtsi
new file mode 100644 (file)
index 0000000..3b38062
--- /dev/null
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018 Nuvoton Technology
+
+/ {
+       pinctrl: pinctrl@f0800000 {
+               pin8_input: pin8-input {
+                       pins = "GPIO8/LKGPO1";
+                       bias-disable;
+                       input-enable;
+               };
+               pin9_output_high: pin9-output-high {
+                       pins = "GPIO9/LKGPO2";
+                       bias-disable;
+                       output-high;
+               };
+               pin10_input: pin10-input {
+                       pins = "GPIO10/IOXHLD";
+                       bias-disable;
+                       input-enable;
+               };
+               pin11_output_high: pin11-output-high {
+                       pins = "GPIO11/IOXHCK";
+                       bias-disable;
+                       output-high;
+               };
+               pin16_input: pin16-input {
+                       pins = "GPIO16/LKGPO0";
+                       bias-disable;
+                       input-enable;
+               };
+               pin24_output_high: pin24-output-high {
+                       pins = "GPIO24/IOXHDO";
+                       bias-disable;
+                       output-high;
+               };
+               pin25_output_low: pin25-output-low {
+                       pins = "GPIO25/IOXHDI";
+                       bias-disable;
+                       output-low;
+               };
+               pin32_output_high: pin32-output-high {
+                       pins = "GPIO32/nSPI0CS1";
+                       bias-disable;
+                       output-high;
+               };
+               pin61_output_high: pin61-output-high {
+                       pins = "GPO61/nDTR1_BOUT1/STRAP6";
+                       bias-disable;
+                       output-high;
+               };
+               pin62_output_high: pin62-output-high {
+                       pins = "GPO62/nRTST1/STRAP5";
+                       bias-disable;
+                       output-high;
+               };
+               pin63_output_high: pin63-output-high {
+                       pins = "GPO63/TXD1/STRAP4";
+                       bias-disable;
+                       output-high;
+               };
+               pin160_input: pin160-input {
+                       pins = "GPIO160/CLKOUT/RNGOSCOUT";
+                       bias-disable;
+                       input-enable;
+               };
+               pin162_input: pin162-input {
+                       pins = "GPIO162/SERIRQ";
+                       bias-disable;
+                       input-enable;
+               };
+               pin168_input: pin168-input {
+                       pins = "GPIO168/nCLKRUN/nESPIALERT";
+                       bias-disable;
+                       input-enable;
+               };
+               pin169_input: pin169-input {
+                       pins = "GPIO169/nSCIPME";
+                       bias-disable;
+                       input-enable;
+               };
+               pin170_input: pin170-input {
+                       pins = "GPIO170/nSMI";
+                       bias-disable;
+                       input-enable;
+               };
+               pin187_output_high: pin187-output-high {
+                       pins = "GPIO187/nSPI3CS1";
+                       bias-disable;
+                       output-high;
+               };
+               pin190_input: pin190-input {
+                       pins = "GPIO190/nPRD_SMI";
+                       bias-disable;
+                       input-enable;
+               };
+               pin191_output_high: pin191-output-high {
+                       pins = "GPIO191";
+                       bias-disable;
+                       output-high;
+               };
+               pin192_output_high: pin192-output-high {
+                       pins = "GPIO192";
+                       bias-disable;
+                       output-high;
+               };
+               pin197_output_low: pin197-output-low {
+                       pins = "GPIO197/SMB0DEN";
+                       bias-disable;
+                       output-low;
+               };
+               pin218_input: pin218-input {
+                       pins = "GPIO218/nWDO1";
+                       bias-disable;
+                       input-enable;
+               };
+               pin219_output_low: pin219-output-low {
+                       pins = "GPIO219/nWDO2";
+                       bias-disable;
+                       output-low;
+               };
+               pin220_output_low: pin220-output-low {
+                       pins = "GPIO220/SMB12SCL";
+                       bias-disable;
+                       output-low;
+               };
+               pin221_output_high: pin221-output-high {
+                       pins = "GPIO221/SMB12SDA";
+                       bias-disable;
+                       output-high;
+               };
+               pin222_input: pin222-input {
+                       pins = "GPIO222/SMB13SCL";
+                       bias-disable;
+                       input-enable;
+               };
+               pin223_output_low: pin223-output-low {
+                       pins = "GPIO223/SMB13SDA";
+                       bias-disable;
+                       output-low;
+               };
+               pin228_output_low: pin228-output-low {
+                       pins = "GPIO228/nSPIXCS1";
+                       bias-disable;
+                       output-low;
+               };
+               pin231_output_high: pin231-output-high {
+                       pins = "GPIO230/SPIXD3";
+                       bias-disable;
+                       output-high;
+               };
+               pin255_input: pin255-input {
+                       pins = "GPI255/DACOSEL";
+                       bias-disable;
+                       input-enable;
+               };
+       };
+};
diff --git a/arch/arm/dts/nuvoton-npcm750.dtsi b/arch/arm/dts/nuvoton-npcm750.dtsi
new file mode 100644 (file)
index 0000000..13eee0f
--- /dev/null
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018 Nuvoton Technology tomer.maimon@nuvoton.com
+// Copyright 2018 Google, Inc.
+
+#include "nuvoton-common-npcm7xx.dtsi"
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       interrupt-parent = <&gic>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               enable-method = "nuvoton,npcm750-smp";
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       clocks = <&clk NPCM7XX_CLK_CPU>;
+                       clock-names = "clk_cpu";
+                       reg = <0>;
+                       next-level-cache = <&l2>;
+               };
+
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       clocks = <&clk NPCM7XX_CLK_CPU>;
+                       clock-names = "clk_cpu";
+                       reg = <1>;
+                       next-level-cache = <&l2>;
+               };
+       };
+
+       soc {
+               timer@3fe600 {
+                       compatible = "arm,cortex-a9-twd-timer";
+                       reg = <0x3fe600 0x20>;
+                       interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) |
+                                                 IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&clk NPCM7XX_CLK_AHB>;
+               };
+       };
+
+       ahb {
+               gmac1: eth@f0804000 {
+                       device_type = "network";
+                       compatible = "snps,dwmac";
+                       reg = <0xf0804000 0x2000>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+                       ethernet = <1>;
+                       clocks  = <&clk_rg2refck>, <&clk NPCM7XX_CLK_AHB>;
+                       clock-names = "stmmaceth", "clk_gmac";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&rg2_pins
+                                       &rg2mdio_pins>;
+                       status = "disabled";
+               };
+       };
+};
diff --git a/arch/arm/include/asm/arch-npcm7xx/gcr.h b/arch/arm/include/asm/arch-npcm7xx/gcr.h
new file mode 100644 (file)
index 0000000..762a0b6
--- /dev/null
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+
+#ifndef __NPCM750_GCR_H_
+#define __NPCM750_GCR_H_
+
+/* On-Chip POLEG NPCM750 VERSIONS */
+#define POLEG_Z1                    0x00A92750
+#define POLEG_A1                    0x04A92750
+#define POLEG_NPCM750                          0x00000000
+#define POLEG_NPCM730                          0x00300395
+#define POLEG_NPCM710                          0x00200380
+
+#define PWRON_SECEN                    7         /* STRAP8 */
+#define NPCM_GCR_BA                  0xF0800000
+
+struct npcm_gcr {
+       unsigned int  pdid;
+       unsigned int  pwron;
+       unsigned char res1[0x4];
+       unsigned int  mfsel1;
+       unsigned int  mfsel2;
+       unsigned int  miscpe;
+       unsigned char res2[0x20];
+       unsigned int  spswc;
+       unsigned int  intcr;
+       unsigned int  intsr;
+       unsigned char res3[0xc];
+       unsigned int  hifcr;
+       unsigned int  sd1irv1;
+       unsigned int  sd1irv2;
+       unsigned char res4[0x4];
+       unsigned int  intcr2;
+       unsigned int  mfsel3;
+       unsigned int  srcnt;
+       unsigned int  ressr;
+       unsigned int  rlockr1;
+       unsigned int  flockr1;
+       unsigned int  dscnt;
+       unsigned int  mdlr;
+       unsigned char res5[0x18];
+       unsigned int  davclvlr;
+       unsigned int  intcr3;
+       unsigned char res6[0xc];
+       unsigned int  vsintr;
+       unsigned int  mfsel4;
+       unsigned int  sd2irv1;
+       unsigned int  sd2irv2;
+       unsigned char res7[0x8];
+       unsigned int  cpbpntr;
+       unsigned char res8[0x8];
+       unsigned int  cpctl;
+       unsigned int  cp2bst;
+       unsigned int  b2cpnt;
+       unsigned int  cppctl;
+       unsigned int  i2csegsel;
+       unsigned int  i2csegctl;
+       unsigned int  vsrcr;
+       unsigned int  mlockr;
+       unsigned char res9[0x4c];
+       unsigned int  scrpad;
+       unsigned int  usb1phyctl;
+       unsigned int  usb2phyctl;
+};
+
+#endif
diff --git a/arch/arm/mach-npcm/Kconfig b/arch/arm/mach-npcm/Kconfig
new file mode 100644 (file)
index 0000000..cf5043d
--- /dev/null
@@ -0,0 +1,26 @@
+if ARCH_NPCM
+
+config SYS_ARCH
+       default "arm"
+
+config SYS_TEXT_BASE
+       default 0x8000
+
+choice
+       prompt "Nuvoton SoC select"
+       default ARCH_NPCM7xx
+
+config ARCH_NPCM7xx
+       bool "Support Nuvoton NPCM7xx SoC"
+       select CPU_V7A
+       select OF_CONTROL
+       select DM
+       help
+         General support for NPCM7xx BMC (Poleg).
+         Nuvoton NPCM7xx BMC is based on the Cortex A9.
+
+endchoice
+
+source "arch/arm/mach-npcm/npcm7xx/Kconfig"
+
+endif
diff --git a/arch/arm/mach-npcm/Makefile b/arch/arm/mach-npcm/Makefile
new file mode 100644 (file)
index 0000000..8a1572b
--- /dev/null
@@ -0,0 +1 @@
+obj-$(CONFIG_ARCH_NPCM7xx) += npcm7xx/
diff --git a/arch/arm/mach-npcm/npcm7xx/Kconfig b/arch/arm/mach-npcm/npcm7xx/Kconfig
new file mode 100644 (file)
index 0000000..237e7ba
--- /dev/null
@@ -0,0 +1,22 @@
+if ARCH_NPCM7xx
+
+config SYS_CPU
+        default "armv7"
+
+config SYS_SOC
+       default "npcm7xx"
+
+config TARGET_POLEG
+       bool "NPCM POLEG board"
+       help
+         poleg EVB is Nuvoton evaluation board for NPCM750 SoC,
+         supports general functions of Basebase Management
+         Controller(BMC).
+
+config SYS_MEM_TOP_HIDE
+       hex "Reserved TOP memory"
+       default 0x03000000
+
+source "board/nuvoton/poleg_evb/Kconfig"
+
+endif
diff --git a/arch/arm/mach-npcm/npcm7xx/Makefile b/arch/arm/mach-npcm/npcm7xx/Makefile
new file mode 100644 (file)
index 0000000..49f9877
--- /dev/null
@@ -0,0 +1 @@
+obj-$(CONFIG_TARGET_POLEG) += cpu.o l2_cache_pl310_init.o l2_cache_pl310.o
diff --git a/arch/arm/mach-npcm/npcm7xx/cpu.c b/arch/arm/mach-npcm/npcm7xx/cpu.c
new file mode 100644 (file)
index 0000000..dd74bb9
--- /dev/null
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#include <common.h>
+#include <cpu_func.h>
+#include <asm/armv7.h>
+#include <asm/io.h>
+#include <asm/arch/gcr.h>
+
+int print_cpuinfo(void)
+{
+       struct npcm_gcr *gcr = (struct npcm_gcr *)NPCM_GCR_BA;
+       unsigned int id, mdlr;
+
+       mdlr = readl(&gcr->mdlr);
+
+       printf("CPU: ");
+
+       switch (mdlr) {
+       case POLEG_NPCM750:
+               printf("NPCM750 ");
+               break;
+       case POLEG_NPCM730:
+               printf("NPCM730 ");
+               break;
+       case POLEG_NPCM710:
+               printf("NPCM710 ");
+               break;
+       default:
+               printf("NPCM7XX ");
+               break;
+       }
+
+       id = readl(&gcr->pdid);
+       switch (id) {
+       case POLEG_Z1:
+               printf("Z1 is no supported! @ ");
+               break;
+       case POLEG_A1:
+               printf("A1 @ ");
+               break;
+       default:
+               printf("Unknown\n");
+               break;
+       }
+
+       return 0;
+}
+
+void s_init(void)
+{
+       /* Invalidate L2 cache in lowlevel_init */
+       v7_outer_cache_inval_all();
+}
+
+void enable_caches(void)
+{
+       dcache_enable();
+}
+
+void disable_caches(void)
+{
+       dcache_disable();
+}
diff --git a/arch/arm/mach-npcm/npcm7xx/l2_cache_pl310.c b/arch/arm/mach-npcm/npcm7xx/l2_cache_pl310.c
new file mode 100644 (file)
index 0000000..cba2e34
--- /dev/null
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/pl310.h>
+
+void l2_pl310_init(void);
+
+void set_pl310_ctrl(u32 enable)
+{
+       struct pl310_regs *const pl310 = (struct pl310_regs *)CONFIG_SYS_PL310_BASE;
+
+       writel(enable, &pl310->pl310_ctrl);
+}
+
+void v7_outer_cache_enable(void)
+{
+       l2_pl310_init();
+
+       set_pl310_ctrl(1);
+}
+
+void v7_outer_cache_disable(void)
+{
+       set_pl310_ctrl(0);
+}
diff --git a/arch/arm/mach-npcm/npcm7xx/l2_cache_pl310_init.S b/arch/arm/mach-npcm/npcm7xx/l2_cache_pl310_init.S
new file mode 100644 (file)
index 0000000..8ec4e37
--- /dev/null
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+.align 5
+
+#include <linux/linkage.h>
+
+#ifndef CONFIG_SYS_L2CACHE_OFF
+
+ENTRY(l2_pl310_init)
+
+@------------------------------------------------------------------
+@ L2CC (PL310) Initialization
+@------------------------------------------------------------------
+       @ In this example PL310 PA = VA. The memory was marked as Device memory
+       @ in previous stages when defining CORE0 private address space
+       LDR     r0, =0xF03FC000        @ A9_BASE_ADDR
+
+       @ Disable L2 Cache controller just in case it is already on
+       LDR     r1, =0x0
+       STR     r1, [r0,#0x100]
+
+       @ Set aux cntrl
+       @ Way size = 32KB
+       @ Way = 16
+       LDR     r1, =0x02050000
+       ORR     r1, r1, #(1 << 29)      @ Instruction prefetch enable
+       ORR     r1, r1, #(1 << 28)      @ Data prefetch enable
+       ORR     r1, r1, #(1 << 22)      @ cache replacement policy
+       STR     r1, [r0,#0x104]         @ auxilary control reg at offset 0x104
+
+       @ Set tag RAM latency
+       @ 1 cycle RAM write access latency
+       @ 1 cycle RAM read access latency
+       @ 1 cycle RAM setup latency
+       LDR     r1, =0x00000000
+       STR     r1, [r0,#0x108]         @ tag ram control reg at offset 0x108
+
+       @ Set Data RAM latency
+       @ 1 cycle RAM write access latency
+       @ 2 cycles RAM read access latency
+       @ 1 cycle RAM setup latency
+       LDR     r1, =0x00000000
+       STR     r1, [r0,#0x10C]         @ data ram control reg at offset 0x108
+
+       @Cache maintenance - invalidate 16 ways (0xffff) - base offset 0x77C
+       LDR     r1, =0xFFFF
+       STR     r1, [r0,#0x77C]         @ invalidate by way register at offset 0x77C
+poll_invalidate:
+       LDR     r1, [r0,#0x77C]         @ invalidate by way register at offset 0x77C
+       TST     r1, #1
+       BNE     poll_invalidate
+
+       @ Ensure L2 remains disabled for the time being
+       LDR     r1, =0x0
+       STR     r1, [r0,#0x100]
+
+       MRC     p15, 4, r0, c15, c0, 0     @ Read periph base address
+       @ SCU offset from base of private peripheral space = 0x000
+
+       LDR     r1, [r0, #0x0]             @ Read the SCU Control Register
+       ORR     r1, r1, #0x1               @ Set bit 0 (The Enable bit)
+       STR     r1, [r0, #0x0]             @ Write back modifed value
+
+       BX      lr
+
+ENDPROC(l2_pl310_init)
+
+#endif
diff --git a/board/nuvoton/poleg_evb/Kconfig b/board/nuvoton/poleg_evb/Kconfig
new file mode 100644 (file)
index 0000000..d3f4c1d
--- /dev/null
@@ -0,0 +1,25 @@
+if TARGET_POLEG
+
+config SYS_BOARD
+       default "poleg_evb"
+
+config SYS_VENDOR
+       default "nuvoton"
+
+config SYS_CONFIG_NAME
+       default "poleg"
+
+choice
+       prompt "Target board select"
+       default TARGET_POLEG_EVB
+
+config TARGET_POLEG_EVB
+       bool "Poleg EVB"
+       help
+         poleg EVB is Nuvoton evaluation board for NPCM750 SoC,
+         supports general functions of Basebase Management
+         Controller(BMC).
+
+endchoice
+
+endif
diff --git a/board/nuvoton/poleg_evb/MAINTAINERS b/board/nuvoton/poleg_evb/MAINTAINERS
new file mode 100644 (file)
index 0000000..8797295
--- /dev/null
@@ -0,0 +1,7 @@
+Poleg EVB
+M:     Stanley Chu <yschu@nuvoton.com>
+M:     Jim Liu <JJLIU0@nuvoton.com>
+S:     Maintained
+F:     board/nuvoton/poleg_evb/
+F:     include/configs/poleg.h
+F:     configs/poleg_evb_defconfig
diff --git a/board/nuvoton/poleg_evb/Makefile b/board/nuvoton/poleg_evb/Makefile
new file mode 100644 (file)
index 0000000..377433d
--- /dev/null
@@ -0,0 +1 @@
+obj-y  := poleg_evb.o
diff --git a/board/nuvoton/poleg_evb/poleg_evb.c b/board/nuvoton/poleg_evb/poleg_evb.c
new file mode 100644 (file)
index 0000000..aef142a
--- /dev/null
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <asm/io.h>
+#include <asm/arch/gcr.h>
+#include <asm/mach-types.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_init(void)
+{
+       return 0;
+}
+
+int dram_init(void)
+{
+       struct npcm_gcr *gcr = (struct npcm_gcr *)NPCM_GCR_BA;
+
+       int ramsize = (readl(&gcr->intcr3) >> 8) & 0x7;
+
+       switch (ramsize) {
+       case 0:
+               gd->ram_size = 0x08000000; /* 128 MB. */
+               break;
+       case 1:
+               gd->ram_size = 0x10000000; /* 256 MB. */
+               break;
+       case 2:
+               gd->ram_size = 0x20000000; /* 512 MB. */
+               break;
+       case 3:
+               gd->ram_size = 0x40000000; /* 1024 MB. */
+               break;
+       case 4:
+               gd->ram_size = 0x80000000; /* 2048 MB. */
+               break;
+
+       default:
+       break;
+       }
+
+       return 0;
+}
diff --git a/configs/poleg_evb_defconfig b/configs/poleg_evb_defconfig
new file mode 100644 (file)
index 0000000..f7bdefc
--- /dev/null
@@ -0,0 +1,40 @@
+CONFIG_ARM=y
+CONFIG_ARCH_CPU_INIT=y
+CONFIG_ARCH_NPCM=y
+CONFIG_SYS_TEXT_BASE=0x8200
+CONFIG_SYS_MALLOC_LEN=0x240000
+CONFIG_SYS_MALLOC_F_LEN=0x1000
+CONFIG_NR_DRAM_BANKS=2
+CONFIG_ENV_SIZE=0x40000
+CONFIG_ENV_OFFSET=0x100000
+CONFIG_ENV_SECT_SIZE=0x4000
+CONFIG_DM_GPIO=y
+CONFIG_DEFAULT_DEVICE_TREE="nuvoton-npcm750-evb"
+CONFIG_ARCH_NPCM7xx=y
+CONFIG_TARGET_POLEG=y
+CONFIG_SYS_LOAD_ADDR=0x10000000
+CONFIG_ENV_ADDR=0x80100000
+CONFIG_USE_BOOTCOMMAND=y
+CONFIG_BOOTCOMMAND="run common_bootargs; run romboot"
+CONFIG_SYS_PROMPT="U-Boot>"
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_SPI=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_UUID=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_CLK=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_WINBOND=y
+CONFIG_DM_ETH=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
+CONFIG_DM_SERIAL=y
+CONFIG_NPCM_SERIAL=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_SYSRESET=y
+CONFIG_SYSRESET_WATCHDOG=y
+CONFIG_TIMER=y
+CONFIG_NPCM_TIMER=y
diff --git a/include/configs/poleg.h b/include/configs/poleg.h
new file mode 100644 (file)
index 0000000..c21b063
--- /dev/null
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#ifndef __CONFIG_POLEG_H
+#define __CONFIG_POLEG_H
+
+#ifndef CONFIG_SYS_L2CACHE_OFF
+#define CONFIG_SYS_L2_PL310            1
+#define CONFIG_SYS_PL310_BASE  0xF03FC000       /* L2 - Cache Regs Base (4k Space)*/
+#endif
+
+#define CONFIG_SYS_MAXARGS              32
+#define CONFIG_SYS_CBSIZE               256
+#define CONFIG_SYS_PBSIZE               (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_BOOTMAPSZ            (0x30 << 20)
+#define CONFIG_SYS_SDRAM_BASE           0x0
+#define CONFIG_SYS_INIT_SP_ADDR         (0x00008000 - GENERATED_GBL_DATA_SIZE)
+
+/* Default environemnt variables */
+#define CONFIG_SERVERIP                 192.168.0.1
+#define CONFIG_IPADDR                   192.168.0.2
+#define CONFIG_NETMASK                  255.255.255.0
+#define CONFIG_EXTRA_ENV_SETTINGS   "uimage_flash_addr=80200000\0"   \
+               "stdin=serial\0"   \
+               "stdout=serial\0"   \
+               "stderr=serial\0"    \
+               "ethact=eth${eth_num}\0"   \
+               "romboot=echo Booting from flash; echo +++ uimage at 0x${uimage_flash_addr}; " \
+               "echo Using bootargs: ${bootargs};bootm ${uimage_flash_addr}\0" \
+               "autostart=yes\0"   \
+               "eth_num=0\0"    \
+               "ethaddr=00:00:F7:A0:00:FC\0"    \
+               "eth1addr=00:00:F7:A0:00:FD\0"   \
+               "eth2addr=00:00:F7:A0:00:FE\0"    \
+               "eth3addr=00:00:F7:A0:00:FF\0"    \
+               "common_bootargs=setenv bootargs earlycon=${earlycon} root=/dev/ram "   \
+               "console=${console} mem=${mem} ramdisk_size=48000 basemac=${ethaddr}\0"    \
+               "sd_prog=fatload mmc 0 10000000 image-bmc; cp.b 10000000 80000000 ${filesize}\0"  \
+               "sd_run=fatload mmc 0 10000000 image-bmc; bootm 10200000\0"   \
+               "\0"
+
+#endif
diff --git a/include/dt-bindings/reset/nuvoton,npcm7xx-reset.h b/include/dt-bindings/reset/nuvoton,npcm7xx-reset.h
new file mode 100644 (file)
index 0000000..757f5e3
--- /dev/null
@@ -0,0 +1,91 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+// Copyright (c) 2020 Nuvoton Technology corporation.
+
+#ifndef _DT_BINDINGS_NPCM7XX_RESET_H
+#define _DT_BINDINGS_NPCM7XX_RESET_H
+
+#define NPCM7XX_RESET_IPSRST1          0x20
+#define NPCM7XX_RESET_IPSRST2          0x24
+#define NPCM7XX_RESET_IPSRST3          0x34
+
+/* Reset lines on IP1 reset module (NPCM7XX_RESET_IPSRST1) */
+#define NPCM7XX_RESET_FIU3             1
+#define NPCM7XX_RESET_UDC1             5
+#define NPCM7XX_RESET_EMC1             6
+#define NPCM7XX_RESET_UART_2_3         7
+#define NPCM7XX_RESET_UDC2             8
+#define NPCM7XX_RESET_PECI             9
+#define NPCM7XX_RESET_AES              10
+#define NPCM7XX_RESET_UART_0_1         11
+#define NPCM7XX_RESET_MC               12
+#define NPCM7XX_RESET_SMB2             13
+#define NPCM7XX_RESET_SMB3             14
+#define NPCM7XX_RESET_SMB4             15
+#define NPCM7XX_RESET_SMB5             16
+#define NPCM7XX_RESET_PWM_M0           18
+#define NPCM7XX_RESET_TIMER_0_4                19
+#define NPCM7XX_RESET_TIMER_5_9                20
+#define NPCM7XX_RESET_EMC2             21
+#define NPCM7XX_RESET_UDC4             22
+#define NPCM7XX_RESET_UDC5             23
+#define NPCM7XX_RESET_UDC6             24
+#define NPCM7XX_RESET_UDC3             25
+#define NPCM7XX_RESET_ADC              27
+#define NPCM7XX_RESET_SMB6             28
+#define NPCM7XX_RESET_SMB7             29
+#define NPCM7XX_RESET_SMB0             30
+#define NPCM7XX_RESET_SMB1             31
+
+/* Reset lines on IP2 reset module (NPCM7XX_RESET_IPSRST2) */
+#define NPCM7XX_RESET_MFT0             0
+#define NPCM7XX_RESET_MFT1             1
+#define NPCM7XX_RESET_MFT2             2
+#define NPCM7XX_RESET_MFT3             3
+#define NPCM7XX_RESET_MFT4             4
+#define NPCM7XX_RESET_MFT5             5
+#define NPCM7XX_RESET_MFT6             6
+#define NPCM7XX_RESET_MFT7             7
+#define NPCM7XX_RESET_MMC              8
+#define NPCM7XX_RESET_SDHC             9
+#define NPCM7XX_RESET_GFX_SYS          10
+#define NPCM7XX_RESET_AHB_PCIBRG       11
+#define NPCM7XX_RESET_VDMA             12
+#define NPCM7XX_RESET_ECE              13
+#define NPCM7XX_RESET_VCD              14
+#define NPCM7XX_RESET_OTP              16
+#define NPCM7XX_RESET_SIOX1            18
+#define NPCM7XX_RESET_SIOX2            19
+#define NPCM7XX_RESET_3DES             21
+#define NPCM7XX_RESET_PSPI1            22
+#define NPCM7XX_RESET_PSPI2            23
+#define NPCM7XX_RESET_GMAC2            25
+#define NPCM7XX_RESET_USB_HOST         26
+#define NPCM7XX_RESET_GMAC1            28
+#define NPCM7XX_RESET_CP               31
+
+/* Reset lines on IP3 reset module (NPCM7XX_RESET_IPSRST3) */
+#define NPCM7XX_RESET_PWM_M1           0
+#define NPCM7XX_RESET_SMB12            1
+#define NPCM7XX_RESET_SPIX             2
+#define NPCM7XX_RESET_SMB13            3
+#define NPCM7XX_RESET_UDC0             4
+#define NPCM7XX_RESET_UDC7             5
+#define NPCM7XX_RESET_UDC8             6
+#define NPCM7XX_RESET_UDC9             7
+#define NPCM7XX_RESET_PCI_MAILBOX      9
+#define NPCM7XX_RESET_SMB14            12
+#define NPCM7XX_RESET_SHA              13
+#define NPCM7XX_RESET_SEC_ECC          14
+#define NPCM7XX_RESET_PCIE_RC          15
+#define NPCM7XX_RESET_TIMER_10_14      16
+#define NPCM7XX_RESET_RNG              17
+#define NPCM7XX_RESET_SMB15            18
+#define NPCM7XX_RESET_SMB8             19
+#define NPCM7XX_RESET_SMB9             20
+#define NPCM7XX_RESET_SMB10            21
+#define NPCM7XX_RESET_SMB11            22
+#define NPCM7XX_RESET_ESPI             23
+#define NPCM7XX_RESET_USB_PHY_1                24
+#define NPCM7XX_RESET_USB_PHY_2                25
+
+#endif