ramips: add CUDY WR1000 support
authorDavide Fioravanti <pantanastyle@gmail.com>
Mon, 20 May 2019 03:20:37 +0000 (05:20 +0200)
committerChristian Lamparter <chunkeey@gmail.com>
Fri, 31 May 2019 08:36:36 +0000 (10:36 +0200)
Cudy WR1200 is an AC1200 AP with 3-port FE and 2 non-detachable antennas

Specifications:

MT7628 (580 MHz)
64 MB of RAM (DDR2)
8 MB of FLASH
2T2R 2.4 GHz (MT7628)
2T2R 5 GHz (MT7612E)
3x 10/100 Mbps Ethernet (2 LAN + 1 WAN)
2x external, non-detachable antennas (5dbi)
UART header on PCB (57600 8n1)
7x LED, 2x button

Known issues:
The Power LED is always ON, probably because it is connected
directly to power.

Flash instructions
------------------
Load the ...-factory.bin image via the stock web interface.

Openwrt upgrade instructions
----------------------------
Use the ...-sysupgrade.bin image for future upgrades.

Revert to stock FW
------------------
Warning! This tutorial will work only with the following OEM FW:
  WR1000_EU_92.122.2.4987.201806261618.bin
  WR1000_US_92.122.2.4987.201806261609.bin
If in the future these firmwares will not be available anymore,
you have to find the new XOR key.

1) Download the original FW from the Cudy website.

   (For example WR1000_EU_92.122.2.4987.201806261618.bin)

2) Remove the header.

   dd if="WR1000_EU_92.122.2.4987.201806261618.bin" of="WR1000_EU_92.122.2.4987.201806261618.bin.mod" skip=8 bs=64

3) XOR the new file with the region key.

   FOR EU: 7B76741E67594351555042461D625F4545514B1B03050208000603020803000D
   FOR US: 7B76741E675943555D5442461D625F454555431F03050208000603060007010C

   You can use OpenWrt's tools/firmware-utils/src/xorimage.c tool for this:

   xorimage -i WR1000..bin.mod -o stock-firmware.bin -x -p 7B767..

   Or, you can use this tool (CHANGE THE XOR KEY ACCORDINGLY!):
   https://gchq.github.io/CyberChef/#recipe=XOR(%7B'option':'Hex','string':''%7D,'',false)

4) Check the resulting decrypted image.

   Check if bytes from 0x20 to 0x3f are:
   4C 69 6E 75 78 20 4B 65 72 6E 65 6C 20 49 6D 61 67 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00

   Alternatively, you can use u-boot's tool dumpimage tool to check
   if the decryption was successful. It should look like:

   # dumpimage -l stock-firmware.bin
   Image Name:   Linux Kernel Image
   Created:      Tue Jun 26 10:24:54 2018
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    4406635 Bytes = 4303.35 KiB = 4.20 MiB
   Load Address: 80000000
   Entry Point:  8000c150

5) Flash it via forced firmware upgrade and don't "Keep Settings"

   CLI: sysupgrade -F -n stock-firmware.bin

   LuCI: make sure to click on the "Keep settings" checkbox
         to disable it. You'll need to do this !TWICE! because
         on the first try, LuCI will refuse the image and reset
 the "Keep settings" to enable. However a new
         "Force upgrade" checkbox will appear as well.
         Make sure to do this very carefully!

Signed-off-by: Davide Fioravanti <pantanastyle@gmail.com>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
[added wifi compatible, spiffed-up the returned to stock instructions]

target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/dts/WR1000.dts [new file with mode: 0644]
target/linux/ramips/image/mt76x8.mk

index ccbe53d770cfaade28d7faeefc3d04b2fe73dd53..24234dfddddc723ed8b9bb26f36823608f245d62 100755 (executable)
@@ -91,6 +91,11 @@ cf-wr800n)
        ucidef_set_led_netdev "lan" "lan" "$boardname:white:ethernet" eth0.1
        set_wifi_led "$boardname:white:wifi"
        ;;
