ramips: add support for D-Link DIR-853-R1

This PR adds support for router D-Link DIR-853-R1

Specifications:

    SoC: MT7621AT
    RAM: 128MB
    Flash: 16MB SPI
    WiFi: MT7615DN (2.4GHz+5Ghz) with DBDC (This mode allows this
      single chip act as an 2x2 11n radio and an 2x2 11ac radio at the
      same time)
    LAN: 5x1000M
    LEDs Power Blue+Orange,Wan Blue+Orange,WPS Blue,"2.4G"Blue, "5G" Blue
    USB Blue
    Buttons Reset,WPS, Wifi

MAC addresses:

|Interface   |        MAC      |    Factory  |Comment
|------------|-----------------|-------------|----------------
|WAN sticker |C4:XX:XX:6E:XX:2A|             |Sticker
|LAN         |C4:XX:XX:6E:XX:2B|             |
|Wifi (5g)   |C4:XX:XX:6E:XX:2C|0x4          |
|Wifi (2.4g) |C6:XX:XX:7E:XX:2C|             |
|            |                 |             |
|            |C4:XX:XX:6E:XX:2E|0x8004 0xe000|
|            |C4:XX:XX:6E:XX:2F|0xe006       |

The increment of the 4th byte for the 2.4g address appears to vary.
Reported cases:

       5g                 2.4g         increment
 C4:XX:XX:6E:XX:2C  C6:XX:XX:7E:XX:2C  0x10
 f4:XX:XX:16:XX:32  f6:XX:XX:36:XX:32  0x20
 F4:XX:XX:A6:XX:E3  F6:XX:XX:B6:XX:E3  0x10

Since increment is inconsistent and there is no obvious pattern
in swapping bytes, and the 2.4g address has local bit set anyway,
it seems safer to use the LAN address with flipped byte here in
order to prevent collisions between OpenWrt devices and OEM devices
for this interface. This way we at least use an address as base
that is definitely owned by the device at hand.

Flashing instruction:

The Dlink "Emergency Room"

Connect your client computer to LAN1 of the device
Set your client IP address manually to 192.168.0.101 / 255.255.255.0.
Then, power down the router, press and hold the reset button, then
re-plug it. Keep the reset button pressed until the internet LED stops
flashing
Call the recovery page or tftp for the device at http://192.168.0.1
Use the provided emergency web GUI to upload and flash a new firmware to
the device.

Signed-off-by: Stas Fiduchi <fiduchi@protonmail.com>
[commit title/message improvements, use correct label MAC address,
 calculate MAC addresses based on 0x4, minor DTS style fixes, add
 uart2 to state_default, remove factory image, add 2.4g MAC address,
 use partition DTSI, add macaddr comment in DTS]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Stas Fiduchi 2021-06-12 11:35:27 +03:00 committed by Adrian Schmutzler
parent cce8d16bf1
commit b8168f4716
4 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,144 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "mt7621.dtsi"
#include "mt7621_dlink_flash-16m-r1.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "dlink,dir-853-r1", "mediatek,mt7621-soc";
model = "D-Link DIR-853 R1";
aliases {
label-mac-device = &wan;
led-boot = &led_power_orange;
led-failsafe = &led_power_blue;
led-running = &led_power_blue;
led-upgrade = &led_net_orange;
};
leds {
compatible = "gpio-leds";
led_power_orange: power_orange {
label = "orange:power";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
};
led_power_blue: power_blue {
label = "blue:power";
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
};
led_net_orange: net_orange {
label = "orange:net";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
net_blue {
label = "blue:net";
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
usb_blue {
label = "blue:usb";
gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
trigger-sources = <&xhci_ehci_port1>;
linux,default-trigger = "usbport";
};
wlan2g {
label = "blue:wlan2g";
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0radio";
};
wlan5g {
label = "blue:wlan5g";
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1radio";
};
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
wifi {
label = "wifi";
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RFKILL>;
};
};
};
&pcie {
status = "okay";
};
&pcie0 {
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x0>;
/* 5 GHz (phy1) does not take the address from calibration data,
but setting it manually here works */
mtd-mac-address = <&factory 0x4>;
};
};
&gmac0 {
mtd-mac-address = <&factory 0x4>;
mtd-mac-address-increment = <(-1)>;
};
&switch0 {
ports {
port@0 {
status = "okay";
label = "lan4";
};
port@1 {
status = "okay";
label = "lan3";
};
port@2 {
status = "okay";
label = "lan2";
};
port@3 {
status = "okay";
label = "lan1";
};
wan: port@4 {
status = "okay";
label = "wan";
mtd-mac-address = <&factory 0x4>;
mtd-mac-address-increment = <(-2)>;
};
};
};
&state_default {
gpio {
groups = "i2c", "uart3", "uart2", "jtag", "wdt";
function = "gpio";
};
};

View File

@ -342,6 +342,14 @@ define Device/dlink_dir-2660-a1
endef
TARGET_DEVICES += dlink_dir-2660-a1
define Device/dlink_dir-853-r1
$(Device/dlink_dir-8xx-r1)
DEVICE_MODEL := DIR-853
DEVICE_VARIANT := R1
DEVICE_PACKAGES += kmod-usb3 kmod-usb-ledtrig-usbport
endef
TARGET_DEVICES += dlink_dir-853-r1
define Device/dlink_dir-860l-b1
$(Device/dsa-migration)
$(Device/seama)

View File

@ -23,6 +23,9 @@ d-team,newifi-d2)
ucidef_set_led_netdev "wlan2g" "WiFi 2.4GHz" "blue:wlan2g" "wlan0"
ucidef_set_led_netdev "wlan5g" "WiFi 5GHz" "blue:wlan5g" "wlan1"
;;
dlink,dir-853-r1)
ucidef_set_led_netdev "internet" "internet" "blue:net" "wan"
;;
d-team,pbr-m1|\
gehua,ghl-r-001|\
jcg,y2|\

View File

@ -10,6 +10,12 @@ PHYNBR=${DEVPATH##*/phy}
board=$(board_name)
case "$board" in
dlink,dir-853-r1)
[ "$PHYNBR" = "0" ] && \
base_mac=$(mtd_get_mac_binary factory 0x4)
base_mac=$(macaddr_add "$base_mac" -1)
macaddr_setbit_la "$base_mac" > /sys${DEVPATH}/macaddress
;;
glinet,gl-mt1300)
[ "$PHYNBR" = "1" ] && \
macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress