On 22/08/2021 14:35, Adrian Schmutzler wrote: > Hi, > >> -----Original Message----- >> From: openwrt-devel [mailto:openwrt-devel-boun...@lists.openwrt.org] >> On Behalf Of Stijn Tintel >> Sent: Sonntag, 22. August 2021 01:15 >> To: openwrt-devel@lists.openwrt.org >> Subject: [PATCH 6/6] qoriq: add support for WatchGuard Firebox M300 >> >> This device is based on NXP's QorIQ T2081QDS board, with a quad-core dual- >> threaded 1.5 GHz ppc64 CPU and 4GB ECC RAM. The board has 5 ethernet >> interfaces, of which 3 are connected to the ethernet ports on the front >> panel. The other 2 are internally connected to a Marvell >> 88E6171 switch; the other 5 ports of this switch are also connected to the >> ethernet ports on the front panel. >> >> Installation: write the sdcard image to an SD card. Stock U-Boot will not >> boot, >> wait for it to fail then run these commands: >> >> setenv wgBootSysA "setenv bootargs root=/dev/mmcblk0p2 rw rootdelay=2 >> console=$consoledev,$baudrate fsl_dpaa_fman.fsl_fm_max_frm=1522; >> ext2load mmc 0:1 $fdtaddr image-m300.dtb; ext2load mmc 0:1 $loadaddr >> firebox_m300-kernel.bin; bootm $loadaddr - $fdtaddr" >> saveenv >> reset >> >> The default U-Boot boot entry will now boot OpenWrt from the SD card. > a few mostly cosmetic comments below, with the only real issue at the very > bottom. > > Target introduction in 5/6 looked fine. Thanks! > >> Signed-off-by: Stijn Tintel <st...@linux-ipv6.be> >> --- >> .../base-files/lib/preinit/79_move_config | 17 + >> .../qoriq/base-files/lib/upgrade/platform.sh | 38 +++ >> .../files/arch/powerpc/boot/dts/fsl/m300.dts | 294 ++++++++++++++++++ >> target/linux/qoriq/image/generic.mk | 13 + >> 4 files changed, 362 insertions(+) >> create mode 100644 target/linux/qoriq/base- >> files/lib/preinit/79_move_config >> create mode 100755 target/linux/qoriq/base-files/lib/upgrade/platform.sh >> create mode 100644 >> target/linux/qoriq/files/arch/powerpc/boot/dts/fsl/m300.dts >> >> diff --git a/target/linux/qoriq/base-files/lib/preinit/79_move_config >> b/target/linux/qoriq/base-files/lib/preinit/79_move_config >> new file mode 100644 >> index 0000000000..22ec022f6a >> --- /dev/null >> +++ b/target/linux/qoriq/base-files/lib/preinit/79_move_config >> @@ -0,0 +1,17 @@ >> +# Copyright (C) 2015 OpenWrt.org > New files should have an SPDX identifier. Replaced with SPDX. > >> + >> +. /lib/functions.sh >> +. /lib/upgrade/common.sh >> + >> +move_config() { >> + local partdev >> + >> + if export_bootdevice && export_partdevice partdev 1; then >> + mkdir -p /boot >> + mount -o rw,noatime "/dev/$partdev" /boot >> + [ -f "/boot/$BACKUP_FILE" ] && mv -f "/boot/$BACKUP_FILE" >> / >> + umount /boot >> + fi >> +} >> + >> +boot_hook_add preinit_mount_root move_config >> diff --git a/target/linux/qoriq/base-files/lib/upgrade/platform.sh >> b/target/linux/qoriq/base-files/lib/upgrade/platform.sh >> new file mode 100755 >> index 0000000000..d88f70e3f6 >> --- /dev/null >> +++ b/target/linux/qoriq/base-files/lib/upgrade/platform.sh >> @@ -0,0 +1,38 @@ >> +# >> +# Copyright (C) 2011 OpenWrt.org >> +# Replaced with SPDX. >> + >> +PART_NAME=firmware >> +REQUIRE_IMAGE_METADATA=1 >> + >> +platform_check_image() { >> + case "$(board_name)" in >> + watchguard,firebox-m300) >> + legacy_sdcard_check_image "$1" >> + ;; >> + *) >> + return 0 >> + ;; >> + esac >> +} >> + >> +platform_copy_config() { >> + case "$(board_name)" in >> + watchguard,firebox-m300) >> + legacy_sdcard_copy_config "$1" >> + ;; >> + *) >> + return 0 >> + esac >> +} >> + >> +platform_do_upgrade() { >> + case "$(board_name)" in >> + watchguard,firebox-m300) >> + legacy_sdcard_do_upgrade "$1" >> + ;; >> + *) >> + default_do_upgrade "$1" >> + ;; >> + esac >> +} >> diff --git a/target/linux/qoriq/files/arch/powerpc/boot/dts/fsl/m300.dts >> b/target/linux/qoriq/files/arch/powerpc/boot/dts/fsl/m300.dts >> new file mode 100644 >> index 0000000000..71ff57dcb6 >> --- /dev/null >> +++ b/target/linux/qoriq/files/arch/powerpc/boot/dts/fsl/m300.dts >> @@ -0,0 +1,294 @@ >> +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later >> +/* >> + * WatchGuard Firebox M300 Device Tree Source >> + * Based on t2081qds.dts from Linux 5.10 >> + * >> + * Copyright 2013 - 2015 Freescale Semiconductor Inc. >> + * Copyright 2020 - 2021 Stijn Tintel <st...@linux-ipv6.be> */ >> + >> +/include/ "t208xsi-pre.dtsi" >> +/include/ "t208xqds.dtsi" >> + >> +/ { >> + model = "WatchGuard Firebox M300"; >> + compatible = "watchguard,firebox-m300", "fsl,T2081QDS"; > I'd add an empty line after these two. Done. > >> + #address-cells = <2>; >> + #size-cells = <2>; > Do we need these without a direct subnode? Don't know to be honest. Upstream still has them in t2081qds.dts. However, the board still boots fine with these removed, so I've removed them. > >> + interrupt-parent = <&mpic>; >> + >> + aliases { >> + }; > Consider dropping the empty node. Done. > >> +}; >> + >> +// mdio-mux under &boardctrl + its aliases removed. causes crash: >> +// Oops: Machine check, sig: 7 [#1] >> + >> +/include/ "t2081si-post.dtsi" >> + >> +// add stuff below the include to make sure we override whatever is >> +there >> + >> +&enet0 { >> + phy-connection-type = "sgmii"; >> + phy-handle = <&phy1>; >> +}; >> + >> +&enet1 { >> + phy-connection-type = "sgmii"; >> + phy-handle = <&phy2>; >> +}; >> + >> +&enet2 { >> + phy-connection-type = "rgmii"; >> + fixed-link = <0x10 0x01 0x3e8 0x00 0x00>; }; >> + >> +&enet3 { >> + phy-connection-type = "rgmii"; >> + fixed-link = <0x04 0x01 0x3e8 0x00 0x00>; }; >> + >> +&enet4 { >> + status = "disabled"; >> +}; >> + >> +&enet5 { >> + status = "disabled"; >> +}; >> + >> +&enet6 { >> + status = "disabled"; >> +}; >> + >> +&enet7 { >> + phy-connection-type = "sgmii"; >> + phy-handle = <&phy0>; >> +}; >> + >> +&ifc { >> + ranges = <0x00 0x00 0x0f 0xefc00000 0x400000>; >> + >> + nor@0,0 { >> + reg = <0x00 0x00 0x400000>; >> + >> + partition@00000000 { > The @x number could be shortened. I personally like them "aligned", as it improves readability imo. But as `git grep partition@` in the kernel tree seems to disagree, I'll adapt. > >> + reg = <0x00 0x10000>; >> + label = "NOR (RW) LANNER RCW Code"; > Labels here might need some refactoring, too. Since we're not really touching anything on the NOR (yet), I prefer to keep the OEM names for now. What else would you suggest? > >> + }; >> + >> + partition@00010000 { >> + reg = <0x10000 0x20000>; >> + label = "NOR (RW) WG CFG0"; >> + }; >> + >> + partition@00030000 { >> + reg = <0x30000 0x10000>; >> + label = "NOR (RW) WG CFG1"; >> + }; >> + >> + partition@00040000 { >> + reg = <0x40000 0x10000>; >> + label = "NOR (RW) WG MFG DATA"; >> + }; >> + >> + partition@00050000 { >> + reg = <0x50000 0xb0000>; >> + label = "NOR (RW) WG bootOpt Data & reserved"; >> + }; >> + >> + partition@00100000 { >> + reg = <0x100000 0xb0000>; >> + label = "NOR (RW) WG extra reserved 1"; >> + }; >> + >> + partition@001B0000 { >> + reg = <0x1b0000 0xb0000>; >> + label = "NOR (RW) WG extra reserved 2"; >> + }; >> + >> + partition@00260000 { >> + reg = <0x260000 0xc0000>; >> + label = "NOR (RW) WG U-Boot FAILSAFE"; >> + }; >> + >> + partition@00320000 { >> + reg = <0x320000 0x10000>; >> + label = "NOR (RW) FMAN"; >> + }; >> + >> + partition@00330000 { >> + reg = <0x330000 0x10000>; >> + label = "NOR (RW) WG U-Boot ENV"; >> + }; >> + >> + partition@00340000 { >> + reg = <0x340000 0xc0000>; >> + label = "NOR (RW) WG U-Boot Image"; >> + }; >> + }; >> + >> + nand@2,0 { >> + status = "disabled"; >> + }; >> +}; >> + >> +&mdio0 { >> + // m300 ethernet port 0 >> + phy0: ethernet-phy@0 { >> + reg = <0x00>; >> + }; >> + >> + // m300 ethernet port 1 >> + phy1: ethernet-phy@1 { >> + reg = <0x01>; >> + }; >> + >> + phy2: ethernet-phy@2 { >> + reg = <0x02>; >> + }; >> + >> + phy3: ethernet-phy@3 { >> + reg = <0x03>; >> + }; >> + >> + // m300 mv88e6123 switch detected >> + switch0: switch@10 { >> + compatible = "marvell,mv88e6085"; >> + reg = <0x10>; >> + >> + //dsa,member = <0 0>; >> + mdio { >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + switch0phy0: switch0phy0@0 { >> + reg = <0x00>; >> + interrupt-parent = <&switch0>; >> + }; >> + >> + switch0phy1: switch0phy1@1 { >> + reg = <0x01>; >> + interrupt-parent = <&switch0>; >> + }; >> + >> + switch0phy2: switch0phy2@2 { >> + reg = <0x02>; >> + interrupt-parent = <&switch0>; >> + }; >> + >> + switch0phy3: switch0phy3@3 { >> + reg = <0x03>; >> + interrupt-parent = <&switch0>; >> + }; >> + >> + switch0phy4: switch0phy4@4 { >> + reg = <0x04>; >> + interrupt-parent = <&switch0>; >> + }; >> + }; >> + >> + ports { >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + port@0 { >> + reg = <0>; >> + // TODO: rename to eth3 after figuring out >> how to rename SoC eth3 >> + label = "sw0p0"; >> + phy-handle = <&switch0phy0>; >> + }; >> + >> + port@1 { >> + // TODO: rename to eth4 after figuring out >> how to rename SoC eth4 >> + reg = <1>; >> + label = "sw0p1"; >> + phy-handle = <&switch0phy1>; >> + }; >> + >> + port@2 { >> + reg = <2>; >> + label = "eth5"; >> + phy-handle = <&switch0phy2>; >> + }; >> + >> + port@3 { >> + reg = <3>; >> + label = "eth6"; >> + phy-handle = <&switch0phy3>; >> + }; >> + >> + port@4 { >> + reg = <4>; >> + label = "eth7"; >> + phy-handle = <&switch0phy4>; >> + }; >> + >> + port@5 { >> + status = "disabled"; >> + >> + reg = "<5>"; >> + label = "cpu1"; >> + ethernet = <&enet2>; >> + phy-mode = "rgmii"; >> + >> + fixed-link { >> + speed = <1000>; >> + full-duplex; >> + }; > This is still WIP? Or why do we need to add this if it's disabled? I believe both ports are connected to the switch, but this is currently not supported in DSA. I prefer to keep this until support for multiple CPU ports lands in OpenWrt. > >> + }; >> + >> + port@6 { >> + reg = <6>; >> + label = "cpu"; >> + ethernet = <&enet3>; >> + phy-mode = "rgmii-id"; >> + >> + fixed-link { >> + speed = <1000>; >> + full-duplex; >> + }; >> + }; >> + }; >> + }; >> +}; >> + >> +&soc { >> + i2c@118000 { >> + tpm@29 { >> + compatible = "tpm,tpm_i2c_atmel"; >> + reg = <0x29>; >> + }; >> + hwmon@2c { >> + compatible = "winbond,w83793"; >> + reg = <0x2c>; >> + }; >> + hwmon@2d { >> + compatible = "winbond,w83793"; >> + reg = <0x2d>; >> + }; >> + rtc@32 { >> + compatible = "ricoh,rs5c372a"; >> + reg = <0x32>; >> + }; >> + pca9547@77 { >> + status = "disabled"; >> + }; >> + }; >> + >> + spi@110000 { >> + // DTS decompiled from OEM DTB contains flash@0 but >> doesn't work >> + // spi-nor spi0.0: unrecognized JEDEC id bytes: ff ff ff ff ff >> ff >> + // disable for now >> + flash@0 { >> + status = "disabled"; >> + }; >> + >> + flash@1 { >> + status = "disabled"; >> + }; >> + >> + flash@2 { >> + status = "disabled"; >> + }; >> + }; >> +}; >> diff --git a/target/linux/qoriq/image/generic.mk >> b/target/linux/qoriq/image/generic.mk >> index e69de29bb2..2709811658 100644 >> --- a/target/linux/qoriq/image/generic.mk >> +++ b/target/linux/qoriq/image/generic.mk >> @@ -0,0 +1,13 @@ >> +define Device/firebox_m300 > This node name should be "Device/watchguard_firebox-m300", so it matches the > compatible. Renamed. > >> + DEVICE_VENDOR := WatchGuard >> + DEVICE_MODEL := Firebox M300 >> + DEVICE_DTS_DIR := $(DTS_DIR)/fsl >> + DEVICE_PACKAGES := kmod-hwmon-w83793 kmod-rtc-rs5c372a >> +kmod-tpm-i2c-atmel >> + BLOCKSIZE := 128k >> + KERNEL := kernel-bin | gzip | uImage gzip >> + SUPPORTED_DEVICES := fsl,T2081QDS, watchguard,firebox-m300 > The second entry should be dropped, since it's derived from the node name > after change. > Do you really need the first one? If yes, > > SUPPORTED_DEVICES += fsl,T2081QDS > > otherwise drop the entire line. I think this is a leftover from when sysupgrade wasn't working due to board mismatch. Dropped. > > With the new node name you should either rename the DTS to firebox-m300.dts > [*] or add a specific DEVICE_DTS entry here if the shorter name can't be > changed for some reason. > > * I'd personally even prefer the long name watchguard-firebox-m300.dts, which > would require to change the default DEVICE_DTS in patch 5/6. However, kernel > is completely inconsistent here, so I don't know whether that would be > acceptable for the particular target there. I think watchguard-firebox-m300.dts is the most descriptive name, so I went for that. > > Best > > Adrian > >> + IMAGES := sdcard.img.gz sysupgrade.img.gz >> + IMAGE/sysupgrade.img.gz := sdcard-img | gzip | append-metadata >> + IMAGE/sdcard.img.gz := sdcard-img | gzip endef TARGET_DEVICES += >> +firebox_m300 >> -- >> 2.31.1 >> >> Thanks for your quick review, Adrian, I really appreciate it.
Changes can already be reviewed in my staging tree: https://git.openwrt.org/?p=openwrt/staging/stintel.git;a=shortlog;h=refs/heads/qoriq They will be squashed into the relevant commits before sending out a v2 series. Stijn _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel