openwrt/tools/firmware-utils/src/tplink-safeloader.c

3549 lines
108 KiB
C
Raw Normal View History

/*
Copyright (c) 2014, Matthias Schiffer <mschiffer@universe-factory.net>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
tplink-safeloader
Image generation tool for the TP-LINK SafeLoader as seen on
TP-LINK Pharos devices (CPE210/220/510/520)
*/
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include "md5.h"
#define ALIGN(x,a) ({ typeof(a) __a = (a); (((x) + __a - 1) & ~(__a - 1)); })
#define MAX_PARTITIONS 32
/** An image partition table entry */
struct image_partition_entry {
const char *name;
size_t size;
uint8_t *data;
};
/** A flash partition table entry */
struct flash_partition_entry {
char *name;
uint32_t base;
uint32_t size;
};
/** Partition trailing padding definitions
* Values 0x00 to 0xff are reserved to indicate the padding value
* Values from 0x100 are reserved to indicate other behaviour */
enum partition_trail_value {
PART_TRAIL_00 = 0x00,
PART_TRAIL_FF = 0xff,
PART_TRAIL_MAX = 0xff,
PART_TRAIL_NONE = 0x100
};
/** Firmware layout description */
struct device_info {
const char *id;
const char *vendor;
const char *support_list;
enum partition_trail_value part_trail;
const char *soft_ver;
firmware-utils/tplink-safeloader: add compat level TP-Link has introduced a compatibility level to prevent certain downgrades. This information is stored in the soft-version partition, changing the data length from 0xc to 0x10. The compatibility level doesn't change frequently. For example, it has the following values for the EAP245v3 (released 2018-Q4): * FW v2.2.0 (2019-05-30): compat_level=0 * FW v2.3.0 (2019-07-31): compat_level=0 * FW v2.3.1 (2019-10-29): compat_level=1 * FW v2.20.0 (2020-04-23): compat_level=1 Empty flash values (0xffffffff) are interpreted as compat_level=0. If a firmware upgrade file has a soft-version block without compatibility level (data length < 0x10), this is also interpreted as compat_level=0. By including a high enough compatibility level in factory images, stock firmware can be convinced to accept the image. A compatibility level aware firmware will keep the original value. Example upgrade log of TP-Link EAP245v3 FWv2.3.0 to FWv2.20.0: [NM_Debug](nm_fwup_verifyFwupFile) 02073: curSoftVer:2.3.0 Build 20190731 Rel. 51932,newSoftVer:2.20.0 Build 20200423 Rel. 36779 ... AddiHardwareVer check: NEW(0x1) >= CUR(0x0), Success. ... [NM_NOTICE](updateDataToNvram) 00575: Restore old additionalHardVer: 0x0.(new 0x1) [NM_NOTICE](updateDataToNvram) 00607: PTN 07: name = soft-version, base = 0x00092000, size = 0x00000100 Bytes, upDataType = 1, upDataStart = 7690604b, upDataLen = 00000018 [NM_Debug](updateDataToNvram) 00738: PTN 07: write bytes = 000002eb Other firmware upgrades have been observed to modify the compabitility stored level (e.g. TP-Link EAP225-Outdoor FWv1.4.1 to FWv1.7.0). Therefore, it seems to be the safest option to set the OpenWrt compatibility level to the highest known value instead of the highest possible value (0xfffffffe), to ensure users do not get unexpectedly refused firmware upgrades when using a device reverted back to stock. To remain compatible with existing devices and not produce different images, the image builder doesn't store a compatibility level if it is zero. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-11 23:06:54 +02:00
uint32_t soft_ver_compat_level;
struct flash_partition_entry partitions[MAX_PARTITIONS+1];
const char *first_sysupgrade_partition;
const char *last_sysupgrade_partition;
};
struct __attribute__((__packed__)) meta_header {
uint32_t length;
uint32_t zero;
};
/** The content of the soft-version structure */
struct __attribute__((__packed__)) soft_version {
uint8_t pad1;
uint8_t version_major;
uint8_t version_minor;
uint8_t version_patch;
uint8_t year_hi;
uint8_t year_lo;
uint8_t month;
uint8_t day;
uint32_t rev;
uint32_t compat_level;
};
static const uint8_t jffs2_eof_mark[4] = {0xde, 0xad, 0xc0, 0xde};
/**
Salt for the MD5 hash
Fortunately, TP-LINK seems to use the same salt for most devices which use
the new image format.
*/
static const uint8_t md5_salt[16] = {
0x7a, 0x2b, 0x15, 0xed,
0x9b, 0x98, 0x59, 0x6d,
0xe5, 0x04, 0xab, 0x44,
0xac, 0x2a, 0x9f, 0x4e,
};
/** Firmware layout table */
static struct device_info boards[] = {
/** Firmware layout for the CPE210/220 V1 */
{
.id = "CPE210",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE210(TP-LINK|UN|N300-2):1.0\r\n"
"CPE210(TP-LINK|UN|N300-2):1.1\r\n"
"CPE210(TP-LINK|US|N300-2):1.1\r\n"
"CPE210(TP-LINK|EU|N300-2):1.1\r\n"
"CPE220(TP-LINK|UN|N300-2):1.1\r\n"
"CPE220(TP-LINK|US|N300-2):1.1\r\n"
"CPE220(TP-LINK|EU|N300-2):1.1\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE210 V2 */
{
.id = "CPE210V2",
.vendor = "CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE210(TP-LINK|EU|N300-2|00000000):2.0\r\n"
"CPE210(TP-LINK|EU|N300-2|45550000):2.0\r\n"
"CPE210(TP-LINK|EU|N300-2|55530000):2.0\r\n"
"CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n"
"CPE210(TP-LINK|UN|N300-2|45550000):2.0\r\n"
"CPE210(TP-LINK|UN|N300-2|55530000):2.0\r\n"
"CPE210(TP-LINK|US|N300-2|55530000):2.0\r\n"
"CPE210(TP-LINK|UN|N300-2):2.0\r\n"
"CPE210(TP-LINK|EU|N300-2):2.0\r\n"
"CPE210(TP-LINK|US|N300-2):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"device-info", 0x31400, 0x00400},
{"signature", 0x32000, 0x00400},
{"device-id", 0x33000, 0x00100},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x01000},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE210 V3 */
{
.id = "CPE210V3",
.vendor = "CPE210(TP-LINK|UN|N300-2|00000000):3.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE210(TP-LINK|EU|N300-2|45550000):3.0\r\n"
"CPE210(TP-LINK|UN|N300-2|00000000):3.0\r\n"
"CPE210(TP-LINK|US|N300-2|55530000):3.0\r\n"
"CPE210(TP-LINK|UN|N300-2):3.0\r\n"
"CPE210(TP-LINK|EU|N300-2):3.0\r\n"
"CPE210(TP-LINK|EU|N300-2|45550000):3.1\r\n"
"CPE210(TP-LINK|UN|N300-2|00000000):3.1\r\n"
"CPE210(TP-LINK|US|N300-2|55530000):3.1\r\n"
"CPE210(TP-LINK|EU|N300-2|45550000):3.20\r\n"
"CPE210(TP-LINK|UN|N300-2|00000000):3.20\r\n"
"CPE210(TP-LINK|US|N300-2|55530000):3.20\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x01000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"device-info", 0x31400, 0x00400},
{"signature", 0x32000, 0x00400},
{"device-id", 0x33000, 0x00100},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x01000},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE220 V2 */
{
.id = "CPE220V2",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE220(TP-LINK|EU|N300-2|00000000):2.0\r\n"
"CPE220(TP-LINK|EU|N300-2|45550000):2.0\r\n"
"CPE220(TP-LINK|EU|N300-2|55530000):2.0\r\n"
"CPE220(TP-LINK|UN|N300-2|00000000):2.0\r\n"
"CPE220(TP-LINK|UN|N300-2|45550000):2.0\r\n"
"CPE220(TP-LINK|UN|N300-2|55530000):2.0\r\n"
"CPE220(TP-LINK|US|N300-2|55530000):2.0\r\n"
"CPE220(TP-LINK|UN|N300-2):2.0\r\n"
"CPE220(TP-LINK|EU|N300-2):2.0\r\n"
"CPE220(TP-LINK|US|N300-2):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE220 V3 */
{
.id = "CPE220V3",
.vendor = "CPE220(TP-LINK|UN|N300-2|00000000):3.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE220(TP-LINK|EU|N300-2|00000000):3.0\r\n"
"CPE220(TP-LINK|EU|N300-2|45550000):3.0\r\n"
"CPE220(TP-LINK|EU|N300-2|55530000):3.0\r\n"
"CPE220(TP-LINK|UN|N300-2|00000000):3.0\r\n"
"CPE220(TP-LINK|UN|N300-2|45550000):3.0\r\n"
"CPE220(TP-LINK|UN|N300-2|55530000):3.0\r\n"
"CPE220(TP-LINK|US|N300-2|55530000):3.0\r\n"
"CPE220(TP-LINK|UN|N300-2):3.0\r\n"
"CPE220(TP-LINK|EU|N300-2):3.0\r\n"
"CPE220(TP-LINK|US|N300-2):3.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"device-info", 0x31400, 0x00400},
{"signature", 0x32000, 0x00400},
{"device-id", 0x33000, 0x00100},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x01000},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE510/520 V1 */
{
.id = "CPE510",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE510(TP-LINK|UN|N300-5):1.0\r\n"
"CPE510(TP-LINK|UN|N300-5):1.1\r\n"
"CPE510(TP-LINK|UN|N300-5):1.1\r\n"
"CPE510(TP-LINK|US|N300-5):1.1\r\n"
"CPE510(TP-LINK|EU|N300-5):1.1\r\n"
"CPE520(TP-LINK|UN|N300-5):1.1\r\n"
"CPE520(TP-LINK|US|N300-5):1.1\r\n"
"CPE520(TP-LINK|EU|N300-5):1.1\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE510 V2 */
{
.id = "CPE510V2",
.vendor = "CPE510(TP-LINK|UN|N300-5):2.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE510(TP-LINK|EU|N300-5|00000000):2.0\r\n"
"CPE510(TP-LINK|EU|N300-5|45550000):2.0\r\n"
"CPE510(TP-LINK|EU|N300-5|55530000):2.0\r\n"
"CPE510(TP-LINK|UN|N300-5|00000000):2.0\r\n"
"CPE510(TP-LINK|UN|N300-5|45550000):2.0\r\n"
"CPE510(TP-LINK|UN|N300-5|55530000):2.0\r\n"
"CPE510(TP-LINK|US|N300-5|00000000):2.0\r\n"
"CPE510(TP-LINK|US|N300-5|45550000):2.0\r\n"
"CPE510(TP-LINK|US|N300-5|55530000):2.0\r\n"
"CPE510(TP-LINK|UN|N300-5):2.0\r\n"
"CPE510(TP-LINK|EU|N300-5):2.0\r\n"
"CPE510(TP-LINK|US|N300-5):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE510 V3 */
{
.id = "CPE510V3",
.vendor = "CPE510(TP-LINK|UN|N300-5):3.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE510(TP-LINK|EU|N300-5|00000000):3.0\r\n"
"CPE510(TP-LINK|EU|N300-5|45550000):3.0\r\n"
"CPE510(TP-LINK|EU|N300-5|55530000):3.0\r\n"
"CPE510(TP-LINK|UN|N300-5|00000000):3.0\r\n"
"CPE510(TP-LINK|UN|N300-5|45550000):3.0\r\n"
"CPE510(TP-LINK|UN|N300-5|55530000):3.0\r\n"
"CPE510(TP-LINK|US|N300-5|00000000):3.0\r\n"
"CPE510(TP-LINK|US|N300-5|45550000):3.0\r\n"
"CPE510(TP-LINK|US|N300-5|55530000):3.0\r\n"
"CPE510(TP-LINK|UN|N300-5):3.0\r\n"
"CPE510(TP-LINK|EU|N300-5):3.0\r\n"
"CPE510(TP-LINK|US|N300-5):3.0\r\n"
"CPE510(TP-LINK|UN|N300-5|00000000):3.20\r\n"
"CPE510(TP-LINK|US|N300-5|55530000):3.20\r\n"
"CPE510(TP-LINK|EU|N300-5|45550000):3.20\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE610V1 */
{
.id = "CPE610V1",
.vendor = "CPE610(TP-LINK|UN|N300-5|00000000):1.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE610(TP-LINK|EU|N300-5|00000000):1.0\r\n"
"CPE610(TP-LINK|EU|N300-5|45550000):1.0\r\n"
"CPE610(TP-LINK|EU|N300-5|55530000):1.0\r\n"
"CPE610(TP-LINK|UN|N300-5|00000000):1.0\r\n"
"CPE610(TP-LINK|UN|N300-5|45550000):1.0\r\n"
"CPE610(TP-LINK|UN|N300-5|55530000):1.0\r\n"
"CPE610(TP-LINK|US|N300-5|55530000):1.0\r\n"
"CPE610(TP-LINK|UN|N300-5):1.0\r\n"
"CPE610(TP-LINK|EU|N300-5):1.0\r\n"
"CPE610(TP-LINK|US|N300-5):1.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the CPE610V2 */
{
.id = "CPE610V2",
.vendor = "CPE610(TP-LINK|UN|N300-5|00000000):2.0\r\n",
.support_list =
"SupportList:\r\n"
"CPE610(TP-LINK|EU|N300-5|00000000):2.0\r\n"
"CPE610(TP-LINK|EU|N300-5|45550000):2.0\r\n"
"CPE610(TP-LINK|EU|N300-5|55530000):2.0\r\n"
"CPE610(TP-LINK|UN|N300-5|00000000):2.0\r\n"
"CPE610(TP-LINK|UN|N300-5|45550000):2.0\r\n"
"CPE610(TP-LINK|UN|N300-5|55530000):2.0\r\n"
"CPE610(TP-LINK|US|N300-5|55530000):2.0\r\n"
"CPE610(TP-LINK|UN|N300-5):2.0\r\n"
"CPE610(TP-LINK|EU|N300-5):2.0\r\n"
"CPE610(TP-LINK|US|N300-5):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
{
.id = "WBS210",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"WBS210(TP-LINK|UN|N300-2):1.20\r\n"
"WBS210(TP-LINK|US|N300-2):1.20\r\n"
"WBS210(TP-LINK|EU|N300-2):1.20\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
{
.id = "WBS210V2",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"WBS210(TP-LINK|UN|N300-2|00000000):2.0\r\n"
"WBS210(TP-LINK|US|N300-2|55530000):2.0\r\n"
"WBS210(TP-LINK|EU|N300-2|45550000):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
{
.id = "WBS510",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"WBS510(TP-LINK|UN|N300-5):1.20\r\n"
"WBS510(TP-LINK|US|N300-5):1.20\r\n"
"WBS510(TP-LINK|EU|N300-5):1.20\r\n"
"WBS510(TP-LINK|CA|N300-5):1.20\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
{
.id = "WBS510V2",
.vendor = "CPE510(TP-LINK|UN|N300-5):1.0\r\n",
.support_list =
"SupportList:\r\n"
"WBS510(TP-LINK|UN|N300-5|00000000):2.0\r\n"
"WBS510(TP-LINK|US|N300-5|55530000):2.0\r\n"
"WBS510(TP-LINK|EU|N300-5|45550000):2.0\r\n"
"WBS510(TP-LINK|CA|N300-5|43410000):2.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"product-info", 0x31100, 0x00100},
{"signature", 0x32000, 0x00400},
{"firmware", 0x40000, 0x770000},
{"soft-version", 0x7b0000, 0x00100},
{"support-list", 0x7b1000, 0x00400},
{"user-config", 0x7c0000, 0x10000},
{"default-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "support-list",
},
/** Firmware layout for the AD7200 */
{
.id = "AD7200",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:AD7200,product_ver:1.0.0,special_id:00000000}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"SBL1", 0x00000, 0x20000},
{"MIBIB", 0x20000, 0x20000},
{"SBL2", 0x40000, 0x20000},
{"SBL3", 0x60000, 0x30000},
{"DDRCONFIG", 0x90000, 0x10000},
{"SSD", 0xa0000, 0x10000},
{"TZ", 0xb0000, 0x30000},
{"RPM", 0xe0000, 0x20000},
{"fs-uboot", 0x100000, 0x70000},
{"uboot-env", 0x170000, 0x40000},
{"radio", 0x1b0000, 0x40000},
{"os-image", 0x1f0000, 0x400000},
{"file-system", 0x5f0000, 0x1900000},
{"default-mac", 0x1ef0000, 0x00200},
{"pin", 0x1ef0200, 0x00200},
{"device-id", 0x1ef0400, 0x00200},
{"product-info", 0x1ef0600, 0x0fa00},
{"partition-table", 0x1f00000, 0x10000},
{"soft-version", 0x1f10000, 0x10000},
{"support-list", 0x1f20000, 0x10000},
{"profile", 0x1f30000, 0x10000},
{"default-config", 0x1f40000, 0x10000},
{"user-config", 0x1f50000, 0x40000},
{"qos-db", 0x1f90000, 0x40000},
{"usb-config", 0x1fd0000, 0x10000},
{"log", 0x1fe0000, 0x20000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the C2600 */
{
.id = "C2600",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:Archer C2600,product_ver:1.0.0,special_id:00000000}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/**
We use a bigger os-image partition than the stock images (and thus
smaller file-system), as our kernel doesn't fit in the stock firmware's
2 MB os-image since kernel 4.14.
*/
.partitions = {
{"SBL1", 0x00000, 0x20000},
{"MIBIB", 0x20000, 0x20000},
{"SBL2", 0x40000, 0x20000},
{"SBL3", 0x60000, 0x30000},
{"DDRCONFIG", 0x90000, 0x10000},
{"SSD", 0xa0000, 0x10000},
{"TZ", 0xb0000, 0x30000},
{"RPM", 0xe0000, 0x20000},
{"fs-uboot", 0x100000, 0x70000},
{"uboot-env", 0x170000, 0x40000},
{"radio", 0x1b0000, 0x40000},
{"os-image", 0x1f0000, 0x400000}, /* Stock: base 0x1f0000 size 0x200000 */
{"file-system", 0x5f0000, 0x1900000}, /* Stock: base 0x3f0000 size 0x1b00000 */
{"default-mac", 0x1ef0000, 0x00200},
{"pin", 0x1ef0200, 0x00200},
{"product-info", 0x1ef0400, 0x0fc00},
{"partition-table", 0x1f00000, 0x10000},
{"soft-version", 0x1f10000, 0x10000},
{"support-list", 0x1f20000, 0x10000},
{"profile", 0x1f30000, 0x10000},
{"default-config", 0x1f40000, 0x10000},
{"user-config", 0x1f50000, 0x40000},
{"qos-db", 0x1f90000, 0x40000},
{"usb-config", 0x1fd0000, 0x10000},
{"log", 0x1fe0000, 0x20000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ath79: add support for TP-Link Archer A7 This patch adds support for TP-Link Archer A7 Specification: - SOC: QCA9563 - Flash: 16 MiB (SPI) - RAM: 128 MiB (DDR2) - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN - Wireless: - 2.4GHz (bgn) SoC internal - 5GHz (ac) QCA988x - USB: 1x USB 2.0 port - Button: 1x power, 1x reset, 1x wps - LED: 10x LEDs - UART: holes in PCB - Vcc, GND, RX, TX from ethernet port side - 115200n8 Flash instructions: Upload openwrt-ath79-generic-tplink_archer-a7-v5-squashfs-factory.bin via the Webinterface. Flash instruction using tftp recovery: 1. Connect the computer to one of the LAN ports of the Archer A7 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 ArcherC7v5_tp_recovery.bin 2. Connect power cable to Archer A7, press and hold the reset button and turn the router on 3. Keep the reset button pressed for ~5 seconds 4. Wait ~150 seconds to complete flashing Changes since first revision: - Flash instructions using stock image webinterface - Changed "Version 5" in model string to "v5" - Split DTS file in qca9563_tplink_archer-x7-v5.dtsi and qca9563_tplink_archer-a7-v5.dts - Firmware image is now build with dynamic partitioning - Default to ath10k-ct Changes since second revision: - Changed uboot@0 to uboot@20000 in DTS file - Fixed ordering issue in board led script - Specify firmware partition format in DTS file - Rebased Makefile device definition on common Device/tplink-safeloader-uimage definition - Merged switch section in network script (same configuration as tplink,tl-wdr3600 and tplink,tl-wdr4300) Signed-off-by: Karl-Felix Glatzer <karl.glatzer@gmx.de>
2018-12-12 17:56:15 +01:00
/** Firmware layout for the A7-V5 */
{
.id = "ARCHER-A7-V5",
ath79: add support for TP-Link Archer A7 This patch adds support for TP-Link Archer A7 Specification: - SOC: QCA9563 - Flash: 16 MiB (SPI) - RAM: 128 MiB (DDR2) - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN - Wireless: - 2.4GHz (bgn) SoC internal - 5GHz (ac) QCA988x - USB: 1x USB 2.0 port - Button: 1x power, 1x reset, 1x wps - LED: 10x LEDs - UART: holes in PCB - Vcc, GND, RX, TX from ethernet port side - 115200n8 Flash instructions: Upload openwrt-ath79-generic-tplink_archer-a7-v5-squashfs-factory.bin via the Webinterface. Flash instruction using tftp recovery: 1. Connect the computer to one of the LAN ports of the Archer A7 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 ArcherC7v5_tp_recovery.bin 2. Connect power cable to Archer A7, press and hold the reset button and turn the router on 3. Keep the reset button pressed for ~5 seconds 4. Wait ~150 seconds to complete flashing Changes since first revision: - Flash instructions using stock image webinterface - Changed "Version 5" in model string to "v5" - Split DTS file in qca9563_tplink_archer-x7-v5.dtsi and qca9563_tplink_archer-a7-v5.dts - Firmware image is now build with dynamic partitioning - Default to ath10k-ct Changes since second revision: - Changed uboot@0 to uboot@20000 in DTS file - Fixed ordering issue in board led script - Specify firmware partition format in DTS file - Rebased Makefile device definition on common Device/tplink-safeloader-uimage definition - Merged switch section in network script (same configuration as tplink,tl-wdr3600 and tplink,tl-wdr4300) Signed-off-by: Karl-Felix Glatzer <karl.glatzer@gmx.de>
2018-12-12 17:56:15 +01:00
.support_list =
"SupportList:\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:45550000}\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:55530000}\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:43410000}\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:4A500000}\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:54570000}\n"
"{product_name:Archer A7,product_ver:5.0.0,special_id:52550000}\n",
.part_trail = 0x00,
ath79: add support for TP-Link Archer A7 This patch adds support for TP-Link Archer A7 Specification: - SOC: QCA9563 - Flash: 16 MiB (SPI) - RAM: 128 MiB (DDR2) - Ethernet: 4x 1Gbps LAN + 1x 1Gbps WAN - Wireless: - 2.4GHz (bgn) SoC internal - 5GHz (ac) QCA988x - USB: 1x USB 2.0 port - Button: 1x power, 1x reset, 1x wps - LED: 10x LEDs - UART: holes in PCB - Vcc, GND, RX, TX from ethernet port side - 115200n8 Flash instructions: Upload openwrt-ath79-generic-tplink_archer-a7-v5-squashfs-factory.bin via the Webinterface. Flash instruction using tftp recovery: 1. Connect the computer to one of the LAN ports of the Archer A7 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 ArcherC7v5_tp_recovery.bin 2. Connect power cable to Archer A7, press and hold the reset button and turn the router on 3. Keep the reset button pressed for ~5 seconds 4. Wait ~150 seconds to complete flashing Changes since first revision: - Flash instructions using stock image webinterface - Changed "Version 5" in model string to "v5" - Split DTS file in qca9563_tplink_archer-x7-v5.dtsi and qca9563_tplink_archer-a7-v5.dts - Firmware image is now build with dynamic partitioning - Default to ath10k-ct Changes since second revision: - Changed uboot@0 to uboot@20000 in DTS file - Fixed ordering issue in board led script - Specify firmware partition format in DTS file - Rebased Makefile device definition on common Device/tplink-safeloader-uimage definition - Merged switch section in network script (same configuration as tplink,tl-wdr3600 and tplink,tl-wdr4300) Signed-off-by: Karl-Felix Glatzer <karl.glatzer@gmx.de>
2018-12-12 17:56:15 +01:00
.soft_ver = "soft_ver:1.0.0\n",
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0xec0000}, /* Stock: name os-image base 0x40000 size 0x120000 */
/* Stock: name file-system base 0x160000 size 0xda0000 */
{"default-mac", 0xf40000, 0x00200},
{"pin", 0xf40200, 0x00200},
{"device-id", 0xf40400, 0x00100},
{"product-info", 0xf40500, 0x0fb00},
{"soft-version", 0xf50000, 0x00100},
{"extra-para", 0xf51000, 0x01000},
{"support-list", 0xf52000, 0x0a000},
{"profile", 0xf5c000, 0x04000},
{"default-config", 0xf60000, 0x10000},
{"user-config", 0xf70000, 0x40000},
{"certificate", 0xfb0000, 0x10000},
{"partition-table", 0xfc0000, 0x10000},
{"log", 0xfd0000, 0x20000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C2v3 */
{
.id = "ARCHER-C2-V3",
.support_list =
"SupportList:\n"
"{product_name:ArcherC2,product_ver:3.0.0,special_id:00000000}\n"
"{product_name:ArcherC2,product_ver:3.0.0,special_id:55530000}\n"
"{product_name:ArcherC2,product_ver:3.0.0,special_id:45550000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:3.0.1\n",
/** We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x10000},
{"firmware", 0x30000, 0x7a0000},
{"user-config", 0x7d0000, 0x04000},
{"default-mac", 0x7e0000, 0x00100},
{"device-id", 0x7e0100, 0x00100},
{"extra-para", 0x7e0200, 0x00100},
{"pin", 0x7e0300, 0x00100},
{"support-list", 0x7e0400, 0x00400},
{"soft-version", 0x7e0800, 0x00400},
{"product-info", 0x7e0c00, 0x01400},
{"partition-table", 0x7e2000, 0x01000},
{"profile", 0x7e3000, 0x01000},
{"default-config", 0x7e4000, 0x04000},
{"merge-config", 0x7ec000, 0x02000},
{"qos-db", 0x7ee000, 0x02000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C25v1 */
{
.id = "ARCHER-C25-V1",
.support_list =
"SupportList:\n"
"{product_name:ArcherC25,product_ver:1.0.0,special_id:00000000}\n"
"{product_name:ArcherC25,product_ver:1.0.0,special_id:55530000}\n"
"{product_name:ArcherC25,product_ver:1.0.0,special_id:45550000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x10000},
{"firmware", 0x30000, 0x7a0000}, /* Stock: name os-image base 0x30000 size 0x100000 */
/* Stock: name file-system base 0x130000 size 0x6a0000 */
{"user-config", 0x7d0000, 0x04000},
{"default-mac", 0x7e0000, 0x00100},
{"device-id", 0x7e0100, 0x00100},
{"extra-para", 0x7e0200, 0x00100},
{"pin", 0x7e0300, 0x00100},
{"support-list", 0x7e0400, 0x00400},
{"soft-version", 0x7e0800, 0x00400},
{"product-info", 0x7e0c00, 0x01400},
{"partition-table", 0x7e2000, 0x01000},
{"profile", 0x7e3000, 0x01000},
{"default-config", 0x7e4000, 0x04000},
{"merge-config", 0x7ec000, 0x02000},
{"qos-db", 0x7ee000, 0x02000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C58v1 */
{
.id = "ARCHER-C58-V1",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:Archer C58,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:Archer C58,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:Archer C58,product_ver:1.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
.partitions = {
{"fs-uboot", 0x00000, 0x10000},
{"default-mac", 0x10000, 0x00200},
{"pin", 0x10200, 0x00200},
{"product-info", 0x10400, 0x00100},
{"partition-table", 0x10500, 0x00800},
{"soft-version", 0x11300, 0x00200},
{"support-list", 0x11500, 0x00100},
{"device-id", 0x11600, 0x00100},
{"profile", 0x11700, 0x03900},
{"default-config", 0x15000, 0x04000},
{"user-config", 0x19000, 0x04000},
{"firmware", 0x20000, 0x7c8000},
{"certyficate", 0x7e8000, 0x08000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
/** Firmware layout for the C59v1 */
{
.id = "ARCHER-C59-V1",
.vendor = "",
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
.support_list =
"SupportList:\r\n"
"{product_name:Archer C59,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:Archer C59,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:Archer C59,product_ver:1.0.0,special_id:52550000}\r\n"
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
"{product_name:Archer C59,product_ver:1.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
/* We're using a dynamic kernel/rootfs split here */
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
.partitions = {
{"fs-uboot", 0x00000, 0x10000},
{"default-mac", 0x10000, 0x00200},
{"pin", 0x10200, 0x00200},
{"device-id", 0x10400, 0x00100},
{"product-info", 0x10500, 0x0fb00},
{"firmware", 0x20000, 0xe30000},
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
{"partition-table", 0xe50000, 0x10000},
{"soft-version", 0xe60000, 0x10000},
{"support-list", 0xe70000, 0x10000},
{"profile", 0xe80000, 0x10000},
{"default-config", 0xe90000, 0x10000},
{"user-config", 0xea0000, 0x40000},
{"usb-config", 0xee0000, 0x10000},
{"certificate", 0xef0000, 0x10000},
{"qos-db", 0xf00000, 0x40000},
{"log", 0xfe0000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C59v2 */
{
.id = "ARCHER-C59-V2",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:Archer C59,product_ver:2.0.0,special_id:00000000}\r\n"
"{product_name:Archer C59,product_ver:2.0.0,special_id:45550000}\r\n"
"{product_name:Archer C59,product_ver:2.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:2.0.0 Build 20161206 rel.7303\n",
/** We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x10000},
{"default-mac", 0x30000, 0x00200},
{"pin", 0x30200, 0x00200},
{"device-id", 0x30400, 0x00100},
{"product-info", 0x30500, 0x0fb00},
{"firmware", 0x40000, 0xe10000},
{"partition-table", 0xe50000, 0x10000},
{"soft-version", 0xe60000, 0x10000},
{"support-list", 0xe70000, 0x10000},
{"profile", 0xe80000, 0x10000},
{"default-config", 0xe90000, 0x10000},
{"user-config", 0xea0000, 0x40000},
{"usb-config", 0xee0000, 0x10000},
{"certificate", 0xef0000, 0x10000},
{"extra-para", 0xf00000, 0x10000},
{"qos-db", 0xf10000, 0x30000},
{"log", 0xfe0000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ath79: add support for TP-Link Archer C6 v2 (US) and A6 (US/TW) This patch is based on #1689 and adds support for TP-Link Archer C6 v2 (US) and A6 (US/TW). The hardware is the same as EU and RU variant, except for GPIOs (LEDS/Buttons), flash(chip/partitions) and UART being available on the board. - SOC: Qualcomm QCA9563 @ 775MHz - Flash: GigaDevice GD25Q127CS1G (16MiB) - 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: 115200, 8n1 (header available on board) Known issues: - Wireless: 5GHz is known to have lower RSSI signal, it affects speed and range. Flash instructions: Upload openwrt-ath79-generic-tplink_archer-c6-v2-us-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 ArcherA6v2_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 Flash partitioning: I've followed #1689 for defining the partition layout for this patch. The partition named as "tplink" @ 0xfd0000 is marked as read only as it is where some config for stock firmware are stored. On stock firmware those stock partitions starts at 0xfd9400 however I had not been able to make it functional starting on the same address as on stock fw, so it has been partitioned following #1689 and not the stock partition layout for this specific partition. Due to that firmware/rootfs partition lenght is 0xf80000 and not 0xf89400 as stock. According to the GPL code, the EU/RU/JP variant does have different GPIO pins assignment to LEDs and buttons, also the flash memory layout is different. GPL Source Code: https://static.tp-link.com/resources/gpl/gpl-A6v2_us.tar.gz Signed-off-by: Anderson Vulczak <andi@andi.com.br> [wrap commit message, remove soft_ver change for C6 v2 EU, move LED aliases to DTS files, remove dts-v1 in DTSI, node/property reorder in DTSI] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2019-10-05 15:44:55 +02:00
/** Firmware layout for the Archer C6 v2 (EU/RU/JP) */
{
.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",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.9.1\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",
},
ath79: add support for TP-Link Archer C6 v2 (US) and A6 (US/TW) This patch is based on #1689 and adds support for TP-Link Archer C6 v2 (US) and A6 (US/TW). The hardware is the same as EU and RU variant, except for GPIOs (LEDS/Buttons), flash(chip/partitions) and UART being available on the board. - SOC: Qualcomm QCA9563 @ 775MHz - Flash: GigaDevice GD25Q127CS1G (16MiB) - 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: 115200, 8n1 (header available on board) Known issues: - Wireless: 5GHz is known to have lower RSSI signal, it affects speed and range. Flash instructions: Upload openwrt-ath79-generic-tplink_archer-c6-v2-us-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 ArcherA6v2_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 Flash partitioning: I've followed #1689 for defining the partition layout for this patch. The partition named as "tplink" @ 0xfd0000 is marked as read only as it is where some config for stock firmware are stored. On stock firmware those stock partitions starts at 0xfd9400 however I had not been able to make it functional starting on the same address as on stock fw, so it has been partitioned following #1689 and not the stock partition layout for this specific partition. Due to that firmware/rootfs partition lenght is 0xf80000 and not 0xf89400 as stock. According to the GPL code, the EU/RU/JP variant does have different GPIO pins assignment to LEDs and buttons, also the flash memory layout is different. GPL Source Code: https://static.tp-link.com/resources/gpl/gpl-A6v2_us.tar.gz Signed-off-by: Anderson Vulczak <andi@andi.com.br> [wrap commit message, remove soft_ver change for C6 v2 EU, move LED aliases to DTS files, remove dts-v1 in DTSI, node/property reorder in DTSI] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2019-10-05 15:44:55 +02:00
/** Firmware layout for the Archer C6 v2 (US) and A6 v2 (US/TW) */
{
.id = "ARCHER-C6-V2-US",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:Archer A6,product_ver:2.0.0,special_id:55530000}\n"
"{product_name:Archer A6,product_ver:2.0.0,special_id:54570000}\n"
"{product_name:Archer C6,product_ver:2.0.0,special_id:55530000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.9.1\n",
ath79: add support for TP-Link Archer C6 v2 (US) and A6 (US/TW) This patch is based on #1689 and adds support for TP-Link Archer C6 v2 (US) and A6 (US/TW). The hardware is the same as EU and RU variant, except for GPIOs (LEDS/Buttons), flash(chip/partitions) and UART being available on the board. - SOC: Qualcomm QCA9563 @ 775MHz - Flash: GigaDevice GD25Q127CS1G (16MiB) - 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: 115200, 8n1 (header available on board) Known issues: - Wireless: 5GHz is known to have lower RSSI signal, it affects speed and range. Flash instructions: Upload openwrt-ath79-generic-tplink_archer-c6-v2-us-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 ArcherA6v2_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 Flash partitioning: I've followed #1689 for defining the partition layout for this patch. The partition named as "tplink" @ 0xfd0000 is marked as read only as it is where some config for stock firmware are stored. On stock firmware those stock partitions starts at 0xfd9400 however I had not been able to make it functional starting on the same address as on stock fw, so it has been partitioned following #1689 and not the stock partition layout for this specific partition. Due to that firmware/rootfs partition lenght is 0xf80000 and not 0xf89400 as stock. According to the GPL code, the EU/RU/JP variant does have different GPIO pins assignment to LEDs and buttons, also the flash memory layout is different. GPL Source Code: https://static.tp-link.com/resources/gpl/gpl-A6v2_us.tar.gz Signed-off-by: Anderson Vulczak <andi@andi.com.br> [wrap commit message, remove soft_ver change for C6 v2 EU, move LED aliases to DTS files, remove dts-v1 in DTSI, node/property reorder in DTSI] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2019-10-05 15:44:55 +02:00
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"default-mac", 0x20000, 0x00200},
{"pin", 0x20200, 0x00100},
{"product-info", 0x20300, 0x00200},
{"device-id", 0x20500, 0x0fb00},
{"fs-uboot", 0x30000, 0x20000},
{"firmware", 0x50000, 0xf89400},
{"soft-version", 0xfd9400, 0x00100},
{"extra-para", 0xfd9500, 0x00100},
{"support-list", 0xfd9600, 0x00200},
{"profile", 0xfd9800, 0x03000},
{"default-config", 0xfdc800, 0x03000},
{"partition-table", 0xfdf800, 0x00800},
{"user-config", 0xfe0000, 0x0c000},
{"certificate", 0xfec000, 0x04000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ramips: add support for TP-Link Archer C6 v3 The patch adds support for the TP-Link Archer C6 v3 (FCC ID TE7A6V3) The patch adds identification changes to the existing TP-Link Archer A6, by Vinay Patil <post2vinay@gmail.com>, which has identical hardware. Specification ------------- MediaTek MT7621 SOC RAM: 128MB DDR3 SPI Flash: W25Q128 (16MB) Ethernet: MT7530 5x 1000Base-T WiFi 5GHz: Mediatek MT7613BE WiFi 2.4GHz: Mediatek MT7603E UART/Serial: 115200 8n1 Device Configuration & Serial Port Pins --------------------------------------- ETH Ports: LAN4 LAN3 LAN2 LAN1 WAN _______________________ | | Serial Pins: | VCC GND TXD RXD | |_____________________| LEDs: Power Wifi2G Wifi5G LAN WAN Build Output ------------ The build will generate following set of files [1] openwrt-ramips-mt7621-tplink_archer-c6-v3-initramfs-kernel.bin [2] openwrt-ramips-mt7621-tplink_archer-c6-v3-squashfs-factory.bin [3] openwrt-ramips-mt7621-tplink_archer-c6-v3-squashfs-sysupgrade.bin How to Use - Flashing from TP-Link Web Interface ------------------------------------------------ * Go to "Advanced/System Tools/Firmware Update". * Click "Browse" and upload the OpenWrt factory image: factory.bin[2] * Click the "Upgrade" button, and select "Yes" when prompted. TFTP Booting ------------ Setup a TFTP boot server with address 192.168.0.5. While starting U-boot press '4' key to stop autoboot. Copy the initramfs-kernel.bin[1] to TFTP server folder, rename as test.bin From u-boot command prompt run tftpboot followed by bootm. Recovery -------- Archer A6 V3 has recovery page activated if SPI booting from flash fails. Recovery page can be activated by powercycling the router four times before the boot process is complete. Note: TFTP boot can be activated only from u-boot serial console. Device recovery address: 192.168.0.1 Signed-off-by: Amish Vishwakarma <vishwakarma.amish@gmail.com> [fix indent] Signed-off-by: David Bauer <mail@david-bauer.net>
2021-06-05 09:01:00 +02:00
/** Firmware layout for the Archer C6 v3 */
{
.id = "ARCHER-C6-V3",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:Archer C6,product_ver:3.20,special_id:55530000}"
"{product_name:Archer C6,product_ver:3.20,special_id:45550000}"
"{product_name:Archer C6,product_ver:3.20,special_id:52550000}"
"{product_name:Archer C6,product_ver:3.20,special_id:4A500000}"
"{product_name:Archer C6,product_ver:3.20,special_id:4B520000}",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.9\n",
.partitions = {
{"fs-uboot", 0x00000, 0x40000},
{"firmware", 0x40000, 0xf60000},
{"default-mac", 0xfa0000, 0x00200},
{"pin", 0xfa0200, 0x00100},
{"device-id", 0xfa0300, 0x00100},
{"product-info", 0xfa0400, 0x0fc00},
{"default-config", 0xfb0000, 0x08000},
{"ap-def-config", 0xfb8000, 0x08000},
{"user-config", 0xfc0000, 0x0a000},
{"ag-config", 0xfca000, 0x04000},
{"certificate", 0xfce000, 0x02000},
{"ap-config", 0xfd0000, 0x06000},
{"router-config", 0xfd6000, 0x06000},
{"favicon", 0xfdc000, 0x02000},
{"logo", 0xfde000, 0x02000},
{"partition-table", 0xfe0000, 0x00800},
{"soft-version", 0xfe0800, 0x00100},
{"support-list", 0xfe0900, 0x00200},
{"profile", 0xfe0b00, 0x03000},
{"extra-para", 0xfe3b00, 0x00100},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ramips: add support for TP-Link Archer A6 v3 The patch adds support for the TP-Link Archer A6 v3 The router is sold in US and India with FCC ID TE7A6V3 Specification ------------- MediaTek MT7621 SOC RAM: 128MB DDR3 SPI Flash: W25Q128 (16MB) Ethernet: MT7530 5x 1000Base-T WiFi 5GHz: Mediatek MT7613BE WiFi 2.4GHz: Mediatek MT7603E UART/Serial: 115200 8n1 Device Configuration & Serial Port Pins --------------------------------------- ETH Ports: LAN4 LAN3 LAN2 LAN1 WAN _______________________ | | Serial Pins: | VCC GND TXD RXD | |_____________________| LEDs: Power Wifi2G Wifi5G LAN WAN Build Output ------------ The build will generate following set of files [1] openwrt-ramips-mt7621-tplink_archer-a6-v3-initramfs-kernel.bin [2] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-factory.bin [3] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-sysupgrade.bin How to Use - Flashing from TP-Link Web Interface ------------------------------------------------ * Go to "Advanced/System Tools/Firmware Update". * Click "Browse" and upload the OpenWrt factory image: factory.bin[2] * Click the "Upgrade" button, and select "Yes" when prompted. TFTP Booting ------------ Setup a TFTP boot server with address 192.168.0.5. While starting U-boot press '4' key to stop autoboot. Copy the initramfs-kernel.bin[1] to TFTP server folder, rename as test.bin From u-boot command prompt run tftpboot followed by bootm. Recovery -------- Archer A6 V3 has recovery page activated if SPI booting from flash fails. Recovery page can be activated from serial console only. Press 'x' while u-boot is starting Note: TFTP boot can be activated only from u-boot serial console. Device recovery address: 192.168.0.1 Thanks to: Frankis for Randmon MAC address fix. Signed-off-by: Vinay Patil <post2vinay@gmail.com> [remove superfluous factory image definition, whitespacing] Signed-off-by: David Bauer <mail@david-bauer.net>
2021-04-19 03:22:51 +02:00
/** Firmware layout for the Archer A6 v3 */
{
.id = "ARCHER-A6-V3",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:Archer A6,product_ver:3.0.0,special_id:55530000}\n"
"{product_name:Archer A6,product_ver:3.0.0,special_id:54570000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.5\n",
ramips: add support for TP-Link Archer A6 v3 The patch adds support for the TP-Link Archer A6 v3 The router is sold in US and India with FCC ID TE7A6V3 Specification ------------- MediaTek MT7621 SOC RAM: 128MB DDR3 SPI Flash: W25Q128 (16MB) Ethernet: MT7530 5x 1000Base-T WiFi 5GHz: Mediatek MT7613BE WiFi 2.4GHz: Mediatek MT7603E UART/Serial: 115200 8n1 Device Configuration & Serial Port Pins --------------------------------------- ETH Ports: LAN4 LAN3 LAN2 LAN1 WAN _______________________ | | Serial Pins: | VCC GND TXD RXD | |_____________________| LEDs: Power Wifi2G Wifi5G LAN WAN Build Output ------------ The build will generate following set of files [1] openwrt-ramips-mt7621-tplink_archer-a6-v3-initramfs-kernel.bin [2] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-factory.bin [3] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-sysupgrade.bin How to Use - Flashing from TP-Link Web Interface ------------------------------------------------ * Go to "Advanced/System Tools/Firmware Update". * Click "Browse" and upload the OpenWrt factory image: factory.bin[2] * Click the "Upgrade" button, and select "Yes" when prompted. TFTP Booting ------------ Setup a TFTP boot server with address 192.168.0.5. While starting U-boot press '4' key to stop autoboot. Copy the initramfs-kernel.bin[1] to TFTP server folder, rename as test.bin From u-boot command prompt run tftpboot followed by bootm. Recovery -------- Archer A6 V3 has recovery page activated if SPI booting from flash fails. Recovery page can be activated from serial console only. Press 'x' while u-boot is starting Note: TFTP boot can be activated only from u-boot serial console. Device recovery address: 192.168.0.1 Thanks to: Frankis for Randmon MAC address fix. Signed-off-by: Vinay Patil <post2vinay@gmail.com> [remove superfluous factory image definition, whitespacing] Signed-off-by: David Bauer <mail@david-bauer.net>
2021-04-19 03:22:51 +02:00
.partitions = {
{"fs-uboot", 0x00000, 0x40000},
{"firmware", 0x40000, 0xf60000},
{"default-mac", 0xfa0000, 0x00200},
{"pin", 0xfa0200, 0x00100},
{"device-id", 0xfa0300, 0x00100},
{"product-info", 0xfa0400, 0x0fc00},
{"default-config", 0xfb0000, 0x08000},
{"ap-def-config", 0xfb8000, 0x08000},
{"user-config", 0xfc0000, 0x0a000},
{"ag-config", 0xfca000, 0x04000},
{"certificate", 0xfce000, 0x02000},
{"ap-config", 0xfd0000, 0x06000},
{"router-config", 0xfd6000, 0x06000},
{"favicon", 0xfdc000, 0x02000},
{"logo", 0xfde000, 0x02000},
{"partition-table", 0xfe0000, 0x00800},
{"soft-version", 0xfe0800, 0x00100},
{"support-list", 0xfe0900, 0x00200},
{"profile", 0xfe0b00, 0x03000},
{"extra-para", 0xfe3b00, 0x00100},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ramips: add support for TP-Link Archer C6U v1 (EU) This patch adds support for TP-Link Archer C6U v1 (EU). The device is also known in some market as Archer C6 v3. This patch supports only Archer C6U v1 (EU). Specifications: -------------- * SoC: Mediatek MT7621AT 2C2T, 880MHz * RAM: 128MB DDR3 * Flash: 16MB SPI NOR flash (Winbond 25Q128) * WiFi 5GHz: Mediatek MT7613BEN (2x2:2) * WiFi 2.4GHz: Mediatek MT7603EN (2x2:2) * Ethernet: MT7630, 5x 1000Base-T. * LED: Power, WAN, LAN, WiFi 2GHz and 5GHz, USB * Buttons: Reset, WPS. * UART: Serial console (115200 8n1), J1(GND:3) * USB: One USB2 port. Installation: ------------ Install the OpenWrt factory image for C6U is from the TP-Link web interface. 1) Go to "Advanced/System Tools/Firmware Update". 2) Click "Browse" and upload the OpenWrt factory image: openwrt-ramips-mt7621-tplink_archer-c6u-v1-squashfs-factory.bin. 3) Click the "Upgrade" button, and select "Yes" when prompted. Recovery to stock firmware: -------------------------- The C6U bootloader has a failsafe mode that provides a web interface (running at 192.168.0.1) for reverting back to the stock TP-Link firmware. The failsafe interface is triggered from the serial console or on failed kernel boot. Unfortunately, there's no key combination that enables the failsafe mode. This gives us two options for recovery: 1) Recover using the serial console (J1 header). The recovery interface can be selected by hitting 'x' when prompted on boot. 2) Trigger the bootloader failsafe mode. A more dangerous option is force the bootloader into recovery mode by erasing the OpenWrt partition from the OpenWrt's shell - e.g "mtd erase firmware". Please be careful, since erasing the wrong partition can brick your device. MAC addresses: ------------- OEM firmware configuration: D8:07:B6:xx:xx:83 : 5G D8:07:B6:xx:xx:84 : LAN (label) D8:07:B6:xx:xx:84 : 2.4G D8:07:B6:xx:xx:85 : WAN Signed-off-by: Georgi Vlaev <georgi.vlaev@konsulko.com>
2020-07-31 13:02:21 +02:00
/** Firmware layout for the Archer C6U v1 */
{
.id = "ARCHER-C6U-V1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:Archer C6U,product_ver:1.0.0,special_id:45550000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.2\n",
.partitions = {
{"fs-uboot", 0x00000, 0x40000},
{"firmware", 0x40000, 0xf60000},
{"default-mac", 0xfa0000, 0x00200},
{"pin", 0xfa0200, 0x00100},
{"device-id", 0xfa0300, 0x00100},
{"product-info", 0xfa0400, 0x0fc00},
{"default-config", 0xfb0000, 0x08000},
{"ap-def-config", 0xfb8000, 0x08000},
{"user-config", 0xfc0000, 0x0c000},
{"certificate", 0xfcc000, 0x04000},
{"ap-config", 0xfd0000, 0x08000},
{"router-config", 0xfd8000, 0x08000},
{"partition-table", 0xfe0000, 0x00800},
{"soft-version", 0xfe0800, 0x00100},
{"support-list", 0xfe0900, 0x00200},
{"profile", 0xfe0b00, 0x03000},
{"extra-para", 0xfe3b00, 0x00100},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
/** Firmware layout for the C60v1 */
{
.id = "ARCHER-C60-V1",
.vendor = "",
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
.support_list =
"SupportList:\r\n"
"{product_name:Archer C60,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:Archer C60,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:Archer C60,product_ver:1.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
.partitions = {
{"fs-uboot", 0x00000, 0x10000},
{"default-mac", 0x10000, 0x00200},
{"pin", 0x10200, 0x00200},
{"product-info", 0x10400, 0x00100},
{"partition-table", 0x10500, 0x00800},
{"soft-version", 0x11300, 0x00200},
{"support-list", 0x11500, 0x00100},
{"device-id", 0x11600, 0x00100},
{"profile", 0x11700, 0x03900},
{"default-config", 0x15000, 0x04000},
{"user-config", 0x19000, 0x04000},
{"firmware", 0x20000, 0x7c8000},
ar71xx: add support to TP-Link Archer C59v1 and C60v1 TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - USB 2.0 port - 8x LED (controled by 74HC595), 3x button - UART header on PCB TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561+QCA9886. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 7x LED, 2x button - UART header on PCB Currently not working: - Port LAN1 on C59, LAN4 on C60 - WiFi 5GHz (missing ath10k firmware for QCA9886 chip) - Update from oficial web interface ( tplink-saveloader not support "product-info") Flash instruction: 1. Set PC to fixed ip address 192.168.0.66 2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold Reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery. Flash instruction under U-Boot, using UART: 1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin 2. erase 0x9f020000 +$filesize 3. cp.b $fileaddr 0x9f020000 $filesize 4. reset Signed-off-by: Henryk Heisig <hyniu@o2.pl> [Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2016-12-27 22:41:41 +01:00
{"certyficate", 0x7e8000, 0x08000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C60v2 */
{
.id = "ARCHER-C60-V2",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:Archer C60,product_ver:2.0.0,special_id:42520000}\r\n"
"{product_name:Archer C60,product_ver:2.0.0,special_id:45550000}\r\n"
"{product_name:Archer C60,product_ver:2.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:2.0.0\n",
.partitions = {
{"factory-boot", 0x00000, 0x1fb00},
{"default-mac", 0x1fb00, 0x00200},
{"pin", 0x1fd00, 0x00100},
{"product-info", 0x1fe00, 0x00100},
{"device-id", 0x1ff00, 0x00100},
{"fs-uboot", 0x20000, 0x10000},
{"firmware", 0x30000, 0x7a0000},
{"soft-version", 0x7d9500, 0x00100},
{"support-list", 0x7d9600, 0x00100},
{"extra-para", 0x7d9700, 0x00100},
{"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",
},
ath79: add support for TP-Link Archer C60 v3 TP-Link Archer C60 v3 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561 + QCA9886. It seems to be identical to the v2 revision, except that it lacks a WPS LED and has different GPIO for amber WAN LED. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 6x LED, 2x button - UART header on PCB Flash instruction (WebUI): Download *-factory.bin image and upload it via the firmwary upgrade function of the stock firmware WebUI. Flash instruction (TFTP): 1. Set PC to fixed IP address 192.168.0.66 2. Download *-factory.bin image and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery While TFTP works for OpenWrt images, my device didn't accept the only available official firmware "Archer C60(EU)_V3.0_190115.bin". In contrast to earlier revisions (v2), the v3 contains the (same) MAC address twice, once in 0x1fa08 and again in 0x1fb08. While the partition-table on the device refers to the latter, the firmware image contains a different partition-table for that region: name device firmware factory-boot 0x00000-0x1fb00 0x00000-0x1fa00 default-mac 0x1fb00-0x1fd00 0x1fa00-0x1fc00 pin 0x1fd00-0x1fe00 0x1fc00-0x1fd00 product-info 0x1fe00-0x1ff00 0x1fd00-0x1ff00 device-id 0x1ff00-0x20000 0x1ff00-0x20000 While the MAC address is present twice, other data like the PIN isn't, so with the partitioning from the firmware image the PIN on the device would actually be outside of its partition. Consequently, the patch uses the MAC location from the device (which is the same as for the v2). Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-02-12 14:43:15 +01:00
/** Firmware layout for the C60v3 */
{
.id = "ARCHER-C60-V3",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:Archer C60,product_ver:3.0.0,special_id:42520000}\r\n"
"{product_name:Archer C60,product_ver:3.0.0,special_id:45550000}\r\n"
"{product_name:Archer C60,product_ver:3.0.0,special_id:55530000}\r\n",
.part_trail = 0x00,
ath79: add support for TP-Link Archer C60 v3 TP-Link Archer C60 v3 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561 + QCA9886. It seems to be identical to the v2 revision, except that it lacks a WPS LED and has different GPIO for amber WAN LED. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 6x LED, 2x button - UART header on PCB Flash instruction (WebUI): Download *-factory.bin image and upload it via the firmwary upgrade function of the stock firmware WebUI. Flash instruction (TFTP): 1. Set PC to fixed IP address 192.168.0.66 2. Download *-factory.bin image and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery While TFTP works for OpenWrt images, my device didn't accept the only available official firmware "Archer C60(EU)_V3.0_190115.bin". In contrast to earlier revisions (v2), the v3 contains the (same) MAC address twice, once in 0x1fa08 and again in 0x1fb08. While the partition-table on the device refers to the latter, the firmware image contains a different partition-table for that region: name device firmware factory-boot 0x00000-0x1fb00 0x00000-0x1fa00 default-mac 0x1fb00-0x1fd00 0x1fa00-0x1fc00 pin 0x1fd00-0x1fe00 0x1fc00-0x1fd00 product-info 0x1fe00-0x1ff00 0x1fd00-0x1ff00 device-id 0x1ff00-0x20000 0x1ff00-0x20000 While the MAC address is present twice, other data like the PIN isn't, so with the partitioning from the firmware image the PIN on the device would actually be outside of its partition. Consequently, the patch uses the MAC location from the device (which is the same as for the v2). Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-02-12 14:43:15 +01:00
.soft_ver = "soft_ver:3.0.0\n",
.partitions = {
{"factory-boot", 0x00000, 0x1fb00},
{"default-mac", 0x1fb00, 0x00200},
{"pin", 0x1fd00, 0x00100},
{"product-info", 0x1fe00, 0x00100},
{"device-id", 0x1ff00, 0x00100},
{"fs-uboot", 0x20000, 0x10000},
{"firmware", 0x30000, 0x7a0000},
{"soft-version", 0x7d9500, 0x00100},
{"support-list", 0x7d9600, 0x00100},
{"extra-para", 0x7d9700, 0x00100},
{"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 C5 */
{
.id = "ARCHER-C5-V2",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:ArcherC5,product_ver:2.0.0,special_id:00000000}\r\n"
"{product_name:ArcherC5,product_ver:2.0.0,special_id:55530000}\r\n"
"{product_name:ArcherC5,product_ver:2.0.0,special_id:4A500000}\r\n", /* JP version */
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x40000},
{"os-image", 0x40000, 0x200000},
{"file-system", 0x240000, 0xc00000},
{"default-mac", 0xe40000, 0x00200},
{"pin", 0xe40200, 0x00200},
{"product-info", 0xe40400, 0x00200},
{"partition-table", 0xe50000, 0x10000},
{"soft-version", 0xe60000, 0x00200},
{"support-list", 0xe61000, 0x0f000},
{"profile", 0xe70000, 0x10000},
{"default-config", 0xe80000, 0x10000},
{"user-config", 0xe90000, 0x50000},
{"log", 0xee0000, 0x100000},
{"radio_bk", 0xfe0000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the C7 */
{
.id = "ARCHER-C7-V4",
.support_list =
"SupportList:\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:00000000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:41550000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:45550000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:4B520000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:42520000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:4A500000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:52550000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:54570000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:55530000}\n"
"{product_name:Archer C7,product_ver:4.0.0,special_id:43410000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0xEC0000}, /* Stock: name os-image base 0x40000 size 0x120000 */
/* Stock: name file-system base 0x160000 size 0xda0000 */
{"default-mac", 0xf00000, 0x00200},
{"pin", 0xf00200, 0x00200},
{"device-id", 0xf00400, 0x00100},
{"product-info", 0xf00500, 0x0fb00},
{"soft-version", 0xf10000, 0x00100},
{"extra-para", 0xf11000, 0x01000},
{"support-list", 0xf12000, 0x0a000},
{"profile", 0xf1c000, 0x04000},
{"default-config", 0xf20000, 0x10000},
{"user-config", 0xf30000, 0x40000},
{"qos-db", 0xf70000, 0x40000},
{"certificate", 0xfb0000, 0x10000},
{"partition-table", 0xfc0000, 0x10000},
{"log", 0xfd0000, 0x20000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C7 v5*/
{
.id = "ARCHER-C7-V5",
.support_list =
"SupportList:\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:00000000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:45550000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:55530000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:43410000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:4A500000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:54570000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:52550000}\n"
"{product_name:Archer C7,product_ver:5.0.0,special_id:4B520000}\n",
.part_trail = 0x00,
tplink-safeloader: fix C7v5 factory flashing from vendor fw > v1.1.x Currently it's not possible to flash factory images on devices shipped with vendor firmware versions 1.1.0 Build 20201120 rel. 50406 (published 2020-12-22): (curFw_ver, newFw_ver) == (1.1, 1.0) [NM_Error](nm_checkSoftVer) 00848: Firmwave not supports, check failed. [NM_Error](nm_checkUpdateContent) 01084: software version dismatched [NM_Error](nm_buildUpgradeStruct) 01188: checkUpdateContent failed. They've even following note in release notes: Note: You will be unable to downgrade to the previous firmware version after updating this firmware. This version check in vendor firmware is implemented in /usr/bin/nvrammanager binary likely as following C code[1]: sscanf(buf, "%d.%d.%*s",&upd_fw_major, &upd_fw_minor); ... if (((int)upd_fw_major < (int)cur_fw_major) || ((ret = 1, cur_fw_major == upd_fw_major && (upd_fw_minor < (int)cur_fw_minor)))) { ret = 0; printf("[NM_Error](%s) %05d: Firmwave not supports, check failed.\r\n\r\n","nm_checkSoftVer" ,0x350); } ... return ret; So in order to fix this and make it future proof it should be enough to ship our factory firmware images with major version 7 (lucky number). Tested on latest firmware version 1.1.2 Build 20210125 rel.37999: Firmwave supports, check OK. (curFw_ver, newFw_ver) == (1.1, 7.0) check firmware ok! Flashing back to vendor firmware c7v5_us-up-ver1-1-2-P1[20210125-rel37999]_2021-01-25_10.33.55.bin works as well: U-Boot 1.1.4-gbec22107-dirty (Nov 18 2020 - 18:19:12) ... Firmware downloaded... filesize = 0xeeae77 fileaddr = 0x80060000. Firmware Recovery file length : 15642231 Firmware process id 2. handle_fw_cloud 146 Image verify OK! Firmware file Verify ok! product-info:product_name:Archer C7 product_ver:5.0.0 special_id:55530000 [Error]sysmgr_cfg_checkSupportList(): 1023 @ specialId 45550000 NOT Match. Firmware supports, check OK. Firmware Recovery check ok! 1. https://gist.github.com/ynezz/2e0583647d863386a66c3d231541b6d1 Signed-off-by: Petr Štetiar <ynezz@true.cz>
2021-04-09 14:52:05 +02:00
.soft_ver = "soft_ver:7.0.0\n",
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"partition-table", 0x40000, 0x10000},
{"radio", 0x50000, 0x10000},
{"default-mac", 0x60000, 0x00200},
{"pin", 0x60200, 0x00200},
{"device-id", 0x60400, 0x00100},
{"product-info", 0x60500, 0x0fb00},
{"soft-version", 0x70000, 0x01000},
{"extra-para", 0x71000, 0x01000},
{"support-list", 0x72000, 0x0a000},
{"profile", 0x7c000, 0x04000},
{"user-config", 0x80000, 0x40000},
{"firmware", 0xc0000, 0xf00000}, /* Stock: name os-image base 0xc0000 size 0x120000 */
/* Stock: name file-system base 0x1e0000 size 0xde0000 */
{"log", 0xfc0000, 0x20000},
{"certificate", 0xfe0000, 0x10000},
{"default-config", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
/** Firmware layout for the C9 */
{
.id = "ARCHERC9",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:ArcherC9,"
"product_ver:1.0.0,"
"special_id:00000000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x40000},
{"os-image", 0x40000, 0x200000},
{"file-system", 0x240000, 0xc00000},
{"default-mac", 0xe40000, 0x00200},
{"pin", 0xe40200, 0x00200},
{"product-info", 0xe40400, 0x00200},
{"partition-table", 0xe50000, 0x10000},
{"soft-version", 0xe60000, 0x00200},
{"support-list", 0xe61000, 0x0f000},
{"profile", 0xe70000, 0x10000},
{"default-config", 0xe80000, 0x10000},
{"user-config", 0xe90000, 0x50000},
{"log", 0xee0000, 0x100000},
{"radio_bk", 0xfe0000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the EAP120 */
{
.id = "EAP120",
.vendor = "EAP120(TP-LINK|UN|N300-2):1.0\r\n",
.support_list =
"SupportList:\r\n"
"EAP120(TP-LINK|UN|N300-2):1.0\r\n",
.part_trail = 0xff,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x00020},
{"support-list", 0x31000, 0x00100},
{"product-info", 0x31100, 0x00100},
{"soft-version", 0x32000, 0x00100},
{"os-image", 0x40000, 0x180000},
{"file-system", 0x1c0000, 0x600000},
{"user-config", 0x7c0000, 0x10000},
{"backup-config", 0x7d0000, 0x10000},
{"log", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ath79: support for TP-Link EAP225-Outdoor v1 TP-Link EAP225-Outdoor v1 is an AC1200 (802.11ac Wave-2) pole or wall mount access point. Debricking requires access to the serial port, which is non-trivial. Device specifications: * SoC: QCA9563 @ 775MHz * Memory: 128MiB DDR2 * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n 2x2 * Wireless 5GHz (QCA9886): a/n/ac 2x2 MU-MIMO * Ethernet (AR8033): 1× 1GbE, PoE Flashing instructions: * ssh into target device with recent (>= v1.6.0) firmware * run `cliclientd stopcs` on target device * upload factory image via web interface Debricking: To recover the device, you need access to the serial port. This requires fine soldering to test points, or the use of probe pins. * Open the case and solder wires to the test points: RXD, TXD and TPGND4 * Use a 3.3V UART, 115200 baud, 8n1 * Interrupt bootloader by holding ctrl+B during boot * upload initramfs via built-in tftp client and perform sysupgrade setenv ipaddr 192.168.1.1 # default, change as required setenv serverip 192.168.1.10 # default, change as required tftp 0x80800000 initramfs.bin bootelf $fileaddr MAC addresses: MAC address (as on device label) is stored in device info partition at an offset of 8 bytes. ath9k device has same address as ethernet, ath10k uses address incremented by 1. From stock ifconfig: ath0 Link encap:Ethernet HWaddr D8:...:2E ath10 Link encap:Ethernet HWaddr D8:...:2F br0 Link encap:Ethernet HWaddr D8:...:2E eth0 Link encap:Ethernet HWaddr D8:...:2E Tested by forum user PolynomialDivision on firmware v1.7.0. UART access tested by forum user arinc9. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-07 18:04:37 +02:00
/** Firmware layout for the EAP225-Outdoor v1 */
{
.id = "EAP225-OUTDOOR-V1",
.support_list =
"SupportList:\r\n"
"EAP225-Outdoor(TP-Link|UN|AC1200-D):1.0\r\n",
.part_trail = PART_TRAIL_NONE,
ath79: support for TP-Link EAP225-Outdoor v1 TP-Link EAP225-Outdoor v1 is an AC1200 (802.11ac Wave-2) pole or wall mount access point. Debricking requires access to the serial port, which is non-trivial. Device specifications: * SoC: QCA9563 @ 775MHz * Memory: 128MiB DDR2 * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n 2x2 * Wireless 5GHz (QCA9886): a/n/ac 2x2 MU-MIMO * Ethernet (AR8033): 1× 1GbE, PoE Flashing instructions: * ssh into target device with recent (>= v1.6.0) firmware * run `cliclientd stopcs` on target device * upload factory image via web interface Debricking: To recover the device, you need access to the serial port. This requires fine soldering to test points, or the use of probe pins. * Open the case and solder wires to the test points: RXD, TXD and TPGND4 * Use a 3.3V UART, 115200 baud, 8n1 * Interrupt bootloader by holding ctrl+B during boot * upload initramfs via built-in tftp client and perform sysupgrade setenv ipaddr 192.168.1.1 # default, change as required setenv serverip 192.168.1.10 # default, change as required tftp 0x80800000 initramfs.bin bootelf $fileaddr MAC addresses: MAC address (as on device label) is stored in device info partition at an offset of 8 bytes. ath9k device has same address as ethernet, ath10k uses address incremented by 1. From stock ifconfig: ath0 Link encap:Ethernet HWaddr D8:...:2E ath10 Link encap:Ethernet HWaddr D8:...:2F br0 Link encap:Ethernet HWaddr D8:...:2E eth0 Link encap:Ethernet HWaddr D8:...:2E Tested by forum user PolynomialDivision on firmware v1.7.0. UART access tested by forum user arinc9. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-07 18:04:37 +02:00
.soft_ver = NULL,
.soft_ver_compat_level = 1,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x01000},
{"support-list", 0x31000, 0x00100},
{"product-info", 0x31100, 0x00400},
{"soft-version", 0x32000, 0x00100},
{"firmware", 0x40000, 0xd80000},
{"user-config", 0xdc0000, 0x30000},
{"mutil-log", 0xf30000, 0x80000},
{"oops", 0xfb0000, 0x40000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the EAP225 v3 */
{
.id = "EAP225-V3",
.support_list =
"SupportList:\r\n"
"EAP225(TP-Link|UN|AC1350-D):3.0\r\n",
.part_trail = PART_TRAIL_NONE,
.soft_ver = NULL,
.soft_ver_compat_level = 1,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x01000},
{"support-list", 0x31000, 0x00100},
{"product-info", 0x31100, 0x00400},
{"soft-version", 0x32000, 0x00100},
{"firmware", 0x40000, 0xd80000},
{"user-config", 0xdc0000, 0x30000},
{"mutil-log", 0xf30000, 0x80000},
{"oops", 0xfb0000, 0x40000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ath79: support for TP-Link EAP225-Wall v2 TP-Link EAP225-Wall v2 is an AC1200 (802.11ac Wave-2) wall plate access point. UART access and debricking require fine soldering. The device was kindly provided for porting by Stijn Segers. Device specifications: * SoC: QCA9561 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR (GD25Q127CSIG) * Wireless 2.4GHz (SoC): b/g/n, 2x2 * Wireless 5Ghz (QCA9886): a/n/ac, 2x2 MU-MIMO * Ethernet (SoC): 4× 100Mbps * Eth0 (back): 802.3af/at PoE in * Eth1, Eth2 (bottom) * Eth3 (bottom): PoE out (can be toggled by GPIO) * One status LED * Two buttons (both work as failsafe) * LED button, implemented as KEY_BRIGHTNESS_TOGGLE * Reset button Flashing instructions, requires recent firmware (tested on 1.20.0): * ssh into target device and run `cliclientd stopcs` * Upgrade with factory image via web interface Debricking: * Serial port can be soldered on PCB J4 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R162 (TXD) and R165 (RXD) Do NOT bridge R164 * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via sysupgrade or LuCI web interface MAC addresses: MAC address (as on device label) is stored in device info partition at an offset of 8 bytes. ath9k device has same address as ethernet, ath10k uses address incremented by 1. From OEM ifconfig: br0 Link encap:Ethernet HWaddr 50:...:04 eth0 Link encap:Ethernet HWaddr 50:...:04 wifi0 Link encap:UNSPEC HWaddr 50-...-04-... wifi1 Link encap:UNSPEC HWaddr 50-...-05-... Signed-off-by: Sander Vanheule <sander@svanheule.net> [fix IMAGE_SIZE] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-07-26 22:40:54 +02:00
/** Firmware layout for the EAP225-Wall v2 */
{
.id = "EAP225-WALL-V2",
.support_list =
"SupportList:\r\n"
"EAP225-Wall(TP-Link|UN|AC1200-D):2.0\r\n",
.part_trail = PART_TRAIL_NONE,
ath79: support for TP-Link EAP225-Wall v2 TP-Link EAP225-Wall v2 is an AC1200 (802.11ac Wave-2) wall plate access point. UART access and debricking require fine soldering. The device was kindly provided for porting by Stijn Segers. Device specifications: * SoC: QCA9561 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR (GD25Q127CSIG) * Wireless 2.4GHz (SoC): b/g/n, 2x2 * Wireless 5Ghz (QCA9886): a/n/ac, 2x2 MU-MIMO * Ethernet (SoC): 4× 100Mbps * Eth0 (back): 802.3af/at PoE in * Eth1, Eth2 (bottom) * Eth3 (bottom): PoE out (can be toggled by GPIO) * One status LED * Two buttons (both work as failsafe) * LED button, implemented as KEY_BRIGHTNESS_TOGGLE * Reset button Flashing instructions, requires recent firmware (tested on 1.20.0): * ssh into target device and run `cliclientd stopcs` * Upgrade with factory image via web interface Debricking: * Serial port can be soldered on PCB J4 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R162 (TXD) and R165 (RXD) Do NOT bridge R164 * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via sysupgrade or LuCI web interface MAC addresses: MAC address (as on device label) is stored in device info partition at an offset of 8 bytes. ath9k device has same address as ethernet, ath10k uses address incremented by 1. From OEM ifconfig: br0 Link encap:Ethernet HWaddr 50:...:04 eth0 Link encap:Ethernet HWaddr 50:...:04 wifi0 Link encap:UNSPEC HWaddr 50-...-04-... wifi1 Link encap:UNSPEC HWaddr 50-...-05-... Signed-off-by: Sander Vanheule <sander@svanheule.net> [fix IMAGE_SIZE] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-07-26 22:40:54 +02:00
.soft_ver = NULL,
.soft_ver_compat_level = 1,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x01000},
{"support-list", 0x31000, 0x00100},
{"product-info", 0x31100, 0x00400},
{"soft-version", 0x32000, 0x00100},
{"firmware", 0x40000, 0xd80000},
{"user-config", 0xdc0000, 0x30000},
{"mutil-log", 0xf30000, 0x80000},
{"oops", 0xfb0000, 0x40000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
ath79: support for TP-Link EAP245 v1 TP-Link EAP245 v1 is an AC1750 (802.11ac Wave-1) ceiling mount access point. Device specifications: * SoC: QCA9563 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n, 3x3 * Wireless 5Ghz (QCA9880): a/n/ac, 3x3 * Ethernet (AR8033): 1× 1GbE, 802.3at PoE Flashing instructions: * Upgrade the device to firmware v1.4.0 if necessary * Exploit the user management page in the web interface to start telnetd by changing the username to `;/usr/sbin/telnetd -l/bin/sh&`. * Immediately change the malformed username back to something valid (e.g. 'admin') to make ssh work again. * Use the root shell via telnet to make /tmp world writeable (chmod 777) * Extract /usr/bin/uclited from the device via ssh and apply the binary patch listed below. The patch is required to prevent `uclited -u` in the last step from crashing. * Copy the patched uclited programme back to the device at /tmp/uclited (via ssh) * Upload the factory image to /tmp/upgrade.bin (via ssh) * Run `chmod +x /tmp/uclited && /tmp/uclited -u` to install OpenWrt. --- xxd uclited +++ xxd uclited-patched @@ -53796,7 +53796,7 @@ 000d2240: 8c44 0000 0320 f809 0000 0000 8fbc 0010 .D... .......... 000d2250: 8fa6 0a4c 02c0 2821 8f82 87b8 0000 0000 ...L..(!........ -000d2260: 8c44 0000 0c13 45e0 27a7 0018 8fbc 0010 .D....E.'....... +000d2260: 8c44 0000 2402 0000 0000 0000 8fbc 0010 .D..$........... 000d2270: 1040 001d 0000 1821 8f99 8374 3c04 0058 .@.....!...t<..X 000d2280: 3c05 0056 2484 a898 24a5 9a30 0320 f809 <..V$...$..0. .. Debricking: * Serial port can be soldered on PCB J3 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R225 (TXD) and R237 (RXD). Do NOT bridge R230. * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via the LuCI web interface setenv ipaddr 192.168.1.1 # default, change as required setenv serverip 192.168.1.10 # default, change as required tftp 0x80800000 initramfs.bin bootelf $fileaddr Tested on the EAP245 v1 running the latest firmware (v1.4.0). The binary patch might not apply to uclited from other firmware versions. EAP245 v1 device support was originally developed and maintained by Julien Dusser out-of-tree. This patch and "ath79: prepare for 1-port TP-Link EAP2x5 devices" are based on that work. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-17 12:06:03 +02:00
.last_sysupgrade_partition = "file-system"
},
ramips: mt7621: add TP-Link EAP235-Wall support The TP-Link EAP235-Wall is a wall-mounted, PoE-powered AC1200 access point with four gigabit ethernet ports. When connecting to the device's serial port, it is strongly advised to use an isolated UART adapter. This prevents linking different power domains created by the PoE power supply, which may damage your devices. The device's U-Boot supports saving modified environments with `saveenv`. However, there is no u-boot-env partition, and saving modifications will cause the partition table to be overwritten. This is not an issue for running OpenWrt, but will prevent the vendor FW from functioning properly. Device specifications: * SoC: MT7621DAT * RAM: 128MiB * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (MT7603EN): b/g/n, 2x2 * Wireless 5GHz (MT7613BEN): a/n/ac, 2x2 * Ethernet: 4× GbE * Back side: ETH0, PoE PD port * Bottom side: ETH1, ETH2, ETH3 * Single white device LED * LED button, reset button (available for failsafe) * PoE pass-through on port ETH3 (enabled with GPIO) Datasheet of the flash chip specifies a maximum frequency of 33MHz, but that didn't work. 20MHz gives no errors with reading (flash dump) or writing (sysupgrade). Device mac addresses: Stock firmware uses the same MAC address for ethernet (on device label) and 2.4GHz wireless. The 5GHz wireless address is incremented by one. This address is stored in the 'info' ('default-mac') partition at an offset of 8 bytes. From OEM ifconfig: eth a4:2b:b0:...:88 ra0 a4:2b:b0:...:88 rai0 a4:2b:b0:...:89 Flashing instructions: * Enable SSH in the web interface, and SSH into the target device * run `cliclientd stopcs`, this should return "success" * upload the factory image via the web interface Debricking: U-boot can be interrupted during boot, serial console is 57600 baud, 8n1 This allows installing a sysupgrade image, or fixing the device in another way. * Access serial header from the side of the board, close to ETH3, pin-out is (1:TX, 2:RX, 3:GND, 4:3.3V), with pin 1 closest to ETH3. * Interrupt bootloader by holding '4' during boot, which drops the bootloader into its shell * Change default 'serverip' and 'ipaddr' variables (optional) * Download initramfs with `tftpboot`, and boot image with `bootm` # tftpboot 84000000 openwrt-initramfs.bin # bootm Revert to stock: Using the tplink-safeloader utility from the firmware-utils package, TP-Link's firmware image can be converted to an OpenWrt-compatible sysupgrade image: $ ./staging_dir/host/bin/tplink-safeloader -B EAP235-WALL-V1 \ -z EAP235-WALLv1_XXX_up_signed.bin -o eap235-sysupgrade.bin This can then be flashed using the OpenWrt sysupgrade interface. The image will appear to be incompatible and must be force flashed, without keeping the current configuration. Known issues: - DFS support is incomplete (known issue with MT7613) - MT7613 radio may stop responding when idling, reboot required. This was an issue with the ddc75ff704 version of mt76, but appears to have improved/disappeared with bc3963764d. Error notice example: [ 7099.554067] mt7615e 0000:02:00.0: Message 73 (seq 1) timeout Hardware was kindly provided for porting by Stijn Segers. Tested-by: Stijn Segers <foss@volatilesystems.org> Signed-off-by: Sander Vanheule <sander@svanheule.net>
2021-02-18 20:52:53 +01:00
/** Firmware layout for the EAP235-Wall v1 */
{
.id = "EAP235-WALL-V1",
.support_list =
"SupportList:\r\n"
"EAP235-Wall(TP-Link|UN|AC1200-D):1.0\r\n",
.part_trail = PART_TRAIL_NONE,
.soft_ver = NULL,
.soft_ver_compat_level = 1,
.partitions = {
{"fs-uboot", 0x00000, 0x80000},
{"partition-table", 0x80000, 0x02000},
{"default-mac", 0x90000, 0x01000},
{"support-list", 0x91000, 0x00100},
{"product-info", 0x91100, 0x00400},
{"soft-version", 0x92000, 0x00100},
{"firmware", 0xa0000, 0xd20000},
{"user-config", 0xdc0000, 0x30000},
{"mutil-log", 0xf30000, 0x80000},
{"oops", 0xfb0000, 0x40000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ath79: support for TP-Link EAP245 v1 TP-Link EAP245 v1 is an AC1750 (802.11ac Wave-1) ceiling mount access point. Device specifications: * SoC: QCA9563 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n, 3x3 * Wireless 5Ghz (QCA9880): a/n/ac, 3x3 * Ethernet (AR8033): 1× 1GbE, 802.3at PoE Flashing instructions: * Upgrade the device to firmware v1.4.0 if necessary * Exploit the user management page in the web interface to start telnetd by changing the username to `;/usr/sbin/telnetd -l/bin/sh&`. * Immediately change the malformed username back to something valid (e.g. 'admin') to make ssh work again. * Use the root shell via telnet to make /tmp world writeable (chmod 777) * Extract /usr/bin/uclited from the device via ssh and apply the binary patch listed below. The patch is required to prevent `uclited -u` in the last step from crashing. * Copy the patched uclited programme back to the device at /tmp/uclited (via ssh) * Upload the factory image to /tmp/upgrade.bin (via ssh) * Run `chmod +x /tmp/uclited && /tmp/uclited -u` to install OpenWrt. --- xxd uclited +++ xxd uclited-patched @@ -53796,7 +53796,7 @@ 000d2240: 8c44 0000 0320 f809 0000 0000 8fbc 0010 .D... .......... 000d2250: 8fa6 0a4c 02c0 2821 8f82 87b8 0000 0000 ...L..(!........ -000d2260: 8c44 0000 0c13 45e0 27a7 0018 8fbc 0010 .D....E.'....... +000d2260: 8c44 0000 2402 0000 0000 0000 8fbc 0010 .D..$........... 000d2270: 1040 001d 0000 1821 8f99 8374 3c04 0058 .@.....!...t<..X 000d2280: 3c05 0056 2484 a898 24a5 9a30 0320 f809 <..V$...$..0. .. Debricking: * Serial port can be soldered on PCB J3 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R225 (TXD) and R237 (RXD). Do NOT bridge R230. * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via the LuCI web interface setenv ipaddr 192.168.1.1 # default, change as required setenv serverip 192.168.1.10 # default, change as required tftp 0x80800000 initramfs.bin bootelf $fileaddr Tested on the EAP245 v1 running the latest firmware (v1.4.0). The binary patch might not apply to uclited from other firmware versions. EAP245 v1 device support was originally developed and maintained by Julien Dusser out-of-tree. This patch and "ath79: prepare for 1-port TP-Link EAP2x5 devices" are based on that work. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-17 12:06:03 +02:00
/** Firmware layout for the EAP245 v1 */
{
.id = "EAP245-V1",
.support_list =
"SupportList:\r\n"
"EAP245(TP-LINK|UN|AC1750-D):1.0\r\n",
.part_trail = PART_TRAIL_NONE,
ath79: support for TP-Link EAP245 v1 TP-Link EAP245 v1 is an AC1750 (802.11ac Wave-1) ceiling mount access point. Device specifications: * SoC: QCA9563 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n, 3x3 * Wireless 5Ghz (QCA9880): a/n/ac, 3x3 * Ethernet (AR8033): 1× 1GbE, 802.3at PoE Flashing instructions: * Upgrade the device to firmware v1.4.0 if necessary * Exploit the user management page in the web interface to start telnetd by changing the username to `;/usr/sbin/telnetd -l/bin/sh&`. * Immediately change the malformed username back to something valid (e.g. 'admin') to make ssh work again. * Use the root shell via telnet to make /tmp world writeable (chmod 777) * Extract /usr/bin/uclited from the device via ssh and apply the binary patch listed below. The patch is required to prevent `uclited -u` in the last step from crashing. * Copy the patched uclited programme back to the device at /tmp/uclited (via ssh) * Upload the factory image to /tmp/upgrade.bin (via ssh) * Run `chmod +x /tmp/uclited && /tmp/uclited -u` to install OpenWrt. --- xxd uclited +++ xxd uclited-patched @@ -53796,7 +53796,7 @@ 000d2240: 8c44 0000 0320 f809 0000 0000 8fbc 0010 .D... .......... 000d2250: 8fa6 0a4c 02c0 2821 8f82 87b8 0000 0000 ...L..(!........ -000d2260: 8c44 0000 0c13 45e0 27a7 0018 8fbc 0010 .D....E.'....... +000d2260: 8c44 0000 2402 0000 0000 0000 8fbc 0010 .D..$........... 000d2270: 1040 001d 0000 1821 8f99 8374 3c04 0058 .@.....!...t<..X 000d2280: 3c05 0056 2484 a898 24a5 9a30 0320 f809 <..V$...$..0. .. Debricking: * Serial port can be soldered on PCB J3 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R225 (TXD) and R237 (RXD). Do NOT bridge R230. * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via the LuCI web interface setenv ipaddr 192.168.1.1 # default, change as required setenv serverip 192.168.1.10 # default, change as required tftp 0x80800000 initramfs.bin bootelf $fileaddr Tested on the EAP245 v1 running the latest firmware (v1.4.0). The binary patch might not apply to uclited from other firmware versions. EAP245 v1 device support was originally developed and maintained by Julien Dusser out-of-tree. This patch and "ath79: prepare for 1-port TP-Link EAP2x5 devices" are based on that work. Signed-off-by: Sander Vanheule <sander@svanheule.net>
2020-07-17 12:06:03 +02:00
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"partition-table", 0x20000, 0x02000},
{"default-mac", 0x30000, 0x01000},
{"support-list", 0x31000, 0x00100},
{"product-info", 0x31100, 0x00400},
{"soft-version", 0x32000, 0x00100},
{"firmware", 0x40000, 0xd80000},
{"user-config", 0xdc0000, 0x30000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
ath79: support for TP-Link EAP225-Wall v2 TP-Link EAP225-Wall v2 is an AC1200 (802.11ac Wave-2) wall plate access point. UART access and debricking require fine soldering. The device was kindly provided for porting by Stijn Segers. Device specifications: * SoC: QCA9561 @ 775MHz * RAM: 128MiB DDR2 * Flash: 16MiB SPI-NOR (GD25Q127CSIG) * Wireless 2.4GHz (SoC): b/g/n, 2x2 * Wireless 5Ghz (QCA9886): a/n/ac, 2x2 MU-MIMO * Ethernet (SoC): 4× 100Mbps * Eth0 (back): 802.3af/at PoE in * Eth1, Eth2 (bottom) * Eth3 (bottom): PoE out (can be toggled by GPIO) * One status LED * Two buttons (both work as failsafe) * LED button, implemented as KEY_BRIGHTNESS_TOGGLE * Reset button Flashing instructions, requires recent firmware (tested on 1.20.0): * ssh into target device and run `cliclientd stopcs` * Upgrade with factory image via web interface Debricking: * Serial port can be soldered on PCB J4 (1: TXD, 2: RXD, 3: GND, 4: VCC) * Bridge unpopulated resistors R162 (TXD) and R165 (RXD) Do NOT bridge R164 * Use 3.3V, 115200 baud, 8n1 * Interrupt bootloader by holding CTRL+B during boot * tftp initramfs to flash via sysupgrade or LuCI web interface MAC addresses: MAC address (as on device label) is stored in device info partition at an offset of 8 bytes. ath9k device has same address as ethernet, ath10k uses address incremented by 1. From OEM ifconfig: br0 Link encap:Ethernet HWaddr 50:...:04 eth0 Link encap:Ethernet HWaddr 50:...:04 wifi0 Link encap:UNSPEC HWaddr 50-...-04-... wifi1 Link encap:UNSPEC HWaddr 50-...-05-... Signed-off-by: Sander Vanheule <sander@svanheule.net> [fix IMAGE_SIZE] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-07-26 22:40:54 +02:00
.last_sysupgrade_partition = "file-system"
},
ath79: add support for TP-Link EAP245-v3 TP-Link EAP245 v3 is an AC1750 (802.11ac Wave-2) ceiling mount access point. UART access (for debricking) requires non-trivial soldering. Specifications: * SoC: QCA9563 (CPU/DDR/AHB @ 775/650/258 MHz) * RAM: 128MiB * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n 3x3 * Wireless 5GHz (QCA9982): a/n/ac 3x3 with MU-MIMO * Ethernet (QCA8337N switch): 2× 1GbE, ETH1 (802.3at PoE) and ETH2 * Green and amber status LEDs * Reset switch (GPIO, available for failsafe) Flashing instructions: All recent firmware versions (latest is 2.20.0), can disable firmware signature verification and use a padded firmware file to flash OpenWrt: * ssh into target device and run `cliclientd stopcs` * upload factory image via web interface The stopcs-method is supported from firmware version 2.3.0. Earlier versions need to be upgraded to a newer stock version before flashing OpenWrt. Factory images for these devices are RSA signed by TP-Link. While the signature verification can be disabled, the factory image still needs to have a (fake) 1024 bit signature added to pass file checks. Debricking instructions: You can recover using u-boot via the serial port: * Serial port is available from J3 (1:TX, 2:RX, 3:GND, 4:3.3V) * Bridge R237 to connect RX, located next to J3 * Bridge R225 to connect TX, located inside can on back-side of board * Serial port is 115200 baud, 8n1, interrupt u-boot by holding ctrl+B * Upload initramfs with tftp and upgrade via OpenWrt Device mac addresses: Stock firmware has the same mac address for 2.4GHz wireless and ethernet, 5GHz is incremented by one. The base mac address is stored in the 'default-mac' partition (offset 0x90000) at an offset of 8 bytes. ART blobs contain no mac addresses. From OEM ifconfig: ath0 Link encap:Ethernet HWaddr 74:..:E2 ath10 Link encap:Ethernet HWaddr 74:..:E3 br0 Link encap:Ethernet HWaddr 74:..:E2 eth0 Link encap:Ethernet HWaddr 74:..:E2 Signed-off-by: Sander Vanheule <sander@svanheule.net> Tested-by: Stijn Tintel <stijn@linux-ipv6.be>
2020-06-04 20:59:13 +02:00
/** Firmware layout for the EAP245 v3 */
{
.id = "EAP245-V3",
.support_list =
"SupportList:\r\n"
"EAP245(TP-Link|UN|AC1750-D):3.0\r\n",
.part_trail = PART_TRAIL_NONE,
ath79: add support for TP-Link EAP245-v3 TP-Link EAP245 v3 is an AC1750 (802.11ac Wave-2) ceiling mount access point. UART access (for debricking) requires non-trivial soldering. Specifications: * SoC: QCA9563 (CPU/DDR/AHB @ 775/650/258 MHz) * RAM: 128MiB * Flash: 16MiB SPI-NOR * Wireless 2.4GHz (SoC): b/g/n 3x3 * Wireless 5GHz (QCA9982): a/n/ac 3x3 with MU-MIMO * Ethernet (QCA8337N switch): 2× 1GbE, ETH1 (802.3at PoE) and ETH2 * Green and amber status LEDs * Reset switch (GPIO, available for failsafe) Flashing instructions: All recent firmware versions (latest is 2.20.0), can disable firmware signature verification and use a padded firmware file to flash OpenWrt: * ssh into target device and run `cliclientd stopcs` * upload factory image via web interface The stopcs-method is supported from firmware version 2.3.0. Earlier versions need to be upgraded to a newer stock version before flashing OpenWrt. Factory images for these devices are RSA signed by TP-Link. While the signature verification can be disabled, the factory image still needs to have a (fake) 1024 bit signature added to pass file checks. Debricking instructions: You can recover using u-boot via the serial port: * Serial port is available from J3 (1:TX, 2:RX, 3:GND, 4:3.3V) * Bridge R237 to connect RX, located next to J3 * Bridge R225 to connect TX, located inside can on back-side of board * Serial port is 115200 baud, 8n1, interrupt u-boot by holding ctrl+B * Upload initramfs with tftp and upgrade via OpenWrt Device mac addresses: Stock firmware has the same mac address for 2.4GHz wireless and ethernet, 5GHz is incremented by one. The base mac address is stored in the 'default-mac' partition (offset 0x90000) at an offset of 8 bytes. ART blobs contain no mac addresses. From OEM ifconfig: ath0 Link encap:Ethernet HWaddr 74:..:E2 ath10 Link encap:Ethernet HWaddr 74:..:E3 br0 Link encap:Ethernet HWaddr 74:..:E2 eth0 Link encap:Ethernet HWaddr 74:..:E2 Signed-off-by: Sander Vanheule <sander@svanheule.net> Tested-by: Stijn Tintel <stijn@linux-ipv6.be>
2020-06-04 20:59:13 +02:00
.soft_ver = NULL,
.soft_ver_compat_level = 1,
/** Firmware partition with dynamic kernel/rootfs split */
.partitions = {
{"factroy-boot", 0x00000, 0x40000},
{"fs-uboot", 0x40000, 0x40000},
{"partition-table", 0x80000, 0x10000},
{"default-mac", 0x90000, 0x01000},
{"support-list", 0x91000, 0x00100},
{"product-info", 0x91100, 0x00400},
{"soft-version", 0x92000, 0x00100},
{"radio", 0xa0000, 0x10000},
{"extra-para", 0xb0000, 0x10000},
{"firmware", 0xc0000, 0xe40000},
{"config", 0xf00000, 0x30000},
{"mutil-log", 0xf30000, 0x80000},
{"oops", 0xfb0000, 0x40000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WA850RE v2 */
{
.id = "TLWA850REV2",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:55530000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:00000000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:55534100}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:45550000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:4B520000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:42520000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:4A500000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:43410000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:41550000}\n"
"{product_name:TL-WA850RE,product_ver:2.0.0,special_id:52550000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
/**
576KB were moved from file-system to os-image
in comparison to the stock image
*/
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x390000},
{"partition-table", 0x3b0000, 0x02000},
{"default-mac", 0x3c0000, 0x00020},
{"pin", 0x3c0100, 0x00020},
{"product-info", 0x3c1000, 0x01000},
{"soft-version", 0x3c2000, 0x00100},
{"support-list", 0x3c3000, 0x01000},
{"profile", 0x3c4000, 0x08000},
{"user-config", 0x3d0000, 0x10000},
{"default-config", 0x3e0000, 0x10000},
{"radio", 0x3f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WA855RE v1 */
{
.id = "TLWA855REV1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:00000000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:55530000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:45550000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:4B520000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:42520000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:4A500000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:43410000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:41550000}\n"
"{product_name:TL-WA855RE,product_ver:1.0.0,special_id:52550000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"os-image", 0x20000, 0x150000},
{"file-system", 0x170000, 0x240000},
{"partition-table", 0x3b0000, 0x02000},
{"default-mac", 0x3c0000, 0x00020},
{"pin", 0x3c0100, 0x00020},
{"product-info", 0x3c1000, 0x01000},
{"soft-version", 0x3c2000, 0x00100},
{"support-list", 0x3c3000, 0x01000},
{"profile", 0x3c4000, 0x08000},
{"user-config", 0x3d0000, 0x10000},
{"default-config", 0x3e0000, 0x10000},
{"radio", 0x3f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ath79: add support for TP-Link TL-WPA8630P v2 The TL-WPA8630P v2 is a HomePlug AV2 compatible device with a QCA9563 SoC and 2.4GHz and 5GHz WiFi modules. Specifications -------------- - QCA9563 750MHz, 2.4GHz WiFi - QCA9888 5GHz WiFi - 8MiB SPI Flash - 128MiB RAM - 3 GBit Ports (QCA8337) - PLC (QCA7550) MAC address assignment ---------------------- WiFi 2.4GHz and LAN share the same MAC address as printed on the label. 5GHz WiFi uses LAN-1, based on assumptions from similar devices. LAN Port assignment ------------------- While there are 3 physical LAN ports on the device, there will be 4 visible ports in OpenWrt. The fourth port (internal port 5) is used by the PowerLine Communication SoC and thus treated like a regular LAN port. Versions -------- Note that both TL-WPA8630 and TL-WPA8630P, as well as the different country-versions, differ in partitioning, and therefore shouldn't be cross-flashed. This adds support for the two known partitioning variants of the TL-WPA8630P, where the variants can be safely distinguished via the tplink-safeloader SupportList. For the non-P variants (TL-WPA8630), at least two additional partitioning schemes exist, and the same SupportList entry can have different partitioning. Thus, we don't support those officially (yet). Also note that the P version for Germany (DE) requires the international image version, but is properly protected by SupportList. In any case, please check the OpenWrt Wiki pages for the device before flashing anything! Installation ------------ Installation is possible from the OEM web interface. Make sure to install the latest OEM firmware first, so that the PLC firmware is at the latest version. However, please also check the Wiki page for hints according to altered partitioning between OEM firmware revisions. Additional thanks to Jon Davies and Joe Mullally for bringing order into the partitioning mess. Signed-off-by: Andreas Böhler <dev@aboehler.at> [minor DTS adjustments, add label-mac-device, drop chosen, move common partitions to DTSI, rename de to int, add AU support strings, adjust TPLINK_BOARD_ID, create common node in generic-tp-link.mk, adjust commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-03-15 00:20:22 +01:00
/** Firmware layout for the TL-WPA8630P v2 (EU)*/
{
.id = "TL-WPA8630P-V2.0-EU",
ath79: add support for TP-Link TL-WPA8630P v2 The TL-WPA8630P v2 is a HomePlug AV2 compatible device with a QCA9563 SoC and 2.4GHz and 5GHz WiFi modules. Specifications -------------- - QCA9563 750MHz, 2.4GHz WiFi - QCA9888 5GHz WiFi - 8MiB SPI Flash - 128MiB RAM - 3 GBit Ports (QCA8337) - PLC (QCA7550) MAC address assignment ---------------------- WiFi 2.4GHz and LAN share the same MAC address as printed on the label. 5GHz WiFi uses LAN-1, based on assumptions from similar devices. LAN Port assignment ------------------- While there are 3 physical LAN ports on the device, there will be 4 visible ports in OpenWrt. The fourth port (internal port 5) is used by the PowerLine Communication SoC and thus treated like a regular LAN port. Versions -------- Note that both TL-WPA8630 and TL-WPA8630P, as well as the different country-versions, differ in partitioning, and therefore shouldn't be cross-flashed. This adds support for the two known partitioning variants of the TL-WPA8630P, where the variants can be safely distinguished via the tplink-safeloader SupportList. For the non-P variants (TL-WPA8630), at least two additional partitioning schemes exist, and the same SupportList entry can have different partitioning. Thus, we don't support those officially (yet). Also note that the P version for Germany (DE) requires the international image version, but is properly protected by SupportList. In any case, please check the OpenWrt Wiki pages for the device before flashing anything! Installation ------------ Installation is possible from the OEM web interface. Make sure to install the latest OEM firmware first, so that the PLC firmware is at the latest version. However, please also check the Wiki page for hints according to altered partitioning between OEM firmware revisions. Additional thanks to Jon Davies and Joe Mullally for bringing order into the partitioning mess. Signed-off-by: Andreas Böhler <dev@aboehler.at> [minor DTS adjustments, add label-mac-device, drop chosen, move common partitions to DTSI, rename de to int, add AU support strings, adjust TPLINK_BOARD_ID, create common node in generic-tp-link.mk, adjust commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-03-15 00:20:22 +01:00
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WPA8630P,product_ver:2.0.0,special_id:45550000}\n",
.part_trail = 0x00,
ath79: add support for TP-Link TL-WPA8630P v2 The TL-WPA8630P v2 is a HomePlug AV2 compatible device with a QCA9563 SoC and 2.4GHz and 5GHz WiFi modules. Specifications -------------- - QCA9563 750MHz, 2.4GHz WiFi - QCA9888 5GHz WiFi - 8MiB SPI Flash - 128MiB RAM - 3 GBit Ports (QCA8337) - PLC (QCA7550) MAC address assignment ---------------------- WiFi 2.4GHz and LAN share the same MAC address as printed on the label. 5GHz WiFi uses LAN-1, based on assumptions from similar devices. LAN Port assignment ------------------- While there are 3 physical LAN ports on the device, there will be 4 visible ports in OpenWrt. The fourth port (internal port 5) is used by the PowerLine Communication SoC and thus treated like a regular LAN port. Versions -------- Note that both TL-WPA8630 and TL-WPA8630P, as well as the different country-versions, differ in partitioning, and therefore shouldn't be cross-flashed. This adds support for the two known partitioning variants of the TL-WPA8630P, where the variants can be safely distinguished via the tplink-safeloader SupportList. For the non-P variants (TL-WPA8630), at least two additional partitioning schemes exist, and the same SupportList entry can have different partitioning. Thus, we don't support those officially (yet). Also note that the P version for Germany (DE) requires the international image version, but is properly protected by SupportList. In any case, please check the OpenWrt Wiki pages for the device before flashing anything! Installation ------------ Installation is possible from the OEM web interface. Make sure to install the latest OEM firmware first, so that the PLC firmware is at the latest version. However, please also check the Wiki page for hints according to altered partitioning between OEM firmware revisions. Additional thanks to Jon Davies and Joe Mullally for bringing order into the partitioning mess. Signed-off-by: Andreas Böhler <dev@aboehler.at> [minor DTS adjustments, add label-mac-device, drop chosen, move common partitions to DTSI, rename de to int, add AU support strings, adjust TPLINK_BOARD_ID, create common node in generic-tp-link.mk, adjust commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-03-15 00:20:22 +01:00
.soft_ver = NULL,
.partitions = {
{"factory-uboot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0x5e0000},
{"partition-table", 0x620000, 0x02000},
{"default-mac", 0x630000, 0x00020},
{"pin", 0x630100, 0x00020},
{"device-id", 0x630200, 0x00030},
{"product-info", 0x631100, 0x01000},
{"extra-para", 0x632100, 0x01000},
{"soft-version", 0x640000, 0x01000},
{"support-list", 0x641000, 0x01000},
{"profile", 0x642000, 0x08000},
{"user-config", 0x650000, 0x10000},
{"default-config", 0x660000, 0x10000},
{"default-nvm", 0x670000, 0xc0000},
{"default-pib", 0x730000, 0x40000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WPA8630P v2 (INT)*/
{
.id = "TL-WPA8630P-V2-INT",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WPA8630P,product_ver:2.0.0,special_id:41550000}\n"
"{product_name:TL-WPA8630P,product_ver:2.0.0,special_id:44450000}\n"
"{product_name:TL-WPA8630P,product_ver:2.1.0,special_id:41550000}\n",
.part_trail = 0x00,
ath79: add support for TP-Link TL-WPA8630P v2 The TL-WPA8630P v2 is a HomePlug AV2 compatible device with a QCA9563 SoC and 2.4GHz and 5GHz WiFi modules. Specifications -------------- - QCA9563 750MHz, 2.4GHz WiFi - QCA9888 5GHz WiFi - 8MiB SPI Flash - 128MiB RAM - 3 GBit Ports (QCA8337) - PLC (QCA7550) MAC address assignment ---------------------- WiFi 2.4GHz and LAN share the same MAC address as printed on the label. 5GHz WiFi uses LAN-1, based on assumptions from similar devices. LAN Port assignment ------------------- While there are 3 physical LAN ports on the device, there will be 4 visible ports in OpenWrt. The fourth port (internal port 5) is used by the PowerLine Communication SoC and thus treated like a regular LAN port. Versions -------- Note that both TL-WPA8630 and TL-WPA8630P, as well as the different country-versions, differ in partitioning, and therefore shouldn't be cross-flashed. This adds support for the two known partitioning variants of the TL-WPA8630P, where the variants can be safely distinguished via the tplink-safeloader SupportList. For the non-P variants (TL-WPA8630), at least two additional partitioning schemes exist, and the same SupportList entry can have different partitioning. Thus, we don't support those officially (yet). Also note that the P version for Germany (DE) requires the international image version, but is properly protected by SupportList. In any case, please check the OpenWrt Wiki pages for the device before flashing anything! Installation ------------ Installation is possible from the OEM web interface. Make sure to install the latest OEM firmware first, so that the PLC firmware is at the latest version. However, please also check the Wiki page for hints according to altered partitioning between OEM firmware revisions. Additional thanks to Jon Davies and Joe Mullally for bringing order into the partitioning mess. Signed-off-by: Andreas Böhler <dev@aboehler.at> [minor DTS adjustments, add label-mac-device, drop chosen, move common partitions to DTSI, rename de to int, add AU support strings, adjust TPLINK_BOARD_ID, create common node in generic-tp-link.mk, adjust commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-03-15 00:20:22 +01:00
.soft_ver = NULL,
.partitions = {
{"factory-uboot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0x5e0000},
{"partition-table", 0x620000, 0x02000},
{"extra-para", 0x632100, 0x01000},
{"soft-version", 0x640000, 0x01000},
{"support-list", 0x641000, 0x01000},
{"profile", 0x642000, 0x08000},
{"user-config", 0x650000, 0x10000},
{"default-config", 0x660000, 0x10000},
{"default-nvm", 0x670000, 0xc0000},
{"default-pib", 0x730000, 0x40000},
{"default-mac", 0x7e0000, 0x00020},
{"pin", 0x7e0100, 0x00020},
{"device-id", 0x7e0200, 0x00030},
{"product-info", 0x7e1100, 0x01000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WPA8630P v2.1 (EU)*/
{
.id = "TL-WPA8630P-V2.1-EU",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WPA8630P,product_ver:2.1.0,special_id:45550000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"factory-uboot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0x5e0000},
{"extra-para", 0x680000, 0x01000},
{"product-info", 0x690000, 0x01000},
{"partition-table", 0x6a0000, 0x02000},
{"soft-version", 0x6b0000, 0x01000},
{"support-list", 0x6b1000, 0x01000},
{"profile", 0x6b2000, 0x08000},
{"user-config", 0x6c0000, 0x10000},
{"default-config", 0x6d0000, 0x10000},
{"default-nvm", 0x6e0000, 0xc0000},
{"default-pib", 0x7a0000, 0x40000},
{"default-mac", 0x7e0000, 0x00020},
{"pin", 0x7e0100, 0x00020},
{"device-id", 0x7e0200, 0x00030},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WR1043 v5 */
{
.id = "TLWR1043NV5",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WR1043N,product_ver:5.0.0,special_id:45550000}\n"
"{product_name:TL-WR1043N,product_ver:5.0.0,special_id:55530000}\n",
.part_trail = 0x00,
.soft_ver = "soft_ver:1.0.0\n",
.partitions = {
{"factory-boot", 0x00000, 0x20000},
{"fs-uboot", 0x20000, 0x20000},
{"firmware", 0x40000, 0xec0000},
{"default-mac", 0xf00000, 0x00200},
{"pin", 0xf00200, 0x00200},
{"device-id", 0xf00400, 0x00100},
{"product-info", 0xf00500, 0x0fb00},
{"soft-version", 0xf10000, 0x01000},
{"extra-para", 0xf11000, 0x01000},
{"support-list", 0xf12000, 0x0a000},
{"profile", 0xf1c000, 0x04000},
{"default-config", 0xf20000, 0x10000},
{"user-config", 0xf30000, 0x40000},
{"qos-db", 0xf70000, 0x40000},
{"certificate", 0xfb0000, 0x10000},
{"partition-table", 0xfc0000, 0x10000},
{"log", 0xfd0000, 0x20000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WR1043 v4 */
{
.id = "TLWR1043NDV4",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0xf30000},
{"default-mac", 0xf50000, 0x00200},
{"pin", 0xf50200, 0x00200},
{"product-info", 0xf50400, 0x0fc00},
{"soft-version", 0xf60000, 0x0b000},
{"support-list", 0xf6b000, 0x04000},
{"profile", 0xf70000, 0x04000},
{"default-config", 0xf74000, 0x0b000},
{"user-config", 0xf80000, 0x40000},
{"partition-table", 0xfc0000, 0x10000},
{"log", 0xfd0000, 0x20000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the TL-WR902AC v1 */
{
.id = "TL-WR902AC-V1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:TL-WR902AC,product_ver:1.0.0,special_id:45550000}\n"
"{product_name:TL-WR902AC,product_ver:1.0.0,special_id:55530000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
/**
384KB were moved from file-system to os-image
in comparison to the stock image
*/
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x730000},
{"default-mac", 0x750000, 0x00200},
{"pin", 0x750200, 0x00200},
{"product-info", 0x750400, 0x0fc00},
{"soft-version", 0x760000, 0x0b000},
{"support-list", 0x76b000, 0x04000},
{"profile", 0x770000, 0x04000},
{"default-config", 0x774000, 0x0b000},
{"user-config", 0x780000, 0x40000},
{"partition-table", 0x7c0000, 0x10000},
{"log", 0x7d0000, 0x20000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ar71xx: add support for TP-Link TL-WR942N v1 TP-Link TL-WR942N v1 is a 2.4 GHz single-band N450 router, based on Qualcomm/Atheros QCA9561. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 5x 10/100 Mbps Ethernet - 2x USB 2.0 - 11x LED (most are controlled by 74HC595) - 2x button - UART header on PCB* * Serial console is disabled in OEM non-beta firmwares and corresponding GPIO pins 14 and 15 are assigned to control USB1 and USB2 LEDs by production (non-beta) U-Boot and firmware. Currently not working: 1. USB1 and USB2 LEDs if UART RX and TX pins are assigned to their GPIOs by some U-Boot versions. Flash instruction under vendor GUI: 1. Download "lede-ar71xx-generic-tl-wr942n-v1-squashfs-factory.bin". 2. Go to WEB interface and perform usual firmware upgrade. FLash instruction under U-Boot recovery mode (doesn't work in beta firmware): 1. Setup PC with static IP "192.168.0.66/24" and tftp server. 2. Change "*-factory" image filename to "WR942v1_recovery.bin" and make it available to download from your tftp server. 3. Press "reset" button and power up the router, wait till "WPS" LED turns on. Flash instruction under U-Boot, using UART (can be done only with preinstalled UART-enabled U-Boot version!): 1. Use "tpl" to stop autobooting and obtain U-Boot CLI access. 2. Setup ip addresses for U-Boot and your tftp server. 3. Issue below commands: tftp 0x81000000 lede-ar71xx-generic-tl-wr942n-v1-sysupgrade.bin erase 0x9f020000 +$filesize cp.b 0x81000000 0x9f020000 $filesize reset Signed-off-by: Serg Studzinskii <serguzhg@gmail.com> [minor code style fixes, extended commit message] Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
2017-03-08 21:10:05 +01:00
/** Firmware layout for the TL-WR942N V1 */
{
.id = "TLWR942NV1",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:TL-WR942N,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:TL-WR942N,product_ver:1.0.0,special_id:52550000}\r\n",
.part_trail = 0x00,
ar71xx: add support for TP-Link TL-WR942N v1 TP-Link TL-WR942N v1 is a 2.4 GHz single-band N450 router, based on Qualcomm/Atheros QCA9561. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 5x 10/100 Mbps Ethernet - 2x USB 2.0 - 11x LED (most are controlled by 74HC595) - 2x button - UART header on PCB* * Serial console is disabled in OEM non-beta firmwares and corresponding GPIO pins 14 and 15 are assigned to control USB1 and USB2 LEDs by production (non-beta) U-Boot and firmware. Currently not working: 1. USB1 and USB2 LEDs if UART RX and TX pins are assigned to their GPIOs by some U-Boot versions. Flash instruction under vendor GUI: 1. Download "lede-ar71xx-generic-tl-wr942n-v1-squashfs-factory.bin". 2. Go to WEB interface and perform usual firmware upgrade. FLash instruction under U-Boot recovery mode (doesn't work in beta firmware): 1. Setup PC with static IP "192.168.0.66/24" and tftp server. 2. Change "*-factory" image filename to "WR942v1_recovery.bin" and make it available to download from your tftp server. 3. Press "reset" button and power up the router, wait till "WPS" LED turns on. Flash instruction under U-Boot, using UART (can be done only with preinstalled UART-enabled U-Boot version!): 1. Use "tpl" to stop autobooting and obtain U-Boot CLI access. 2. Setup ip addresses for U-Boot and your tftp server. 3. Issue below commands: tftp 0x81000000 lede-ar71xx-generic-tl-wr942n-v1-sysupgrade.bin erase 0x9f020000 +$filesize cp.b 0x81000000 0x9f020000 $filesize reset Signed-off-by: Serg Studzinskii <serguzhg@gmail.com> [minor code style fixes, extended commit message] Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
2017-03-08 21:10:05 +01:00
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0xe20000},
ar71xx: add support for TP-Link TL-WR942N v1 TP-Link TL-WR942N v1 is a 2.4 GHz single-band N450 router, based on Qualcomm/Atheros QCA9561. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 128 MB of RAM (DDR2) - 16 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 5x 10/100 Mbps Ethernet - 2x USB 2.0 - 11x LED (most are controlled by 74HC595) - 2x button - UART header on PCB* * Serial console is disabled in OEM non-beta firmwares and corresponding GPIO pins 14 and 15 are assigned to control USB1 and USB2 LEDs by production (non-beta) U-Boot and firmware. Currently not working: 1. USB1 and USB2 LEDs if UART RX and TX pins are assigned to their GPIOs by some U-Boot versions. Flash instruction under vendor GUI: 1. Download "lede-ar71xx-generic-tl-wr942n-v1-squashfs-factory.bin". 2. Go to WEB interface and perform usual firmware upgrade. FLash instruction under U-Boot recovery mode (doesn't work in beta firmware): 1. Setup PC with static IP "192.168.0.66/24" and tftp server. 2. Change "*-factory" image filename to "WR942v1_recovery.bin" and make it available to download from your tftp server. 3. Press "reset" button and power up the router, wait till "WPS" LED turns on. Flash instruction under U-Boot, using UART (can be done only with preinstalled UART-enabled U-Boot version!): 1. Use "tpl" to stop autobooting and obtain U-Boot CLI access. 2. Setup ip addresses for U-Boot and your tftp server. 3. Issue below commands: tftp 0x81000000 lede-ar71xx-generic-tl-wr942n-v1-sysupgrade.bin erase 0x9f020000 +$filesize cp.b 0x81000000 0x9f020000 $filesize reset Signed-off-by: Serg Studzinskii <serguzhg@gmail.com> [minor code style fixes, extended commit message] Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
2017-03-08 21:10:05 +01:00
{"default-mac", 0xe40000, 0x00200},
{"pin", 0xe40200, 0x00200},
{"product-info", 0xe40400, 0x0fc00},
{"partition-table", 0xe50000, 0x10000},
{"soft-version", 0xe60000, 0x10000},
{"support-list", 0xe70000, 0x10000},
{"profile", 0xe80000, 0x10000},
{"default-config", 0xe90000, 0x10000},
{"user-config", 0xea0000, 0x40000},
{"qos-db", 0xee0000, 0x40000},
{"certificate", 0xf20000, 0x10000},
{"usb-config", 0xfb0000, 0x10000},
{"log", 0xfc0000, 0x20000},
{"radio-bk", 0xfe0000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system",
},
ramips: add support for TP-Link RE200 v2 TP-Link RE200 v2 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN. Specifications -------------- - MediaTek MT7628AN (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), 2x button There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- The MAC address assignment matches stock firmware, i.e.: LAN : *:0D 2.4G: *:0E 5G : *:0F Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. 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. Additonal notes --------------- It is possible to flash back to stock by using tplink-safeloader to create a sysupgrade image based on a stock update. After the first boot, it is necessary upgrade to another stock image, otherwise subsequent boots fail with LZMA ERROR 1 and you have to attach serial to recover the device. Signed-off-by: Andreas Böhler <dev@aboehler.at> [remove DEVICE_VARS change] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-01-28 16:17:41 +01:00
/** Firmware layout for the RE200 v2 */
{
.id = "RE200-V2",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE200,product_ver:2.0.0,special_id:00000000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:41520000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:41550000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:42520000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:43410000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:45530000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:45550000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:49440000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:4a500000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:4b520000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:52550000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:54570000}\n"
"{product_name:RE200,product_ver:2.0.0,special_id:55530000}\n",
.part_trail = 0x00,
ramips: add support for TP-Link RE200 v2 TP-Link RE200 v2 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN. Specifications -------------- - MediaTek MT7628AN (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), 2x button There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- The MAC address assignment matches stock firmware, i.e.: LAN : *:0D 2.4G: *:0E 5G : *:0F Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. 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. Additonal notes --------------- It is possible to flash back to stock by using tplink-safeloader to create a sysupgrade image based on a stock update. After the first boot, it is necessary upgrade to another stock image, otherwise subsequent boots fail with LZMA ERROR 1 and you have to attach serial to recover the device. Signed-off-by: Andreas Böhler <dev@aboehler.at> [remove DEVICE_VARS change] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-01-28 16:17:41 +01:00
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x7a0000},
{"partition-table", 0x7c0000, 0x02000},
{"default-mac", 0x7c2000, 0x00020},
{"pin", 0x7c2100, 0x00020},
{"product-info", 0x7c3100, 0x01000},
{"soft-version", 0x7c4200, 0x01000},
{"support-list", 0x7c5200, 0x01000},
{"profile", 0x7c6200, 0x08000},
{"config-info", 0x7ce200, 0x00400},
{"user-config", 0x7d0000, 0x10000},
{"default-config", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
ramips: add support for TP-Link RE200 v3 TP-Link RE200 v3 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN like the v2. Specifications -------------- - MediaTek MT7628AN (580 Mhz) - 64 MB of RAM - 8 MB of FLASH - 2T2R 2.4 GHz and 1T1R 5 GHz - 1x 10/100 Mbps Ethernet - 8x LED (GPIO-controlled), 2x button Unverified: - UART header on PCB (57600 8n1) There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- MAC address assignment has been done according to the RE200 v2. The label MAC address matches the OpenWrt ethernet address. Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. Recovery -------- 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. The device has not been opened for adding support. However, it is expected that the behavior is similar to the RE200 v2. Instructions for serial console and recovery may be checked out in commit 6d6f36ae787c ("ramips: add support for TP-Link RE200 v2") or on the device's Wiki page. Signed-off-by: Richard Fröhning <misanthropos@gmx.de> [adjust commit title/message, sort support list] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-08-02 16:22:50 +02:00
/** Firmware layout for the RE200 v3 */
{
.id = "RE200-V3",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE200,product_ver:3.0.0,special_id:00000000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:41520000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:41550000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:42520000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:43410000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:45470000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:45530000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:45550000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:49440000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:4A500000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:4B520000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:52550000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:54570000}\n"
"{product_name:RE200,product_ver:3.0.0,special_id:55530000}\n",
.part_trail = 0x00,
ramips: add support for TP-Link RE200 v3 TP-Link RE200 v3 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN like the v2. Specifications -------------- - MediaTek MT7628AN (580 Mhz) - 64 MB of RAM - 8 MB of FLASH - 2T2R 2.4 GHz and 1T1R 5 GHz - 1x 10/100 Mbps Ethernet - 8x LED (GPIO-controlled), 2x button Unverified: - UART header on PCB (57600 8n1) There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- MAC address assignment has been done according to the RE200 v2. The label MAC address matches the OpenWrt ethernet address. Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. Recovery -------- 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. The device has not been opened for adding support. However, it is expected that the behavior is similar to the RE200 v2. Instructions for serial console and recovery may be checked out in commit 6d6f36ae787c ("ramips: add support for TP-Link RE200 v2") or on the device's Wiki page. Signed-off-by: Richard Fröhning <misanthropos@gmx.de> [adjust commit title/message, sort support list] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-08-02 16:22:50 +02:00
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x7a0000},
{"partition-table", 0x7c0000, 0x02000},
{"default-mac", 0x7c2000, 0x00020},
{"pin", 0x7c2100, 0x00020},
{"product-info", 0x7c3100, 0x01000},
{"soft-version", 0x7c4200, 0x01000},
{"support-list", 0x7c5200, 0x01000},
{"profile", 0x7c6200, 0x08000},
{"config-info", 0x7ce200, 0x00400},
{"user-config", 0x7d0000, 0x10000},
{"default-config", 0x7e0000, 0x10000},
2020-08-17 13:14:39 +02:00
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE200 v4 */
{
.id = "RE200-V4",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE200,product_ver:4.0.0,special_id:00000000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:45550000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:4A500000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:4B520000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:43410000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:41550000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:42520000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:55530000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:41520000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:52550000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:54570000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:45530000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:49440000}\n"
"{product_name:RE200,product_ver:4.0.0,special_id:45470000}\n",
.part_trail = 0x00,
2020-08-17 13:14:39 +02:00
.soft_ver = "soft_ver:1.1.0\n",
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x7a0000},
{"partition-table", 0x7c0000, 0x02000},
{"default-mac", 0x7c2000, 0x00020},
{"pin", 0x7c2100, 0x00020},
{"product-info", 0x7c3100, 0x01000},
{"soft-version", 0x7c4200, 0x01000},
{"support-list", 0x7c5200, 0x01000},
{"profile", 0x7c6200, 0x08000},
{"config-info", 0x7ce200, 0x00400},
{"user-config", 0x7d0000, 0x10000},
{"default-config", 0x7e0000, 0x10000},
ramips: add support for TP-Link RE200 v3 TP-Link RE200 v3 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN like the v2. Specifications -------------- - MediaTek MT7628AN (580 Mhz) - 64 MB of RAM - 8 MB of FLASH - 2T2R 2.4 GHz and 1T1R 5 GHz - 1x 10/100 Mbps Ethernet - 8x LED (GPIO-controlled), 2x button Unverified: - UART header on PCB (57600 8n1) There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- MAC address assignment has been done according to the RE200 v2. The label MAC address matches the OpenWrt ethernet address. Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. Recovery -------- 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. The device has not been opened for adding support. However, it is expected that the behavior is similar to the RE200 v2. Instructions for serial console and recovery may be checked out in commit 6d6f36ae787c ("ramips: add support for TP-Link RE200 v2") or on the device's Wiki page. Signed-off-by: Richard Fröhning <misanthropos@gmx.de> [adjust commit title/message, sort support list] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-08-02 16:22:50 +02:00
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE220 v2 */
{
.id = "RE220-V2",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE220,product_ver:2.0.0,special_id:00000000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:41520000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:41550000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:42520000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:43410000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:45530000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:45550000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:49440000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:4a500000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:4b520000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:52550000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:54570000}\n"
"{product_name:RE220,product_ver:2.0.0,special_id:55530000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
ramips: add support for TP-Link RE200 v2 TP-Link RE200 v2 is a wireless range extender with Ethernet and 2.4G and 5G WiFi with internal antennas. It's based on MediaTek MT7628AN+MT7610EN. Specifications -------------- - MediaTek MT7628AN (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), 2x button There are 2.4G and 5G LEDs in red and green which are controlled separately. MAC addresses ------------- The MAC address assignment matches stock firmware, i.e.: LAN : *:0D 2.4G: *:0E 5G : *:0F Installation ------------ Web Interface ------------- It is possible to upgrade to OpenWrt via the web interface. Simply flash the -factory.bin from OEM. In contrast to a stock firmware, this will not overwrite U-Boot. 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. Additonal notes --------------- It is possible to flash back to stock by using tplink-safeloader to create a sysupgrade image based on a stock update. After the first boot, it is necessary upgrade to another stock image, otherwise subsequent boots fail with LZMA ERROR 1 and you have to attach serial to recover the device. Signed-off-by: Andreas Böhler <dev@aboehler.at> [remove DEVICE_VARS change] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-01-28 16:17:41 +01:00
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x7a0000},
{"partition-table", 0x7c0000, 0x02000},
{"default-mac", 0x7c2000, 0x00020},
{"pin", 0x7c2100, 0x00020},
{"product-info", 0x7c3100, 0x01000},
{"soft-version", 0x7c4200, 0x01000},
{"support-list", 0x7c5200, 0x01000},
{"profile", 0x7c6200, 0x08000},
{"config-info", 0x7ce200, 0x00400},
{"user-config", 0x7d0000, 0x10000},
{"default-config", 0x7e0000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE305 v1 */
{
.id = "RE305-V1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE305,product_ver:1.0.0,special_id:45550000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:55530000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:4a500000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:42520000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:4b520000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:41550000}\n"
"{product_name:RE305,product_ver:1.0.0,special_id:43410000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x5e0000},
{"partition-table", 0x600000, 0x02000},
{"default-mac", 0x610000, 0x00020},
{"pin", 0x610100, 0x00020},
{"product-info", 0x611100, 0x01000},
{"soft-version", 0x620000, 0x01000},
{"support-list", 0x621000, 0x01000},
{"profile", 0x622000, 0x08000},
{"user-config", 0x630000, 0x10000},
{"default-config", 0x640000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE350 v1 */
{
.id = "RE350-V1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE350,product_ver:1.0.0,special_id:45550000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:00000000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:41550000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:55530000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:43410000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:4b520000}\n"
"{product_name:RE350,product_ver:1.0.0,special_id:4a500000}\n",
.part_trail = 0x00,
.soft_ver = NULL,
/** We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x5e0000},
{"partition-table", 0x600000, 0x02000},
{"default-mac", 0x610000, 0x00020},
{"pin", 0x610100, 0x00020},
{"product-info", 0x611100, 0x01000},
{"soft-version", 0x620000, 0x01000},
{"support-list", 0x621000, 0x01000},
{"profile", 0x622000, 0x08000},
{"user-config", 0x630000, 0x10000},
{"default-config", 0x640000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE350K v1 */
{
.id = "RE350K-V1",
.vendor = "",
.support_list =
"SupportList:\n"
"{product_name:RE350K,product_ver:1.0.0,special_id:00000000,product_region:US}\n",
.part_trail = 0x00,
.soft_ver = NULL,
/** We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0xd70000},
{"partition-table", 0xd90000, 0x02000},
{"default-mac", 0xda0000, 0x00020},
{"pin", 0xda0100, 0x00020},
{"product-info", 0xda1100, 0x01000},
{"soft-version", 0xdb0000, 0x01000},
{"support-list", 0xdb1000, 0x01000},
{"profile", 0xdb2000, 0x08000},
{"user-config", 0xdc0000, 0x10000},
{"default-config", 0xdd0000, 0x10000},
{"device-id", 0xde0000, 0x00108},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE355 */
{
.id = "RE355",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:55530000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:4A500000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:43410000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:41550000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:4B520000}\r\n"
"{product_name:RE355,product_ver:1.0.0,special_id:55534100}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x5e0000},
{"partition-table", 0x600000, 0x02000},
{"default-mac", 0x610000, 0x00020},
{"pin", 0x610100, 0x00020},
{"product-info", 0x611100, 0x01000},
{"soft-version", 0x620000, 0x01000},
{"support-list", 0x621000, 0x01000},
{"profile", 0x622000, 0x08000},
{"user-config", 0x630000, 0x10000},
{"default-config", 0x640000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE450 */
{
.id = "RE450",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:55530000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:4A500000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:43410000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:41550000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:4B520000}\r\n"
"{product_name:RE450,product_ver:1.0.0,special_id:55534100}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/** We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x5e0000},
{"partition-table", 0x600000, 0x02000},
{"default-mac", 0x610000, 0x00020},
{"pin", 0x610100, 0x00020},
{"product-info", 0x611100, 0x01000},
{"soft-version", 0x620000, 0x01000},
{"support-list", 0x621000, 0x01000},
{"profile", 0x622000, 0x08000},
{"user-config", 0x630000, 0x10000},
{"default-config", 0x640000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE450 v2 */
{
.id = "RE450-V2",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:00000000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:55530000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:45550000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:4A500000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:43410000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:41550000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:41530000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:4B520000}\r\n"
"{product_name:RE450,product_ver:2.0.0,special_id:42520000}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0x5e0000},
{"partition-table", 0x600000, 0x02000},
{"default-mac", 0x610000, 0x00020},
{"pin", 0x610100, 0x00020},
{"product-info", 0x611100, 0x01000},
{"soft-version", 0x620000, 0x01000},
{"support-list", 0x621000, 0x01000},
{"profile", 0x622000, 0x08000},
{"user-config", 0x630000, 0x10000},
{"default-config", 0x640000, 0x10000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE450 v3 */
{
.id = "RE450-V3",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:00000000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:55530000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:45550000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:4A500000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:43410000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:41550000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:41530000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:4B520000}\r\n"
"{product_name:RE450,product_ver:3.0.0,special_id:42520000}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"default-mac", 0x20000, 0x00020},
{"pin", 0x20020, 0x00020},
{"product-info", 0x21000, 0x01000},
{"partition-table", 0x22000, 0x02000},
{"soft-version", 0x24000, 0x01000},
{"support-list", 0x25000, 0x01000},
{"profile", 0x26000, 0x08000},
{"user-config", 0x2e000, 0x10000},
{"default-config", 0x3e000, 0x10000},
{"config-info", 0x4e000, 0x00400},
{"firmware", 0x50000, 0x7a0000},
{"radio", 0x7f0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
/** Firmware layout for the RE500 */
{
.id = "RE500-V1",
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:55530000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:4A500000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:43410000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:41550000}\r\n"
"{product_name:RE500,product_ver:1.0.0,special_id:41530000}\r\n",
.part_trail = 0x00,
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0xde0000},
{"partition-table", 0xe00000, 0x02000},
{"default-mac", 0xe10000, 0x00020},
{"pin", 0xe10100, 0x00020},
{"product-info", 0xe11100, 0x01000},
{"soft-version", 0xe20000, 0x01000},
{"support-list", 0xe21000, 0x01000},
{"profile", 0xe22000, 0x08000},
{"user-config", 0xe30000, 0x10000},
{"default-config", 0xe40000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
2019-04-17 20:17:45 +02:00
/** Firmware layout for the RE650 */
{
.id = "RE650-V1",
2019-04-17 20:17:45 +02:00
.vendor = "",
.support_list =
"SupportList:\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:00000000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:55530000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:45550000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:4A500000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:43410000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:41550000}\r\n"
"{product_name:RE650,product_ver:1.0.0,special_id:41530000}\r\n",
.part_trail = 0x00,
2019-04-17 20:17:45 +02:00
.soft_ver = NULL,
/* We're using a dynamic kernel/rootfs split here */
.partitions = {
{"fs-uboot", 0x00000, 0x20000},
{"firmware", 0x20000, 0xde0000},
{"partition-table", 0xe00000, 0x02000},
{"default-mac", 0xe10000, 0x00020},
{"pin", 0xe10100, 0x00020},
{"product-info", 0xe11100, 0x01000},
{"soft-version", 0xe20000, 0x01000},
{"support-list", 0xe21000, 0x01000},
{"profile", 0xe22000, 0x08000},
{"user-config", 0xe30000, 0x10000},
{"default-config", 0xe40000, 0x10000},
{"radio", 0xff0000, 0x10000},
{NULL, 0, 0}
},
.first_sysupgrade_partition = "os-image",
.last_sysupgrade_partition = "file-system"
},
{}
};
#define error(_ret, _errno, _str, ...) \
do { \
fprintf(stderr, _str ": %s\n", ## __VA_ARGS__, \
strerror(_errno)); \
if (_ret) \
exit(_ret); \
} while (0)
/** Stores a uint32 as big endian */
static inline void put32(uint8_t *buf, uint32_t val) {
buf[0] = val >> 24;
buf[1] = val >> 16;
buf[2] = val >> 8;
buf[3] = val;
}
static inline bool meta_partition_should_pad(enum partition_trail_value pv)
{
return (pv >= 0) && (pv <= PART_TRAIL_MAX);
}
/** Allocate a padded meta partition with a correctly initialised header
* If the `data` pointer is NULL, then the required space is only allocated,
* otherwise `data_len` bytes will be copied from `data` into the partition
* entry. */
static struct image_partition_entry init_meta_partition_entry(
const char *name, const void *data, uint32_t data_len,
enum partition_trail_value pad_value)
{
uint32_t total_len = sizeof(struct meta_header) + data_len;
if (meta_partition_should_pad(pad_value))
total_len += 1;
struct image_partition_entry entry = {
.name = name,
.size = total_len,
.data = malloc(total_len)
};
if (!entry.data)
error(1, errno, "failed to allocate meta partition entry");
struct meta_header *header = (struct meta_header *)entry.data;
header->length = htonl(data_len);
header->zero = 0;
if (data)
memcpy(entry.data+sizeof(*header), data, data_len);
if (meta_partition_should_pad(pad_value))
entry.data[total_len - 1] = (uint8_t) pad_value;
return entry;
}
/** Allocates a new image partition */
static struct image_partition_entry alloc_image_partition(const char *name, size_t len) {
struct image_partition_entry entry = {name, len, malloc(len)};
if (!entry.data)
error(1, errno, "malloc");
return entry;
}
/** Frees an image partition */
static void free_image_partition(struct image_partition_entry entry) {
free(entry.data);
}
static time_t source_date_epoch = -1;
static void set_source_date_epoch() {
char *env = getenv("SOURCE_DATE_EPOCH");
char *endptr = env;
errno = 0;
if (env && *env) {
source_date_epoch = strtoull(env, &endptr, 10);
if (errno || (endptr && *endptr != '\0')) {
fprintf(stderr, "Invalid SOURCE_DATE_EPOCH");
exit(1);
}
}
}
/** Generates the partition-table partition */
static struct image_partition_entry make_partition_table(const struct flash_partition_entry *p) {
struct image_partition_entry entry = alloc_image_partition("partition-table", 0x800);
char *s = (char *)entry.data, *end = (char *)(s+entry.size);
*(s++) = 0x00;
*(s++) = 0x04;
*(s++) = 0x00;
*(s++) = 0x00;
size_t i;
for (i = 0; p[i].name; i++) {
size_t len = end-s;
size_t w = snprintf(s, len, "partition %s base 0x%05x size 0x%05x\n", p[i].name, p[i].base, p[i].size);
if (w > len-1)
error(1, 0, "flash partition table overflow?");
s += w;
}
s++;
memset(s, 0xff, end-s);
return entry;
}
/** Generates a binary-coded decimal representation of an integer in the range [0, 99] */
static inline uint8_t bcd(uint8_t v) {
return 0x10 * (v/10) + v%10;
}
/** Generates the soft-version partition */
static struct image_partition_entry make_soft_version(
const struct device_info *info, uint32_t rev)
{
/** If an info string is provided, use this instead of
* the structured data, and include the null-termination */
if (info->soft_ver) {
uint32_t len = strlen(info->soft_ver) + 1;
return init_meta_partition_entry("soft-version",
info->soft_ver, len, info->part_trail);
}
time_t t;
if (source_date_epoch != -1)
t = source_date_epoch;
else if (time(&t) == (time_t)(-1))
error(1, errno, "time");
struct tm *tm = gmtime(&t);
struct soft_version s = {
.pad1 = 0xff,
.version_major = 0,
.version_minor = 0,
.version_patch = 0,
.year_hi = bcd((1900+tm->tm_year)/100),
.year_lo = bcd(tm->tm_year%100),
.month = bcd(tm->tm_mon+1),
.day = bcd(tm->tm_mday),
.compat_level = htonl(info->soft_ver_compat_level)
};
if (info->soft_ver_compat_level == 0)
return init_meta_partition_entry("soft-version", &s,
(uint8_t *)(&s.compat_level) - (uint8_t *)(&s),
info->part_trail);
else
return init_meta_partition_entry("soft-version", &s,
sizeof(s), info->part_trail);
}
/** Generates the support-list partition */
static struct image_partition_entry make_support_list(
const struct device_info *info)
{
uint32_t len = strlen(info->support_list);
return init_meta_partition_entry("support-list", info->support_list,
len, info->part_trail);
}
/** Partition with extra-para data */
static struct image_partition_entry make_extra_para(
const struct device_info *info, const uint8_t *extra_para, size_t len)
{
return init_meta_partition_entry("extra-para", extra_para, len,
info->part_trail);
}
/** Creates a new image partition with an arbitrary name from a file */
static struct image_partition_entry read_file(const char *part_name, const char *filename, bool add_jffs2_eof, struct flash_partition_entry *file_system_partition) {
struct stat statbuf;
if (stat(filename, &statbuf) < 0)
error(1, errno, "unable to stat file `%s'", filename);
size_t len = statbuf.st_size;
if (add_jffs2_eof) {
if (file_system_partition)
len = ALIGN(len + file_system_partition->base, 0x10000) + sizeof(jffs2_eof_mark) - file_system_partition->base;
else
len = ALIGN(len, 0x10000) + sizeof(jffs2_eof_mark);
}
struct image_partition_entry entry = alloc_image_partition(part_name, len);
FILE *file = fopen(filename, "rb");
if (!file)
error(1, errno, "unable to open file `%s'", filename);
if (fread(entry.data, statbuf.st_size, 1, file) != 1)
error(1, errno, "unable to read file `%s'", filename);
if (add_jffs2_eof) {
uint8_t *eof = entry.data + statbuf.st_size, *end = entry.data+entry.size;
memset(eof, 0xff, end - eof - sizeof(jffs2_eof_mark));
memcpy(end - sizeof(jffs2_eof_mark), jffs2_eof_mark, sizeof(jffs2_eof_mark));
}
fclose(file);
return entry;
}
/**
Copies a list of image partitions into an image buffer and generates the image partition table while doing so
Example image partition table:
fwup-ptn partition-table base 0x00800 size 0x00800
fwup-ptn os-image base 0x01000 size 0x113b45
fwup-ptn file-system base 0x114b45 size 0x1d0004
fwup-ptn support-list base 0x2e4b49 size 0x000d1
Each line of the partition table is terminated with the bytes 09 0d 0a ("\t\r\n"),
the end of the partition table is marked with a zero byte.
The firmware image must contain at least the partition-table and support-list partitions
to be accepted. There aren't any alignment constraints for the image partitions.
The partition-table partition contains the actual flash layout; partitions
from the image partition table are mapped to the corresponding flash partitions during
the firmware upgrade. The support-list partition contains a list of devices supported by
the firmware image.
The base offsets in the firmware partition table are relative to the end
of the vendor information block, so the partition-table partition will
actually start at offset 0x1814 of the image.
I think partition-table must be the first partition in the firmware image.
*/
static void put_partitions(uint8_t *buffer, const struct flash_partition_entry *flash_parts, const struct image_partition_entry *parts) {
size_t i, j;
char *image_pt = (char *)buffer, *end = image_pt + 0x800;
size_t base = 0x800;
for (i = 0; parts[i].name; i++) {
for (j = 0; flash_parts[j].name; j++) {
if (!strcmp(flash_parts[j].name, parts[i].name)) {
if (parts[i].size > flash_parts[j].size)
error(1, 0, "%s partition too big (more than %u bytes)", flash_parts[j].name, (unsigned)flash_parts[j].size);
break;
}
}
assert(flash_parts[j].name);
memcpy(buffer + base, parts[i].data, parts[i].size);
size_t len = end-image_pt;
size_t w = snprintf(image_pt, len, "fwup-ptn %s base 0x%05x size 0x%05x\t\r\n", parts[i].name, (unsigned)base, (unsigned)parts[i].size);
if (w > len-1)
error(1, 0, "image partition table overflow?");
image_pt += w;
base += parts[i].size;
}
}
/** Generates and writes the image MD5 checksum */
static void put_md5(uint8_t *md5, uint8_t *buffer, unsigned int len) {
MD5_CTX ctx;
MD5_Init(&ctx);
MD5_Update(&ctx, md5_salt, (unsigned int)sizeof(md5_salt));
MD5_Update(&ctx, buffer, len);
MD5_Final(md5, &ctx);
}
/**
Generates the firmware image in factory format
Image format:
Bytes (hex) Usage
----------- -----
0000-0003 Image size (4 bytes, big endian)
0004-0013 MD5 hash (hash of a 16 byte salt and the image data starting with byte 0x14)
0014-0017 Vendor information length (without padding) (4 bytes, big endian)
0018-1013 Vendor information (4092 bytes, padded with 0xff; there seem to be older
(VxWorks-based) TP-LINK devices which use a smaller vendor information block)
1014-1813 Image partition table (2048 bytes, padded with 0xff)
1814-xxxx Firmware partitions
*/
static void * generate_factory_image(struct device_info *info, const struct image_partition_entry *parts, size_t *len) {
*len = 0x1814;
size_t i;
for (i = 0; parts[i].name; i++)
*len += parts[i].size;
uint8_t *image = malloc(*len);
if (!image)
error(1, errno, "malloc");
memset(image, 0xff, *len);
put32(image, *len);
if (info->vendor) {
size_t vendor_len = strlen(info->vendor);
put32(image+0x14, vendor_len);
memcpy(image+0x18, info->vendor, vendor_len);
}
put_partitions(image + 0x1014, info->partitions, parts);
put_md5(image+0x04, image+0x14, *len-0x14);
return image;
}
/**
Generates the firmware image in sysupgrade format
This makes some assumptions about the provided flash and image partition tables and
should be generalized when TP-LINK starts building its safeloader into hardware with
different flash layouts.
*/
static void * generate_sysupgrade_image(struct device_info *info, const struct image_partition_entry *image_parts, size_t *len) {
size_t i, j;
size_t flash_first_partition_index = 0;
size_t flash_last_partition_index = 0;
const struct flash_partition_entry *flash_first_partition = NULL;
const struct flash_partition_entry *flash_last_partition = NULL;
const struct image_partition_entry *image_last_partition = NULL;
/** Find first and last partitions */
for (i = 0; info->partitions[i].name; i++) {
if (!strcmp(info->partitions[i].name, info->first_sysupgrade_partition)) {
flash_first_partition = &info->partitions[i];
flash_first_partition_index = i;
} else if (!strcmp(info->partitions[i].name, info->last_sysupgrade_partition)) {
flash_last_partition = &info->partitions[i];
flash_last_partition_index = i;
}
}
assert(flash_first_partition && flash_last_partition);
assert(flash_first_partition_index < flash_last_partition_index);
/** Find last partition from image to calculate needed size */
for (i = 0; image_parts[i].name; i++) {
if (!strcmp(image_parts[i].name, info->last_sysupgrade_partition)) {
image_last_partition = &image_parts[i];
break;
}
}
assert(image_last_partition);
*len = flash_last_partition->base - flash_first_partition->base + image_last_partition->size;
uint8_t *image = malloc(*len);
if (!image)
error(1, errno, "malloc");
memset(image, 0xff, *len);
for (i = flash_first_partition_index; i <= flash_last_partition_index; i++) {
for (j = 0; image_parts[j].name; j++) {
if (!strcmp(info->partitions[i].name, image_parts[j].name)) {
if (image_parts[j].size > info->partitions[i].size)
error(1, 0, "%s partition too big (more than %u bytes)", info->partitions[i].name, (unsigned)info->partitions[i].size);
memcpy(image + info->partitions[i].base - flash_first_partition->base, image_parts[j].data, image_parts[j].size);
break;
}
assert(image_parts[j].name);
}
}
return image;
}
/** Generates an image according to a given layout and writes it to a file */
static void build_image(const char *output,
const char *kernel_image,
const char *rootfs_image,
uint32_t rev,
bool add_jffs2_eof,
bool sysupgrade,
struct device_info *info) {
size_t i;
struct image_partition_entry parts[7] = {};
struct flash_partition_entry *firmware_partition = NULL;
struct flash_partition_entry *os_image_partition = NULL;
struct flash_partition_entry *file_system_partition = NULL;
size_t firmware_partition_index = 0;
for (i = 0; info->partitions[i].name; i++) {
if (!strcmp(info->partitions[i].name, "firmware"))
{
firmware_partition = &info->partitions[i];
firmware_partition_index = i;
}
}
if (firmware_partition)
{
os_image_partition = &info->partitions[firmware_partition_index];
file_system_partition = &info->partitions[firmware_partition_index + 1];
struct stat kernel;
if (stat(kernel_image, &kernel) < 0)
error(1, errno, "unable to stat file `%s'", kernel_image);
if (kernel.st_size > firmware_partition->size)
error(1, 0, "kernel overflowed firmware partition\n");
for (i = MAX_PARTITIONS-1; i >= firmware_partition_index + 1; i--)
info->partitions[i+1] = info->partitions[i];
file_system_partition->name = "file-system";
file_system_partition->base = firmware_partition->base + kernel.st_size;
/* Align partition start to erase blocks for factory images only */
if (!sysupgrade)
file_system_partition->base = ALIGN(firmware_partition->base + kernel.st_size, 0x10000);
file_system_partition->size = firmware_partition->size - file_system_partition->base;
os_image_partition->name = "os-image";
os_image_partition->size = kernel.st_size;
}
parts[0] = make_partition_table(info->partitions);
parts[1] = make_soft_version(info, rev);
parts[2] = make_support_list(info);
parts[3] = read_file("os-image", kernel_image, false, NULL);
parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof, file_system_partition);
/* Some devices need the extra-para partition to accept the firmware */
ramips: add support for TP-Link Archer A6 v3 The patch adds support for the TP-Link Archer A6 v3 The router is sold in US and India with FCC ID TE7A6V3 Specification ------------- MediaTek MT7621 SOC RAM: 128MB DDR3 SPI Flash: W25Q128 (16MB) Ethernet: MT7530 5x 1000Base-T WiFi 5GHz: Mediatek MT7613BE WiFi 2.4GHz: Mediatek MT7603E UART/Serial: 115200 8n1 Device Configuration & Serial Port Pins --------------------------------------- ETH Ports: LAN4 LAN3 LAN2 LAN1 WAN _______________________ | | Serial Pins: | VCC GND TXD RXD | |_____________________| LEDs: Power Wifi2G Wifi5G LAN WAN Build Output ------------ The build will generate following set of files [1] openwrt-ramips-mt7621-tplink_archer-a6-v3-initramfs-kernel.bin [2] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-factory.bin [3] openwrt-ramips-mt7621-tplink_archer-a6-v3-squashfs-sysupgrade.bin How to Use - Flashing from TP-Link Web Interface ------------------------------------------------ * Go to "Advanced/System Tools/Firmware Update". * Click "Browse" and upload the OpenWrt factory image: factory.bin[2] * Click the "Upgrade" button, and select "Yes" when prompted. TFTP Booting ------------ Setup a TFTP boot server with address 192.168.0.5. While starting U-boot press '4' key to stop autoboot. Copy the initramfs-kernel.bin[1] to TFTP server folder, rename as test.bin From u-boot command prompt run tftpboot followed by bootm. Recovery -------- Archer A6 V3 has recovery page activated if SPI booting from flash fails. Recovery page can be activated from serial console only. Press 'x' while u-boot is starting Note: TFTP boot can be activated only from u-boot serial console. Device recovery address: 192.168.0.1 Thanks to: Frankis for Randmon MAC address fix. Signed-off-by: Vinay Patil <post2vinay@gmail.com> [remove superfluous factory image definition, whitespacing] Signed-off-by: David Bauer <mail@david-bauer.net>
2021-04-19 03:22:51 +02:00
if (strcasecmp(info->id, "ARCHER-A6-V3") == 0 ||
strcasecmp(info->id, "ARCHER-A7-V5") == 0 ||
strcasecmp(info->id, "ARCHER-C2-V3") == 0 ||
strcasecmp(info->id, "ARCHER-C7-V4") == 0 ||
strcasecmp(info->id, "ARCHER-C7-V5") == 0 ||
strcasecmp(info->id, "ARCHER-C25-V1") == 0 ||
strcasecmp(info->id, "ARCHER-C59-V2") == 0 ||
strcasecmp(info->id, "ARCHER-C60-V2") == 0 ||
ath79: add support for TP-Link Archer C60 v3 TP-Link Archer C60 v3 is a dual-band AC1350 router, based on Qualcomm/Atheros QCA9561 + QCA9886. It seems to be identical to the v2 revision, except that it lacks a WPS LED and has different GPIO for amber WAN LED. Specification: - 775/650/258 MHz (CPU/DDR/AHB) - 64 MB of RAM (DDR2) - 8 MB of FLASH (SPI NOR) - 3T3R 2.4 GHz - 2T2R 5 GHz - 5x 10/100 Mbps Ethernet - 6x LED, 2x button - UART header on PCB Flash instruction (WebUI): Download *-factory.bin image and upload it via the firmwary upgrade function of the stock firmware WebUI. Flash instruction (TFTP): 1. Set PC to fixed IP address 192.168.0.66 2. Download *-factory.bin image and rename it to tp_recovery.bin 3. Start a tftp server with the file tp_recovery.bin in its root directory 4. Turn off the router 5. Press and hold reset button 6. Turn on router with the reset button pressed and wait ~15 seconds 7. Release the reset button and after a short time the firmware should be transferred from the tftp server 8. Wait ~30 second to complete recovery While TFTP works for OpenWrt images, my device didn't accept the only available official firmware "Archer C60(EU)_V3.0_190115.bin". In contrast to earlier revisions (v2), the v3 contains the (same) MAC address twice, once in 0x1fa08 and again in 0x1fb08. While the partition-table on the device refers to the latter, the firmware image contains a different partition-table for that region: name device firmware factory-boot 0x00000-0x1fb00 0x00000-0x1fa00 default-mac 0x1fb00-0x1fd00 0x1fa00-0x1fc00 pin 0x1fd00-0x1fe00 0x1fc00-0x1fd00 product-info 0x1fe00-0x1ff00 0x1fd00-0x1ff00 device-id 0x1ff00-0x20000 0x1ff00-0x20000 While the MAC address is present twice, other data like the PIN isn't, so with the partitioning from the firmware image the PIN on the device would actually be outside of its partition. Consequently, the patch uses the MAC location from the device (which is the same as for the v2). Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2020-02-12 14:43:15 +01:00
strcasecmp(info->id, "ARCHER-C60-V3") == 0 ||
ramips: add support for TP-Link Archer C6U v1 (EU) This patch adds support for TP-Link Archer C6U v1 (EU). The device is also known in some market as Archer C6 v3. This patch supports only Archer C6U v1 (EU). Specifications: -------------- * SoC: Mediatek MT7621AT 2C2T, 880MHz * RAM: 128MB DDR3 * Flash: 16MB SPI NOR flash (Winbond 25Q128) * WiFi 5GHz: Mediatek MT7613BEN (2x2:2) * WiFi 2.4GHz: Mediatek MT7603EN (2x2:2) * Ethernet: MT7630, 5x 1000Base-T. * LED: Power, WAN, LAN, WiFi 2GHz and 5GHz, USB * Buttons: Reset, WPS. * UART: Serial console (115200 8n1), J1(GND:3) * USB: One USB2 port. Installation: ------------ Install the OpenWrt factory image for C6U is from the TP-Link web interface. 1) Go to "Advanced/System Tools/Firmware Update". 2) Click "Browse" and upload the OpenWrt factory image: openwrt-ramips-mt7621-tplink_archer-c6u-v1-squashfs-factory.bin. 3) Click the "Upgrade" button, and select "Yes" when prompted. Recovery to stock firmware: -------------------------- The C6U bootloader has a failsafe mode that provides a web interface (running at 192.168.0.1) for reverting back to the stock TP-Link firmware. The failsafe interface is triggered from the serial console or on failed kernel boot. Unfortunately, there's no key combination that enables the failsafe mode. This gives us two options for recovery: 1) Recover using the serial console (J1 header). The recovery interface can be selected by hitting 'x' when prompted on boot. 2) Trigger the bootloader failsafe mode. A more dangerous option is force the bootloader into recovery mode by erasing the OpenWrt partition from the OpenWrt's shell - e.g "mtd erase firmware". Please be careful, since erasing the wrong partition can brick your device. MAC addresses: ------------- OEM firmware configuration: D8:07:B6:xx:xx:83 : 5G D8:07:B6:xx:xx:84 : LAN (label) D8:07:B6:xx:xx:84 : 2.4G D8:07:B6:xx:xx:85 : WAN Signed-off-by: Georgi Vlaev <georgi.vlaev@konsulko.com>
2020-07-31 13:02:21 +02:00
strcasecmp(info->id, "ARCHER-C6U-V1") == 0 ||
ramips: add support for TP-Link Archer C6 v3 The patch adds support for the TP-Link Archer C6 v3 (FCC ID TE7A6V3) The patch adds identification changes to the existing TP-Link Archer A6, by Vinay Patil <post2vinay@gmail.com>, which has identical hardware. Specification ------------- MediaTek MT7621 SOC RAM: 128MB DDR3 SPI Flash: W25Q128 (16MB) Ethernet: MT7530 5x 1000Base-T WiFi 5GHz: Mediatek MT7613BE WiFi 2.4GHz: Mediatek MT7603E UART/Serial: 115200 8n1 Device Configuration & Serial Port Pins --------------------------------------- ETH Ports: LAN4 LAN3 LAN2 LAN1 WAN _______________________ | | Serial Pins: | VCC GND TXD RXD | |_____________________| LEDs: Power Wifi2G Wifi5G LAN WAN Build Output ------------ The build will generate following set of files [1] openwrt-ramips-mt7621-tplink_archer-c6-v3-initramfs-kernel.bin [2] openwrt-ramips-mt7621-tplink_archer-c6-v3-squashfs-factory.bin [3] openwrt-ramips-mt7621-tplink_archer-c6-v3-squashfs-sysupgrade.bin How to Use - Flashing from TP-Link Web Interface ------------------------------------------------ * Go to "Advanced/System Tools/Firmware Update". * Click "Browse" and upload the OpenWrt factory image: factory.bin[2] * Click the "Upgrade" button, and select "Yes" when prompted. TFTP Booting ------------ Setup a TFTP boot server with address 192.168.0.5. While starting U-boot press '4' key to stop autoboot. Copy the initramfs-kernel.bin[1] to TFTP server folder, rename as test.bin From u-boot command prompt run tftpboot followed by bootm. Recovery -------- Archer A6 V3 has recovery page activated if SPI booting from flash fails. Recovery page can be activated by powercycling the router four times before the boot process is complete. Note: TFTP boot can be activated only from u-boot serial console. Device recovery address: 192.168.0.1 Signed-off-by: Amish Vishwakarma <vishwakarma.amish@gmail.com> [fix indent] Signed-off-by: David Bauer <mail@david-bauer.net>
2021-06-05 09:01:00 +02:00
strcasecmp(info->id, "ARCHER-C6-V3") == 0 ||
strcasecmp(info->id, "TLWR1043NV5") == 0) {
const uint8_t extra_para[2] = {0x01, 0x00};
parts[5] = make_extra_para(info, extra_para,
sizeof(extra_para));
} else if (strcasecmp(info->id, "ARCHER-C6-V2") == 0) {
const uint8_t extra_para[2] = {0x00, 0x01};
parts[5] = make_extra_para(info, extra_para,
sizeof(extra_para));
} else if (strcasecmp(info->id, "ARCHER-C6-V2-US") == 0 ||
strcasecmp(info->id, "EAP245-V3") == 0) {
const uint8_t extra_para[2] = {0x01, 0x01};
parts[5] = make_extra_para(info, extra_para,
sizeof(extra_para));
}
size_t len;
void *image;
if (sysupgrade)
image = generate_sysupgrade_image(info, parts, &len);
else
image = generate_factory_image(info, parts, &len);
FILE *file = fopen(output, "wb");
if (!file)
error(1, errno, "unable to open output file");
if (fwrite(image, len, 1, file) != 1)
error(1, 0, "unable to write output file");
fclose(file);
free(image);
for (i = 0; parts[i].name; i++)
free_image_partition(parts[i]);
}
/** Usage output */
static void usage(const char *argv0) {
fprintf(stderr,
"Usage: %s [OPTIONS...]\n"
"\n"
"Options:\n"
" -h show this help\n"
"\n"
"Info about an image:\n"
" -i <file> input file to read from\n"
"Create a new image:\n"
" -B <board> create image for the board specified with <board>\n"
" -k <file> read kernel image from the file <file>\n"
" -r <file> read rootfs image from the file <file>\n"
" -o <file> write output to the file <file>\n"
" -V <rev> sets the revision number to <rev>\n"
" -j add jffs2 end-of-filesystem markers\n"
" -S create sysupgrade instead of factory image\n"
"Extract an old image:\n"
" -x <file> extract all oem firmware partition\n"
" -d <dir> destination to extract the firmware partition\n"
" -z <file> convert an oem firmware into a sysupgade file. Use -o for output file\n",
argv0
);
};
static struct device_info *find_board(const char *id)
{
struct device_info *board = NULL;
for (board = boards; board->id != NULL; board++)
if (strcasecmp(id, board->id) == 0)
return board;
return NULL;
}
static int add_flash_partition(
struct flash_partition_entry *part_list,
size_t max_entries,
const char *name,
unsigned long base,
unsigned long size)
{
size_t ptr;
/* check if the list has a free entry */
for (ptr = 0; ptr < max_entries; ptr++, part_list++) {
if (part_list->name == NULL &&
part_list->base == 0 &&
part_list->size == 0)
break;
}
if (ptr == max_entries) {
error(1, 0, "No free flash part entry available.");
}
part_list->name = calloc(1, strlen(name) + 1);
if (!part_list->name) {
error(1, 0, "Unable to allocate memory");
}
memcpy((char *)part_list->name, name, strlen(name));
part_list->base = base;
part_list->size = size;
return 0;
}
/** read the partition table into struct flash_partition_entry */
static int read_partition_table(
FILE *file, long offset,
struct flash_partition_entry *entries, size_t max_entries,
int type)
{
char buf[2048];
char *ptr, *end;
const char *parthdr = NULL;
const char *fwuphdr = "fwup-ptn";
const char *flashhdr = "partition";
/* TODO: search for the partition table */
switch(type) {
case 0:
parthdr = fwuphdr;
break;
case 1:
parthdr = flashhdr;
break;
default:
error(1, 0, "Invalid partition table");
}
if (fseek(file, offset, SEEK_SET) < 0)
error(1, errno, "Can not seek in the firmware");
if (fread(buf, 2048, 1, file) != 1)
error(1, errno, "Can not read fwup-ptn from the firmware");
buf[2047] = '\0';
/* look for the partition header */
if (memcmp(buf, parthdr, strlen(parthdr)) != 0) {
fprintf(stderr, "DEBUG: can not find fwuphdr\n");
return 1;
}
ptr = buf;
end = buf + sizeof(buf);
while ((ptr + strlen(parthdr)) < end &&
memcmp(ptr, parthdr, strlen(parthdr)) == 0) {
char *end_part;
char *end_element;
char name[32] = { 0 };
int name_len = 0;
unsigned long base = 0;
unsigned long size = 0;
end_part = memchr(ptr, '\n', (end - ptr));
if (end_part == NULL) {
/* in theory this should never happen, because a partition always ends with 0x09, 0x0D, 0x0A */
break;
}
for (int i = 0; i <= 4; i++) {
if (end_part <= ptr)
break;
end_element = memchr(ptr, 0x20, (end_part - ptr));
if (end_element == NULL) {
error(1, errno, "Ignoring the rest of the partition entries.");
break;
}
switch (i) {
/* partition header */
case 0:
ptr = end_element + 1;
continue;
/* name */
case 1:
name_len = (end_element - ptr) > 31 ? 31 : (end_element - ptr);
strncpy(name, ptr, name_len);
name[name_len] = '\0';
ptr = end_element + 1;
continue;
/* string "base" */
case 2:
ptr = end_element + 1;
continue;
/* actual base */
case 3:
base = strtoul(ptr, NULL, 16);
ptr = end_element + 1;
continue;
/* string "size" */
case 4:
ptr = end_element + 1;
/* actual size. The last element doesn't have a sepeartor */
size = strtoul(ptr, NULL, 16);
/* the part ends with 0x09, 0x0d, 0x0a */
ptr = end_part + 1;
add_flash_partition(entries, max_entries, name, base, size);
continue;
}
}
}
return 0;
}
static void write_partition(
FILE *input_file,
size_t firmware_offset,
struct flash_partition_entry *entry,
FILE *output_file)
{
char buf[4096];
size_t offset;
fseek(input_file, entry->base + firmware_offset, SEEK_SET);
for (offset = 0; sizeof(buf) + offset <= entry->size; offset += sizeof(buf)) {
if (fread(buf, sizeof(buf), 1, input_file) != 1)
error(1, errno, "Can not read partition from input_file");
if (fwrite(buf, sizeof(buf), 1, output_file) != 1)
error(1, errno, "Can not write partition to output_file");
}
/* write last chunk smaller than buffer */
if (offset < entry->size) {
offset = entry->size - offset;
if (fread(buf, offset, 1, input_file) != 1)
error(1, errno, "Can not read partition from input_file");
if (fwrite(buf, offset, 1, output_file) != 1)
error(1, errno, "Can not write partition to output_file");
}
}
static int extract_firmware_partition(FILE *input_file, size_t firmware_offset, struct flash_partition_entry *entry, const char *output_directory)
{
FILE *output_file;
char output[PATH_MAX];
snprintf(output, PATH_MAX, "%s/%s", output_directory, entry->name);
output_file = fopen(output, "wb+");
if (output_file == NULL) {
error(1, errno, "Can not open output file %s", output);
}
write_partition(input_file, firmware_offset, entry, output_file);
fclose(output_file);
return 0;
}
/** extract all partitions from the firmware file */
static int extract_firmware(const char *input, const char *output_directory)
{
struct flash_partition_entry entries[16] = { 0 };
size_t max_entries = 16;
size_t firmware_offset = 0x1014;
FILE *input_file;
struct stat statbuf;
/* check input file */
if (stat(input, &statbuf)) {
error(1, errno, "Can not read input firmware %s", input);
}
/* check if output directory exists */
if (stat(output_directory, &statbuf)) {
error(1, errno, "Failed to stat output directory %s", output_directory);
}
if ((statbuf.st_mode & S_IFMT) != S_IFDIR) {
error(1, errno, "Given output directory is not a directory %s", output_directory);
}
input_file = fopen(input, "rb");
if (read_partition_table(input_file, firmware_offset, entries, 16, 0) != 0) {
error(1, 0, "Error can not read the partition table (fwup-ptn)");
}
for (size_t i = 0; i < max_entries; i++) {
if (entries[i].name == NULL &&
entries[i].base == 0 &&
entries[i].size == 0)
continue;
extract_firmware_partition(input_file, firmware_offset, &entries[i], output_directory);
}
return 0;
}
static struct flash_partition_entry *find_partition(
struct flash_partition_entry *entries, size_t max_entries,
const char *name, const char *error_msg)
{
for (size_t i = 0; i < max_entries; i++, entries++) {
if (strcmp(entries->name, name) == 0)
return entries;
}
if (error_msg) {
error(1, 0, "%s", error_msg);
}
return NULL;
}
static int firmware_info(const char *input)
{
struct flash_partition_entry pointers[MAX_PARTITIONS] = { };
struct flash_partition_entry *e;
FILE *fp;
int i;
fp = fopen(input, "r");
if (read_partition_table(fp, 0x1014, pointers, MAX_PARTITIONS, 0)) {
error(1, 0, "Error can not read the partition table (fwup-ptn)");
}
printf("Firmware image partitions:\n");
printf("%-8s %-8s %s\n", "base", "size", "name");
for (i = 0; i < MAX_PARTITIONS; i++) {
e = &pointers[i];
if (!e->name && !e->base && !e->size)
continue;
printf("%08x %08x %s\n", e->base, e->size, e->name ? e->name : "");
}
e = find_partition(pointers, MAX_PARTITIONS, "soft-version", NULL);
if (e) {
size_t data_len = e->size - sizeof(struct meta_header);
char *buf = malloc(data_len);
struct soft_version *s;
bool isstr;
int i;
if (!buf)
error(1, errno, "Failed to alloc buffer");
if (fseek(fp, 0x1014 + e->base + sizeof(struct meta_header), SEEK_SET))
error(1, errno, "Can not seek in the firmware");
if (fread(buf, data_len, 1, fp) != 1)
error(1, errno, "Can not read fwup-ptn data from the firmware");
/* Check for string ignoring padding character */
isstr = true;
for (i = 0; i < data_len - 1; i++) {
if (!isascii(buf[i])) {
isstr = false;
break;
}
}
printf("\n[Software version]\n");
if (isstr) {
fwrite(buf, data_len, 1, stdout);
putchar('\n');
} else if (data_len >= offsetof(struct soft_version, rev)) {
s = (struct soft_version *)buf;
printf("Version: %d.%d.%d\n", s->version_major, s->version_minor, s->version_patch);
printf("Date: %02x%02x-%02x-%02x\n", s->year_hi, s->year_lo, s->month, s->day);
} else {
printf("Failed to parse data\n");
}
free(buf);
}
e = find_partition(pointers, MAX_PARTITIONS, "support-list", NULL);
if (e) {
char buf[128];
size_t length;
size_t bytes;
if (fseek(fp, 0x1014 + e->base + sizeof(struct meta_header), SEEK_SET))
error(1, errno, "Can not seek in the firmware");
printf("\n[Support list]\n");
for (length = e->size - sizeof(struct meta_header); length; length -= bytes) {
bytes = fread(buf, 1, length > sizeof(buf) ? sizeof(buf) : length, fp);
if (bytes <= 0)
error(1, errno, "Can not read fwup-ptn data from the firmware");
puts(buf);
}
}
e = find_partition(pointers, MAX_PARTITIONS, "partition-table", NULL);
if (e) {
struct flash_partition_entry parts[MAX_PARTITIONS] = { };
if (read_partition_table(fp, 0x1014 + e->base + 4, parts, MAX_PARTITIONS, 1)) {
error(1, 0, "Error can not read the partition table (partition)");
}
printf("\n[Partition table]\n");
printf("%-8s %-8s %s\n", "base", "size", "name");
for (i = 0; i < MAX_PARTITIONS; i++) {
e = &parts[i];
if (!e->name && !e->base && !e->size)
continue;
printf("%08x %08x %s\n", e->base, e->size, e->name ? e->name : "");
}
}
fclose(fp);
return 0;
}
static void write_ff(FILE *output_file, size_t size)
{
char buf[4096];
size_t offset;
memset(buf, 0xff, sizeof(buf));
for (offset = 0; offset + sizeof(buf) < size ; offset += sizeof(buf)) {
if (fwrite(buf, sizeof(buf), 1, output_file) != 1)
error(1, errno, "Can not write 0xff to output_file");
}
/* write last chunk smaller than buffer */
if (offset < size) {
offset = size - offset;
if (fwrite(buf, offset, 1, output_file) != 1)
error(1, errno, "Can not write partition to output_file");
}
}
static void convert_firmware(const char *input, const char *output)
{
struct flash_partition_entry fwup[MAX_PARTITIONS] = { 0 };
struct flash_partition_entry flash[MAX_PARTITIONS] = { 0 };
struct flash_partition_entry *fwup_os_image = NULL, *fwup_file_system = NULL;
struct flash_partition_entry *flash_os_image = NULL, *flash_file_system = NULL;
struct flash_partition_entry *fwup_partition_table = NULL;
size_t firmware_offset = 0x1014;
FILE *input_file, *output_file;
struct stat statbuf;
/* check input file */
if (stat(input, &statbuf)) {
error(1, errno, "Can not read input firmware %s", input);
}
input_file = fopen(input, "rb");
if (!input_file)
error(1, 0, "Can not open input firmware %s", input);
output_file = fopen(output, "wb");
if (!output_file)
error(1, 0, "Can not open output firmware %s", output);
if (read_partition_table(input_file, firmware_offset, fwup, MAX_PARTITIONS, 0) != 0) {
error(1, 0, "Error can not read the partition table (fwup-ptn)");
}
fwup_os_image = find_partition(fwup, MAX_PARTITIONS,
"os-image", "Error can not find os-image partition (fwup)");
fwup_file_system = find_partition(fwup, MAX_PARTITIONS,
"file-system", "Error can not find file-system partition (fwup)");
fwup_partition_table = find_partition(fwup, MAX_PARTITIONS,
"partition-table", "Error can not find partition-table partition");
/* the flash partition table has a 0x00000004 magic haeder */
if (read_partition_table(input_file, firmware_offset + fwup_partition_table->base + 4, flash, MAX_PARTITIONS, 1) != 0)
error(1, 0, "Error can not read the partition table (flash)");
flash_os_image = find_partition(flash, MAX_PARTITIONS,
"os-image", "Error can not find os-image partition (flash)");
flash_file_system = find_partition(flash, MAX_PARTITIONS,
"file-system", "Error can not find file-system partition (flash)");
/* write os_image to 0x0 */
write_partition(input_file, firmware_offset, fwup_os_image, output_file);
write_ff(output_file, flash_os_image->size - fwup_os_image->size);
/* write file-system behind os_image */
fseek(output_file, flash_file_system->base - flash_os_image->base, SEEK_SET);
write_partition(input_file, firmware_offset, fwup_file_system, output_file);
write_ff(output_file, flash_file_system->size - fwup_file_system->size);
fclose(output_file);
fclose(input_file);
}
int main(int argc, char *argv[]) {
const char *info_image = NULL, *board = NULL, *kernel_image = NULL, *rootfs_image = NULL, *output = NULL;
const char *extract_image = NULL, *output_directory = NULL, *convert_image = NULL;
bool add_jffs2_eof = false, sysupgrade = false;
unsigned rev = 0;
struct device_info *info;
set_source_date_epoch();
while (true) {
int c;
c = getopt(argc, argv, "i:B:k:r:o:V:jSh:x:d:z:");
if (c == -1)
break;
switch (c) {
case 'i':
info_image = optarg;
break;
case 'B':
board = optarg;
break;
case 'k':
kernel_image = optarg;
break;
case 'r':
rootfs_image = optarg;
break;
case 'o':
output = optarg;
break;
case 'V':
sscanf(optarg, "r%u", &rev);
break;
case 'j':
add_jffs2_eof = true;
break;
case 'S':
sysupgrade = true;
break;
case 'h':
usage(argv[0]);
return 0;
case 'd':
output_directory = optarg;
break;
case 'x':
extract_image = optarg;
break;
case 'z':
convert_image = optarg;
break;
default:
usage(argv[0]);
return 1;
}
}
if (info_image) {
firmware_info(info_image);
} else if (extract_image || output_directory) {
if (!extract_image)
error(1, 0, "No factory/oem image given via -x <file>. Output directory is only valid with -x");
if (!output_directory)
error(1, 0, "Can not extract an image without output directory. Use -d <dir>");
extract_firmware(extract_image, output_directory);
} else if (convert_image) {
if (!output)
error(1, 0, "Can not convert a factory/oem image into sysupgrade image without output file. Use -o <file>");
convert_firmware(convert_image, output);
} else {
if (!board)
error(1, 0, "no board has been specified");
if (!kernel_image)
error(1, 0, "no kernel image has been specified");
if (!rootfs_image)
error(1, 0, "no rootfs image has been specified");
if (!output)
error(1, 0, "no output filename has been specified");
info = find_board(board);
if (info == NULL)
error(1, 0, "unsupported board %s", board);
build_image(output, kernel_image, rootfs_image, rev, add_jffs2_eof, sysupgrade, info);
}
return 0;
}