Skip to content

Commit

Permalink
mediatek: add support for Routerich AX3000
Browse files Browse the repository at this point in the history
Routerich AX3000 is a wireless WiFi 6 router.

Specification:
    - SoC           : MediaTek MT7981BA dual-core ARM Cortex-A53 1.3 GHz
    - RAM           : DDR3 256 MiB (ESMT M15T2G16128A)
    - Flash         : SPI-NAND 128 MiB (ESMT F50L1G41LB)
    - WLAN          : MediaTek MT7976CN dual-band WiFi 6
       - 2.4 GHz    : b/g/n/ax, MIMO 2x2
       - 5 GHz      : a/n/ac/ax, MIMO 2x2
    - Ethernet      : 10/100/1000 Mbps x4 (MediaTek MT7531AE)
    - USB           : 1x 2.0
    - UART          : through-hole on PCB
      - [J500] GND, TX, RX, 3.3V (115200n8)
    - Button        : Mesh, Reset
    - LED           : Power, WiFi (2.4g and 5g), MESH, LAN1-3, WAN
    - Power         : 12 VDC, 1.5 A

Flash instruction:
    Flash OpenWrt 'sysupgrade.bin' using web-interface (without keeping
    settings)

Return to stock:
    Do sysupgrade with stock firmware image (without keeping settings)

Recovery:
    Connect uart, use u-boot menu to flash stock firmware image or boot
    OpenWrt initramfs image.

MAC addresses:
+---------+-------------------+-----------+
|         | MAC               | Algorithm |
+---------+-------------------+-----------+
| WAN     | 24:0f:5e:xx:xx:b4 | label     |
| LAN     | 24:0f:5e:xx:xx:b5 | label+1   |
| WLAN 2g | 24:0f:5e:xx:xx:b6 | label+2   |
| WLAN 5g | 24:0f:5e:xx:xx:b7 | label+3   |
+---------+-------------------+-----------+
The label MAC was found in 'Factory', 0x24

Co-authored-by: Mikhail Zhilkin <[email protected]>
Signed-off-by: Maximilian Weinmann <[email protected]>
  • Loading branch information
MaxS0niX and csharper2005 committed Oct 28, 2023
1 parent b595670 commit 4300391
Show file tree
Hide file tree
Showing 6 changed files with 379 additions and 2 deletions.
3 changes: 2 additions & 1 deletion package/boot/uboot-envtools/files/mediatek_filogic
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ glinet,gl-mt6000)
local envdev=$(find_mmc_part "u-boot-env")
ubootenv_add_uci_config "$envdev" "0x0" "0x80000"
;;
mercusys,mr90x-v1)
mercusys,mr90x-v1|\
routerich,ax3000)
local envdev=/dev/mtd$(find_mtd_index "u-boot-env")
ubootenv_add_uci_config "$envdev" "0x0" "0x20000" "0x20000" "1"
;;
Expand Down
351 changes: 351 additions & 0 deletions target/linux/mediatek/dts/mt7981b-routerich-ax3000.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,351 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/dts-v1/;
#include "mt7981.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>

