On Thu, Feb 22, 2024 at 12:59:14AM PST, Kelly Hung wrote: >Base on aspeed-g6.dtsi and can boot into BMC console. > >Signed-off-by: Kelly Hung <Kelly_Hung@xxxxxxxx> >--- > arch/arm/boot/dts/aspeed/Makefile | 1 + > .../boot/dts/aspeed/aspeed-bmc-asus-x4tf.dts | 592 ++++++++++++++++++ > 2 files changed, 593 insertions(+) > create mode 100644 arch/arm/boot/dts/aspeed/aspeed-bmc-asus-x4tf.dts > >diff --git a/arch/arm/boot/dts/aspeed/Makefile b/arch/arm/boot/dts/aspeed/Makefile >index d3ac20e31..32c41f3d9 100644 >--- a/arch/arm/boot/dts/aspeed/Makefile >+++ b/arch/arm/boot/dts/aspeed/Makefile >@@ -10,6 +10,7 @@ dtb-$(CONFIG_ARCH_ASPEED) += \ > aspeed-bmc-arm-stardragon4800-rep2.dtb \ > aspeed-bmc-asrock-e3c246d4i.dtb \ > aspeed-bmc-asrock-romed8hm3.dtb \ >+ aspeed-bmc-asus-x4tf.dtb \ > aspeed-bmc-bytedance-g220a.dtb \ > aspeed-bmc-delta-ahe50dc.dtb \ > aspeed-bmc-facebook-bletchley.dtb \ >diff --git a/arch/arm/boot/dts/aspeed/aspeed-bmc-asus-x4tf.dts b/arch/arm/boot/dts/aspeed/aspeed-bmc-asus-x4tf.dts >new file mode 100644 >index 000000000..1bda14a66 >--- /dev/null >+++ b/arch/arm/boot/dts/aspeed/aspeed-bmc-asus-x4tf.dts >@@ -0,0 +1,592 @@ >+// SPDX-License-Identifier: GPL-2.0-or-later >+// Copyright 2024 ASUS Corp. >+ >+/dts-v1/; >+ >+#include "aspeed-g6.dtsi" >+#include "aspeed-g6-pinctrl.dtsi" >+#include <dt-bindings/i2c/i2c.h> >+#include <dt-bindings/gpio/aspeed-gpio.h> >+ >+/ { >+ model = "ASUS-X4TF"; >+ compatible = "asus,x4tf", "aspeed,ast2600"; >+ >+ aliases { >+ serial4 = &uart5; >+ }; >+ >+ chosen { >+ stdout-path = "serial4:115200n8"; >+ }; >+ >+ memory@80000000 { >+ device_type = "memory"; >+ reg = <0x80000000 0x40000000>; >+ }; >+ >+ reserved-memory { >+ #address-cells = <1>; >+ #size-cells = <1>; >+ ranges; >+ >+ video_engine_memory: video { >+ size = <0x04000000>; >+ alignment = <0x01000000>; >+ compatible = "shared-dma-pool"; >+ reusable; >+ }; >+ }; >+ >+ iio-hwmon { >+ compatible = "iio-hwmon"; >+ io-channels = <&adc0 0>, <&adc0 1>, <&adc0 2>, <&adc0 3>, >+ <&adc0 4>, <&adc0 5>, <&adc0 6>, <&adc0 7>, >+ <&adc1 0>, <&adc1 1>, <&adc1 2>, <&adc1 3>, >+ <&adc1 4>, <&adc1 5>, <&adc1 6>, <&adc1 7>; >+ }; >+ >+ leds { >+ compatible = "gpio-leds"; >+ >+ led-heartbeat { >+ gpios = <&gpio0 ASPEED_GPIO(P, 7) GPIO_ACTIVE_LOW>; >+ linux,default-trigger = "heartbeat"; >+ }; >+ >+ led-uid { >+ gpios = <&gpio0 ASPEED_GPIO(P, 1) (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; >+ default-state = "off"; >+ }; >+ >+ led-status_Y { >+ gpios = <&gpio1 ASPEED_GPIO(B, 1) GPIO_ACTIVE_LOW>; >+ default-state = "off"; >+ }; >+ >+ led-sys_boot_status { >+ gpios = <&gpio1 ASPEED_GPIO(B, 0) GPIO_ACTIVE_LOW>; >+ default-state = "off"; >+ }; >+ }; >+}; >+ >+&adc0 { >+ vref = <2500>; >+ status = "okay"; >+ pinctrl-names = "default"; >+ pinctrl-0 = <&pinctrl_adc0_default &pinctrl_adc1_default >+ &pinctrl_adc2_default &pinctrl_adc3_default >+ &pinctrl_adc4_default &pinctrl_adc5_default >+ &pinctrl_adc6_default &pinctrl_adc7_default>; >+}; >+ >+&adc1 { >+ vref = <2500>; >+ status = "okay"; >+ pinctrl-names = "default"; >+ pinctrl-0 = <&pinctrl_adc8_default &pinctrl_adc9_default >+ &pinctrl_adc10_default &pinctrl_adc11_default >+ &pinctrl_adc12_default &pinctrl_adc13_default >+ &pinctrl_adc14_default &pinctrl_adc15_default>; >+}; >+ >+&peci0 { >+ status = "okay"; >+}; >+ >+&lpc_snoop { >+ snoop-ports = <0x80>; >+ status = "okay"; >+}; >+ >+&mac2 { >+ status = "okay"; >+ phy-mode = "rmii"; >+ use-ncsi; >+ pinctrl-names = "default"; >+ pinctrl-0 = <&pinctrl_rmii3_default>; >+}; >+ >+&mac3 { >+ status = "okay"; >+ phy-mode = "rmii"; >+ use-ncsi; >+ pinctrl-names = "default"; >+ pinctrl-0 = <&pinctrl_rmii4_default>; >+}; >+ >+&fmc { >+ status = "okay"; >+ >+ flash@0 { >+ status = "okay"; >+ m25p,fast-read; >+ label = "bmc-spi"; Is this specific label needed or desired for some particular reason? Most OpenBMC platforms just call it "bmc", and I think some of the firmware-update machinery may have assumptions about that baked in, so I wouldn't be surprised if this naming breaks things... >+ spi-max-frequency = <50000000>; >+#include "openbmc-flash-layout-128.dtsi" Just to confirm, this is actually a 128MB flash chip? I ask because the previous version of this patch had some indication of it being 64MB (though there was a lot that looked wonky with the partition layout, so maybe that was wrong too). >+ }; >+}; >+ >+&spi1 { >+ status = "okay"; >+ pinctrl-names = "default"; >+ pinctrl-0 = <&pinctrl_spi1_default>; >+ >+ flash@0 { >+ status = "okay"; >+ label = "bios-spi"; >+ spi-max-frequency = <50000000>; >+ >+ partitions { >+ compatible = "fixed-partitions"; >+ #address-cells = <1>; >+ #size-cells = <1>; >+ >+ biosfullimg@0 { >+ reg = <0x0 0x2000000>; //32768 *1024 = 32 MB >+ label = "biosfullimg"; >+ }; >+ }; If there's only one partition that's just covering the whole chip there's no need to include the 'partitions' child node. >+ }; >+}; >+ >+&i2c0 { >+ status = "okay"; >+}; >+ >+&i2c1 { >+ status = "okay"; >+}; >+ >+&i2c2 { >+ status = "okay"; >+}; >+ >+&i2c3 { >+ status = "okay"; >+}; >+ >+&i2c4 { >+ status = "okay"; >+ >+ temperature-sensor@48 { >+ compatible = "ti,tmp75"; >+ reg = <0x48>; >+ }; >+ >+ temperature-sensor@49 { >+ compatible = "ti,tmp75"; >+ reg = <0x49>; >+ }; >+ >+ pca9555_4_20: gpio@20 { >+ compatible = "nxp,pca9555"; >+ reg = <0x20>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ pca9555_4_22: gpio@22 { >+ compatible = "nxp,pca9555"; >+ reg = <0x22>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ pca9555_4_24: gpio@24 { >+ compatible = "nxp,pca9555"; >+ reg = <0x24>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ gpio-line-names = >+ /*A0 - A3 0*/ "", "STRAP_BMC_BATTERY_GPIO1", "", "", >+ /*A4 - A7 4*/ "", "", "", "", >+ /*B0 - B7 8*/ "", "", "", "", "", "", "", ""; >+ }; >+ >+ pca9555_4_26: gpio@26 { >+ compatible = "nxp,pca9555"; >+ reg = <0x26>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ i2c-mux@70 { >+ compatible = "nxp,pca9546"; >+ status = "okay"; >+ reg = <0x70>; >+ #address-cells = <1>; >+ #size-cells = <0>; >+ >+ channel_1: i2c@0 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <0>; >+ }; >+ >+ channel_2: i2c@1 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <1>; >+ }; >+ >+ channel_3: i2c@2 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <2>; >+ }; >+ >+ channel_4: i2c@3 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <3>; >+ }; >+ }; >+}; >+ >+&i2c5 { >+ status = "okay"; >+ >+ pca9555_5_24: gpio@24 { >+ compatible = "nxp,pca9555"; >+ reg = <0x24>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ i2c-mux@70 { >+ compatible = "nxp,pca9546"; >+ status = "okay"; >+ reg = <0x70 >; >+ #address-cells = <1>; >+ #size-cells = <0>; >+ >+ channel_5: i2c@0 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <0>; >+ >+ pca9555_5_5_20: gpio@20 { >+ compatible = "nxp,pca9555"; >+ reg = <0x20>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ gpio-line-names = >+ "", "", "", "", "", "", "", "", >+ "", "", "SYS_FAN6", "SYS_FAN5", >+ "SYS_FAN4", "SYS_FAN3", >+ "SYS_FAN2", "SYS_FAN1"; >+ }; >+ >+ pca9555_5_5_21: gpio@21 { >+ compatible = "nxp,pca9555"; >+ reg = <0x21>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ power-monitor@44 { >+ compatible = "ti,ina219"; >+ reg = <0x44>; >+ shunt-resistor = <2>; >+ }; >+ }; >+ >+ channel_6: i2c@1 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <1>; >+ }; >+ >+ channel_7: i2c@2 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <2>; >+ }; >+ >+ channel_8: i2c@3 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <3>; >+ }; >+ }; >+}; >+ >+&i2c6 { >+ status = "okay"; >+ >+ pca9555_6_27: gpio@27 { >+ compatible = "nxp,pca9555"; >+ reg = <0x27>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+ >+ pca9555_6_20: gpio@20 { >+ compatible = "nxp,pca9555"; >+ reg = <0x20>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ gpio-line-names = >+ /*A0 0*/ "", "", "", "", "", "", "", "", >+ /*B0 8*/ "Drive_NVMe1", "Drive_NVMe2", "", "", >+ /*B4 12*/ "", "", "", ""; >+ }; >+ >+ pca9555_6_21: gpio@21 { >+ compatible = "nxp,pca9555"; >+ reg = <0x21>; >+ gpio-controller; >+ #gpio-cells = <2>; >+ }; >+}; >+ >+&i2c7 { >+ status = "okay"; >+ >+ i2c-mux@70 { >+ compatible = "nxp,pca9546"; >+ status = "okay"; >+ reg = <0x70>; >+ #address-cells = <1>; >+ #size-cells = <0>; >+ idle-state = <1>; >+ >+ channel_9: i2c@0 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <0>; >+ >+ temperature-sensor@48 { >+ compatible = "ti,tmp75"; >+ reg = <0x48>; >+ }; >+ >+ temperature-sensor@49 { >+ compatible = "ti,tmp75"; >+ reg = <0x49>; >+ }; >+ >+ power-monitor@40 { >+ compatible = "ti,ina219"; >+ reg = <0x40>; >+ shunt-resistor = <2>; >+ }; >+ >+ power-monitor@41 { >+ compatible = "ti,ina219"; >+ reg = <0x41>; >+ shunt-resistor = <5>; >+ }; >+ }; >+ >+ channel_10: i2c@1 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <1>; >+ }; >+ >+ channel_11: i2c@2 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <2>; >+ }; >+ >+ channel_12: i2c@3 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <3>; >+ }; >+ }; >+ >+ i2c-mux@71 { >+ compatible = "nxp,pca9546"; >+ status = "okay"; >+ reg = <0x71>; >+ #address-cells = <1>; >+ #size-cells = <0>; >+ i2c-mux-idle-disconnect; >+ >+ channel_13: i2c@0 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <0>; >+ }; >+ >+ channel_14: i2c@1 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <1>; >+ }; >+ >+ channel_15: i2c@2 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <2>; >+ }; >+ >+ channel_16: i2c@3 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <3>; >+ }; >+ }; >+}; >+ >+&i2c8 { >+ status = "okay"; >+ >+ i2c-mux@70 { >+ compatible = "nxp,pca9546"; >+ status = "okay"; >+ reg = <0x70>; >+ #address-cells = <1>; >+ #size-cells = <0>; >+ i2c-mux-idle-disconnect; >+ >+ channel_17: i2c@0 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <0>; >+ }; >+ >+ channel_18: i2c@1 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <1>; >+ >+ temperature-sensor@48 { >+ compatible = "ti,tmp75"; >+ reg = <0x48>; >+ }; >+ >+ power-monitor@41 { >+ compatible = "ti,ina219"; >+ reg = <0x41>; >+ shunt-resistor = <5>; >+ }; >+ }; >+ >+ channel_19: i2c@2 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <2>; >+ }; >+ >+ channel_20: i2c@3 { >+ #address-cells = <1>; >+ #size-cells = <0>; >+ reg = <3>; >+ }; >+ }; >+}; >+ >+&i2c9 { >+ status = "okay"; >+}; >+ >+&i2c10 { >+ status = "okay"; >+}; >+ >+&i2c11 { >+ status = "okay"; >+}; >+ >+&i2c14 { >+ status = "okay"; >+ multi-master; >+ >+ eeprom@50 { >+ compatible = "atmel,24c08"; >+ reg = <0x50>; >+ }; >+ >+ eeprom@51 { >+ compatible = "atmel,24c08"; >+ reg = <0x51>; >+ }; >+}; >+ >+&sgpiom0 { >+ status = "okay"; >+ ngpios = <128>; >+}; >+ >+&video { >+ status = "okay"; >+ memory-region = <&video_engine_memory>; >+}; >+ >+&sdc { >+ status = "okay"; >+}; >+ >+&lpc_snoop { >+ status = "okay"; >+ snoop-ports = <0x80>; >+}; >+ >+&kcs1 { >+ aspeed,lpc-io-reg = <0xca0>; >+ status = "okay"; >+}; >+ >+&kcs2 { >+ aspeed,lpc-io-reg = <0xca8>; >+ status = "okay"; >+}; >+ >+&kcs3 { >+ aspeed,lpc-io-reg = <0xca2>; >+ status = "okay"; >+}; >+ >+&uart3 { >+ status = "okay"; >+}; >+ >+&uart5 { >+ status = "okay"; >+}; >+ >+&uart_routing { >+ status = "okay"; >+}; >+ >+&vhub { >+ status = "okay"; >+}; >+ >+&gpio0 { >+ gpio-line-names = >+ /*A0 0*/ "", "", "", "", "", "", "", "", >+ /*B0 8*/ "", "", "", "", "", "", "PS_PWROK", "", >+ /*C0 16*/ "", "", "", "", "", "", "", "", >+ /*D0 24*/ "", "", "", "", "", "", "", "", >+ /*E0 32*/ "", "", "", "", "", "", "", "", >+ /*F0 40*/ "", "", "", "", "", "", "", "", >+ /*G0 48*/ "", "", "", "", "", "", "", "", >+ /*H0 56*/ "", "", "", "", "", "", "", "", >+ /*I0 64*/ "", "", "", "", "", "", "", "", >+ /*J0 72*/ "", "", "", "", "", "", "", "", >+ /*K0 80*/ "", "", "", "", "", "", "", "", >+ /*L0 88*/ "", "", "", "", "", "", "", "", >+ /*M0 96*/ "", "", "", "", "", "", "", "", >+ /*N0 104*/ "", "", "", "", >+ /*N4 108*/ "POST_COMPLETE", "ESR1_GPIO_AST_SPISEL", "", "", >+ /*O0 112*/ "", "", "", "", "", "", "", "", >+ /*P0 120*/ "ID_BUTTON", "ID_OUT", "POWER_BUTTON", "POWER_OUT", >+ /*P4 124*/ "RESET_BUTTON", "RESET_OUT", "", "HEARTBEAT", >+ /*Q0 128*/ "", "", "", "", "", "", "", "", >+ /*R0 136*/ "", "", "", "", "", "", "", "", >+ /*S0 144*/ "", "", "", "", "", "", "", "", >+ /*T0 152*/ "", "", "", "", "", "", "", "", >+ /*U0 160*/ "", "", "", "", "", "", "", "", >+ /*V0 168*/ "", "", "", "", "", "", "", "", >+ /*W0 176*/ "", "", "", "", "", "", "", "", >+ /*X0 184*/ "", "", "", "", "", "", "", "", >+ /*Y0 192*/ "", "", "", "", "", "", "", "", >+ /*Z0 200*/ "", "", "", "", "", "", "", ""; >+}; >-- >2.25.1 >