Add basic support for the Nuvoton NPCM750 BMC

Signed-off-by: Jim Liu <[email protected]>
---
 arch/arm/Kconfig                              |  8 ++
 arch/arm/Makefile                             |  1 +
 arch/arm/include/asm/arch-npcm7xx/cpu.h       | 28 ++++++
 arch/arm/include/asm/arch-npcm7xx/gcr.h       | 64 +++++++++++++
 arch/arm/include/asm/arch-npcm7xx/rst.h       | 37 ++++++++
 arch/arm/mach-nuvoton/Kconfig                 | 34 +++++++
 arch/arm/mach-nuvoton/Makefile                |  1 +
 arch/arm/mach-nuvoton/npcm7xx/Kconfig         | 18 ++++
 arch/arm/mach-nuvoton/npcm7xx/Makefile        |  2 +
 arch/arm/mach-nuvoton/npcm7xx/cpu.c           | 67 ++++++++++++++
 .../arm/mach-nuvoton/npcm7xx/l2_cache_pl310.c | 30 ++++++
 .../npcm7xx/l2_cache_pl310_init.S             | 89 ++++++++++++++++++
 arch/arm/mach-nuvoton/npcm7xx/reset.c         | 46 ++++++++++
 board/nuvoton/poleg/Kconfig                   | 31 +++++++
 board/nuvoton/poleg/Makefile                  |  1 +
 board/nuvoton/poleg/poleg_evb.c               | 52 +++++++++++
 include/configs/poleg.h                       | 77 ++++++++++++++++
 .../dt-bindings/reset/nuvoton,npcm7xx-reset.h | 91 +++++++++++++++++++
 18 files changed, 677 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-npcm7xx/cpu.h
 create mode 100644 arch/arm/include/asm/arch-npcm7xx/gcr.h
 create mode 100644 arch/arm/include/asm/arch-npcm7xx/rst.h
 create mode 100644 arch/arm/mach-nuvoton/Kconfig
 create mode 100644 arch/arm/mach-nuvoton/Makefile
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/Kconfig
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/Makefile
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/cpu.c
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310.c
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310_init.S
 create mode 100644 arch/arm/mach-nuvoton/npcm7xx/reset.c
 create mode 100644 board/nuvoton/poleg/Kconfig
 create mode 100644 board/nuvoton/poleg/Makefile
 create mode 100644 board/nuvoton/poleg/poleg_evb.c
 create mode 100644 include/configs/poleg.h
 create mode 100644 include/dt-bindings/reset/nuvoton,npcm7xx-reset.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4567c183fb..45ab2793b2 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -922,6 +922,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
@@ -2196,6 +2202,8 @@ source "arch/arm/mach-imx/Kconfig"
 
 source "arch/arm/mach-nexell/Kconfig"
 
+source "arch/arm/mach-nuvoton/Kconfig"
+
 source "board/armltd/total_compute/Kconfig"
 
 source "board/bosch/shc/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index ad757e982e..ad29f2418e 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -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)             += nuvoton
 machine-$(CONFIG_ARCH_OMAP2PLUS)       += omap2
 machine-$(CONFIG_ARCH_ORION5X)         += orion5x
 machine-$(CONFIG_ARCH_OWL)             += owl
