diff mbox series

[V2,3/3] mediatek: filogic: add support for GatoNetworks GDSP

Message ID 20241109211501.56256-3-mrkiko.rs@gmail.com
State New
Headers show
Series [V2,1/3] uboot-mediatek: add support for GatoNetworks GDSP | expand

Commit Message

Enrico Mioso Nov. 9, 2024, 9:14 p.m. UTC
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
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.rs@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

Comments

Enrico Mioso Nov. 9, 2024, 9:47 p.m. UTC | #1
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.rs@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";
> +};
> +
> +&eth {
> +	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 = <&reg_3p3v>;
> +	vbus-supply = <&reg_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
>
Enrico Mioso Nov. 14, 2024, 12:04 a.m. UTC | #2
Hello All,

this is a friendly ping .) .
Thanks a lot for the time and patience.

Enrico
Robert Marko Nov. 14, 2024, 8:54 a.m. UTC | #3
On Thu, 14 Nov 2024 at 01:05, Enrico Mioso <mrkiko.rs@gmail.com> wrote:
>
> Hello All,
>
> this is a friendly ping .) .
> Thanks a lot for the time and patience.

I see that it got merged today,
Regards Robert
>
> Enrico
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff mbox series

Patch

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";
+};
+
+&eth {
+	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 = <&reg_3p3v>;
+	vbus-supply = <&reg_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