Merge tag 'bmc-5.13-wpcm450' of git://git.kernel.org/pub/scm/linux/kernel/git/joel...
authorArnd Bergmann <arnd@arndb.de>
Fri, 9 Apr 2021 07:02:55 +0000 (09:02 +0200)
committerArnd Bergmann <arnd@arndb.de>
Fri, 9 Apr 2021 07:02:55 +0000 (09:02 +0200)
Nuvoton WPCM450 BMC SoC

This adds basic support for the Nuvoton WPCM450 BMC SoC. It's an older
SoC but still commonly found on eBay, mostly in Supermicro X9 server
boards.

Third-party documentation is available at: https://github.com/neuschaefer/wpcm450/wiki

The code has been contributed by Jonathan Neuschäfer who has also
stepped forward to maintain the soc.

* tag 'bmc-5.13-wpcm450' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/bmc:
  ARM: config: Add WPCM to multi v5
  MAINTAINERS: Add entry for Nuvoton WPCM450
  ARM: dts: Add devicetree for Supermicro X9SCi-LN4F based on WPCM450
  ARM: dts: Add devicetree for Nuvoton WPCM450 BMC chip
  watchdog: npcm: Add support for WPCM450
  ARM: npcm: Introduce Nuvoton WPCM450 SoC
  dt-bindings: watchdog: npcm: Add nuvoton,wpcm450-wdt
  dt-bindings: arm: npcm: Add nuvoton,wpcm450 compatible string
  dt-bindings: vendor-prefixes: Add Supermicro
  ARM: dts: Add board-specific compatible string to npcm750-evb devicetree
  dt-bindings: arm: Convert nuvoton,npcm750 binding to YAML

Link: https://lore.kernel.org/r/CACPK8Xdj20TcJckH8fx757ACa4hT4j3bZEctT0Przjv8XJd7KA@mail.gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
14 files changed:
Documentation/devicetree/bindings/arm/npcm/npcm.txt [deleted file]
Documentation/devicetree/bindings/arm/npcm/npcm.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/vendor-prefixes.yaml
Documentation/devicetree/bindings/watchdog/nuvoton,npcm-wdt.txt
MAINTAINERS
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/nuvoton-npcm750-evb.dts
arch/arm/boot/dts/nuvoton-wpcm450-supermicro-x9sci-ln4f.dts [new file with mode: 0644]
arch/arm/boot/dts/nuvoton-wpcm450.dtsi [new file with mode: 0644]
arch/arm/configs/multi_v5_defconfig
arch/arm/mach-npcm/Kconfig
arch/arm/mach-npcm/Makefile
arch/arm/mach-npcm/wpcm450.c [new file with mode: 0644]
drivers/watchdog/npcm_wdt.c

diff --git a/Documentation/devicetree/bindings/arm/npcm/npcm.txt b/Documentation/devicetree/bindings/arm/npcm/npcm.txt
deleted file mode 100644 (file)
index 2d87d9e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-NPCM Platforms Device Tree Bindings
------------------------------------
-NPCM750 SoC
-Required root node properties:
-       - compatible = "nuvoton,npcm750";
-
diff --git a/Documentation/devicetree/bindings/arm/npcm/npcm.yaml b/Documentation/devicetree/bindings/arm/npcm/npcm.yaml
new file mode 100644 (file)
index 0000000..95e5137
--- /dev/null
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/npcm/npcm.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NPCM Platforms Device Tree Bindings
+
+maintainers:
+  - Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+
+properties:
+  $nodename:
+    const: '/'
+  compatible:
+    oneOf:
+      - description: WPCM450 based boards
+        items:
+          - enum:
+              - supermicro,x9sci-ln4f-bmc   # Supermicro X9SCI-LN4F server's BMC
+          - const: nuvoton,wpcm450
+
+      - description: NPCM750 based boards
+        items:
+          - enum:
+              - nuvoton,npcm750-evb         # NPCM750 evaluation board
+          - const: nuvoton,npcm750
+
+additionalProperties: true
index f6064d84a424de4db2bc3bf6dc149569d8b35f17..ec6d6ccfbbb3b5f7c12511bf25d3bb2a90a6c610 100644 (file)
@@ -1085,6 +1085,8 @@ patternProperties:
     description: Shenzhen Sunchip Technology Co., Ltd
   "^SUNW,.*":
     description: Sun Microsystems, Inc
+  "^supermicro,.*":
+    description: Super Micro Computer, Inc.
   "^silvaco,.*":
     description: Silvaco, Inc.
   "^swir,.*":
index 6d593003c933bedddafb80ef685eeec8bb7facf0..9059f54dc023df58cdde319c2bef389e0b895f83 100644 (file)
@@ -5,7 +5,8 @@ The watchdog supports a pre-timeout interrupt that fires 10ms before the
 expiry.
 
 Required properties:
