The Archer VR400 v1 is an EOL xDSL router with 802.11bgn/802.11ac wifi. Hardware: - SoC: Broadcom BCM63167 - CPU: dual core BMIPS4350 V8.0 @400MHz - RAM: 128 MB DDR2 - Flash: 16 MB SPI NOR - Ethernet LAN: 3x 100Mbit - Ethernet WAN: 1x GbE - Wifi 2.4 GHz: SoC integrated BCM435F 802.11b/g/n - WiFi 5 GHz: onboard BCM4352 802.11ac - USB: 1x 2.0 - Buttons: 3x, 1 reset - LEDs: 10x, all green
Installation via UART serial console and TFTP: - Configure a static IP on the computer e.g: 192.168.1.7 - Put the openwrt-factory.bin in a TFTP server in the computer - Power on the router with the serial console connected - While initializing the bootloader press any key to reach the CLI - At the CFE command line, execute the command: f 192.168.1.7:openwrt-factory.bin image - Wait until it finish. Back to OEM firmware: - Stop the bootloader with the serial console - Flash the OEM firmware using the CFE web UI: http://192.168.1.1 Unsupported: - xDSL - Wifi 2.4 GHz - WiFi 5 GHz, BCM4352, might eventually get basic support. Signed-off-by: Daniel González Cabanelas <dgcb...@gmail.com> Signed-off-by: Artemii Karavashkin <artem.sid....@gmail.com> --- Changes in v2: - added USB packages. Changes in v3: - no changes Changes in v4: - fixed linux node name partition in dts to match the offset .../bcm63xx/base-files/etc/board.d/01_leds | 4 + .../bcm63xx/base-files/etc/board.d/02_network | 4 + .../dts/bcm63167-tplink-archer-vr400-v1.dts | 177 ++++++++++++++++++ target/linux/bcm63xx/image/bcm63xx.mk | 14 ++ .../patches-5.10/519-board_bcm63268.patch | 52 ++++- ...31-board_bcm6348-bt-voyager-2500v-bb.patch | 2 +- .../patches-5.15/519-board_bcm63268.patch | 52 ++++- ...31-board_bcm6348-bt-voyager-2500v-bb.patch | 2 +- 8 files changed, 299 insertions(+), 8 deletions(-) create mode 100644 target/linux/bcm63xx/dts/bcm63167-tplink-archer-vr400-v1.dts diff --git a/target/linux/bcm63xx/base-files/etc/board.d/01_leds b/target/linux/bcm63xx/base-files/etc/board.d/01_leds index 75e8afef9d..92fb1bc408 100644 --- a/target/linux/bcm63xx/base-files/etc/board.d/01_leds +++ b/target/linux/bcm63xx/base-files/etc/board.d/01_leds @@ -94,6 +94,10 @@ sercomm,h500-s-vfes) telsey,cpva502plus) ucidef_set_led_netdev "lan" "LAN" "amber:link" "eth0" ;; +tplink,archer-vr400-v1) + ucidef_set_led_netdev "wan" "WAN" "green:wan" "eth0.2" + ucidef_set_led_usbdev "usb" "USB" "green:usb" "1-1" + ;; esac board_config_flush diff --git a/target/linux/bcm63xx/base-files/etc/board.d/02_network b/target/linux/bcm63xx/base-files/etc/board.d/02_network index b48aa57d2e..32547bf448 100644 --- a/target/linux/bcm63xx/base-files/etc/board.d/02_network +++ b/target/linux/bcm63xx/base-files/etc/board.d/02_network @@ -159,6 +159,10 @@ sky,sr102) ucidef_add_switch "switch0" \ "0:lan" "1:lan" "2:lan" "3:wan" "8t@eth0" ;; +tplink,archer-vr400-v1) + ucidef_add_switch "switch0" \ + "0:lan:3" "1:lan:2" "2:lan:1" "3:wan" "8t@eth0" + ;; *) ucidef_set_interfaces_lan_wan "eth1" "eth0" ;; diff --git a/target/linux/bcm63xx/dts/bcm63167-tplink-archer-vr400-v1.dts b/target/linux/bcm63xx/dts/bcm63167-tplink-archer-vr400-v1.dts new file mode 100644 index 0000000000..a3dbca7d78 --- /dev/null +++ b/target/linux/bcm63xx/dts/bcm63167-tplink-archer-vr400-v1.dts @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Device Tree file for TP-Link Archer VR400 v1 + * + * Copyright (C) 2022 Daniel González Cabanelas <dgcb...@gmail.com> + * Copyright (C) 2022 Artemii Karavashkin <artem.sid....@gmail.com> + */ + +#include "bcm63268.dtsi" + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> + +/ { + model = "TP-Link Archer VR400 v1"; + compatible = "tplink,archer-vr400-v1", "brcm,bcm63167", "brcm,bcm63268"; + + aliases { + led-boot = &led_power_green; + led-failsafe = &led_power_green; + led-running = &led_power_green; + led-upgrade = &led_power_green; + }; + + chosen { + bootargs = "rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200"; + stdout-path = "serial0:115200n8"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&pinctrl 32 GPIO_ACTIVE_LOW>; + linux,code = <KEY_RESTART>; + debounce-interval = <60>; + }; + + wps { + label = "wps"; + gpios = <&pinctrl 33 GPIO_ACTIVE_LOW>; + linux,code = <KEY_WPS_BUTTON>; + debounce-interval = <60>; + }; + + rfkill { + label = "rfkill"; + gpios = <&pinctrl 35 GPIO_ACTIVE_LOW>; + linux,code = <KEY_RFKILL>; + debounce-interval = <60>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + wifi2g_green { + label = "green:wifi2g"; + gpios = <&pinctrl 36 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&leds { + status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_leds>; + + usb_green { + reg = <1>; + active-low; + label = "green:usb"; + }; + + wan_green { + reg = <8>; + active-low; + label = "green:wan"; + }; + + ephy0_act { + reg = <9>; + brcm,hardware-controlled; + }; + + ephy1_act { + reg = <10>; + brcm,hardware-controlled; + }; + + ephy2_act { + reg = <11>; + brcm,hardware-controlled; + }; + + gphy0_act { + reg = <12>; + brcm,hardware-controlled; + }; + + wifi5g_green { + reg = <14>; + active-low; + label = "green:wifi5g"; + }; + + led_power_green: power_green { + reg = <18>; + active-low; + label = "green:power"; + default-state = "on"; + }; + + dsl_green { + reg = <20>; + active-low; + label = "green:dsl"; + }; + + wps_green { + reg = <22>; + active-low; + label = "green:wps"; + }; +}; + +&hsspi { + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + spi-max-frequency = <20000000>; + spi-tx-bus-width = <2>; + spi-rx-bus-width = <2>; + reg = <0>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + cfe@0 { + reg = <0x000000 0x020000>; + label = "cfe"; + read-only; + }; + + linux@20000 { + reg = <0x020000 0xfa0000>; + label = "linux"; + compatible = "tplink,firmware"; + }; + + nvram@fc0000 { + reg = <0xfc0000 0x040000>; + label = "nvram"; + }; + }; + }; +}; + +&pinctrl { + pinctrl_leds: leds { + function = "led"; + pins = "gpio1", "gpio8", + "gpio9", "gpio10", + "gpio11", "gpio12", + "gpio14", "gpio18", + "gpio20", "gpio22"; + }; +}; + +&uart0 { + status = "okay"; +}; diff --git a/target/linux/bcm63xx/image/bcm63xx.mk b/target/linux/bcm63xx/image/bcm63xx.mk index bbf4da6505..2fe4831ca5 100644 --- a/target/linux/bcm63xx/image/bcm63xx.mk +++ b/target/linux/bcm63xx/image/bcm63xx.mk @@ -1219,6 +1219,20 @@ endef TARGET_DEVICES += telsey_magic ### TP-Link ### +define Device/tplink_archer-vr400-v1 + $(Device/bcm63xx_tplink) + DEVICE_MODEL := Archer VR400 + DEVICE_VARIANT := v1 + TPLINK_HWID := 0x491dfa01 + TPLINK_HWREV := 0x70 + TPLINK_HWREVADD := 0x0 + TPLINK_FLASHLAYOUT := 16Mqca + CHIP_ID := 63167 + CFE_BIN_FILE := tplink,archer-vr400-v1/cfe63268.bin + DEVICE_PACKAGES := $(USB2_PACKAGES) +endef +TARGET_DEVICES += tplink_archer-vr400-v1 + define Device/tp-link_td-w8900gb $(Device/bcm63xx-legacy) DEVICE_VENDOR := TP-Link diff --git a/target/linux/bcm63xx/patches-5.10/519-board_bcm63268.patch b/target/linux/bcm63xx/patches-5.10/519-board_bcm63268.patch index 9693b4d3b0..1e49f17839 100644 --- a/target/linux/bcm63xx/patches-5.10/519-board_bcm63268.patch +++ b/target/linux/bcm63xx/patches-5.10/519-board_bcm63268.patch @@ -1,6 +1,6 @@ --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c -@@ -2697,6 +2697,273 @@ static struct board_info __initdata boar +@@ -2697,6 +2697,317 @@ static struct board_info __initdata boar #endif /* CONFIG_BCM63XX_CPU_6368 */ /* @@ -227,6 +227,50 @@ + }, +}; + ++static struct board_info __initdata board_VR400 = { ++ .name = "963167TP", ++ .expected_cpu_id = 0x63268, ++ ++ .has_pci = 1, ++ .has_ohci0 = 1, ++ .has_ehci0 = 1, ++ .num_usbh_ports = 1, ++ ++ .has_enetsw = 1, ++ .enetsw = { ++ .used_ports = { ++ [0] = { ++ .used = 1, ++ .phy_id = 1, ++ .name = "LAN3", ++ }, ++ [1] = { ++ .used = 1, ++ .phy_id = 2, ++ .name = "LAN2", ++ }, ++ [2] = { ++ .used = 1, ++ .phy_id = 3, ++ .name = "LAN1", ++ }, ++ [3] = { ++ .used = 1, ++ .phy_id = 4, ++ .name = "LAN4/WAN", ++ }, ++ }, ++ }, ++ ++ .use_fallback_sprom = 1, ++ .fallback_sprom = { ++ /* BCM4352 not supported */ ++ //.type = SPROM_BCM4352, ++ .pci_bus = 1, ++ .pci_dev = 0, ++ }, ++}; ++ +static struct board_info __initdata board_vw6339gu = { + .name = "VW6339GU", + .expected_cpu_id = 0x63268, @@ -274,7 +318,7 @@ * all boards */ static const struct board_info __initconst *bcm963xx_boards[] = { -@@ -2801,6 +3068,15 @@ static const struct board_info __initcon +@@ -2801,6 +3112,16 @@ static const struct board_info __initcon &board_VR3026e, &board_WAP5813n, #endif /* CONFIG_BCM63XX_CPU_6368 */ @@ -285,12 +329,13 @@ + &board_H500s, + &board_VG8050, + &board_VR3032u, ++ &board_VR400, + &board_vw6339gu, +#endif /* CONFIG_BCM63XX_CPU_63268 */ }; static struct of_device_id const bcm963xx_boards_dt[] = { -@@ -2918,6 +3194,14 @@ static struct of_device_id const bcm963x +@@ -2918,6 +3239,15 @@ static struct of_device_id const bcm963x { .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, }, #endif /* CONFIG_BCM63XX_CPU_6368 */ #ifdef CONFIG_BCM63XX_CPU_63268 @@ -302,6 +347,7 @@ + { .compatible = "sercomm,h500-s-lowi", .data = &board_H500s, }, + { .compatible = "sercomm,h500-s-vfes", .data = &board_H500s, }, + { .compatible = "sky,sr102", .data = &board_BSKYB_63168, }, ++ { .compatible = "tplink,archer-vr400-v1", .data = &board_VR400, }, #endif /* CONFIG_BCM63XX_CPU_63268 */ #endif /* CONFIG_OF */ { }, diff --git a/target/linux/bcm63xx/patches-5.10/531-board_bcm6348-bt-voyager-2500v-bb.patch b/target/linux/bcm63xx/patches-5.10/531-board_bcm6348-bt-voyager-2500v-bb.patch index 39728c45e4..b995b87626 100644 --- a/target/linux/bcm63xx/patches-5.10/531-board_bcm6348-bt-voyager-2500v-bb.patch +++ b/target/linux/bcm63xx/patches-5.10/531-board_bcm6348-bt-voyager-2500v-bb.patch @@ -1,6 +1,6 @@ --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c -@@ -3230,6 +3230,22 @@ void __init board_bcm963xx_init(void) +@@ -3276,6 +3276,22 @@ void __init board_bcm963xx_init(void) val &= MPI_CSBASE_BASE_MASK; } boot_addr = (u8 *)KSEG1ADDR(val); diff --git a/target/linux/bcm63xx/patches-5.15/519-board_bcm63268.patch b/target/linux/bcm63xx/patches-5.15/519-board_bcm63268.patch index 9693b4d3b0..1e49f17839 100644 --- a/target/linux/bcm63xx/patches-5.15/519-board_bcm63268.patch +++ b/target/linux/bcm63xx/patches-5.15/519-board_bcm63268.patch @@ -1,6 +1,6 @@ --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c -@@ -2697,6 +2697,273 @@ static struct board_info __initdata boar +@@ -2697,6 +2697,317 @@ static struct board_info __initdata boar #endif /* CONFIG_BCM63XX_CPU_6368 */ /* @@ -227,6 +227,50 @@ + }, +}; + ++static struct board_info __initdata board_VR400 = { ++ .name = "963167TP", ++ .expected_cpu_id = 0x63268, ++ ++ .has_pci = 1, ++ .has_ohci0 = 1, ++ .has_ehci0 = 1, ++ .num_usbh_ports = 1, ++ ++ .has_enetsw = 1, ++ .enetsw = { ++ .used_ports = { ++ [0] = { ++ .used = 1, ++ .phy_id = 1, ++ .name = "LAN3", ++ }, ++ [1] = { ++ .used = 1, ++ .phy_id = 2, ++ .name = "LAN2", ++ }, ++ [2] = { ++ .used = 1, ++ .phy_id = 3, ++ .name = "LAN1", ++ }, ++ [3] = { ++ .used = 1, ++ .phy_id = 4, ++ .name = "LAN4/WAN", ++ }, ++ }, ++ }, ++ ++ .use_fallback_sprom = 1, ++ .fallback_sprom = { ++ /* BCM4352 not supported */ ++ //.type = SPROM_BCM4352, ++ .pci_bus = 1, ++ .pci_dev = 0, ++ }, ++}; ++ +static struct board_info __initdata board_vw6339gu = { + .name = "VW6339GU", + .expected_cpu_id = 0x63268, @@ -274,7 +318,7 @@ * all boards */ static const struct board_info __initconst *bcm963xx_boards[] = { -@@ -2801,6 +3068,15 @@ static const struct board_info __initcon +@@ -2801,6 +3112,16 @@ static const struct board_info __initcon &board_VR3026e, &board_WAP5813n, #endif /* CONFIG_BCM63XX_CPU_6368 */ @@ -285,12 +329,13 @@ + &board_H500s, + &board_VG8050, + &board_VR3032u, ++ &board_VR400, + &board_vw6339gu, +#endif /* CONFIG_BCM63XX_CPU_63268 */ }; static struct of_device_id const bcm963xx_boards_dt[] = { -@@ -2918,6 +3194,14 @@ static struct of_device_id const bcm963x +@@ -2918,6 +3239,15 @@ static struct of_device_id const bcm963x { .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, }, #endif /* CONFIG_BCM63XX_CPU_6368 */ #ifdef CONFIG_BCM63XX_CPU_63268 @@ -302,6 +347,7 @@ + { .compatible = "sercomm,h500-s-lowi", .data = &board_H500s, }, + { .compatible = "sercomm,h500-s-vfes", .data = &board_H500s, }, + { .compatible = "sky,sr102", .data = &board_BSKYB_63168, }, ++ { .compatible = "tplink,archer-vr400-v1", .data = &board_VR400, }, #endif /* CONFIG_BCM63XX_CPU_63268 */ #endif /* CONFIG_OF */ { }, diff --git a/target/linux/bcm63xx/patches-5.15/531-board_bcm6348-bt-voyager-2500v-bb.patch b/target/linux/bcm63xx/patches-5.15/531-board_bcm6348-bt-voyager-2500v-bb.patch index 39728c45e4..b995b87626 100644 --- a/target/linux/bcm63xx/patches-5.15/531-board_bcm6348-bt-voyager-2500v-bb.patch +++ b/target/linux/bcm63xx/patches-5.15/531-board_bcm6348-bt-voyager-2500v-bb.patch @@ -1,6 +1,6 @@ --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c -@@ -3230,6 +3230,22 @@ void __init board_bcm963xx_init(void) +@@ -3276,6 +3276,22 @@ void __init board_bcm963xx_init(void) val &= MPI_CSBASE_BASE_MASK; } boot_addr = (u8 *)KSEG1ADDR(val); -- 2.38.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel