aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Böhler <dev@aboehler.at>2019-12-19 10:29:14 +0100
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>2019-12-31 13:23:55 +0100
commita3010a7f8dbe04972efef16ed7d81b5fd72e9a94 (patch)
tree24ac0051d53093a17d474e79cc3e215fa1134e3c
parent7a3c9e557a61d6687aaea42ba82d249db166fb4e (diff)
downloadupstream-a3010a7f8dbe04972efef16ed7d81b5fd72e9a94.tar.gz
upstream-a3010a7f8dbe04972efef16ed7d81b5fd72e9a94.tar.bz2
upstream-a3010a7f8dbe04972efef16ed7d81b5fd72e9a94.zip
ramips: add support for TP-Link RE200 v1
TP-Link RE200 v1 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7620A+MT7610EN. Specifications -------------- - MediaTek MT7620A (580 Mhz) - 64 MB of RAM - 8 MB of FLASH - 2T2R 2.4 GHz and 1T1R 5 GHz - 1x 10/100 Mbps Ethernet - UART header on PCB (57600 8n1) - 8x LED (GPIO-controlled; only 6 supported), 2x button There are 2.4G and 5G LEDs in red and green which are controlled separately. The 5G LED is currently not supported, since the GPIOs couldn't be determined. Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. However, the OEM firmware upgrade file is required and a tool to fix the MD5 sum of the header. This procedure overwrites U-Boot and there is not failsafe / recovery mode present! To prepare an image, you need to take the header and U-Boot (i.e. 0x200 + 0x20000 bytes) from an OEM firmware file and attach the factory image to it. Then fix the header MD5Sum1. Serial console -------------- Opening the case is quite hard, since it is welded together. Rename the OpenWrt factory image to "test.bin", then plug in the device and quickly press "2" to enter flash mode (no line feed). Follow the prompts until OpenWrt is installed. Unfortunately, this devices does not offer a recovery mode or a tftp installation method. If the web interface upgrade fails, you have to open your device and attach serial console. Since the web upgrade overwrites the boot loader, you might also brick your device. Additional notes ---------------- MAC address assignment is based on stock-firmware. For me, the device assigns the MAC on the label to Ethernet and the 2.4G WiFi, while the 5G WiFi has a separate MAC with +2. *:88 Ethernet/2.4G label, uboot 0x1fc00, userconfig 0x0158 *:89 unused userconfig 0x0160 *:8A 5G not present in flash This seems to be the first ramips device with a TP-Link v1 header. The original firmware has the string "EU" embedded, there might be some region- checking going on during the firmware upgrade process. The original firmware also contains U-Boot and thus overwrites the boot loader during upgrade. In order to flash back to stock, the first header and U-Boot need to be stripped from the original firmware. Signed-off-by: Andreas Böhler <dev@aboehler.at>
-rw-r--r--target/linux/ramips/dts/mt7620a_tplink_re200-v1.dts158
-rw-r--r--target/linux/ramips/image/mt7620.mk36
-rwxr-xr-xtarget/linux/ramips/mt7620/base-files/etc/board.d/01_leds3
-rwxr-xr-xtarget/linux/ramips/mt7620/base-files/etc/board.d/02_network1
-rw-r--r--tools/firmware-utils/src/mktplinkfw.c6
5 files changed, 204 insertions, 0 deletions
diff --git a/target/linux/ramips/dts/mt7620a_tplink_re200-v1.dts b/target/linux/ramips/dts/mt7620a_tplink_re200-v1.dts
new file mode 100644
index 0000000000..39fdc0af53
--- /dev/null
+++ b/target/linux/ramips/dts/mt7620a_tplink_re200-v1.dts
@@ -0,0 +1,158 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7620a.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+ compatible = "tplink,re200-v1", "ralink,mt7620a-soc";
+ model = "TP-Link RE200 v1";
+
+ aliases {
+ led-boot = &led_power;
+ led-failsafe = &led_power;
+ led-running = &led_power;
+ led-upgrade = &led_power;
+ label-mac-device = &ethernet;
+ };
+
+ chosen {
+ bootargs = "console=ttyS0,57600n8";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_power: power {
+ label = "re200-v1:green:power";
+ gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
+ };
+
+ lan {
+ label = "re200-v1:green:lan";
+ gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
+ };
+
+ wlan {
+ label = "re200-v1:green:wlan";
+ gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
+ };
+
+ qss {
+ label = "re200-v1:green:qss";
+ gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
+ };
+
+ wlan2g_red {
+ label = "re200-v1:red:wlan2g";
+ gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
+ };
+
+ wlan2g_green {
+ label = "re200-v1:green:wlan2g";
+ gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy1radio";
+ };
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+
+ wps {
+ label = "wps";
+ gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_WPS_BUTTON>;
+ };
+ };
+};
+
+
+&state_default {
+ gpio {
+ ralink,group = "i2c", "uartf", "ephy", "wled", "rgmii1", "spi refclk";
+ ralink,function = "gpio";
+ };
+};
+
+&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>;
+
+ uboot: partition@0 {
+ label = "u-boot";
+ reg = <0x0 0x20000>;
+ read-only;
+ };
+
+ partition@20000 {
+ compatible = "tplink,firmware";
+ label = "firmware";
+ reg = <0x20000 0x7c0000>;
+ };
+
+ partition@7e0000 {
+ label = "userconfig";
+ reg = <0x7e0000 0x10000>;
+ read-only;
+ };
+
+ radio: partition@7f0000 {
+ label = "radio";
+ reg = <0x7f0000 0x10000>;
+ read-only;
+ };
+ };
+ };
+};
+
+&gpio1 {
+ status = "okay";
+};
+
+&gpio2 {
+ status = "okay";
+};
+
+&gpio3 {
+ status = "okay";
+};
+
+&ethernet {
+ mtd-mac-address = <&uboot 0x1fc00>;
+};
+
+&wmac {
+ ralink,mtd-eeprom = <&radio 0x0>;
+ mtd-mac-address = <&uboot 0x1fc00>;
+};
+
+&pcie {
+ status = "okay";
+};
+
+&pcie0 {
+ mt76@0,0 {
+ reg = <0x0000 0 0 0 0>;
+ mediatek,mtd-eeprom = <&radio 0x8000>;
+ mtd-mac-address = <&uboot 0x1fc00>;
+ mtd-mac-address-increment = <2>;
+ ieee80211-freq-limit = <5000000 6000000>;
+ };
+};
diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk
index 291495ec0d..cbf35f804a 100644
--- a/target/linux/ramips/image/mt7620.mk
+++ b/target/linux/ramips/image/mt7620.mk
@@ -16,6 +16,23 @@ define Build/elecom-header
--owner=0 --group=0 -f $@ -C $(KDIR) v_0.0.0.bin v_0.0.0.md5
endef
+# combine kernel and rootfs into one image
+# mktplinkfw <type> <optional extra arguments to mktplinkfw binary>
+# <type> is "sysupgrade" or "factory"
+#
+# -a align the rootfs start on an <align> bytes boundary
+# -j add jffs2 end-of-filesystem markers
+# -s strip padding from end of the image
+# -X reserve <size> bytes in the firmware image (hexval prefixed with 0x)
+define Build/mktplinkfw
+ -$(STAGING_DIR_HOST)/bin/mktplinkfw \
+ -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) \
+ -N OpenWrt -V $(REVISION) -m $(TPLINK_HEADER_VERSION) \
+ -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new -j -X 0x40000 -a 0x4 \
+ $(wordlist 2,$(words $(1)),$(1)) \
+ $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
+endef
+
define Device/aigale_ai-br100
SOC := mt7620a
IMAGE_SIZE := 7936k
@@ -938,6 +955,25 @@ define Device/tplink_archer-mr200
endef
TARGET_DEVICES += tplink_archer-mr200
+define Device/tplink_re200-v1
+ SOC := mt7620a
+ DEVICE_VENDOR := TP-Link
+ DEVICE_MODEL := RE200
+ DEVICE_VARIANT := v1
+ DEVICE_PACKAGES := kmod-mt76x0e
+ IMAGES += factory.bin
+ IMAGE/sysupgrade.bin := mktplinkfw sysupgrade -e -O
+ IMAGE/factory.bin := mktplinkfw factory -e -O
+ IMAGE_SIZE := 7936k
+ KERNEL := $(KERNEL_DTB)
+ KERNEL_INITRAMFS := $(KERNEL_DTB) | tplink-v1-header -e -O
+ TPLINK_HWID := 0x02000001
+ TPLINK_HWREV := 0x1
+ TPLINK_HEADER_VERSION := 1
+ TPLINK_FLASHLAYOUT := 8Mmtk
+endef
+TARGET_DEVICES += tplink_re200-v1
+
define Device/vonets_var11n-300
SOC := mt7620n
IMAGE_SIZE := 3776k
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 d88fdfb043..77a98fa095 100755
--- a/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt7620/base-files/etc/board.d/01_leds
@@ -198,6 +198,9 @@ tplink,archer-mr200)
ucidef_set_led_netdev "wan" "wan" "$boardname:white:wan" "usb0"
set_wifi_led "$boardname:white:wlan"
;;
+tplink,re200-v1)
+ ucidef_set_led_netdev "lan" "lan" "$boardname:green:lan" "eth0"
+ ;;
youku,yk1)
set_wifi_led "$boardname:blue:air"
ucidef_set_led_switch "wan" "wan" "$boardname:blue:wan" "switch0" "0x10"
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 852336f811..7397ddcc2c 100755
--- a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network
@@ -50,6 +50,7 @@ ramips_setup_interfaces()
planex,mzk-ex300np|\
planex,mzk-ex750np|\
ravpower,wd03|\
+ tplink,re200-v1|\
sercomm,na930)
ucidef_set_interface_lan "eth0"
;;
diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
index ce2acc20c9..ed785b48e5 100644
--- a/tools/firmware-utils/src/mktplinkfw.c
+++ b/tools/firmware-utils/src/mktplinkfw.c
@@ -145,6 +145,12 @@ static struct flash_layout layouts[] = {
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
+ .id = "8Mmtk",
+ .fw_max_len = 0x7c0000,
+ .kernel_la = 0x80000000,
+ .kernel_ep = 0x8000c310,
+ .rootfs_ofs = 0x100000,
+ }, {
.id = "16M",
.fw_max_len = 0xf80000,
.kernel_la = 0x80060000,