/ {
model = "Routerich AX3000";
compatible = "routerich,ax3000", "mediatek,mt7981";

aliases {
label-mac-device = &wan;

led-boot = &led_status_blue;
led-failsafe = &led_status_blue;
led-running = &led_status_blue;
led-upgrade = &led_status_blue;

serial0 = &uart0;
};

chosen {
stdout-path = "serial0:115200n8";
};

memory {
reg = <0 0x40000000 0 0x10000000>;
};

gpio-keys {
compatible = "gpio-keys";

mesh {
label = "mesh";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&pio 0 GPIO_ACTIVE_LOW>;
};

reset {
label = "reset";
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
};

leds {
compatible = "gpio-leds";

led-0 {
label = "amber:wifi_5g";
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_WLAN;
function-enumerator = <0>;
gpios = <&pio 5 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1radio";
};

led-1 {
label = "amber:wan";
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_WAN;
function-enumerator = <0>;
gpios = <&pio 6 GPIO_ACTIVE_HIGH>;
};

led_status_blue: led-2 {
label = "blue:status";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
function-enumerator = <0>;
gpios = <&pio 7 GPIO_ACTIVE_LOW>;
panic-indicator;
};

led-3 {
label = "blue:lan1";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
};

led-4 {
label = "blue:lan2";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
};

led-5 {
label = "blue:lan3";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_LAN;
function-enumerator = <3>;
gpios = <&pio 11 GPIO_ACTIVE_LOW>;
};

led-6 {
label = "blue:wan";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WAN;
function-enumerator = <1>;
gpios = <&pio 12 GPIO_ACTIVE_LOW>;
};

led-7 {
label = "blue:wifi_2g";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
function-enumerator = <1>;
gpios = <&pio 34 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0radio";
};

led-8 {
label = "blue:mesh";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_WLAN;
function-enumerator = <2>;
gpios = <&pio 35 GPIO_ACTIVE_LOW>;
};
};
};

&eth {
status = "okay";

gmac0: mac@0 {
compatible = "mediatek,eth-mac";
reg = <0>;
phy-mode = "2500base-x";

nvmem-cells = <&macaddr_factory_2a>;
nvmem-cell-names = "mac-address";

fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
};

&mdio_bus {
switch: switch@0 {
compatible = "mediatek,mt7531";
reg = <31>;
reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&pio>;
interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
};
};

&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_flash_pins>;
status = "okay";

spi_nand@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "spi-nand";
reg = <0>;

spi-max-frequency = <52000000>;

spi-cal-enable;
spi-cal-mode = "read-data";
spi-cal-datalen = <7>;
spi-cal-data = /bits/ 8 <0x53 0x50 0x49 0x4E 0x41 0x4E 0x44>;
spi-cal-addrlen = <5>;
spi-cal-addr = /bits/ 32 <0x0 0x0 0x0 0x0 0x0>;

spi-tx-buswidth = <4>;
spi-rx-buswidth = <4>;
mediatek,nmbm;
mediatek,bmt-max-ratio = <1>;
mediatek,bmt-max-reserved-blocks = <64>;

mediatek,bmt-remap-range =
<0x0 0x580000>,
<0x6580000 0x6680000>;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0_all {
label = "spi0.0";
reg = <0x0 0x8000000>;
read-only;
};

partition@0 {
label = "BL2";
reg = <0x0 0x100000>;
read-only;
};

partition@100000 {
label = "u-boot-env";
reg = <0x100000 0x80000>;
};

factory: partition@180000 {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

label = "Factory";
reg = <0x180000 0x200000>;
read-only;

eeprom_factory_0: eeprom@0 {
reg = <0x0 0xa0000>;
};

macaddr_factory_24: macaddr@24 {
reg = <0x24 0x6>;
};

macaddr_factory_2a: macaddr@2a {
reg = <0x2a 0x6>;
};
};

partition@380000 {
label = "FIP";
reg = <0x380000 0x200000>;
read-only;
};

partition@580000 {
label = "ubi";
reg = <0x580000 0x4000000>;
};

partition@4580000 {
label = "firmware_backup";
reg = <0x4580000 0x2000000>;
read-only;
};

partition@6580000 {
label = "zrsave";
reg = <0x6580000 0x100000>;
read-only;
};

partition@6680000 {
label = "config2";
reg = <0x6680000 0x100000>;
read-only;
};
};
};
};

&switch {
ports {
#address-cells = <1>;
#size-cells = <0>;

port@1 {
reg = <0>;
label = "lan1";
};

port@2 {
reg = <2>;
label = "lan2";
};

port@3 {
reg = <3>;
label = "lan3";
};

wan: port@4 {
reg = <4>;
label = "wan";

nvmem-cells = <&macaddr_factory_24>;
nvmem-cell-names = "mac-address";
};

port@6 {
reg = <6>;
ethernet = <&gmac0>;
phy-mode = "2500base-x";

fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
};
};

&pio {
spi0_flash_pins: spi0-pins {
mux {
function = "spi";
groups = "spi0", "spi0_wp_hold";
};

conf-pu {
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
drive-strength = <8>;
mediatek,pull-up-adv = <0>; /* bias-disable */
};

conf-pd {
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
drive-strength = <8>;
mediatek,pull-up-adv = <0>; /* bias-disable */
};
};
};

&uart0 {
status = "okay";
};

&usb_phy {
status = "okay";
};

&watchdog {
status = "okay";
};

&wifi {
status = "okay";

nvmem-cells = <&eeprom_factory_0>;
nvmem-cell-names = "eeprom";
};

&xhci {
status = "okay";

mediatek,u3p-dis-msk = <0x1>;
};
7 changes: 7 additions & 0 deletions target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ mercusys,mr90x-v1)
ucidef_set_led_netdev "lan2" "lan2" "green:lan2" "lan2" "link tx rx"
ucidef_set_led_netdev "wan" "wan" "green:wan" "eth1" "link tx rx"
;;
routerich,ax3000)
ucidef_set_led_netdev "lan1" "lan1" "blue:lan1" "lan1" "link tx rx"
ucidef_set_led_netdev "lan2" "lan2" "blue:lan2" "lan2" "link tx rx"
ucidef_set_led_netdev "lan3" "lan3" "blue:lan3" "lan3" "link tx rx"
ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan" "link tx rx"
ucidef_set_led_netdev "wan-off" "wan-off" "amber:wan" "wan" "link"
;;
netgear,wax220)
ucidef_set_led_netdev "eth0" "LAN" "green:lan" "eth0"
ucidef_set_led_netdev "wlan2g" "WLAN2G" "blue:wlan2g" "phy0-ap0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ mediatek_setup_interfaces()
bananapi,bpi-r3)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 sfp2" "eth1 wan"
;;
cudy,wr3000-v1)
cudy,wr3000-v1|\
routerich,ax3000)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
;;
glinet,gl-mt3000)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ case "$board" in
tplink,tl-xdr6088)
[ "$PHYNBR" = "0" ] && get_mac_label > /sys${DEVPATH}/macaddress
;;
routerich,ax3000|\
zyxel,ex5601-t0)
addr=$(mtd_get_mac_binary "Factory" 0x4)
[ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
Expand Down
Loading

0 comments on commit 4300391

Please sign in to comment.