Skip to contentSkip to conversation

arm64: dts: nuvoton: add NPCM845 SoC and EVB support

PATCH Applied Tomer Maimon 3 participants 10 messages Jul 8 – Jul 27

Subsystems (2)

v8 of 10 Applied Latest is v10 →

lore
Share & tools
lore

Tomer Maimon

author maintainer
#0 lore raw

v8 cover arm64: dts: nuvoton: add NPCM845 SoC and EVB support

This series fixes the remaining timer binding issue and adds device tree support for peripherals on the Nuvoton NPCM845 SoC and its Evaluation Board (EVB).

The first patch drops the undocumented timer0 clock-names property. The second patch reorders timer0 and PECI so the APB child nodes stay in ascending unit-address order.
The third patch introduces peripheral nodes for Ethernet, MMC, SPI, USB, RNG, ADC, PWM-FAN, I2C, and OP-TEE firmware in the NPCM845 SoC device tree.
The fourth patch enables these peripherals for the NPCM845-EVB, adding MDIO nodes, reserved memory, aliases, and board-specific configurations such as PHY modes and SPI flash partitions.

The NPCM8XX device tree was tested on NPCM845 evaluation board.

Addressed comments from:
- sashiko-bot

Changes since version 7:
- modify timer place.
- add PSPI to commit message.

Changes since version 6:
- remove IPMI i2C device.
- Add FIX enable property.
- Keep patches 1-3 unchanged.

Changes since version 5:
- Add no-map to the tip_reserved firmware memory region.
- Drop the unsupported snps,eee-force-disable property from gmac1.
- Rework the FIU0 boot flash layout into nested fixed-partitions under the bmc container.
- Keep patches 1-3 unchanged.

Changes since version 4:
- Split the timer0 clock-names cleanup into a separate first patch.
- Remove nuvoton,sysgcr from udc8 and udc9.
- Rename apb: bus@f0000000 back to apb.
- Rename spix-mode to nuvoton,spix-mode.
- Keep cooling-levels as 32-bit cells while encoding fan-tach-ch as /bits/ 8.

Changes since version 3:
- reomve tmp100.

Changes since version 2:
- Fix dts warning
- Arrange node order by ascending unit address.

Changes since version 1:
- Fix commit message
- Fix dtbs_check warnings.

Tomer Maimon (4):
arm64: dts: nuvoton: npcm845: Drop redundant timer clock-names
arm64: dts: nuvoton: npcm845: Reorder timer0 and PECI nodes
arm64: dts: nuvoton: npcm845: Add peripheral nodes
arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

 .../dts/nuvoton/nuvoton-common-npcm8xx.dtsi   | 721 +++++++++++++++++-
 .../boot/dts/nuvoton/nuvoton-npcm845-evb.dts  | 404 ++++++++++
 .../boot/dts/nuvoton/nuvoton-npcm845.dtsi     |   7 +
 3 files changed, 1115 insertions(+), 17 deletions(-)
Signature · 1 line
2.34.1
author maintainer
#1 lore raw

PATCH v8 1/4 arm64: dts: nuvoton: npcm845: Drop redundant timer clock-names

The NPCM845 timer0 node references a single clock, but its clock-names property is not described by the timer binding. Drop the undocumented name so the DTS matches the binding.

---
 arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi | 1 -
 1 file changed, 1 deletion(-)
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +0 -1
index c781190b4..9e4fa2669 100644
@@ -73,7 +73,6 @@ timer0: timer@8000 {
 				interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
 				reg = <0x8000 0x1C>;
 				clocks = <&refclk>;
-				clock-names = "refclk";
 			};
 
 			serial0: serial@0 {
Signature · 1 line
2.34.1
author maintainer
#2 lore raw

PATCH v8 2/4 arm64: dts: nuvoton: npcm845: Reorder timer0 and PECI nodes

In reply to Tomer Maimon

Move the timer0 and PECI nodes so the APB children are ordered by ascending unit address.

---
 .../dts/nuvoton/nuvoton-common-npcm8xx.dtsi   | 32 +++++++++----------
 1 file changed, 16 insertions(+), 16 deletions(-)
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +16 -16
index 9e4fa2669..545034ac1 100644
@@ -59,22 +59,6 @@ apb {
 			ranges = <0x0 0x0 0xf0000000 0x00300000>,
 				<0xfff00000 0x0 0xfff00000 0x00016000>;
 
-			peci: peci-controller@100000 {
-				compatible = "nuvoton,npcm845-peci";
-				reg = <0x100000 0x1000>;
-				interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
-				clocks = <&clk NPCM8XX_CLK_APB3>;
-				cmd-timeout-ms = <1000>;
-				status = "disabled";
-			};
-
-			timer0: timer@8000 {
-				compatible = "nuvoton,npcm845-timer";
-				interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
-				reg = <0x8000 0x1C>;
-				clocks = <&refclk>;
-			};
-
 			serial0: serial@0 {
 				compatible = "nuvoton,npcm845-uart", "nuvoton,npcm750-uart";
 				reg = <0x0 0x1000>;
@@ -138,6 +122,13 @@ serial6: serial@6000 {
 				status = "disabled";
 			};
 
+			timer0: timer@8000 {
+				compatible = "nuvoton,npcm845-timer";
+				interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
+				reg = <0x8000 0x1C>;
+				clocks = <&refclk>;
+			};
+
 			watchdog0: watchdog@801c {
 				compatible = "nuvoton,npcm845-wdt", "nuvoton,npcm750-wdt";
 				interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
@@ -161,6 +152,15 @@ watchdog2: watchdog@a01c {
 				status = "disabled";
 				clocks = <&refclk>;
 			};
+
+			peci: peci-controller@100000 {
+				compatible = "nuvoton,npcm845-peci";
+				reg = <0x100000 0x1000>;
+				interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&clk NPCM8XX_CLK_APB3>;
+				cmd-timeout-ms = <1000>;
+				status = "disabled";
+			};
 		};
 	};
 
Signature · 1 line
2.34.1
author maintainer
#3 lore raw

PATCH v8 3/4 arm64: dts: nuvoton: npcm845: Add peripheral nodes

In reply to Tomer Maimon

Extend the NPCM845 SoC DTSI with the peripheral controller nodes needed by the evaluation board and downstream platforms. Add the Ethernet MACs, USB device controllers and PHY, MMC controller, FIU controllers, memory controller, RNG, ADC, PWM/FAN controller, PSPI, and I2C buses. Also add the OP-TEE firmware node needed to describe these blocks.

---
 .../dts/nuvoton/nuvoton-common-npcm8xx.dtsi   | 688 ++++++++++++++++++
 .../boot/dts/nuvoton/nuvoton-npcm845.dtsi     |   7 +
 2 files changed, 695 insertions(+)
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +688 -0
index 545034ac1..32ee8d284 100644
@@ -4,6 +4,7 @@
 #include <dt-bindings/clock/nuvoton,npcm845-clk.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/gpio/gpio.h>
 
 / {
 	#address-cells = <2>;
@@ -35,6 +36,11 @@ gic: interrupt-controller@dfff9000 {
 		};
 	};
 
+	udc0_phy: usb-phy {
+		compatible = "usb-nop-xceiv";
+		#phy-cells = <0>;
+	};
+
 	ahb {
 		#address-cells = <2>;
 		#size-cells = <2>;
@@ -51,6 +57,252 @@ clk: rstc: reset-controller@f0801000 {
 			#clock-cells = <1>;
 		};
 
+		gmac1: ethernet@f0804000 {
+			device_type = "network";
+			compatible = "snps,dwmac-3.72a", "snps,dwmac";
+			reg = <0x0 0xf0804000 0x0 0x2000>;
+			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "macirq";
+			clocks	= <&clk NPCM8XX_CLK_AHB>;
+			clock-names = "stmmaceth";
+			pinctrl-names = "default";
+			pinctrl-0 = <&rg2_pins
+					&rg2mdio_pins>;
+			status = "disabled";
+		};
+
+		gmac2: ethernet@f0806000 {
+			device_type = "network";
+			compatible = "snps,dwmac-3.72a", "snps,dwmac";
+			reg = <0x0 0xf0806000 0x0 0x2000>;
+			interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "macirq";
+			clocks	= <&clk NPCM8XX_CLK_AHB>;
+			clock-names = "stmmaceth";
+			pinctrl-names = "default";
+			pinctrl-0 = <&r1_pins
+					&r1err_pins
+					&r1md_pins>;
+			status = "disabled";
+		};
+
+		gmac3: ethernet@f0808000 {
+			device_type = "network";
+			compatible = "snps,dwmac-3.72a", "snps,dwmac";
+			reg = <0x0 0xf0808000 0x0 0x2000>;
+			interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "macirq";
+			clocks	= <&clk NPCM8XX_CLK_AHB>;
+			clock-names = "stmmaceth";
+			pinctrl-names = "default";
+			pinctrl-0 = <&r2_pins
+					&r2err_pins
+					&r2md_pins>;
+			status = "disabled";
+		};
+
+		mc: memory-controller@f0824000 {
+			compatible = "nuvoton,npcm845-memory-controller";
+			reg = <0x0 0xf0824000 0x0 0x1000>;
+			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		udc0: usb@f0830000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0830000 0x0 0x1000
+			       0x0 0xfffeb000 0x0 0x800>;
+			interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc1: usb@f0831000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0831000 0x0 0x1000
+			       0x0 0xfffeb800 0x0 0x800>;
+			interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc2: usb@f0832000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0832000 0x0 0x1000
+			       0x0 0xfffec000 0x0 0x800>;
+			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc3: usb@f0833000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0833000 0x0 0x1000
+			       0x0 0xfffec800 0x0 0x800>;
+			interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc4: usb@f0834000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0834000 0x0 0x1000
+			       0x0 0xfffed000 0x0 0x800>;
+			interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc5: usb@f0835000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0835000 0x0 0x1000
+			       0x0 0xfffed800 0x0 0x800>;
+			interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc6: usb@f0836000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0836000 0x0 0x1000
+			       0x0 0xfffee000 0x0 0x800>;
+			interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc7: usb@f0837000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0837000 0x0 0x1000
+			       0x0 0xfffee800 0x0 0x800>;
+			interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc8: usb@f0838000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0838000 0x0 0x1000
+			       0x0 0xfffef000 0x0 0x800>;
+			interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		udc9: usb@f0839000 {
+			compatible = "nuvoton,npcm845-udc", "nuvoton,npcm750-udc";
+			reg = <0x0 0xf0839000 0x0 0x1000
+			       0x0 0xfffef800 0x0 0x800>;
+			interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_SU>;
+			clock-names = "clk_usb_bridge";
+
+			phys = <&udc0_phy>;
+			phy_type = "utmi_wide";
+			dr_mode = "peripheral";
+			status = "disabled";
+		};
+
+		sdhci: mmc@f0842000 {
+			compatible = "nuvoton,npcm845-sdhci";
+			reg = <0x0 0xf0842000 0x0 0x100>;
+			interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk NPCM8XX_CLK_AHB>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&mmc8_pins
+				     &mmc_pins>;
+			status = "disabled";
+		};
+
+		fiu0: spi@fb000000 {
+			compatible = "nuvoton,npcm845-fiu";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x0 0xfb000000 0x0 0x1000>;
+			reg-names = "control";
+			clocks =  <&clk NPCM8XX_CLK_SPI0>;
+			status = "disabled";
+		};
+
+		fiu1: spi@fb002000 {
+			compatible = "nuvoton,npcm845-fiu";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x0 0xfb002000 0x0 0x1000>;
+			reg-names = "control";
+			clocks =  <&clk NPCM8XX_CLK_SPI1>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&spi1_pins>;
+			status = "disabled";
+		};
+
+		fiu3: spi@c0000000 {
+			compatible = "nuvoton,npcm845-fiu";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x0 0xc0000000 0x0 0x1000>;
+			reg-names = "control";
+			clocks =  <&clk NPCM8XX_CLK_SPI3>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&spi3_pins>;
+			status = "disabled";
+		};
+
+		fiux: spi@fb001000 {
+			compatible = "nuvoton,npcm845-fiu";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x0 0xfb001000 0x0 0x1000>,
+			<0x0 0xf8000000 0x0 0x2000000>;
+			reg-names = "control", "memory";
+			clocks =  <&clk NPCM8XX_CLK_SPIX>;
+			status = "disabled";
+		};
+
 		apb {
 			#address-cells = <1>;
 			#size-cells = <1>;
@@ -153,6 +405,393 @@ watchdog2: watchdog@a01c {
 				clocks = <&refclk>;
 			};
 
+			rng: rng@b000 {
+				compatible = "nuvoton,npcm845-rng";
+				reg = <0xb000 0x8>;
+				status = "disabled";
+			};
+
+			adc: adc@c000 {
+				compatible = "nuvoton,npcm845-adc";
+				reg = <0xC000 0x8>;
+				interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&clk NPCM8XX_CLK_ADC>;
+				resets = <&rstc 0x20 27>;
+				status = "disabled";
+			};
+
+			i2c0: i2c@80000 {
+				reg = <0x80000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb0_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c1: i2c@81000 {
+				reg = <0x81000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb1_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c2: i2c@82000 {
+				reg = <0x82000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb2_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c3: i2c@83000 {
+				reg = <0x83000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb3_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c4: i2c@84000 {
+				reg = <0x84000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb4_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c5: i2c@85000 {
+				reg = <0x85000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb5_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c6: i2c@86000 {
+				reg = <0x86000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb6_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c7: i2c@87000 {
+				reg = <0x87000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb7_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c8: i2c@88000 {
+				reg = <0x88000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb8_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c9: i2c@89000 {
+				reg = <0x89000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb9_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c10: i2c@8a000 {
+				reg = <0x8a000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb10_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c11: i2c@8b000 {
+				reg = <0x8b000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb11_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c12: i2c@8c000 {
+				reg = <0x8c000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb12_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c13: i2c@8d000 {
+				reg = <0x8d000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb13_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c14: i2c@8e000 {
+				reg = <0x8e000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb14_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c15: i2c@8f000 {
+				reg = <0x8f000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb15_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c16: i2c@fff00000 {
+				reg = <0xfff00000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb16_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c17: i2c@fff01000 {
+				reg = <0xfff01000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb17_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c18: i2c@fff02000 {
+				reg = <0xfff02000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb18_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c19: i2c@fff03000 {
+				reg = <0xfff03000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb19_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c20: i2c@fff04000 {
+				reg = <0xfff04000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb20_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c21: i2c@fff05000 {
+				reg = <0xfff05000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb21_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c22: i2c@fff06000 {
+				reg = <0xfff06000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb22_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c23: i2c@fff07000 {
+				reg = <0xfff07000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&smb23_pins>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c24: i2c@fff08000 {
+				reg = <0xfff08000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c25: i2c@fff09000 {
+				reg = <0xfff09000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
+			i2c26: i2c@fff0a000 {
+				reg = <0xfff0a000 0x1000>;
+				compatible = "nuvoton,npcm845-i2c";
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks =  <&clk NPCM8XX_CLK_APB2>;
+				clock-frequency = <100000>;
+				interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+				nuvoton,sys-mgr = <&gcr>;
+				status = "disabled";
+			};
+
 			peci: peci-controller@100000 {
 				compatible = "nuvoton,npcm845-peci";
 				reg = <0x100000 0x1000>;
@@ -161,6 +800,55 @@ peci: peci-controller@100000 {
 				cmd-timeout-ms = <1000>;
 				status = "disabled";
 			};
+
+			pwm_fan:pwm-fan-controller@103000 {
+				compatible = "nuvoton,npcm845-pwm-fan";
+				reg = <0x103000 0x3000>,
+					<0x180000 0x8000>;
+				reg-names = "pwm", "fan";
+				clocks =  <&clk NPCM8XX_CLK_APB3>,
+					<&clk NPCM8XX_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
+						&pwm8_pins &pwm9_pins
+						&pwm10_pins &pwm11_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";
+			};
+
+			pspi: spi@201000 {
+				compatible = "nuvoton,npcm845-pspi";
+				reg = <0x201000 0x1000>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&pspi_pins>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+				clocks =  <&clk NPCM8XX_CLK_APB5>;
+				clock-names = "clk_apb5";
+				resets = <&rstc 0x24 23>;
+				status = "disabled";
+			};
+
 		};
 	};
 
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845.dtsi +7 -0
index 8239d9a9f..0be38b062 100644
@@ -75,4 +75,11 @@ timer {
 			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
 			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
 	};
+
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
 };
Signature · 1 line
2.34.1
#4 lore raw

Re: [PATCH v8 3/4] arm64: dts: nuvoton: npcm845: Add peripheral nodes

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [High] Missing required DT aliases for the FIU nodes, which will cause the FIU SPI driver to fail to…

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing required DT aliases for the FIU nodes, which will cause the FIU SPI driver to fail to probe.
- [Medium] The fiu0, fiu1, and fiu3 SPI controller nodes are missing the required memory register region. --

--- Patch [3]: [PATCH v8 3/4] arm64: dts: nuvoton: npcm845: Add peripheral nodes --- commit 206c681ed8ed3430aac99224e79975aed3d5da1b
Author: Tomer Maimon <[email protected]>

arm64: dts: nuvoton: npcm845: Add peripheral nodes

Extend the NPCM845 SoC DTSI with the peripheral controller nodes needed by the evaluation board and downstream platforms.

Quoted 3 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +0 -0

[ ... ]

arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi clk: rstc: reset-controller@f0801000 { · line 261

Quoted 1 line
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +1 -0
+		fiu0: spi@fb000000 {

[Severity: High]
Will the FIU SPI driver fail to probe due to missing device tree aliases?

During driver initialization, spi-npcm-fiu.c calls of_alias_get_id(dev->of_node, "fiu") to determine the controller index. Since the fiu0, fiu1, fiu3, and fiux nodes do not have corresponding aliases defined, this lookup will return a negative error code.

This causes the driver to return -EINVAL and fail to probe. The nuvoton,npcm-fiu binding also mandates that all FIU controllers be represented in the aliases node.

arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi clk: rstc: reset-controller@f0801000 { · line 266

Quoted 5 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +5 -0
+			compatible = "nuvoton,npcm845-fiu";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x0 0xfb000000 0x0 0x1000>;
+			reg-names = "control";

[Severity: Medium]
Will this cause a fallback to slower indirect PIO reads?

The fiu0, fiu1, and fiu3 SPI controller nodes omit the second 'memory' register region and its corresponding 'memory' reg-name.

When the SPI controller probes, it looks up the memory region using:
platform_get_resource_byname(pdev, IORESOURCE_MEM, "memory")

If it fails to find the memory resource, the driver sets desc->nodirmap = true which disables direct memory-mapped reads. The dt binding for nuvoton,npcm-fiu requires both 'control' and 'memory' regions to be specified.

Quoted 3 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +3 -0
+			clocks =  <&clk NPCM8XX_CLK_SPI0>;
+			status = "disabled";
+		};
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3
author maintainer
#5 lore raw

Re: [PATCH v8 3/4] arm64: dts: nuvoton: npcm845: Add peripheral nodes

Quoted 26 lines · On Wed, 8 Jul 2026 at 20:15, <[email protected]> wrote:

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing required DT aliases for the FIU nodes, which will cause the FIU SPI driver to fail to probe.
- [Medium] The fiu0, fiu1, and fiu3 SPI controller nodes are missing the required memory register region. --

--- Patch [3]: [PATCH v8 3/4] arm64: dts: nuvoton: npcm845: Add peripheral nodes --- commit 206c681ed8ed3430aac99224e79975aed3d5da1b
Author: Tomer Maimon <[email protected]>

arm64: dts: nuvoton: npcm845: Add peripheral nodes

Extend the NPCM845 SoC DTSI with the peripheral controller nodes needed by the evaluation board and downstream platforms.

Quoted 3 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +0 -0

[ ... ]

Quoted 1 line

+ fiu0: spi@fb000000 {

[Severity: High]
Will the FIU SPI driver fail to probe due to missing device tree aliases?

Quoted 15 lines

During driver initialization, spi-npcm-fiu.c calls of_alias_get_id(dev->of_node, "fiu") to determine the controller index. Since the fiu0, fiu1, fiu3, and fiux nodes do not have corresponding aliases defined, this lookup will return a negative error code.

This causes the driver to return -EINVAL and fail to probe. The nuvoton,npcm-fiu binding also mandates that all FIU controllers be represented in the aliases node.

Quoted 5 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +5 -0
+                     compatible = "nuvoton,npcm845-fiu";
+                     #address-cells = <1>;
+                     #size-cells = <0>;
+                     reg = <0x0 0xfb000000 0x0 0x1000>;
+                     reg-names = "control";

Yes, and it is defined in the DTS file and explained in dt-binding.

Quoted 2 lines

[Severity: Medium]
Will this cause a fallback to slower indirect PIO reads?

Without setting the memory reg, the driver will use UMA commands to do the read operation instead of direct reads.

Quoted 11 lines

The fiu0, fiu1, and fiu3 SPI controller nodes omit the second 'memory' register region and its corresponding 'memory' reg-name.

When the SPI controller probes, it looks up the memory region using:
platform_get_resource_byname(pdev, IORESOURCE_MEM, "memory")

If it fails to find the memory resource, the driver sets desc->nodirmap = true which disables direct memory-mapped reads. The dt binding for nuvoton,npcm-fiu requires both 'control' and 'memory' regions to be specified.

Quoted 6 lines

arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi clk: rstc: reset-controller@f0801000 { · line 269

Quoted 3 lines
arch/arm64/boot/dts/nuvoton/nuvoton-common-npcm8xx.dtsi +3 -0
+                     clocks =  <&clk NPCM8XX_CLK_SPI0>;
+                     status = "disabled";
+             };

--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3

Thansk,

Tomer

author maintainer
#6 lore raw

PATCH v8 4/4 arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

In reply to Tomer Maimon

Enable peripheral support for the NPCM845 evaluation board by wiring up the SoC controller nodes to the board design. Add board aliases, GPIO-backed MDIO buses for the external PHYs, a reserved-memory region for TIP firmware, and flash partitions for the FIU boot flash. Enable the Ethernet MACs, MMC controller, FIU controllers, USB device controllers, ADC, RNG, PWM/FAN controller, I2C buses, and PECI interface with the board-specific pinctrl and PHY connections they require.

---
 .../boot/dts/nuvoton/nuvoton-npcm845-evb.dts  | 404 ++++++++++++++++++
 1 file changed, 404 insertions(+)
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts +404 -0
index 5edf5d133..7717c3a8f 100644
@@ -10,6 +10,42 @@ / {
 
 	aliases {
 		serial0 = &serial0;
+		ethernet1 = &gmac1;
+		ethernet2 = &gmac2;
+		ethernet3 = &gmac3;
+		mdio-gpio0 = &mdio0;
+		mdio-gpio1 = &mdio1;
+		fiu0 = &fiu0;
+		fiu1 = &fiu3;
+		fiu2 = &fiux;
+		fiu3 = &fiu1;
+		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;
+		i2c16 = &i2c16;
+		i2c17 = &i2c17;
+		i2c18 = &i2c18;
+		i2c19 = &i2c19;
+		i2c20 = &i2c20;
+		i2c21 = &i2c21;
+		i2c22 = &i2c22;
+		i2c23 = &i2c23;
+		i2c24 = &i2c24;
+		i2c25 = &i2c25;
+		i2c26 = &i2c26;
 	};
 
 	chosen {
@@ -26,12 +62,380 @@ refclk: refclk-25mhz {
 		clock-frequency = <25000000>;
 		#clock-cells = <0>;
 	};
+
+	reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		tip_reserved: tip@0 {
+			reg = <0x0 0x0 0x0 0x6200000>;
+			no-map;
+		};
+	};
+
+	mdio0: mdio-0 {
+		compatible = "virtual,mdio-gpio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>,
+			<&gpio1 26 GPIO_ACTIVE_HIGH>;
+
+		phy0: ethernet-phy@0 {
+			reg = <0>;
+		};
+	};
+
+	mdio1: mdio-1 {
+		compatible = "virtual,mdio-gpio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>,
+			<&gpio2 28 GPIO_ACTIVE_HIGH>;
+
+		phy1: ethernet-phy@0 {
+			reg = <0>;
+		};
+	};
+};
+
+&gmac1 {
+	phy-mode = "rgmii-id";
+	status = "okay";
+};
+
+&gmac2 {
+	phy-mode = "rmii";
+	pinctrl-names = "default";
+	pinctrl-0 = <&r1_pins
+			&r1oen_pins>;
+	phy-handle = <&phy0>;
+	status = "okay";
+};
+
+&gmac3 {
+	phy-mode = "rmii";
+	pinctrl-names = "default";
+	pinctrl-0 = <&r2_pins
+			&r2oen_pins>;
+	phy-handle = <&phy1>;
+	status = "okay";
 };
 
 &serial0 {
 	status = "okay";
 };
 
+&fiu0 {
+	status = "okay";
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		spi-rx-bus-width = <1>;
+		reg = <0>;
+		spi-max-frequency = <5000000>;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			bmc@0 {
+				compatible = "fixed-partitions";
+				label = "bmc";
+				reg = <0x00000000 0x04000000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+
+				u-boot@0 {
+					label = "u-boot";
+					reg = <0x00000000 0x007C0000>;
+				};
+				u-boot-env@7c0000 {
+					label = "u-boot-env";
+					reg = <0x007C0000 0x00040000>;
+				};
+				kernel@800000 {
+					label = "kernel";
+					reg = <0x00800000 0x00800000>;
+				};
+				rofs@1000000 {
+					label = "rofs";
+					reg = <0x01000000 0x02C00000>;
+				};
+				rwfs@3c00000 {
+					label = "rwfs";
+					reg = <0x03C00000 0x00400000>;
+				};
+			};
+		};
+	};
+};
+
+&fiu1 {
+	status = "okay";
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		spi-rx-bus-width = <2>;
+		spi-tx-bus-width = <2>;
+		reg = <0>;
+		spi-max-frequency = <5000000>;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			partition@0 {
+				label = "spi1-system1";
+				reg = <0x0 0x0>;
+			};
+		};
+	};
+};
+
+&fiu3 {
+	pinctrl-0 = <&spi3_pins>, <&spi3quad_pins>;
+	status = "okay";
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		spi-rx-bus-width = <1>;
+		reg = <0>;
+		spi-max-frequency = <5000000>;
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			partition@0 {
+				label = "spi3-system1";
+				reg = <0x0 0x0>;
+			};
+		};
+	};
+};
+
+&fiux {
+	status = "okay";
+	nuvoton,spix-mode;
+};
+
+&sdhci {
+	status = "okay";
+};
+
+&udc0 {
+	status = "okay";
+};
+
+&udc1 {
+	status = "okay";
+};
+
+&udc2 {
+	status = "okay";
+};
+
+&udc3 {
+	status = "okay";
+};
+
+&udc4 {
+	status = "okay";
+};
+
+&udc5 {
+	status = "okay";
+};
+
+&udc6 {
+	status = "okay";
+};
+
+&udc7 {
+	status = "okay";
+};
+
+&mc {
+	status = "okay";
+};
+
+&peci {
+	status = "okay";
+};
+
+&rng {
+	status = "okay";
+};
+
+&adc {
+	#io-channel-cells = <1>;
+	status = "okay";
+};
+
 &watchdog1 {
 	status = "okay";
 };
+
+&pwm_fan {
+	status = "okay";
+	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>;
+	#address-cells = <1>;
+	#size-cells = <0>;
+	fan@0 {
+		reg = <0x00>;
+		fan-tach-ch = /bits/ 8 <0x0 0x1>;
+		cooling-levels = <127 255>;
+	};
+	fan@1 {
+		reg = <0x01>;
+		fan-tach-ch = /bits/ 8 <0x2 0x3>;
+		cooling-levels = <127 255>;
+	};
+	fan@2 {
+		reg = <0x02>;
+		fan-tach-ch = /bits/ 8 <0x4 0x5>;
+		cooling-levels = <127 255>;
+	};
+	fan@3 {
+		reg = <0x03>;
+		fan-tach-ch = /bits/ 8 <0x6 0x7>;
+		cooling-levels = <127 255>;
+	};
+	fan@4 {
+		reg = <0x04>;
+		fan-tach-ch = /bits/ 8 <0x8 0x9>;
+		cooling-levels = <127 255>;
+	};
+	fan@5 {
+		reg = <0x05>;
+		fan-tach-ch = /bits/ 8 <0xa 0xb>;
+		cooling-levels = <127 255>;
+	};
+	fan@6 {
+		reg = <0x06>;
+		fan-tach-ch = /bits/ 8 <0xc 0xd>;
+		cooling-levels = <127 255>;
+	};
+	fan@7 {
+		reg = <0x07>;
+		fan-tach-ch = /bits/ 8 <0xe 0xf>;
+		cooling-levels = <127 255>;
+	};
+};
+
+&i2c0 {
+	status = "okay";
+};
+
+&i2c1 {
+	status = "okay";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	eeprom@50 {
+		compatible = "atmel,24c256";
+		reg = <0x50>;
+	};
+};
+
+&i2c2 {
+	status = "okay";
+};
+
+&i2c3 {
+	status = "okay";
+};
+
+&i2c4 {
+	status = "okay";
+};
+
+&i2c5 {
+	status = "okay";
+};
+
+&i2c6 {
+	status = "okay";
+};
+
+&i2c7 {
+	status = "okay";
+};
+
+&i2c8 {
+	status = "okay";
+};
+
+&i2c9 {
+	status = "okay";
+};
+
+&i2c10 {
+	status = "okay";
+};
+
+&i2c11 {
+	status = "okay";
+};
+
+&i2c12 {
+	status = "okay";
+};
+
+&i2c13 {
+	status = "okay";
+};
+
+&i2c14 {
+	status = "okay";
+};
+
+&i2c15 {
+	status = "okay";
+};
+
+&i2c16 {
+	status = "okay";
+};
+
+&i2c17 {
+	status = "okay";
+};
+
+&i2c18 {
+	status = "okay";
+};
+
+&i2c19 {
+	status = "okay";
+};
+
+&i2c20 {
+	status = "okay";
+};
+
+&i2c21 {
+	status = "okay";
+};
+
+&i2c22 {
+	status = "okay";
+};
+
+&i2c23 {
+	status = "okay";
+};
+
+&i2c24 {
+	status = "okay";
+};
+
+&i2c25 {
+	status = "okay";
+};
+
+&i2c26 {
+	status = "okay";
+};
Signature · 1 line
2.34.1
#7 lore raw

Re: [PATCH v8 4/4] arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] The device tree aliases for the SPI FIU controllers `fiu1` and `fiu3` are incorrectly swapped. --

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The device tree aliases for the SPI FIU controllers fiu1 and fiu3 are incorrectly swapped. --

--- Patch [4]: [PATCH v8 4/4] arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes --- commit 58cedbdc9355efee860c7d605886caa4e600ea8c
Author: Tomer Maimon <[email protected]>

arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

Enable peripheral support for the NPCM845 evaluation board by wiring up the SoC controller nodes to the board design. Add board aliases, GPIO-backed MDIO buses, flash partitions, and enable various peripheral interfaces.

Quoted 7 lines
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts +0 -0
index 5edf5d13342da..7717c3a8f76d2 100644
@@ -10,6 +10,42 @@ / {
 
 	aliases {

arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts / { · line 21

Quoted 10 lines
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts +9 -0
 		serial0 = &serial0;
+		ethernet1 = &gmac1;
+		ethernet2 = &gmac2;
+		ethernet3 = &gmac3;
+		mdio-gpio0 = &mdio0;
+		mdio-gpio1 = &mdio1;
+		fiu0 = &fiu0;
+		fiu1 = &fiu3;
+		fiu2 = &fiux;
+		fiu3 = &fiu1;

[Severity: Medium]
Are the aliases for the SPI FIU controllers intentionally swapped here?

Mapping fiu1 to &fiu3 and fiu3 to &fiu1 assigns logical SPI bus spi1 to the &fiu3 hardware controller and spi3 to the &fiu1 hardware controller.

This contradicts the partition labels defined further down in this patch for these nodes, which expect spi1 to be fiu1 and spi3 to be fiu3:

&fiu1 {
        ...
        partition@0 {
                label = "spi1-system1";
&fiu3 {
        ...
        partition@0 {
                label = "spi3-system1";

Could this mismatch break userspace and boot scripts relying on the logical device IDs to find system partitions?

[ ... ]

Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
author maintainer
#8 lore raw

Re: [PATCH v8 4/4] arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

Quoted 21 lines · On Wed, 8 Jul 2026 at 20:13, <[email protected]> wrote:

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The device tree aliases for the SPI FIU controllers fiu1 and fiu3 are incorrectly swapped. --

--- Patch [4]: [PATCH v8 4/4] arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes --- commit 58cedbdc9355efee860c7d605886caa4e600ea8c
Author: Tomer Maimon <[email protected]>

arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

Enable peripheral support for the NPCM845 evaluation board by wiring up the SoC controller nodes to the board design. Add board aliases, GPIO-backed MDIO buses, flash partitions, and enable various peripheral interfaces.

Quoted 6 lines
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts +0 -0
index 5edf5d13342da..7717c3a8f76d2 100644
@@ -10,6 +10,42 @@ / {
 
Quoted 15 lines

arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts / { · line 21

Quoted 11 lines
arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts +9 -0
      aliases {
              serial0 = &serial0;
+             ethernet1 = &gmac1;
+             ethernet2 = &gmac2;
+             ethernet3 = &gmac3;
+             mdio-gpio0 = &mdio0;
+             mdio-gpio1 = &mdio1;
+             fiu0 = &fiu0;
+             fiu1 = &fiu3;
+             fiu2 = &fiux;
+             fiu3 = &fiu1;

[Severity: Medium]
Are the aliases for the SPI FIU controllers intentionally swapped here?

Yes, it is explained in the document. Since the FIU1 module is added in the new SoC generation, we should add it at the end of the structure

Quoted 11 lines

Mapping fiu1 to &fiu3 and fiu3 to &fiu1 assigns logical SPI bus spi1 to the &fiu3 hardware controller and spi3 to the &fiu1 hardware controller.

This contradicts the partition labels defined further down in this patch for these nodes, which expect spi1 to be fiu1 and spi3 to be fiu3:

&fiu1 {
        ...
        partition@0 {
                label = "spi1-system1";
Quoted 7 lines
&fiu3 {
        ...
        partition@0 {
                label = "spi3-system1";

Could this mismatch break userspace and boot scripts relying on the logical device IDs to find system partitions?

No, this is the way we use it, and it is only an example in the EVB; the user can choose the label name according to the board's needs.

Quoted 5 lines

[ ... ]

--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4

Thanks,

Tomer

maintainer Applied
#9 lore raw
In reply to Tomer Maimon

Hi Tomer,

Apologies for taking a while to get to this series.

Quoted 50 lines · Tomer Maimon

This series fixes the remaining timer binding issue and adds device tree support for peripherals on the Nuvoton NPCM845 SoC and its Evaluation Board (EVB).

The first patch drops the undocumented timer0 clock-names property. The second patch reorders timer0 and PECI so the APB child nodes stay in ascending unit-address order.
The third patch introduces peripheral nodes for Ethernet, MMC, SPI, USB, RNG, ADC, PWM-FAN, I2C, and OP-TEE firmware in the NPCM845 SoC device tree.
The fourth patch enables these peripherals for the NPCM845-EVB, adding MDIO nodes, reserved memory, aliases, and board-specific configurations such as PHY modes and SPI flash partitions.

The NPCM8XX device tree was tested on NPCM845 evaluation board.

Addressed comments from:
        - sashiko-bot

Changes since version 7:
        - modify timer place.
        - add PSPI to commit message.

Changes since version 6:
        - remove IPMI i2C device.
        - Add FIX enable property.
        - Keep patches 1-3 unchanged.

Changes since version 5:
        - Add no-map to the tip_reserved firmware memory region.
        - Drop the unsupported snps,eee-force-disable property from gmac1.
        - Rework the FIU0 boot flash layout into nested fixed-partitions under the bmc container.
        - Keep patches 1-3 unchanged.

Changes since version 4:
        - Split the timer0 clock-names cleanup into a separate first patch.
        - Remove nuvoton,sysgcr from udc8 and udc9.
        - Rename apb: bus@f0000000 back to apb.
        - Rename spix-mode to nuvoton,spix-mode.
        - Keep cooling-levels as 32-bit cells while encoding fan-tach-ch as /bits/ 8.

Changes since version 3:
        - reomve tmp100.

Changes since version 2:
        - Fix dts warning
        - Arrange node order by ascending unit address.

Quoted 7 lines

Changes since version 1:
        - Fix commit message
        - Fix dtbs_check warnings.

Tomer Maimon (4):
  arm64: dts: nuvoton: npcm845: Drop redundant timer clock-names
  arm64: dts: nuvoton: npcm845: Reorder timer0 and PECI nodes

I've applied these first two, thanks for the fixes.

Regarding the last two:

Quoted 2 lines

  arm64: dts: nuvoton: npcm845: Add peripheral nodes
  arm64: dts: nuvoton: npcm845-evb: Add peripheral nodes

We now have scripts/dtc/dt-check-style. If you run it in strict mode before and after applying the series, it indicates quite a few concerns (pasted at the bottom). Do you mind looking over them and fixing what makes sense? I'd like to conform to the strict style as best we can and have justification for what remains for all patch submissions going forward.

Cheers,

Andrew

[I] 0 andrew@heihei ~/s/k/l/o/build.arm64.default> diff -u before after
--- before 2026-07-22 17:57:35.932258745 +0930
+++ after 2026-07-22 17:58:14.205122192 +0930
@@ -1,4 +1,79 @@
../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:9: [property-order] property 'compatible' out of canonical order (should sort before 'model')
-../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:21: [property-order] property 'reg' out of canonical order (should sort before 'device_type') -../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:24: [unused-labels] label 'refclk' defined but never &-referenced -../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:27: [property-order] property '#clock-cells' out of canonical order (should sort before 'clock-frequency') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:13: [property-order] property 'ethernet1' out of canonical order (should sort before 'serial0') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:18: [property-order] property 'fiu0' out of canonical order (should sort before 'mdio-gpio1') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:57: [property-order] property 'reg' out of canonical order (should sort before 'device_type') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:60: [unused-labels] label 'refclk' defined but never &-referenced +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:63: [property-order] property '#clock-cells' out of canonical order (should sort before 'clock-frequency') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:69: [property-order] property 'ranges' out of canonical order (should sort before '#size-cells') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:71: [unused-labels] label 'tip_reserved' defined but never &-referenced +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:77: [child-name-order] child node 'mdio-0' out of name order +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:81: [property-order] property 'gpios' out of canonical order (should sort before '#size-cells') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:93: [property-order] property 'gpios' out of canonical order (should sort before '#size-cells') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:104: [required-blank-lines] "status" must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:110: [property-order] property 'pinctrl-0' out of canonical order (should sort before 'pinctrl-names') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:111: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:112: [property-order] property 'phy-handle' out of canonical order (should sort before 'pinctrl-0') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:113: [required-blank-lines] "status" must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:119: [property-order] property 'pinctrl-0' out of canonical order (should sort before 'pinctrl-names') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:120: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:121: [property-order] property 'phy-handle' out of canonical order (should sort before 'pinctrl-0') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:122: [required-blank-lines] "status" must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:131: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:134: [property-order] property 'reg' out of canonical order (should sort before 'spi-rx-bus-width') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:136: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:140: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:143: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:149: [hex-case] hex literal '0x007C0000' must be lowercase +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:149: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:151: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:153: [hex-case] hex literal '0x007C0000' must be lowercase +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:153: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:155: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:157: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:159: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:161: [hex-case] hex literal '0x02C00000' must be lowercase +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:161: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:163: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:165: [hex-case] hex literal '0x03C00000' must be lowercase +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:165: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:174: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:178: [property-order] property 'reg' out of canonical order (should sort before 'spi-tx-bus-width') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:180: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:184: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:186: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:194: [required-blank-lines] "status" must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:195: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:198: [property-order] property 'reg' out of canonical order (should sort before 'spi-rx-bus-width') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:200: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:204: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:206: [property-order] property 'reg' out of canonical order (should sort before 'label') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:214: [property-order] property 'nuvoton,spix-mode' out of canonical order (should sort before 'status') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:267: [required-blank-lines] "status" must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:276: [property-order] property 'pinctrl-names' out of canonical order (should sort before 'status') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:277: [property-order] property 'pinctrl-0' out of canonical order (should sort before 'pinctrl-names') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:278: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:279: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:280: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:281: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:282: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:283: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:284: [continuation-alignment] continuation should align to column 21 (under "<" or \") +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:285: [property-order] property '#address-cells' out of canonical order (should sort before 'pinctrl-0') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:287: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:290: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:292: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:295: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:297: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:300: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:302: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:305: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:307: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:310: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:312: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:315: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:317: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:320: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:322: [required-blank-lines] child node must be preceded by a blank line +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:325: [property-order] property 'cooling-levels' out of canonical order (should sort before 'fan-tach-ch') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:335: [property-order] property '#address-cells' out of canonical order (should sort before 'status') +../arch/arm64/boot/dts/nuvoton/nuvoton-npcm845-evb.dts:337: [required-blank-lines] child node must be preceded by a blank line