+cudy,wr1000)
+       ucidef_set_led_switch "wan" "wan" "$boardname:blue:wan" "switch0" "0x10"
+       ucidef_set_led_switch "lan1" "lan1" "$boardname:blue:lan1" "switch0" "0x08"
+       ucidef_set_led_switch "lan2" "lan2" "$boardname:blue:lan2" "switch0" "0x04"
+       ;;
 d240)
        set_wifi_led "$boardname:blue:wifi"
        ;;
index dcc7b4a74708d6cfe75591baa4671d6c46bf10ca..48ba1ba6a63a5ddcb8d0250dc0b372d86cde57ac 100755 (executable)
@@ -298,6 +298,10 @@ ramips_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "4:lan" "6t@eth0"
                ;;
+       cudy,wr1000)
+               ucidef_add_switch "switch0" \
+                       "2:lan:2" "3:lan:1" "4:wan" "6@eth0"
+               ;;
        cy-swr1100)
                ucidef_add_switch "switch0" \
                        "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "9@eth0"
diff --git a/target/linux/ramips/dts/WR1000.dts b/target/linux/ramips/dts/WR1000.dts
new file mode 100644 (file)
index 0000000..ff0b9ba
--- /dev/null
@@ -0,0 +1,144 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "cudy,wr1000", "mediatek,mt7628an-soc";
+       model = "Cudy WR1000";
+
+       aliases {
+               led-boot = &led_wps;
+               led-failsafe = &led_wps;
+               led-upgrade = &led_wps;
+       };
+
+       keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <20>;
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps {
+                       label = "rfkill";
+                       gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               lan1 {
+                       label = "wr1000:blue:lan1";
+                       gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+               };
+
+               lan2 {
+                       label = "wr1000:blue:lan2";
+                       gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+               };
+
+               wan {
+                       label = "wr1000:blue:wan";
+                       gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan2g {
+                       label = "wr1000:blue:wlan2g";
+                       gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               led_wps: wps {
+                       label = "wr1000:blue:wps";
+                       gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0 0x30000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "u-boot-env";
+                               reg = <0x30000 0x10000>;
+                               read-only;
+                       };
+
+                       factory: partition@40000 {
+                               label = "factory";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x50000 0x7b0000>;
+                       };
+
+               };
+       };
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               gpio {
+                       ralink,group = "i2s", "refclk", "wdt", "p4led_an",
+                                       "p3led_an", "p2led_an", "wled_an";
+                       ralink,function = "gpio";
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x8000>;
+               ieee80211-freq-limit = <5000000 6000000>;
+
+               led {
+                       led-sources = <2>;
+                       led-active-low;
+               };
+       };
+};
+
+&wmac {
+       status = "okay";
+       ralink,mtd-eeprom = <&factory 0x4>;
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x2e>;
+       mediatek,portmap = "llllw";
+};
index 22d79bad39db0872eb7aaf2c02ff02706921c25e..ca279a7d613e9007e91fe9b383d003567e7e39c5 100644 (file)
@@ -27,6 +27,19 @@ define Device/alfa-network_awusfree1
 endef
 TARGET_DEVICES += alfa-network_awusfree1
 
+define Device/cudy_wr1000
+  DTS := WR1000
+  IMAGE_SIZE := $(ralink_default_fw_size_8M)
+  IMAGES += factory.bin
+  IMAGE/factory.bin := \
+        $$(sysupgrade_bin) | check-size $$$$(IMAGE_SIZE) | jcg-header 92.122
+  JCG_MAXSIZE := 8060928
+  DEVICE_TITLE := Cudy WR1000
+  DEVICE_PACKAGES := kmod-mt76x2
+  SUPPORTED_DEVICES += wr1000
+endef
+TARGET_DEVICES += cudy_wr1000
+
 define Device/tama_w06
   DTS := W06
   IMAGE_SIZE := 15040k