ramips: mt7620: Add support for D-Link DWR-961 A1
authorPawel Dembicki <paweldembicki@gmail.com>
Thu, 17 Feb 2022 23:23:45 +0000 (00:23 +0100)
committerSungbo Eo <mans0n@gorani.run>
Wed, 16 Mar 2022 13:31:14 +0000 (22:31 +0900)
The DWR-961 A1 Wireless Router is based on the MT7620A SoC.
It's a merge of two Amit boards: DWR-960 with ethernet part
of Lava LR-25G001.

ROMID it's taken from Telenor branded version and it works with tested
device. Images from D-Link site for this router are from DWR-953 and it
have ROMID DLK6E2424001. I don't know if it's mistake on web-site
or if it's will require different image.

Specification:

- MediaTek MT7620A (580 Mhz)
- 128 MB of RAM
- 16 MB of FLASH
- 1x 802.11bgn radio
- 1x 802.11ac radio (MT7612 mpcie card)
- 5x 10/100/1000 Mbps Ethernet: 4xLAN and 1xWAN (QCA8337)
- 2x internal, non-detachable antennas (Wifi 2.4G)
- 3x external, detachable antennas (2x LTE, 1x Wifi 5G)
- 1x LTE modem cat 6
- UART (J5) header on PCB (57600 8n1)
- 13x LED, 2x button
- JBOOT bootloader

Installation:
Apply factory image via http web-gui or JBOOT recovery page

How to revert to OEM firmware:
- push the reset button and turn on the power. Wait until LED start
  blinking (~10sec.)
- upload original factory image via JBOOT http (IP: 192.168.123.254)

Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
target/linux/ramips/dts/mt7620a_dlink_dwr-960.dts
target/linux/ramips/dts/mt7620a_dlink_dwr-961-a1.dts [new file with mode: 0644]
target/linux/ramips/dts/mt7620a_dlink_dwr-96x.dtsi [new file with mode: 0644]
target/linux/ramips/image/mt7620.mk
target/linux/ramips/mt7620/base-files/etc/board.d/01_leds
target/linux/ramips/mt7620/base-files/etc/board.d/02_network
target/linux/ramips/mt7620/base-files/etc/board.d/03_gpio_switches
target/linux/ramips/mt7620/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom

index 77b94a1190aa3ac4df7a472f93a14ea8664d65f2..3de9533edc7bff90107245744816277829e7c216 100644 (file)
@@ -1,93 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 
-#include "mt7620a.dtsi"
-
-#include <dt-bindings/input/input.h>
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/mtd/partitions/uimage.h>
+#include "mt7620a_dlink_dwr-96x.dtsi"
 
 / {
        compatible = "dlink,dwr-960", "ralink,mt7620a-soc";
        model = "D-Link DWR-960";
-
-       aliases {
-               led-boot = &led_status;
-               led-failsafe = &led_status;
-               led-running = &led_status;
-               led-upgrade = &led_status;
-       };
-
-       keys {
-               compatible = "gpio-keys";
-
-               reset {
-                       label = "reset";
-                       gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_RESTART>;
-               };
-
-               wps {
-                       label = "wps";
-                       gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_WPS_BUTTON>;
-               };
-       };
-
-       leds {
-               compatible = "gpio-leds";
-
-               led_status: status {
-                       label = "green:status";
-                       gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
-               };
-
-               wan {
-                       label = "green:wan";
-                       gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
-               };
-
-               lan {
-                       label = "green:lan";
-                       gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
-               };
-
-               sms {
-                       label = "green:sms";
-                       gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
-               };
-
-               signal_green {
-                       label = "green:signal";
-                       gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>;
-               };
-
-               signal_red {
-                       label = "red:signal";
-                       gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
-               };
-
-               4g {
-                       label = "green:4g";
-                       gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
-               };
-
-               3g {
-                       label = "green:3g";
-                       gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
-               };
-
-               wlan5g {
-                       label = "green:wlan5g";
-                       gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
-                       linux,default-trigger = "phy0tpt";
-               };
-
-               wlan2g {
-                       label = "green:wlan2g";
-                       gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
-                       linux,default-trigger = "phy1tpt";
-               };
-       };
 };
 
 &ethernet {
        };
 };
 
