On Sat, Nov 09, 2024 at 10:14:33PM +0100, Enrico Mioso wrote: > The GatoNetworks GDSP is a re-branded version of the R5000 5G Industrial > router from Yinghua Technologies. > The re-branded device comes with OpenWrt preinstalled, and an OpenWrt-based > U-Boot bootloader version. While the flash layout has been kept compatible > with the OpenWrt version found on the stock device (see [5]), the image format > changed, making a bootloader upgrade necessary. > > Specifications: > SoC: Mediatek MT7981BA > RAM: 256MB > Flash: SPI-NOR 32 MiB (Winbond W25Q256) > WLAN: MT7976CN DBDC AX Wi-Fi > Switch: MT7531AE (4x LAN Gigabit ports, 1x WAN Gigabit port) > 5G: Quectel RM520N modem > Watchdog: an external WDT connected to GPIO 6 is present and always running; > the built-in Mediatek watchdog is also present and effective, but > not used at the moment. > > This porting has been tested only with 1x 5G modems installed (the device > supports up to two). > > Installation: > Installation is possible via sysupgrade both in the stock device and > re-branded version. However, in the former case, updating the bootloader is > required. > > OpenWrt-based U-Boot Bootloader installation > -------------------------------------------- > The firmware flashed in the re-branded device at manifacturing time will > flash an OpenWrt-based U-Boot bootloader with some extra recovery features > (see [1]) at first boot. > To update the bootloader, you need to install the mtd-rw module and > insmod it: > > insmod mtd-rw i_want_a_brick=1 > > Then update relevant flash partitions: > > mtd erase u-boot-env > mtd erase BL2 > mtd erase FIP > mtd write openwrt-mediatek-filogic-gatonetworks_gdsp-preloader.bin BL2 > mtd write openwrt-mediatek-filogic-gatonetworks_gdsp-bl31-uboot.fip FIP > > And reboot, making sure all previous commands ran succesfully. > If something goes wrong, you can recover your device via the mtk_uartboot > tool. > In my testing, it was possible to start the process even without (un)-plugging > the device, may be handy for remote recovery. > > Installation from stock device and firmware > ------------------------------------------- > To install vanilla OpenWrt in the stock device (R5000 5G Industrial router > from Yinghua Technologies) running the stock vendor firmware, you will need > to update your bootloader as described in previous section. Remember to use > -F (force upgrade) and -n (not keeping settings). > > U-Boot Recovery > --------------- > This procedure has been tested only with the OpenWrt-based U-boot bootloader. > Assign your system static IP address 192.168.1.1 and start a TFTP server. The ... uh, I did a mistake in the commit message. You should assign your system IP 192.168.1.10, and requess will be coming from 192.168.1.1. May you fix that directly? Thanks a lot. Sorry. > device will look for an initramfs image named > openwrt-mediatek-filogic-gatonetworks_gdsp-initramfs-kernel.bin > (so you may use openwrt/bin/targets/mediatek/filogic as root dir for your > TFTP server). > Power on the device while keeping the reset button pressed, until you see > a TFTP request from 192.168.1.10. Your environment will be restored to it's > default state. > > MAC addresses assignment > ------------------------ > MAC addresses are assigned slightly differently than in stock firmware. In > particular, the 5 GHz Wi-Fi uses 2.4 GHZ MAC + 1, rather than reusing it with > LA bit set as done in stock firmware. This MAC address is allocated to the > device, so it can be used. > The 2.4 GHz Wi-Fi MAC address is the label MAC. LAN MAC is used to set the > special U-Boot environment ethaddr variable. > > device MAC address U-Boot > env variable factory partition offset > 2.4 GHz Wi-Fi :84 > wifi_mac 0x4 > 5.8 GHz Wi-Fi :85 not > present not present > WAN :86 > wan_mac > 0x24 > LAN :87 > lan_mac > 0x2A > > Notes > ----- > [1]: the OpenWrt-based U-Boot bootloader you will find installed in the > re-branded device is configured to request for the initramfs image via > TFTP for $gdsp_tftp_tries times before trying normal boot from NOR flash. > Setting this U-Boot environment variable to 0x0 will disable the feature, > which is not implemented in this patch. > [2]: the exposed UART port is connected to ttyS1; the ttyS0 console port is > not exposed. > [3]: the provided bootloader environment has no provision for operating on > BL2 and the FIP partitions. This is an intentional choice to make it > (slightly) more difficult to brick the device. > [4]: it seems GPIO 6 is used both for the "SYS" LED and external WDT. > [5] BL2 expects to find FIP payload at a fixed offset, so some constraints > apply. > > Signed-off-by: Enrico Mioso <mrkiko...@gmail.com> > --- > .../dts/mt7981b-gatonetworks-gdsp.dts | 389 ++++++++++++++++++ > .../base-files/lib/upgrade/platform.sh | 1 + > target/linux/mediatek/image/filogic.mk | 20 + > 3 files changed, 410 insertions(+) > create mode 100644 target/linux/mediatek/dts/mt7981b-gatonetworks-gdsp.dts > > diff --git a/target/linux/mediatek/dts/mt7981b-gatonetworks-gdsp.dts > b/target/linux/mediatek/dts/mt7981b-gatonetworks-gdsp.dts > new file mode 100644 > index 0000000000..cbe188b859 > --- /dev/null > +++ b/target/linux/mediatek/dts/mt7981b-gatonetworks-gdsp.dts > @@ -0,0 +1,389 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > + > +/dts-v1/; > +#include "mt7981.dtsi" > + > +/ { > + model = "GatoNetworks GDSP"; > + compatible = "gatonetworks,gdsp", "mediatek,mt7981"; > + > + aliases { > + serial0 = &uart0; > + label-mac-device = &wifi_band_0; > + led-boot = &sg1; > + led-failsafe = &sg1; > + led-running = &sg1; > + led-upgrade = &sg1; > + }; > + > + chosen { > + stdout-path = "serial0:115200n8"; > + bootargs = "console=ttyS0,115200n1 > earlycon=uart8250,mmio32,0x11002000"; > + rootdisk = <&firmware>; > + }; > + > + memory { > + reg = <0 0x40000000 0 0x10000000>; > + }; > + > + reg_3p3v: regulator-3p3v { > + compatible = "regulator-fixed"; > + regulator-name = "fixed-3.3V"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-boot-on; > + regulator-always-on; > + }; > + > + reg_5v: regulator-5v { > + compatible = "regulator-fixed"; > + regulator-name = "fixed-5V"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + regulator-boot-on; > + regulator-always-on; > + }; > + > + gpio-keys { > + compatible = "gpio-keys"; > + > + reset { > + label = "reset"; > + linux,code = <KEY_RESTART>; > + gpios = <&pio 1 GPIO_ACTIVE_LOW>; > + }; > + }; > + > + gpio-export { > + compatible = "gpio-export"; > + > + modem1 { > + gpio-export,name = "modem1"; > + gpio-export,output = <0>; > + gpios = <&pio 2 GPIO_ACTIVE_LOW>; > + }; > + > + modem2 { > + gpio-export,name = "modem2"; > + gpio-export,output = <0>; > + gpios = <&pio 14 GPIO_ACTIVE_LOW>; > + }; > + }; > + > + leds { > + compatible = "gpio-leds"; > + > + sim1 { > + label = "green:sim1"; > + gpios = <&pio 13 GPIO_ACTIVE_LOW>; > + }; > + > + sim2 { > + label = "green:sim2"; > + gpios = <&pio 0 GPIO_ACTIVE_LOW>; > + }; > + > + sg1: sg1 { > + label = "green:sg1"; > + gpios = <&pio 10 GPIO_ACTIVE_LOW>; > + }; > + > + sg2 { > + label = "green:sg2"; > + gpios = <&pio 11 GPIO_ACTIVE_LOW>; > + }; > + > + sg3 { > + label = "green:sg3"; > + gpios = <&pio 12 GPIO_ACTIVE_LOW>; > + }; > + > + sg4 { > + label = "green:sg4"; > + gpios = <&pio 7 GPIO_ACTIVE_LOW>; > + }; > + > + sg5 { > + label = "green:sg5"; > + gpios = <&pio 8 GPIO_ACTIVE_LOW>; > + }; > + > + sg6 { > + label = "green:sg6"; > + gpios = <&pio 9 GPIO_ACTIVE_LOW>; > + }; > + }; > + > + gpio-watchdog { > + compatible = "linux,wdt-gpio"; > + gpios = <&pio 6 GPIO_ACTIVE_LOW>; > + hw_algo = "toggle"; > + hw_margin_ms = <25000>; > + always-running; > + }; > +}; > + > +&watchdog { > + status = "okay"; > +}; > + > +ð { > + status = "okay"; > + > + gmac0: mac@0 { > + compatible = "mediatek,eth-mac"; > + reg = <0>; > + phy-mode = "2500base-x"; > + > + nvmem-cells = <&macaddr_lan>; > + nvmem-cell-names = "mac-address"; > + > + fixed-link { > + speed = <2500>; > + full-duplex; > + pause; > + }; > + }; > + > + mdio: mdio-bus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + switch@1f { > + compatible = "mediatek,mt7531"; > + reg = <31>; > + reset-gpios = <&pio 39 0>; > + interrupt-controller; > + #interrupt-cells = <1>; > + interrupt-parent = <&pio>; > + interrupts = <38 IRQ_TYPE_LEVEL_HIGH>; > + > + mdio { > + #address-cells = <1>; > + #size-cells = <0>; > + > + swphy0: phy@0 { > + reg = <0>; > + }; > + > + swphy1: phy@1 { > + reg = <1>; > + }; > + > + swphy2: phy@2 { > + reg = <2>; > + }; > + > + swphy3: phy@3 { > + reg = <3>; > + }; > + > + swphy4: phy@4 { > + reg = <4>; > + }; > + }; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + label = "lan1"; > + phy-handle = <&swphy0>; > + }; > + > + port@1 { > + reg = <1>; > + label = "lan2"; > + phy-handle = <&swphy1>; > + }; > + > + port@2 { > + reg = <2>; > + label = "lan3"; > + phy-handle = <&swphy2>; > + }; > + > + port@3 { > + reg = <3>; > + label = "lan4"; > + phy-handle = <&swphy3>; > + }; > + > + port@4 { > + reg = <4>; > + label = "wan"; > + nvmem-cells = <&macaddr_wan>; > + nvmem-cell-names = "mac-address"; > + phy-handle = <&swphy4>; > + }; > + > + port@6 { > + reg = <6>; > + ethernet = <&gmac0>; > + phy-mode = "2500base-x"; > + > + fixed-link { > + speed = <2500>; > + full-duplex; > + pause; > + }; > + }; > + }; > + }; > + }; > +}; > + > +&crypto { > + status = "okay"; > +}; > + > +&wifi { > + mediatek,mtd-eeprom = <&factory 0x0>; > + status = "okay"; > + > + wifi_band_0: band@0 { > + reg = <0>; > + nvmem-cells = <&macaddr_wifi 0>; > + nvmem-cell-names = "mac-address"; > + }; > + > + band@1 { > + reg = <1>; > + nvmem-cells = <&macaddr_wifi 1>; > + nvmem-cell-names = "mac-address"; > + }; > +}; > + > +&spi2 { > + pinctrl-names = "default"; > + pinctrl-0 = <&spi2_flash_pins>; > + status = "okay"; > + > + flash@0 { > + #address-cells = <1>; > + #size-cells = <1>; > + compatible = "jedec,spi-nor"; > + reg = <0>; > + spi-max-frequency = <52000000>; > + > + partitions { > + compatible = "fixed-partitions"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@00000 { > + label = "BL2"; > + reg = <0x00000 0x0040000>; > + read-only; > + }; > + > + partition@40000 { > + label = "u-boot-env"; > + reg = <0x40000 0x0010000>; > + }; > + > + factory: partition@50000 { > + label = "Factory"; > + reg = <0x50000 0x00B0000>; > + read-only; > + > + nvmem-layout { > + compatible = "fixed-layout"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + macaddr_wifi: macaddr@4 { > + reg = <0x4 0x6>; > + compatible = "mac-base"; > + #nvmem-cell-cells = <1>; > + }; > + > + macaddr_wan: macaddr@24 { > + reg = <0x24 0x6>; > + }; > + > + macaddr_lan: macaddr@2a { > + reg = <0x2a 0x6>; > + }; > + }; > + }; > + > + partition@100000 { > + label = "FIP"; > + reg = <0x100000 0x0080000>; > + read-only; > + }; > + > + firmware: partition@180000 { > + label = "firmware"; > + reg = <0x180000 0x1E80000>; > + }; > + }; > + }; > +}; > + > +&pio { > + uart1_pins: uart1-pins { > + mux { > + function = "uart"; > + groups = "uart1_0"; > + }; > + }; > + > + uart2_pins: uart2-pins { > + mux { > + function = "uart"; > + groups = "uart2_0_tx_rx"; > + }; > + }; > + > + spi2_flash_pins: spi2-pins { > + mux { > + function = "spi"; > + groups = "spi2", "spi2_wp_hold"; > + }; > + > + conf-pu { > + pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; > + drive-strength = <MTK_DRIVE_8mA>; > + bias-pull-up = <MTK_PUPD_SET_R1R0_11>; > + }; > + > + conf-pd { > + pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; > + drive-strength = <MTK_DRIVE_8mA>; > + bias-pull-down = <MTK_PUPD_SET_R1R0_11>; > + }; > + }; > +}; > + > +&uart0 { > + status = "okay"; > +}; > + > +&uart1 { > + pinctrl-names = "default"; > + pinctrl-0 = <&uart1_pins>; > + status = "okay"; > +}; > + > +&uart2 { > + pinctrl-names = "default"; > + pinctrl-0 = <&uart2_pins>; > + status = "okay"; > +}; > + > +&usb_phy { > + status = "okay"; > +}; > + > +&xhci { > + mediatek,u3p-dis-msk = <0x0>; > + phys = <&u2port0 PHY_TYPE_USB2>, > + <&u3port0 PHY_TYPE_USB3>; > + status = "okay"; > + vusb33-supply = <®_3p3v>; > + vbus-supply = <®_5v>; > +}; > diff --git a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh > b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh > index 7fe2d29d31..cfd77b62d7 100755 > --- a/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh > +++ b/target/linux/mediatek/filogic/base-files/lib/upgrade/platform.sh > @@ -70,6 +70,7 @@ platform_do_upgrade() { > bananapi,bpi-r4|\ > bananapi,bpi-r4-poe|\ > cmcc,rax3000m|\ > + gatonetworks,gdsp|\ > h3c,magic-nx30-pro|\ > jcg,q30-pro|\ > jdcloud,re-cp-03|\ > diff --git a/target/linux/mediatek/image/filogic.mk > b/target/linux/mediatek/image/filogic.mk > index 5dfde755a0..739fd54308 100644 > --- a/target/linux/mediatek/image/filogic.mk > +++ b/target/linux/mediatek/image/filogic.mk > @@ -670,6 +670,26 @@ define Device/edgecore_eap111 > endef > TARGET_DEVICES += edgecore_eap111 > > +define Device/gatonetworks_gdsp > + DEVICE_VENDOR := GatoNetworks > + DEVICE_MODEL := gdsp > + DEVICE_DTS := mt7981b-gatonetworks-gdsp > + DEVICE_DTS_DIR := ../dts > + IMAGES := sysupgrade.itb > + IMAGE_SIZE := 32768k > + DEVICE_PACKAGES := fitblk kmod-mt7915e kmod-mt7981-firmware \ > + kmod-usb-net-qmi-wwan kmod-usb-serial-option kmod-usb3 \ > + mt7981-wo-firmware -kmod-phy-aquantia > + ARTIFACTS := preloader.bin bl31-uboot.fip > + ARTIFACT/preloader.bin := mt7981-bl2 nor-ddr3 > + ARTIFACT/bl31-uboot.fip := mt7981-bl31-uboot gatonetworks_gdsp > + KERNEL := kernel-bin | gzip > + KERNEL_INITRAMFS := kernel-bin | lzma | \ > + fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | > pad-to 64k > + IMAGE/sysupgrade.itb := append-kernel | fit gzip > $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | > pad-rootfs | append-metadata > +endef > +TARGET_DEVICES += gatonetworks_gdsp > + > define Device/glinet_gl-mt2500 > DEVICE_VENDOR := GL.iNet > DEVICE_MODEL := GL-MT2500 > -- > 2.47.0 >
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel