ath79: add support for TP-Link Archer C6 v2
authorGeorgi Vlaev <georgi.vlaev@gmail.com>
Fri, 28 Dec 2018 08:24:01 +0000 (10:24 +0200)
committerMathias Kresin <dev@kresin.me>
Mon, 31 Dec 2018 15:25:11 +0000 (16:25 +0100)
This patch adds support for TP-Link Archer C6 v2 (EU)

Hardware specification:
- SOC: Qualcomm QCA9563 @ 775MHz
- Flash: GigaDevice GD25Q64CSIG (8MiB)
- RAM: Zentel A3R1GE40JBF (128 MiB DDR2)
- Ethernet: Qualcomm QCA8337N: 4x 1Gbps LAN + 1x 1Gbps WAN
- Wireless:
  - 2.4GHz (bgn) QCA9563 integrated (3x3)
  - 5GHz (ac) Qualcomm QCA9886 (2x2)
- Button: 1x power, 1x reset, 1x wps
- LED: 6x LEDs: power, wlan2g, wlan5g, lan, wan, wps
- UART: There's no UART header on the board

Flash instructions:

Upload
openwrt-ath79-generic-tplink_archer-c6-v2-squashfs-factory.bin
via the router Web interface.

Flash instruction using tftp recovery:

1. Connect the computer to one of the LAN ports of the router
2. Set the computer IP to 192.168.0.66
3. Start a tftp server with the OpenWrt factory image in the
   tftp root directory renamed to ArcherC6v2_tp_recovery.bin.
4. Connect power cable to router, press and hold the reset
   button and turn the router on
5. Keep the reset button pressed until the WPS LED lights up
6. Wait ~150 seconds to complete flashing

According to the GPL source the non-EU variant has different
GPIOs assigned to some of the LEDs and buttons. The flash
layout might be different as well. The wikidevi entry for
Archer A6/C6 assumes they are identical.

Signed-off-by: Georgi Vlaev <georgi.vlaev@gmail.com>
src/tplink-safeloader.c

index 358247e6267858119dbba4965592fdf4d7bb2d3d..74ea6976348d5051ebaf18fc3e5fef5ebf3205cf 100644 (file)
@@ -548,6 +548,42 @@ static struct device_info boards[] = {
                .last_sysupgrade_partition = "file-system",
        },
 
+       /** Firmware layout for the C6v2 */
+       {
+               .id     = "ARCHER-C6-V2",
+               .vendor = "",
+               .support_list =
+                       "SupportList:\r\n"
+                       "{product_name:Archer C6,product_ver:2.0.0,special_id:45550000}\r\n"
+                       "{product_name:Archer C6,product_ver:2.0.0,special_id:52550000}\r\n"
+                       "{product_name:Archer C6,product_ver:2.0.0,special_id:4A500000}\r\n",
+               .support_trail = '\x00',
+               .soft_ver = "soft_ver:1.0.0\n",
+
+               .partitions = {
+                       {"fs-uboot", 0x00000, 0x20000},
+                       {"default-mac", 0x20000, 0x00200},
+                       {"pin", 0x20200, 0x00100},
+                       {"product-info", 0x20300, 0x00200},
+                       {"device-id", 0x20500, 0x0fb00},
+                       {"firmware", 0x30000, 0x7a9400},
+                       {"soft-version", 0x7d9400, 0x00100},
+                       {"extra-para", 0x7d9500, 0x00100},
+                       {"support-list", 0x7d9600, 0x00200},
+                       {"profile", 0x7d9800, 0x03000},
+                       {"default-config", 0x7dc800, 0x03000},
+                       {"partition-table", 0x7df800, 0x00800},
+                       {"user-config", 0x7e0000, 0x0c000},
+                       {"certificate", 0x7ec000, 0x04000},
+                       {"radio", 0x7f0000, 0x10000},
+                       {NULL, 0, 0}
+               },
+
+               .first_sysupgrade_partition = "os-image",
+               .last_sysupgrade_partition = "file-system",
+       },
+
+
        /** Firmware layout for the C60v1 */
        {
                .id     = "ARCHER-C60-V1",
@@ -1624,6 +1660,9 @@ static void build_image(const char *output,
        } else if (strcasecmp(info->id, "ARCHER-A7-V5") == 0 || strcasecmp(info->id, "ARCHER-C7-V4") == 0 || strcasecmp(info->id, "ARCHER-C7-V5") == 0) {
                const char mdat[11] = {0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0xca, 0x00, 0x01, 0x00, 0x00};
                parts[5] = put_data("extra-para", mdat, 11);
+       } else if (strcasecmp(info->id, "ARCHER-C6-V2") == 0) {
+               const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00};
+               parts[5] = put_data("extra-para", mdat, 11);
        }
 
        size_t len;