-&gpio1 {
-       status = "okay";
-};
-
-&gpio2 {
-       status = "okay";
-};
-
-&gpio3 {
-       status = "okay";
-};
-
-&spi0 {
-       status = "okay";
-
-       flash@0 {
-               compatible = "jedec,spi-nor";
-               reg = <0>;
-               spi-max-frequency = <50000000>;
-
-               partitions {
-                       compatible = "fixed-partitions";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-
-                       partition@0 {
-                               label = "jboot";
-                               reg = <0x0 0x10000>;
-                               read-only;
-                       };
-
-                       partition@10000 {
-                               compatible = "openwrt,uimage", "denx,uimage";
-                               openwrt,ih-magic = <IH_MAGIC_OKLI>;
-                               openwrt,offset = <0x10000>;
-                               label = "firmware";
-                               reg = <0x10000 0xfe0000>;
-                       };
-
-                       config: partition@ff0000 {
-                               label = "config";
-                               reg = <0xff0000 0x10000>;
-                               read-only;
-                       };
-               };
-       };
-};
-
-&ehci {
-       status = "okay";
-};
-
-&ohci {
-       status = "okay";
-};
-
-&pcie {
-       status = "okay";
-};
-
-&pcie0 {
-       wifi@0,0 {
-               compatible = "mediatek,mt76";
-               reg = <0x0000 0 0 0 0>;
-               ieee80211-freq-limit = <5000000 6000000>;
-               mediatek,mtd-eeprom = <&config 0xe08e>;
-               nvmem-cells = <&macaddr_config_e50e>;
-               nvmem-cell-names = "mac-address";
-               mac-address-increment = <2>;
-       };
-};
-
-&state_default {
-       default {
-               groups = "i2c", "wled", "spi refclk", "uartf", "ephy";
-               function = "gpio";
-       };
-};
-
-&config {
-       compatible = "nvmem-cells";
-       #address-cells = <1>;
-       #size-cells = <1>;
-
-       macaddr_config_e50e: macaddr@e50e {
-               reg = <0xe50e 0x6>;
-       };
+&wifi {
+       mediatek,mtd-eeprom = <&config 0xe08e>;
 };
diff --git a/target/linux/ramips/dts/mt7620a_dlink_dwr-961-a1.dts b/target/linux/ramips/dts/mt7620a_dlink_dwr-961-a1.dts
new file mode 100644 (file)
index 0000000..7eae666
--- /dev/null
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * D-Link DWR-961 A1 Board Description
+ * Copyright 2022 Pawel Dembicki <paweldembicki@gmail.com>
+ */
+#include "mt7620a_dlink_dwr-96x.dtsi"
+
+/ {
+       compatible = "dlink,dwr-961-a1", "ralink,mt7620a-soc";
+       model = "D-Link DWR-961 A1";
+
+       leds {
+               hidden-1 { /* hidden next to wlan5g led */
+                       label = "green:hidden-1";
+                       gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
+               };
+
+               hidden-2 { /* hidden next to sms led*/
+                       label = "green:hidden-2";
+                       gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&ethernet {
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii1_pins &mdio_pins>;
+
+       port@5 {
+               status = "okay";
+               phy-mode = "rgmii";
+               mediatek,fixed-link = <1000 1 1 1>;
+       };
+
+       mdio-bus {
+               status = "okay";
+
+               ethernet-phy@0 {
+                       reg = <0>;
+                       phy-mode = "rgmii";
+                       qca,ar8327-initvals = <
+                               0x04 0x87300000 /* PORT0 PAD MODE CTRL */
+                               0x0c 0x00000000 /* PORT6 PAD MODE CTRL */
+                               0x7c 0x0000007e /* PORT0_STATUS */
+                               0x80 0x00001200 /* PORT1_STATUS */
+                               0x84 0x00001200 /* PORT2_STATUS */
+                               0x88 0x00001200 /* PORT3_STATUS */
+                               0x8c 0x00001200 /* PORT4_STATUS */
+                               0x90 0x00001200 /* PORT5_STATUS */
+                               0x94 0x00000000 /* PORT6_STATUS */
+                       >;
+               };
+       };
+};
+
+&gsw {
+       mediatek,ephy-base = /bits/ 8 <8>;
+};
+
+&wifi {
+       mediatek,mtd-eeprom = <&config 0xe29e>;
+};
diff --git a/target/linux/ramips/dts/mt7620a_dlink_dwr-96x.dtsi b/target/linux/ramips/dts/mt7620a_dlink_dwr-96x.dtsi
new file mode 100644 (file)
index 0000000..a5fd705
--- /dev/null
@@ -0,0 +1,178 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * D-Link DWR-96x Common Board Description
+ * Copyright 2022 Pawel Dembicki <paweldembicki@gmail.com>
+ */
+#include "mt7620a.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
+
+/ {
+       aliases {
+               led-boot = &led_status;
+               led-failsafe = &led_status;
+               led-running = &led_status;
+               led-upgrade = &led_status;
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps {
+                       label = "wps";
+                       gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_status: status {
+                       label = "green:status";
+                       gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
+               };
+
+               wan {
+                       label = "green:wan";
+                       gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+               };
+
+               lan {
+                       label = "green:lan";
+                       gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
+               };
+
+               sms {
+                       label = "green:sms";
+                       gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
+               };
+
+               signal_green {
+                       label = "green:signal";
+                       gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>;
+               };
+
+               signal_red {
+                       label = "red:signal";
+                       gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
+               };
+
+               4g {
+                       label = "green:4g";
+                       gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
+               };
+
+               3g {
+                       label = "green:3g";
+                       gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan5g {
+                       label = "green:wlan5g";
+                       gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wlan2g {
+                       label = "green:wlan2g";
+                       gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+       };
+};
+
+&ehci {
+       status = "okay";
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio2 {
+       status = "okay";
+};
+
+&gpio3 {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi: wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               ieee80211-freq-limit = <5000000 6000000>;
+               nvmem-cells = <&macaddr_config_e50e>;
+               nvmem-cell-names = "mac-address";
+               mac-address-increment = <(2)>;
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "jboot";
+                               reg = <0x0 0x10000>;
+                               read-only;
+                       };
+
+                       partition@10000 {
+                               compatible = "openwrt,uimage", "denx,uimage";
+                               openwrt,ih-magic = <IH_MAGIC_OKLI>;
+                               openwrt,offset = <0x10000>;
+                               label = "firmware";
+                               reg = <0x10000 0xfe0000>;
+                       };
+
+                       config: partition@ff0000 {
+                               compatible = "nvmem-cells";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+
+                               label = "config";
+                               reg = <0xff0000 0x10000>;
+                               read-only;
+
+                               macaddr_config_e50e: macaddr@e50e {
+                                       reg = <0xe50e 0x6>;
+                               };
+                       };
+               };
+       };
+};
+
+&state_default {
+       default {
+               groups = "i2c", "wled", "spi refclk", "uartf", "ephy";
+               function = "gpio";
+       };
+};
index 5efb4e5e1759079a79fff9a194d49aff490d3130..49d25b947f6a2ce9cfe5c40563d96167a51e02ab 100644 (file)
@@ -314,6 +314,21 @@ define Device/dlink_dwr-960
 endef
 TARGET_DEVICES += dlink_dwr-960
 
+define Device/dlink_dwr-961-a1
+  $(Device/amit_jboot)
+  SOC := mt7620a
+  IMAGE_SIZE := 16256k
+  DEVICE_VENDOR := D-Link
+  DEVICE_MODEL := DWR-961
+  DEVICE_VARIANT := A1
+  DLINK_ROM_ID := DLK6E3813001
+  DLINK_FAMILY_MEMBER := 0x6E38
+  DLINK_FIRMWARE_SIZE := 0xFE0000
+  DEVICE_PACKAGES += kmod-mt76x2 kmod-usb-net-qmi-wwan kmod-usb-serial-option \
+       uqmi
+endef
+TARGET_DEVICES += dlink_dwr-961-a1
+
 define Device/domywifi_dm202
   SOC := mt7620a
   IMAGE_SIZE := 16064k
index 1f53930311ee687ba559c04cf83fa129a6eb81ce..5f105bd834d141ccf6c5fec14c1f2d9ed5d0fe80 100644 (file)
@@ -81,6 +81,10 @@ dlink,dwr-960)
        ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x2e"
        ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x01"
        ;;
+dlink,dwr-961-a1)
+       ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x3c"
+       ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x02"
+       ;;
 domywifi,dm202|\
 domywifi,dm203|\
 domywifi,dw22d)
index 47bd02f3d1a30b012c7cbad9af4fd66646dca739..3ed72fa3ab2bb624147d9ff32c5fb8bc0a5cbf6c 100644 (file)
@@ -130,6 +130,13 @@ ramips_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "6@eth0"
                ;;
+       dlink,dwr-961-a1)
+               ucidef_add_switch "switch0" \
+                       "2:lan:1" "3:lan:2" "4:lan:3" "5:lan:4" "1:wan" "0@eth0"
+               ucidef_add_switch "switch1" \
+                       "5:lan" "6@eth0"
+               ucidef_add_switch_attr "switch1" "enable" "false"
+               ;;
        edimax,br-6478ac-v2|\
        lb-link,bl-w1200|\
        tplink,archer-c2-v1)
@@ -303,6 +310,7 @@ ramips_setup_macs()
        dlink,dwr-921-c1|\
        dlink,dwr-922-e2|\
        dlink,dwr-960|\
+       dlink,dwr-961-a1|\
        lava,lr-25g001)
                wan_mac=$(jboot_config_read -m -i $(find_mtd_part "config") -o 0xE000)
                lan_mac=$(macaddr_add "$wan_mac" 1)
index 969e9eba63aa0d95d9ef8dab84e2e30130a9d59e..81daca497898545fa87b341aa5342fe253e89b7e 100644 (file)
@@ -10,7 +10,8 @@ dlink,dir-510l)
        ucidef_add_gpio_switch "usb_enable1" "USB 1A enable" "12" "0"
        ucidef_add_gpio_switch "usb_enable05" "USB 0.5A enable" "13" "1"
        ;;
-dlink,dwr-960)
+dlink,dwr-960|\
+dlink,dwr-961-a1)
        ucidef_add_gpio_switch "power_mpcie" "mPCIe power" "0" "1"
        ;;
 head-weblink,hdrm200)
index 291f89f41df27809cce9aafd4e2604f8893b4403..2d1ac2e872d51860565cfcf8ce46485103048a4d 100644 (file)
@@ -29,6 +29,7 @@ case "$FIRMWARE" in
        dlink,dwr-921-c1|\
        dlink,dwr-922-e2|\
        dlink,dwr-960|\
+       dlink,dwr-961-a1|\
        lava,lr-25g001)
                wan_mac=$(jboot_config_read -m -i $(find_mtd_part "config") -o 0xE000)
                wifi_mac=$(macaddr_add "$wan_mac" 1)