diff mbox series

ramips: add support for Zbtlink ZBT-WG1602

Message ID 20211116101025.14007-1-ryazanov.s.a@gmail.com
State Accepted
Delegated to: Hauke Mehrtens
Headers show
Series ramips: add support for Zbtlink ZBT-WG1602 | expand

Commit Message

Sergey Ryazanov Nov. 16, 2021, 10:10 a.m. UTC
Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
(UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
slots with USB and SIM only and another one pure miniPCIe slot as well
as five Gigabit Ethernet ports (4xLAN + WAN).

Specification:

* SoC: MT7621A
* RAM: 256/512 MiB
* Flash: 16/32 MiB (SPI NOR)
* external watchdog (looks like Torexsemi XC6131B)
* Eth: 10/100/100 Mbps Ethernet x5 ports (4xLAN + WAN)
* WLAN 2GHz: MT7603EN (.11n, MIMO 2x2)
* WLAN 5GHz: MT7612EN (.11ac, MIMO 2x2)
* WLAN Ants: detachable x2, shared by 2GHz & 5GHz radios
* miniPCIe: 2x slots with USB&SIM + 1x slot with regular PCIe bus
* WWAN Ants: detachable x4
* External storage: microSD (SDXC) slot
* USB: 2.0 Type-A port
* LED: 11 (5 per Eth phy, 3 SoC controlled, 2 WLAN 2/5 controlled, 1
       power indicator)
* Button: 1 (reset)
* UART: console (115200 baud)
* Power: DC jack (12 V / 2.5 A)

Additional HW information:

* SoC USB port #1 is shared by internal miniPCIe slot and external
  Type-A USB port, USB D+/D- lines are toggled between ports using a
  GPIO controlled DPDT switch.
* Power of the USB enabled miniPCIe slots can be individually controlled
  using dedicated GPIO lines.
* Vendor firmware feeds the external watchdog with 1s pulses. GPIO
  watchdog driver is able to either generate a 1us pulses or toggle the
  output line. 1us is not enough for the external watchod timer, so
  the line toggling driver mode is utilized.

Installation:

Vendor's firmware is OpenWrt (LEDE) based, so the sysupgrade image can
be directly used to install OpenWrt. Firmware must be upgraded using the
'force' and 'do not save configuration' command line options (or
correspondig web interface checkboxes) since the vendor firmware is from
the pre-DSA era.

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
---
 .../dts/mt7621_zbtlink_zbt-wg1602-16m.dts     |  10 +
 .../ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi | 206 ++++++++++++++++++
 target/linux/ramips/image/mt7621.mk           |  12 +
 3 files changed, 228 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
 create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi

Comments

Sergey Ryazanov Nov. 16, 2021, 10:45 a.m. UTC | #1
Hello Roger,

On Tue, Nov 16, 2021 at 1:29 PM Roger Pueyo Centelles | Guifi.net
<roger.pueyo@guifi.net> wrote:
> I spotted a very small typo on the commit message:
>
> * Eth: 10/100/100 Mbps Ethernet x5 ports (4xLAN + WAN)
>
> is probably
>
> * Eth: 10/100/1000 Mbps Ethernet x5 ports (4xLAN + WAN)

Sure, this should be 1000 Mbps. Thank you for noticing this!

Maintainers, should I resend with the fixed message?
Enrico Mioso Nov. 16, 2021, 12:40 p.m. UTC | #2
Hello!!

Thanks for your work!

Does the device use ZLoader?
Is a recovery mode available? (maybe document it in the commit)
Does it require LZMA loader for 5.10?

thanks a lot again,

Enrico


On Tue, 16 Nov 2021, Sergey Ryazanov wrote:

> Date: Tue, 16 Nov 2021 11:10:25
> From: Sergey Ryazanov <ryazanov.s.a@gmail.com>
> To: OpenWrt Development List <openwrt-devel@lists.openwrt.org>
> Subject: [PATCH] ramips: add support for Zbtlink ZBT-WG1602
> 
> Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
> (UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
> slots with USB and SIM only and another one pure miniPCIe slot as well
> as five Gigabit Ethernet ports (4xLAN + WAN).
>
> Specification:
>
> * SoC: MT7621A
> * RAM: 256/512 MiB
> * Flash: 16/32 MiB (SPI NOR)
> * external watchdog (looks like Torexsemi XC6131B)
> * Eth: 10/100/100 Mbps Ethernet x5 ports (4xLAN + WAN)
> * WLAN 2GHz: MT7603EN (.11n, MIMO 2x2)
> * WLAN 5GHz: MT7612EN (.11ac, MIMO 2x2)
> * WLAN Ants: detachable x2, shared by 2GHz & 5GHz radios
> * miniPCIe: 2x slots with USB&SIM + 1x slot with regular PCIe bus
> * WWAN Ants: detachable x4
> * External storage: microSD (SDXC) slot
> * USB: 2.0 Type-A port
> * LED: 11 (5 per Eth phy, 3 SoC controlled, 2 WLAN 2/5 controlled, 1
>       power indicator)
> * Button: 1 (reset)
> * UART: console (115200 baud)
> * Power: DC jack (12 V / 2.5 A)
>
> Additional HW information:
>
> * SoC USB port #1 is shared by internal miniPCIe slot and external
>  Type-A USB port, USB D+/D- lines are toggled between ports using a
>  GPIO controlled DPDT switch.
> * Power of the USB enabled miniPCIe slots can be individually controlled
>  using dedicated GPIO lines.
> * Vendor firmware feeds the external watchdog with 1s pulses. GPIO
>  watchdog driver is able to either generate a 1us pulses or toggle the
>  output line. 1us is not enough for the external watchod timer, so
>  the line toggling driver mode is utilized.
>
> Installation:
>
> Vendor's firmware is OpenWrt (LEDE) based, so the sysupgrade image can
> be directly used to install OpenWrt. Firmware must be upgraded using the
> 'force' and 'do not save configuration' command line options (or
> correspondig web interface checkboxes) since the vendor firmware is from
> the pre-DSA era.
>
> Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
> ---
> .../dts/mt7621_zbtlink_zbt-wg1602-16m.dts     |  10 +
> .../ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi | 206 ++++++++++++++++++
> target/linux/ramips/image/mt7621.mk           |  12 +
> 3 files changed, 228 insertions(+)
> create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
> create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
>
> diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
> new file mode 100644
> index 0000000000..216c7b3cf0
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
> @@ -0,0 +1,10 @@
> +#include "mt7621_zbtlink_zbt-wg1602.dtsi"
> +
> +/ {
> +	compatible = "zbtlink,zbt-wg1602-16m", "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
> +	model = "Zbtlink ZBT-WG1602 (16M)";
> +};
> +
> +&firmware {
> +	reg = <0x50000 0xfb0000>;
> +};
> diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
> new file mode 100644
> index 0000000000..e377a13444
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
> @@ -0,0 +1,206 @@
> +#include "mt7621.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	compatible = "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
> +
> +	aliases {
> +		led-boot = &led_sm;
> +		led-failsafe = &led_sm;
> +		led-running = &led_sm;
> +		led-upgrade = &led_sm;
> +		label-mac-device = &gmac0;
> +	};
> +
> +	chosen {
> +		bootargs = "console=ttyS0,115200";
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		led_sm: sm {
> +			label = "green:sm";
> +			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		4g1 {
> +			label = "green:4g1";
> +			gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		4g2 {
> +			label = "green:4g2";
> +			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	watchdog {
> +		compatible = "linux,wdt-gpio";
> +		gpios = <&gpio 3 GPIO_ACTIVE_HIGH>;
> +		hw_algo = "toggle";
> +		/* hw_margin_ms is actually ~120s but driver limits it to 60s */
> +		hw_margin_ms = <60000>;
> +		always-running;
> +	};
> +
> +	gpio-export {
> +		compatible = "gpio-export";
> +		#size-cells = <0>;
> +
> +		4g1-pwr {
> +			gpio-export,name = "4g1-pwr";
> +			gpio-export,output = <1>;
> +			gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		4g2-pwr {
> +			gpio-export,name = "4g2-pwr";
> +			gpio-export,output = <1>;
> +			gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		ext-usb {
> +			gpio-export,name = "ext-usb";
> +			gpio-export,output = <1>;
> +			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +};
> +
> +&sdhci {
> +	status = "okay";
> +};
> +
> +&spi0 {
> +	status = "okay";
> +
> +	flash@0 {
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <10000000>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "u-boot";
> +				reg = <0x0 0x30000>;
> +				read-only;
> +			};
> +
> +			partition@30000 {
> +				label = "u-boot-env";
> +				reg = <0x30000 0x10000>;
> +				read-only;
> +			};
> +
> +			factory: partition@40000 {
> +				label = "factory";
> +				reg = <0x40000 0x10000>;
> +				read-only;
> +			};
> +
> +			firmware: partition@50000 {
> +				compatible = "denx,uimage";
> +				label = "firmware";
> +			};
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> +
> +&pcie0 {
> +	wifi0: wifi@0,0 {
> +		compatible = "pci14c3,7603";
> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x0000>;
> +	};
> +};
> +
> +&pcie1 {
> +	wifi1: wifi@0,0 {
> +		compatible = "pci14c3,7662";
> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x8000>;
> +		ieee80211-freq-limit = <5000000 6000000>;
> +
> +		led {
> +			led-sources = <2>;
> +		};
> +	};
> +};
> +
> +&gmac0 {
> +	nvmem-cells = <&macaddr_factory_e000>;
> +	nvmem-cell-names = "mac-address";
> +};
> +
> +&switch0 {
> +	ports {
> +		port@0 {
> +			status = "okay";
> +			label = "lan1";
> +		};
> +
> +		port@1 {
> +			status = "okay";
> +			label = "lan2";
> +		};
> +
> +		port@2 {
> +			status = "okay";
> +			label = "lan3";
> +		};
> +
> +		port@3 {
> +			status = "okay";
> +			label = "lan4";
> +		};
> +
> +		port@4 {
> +			status = "okay";
> +			label = "wan";
> +			nvmem-cells = <&macaddr_factory_e006>;
> +			nvmem-cell-names = "mac-address";
> +		};
> +	};
> +};
> +
> +&state_default {
> +	gpio {
> +		groups = "i2c", "rgmii2", "uart2", "wdt";
> +		function = "gpio";
> +	};
> +};
> +
> +&factory {
> +	compatible = "nvmem-cells";
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +
> +	macaddr_factory_e000: macaddr@e000 {
> +		reg = <0xe000 0x6>;
> +	};
> +
> +	macaddr_factory_e006: macaddr@e006 {
> +		reg = <0xe006 0x6>;
> +	};
> +};
> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
> index 3b68a76b3e..c94f75aa66 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -1689,6 +1689,18 @@ define Device/zbtlink_zbt-we3526
> endef
> TARGET_DEVICES += zbtlink_zbt-we3526
>
> +define Device/zbtlink_zbt-wg1602-16m
> +  $(Device/dsa-migration)
> +  $(Device/uimage-lzma-loader)
> +  IMAGE_SIZE := 16064k
> +  DEVICE_VENDOR := Zbtlink
> +  DEVICE_MODEL := ZBT-WG1602
> +  DEVICE_VARIANT := 16M
> +  DEVICE_PACKAGES := kmod-sdhci-mt7620 kmod-mt7603 kmod-mt76x2 kmod-usb3 \
> +	kmod-usb-ledtrig-usbport
> +endef
> +TARGET_DEVICES += zbtlink_zbt-wg1602-16m
> +
> define Device/zbtlink_zbt-wg2626
>   $(Device/dsa-migration)
>   $(Device/uimage-lzma-loader)
> -- 
> 2.32.0
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
>
Sergey Ryazanov Nov. 16, 2021, 1:26 p.m. UTC | #3
On Tue, Nov 16, 2021 at 3:40 PM Enrico Mioso <mrkiko.rs@gmail.com> wrote:
> Does the device use ZLoader?

If you mean Zyxel bootloader, then no. The board utilizes U-boot with
some PandoraBox patches according to the logo printed to the serial
console.

> Is a recovery mode available? (maybe document it in the commit)

Vendor does not mention any recovery mode in the documentation. You
could connect to the serial console and use regular U-boot commandы to
recover the firmware.

> Does it require LZMA loader for 5.10?

Did not test with the 5.10 kernel, but looks like it should run
smoothly on the board. What are the specific requirements for LZMA
loader usage besides the kernel size limitation? 5.10 is not smaller
than 5.4. So, if the 5.4 based firmware requires the LZMA loader to
boot with a typical MT7621 U-boot, then 5.10 will require it too.
Enrico Mioso Nov. 16, 2021, 2:43 p.m. UTC | #4
On Tue, 16 Nov 2021, Sergey Ryazanov wrote:

> Date: Tue, 16 Nov 2021 14:26:41
> From: Sergey Ryazanov <ryazanov.s.a@gmail.com>
> To: Enrico Mioso <mrkiko.rs@gmail.com>
> Cc: OpenWrt Development List <openwrt-devel@lists.openwrt.org>
> Subject: Re: [PATCH] ramips: add support for Zbtlink ZBT-WG1602
> 
> On Tue, Nov 16, 2021 at 3:40 PM Enrico Mioso <mrkiko.rs@gmail.com> wrote:
>> Does the device use ZLoader?
>
> If you mean Zyxel bootloader, then no. The board utilizes U-boot with
> some PandoraBox patches according to the logo printed to the serial
> console.
>
>> Is a recovery mode available? (maybe document it in the commit)
>
> Vendor does not mention any recovery mode in the documentation. You
> could connect to the serial console and use regular U-boot commandы to
> recover the firmware.

Ok, the ZBT device I have has a recovery mode accessible pressing the reset button I guess, not mentioned in the docs as well if memory serves me well.
>
>> Does it require LZMA loader for 5.10?
>
> Did not test with the 5.10 kernel, but looks like it should run
> smoothly on the board. What are the specific requirements for LZMA
> loader usage besides the kernel size limitation? 5.10 is not smaller
> than 5.4. So, if the 5.4 based firmware requires the LZMA loader to
> boot with a typical MT7621 U-boot, then 5.10 will require it too.
Oh, I was only worried about size. didn't know it was already in use, didn't check the patch, sorry.
Thanks!!

Enrico
>
> -- 
> Sergey
>
Sergey Ryazanov Nov. 23, 2021, 9:51 p.m. UTC | #5
On Tue, Nov 16, 2021 at 1:09 PM Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
> Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
> (UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
> slots with USB and SIM only and another one pure miniPCIe slot as well
> as five Gigabit Ethernet ports (4xLAN + WAN).

Could the devs invest some time and apply this, please? If anything is
wrong with the patch, please, let me know.
Sergey Ryazanov Nov. 29, 2021, 11:54 p.m. UTC | #6
On Wed, Nov 24, 2021 at 12:51 AM Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
> On Tue, Nov 16, 2021 at 1:09 PM Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
>> Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
>> (UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
>> slots with USB and SIM only and another one pure miniPCIe slot as well
>> as five Gigabit Ethernet ports (4xLAN + WAN).
>
> Could the devs invest some time and apply this, please? If anything is
> wrong with the patch, please, let me know.

Another one friendly ping. Or are all devs busy and I should be more patient?
Rosen Penev Nov. 30, 2021, 3:17 a.m. UTC | #7
On Tue, Nov 16, 2021 at 2:14 AM Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
>
> Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
> (UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
> slots with USB and SIM only and another one pure miniPCIe slot as well
> as five Gigabit Ethernet ports (4xLAN + WAN).
>
> Specification:
>
> * SoC: MT7621A
> * RAM: 256/512 MiB
> * Flash: 16/32 MiB (SPI NOR)
> * external watchdog (looks like Torexsemi XC6131B)
> * Eth: 10/100/100 Mbps Ethernet x5 ports (4xLAN + WAN)
> * WLAN 2GHz: MT7603EN (.11n, MIMO 2x2)
> * WLAN 5GHz: MT7612EN (.11ac, MIMO 2x2)
> * WLAN Ants: detachable x2, shared by 2GHz & 5GHz radios
> * miniPCIe: 2x slots with USB&SIM + 1x slot with regular PCIe bus
> * WWAN Ants: detachable x4
> * External storage: microSD (SDXC) slot
> * USB: 2.0 Type-A port
> * LED: 11 (5 per Eth phy, 3 SoC controlled, 2 WLAN 2/5 controlled, 1
>        power indicator)
switch LEDs can be controlled now. See
https://github.com/openwrt/openwrt/commit/360c181dd747f033cb61f83915ce277c6497720f
> * Button: 1 (reset)
> * UART: console (115200 baud)
> * Power: DC jack (12 V / 2.5 A)
>
> Additional HW information:
>
> * SoC USB port #1 is shared by internal miniPCIe slot and external
>   Type-A USB port, USB D+/D- lines are toggled between ports using a
>   GPIO controlled DPDT switch.
> * Power of the USB enabled miniPCIe slots can be individually controlled
>   using dedicated GPIO lines.
> * Vendor firmware feeds the external watchdog with 1s pulses. GPIO
>   watchdog driver is able to either generate a 1us pulses or toggle the
>   output line. 1us is not enough for the external watchod timer, so
>   the line toggling driver mode is utilized.
>
> Installation:
>
> Vendor's firmware is OpenWrt (LEDE) based, so the sysupgrade image can
> be directly used to install OpenWrt. Firmware must be upgraded using the
> 'force' and 'do not save configuration' command line options (or
> correspondig web interface checkboxes) since the vendor firmware is from
> the pre-DSA era.
>
> Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
> ---
>  .../dts/mt7621_zbtlink_zbt-wg1602-16m.dts     |  10 +
>  .../ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi | 206 ++++++++++++++++++
>  target/linux/ramips/image/mt7621.mk           |  12 +
>  3 files changed, 228 insertions(+)
>  create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
>  create mode 100644 target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
>
> diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
> new file mode 100644
> index 0000000000..216c7b3cf0
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
> @@ -0,0 +1,10 @@
> +#include "mt7621_zbtlink_zbt-wg1602.dtsi"
> +
> +/ {
> +       compatible = "zbtlink,zbt-wg1602-16m", "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
> +       model = "Zbtlink ZBT-WG1602 (16M)";
> +};
> +
> +&firmware {
> +       reg = <0x50000 0xfb0000>;
> +};
> diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
> new file mode 100644
> index 0000000000..e377a13444
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
> @@ -0,0 +1,206 @@
> +#include "mt7621.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +       compatible = "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
> +
> +       aliases {
> +               led-boot = &led_sm;
> +               led-failsafe = &led_sm;
> +               led-running = &led_sm;
> +               led-upgrade = &led_sm;
> +               label-mac-device = &gmac0;
> +       };
> +
> +       chosen {
> +               bootargs = "console=ttyS0,115200";
> +       };
> +
> +       keys {
> +               compatible = "gpio-keys";
> +
> +               reset {
> +                       label = "reset";
> +                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
> +                       linux,code = <KEY_RESTART>;
> +               };
> +       };
> +
> +       leds {
> +               compatible = "gpio-leds";
> +
> +               led_sm: sm {
> +                       label = "green:sm";
> +                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
> +               };
> +
> +               4g1 {
> +                       label = "green:4g1";
> +                       gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
> +               };
> +
> +               4g2 {
> +                       label = "green:4g2";
> +                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
> +               };
> +       };
> +
> +       watchdog {
> +               compatible = "linux,wdt-gpio";
> +               gpios = <&gpio 3 GPIO_ACTIVE_HIGH>;
> +               hw_algo = "toggle";
> +               /* hw_margin_ms is actually ~120s but driver limits it to 60s */
> +               hw_margin_ms = <60000>;
> +               always-running;
> +       };
> +
> +       gpio-export {
> +               compatible = "gpio-export";
> +               #size-cells = <0>;
> +
> +               4g1-pwr {
> +                       gpio-export,name = "4g1-pwr";
> +                       gpio-export,output = <1>;
> +                       gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
> +               };
> +
> +               4g2-pwr {
> +                       gpio-export,name = "4g2-pwr";
> +                       gpio-export,output = <1>;
> +                       gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
> +               };
> +
> +               ext-usb {
> +                       gpio-export,name = "ext-usb";
> +                       gpio-export,output = <1>;
> +                       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
> +               };
> +       };
> +};
> +
> +&sdhci {
> +       status = "okay";
> +};
> +
> +&spi0 {
> +       status = "okay";
> +
> +       flash@0 {
> +               compatible = "jedec,spi-nor";
> +               reg = <0>;
> +               spi-max-frequency = <10000000>;
> +
> +               partitions {
> +                       compatible = "fixed-partitions";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +
> +                       partition@0 {
> +                               label = "u-boot";
> +                               reg = <0x0 0x30000>;
> +                               read-only;
> +                       };
> +
> +                       partition@30000 {
> +                               label = "u-boot-env";
> +                               reg = <0x30000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       factory: partition@40000 {
> +                               label = "factory";
> +                               reg = <0x40000 0x10000>;
> +                               read-only;
> +                       };
> +
> +                       firmware: partition@50000 {
> +                               compatible = "denx,uimage";
> +                               label = "firmware";
> +                       };
> +               };
> +       };
> +};
> +
> +&pcie {
> +       status = "okay";
> +};
> +
> +&pcie0 {
> +       wifi0: wifi@0,0 {
> +               compatible = "pci14c3,7603";
> +               reg = <0x0000 0 0 0 0>;
> +               mediatek,mtd-eeprom = <&factory 0x0000>;
> +       };
> +};
> +
> +&pcie1 {
> +       wifi1: wifi@0,0 {
> +               compatible = "pci14c3,7662";
> +               reg = <0x0000 0 0 0 0>;
> +               mediatek,mtd-eeprom = <&factory 0x8000>;
> +               ieee80211-freq-limit = <5000000 6000000>;
> +
> +               led {
> +                       led-sources = <2>;
> +               };
> +       };
> +};
> +
> +&gmac0 {
> +       nvmem-cells = <&macaddr_factory_e000>;
> +       nvmem-cell-names = "mac-address";
> +};
> +
> +&switch0 {
> +       ports {
> +               port@0 {
> +                       status = "okay";
> +                       label = "lan1";
> +               };
> +
> +               port@1 {
> +                       status = "okay";
> +                       label = "lan2";
> +               };
> +
> +               port@2 {
> +                       status = "okay";
> +                       label = "lan3";
> +               };
> +
> +               port@3 {
> +                       status = "okay";
> +                       label = "lan4";
> +               };
> +
> +               port@4 {
> +                       status = "okay";
> +                       label = "wan";
> +                       nvmem-cells = <&macaddr_factory_e006>;
> +                       nvmem-cell-names = "mac-address";
> +               };
> +       };
> +};
> +
> +&state_default {
> +       gpio {
> +               groups = "i2c", "rgmii2", "uart2", "wdt";
> +               function = "gpio";
> +       };
> +};
> +
> +&factory {
> +       compatible = "nvmem-cells";
> +       #address-cells = <1>;
> +       #size-cells = <1>;
> +
> +       macaddr_factory_e000: macaddr@e000 {
> +               reg = <0xe000 0x6>;
> +       };
> +
> +       macaddr_factory_e006: macaddr@e006 {
> +               reg = <0xe006 0x6>;
> +       };
> +};
> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
> index 3b68a76b3e..c94f75aa66 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -1689,6 +1689,18 @@ define Device/zbtlink_zbt-we3526
>  endef
>  TARGET_DEVICES += zbtlink_zbt-we3526
>
> +define Device/zbtlink_zbt-wg1602-16m
> +  $(Device/dsa-migration)
> +  $(Device/uimage-lzma-loader)
> +  IMAGE_SIZE := 16064k
> +  DEVICE_VENDOR := Zbtlink
> +  DEVICE_MODEL := ZBT-WG1602
> +  DEVICE_VARIANT := 16M
> +  DEVICE_PACKAGES := kmod-sdhci-mt7620 kmod-mt7603 kmod-mt76x2 kmod-usb3 \
> +       kmod-usb-ledtrig-usbport
> +endef
> +TARGET_DEVICES += zbtlink_zbt-wg1602-16m
> +
>  define Device/zbtlink_zbt-wg2626
>    $(Device/dsa-migration)
>    $(Device/uimage-lzma-loader)
> --
> 2.32.0
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Sergey Ryazanov Dec. 2, 2021, 11 p.m. UTC | #8
Hello Rosen,

On Tue, Nov 30, 2021 at 6:18 AM Rosen Penev <rosenp@gmail.com> wrote:
> On Tue, Nov 16, 2021 at 2:14 AM Sergey Ryazanov <ryazanov.s.a@gmail.com> wrote:
>> Zbtlink ZBT-WG1602 is a Wi-Fi router intendent to use with WWAN
>> (UMTS/LTE/3G/4G) modems. The router board offsers a couple of miniPCIe
>> slots with USB and SIM only and another one pure miniPCIe slot as well
>> as five Gigabit Ethernet ports (4xLAN + WAN).
>>
>> Specification:
>>
>> * SoC: MT7621A
>> * RAM: 256/512 MiB
>> * Flash: 16/32 MiB (SPI NOR)
>> * external watchdog (looks like Torexsemi XC6131B)
>> * Eth: 10/100/100 Mbps Ethernet x5 ports (4xLAN + WAN)
>> * WLAN 2GHz: MT7603EN (.11n, MIMO 2x2)
>> * WLAN 5GHz: MT7612EN (.11ac, MIMO 2x2)
>> * WLAN Ants: detachable x2, shared by 2GHz & 5GHz radios
>> * miniPCIe: 2x slots with USB&SIM + 1x slot with regular PCIe bus
>> * WWAN Ants: detachable x4
>> * External storage: microSD (SDXC) slot
>> * USB: 2.0 Type-A port
>> * LED: 11 (5 per Eth phy, 3 SoC controlled, 2 WLAN 2/5 controlled, 1
>>        power indicator)
> switch LEDs can be controlled now. See
> https://github.com/openwrt/openwrt/commit/360c181dd747f033cb61f83915ce277c6497720f

Nice to hear. It looks like this can help solve some hard special
cases with boards that have more puzzled hardware design or for DIY
enthusiasts.

>> * Button: 1 (reset)
>> * UART: console (115200 baud)
>> * Power: DC jack (12 V / 2.5 A)
diff mbox series

Patch

diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
new file mode 100644
index 0000000000..216c7b3cf0
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602-16m.dts
@@ -0,0 +1,10 @@ 
+#include "mt7621_zbtlink_zbt-wg1602.dtsi"
+
+/ {
+	compatible = "zbtlink,zbt-wg1602-16m", "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
+	model = "Zbtlink ZBT-WG1602 (16M)";
+};
+
+&firmware {
+	reg = <0x50000 0xfb0000>;
+};
diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
new file mode 100644
index 0000000000..e377a13444
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg1602.dtsi
@@ -0,0 +1,206 @@ 
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "zbtlink,zbt-wg1602", "mediatek,mt7621-soc";
+
+	aliases {
+		led-boot = &led_sm;
+		led-failsafe = &led_sm;
+		led-running = &led_sm;
+		led-upgrade = &led_sm;
+		label-mac-device = &gmac0;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_sm: sm {
+			label = "green:sm";
+			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+		};
+
+		4g1 {
+			label = "green:4g1";
+			gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
+		};
+
+		4g2 {
+			label = "green:4g2";
+			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	watchdog {
+		compatible = "linux,wdt-gpio";
+		gpios = <&gpio 3 GPIO_ACTIVE_HIGH>;
+		hw_algo = "toggle";
+		/* hw_margin_ms is actually ~120s but driver limits it to 60s */
+		hw_margin_ms = <60000>;
+		always-running;
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+		#size-cells = <0>;
+
+		4g1-pwr {
+			gpio-export,name = "4g1-pwr";
+			gpio-export,output = <1>;
+			gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
+		};
+
+		4g2-pwr {
+			gpio-export,name = "4g2-pwr";
+			gpio-export,output = <1>;
+			gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+		};
+
+		ext-usb {
+			gpio-export,name = "ext-usb";
+			gpio-export,output = <1>;
+			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&sdhci {
+	status = "okay";
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			factory: partition@40000 {
+				label = "factory";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			firmware: partition@50000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+			};
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi0: wifi@0,0 {
+		compatible = "pci14c3,7603";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0000>;
+	};
+};
+
+&pcie1 {
+	wifi1: wifi@0,0 {
+		compatible = "pci14c3,7662";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+
+		led {
+			led-sources = <2>;
+		};
+	};
+};
+
+&gmac0 {
+	nvmem-cells = <&macaddr_factory_e000>;
+	nvmem-cell-names = "mac-address";
+};
+
+&switch0 {
+	ports {
+		port@0 {
+			status = "okay";
+			label = "lan1";
+		};
+
+		port@1 {
+			status = "okay";
+			label = "lan2";
+		};
+
+		port@2 {
+			status = "okay";
+			label = "lan3";
+		};
+
+		port@3 {
+			status = "okay";
+			label = "lan4";
+		};
+
+		port@4 {
+			status = "okay";
+			label = "wan";
+			nvmem-cells = <&macaddr_factory_e006>;
+			nvmem-cell-names = "mac-address";
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "i2c", "rgmii2", "uart2", "wdt";
+		function = "gpio";
+	};
+};
+
+&factory {
+	compatible = "nvmem-cells";
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	macaddr_factory_e000: macaddr@e000 {
+		reg = <0xe000 0x6>;
+	};
+
+	macaddr_factory_e006: macaddr@e006 {
+		reg = <0xe006 0x6>;
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 3b68a76b3e..c94f75aa66 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -1689,6 +1689,18 @@  define Device/zbtlink_zbt-we3526
 endef
 TARGET_DEVICES += zbtlink_zbt-we3526
 
+define Device/zbtlink_zbt-wg1602-16m
+  $(Device/dsa-migration)
+  $(Device/uimage-lzma-loader)
+  IMAGE_SIZE := 16064k
+  DEVICE_VENDOR := Zbtlink
+  DEVICE_MODEL := ZBT-WG1602
+  DEVICE_VARIANT := 16M
+  DEVICE_PACKAGES := kmod-sdhci-mt7620 kmod-mt7603 kmod-mt76x2 kmod-usb3 \
+	kmod-usb-ledtrig-usbport
+endef
+TARGET_DEVICES += zbtlink_zbt-wg1602-16m
+
 define Device/zbtlink_zbt-wg2626
   $(Device/dsa-migration)
   $(Device/uimage-lzma-loader)