diff --git a/arch/arm/include/asm/arch-npcm7xx/cpu.h 
b/arch/arm/include/asm/arch-npcm7xx/cpu.h
new file mode 100644
index 0000000000..2189ad2fd3
--- /dev/null
+++ b/arch/arm/include/asm/arch-npcm7xx/cpu.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#ifndef __NPCMX50_CPU_H_
+#define __NPCMX50_CPU_H_
+
+#define NPCM750_GCR_BA                 0xF0800000
+#define NPCM750_CLK_BA                 0xF0801000
+#define NPCM750_GPIO_BA                        0xF0010000
+
+#ifndef __ASSEMBLY__
+
+#define NPCM750_BASE(device, base) \
+static inline unsigned long __attribute__((no_instrument_function)) \
+       npcm_get_base_##device(void) \
+{ \
+       return NPCM750_##base; \
+}
+
+NPCM750_BASE(gcr, GCR_BA)
+NPCM750_BASE(clk, CLK_BA)
+NPCM750_BASE(gpio, GPIO_BA)
+
+#endif
+
+#endif
diff --git a/arch/arm/include/asm/arch-npcm7xx/gcr.h 
b/arch/arm/include/asm/arch-npcm7xx/gcr.h
new file mode 100644
index 0000000000..cbeca27d77
--- /dev/null
+++ b/arch/arm/include/asm/arch-npcm7xx/gcr.h
@@ -0,0 +1,64 @@
+/* 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 */
+
+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/include/asm/arch-npcm7xx/rst.h 
b/arch/arm/include/asm/arch-npcm7xx/rst.h
new file mode 100644
index 0000000000..2545d9ed20
--- /dev/null
+++ b/arch/arm/include/asm/arch-npcm7xx/rst.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+
+#ifndef _NPCM_RST_H_
+#define _NPCM_RST_H_
+
+#define WTCR0_REG       0xF000801C
+#define WTCR_WTR        BIT(0)
+#define WTCR_WTRE       BIT(1)
+#define WTCR_WTE        BIT(7)
+
+enum reset_type {
+       PORST_TYPE    = 0x01,
+       CORST_TYPE    = 0x02,
+       WD0RST_TYPE   = 0x03,
+       SWR1ST_TYPE   = 0x04,
+       SWR2ST_TYPE   = 0x05,
+       SWR3ST_TYPE   = 0x06,
+       SWR4ST_TYPE   = 0x07,
+       WD1RST_TYPE   = 0x08,
+       WD2RST_TYPE   = 0x09,
+       UNKNOWN_TYPE  = 0x10,
+};
+
+#define PORST          BIT(31)
+#define CORST          BIT(30)
+#define WD0RST         BIT(29)
+#define SW1RST         BIT(28)
+#define SW2RST         BIT(27)
+#define SW3RST         BIT(26)
+#define TIPRST         BIT(25)
+#define WD1RST         BIT(24)
+#define WD2RST         BIT(23)
+
+enum reset_type npcm7xx_reset_reason(void);
+
+#endif
+
diff --git a/arch/arm/mach-nuvoton/Kconfig b/arch/arm/mach-nuvoton/Kconfig
new file mode 100644
index 0000000000..5f0128a9ab
--- /dev/null
+++ b/arch/arm/mach-nuvoton/Kconfig
@@ -0,0 +1,34 @@
+if ARCH_NPCM
+
+config SYS_ARCH
+       default "arm"
+
+config SYS_TEXT_BASE
+       default 0x8000
+
+choice
+       prompt "Nuvoton SoC select"
+       default ARCH_NPCM8XX
+
+config ARCH_NPCM8XX
+       bool "Support Nuvoton NPCM8xx SoC"
+       select ARM64
+       help
+         General support for NPCM8xx BMC (Arbel).
+         Nuvoton NPCM8xx BMC is based on the Cortex A35.
+
+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-nuvoton/npcm7xx/Kconfig"
+
+endif
diff --git a/arch/arm/mach-nuvoton/Makefile b/arch/arm/mach-nuvoton/Makefile
new file mode 100644
index 0000000000..8a1572b4f0
--- /dev/null
+++ b/arch/arm/mach-nuvoton/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_ARCH_NPCM7xx) += npcm7xx/
diff --git a/arch/arm/mach-nuvoton/npcm7xx/Kconfig 
b/arch/arm/mach-nuvoton/npcm7xx/Kconfig
new file mode 100644
index 0000000000..6fd37ce367
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/Kconfig
@@ -0,0 +1,18 @@
+if ARCH_NPCM7xx
+
+config SYS_CPU
+        default "armv7"
+
+config SYS_SOC
+       default "npcm7xx"
+
+config TARGET_POLEG
+    bool "NPCM POLEG board"
+
+config SYS_MEM_TOP_HIDE
+       hex "Reserved TOP memory"
+       default 0x03000000
+
+source "board/nuvoton/poleg/Kconfig"
+
+endif
diff --git a/arch/arm/mach-nuvoton/npcm7xx/Makefile 
b/arch/arm/mach-nuvoton/npcm7xx/Makefile
new file mode 100644
index 0000000000..46e48018a0
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/Makefile
@@ -0,0 +1,2 @@
+obj-y  = reset.o
+obj-$(CONFIG_TARGET_POLEG) += cpu.o l2_cache_pl310_init.o l2_cache_pl310.o
diff --git a/arch/arm/mach-nuvoton/npcm7xx/cpu.c 
b/arch/arm/mach-nuvoton/npcm7xx/cpu.c
new file mode 100644
index 0000000000..7872695690
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/cpu.c
@@ -0,0 +1,67 @@
+// 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/cpu.h>
+#include <asm/arch/gcr.h>
+
+int print_cpuinfo(void)
+{
+       struct npcm_gcr *gcr = (struct npcm_gcr *)npcm_get_base_gcr();
+       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-nuvoton/npcm7xx/l2_cache_pl310.c 
b/arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310.c
new file mode 100644
index 0000000000..805e13e863
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310.c
@@ -0,0 +1,30 @@
+// 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);
+
+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-nuvoton/npcm7xx/l2_cache_pl310_init.S 
b/arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310_init.S
new file mode 100644
index 0000000000..8f4124b64d
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/l2_cache_pl310_init.S
@@ -0,0 +1,89 @@
+/* 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
+
+       /*
+               @ Enable Event Counter Control Register. Reset counter 0 and 1 
values
+               LDR     r1, =0x007
+               STR     r1, [r0,#0x200]
+
+               @ Counter 1. Count Drhit event
+               LDR     r1, =0x008
+               STR     r1, [r0,#0x204]
+
+               @ Counter 0. Count Dwhit event
+               LDR     r1, =0x010
+               STR     r1, [r0,#0x208]
+       */
+
+               @ 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/arch/arm/mach-nuvoton/npcm7xx/reset.c 
b/arch/arm/mach-nuvoton/npcm7xx/reset.c
new file mode 100644
index 0000000000..74f925f67b
--- /dev/null
+++ b/arch/arm/mach-nuvoton/npcm7xx/reset.c
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/rst.h>
+#include <asm/arch/gcr.h>
+#include <asm/arch/cpu.h>
+
+void reset_cpu(ulong ignored)
+{
+       /* Generate a watchdog0 reset */
+       writel(WTCR_WTR | WTCR_WTRE | WTCR_WTE, WTCR0_REG);
+       while (1)
+               ;
+}
+
+void reset_misc(void)
+{
+       writel(readl(0xf0800060) & ~(1 << 21), 0xf0800060);
+}
+
+enum reset_type npcm7xx_reset_reason(void)
+{
+       struct npcm_gcr *gcr = (struct npcm_gcr *)npcm_get_base_gcr();
+       enum reset_type type = UNKNOWN_TYPE;
+       u32 value = readl(&gcr->ressr);
+
+       if (value == 0)
+               value = ~readl(&gcr->intcr2);
+
+       if (value & CORST)
+               type = CORST_TYPE;
+       if (value & WD0RST)
+               type = WD0RST_TYPE;
+       if (value & WD1RST)
+               type = WD1RST_TYPE;
+       if (value & WD2RST)
+               type = WD2RST_TYPE;
+       if (value & PORST)
+               type = PORST_TYPE;
+
+       return type;
+}
diff --git a/board/nuvoton/poleg/Kconfig b/board/nuvoton/poleg/Kconfig
new file mode 100644
index 0000000000..b1deef774f
--- /dev/null
+++ b/board/nuvoton/poleg/Kconfig
@@ -0,0 +1,31 @@
+if TARGET_POLEG
+
+config SYS_BOARD
+       default "poleg"
+
+config SYS_VENDOR
+       default "nuvoton"
+
+config SYS_CONFIG_NAME
+       default "poleg"
+
+config NIST_VERSION_ADDR
+       hex "Linux NIST version address"
+       default 0x0
+       help
+         The address of the Linux NIST version, which should be identical
+         to the u-boot version.
+
+choice
+       prompt "Target board select"
+       default TARGET_POLEG_EVB
+
+config TARGET_POLEG_EVB
+        bool "Poleg EVB"
+
+config TARGET_POLEG_RUNBMC
+       bool "Poleg RunBMC"
+
+endchoice
+
+endif
diff --git a/board/nuvoton/poleg/Makefile b/board/nuvoton/poleg/Makefile
new file mode 100644
index 0000000000..377433d60a
--- /dev/null
+++ b/board/nuvoton/poleg/Makefile
@@ -0,0 +1 @@
+obj-y  := poleg_evb.o
diff --git a/board/nuvoton/poleg/poleg_evb.c b/board/nuvoton/poleg/poleg_evb.c
new file mode 100644
index 0000000000..4c455be4ad
--- /dev/null
+++ b/board/nuvoton/poleg/poleg_evb.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/gcr.h>
+#include <asm/io.h>
+#include <asm/mach-types.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_init(void)
+{
+       gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
+       gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
+
+       return 0;
+}
+
+int dram_init(void)
+{
+       struct npcm_gcr *gcr = (struct npcm_gcr *)npcm_get_base_gcr();
+
+       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/include/configs/poleg.h b/include/configs/poleg.h
new file mode 100644
index 0000000000..549b198285
--- /dev/null
+++ b/include/configs/poleg.h
@@ -0,0 +1,77 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (c) 2021 Nuvoton Technology Corp.
+ */
+
+#ifndef __CONFIG_POLEG_H
+#define __CONFIG_POLEG_H
+
+#undef  CONFIG_USE_IRQ
+
+#define CONFIG_ARCH_CPU_INIT
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_MACH_TYPE                       MACH_TYPE_NPCMX50
+
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+#ifndef CONFIG_SYS_L2CACHE_OFF
+#define CONFIG_SYS_L2_PL310            1
+#define CONFIG_SYS_PL310_BASE  0xF03FC000       /* L2 - Cache Regs Base (4k 
Space)*/
+#endif
+#undef CONFIG_SYS_CACHELINE_SIZE
+#define CONFIG_SYS_CACHELINE_SIZE      32
+
+#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_PROMPT_HUSH_PS2         "> "
+
+#define CONFIG_SYS_BOOTMAPSZ            (0x30 << 20)
+#define CONFIG_SYS_SDRAM_BASE           0x0
+#define CONFIG_SYS_INIT_SP_ADDR         (0x00008000 - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_MONITOR_LEN          (256 << 10) /* Reserve 256 kB for 
Monitor   */
+#define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
+
+#define CONFIG_SYS_MEMTEST_START       CONFIG_SYS_SDRAM_BASE
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_MEMTEST_START + 0x08000000)
+
+#define CONFIG_STANDALONE_LOAD_ADDR     0x10000000
+
+#ifndef CONFIG_SYS_MEM_TOP_HIDE
+/* 16MB Graphics Memory size to hide + 32MB for VCD ECE DVC. */
+#define CONFIG_SYS_MEM_TOP_HIDE   ((16 << 20) + (32 << 20))
+#endif
+#define PHYS_SDRAM_1                           CONFIG_SYS_SDRAM_BASE
+
+#define CONFIG_BAUDRATE                 115200
+#define CONFIG_SYS_BAUDRATE_TABLE       {115200, 57600, 38400}
+
+#define CONFIG_SYS_HZ                   1000
+
+/* Default environemnt variables */
+#define CONFIG_BOOTCOMMAND "run common_bootargs; run romboot"
+#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
index 0000000000..2831918804
--- /dev/null
+++ b/include/dt-bindings/reset/nuvoton,npcm7xx-reset.h
@@ -0,0 +1,91 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+// Copyright (c) 2020 Nuvoton Technology corporation.
+
+#ifndef _DT_BINDINGS_NPCM8XX_RESET_H
+#define _DT_BINDINGS_NPCM8XX_RESET_H
+
+#define NPCM7XX_RESET_IPSRST1          0x20
+#define NPCM7XX_RESET_IPSRST2          0x24
+#define NPCM7XX_RESET_IPSRST3          0x34
+
+/* Reset lines on IP1 reset module (NPCM8XX_RESET_IPSRST1) */
+#define NPCM7XX_RESET_SPI3             1
+#define NPCM7XX_RESET_UDC1             5
+#define NPCM7XX_RESET_EMAC1            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_EMAC2            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 (NPCM8XX_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_USBH1            26
+#define NPCM7XX_RESET_GMAC1            28
+#define NPCM7XX_RESET_CP1              31
+
+/* Reset lines on IP3 reset module (NPCM8XX_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_USBPHY1          24
+#define NPCM7XX_RESET_USBPHY2          25
+
+#endif
-- 
2.17.1

Reply via email to