-- compatible      : "nuvoton,npcm750-wdt" for NPCM750 (Poleg).
+- compatible      : "nuvoton,npcm750-wdt" for NPCM750 (Poleg), or
+                    "nuvoton,wpcm450-wdt" for WPCM450 (Hermon).
 - reg             : Offset and length of the register set for the device.
 - interrupts      : Contain the timer interrupt with flags for
                     falling edge.
index d92f85ca831d30d658fef768575ba538be4d4b93..661770e8e6fc125c8f5c54ae10d0c2f289e4b1e6 100644 (file)
@@ -2194,6 +2194,15 @@ F:       drivers/*/*npcm*
 F:     drivers/*/*/*npcm*
 F:     include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
 
+ARM/NUVOTON WPCM450 ARCHITECTURE
+M:     Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+L:     openbmc@lists.ozlabs.org (moderated for non-subscribers)
+S:     Maintained
+F:     Documentation/devicetree/bindings/*/*wpcm*
+F:     arch/arm/boot/dts/nuvoton-wpcm450*
+F:     arch/arm/mach-npcm/wpcm450.c
+F:     drivers/*/*wpcm*
+
 ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
 L:     openmoko-kernel@lists.openmoko.org (subscribers-only)
 S:     Orphan
index 8e5d4ab4e75e6e027309e6dd6583d7ea5ac25b86..5a9d99d5443e4b3e3966b86a2374e7a556908291 100644 (file)
@@ -333,6 +333,8 @@ dtb-$(CONFIG_ARCH_LPC18XX) += \
 dtb-$(CONFIG_ARCH_LPC32XX) += \
        lpc3250-ea3250.dtb \
        lpc3250-phy3250.dtb
+dtb-$(CONFIG_ARCH_WPCM450) += \
+       nuvoton-wpcm450-supermicro-x9sci-ln4f.dtb
 dtb-$(CONFIG_ARCH_NPCM7XX) += \
        nuvoton-npcm730-gsj.dtb \
        nuvoton-npcm730-kudo.dtb \
index 9f13d08f5804ecd3b40e80687f60377f931b0860..dea3dbc4a6a5248c11eeaf9bebf77598df781a71 100644 (file)
@@ -9,7 +9,7 @@
 
 / {
        model = "Nuvoton npcm750 Development Board (Device Tree)";
-       compatible = "nuvoton,npcm750";
+       compatible = "nuvoton,npcm750-evb", "nuvoton,npcm750";
 
        aliases {
                ethernet2 = &gmac0;
diff --git a/arch/arm/boot/dts/nuvoton-wpcm450-supermicro-x9sci-ln4f.dts b/arch/arm/boot/dts/nuvoton-wpcm450-supermicro-x9sci-ln4f.dts
new file mode 100644 (file)
index 0000000..83f27fb
--- /dev/null
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+// Copyright 2021 Jonathan Neuschäfer
+
+/dts-v1/;
+
+/* The last 16 MiB are dedicated to the GPU */
+/memreserve/ 0x07000000 0x01000000;
+
+#include "nuvoton-wpcm450.dtsi"
+
+/ {
+       model = "Supermicro X9SCi-LN4F BMC";
+       compatible = "supermicro,x9sci-ln4f-bmc", "nuvoton,wpcm450";
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0 0x08000000>; /* 128 MiB */
+       };
+};
+
+&serial0 {
+       /*
+        * Debug serial port. TX is exposed on the right pad of unpopulated
+        * resistor R1247, RX on the right pad of R1162.
+        */
+       status = "okay";
+};
+
+&serial1 {
+       /* "Serial over LAN" port. Connected to ttyS2 of the host system. */
+       status = "okay";
+};
+
+&watchdog0 {
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/nuvoton-wpcm450.dtsi b/arch/arm/boot/dts/nuvoton-wpcm450.dtsi
new file mode 100644 (file)
index 0000000..d7cbeb1
--- /dev/null
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+// Copyright 2021 Jonathan Neuschäfer
+
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       compatible = "nuvoton,wpcm450";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       compatible = "arm,arm926ej-s";
+                       device_type = "cpu";
+                       reg = <0>;
+               };
+       };
+
+       clk24m: clock-24mhz {
+               /* 24 MHz dummy clock */
+               compatible = "fixed-clock";
+               clock-frequency = <24000000>;
+               #clock-cells = <0>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               interrupt-parent = <&aic>;
+               ranges;
+
+               serial0: serial@b8000000 {
+                       compatible = "nuvoton,wpcm450-uart";
+                       reg = <0xb8000000 0x20>;
+                       reg-shift = <2>;
+                       interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk24m>;
+                       status = "disabled";
+               };
+
+               serial1: serial@b8000100 {
+                       compatible = "nuvoton,wpcm450-uart";
+                       reg = <0xb8000100 0x20>;
+                       reg-shift = <2>;
+                       interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clk24m>;
+                       status = "disabled";
+               };
+
+               timer0: timer@b8001000 {
+                       compatible = "nuvoton,wpcm450-timer";
+                       interrupts = <12 IRQ_TYPE_LEVEL_HIGH>;
+                       reg = <0xb8001000 0x1c>;
+                       clocks = <&clk24m>;
+               };
+
+               watchdog0: watchdog@b800101c {
+                       compatible = "nuvoton,wpcm450-wdt";
+                       interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
+                       reg = <0xb800101c 0x4>;
+                       clocks = <&clk24m>;
+                       status = "disabled";
+               };
+
+               aic: interrupt-controller@b8002000 {
+                       compatible = "nuvoton,wpcm450-aic";
+                       reg = <0xb8002000 0x1000>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+};
index 9f862b21b40abfd2936f8437e73f258b71179666..80a3ae02d7594472e5c8e451f5c9a20d9767b610 100644 (file)
@@ -33,6 +33,8 @@ CONFIG_SOC_IMX25=y
 CONFIG_SOC_IMX27=y
 CONFIG_ARCH_MVEBU=y
 CONFIG_MACH_KIRKWOOD=y
+CONFIG_ARCH_NPCM=y
+CONFIG_ARCH_WPCM450=y
 CONFIG_ARCH_ORION5X=y
 CONFIG_MACH_DB88F5281=y
 CONFIG_MACH_RD88F5182=y
@@ -178,6 +180,7 @@ CONFIG_THERMAL=y
 CONFIG_KIRKWOOD_THERMAL=y
 CONFIG_AT91SAM9X_WATCHDOG=y
 CONFIG_ORION_WATCHDOG=y
+CONFIG_NPCM7XX_WATCHDOG=y
 CONFIG_IMX2_WDT=y
 CONFIG_MFD_ATMEL_HLCDC=y
 # CONFIG_ABX500_CORE is not set
index 7f7002dc2b21fec89afd25529c87d7ca16630cf2..658c8efb4ca1445891c370aad48ff924658537d5 100644 (file)
@@ -1,11 +1,21 @@
 # SPDX-License-Identifier: GPL-2.0-only
 menuconfig ARCH_NPCM
        bool "Nuvoton NPCM Architecture"
-       depends on ARCH_MULTI_V7
+       depends on ARCH_MULTI_V5 || ARCH_MULTI_V7
        select PINCTRL
 
 if ARCH_NPCM
 
+config ARCH_WPCM450
+       bool "Support for WPCM450 BMC (Hermon)"
+       depends on ARCH_MULTI_V5
+       select CPU_ARM926T
+       select NPCM7XX_TIMER
+       help
+         General support for WPCM450 BMC (Hermon).
+
+         Winbond/Nuvoton WPCM450 BMC based on the ARM926EJ-S.
+
 config ARCH_NPCM7XX
        bool "Support for NPCM7xx BMC (Poleg)"
        depends on ARCH_MULTI_V7
index 1bc3a70bfab8b79b78f34529a8a9645f9acb3336..8d61fcd42fb1988c5fb9d0dcbdba2d9d99bdbe97 100644 (file)
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-only
 AFLAGS_headsmp.o               += -march=armv7-a
 
+obj-$(CONFIG_ARCH_WPCM450)     += wpcm450.o
 obj-$(CONFIG_ARCH_NPCM7XX)     += npcm7xx.o
 obj-$(CONFIG_SMP)              += platsmp.o headsmp.o
diff --git a/arch/arm/mach-npcm/wpcm450.c b/arch/arm/mach-npcm/wpcm450.c
new file mode 100644 (file)
index 0000000..f17b3da
--- /dev/null
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright 2021 Jonathan Neuschäfer
+
+#include <asm/mach/arch.h>
+
+static const char *const wpcm450_dt_match[] = {
+       "nuvoton,wpcm450",
+       NULL
+};
+
+DT_MACHINE_START(WPCM450_DT, "WPCM450 chip")
+       .dt_compat      = wpcm450_dt_match,
+MACHINE_END
index 765577f11c8db371ff3b8d654a8dc3bc73fb9041..28a24caa2627c924416ef628cc548fa6383d2da2 100644 (file)
@@ -229,6 +229,7 @@ static int npcm_wdt_probe(struct platform_device *pdev)
 
 #ifdef CONFIG_OF
 static const struct of_device_id npcm_wdt_match[] = {
+       {.compatible = "nuvoton,wpcm450-wdt"},
        {.compatible = "nuvoton,npcm750-wdt"},
        {},
 };