From be89c9eec4c28123b61ed020ad5b8b02905e73af Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Fri, 18 Feb 2022 00:23:45 +0100 Subject: [PATCH] ramips: mt7620: Add support for D-Link DWR-961 A1 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 --- .../ramips/dts/mt7620a_dlink_dwr-960.dts | 174 +---------------- .../ramips/dts/mt7620a_dlink_dwr-961-a1.dts | 62 ++++++ .../ramips/dts/mt7620a_dlink_dwr-96x.dtsi | 178 ++++++++++++++++++ target/linux/ramips/image/mt7620.mk | 15 ++ .../mt7620/base-files/etc/board.d/01_leds | 4 + .../mt7620/base-files/etc/board.d/02_network | 8 + .../base-files/etc/board.d/03_gpio_switches | 3 +- .../etc/hotplug.d/firmware/10-rt2x00-eeprom | 1 + 8 files changed, 273 insertions(+), 172 deletions(-) create mode 100644 target/linux/ramips/dts/mt7620a_dlink_dwr-961-a1.dts create mode 100644 target/linux/ramips/dts/mt7620a_dlink_dwr-96x.dtsi diff --git a/target/linux/ramips/dts/mt7620a_dlink_dwr-960.dts b/target/linux/ramips/dts/mt7620a_dlink_dwr-960.dts index 77b94a1190a..3de9533edc7 100644 --- a/target/linux/ramips/dts/mt7620a_dlink_dwr-960.dts +++ b/target/linux/ramips/dts/mt7620a_dlink_dwr-960.dts @@ -1,93 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT -#include "mt7620a.dtsi" - -#include -#include -#include +#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 = ; - }; - - wps { - label = "wps"; - gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; - linux,code = ; - }; - }; - - 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"; - }; - }; }; ðernet { @@ -112,91 +29,6 @@ }; }; -&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 = ; - 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 index 00000000000..7eae6666688 --- /dev/null +++ b/target/linux/ramips/dts/mt7620a_dlink_dwr-961-a1.dts @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * D-Link DWR-961 A1 Board Description + * Copyright 2022 Pawel Dembicki + */ +#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>; + }; + }; +}; + +ðernet { + 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 index 00000000000..a5fd705eba9 --- /dev/null +++ b/target/linux/ramips/dts/mt7620a_dlink_dwr-96x.dtsi @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * D-Link DWR-96x Common Board Description + * Copyright 2022 Pawel Dembicki + */ +#include "mt7620a.dtsi" + +#include +#include +#include + +/ { + 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 = ; + }; + + wps { + label = "wps"; + gpios = <&gpio0 2 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + + }; + + 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 = ; + 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"; + }; +}; diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk index 5efb4e5e175..49d25b947f6 100644 --- a/target/linux/ramips/image/mt7620.mk +++ b/target/linux/ramips/image/mt7620.mk @@ -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 diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds index 1f53930311e..5f105bd834d 100644 --- a/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds +++ b/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds @@ -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) diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network index 47bd02f3d1a..3ed72fa3ab2 100644 --- a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network +++ b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network @@ -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) diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/03_gpio_switches b/target/linux/ramips/mt7620/base-files/etc/board.d/03_gpio_switches index 969e9eba63a..81daca49789 100644 --- a/target/linux/ramips/mt7620/base-files/etc/board.d/03_gpio_switches +++ b/target/linux/ramips/mt7620/base-files/etc/board.d/03_gpio_switches @@ -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) diff --git a/target/linux/ramips/mt7620/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom b/target/linux/ramips/mt7620/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom index 291f89f41df..2d1ac2e872d 100644 --- a/target/linux/ramips/mt7620/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom +++ b/target/linux/ramips/mt7620/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom @@ -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) -- 2.30.2