ar71xx: Add support for TP-Link CPE210 v2 (#1445)
This commit is contained in:
		
							parent
							
								
									1649635be4
								
							
						
					
					
						commit
						3d18ae02d8
					
				| @ -182,7 +182,7 @@ ar71xx-generic | ||||
|   - Archer C5 (v1) [#ath10k]_ | ||||
|   - Archer C59 (v1) [#80211s]_ | ||||
|   - Archer C7 (v2, v4) [#ath10k]_ | ||||
|   - CPE210 (v1.0, v1.1) | ||||
|   - CPE210 (v1.0, v1.1, v2.0) | ||||
|   - CPE220 (v1.1) | ||||
|   - CPE510 (v1.0, v1.1) | ||||
|   - CPE520 (v1.1) | ||||
|  | ||||
							
								
								
									
										182
									
								
								patches/lede/0098-ar71xx-disable-40Mhz-refclk-for-QCA953x.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								patches/lede/0098-ar71xx-disable-40Mhz-refclk-for-QCA953x.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,182 @@ | ||||
| From: Sven Eckelmann <sven@narfation.org> | ||||
| Date: Fri, 19 Jan 2018 14:02:09 +0100 | ||||
| Subject: ar71xx: disable 40Mhz refclk for QCA953x | ||||
| 
 | ||||
| The "QCA9531 v2.0 802.11n 2x2 2.4 GHz Premium SOC for WLAN Platforms" | ||||
| datasheet (80-Y7991-1 Rev. C - October 2014) doesn't specify support for a | ||||
| 40 Mhz reference clock. The register description for "Bootstrap Options" | ||||
| (page 31) defines following states for the bit 4 (REF_CLK): | ||||
| 
 | ||||
| * 0 - CLK25 (default) | ||||
| * 1 - (reserved) | ||||
| 
 | ||||
| Devices like the TP-Link CPE210 v2 has this bit set to 1 but is using a 25 | ||||
| Mhz reference clock. OpenWrt is still interpreted this bit as 40 Mhz and | ||||
| then break the bootup of the system due to this incorrect interpretation. | ||||
| 
 | ||||
| Signed-off-by: Sven Eckelmann <sven@narfation.org> | ||||
| [refreshed patches] | ||||
| Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> | ||||
| 
 | ||||
| Origin: backport, https://github.com/openwrt/openwrt/commit/b1d57dadb2da0e010e157fd2383523578c9dcc2e | ||||
| 
 | ||||
| diff --git a/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch b/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
 | ||||
| index 777f7b2c8838f2c93f79d5d5212f90b2bd82ced3..d55c97165a5abad8cb25fcc6ddc29415f238c7e6 100644
 | ||||
| --- a/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
 | ||||
| +++ b/target/linux/ar71xx/patches-4.4/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
 | ||||
| @@ -44,7 +44,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|   config ATH79_NVRAM | ||||
|  --- a/arch/mips/ath79/clock.c | ||||
|  +++ b/arch/mips/ath79/clock.c | ||||
| -@@ -354,6 +354,91 @@ static void __init ar934x_clocks_init(vo
 | ||||
| +@@ -354,6 +354,87 @@ static void __init ar934x_clocks_init(vo
 | ||||
|   	iounmap(dpll_base); | ||||
|   } | ||||
|    | ||||
| @@ -56,13 +56,9 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|  +	unsigned long ahb_rate; | ||||
|  +	u32 pll, out_div, ref_div, nint, frac, clk_ctrl, postdiv; | ||||
|  +	u32 cpu_pll, ddr_pll; | ||||
| -+	u32 bootstrap;
 | ||||
|  + | ||||
| -+	bootstrap = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP);
 | ||||
| -+	if (bootstrap &	QCA953X_BOOTSTRAP_REF_CLK_40)
 | ||||
| -+		ref_rate = 40 * 1000 * 1000;
 | ||||
| -+	else
 | ||||
| -+		ref_rate = 25 * 1000 * 1000;
 | ||||
| ++	/* QCA953X only supports 25MHz ref_clk */
 | ||||
| ++	ref_rate = 25 * 1000 * 1000;
 | ||||
|  + | ||||
|  +	pll = ath79_pll_rr(QCA953X_PLL_CPU_CONFIG_REG); | ||||
|  +	out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) & | ||||
| @@ -136,7 +132,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|   static void __init qca955x_clocks_init(void) | ||||
|   { | ||||
|   	unsigned long ref_rate; | ||||
| -@@ -451,6 +536,8 @@ void __init ath79_clocks_init(void)
 | ||||
| +@@ -451,6 +532,8 @@ void __init ath79_clocks_init(void)
 | ||||
|   		ar933x_clocks_init(); | ||||
|   	else if (soc_is_ar934x()) | ||||
|   		ar934x_clocks_init(); | ||||
| @@ -247,14 +243,12 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|    | ||||
|   	ath79_wmac_data.external_reset = ar933x_wmac_reset; | ||||
|   } | ||||
| -@@ -151,6 +151,26 @@ static void ar934x_wmac_setup(void)
 | ||||
| +@@ -151,6 +151,21 @@ static void ar934x_wmac_setup(void)
 | ||||
|   	ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; | ||||
|   } | ||||
|    | ||||
|  +static void qca953x_wmac_setup(void) | ||||
|  +{ | ||||
| -+	u32 t;
 | ||||
| -+
 | ||||
|  +	ath79_wmac_device.name = "qca953x_wmac"; | ||||
|  + | ||||
|  +	ath79_wmac_resources[0].start = QCA953X_WMAC_BASE; | ||||
| @@ -262,11 +256,8 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|  +	ath79_wmac_resources[1].start = ATH79_IP2_IRQ(1); | ||||
|  +	ath79_wmac_resources[1].end = ATH79_IP2_IRQ(1); | ||||
|  + | ||||
| -+	t = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP);
 | ||||
| -+	if (t & QCA953X_BOOTSTRAP_REF_CLK_40)
 | ||||
| -+		ath79_wmac_data.is_clk_25mhz = false;
 | ||||
| -+	else
 | ||||
| -+		ath79_wmac_data.is_clk_25mhz = true;
 | ||||
| ++	/* QCA953X only supports 25MHz ref_clk */
 | ||||
| ++	ath79_wmac_data.is_clk_25mhz = true;
 | ||||
|  + | ||||
|  +	ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; | ||||
|  +} | ||||
| @@ -274,7 +265,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|   static void qca955x_wmac_setup(void) | ||||
|   { | ||||
|   	u32 t; | ||||
| -@@ -368,6 +388,8 @@ void __init ath79_register_wmac(u8 *cal_
 | ||||
| +@@ -368,6 +383,8 @@ void __init ath79_register_wmac(u8 *cal_
 | ||||
|   		ar933x_wmac_setup(); | ||||
|   	else if (soc_is_ar934x()) | ||||
|   		ar934x_wmac_setup(); | ||||
| @@ -550,7 +541,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
 | ||||
|  +#define QCA953X_BOOTSTRAP_SW_OPTION2	BIT(12) | ||||
|  +#define QCA953X_BOOTSTRAP_SW_OPTION1	BIT(11) | ||||
|  +#define QCA953X_BOOTSTRAP_EJTAG_MODE	BIT(5) | ||||
| -+#define QCA953X_BOOTSTRAP_REF_CLK_40	BIT(4)
 | ||||
| ++#define QCA953X_BOOTSTRAP_REF_CLK	BIT(4)
 | ||||
|  +#define QCA953X_BOOTSTRAP_SDRAM_DISABLED BIT(1) | ||||
|  +#define QCA953X_BOOTSTRAP_DDR1		BIT(0) | ||||
|  + | ||||
| diff --git a/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch b/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
 | ||||
| index ed90c40d882fcff1a451533748912865cc78c6e8..de0ee4604cdeb946bab222cacaa51fb150b25aab 100644
 | ||||
| --- a/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
 | ||||
| +++ b/target/linux/ar71xx/patches-4.4/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
 | ||||
| @@ -24,7 +24,7 @@
 | ||||
|   config ATH79_NVRAM | ||||
|  --- a/arch/mips/ath79/clock.c | ||||
|  +++ b/arch/mips/ath79/clock.c | ||||
| -@@ -524,6 +524,100 @@ static void __init qca955x_clocks_init(v
 | ||||
| +@@ -520,6 +520,100 @@ static void __init qca955x_clocks_init(v
 | ||||
|   	clk_add_alias("uart", NULL, "ref", NULL); | ||||
|   } | ||||
|    | ||||
| @@ -125,7 +125,7 @@
 | ||||
|   void __init ath79_clocks_init(void) | ||||
|   { | ||||
|   	if (soc_is_ar71xx()) | ||||
| -@@ -540,6 +634,8 @@ void __init ath79_clocks_init(void)
 | ||||
| +@@ -536,6 +630,8 @@ void __init ath79_clocks_init(void)
 | ||||
|   		qca953x_clocks_init(); | ||||
|   	else if (soc_is_qca955x()) | ||||
|   		qca955x_clocks_init(); | ||||
| @@ -219,7 +219,7 @@
 | ||||
|   } | ||||
|  --- a/arch/mips/ath79/dev-wmac.c | ||||
|  +++ b/arch/mips/ath79/dev-wmac.c | ||||
| -@@ -189,6 +189,26 @@ static void qca955x_wmac_setup(void)
 | ||||
| +@@ -184,6 +184,26 @@ static void qca955x_wmac_setup(void)
 | ||||
|   		ath79_wmac_data.is_clk_25mhz = true; | ||||
|   } | ||||
|    | ||||
| @@ -246,7 +246,7 @@
 | ||||
|   static bool __init | ||||
|   ar93xx_wmac_otp_read_word(void __iomem *base, int addr, u32 *data) | ||||
|   { | ||||
| -@@ -392,6 +412,8 @@ void __init ath79_register_wmac(u8 *cal_
 | ||||
| +@@ -387,6 +407,8 @@ void __init ath79_register_wmac(u8 *cal_
 | ||||
|   		qca953x_wmac_setup(); | ||||
|   	else if (soc_is_qca955x()) | ||||
|   		qca955x_wmac_setup(); | ||||
| diff --git a/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch b/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch
 | ||||
| index 16a0b909c570b403473346b0c992f9de02b67132..b0e15379787ade16a02363c78c143e878f27a7f2 100644
 | ||||
| --- a/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch
 | ||||
| +++ b/target/linux/ar71xx/patches-4.4/631-MIPS-ath79-wmac-enable-set-led-pin.patch
 | ||||
| @@ -1,6 +1,6 @@
 | ||||
|  --- a/arch/mips/ath79/dev-wmac.c | ||||
|  +++ b/arch/mips/ath79/dev-wmac.c | ||||
| -@@ -400,6 +400,11 @@ void __init ath79_wmac_set_ext_lna_gpio(
 | ||||
| +@@ -395,6 +395,11 @@ void __init ath79_wmac_set_ext_lna_gpio(
 | ||||
|   		ar934x_set_ext_lna_gpio(chain, gpio); | ||||
|   } | ||||
|    | ||||
| diff --git a/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch b/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
 | ||||
| index 8aa5957a7152af27854f6f7c197120b8029cf9e8..b59e43c7712a18e5e81944361c358dfb08c488ea 100644
 | ||||
| --- a/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
 | ||||
| +++ b/target/linux/ar71xx/patches-4.4/640-MIPS-ath79-add-QCA955x-wmac-reset.patch
 | ||||
| @@ -32,7 +32,7 @@
 | ||||
|    */ | ||||
|  --- a/arch/mips/ath79/dev-wmac.c | ||||
|  +++ b/arch/mips/ath79/dev-wmac.c | ||||
| -@@ -171,6 +171,27 @@ static void qca953x_wmac_setup(void)
 | ||||
| +@@ -166,6 +166,27 @@ static void qca953x_wmac_setup(void)
 | ||||
|   	ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision; | ||||
|   } | ||||
|    | ||||
| @@ -60,7 +60,7 @@
 | ||||
|   static void qca955x_wmac_setup(void) | ||||
|   { | ||||
|   	u32 t; | ||||
| -@@ -187,6 +208,8 @@ static void qca955x_wmac_setup(void)
 | ||||
| +@@ -182,6 +203,8 @@ static void qca955x_wmac_setup(void)
 | ||||
|   		ath79_wmac_data.is_clk_25mhz = false; | ||||
|   	else | ||||
|   		ath79_wmac_data.is_clk_25mhz = true; | ||||
| @ -0,0 +1,139 @@ | ||||
| From: Adrian Schmutzler <freifunk@adrianschmutzler.de> | ||||
| Date: Fri, 19 Jan 2018 12:58:40 +0100 | ||||
| Subject: ar71xx: Add TP-Link Pharos v2 board detection | ||||
| 
 | ||||
| Add support for detecting TP-Link Pharos v2 boards. | ||||
| They use different format in product-info partition than v1 boards. | ||||
| 
 | ||||
| Code was written mostly by Alexander Couzens <lynxis@fe80.eu> | ||||
| 
 | ||||
| Signed-off-by: Robert Marko <robimarko@gmail.com> | ||||
| Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> | ||||
| 
 | ||||
| Origin: backport, https://github.com/openwrt/openwrt/commit/2524febf7927a1bf430d64b7790feb126023e3d1 | ||||
| 
 | ||||
| diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | ||||
| index b365b6ae4aa6021960499b3889d846b5171eec0f..94311f75989b0861e188dc89b3e714b5545c1ad8 100755
 | ||||
| --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | ||||
| +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
 | ||||
| @@ -375,7 +375,7 @@ tplink_pharos_get_model_string() {
 | ||||
|  } | ||||
|   | ||||
|  tplink_pharos_board_detect() { | ||||
| -	local model_string="$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
| +	local model_string="$1"
 | ||||
|  	local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS" | ||||
|   | ||||
|  	local model="${1%%\(*}" | ||||
| @@ -396,6 +396,14 @@ gl_inet_board_detect() {
 | ||||
|  	esac | ||||
|  } | ||||
|   | ||||
| +tplink_pharos_v2_get_model_string() {
 | ||||
| +	local part
 | ||||
| +	part=$(find_mtd_part 'product-info')
 | ||||
| +	[ -z "$part" ] && return 1
 | ||||
| +
 | ||||
| +	dd if=$part bs=1 skip=4360 count=64 2>/dev/null | tr -d '\r\0' | head -n 1
 | ||||
| +}
 | ||||
| +
 | ||||
|  ar71xx_board_detect() { | ||||
|  	local machine | ||||
|  	local name | ||||
| @@ -546,11 +554,15 @@ ar71xx_board_detect() {
 | ||||
|  		;; | ||||
|  	*"CPE210/220") | ||||
|  		name="cpe210" | ||||
| -		tplink_pharos_board_detect
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
| +		;;
 | ||||
| +	*"CPE210 v2")
 | ||||
| +		name="cpe210-v2"
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_v2_get_model_string)"
 | ||||
|  		;; | ||||
|  	*"CPE510/520") | ||||
|  		name="cpe510" | ||||
| -		tplink_pharos_board_detect
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
|  		;; | ||||
|  	*CPE830) | ||||
|  		name="cpe830" | ||||
| @@ -560,11 +572,11 @@ ar71xx_board_detect() {
 | ||||
|  		;; | ||||
|  	*WBS210) | ||||
|  		name="wbs210" | ||||
| -		tplink_pharos_board_detect
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
|  		;; | ||||
|  	*WBS510) | ||||
|  		name="wbs510" | ||||
| -		tplink_pharos_board_detect
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
|  		;; | ||||
|  	*CR3000) | ||||
|  		name="cr3000" | ||||
| @@ -641,7 +653,7 @@ ar71xx_board_detect() {
 | ||||
|  		;; | ||||
|  	*"EAP120") | ||||
|  		name="eap120" | ||||
| -		tplink_pharos_board_detect
 | ||||
| +		tplink_pharos_board_detect "$(tplink_pharos_get_model_string | tr -d '\r')"
 | ||||
|  		;; | ||||
|  	*"EAP300 v2") | ||||
|  		name="eap300v2" | ||||
| diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | ||||
| index 0b422d71c2639a31bc7e88a20976266b66ec4490..9bc49c41a6308b732e45a7ae35c851133c367254 100755
 | ||||
| --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | ||||
| +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
 | ||||
| @@ -97,10 +97,11 @@ tplink_pharos_check_support_list() {
 | ||||
|  	local image="$1" | ||||
|  	local offset="$2" | ||||
|  	local model="$3" | ||||
| +	local trargs="$4"
 | ||||
|   | ||||
|  	# Here $image is given to dd directly instead of using get_image; | ||||
|  	# otherwise the skip will take almost a second (as dd can't seek) | ||||
| -	dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | (
 | ||||
| +	dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | tr -d "$trargs" | (
 | ||||
|  		while IFS= read -r line; do | ||||
|  			[ "$line" = "$model" ] && exit 0 | ||||
|  		done | ||||
| @@ -110,17 +111,19 @@ tplink_pharos_check_support_list() {
 | ||||
|  } | ||||
|   | ||||
|  tplink_pharos_check_image() { | ||||
| -	local magic_long="$(get_magic_long "$1")"
 | ||||
| -	[ "$magic_long" != "7f454c46" ] && {
 | ||||
| -		echo "Invalid image magic '$magic_long'"
 | ||||
| +	local image_magic="$(get_magic_long "$1")"
 | ||||
| +	local board_magic="$2"
 | ||||
| +	[ "$image_magic" != "$board_magic" ] && {
 | ||||
| +		echo "Invalid image magic '$image_magic'. Expected '$board_magic'."
 | ||||
|  		return 1 | ||||
|  	} | ||||
|   | ||||
| -	local model_string="$(tplink_pharos_get_model_string)"
 | ||||
| +	local model_string="$3"
 | ||||
| +	local trargs="$4"
 | ||||
|   | ||||
|  	# New images have the support list at 7802888, old ones at 1511432 | ||||
| -	tplink_pharos_check_support_list "$1" 7802888 "$model_string" || \
 | ||||
| -	tplink_pharos_check_support_list "$1" 1511432 "$model_string" || {
 | ||||
| +	tplink_pharos_check_support_list "$1" 7802888 "$model_string" "$trargs" || \
 | ||||
| +	tplink_pharos_check_support_list "$1" 1511432 "$model_string" "$trargs" || {
 | ||||
|  		echo "Unsupported image (model not in support-list)" | ||||
|  		return 1 | ||||
|  	} | ||||
| @@ -507,7 +510,11 @@ platform_check_image() {
 | ||||
|  	eap120|\ | ||||
|  	wbs210|\ | ||||
|  	wbs510) | ||||
| -		tplink_pharos_check_image "$1" && return 0
 | ||||
| +		tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_get_model_string)" '' && return 0
 | ||||
| +		return 1
 | ||||
| +		;;
 | ||||
| +	cpe210-v2)
 | ||||
| +		tplink_pharos_check_image "$1" "01000000" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0
 | ||||
|  		return 1 | ||||
|  		;; | ||||
|  	a40|\ | ||||
							
								
								
									
										324
									
								
								patches/lede/0100-ar71xx-Add-support-for-TP-Link-CPE210-v2.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										324
									
								
								patches/lede/0100-ar71xx-Add-support-for-TP-Link-CPE210-v2.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,324 @@ | ||||
| From: Adrian Schmutzler <freifunk@adrianschmutzler.de> | ||||
| Date: Fri, 19 Jan 2018 14:45:42 +0100 | ||||
| Subject: ar71xx: Add support for TP-Link CPE210 v2 | ||||
| 
 | ||||
| This PR adds support for a popular low-cost 2.4GHz N based AP | ||||
| 
 | ||||
| Specifications: | ||||
|  - SoC: Qualcomm Atheros QCA9533 (650MHz) | ||||
|  - RAM: 64MB | ||||
|  - Storage: 8 MB SPI NOR | ||||
|  - Wireless: 2.4GHz N based built into SoC 2x2 | ||||
|  - Ethernet: 1x 100/10 Mbps, integrated into SoC, 24V POE IN | ||||
| 
 | ||||
| Installation: | ||||
| Flash factory image through stock firmware WEB UI | ||||
| or through TFTP | ||||
| To get to TFTP recovery just hold reset button while powering on for | ||||
| around 4-5 seconds and release. | ||||
| Rename factory image to recovery.bin | ||||
| Stock TFTP server IP:192.168.0.100 | ||||
| Stock device TFTP adress:192.168.0.254 | ||||
| 
 | ||||
| Notes: | ||||
| TP-Link does not use bootstrap registers so without this patch reference | ||||
| clock detects as 40MHz while it is actually 25MHz. | ||||
| This is due to messed up bootstrap resistor configuration on the PCB. | ||||
| Provided GPL code just forces 25MHz reference clock. | ||||
| That causes booting with completely wrong clocks, for example, CPU tries | ||||
| to boot at 1040MHz while the stock is 650MHz. | ||||
| So this PR depends on PR #672 to remove 40MHz reference clock. | ||||
| Thanks to Sven Eckelmann <sven@narfation.org> for properly patching that. | ||||
| 
 | ||||
| Signed-off-by: Robert Marko <robimarko@gmail.com> | ||||
| Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> | ||||
| 
 | ||||
| Origin: backport, https://github.com/openwrt/openwrt/commit/5c5bf8b8658a588423f6ec445d7ef6a36f99a396 | ||||
| 
 | ||||
| diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds
 | ||||
| index a742854bc9b0aa48c61b37e58288177bbb56d14d..54046dffc9a4d4ad0216dcda32bf98ee5d38b569 100755
 | ||||
| --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
 | ||||
| +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
 | ||||
| @@ -187,16 +187,25 @@ cf-e530n)
 | ||||
|  	ucidef_set_led_netdev "wan" "WAN" "$board:blue:wan" "eth1" | ||||
|  	;; | ||||
|  cpe210|\ | ||||
| +cpe210-v2|\
 | ||||
|  cpe510|\ | ||||
|  wbs210|\ | ||||
|  wbs510) | ||||
| -	ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20"
 | ||||
| -	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
 | ||||
|  	ucidef_set_rssimon "wlan0" "200000" "1" | ||||
|  	ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:green:link1" "wlan0" "1" "100" "0" "13" | ||||
|  	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:green:link2" "wlan0" "26" "100" "-25" "13" | ||||
|  	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:green:link3" "wlan0" "51" "100" "-50" "13" | ||||
|  	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:green:link4" "wlan0" "76" "100" "-75" "13" | ||||
| +
 | ||||
| +	case "$board" in
 | ||||
| +	cpe210-v2)
 | ||||
| +		ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan0" "eth0"
 | ||||
| +		;;
 | ||||
| +	*)
 | ||||
| +		ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20"
 | ||||
| +		ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
 | ||||
| +		;;
 | ||||
| +	esac
 | ||||
|  	;; | ||||
|  cr3000) | ||||
|  	ucidef_set_led_netdev "wan" "WAN" "pcs:blue:wan" "eth1" | ||||
| diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
 | ||||
| index 875a1a38ada9fb66503505d2f094310db1295a07..633d4e1b7415983f44164187ad3696311ec25621 100755
 | ||||
| --- a/target/linux/ar71xx/base-files/etc/board.d/02_network
 | ||||
| +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
 | ||||
| @@ -67,6 +67,7 @@ ar71xx_setup_interfaces()
 | ||||
|  	cap4200ag|\ | ||||
|  	cf-e380ac-v1|\ | ||||
|  	cf-e380ac-v2|\ | ||||
| +	cpe210-v2|\
 | ||||
|  	eap120|\ | ||||
|  	eap300v2|\ | ||||
|  	eap7660d|\ | ||||
| diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
 | ||||
| index 2449a8d6bce17f0a703d8fc4f82dd38e1f861ae3..35532d86ac3ad32630592c79477c79783af4addb 100644
 | ||||
| --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
 | ||||
| +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
 | ||||
| @@ -1301,6 +1301,7 @@ config ATH79_MACH_ARCHER_C7
 | ||||
|  config ATH79_MACH_CPE510 | ||||
|  	bool "TP-LINK CPE510 support" | ||||
|  	select SOC_AR934X | ||||
| +	select SOC_QCA953X
 | ||||
|  	select ATH79_DEV_ETH | ||||
|  	select ATH79_DEV_GPIO_BUTTONS | ||||
|  	select ATH79_DEV_LEDS_GPIO | ||||
| diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
 | ||||
| index d2dbed1fe286c44d3188262e984253faaee7edba..ceb1769ddd522d51014228fe65e2662f2f3e627c 100644
 | ||||
| --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
 | ||||
| +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c
 | ||||
| @@ -1,7 +1,8 @@
 | ||||
|  /* | ||||
| - *  TP-LINK CPE210/220/510/520 board support
 | ||||
| + *  TP-LINK CPE210/210 v2/220/510/520 board support
 | ||||
|   * | ||||
|   *  Copyright (C) 2014 Matthias Schiffer <mschiffer@universe-factory.net> | ||||
| + *  Copyright (C) 2017 Robert Marko <robimarko@gmail.com>
 | ||||
|   * | ||||
|   *  This program is free software; you can redistribute it and/or modify it | ||||
|   *  under the terms of the GNU General Public License version 2 as published | ||||
| @@ -41,6 +42,8 @@
 | ||||
|  #define CPE510_KEYS_POLL_INTERVAL	20 /* msecs */ | ||||
|  #define CPE510_KEYS_DEBOUNCE_INTERVAL	(3 * CPE510_KEYS_POLL_INTERVAL) | ||||
|   | ||||
| +/* CPE210 v2 reset GPIO */
 | ||||
| +#define CPE210_V2_GPIO_BTN_RESET	17
 | ||||
|   | ||||
|  static struct gpio_led cpe510_leds_gpio[] __initdata = { | ||||
|  	{ | ||||
| @@ -98,6 +101,30 @@ static struct gpio_led wbs510_leds_gpio[] __initdata = {
 | ||||
|  	}, | ||||
|  }; | ||||
|   | ||||
| +static struct gpio_led cpe210_v2_leds_gpio[] __initdata = {
 | ||||
| +	{
 | ||||
| +		.name		= "tp-link:green:lan0",
 | ||||
| +		.gpio		= CPE510_GPIO_LED_LAN0,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	}, {
 | ||||
| +		.name		= "tp-link:green:link1",
 | ||||
| +		.gpio		= CPE510_GPIO_LED_L1,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	}, {
 | ||||
| +		.name		= "tp-link:green:link2",
 | ||||
| +		.gpio		= CPE510_GPIO_LED_L2,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	}, {
 | ||||
| +		.name		= "tp-link:green:link3",
 | ||||
| +		.gpio		= CPE510_GPIO_LED_L3,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	}, {
 | ||||
| +		.name		= "tp-link:green:link4",
 | ||||
| +		.gpio		= CPE510_GPIO_LED_L4,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	},
 | ||||
| +};
 | ||||
| +
 | ||||
|  static struct gpio_keys_button cpe510_gpio_keys[] __initdata = { | ||||
|  	{ | ||||
|  		.desc		= "Reset button", | ||||
| @@ -109,6 +136,17 @@ static struct gpio_keys_button cpe510_gpio_keys[] __initdata = {
 | ||||
|  	} | ||||
|  }; | ||||
|   | ||||
| +static struct gpio_keys_button cpe210_v2_gpio_keys[] __initdata = {
 | ||||
| +	{
 | ||||
| +		.desc		= "Reset button",
 | ||||
| +		.type		= EV_KEY,
 | ||||
| +		.code		= KEY_RESTART,
 | ||||
| +		.debounce_interval = CPE510_KEYS_DEBOUNCE_INTERVAL,
 | ||||
| +		.gpio		= CPE210_V2_GPIO_BTN_RESET,
 | ||||
| +		.active_low	= 1,
 | ||||
| +	}
 | ||||
| +};
 | ||||
| +
 | ||||
|  static void __init cpe_setup(u8 *mac) | ||||
|  { | ||||
|  	/* Disable JTAG, enabling GPIOs 0-3 */ | ||||
| @@ -171,9 +209,33 @@ static void __init wbs_setup(void)
 | ||||
|  	ath79_register_wmac(ee, mac); | ||||
|  } | ||||
|   | ||||
| +static void __init cpe210_v2_setup(void)
 | ||||
| +{
 | ||||
| +	u8 *mac = (u8 *) KSEG1ADDR(0x1f830008);
 | ||||
| +	u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
 | ||||
| +
 | ||||
| +	ath79_register_leds_gpio(-1, ARRAY_SIZE(cpe210_v2_leds_gpio),
 | ||||
| +				 cpe210_v2_leds_gpio);
 | ||||
| +	ath79_register_gpio_keys_polled(-1, CPE510_KEYS_POLL_INTERVAL,
 | ||||
| +					ARRAY_SIZE(cpe210_v2_gpio_keys),
 | ||||
| +					cpe210_v2_gpio_keys);
 | ||||
| +	ath79_register_m25p80(NULL);
 | ||||
| +	ath79_register_mdio(0, 0x0);
 | ||||
| +	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
 | ||||
| +	ath79_eth0_data.duplex = DUPLEX_FULL;
 | ||||
| +	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
 | ||||
| +	ath79_eth0_data.speed = SPEED_100;
 | ||||
| +	ath79_eth0_data.phy_mask = BIT(4);
 | ||||
| +	ath79_register_eth(0);
 | ||||
| +	ath79_register_wmac(ee, mac);
 | ||||
| +}
 | ||||
| +
 | ||||
|  MIPS_MACHINE(ATH79_MACH_CPE210, "CPE210", "TP-LINK CPE210/220", | ||||
|  	     cpe210_setup); | ||||
|   | ||||
| +MIPS_MACHINE(ATH79_MACH_CPE210_V2, "CPE210V2", "TP-LINK CPE210 v2",
 | ||||
| +	     cpe210_v2_setup);
 | ||||
| +
 | ||||
|  MIPS_MACHINE(ATH79_MACH_CPE510, "CPE510", "TP-LINK CPE510/520", | ||||
|  	     cpe510_setup); | ||||
|   | ||||
| diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
 | ||||
| index a4c7f52fe94e17bc48bebfb460f12f3e5ac35afe..e7e7f94775a3122286dc39447f04b42f4863f313 100644
 | ||||
| --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
 | ||||
| +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
 | ||||
| @@ -64,7 +64,8 @@ enum ath79_mach_type {
 | ||||
|  	ATH79_MACH_CF_E380AC_V2,		/* COMFAST CF-E380AC v2 */ | ||||
|  	ATH79_MACH_CF_E520N,			/* COMFAST CF-E520N */ | ||||
|  	ATH79_MACH_CF_E530N,			/* COMFAST CF-E530N */ | ||||
| -	ATH79_MACH_CPE210,			/* TP-LINK CPE210 */
 | ||||
| +	ATH79_MACH_CPE210,			/* TP-LINK CPE210 v1 */
 | ||||
| +	ATH79_MACH_CPE210_V2,			/* TP-LINK CPE210 v2 */
 | ||||
|  	ATH79_MACH_CPE510,			/* TP-LINK CPE510 */ | ||||
|  	ATH79_MACH_CPE830,			/* YunCore CPE830 */ | ||||
|  	ATH79_MACH_CPE870,			/* YunCore CPE870 */ | ||||
| diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk
 | ||||
| index 6a3faef518ebfa4f36d3074ee9c102b801e04275..b61ef6dc78918dd8d040c0f2bfb6451e5e13ba92 100644
 | ||||
| --- a/target/linux/ar71xx/image/tp-link.mk
 | ||||
| +++ b/target/linux/ar71xx/image/tp-link.mk
 | ||||
| @@ -164,22 +164,26 @@ define Device/archer-c60-v1
 | ||||
|  endef | ||||
|  TARGET_DEVICES += archer-c60-v1 | ||||
|   | ||||
| -define Device/cpe510-520
 | ||||
| -  DEVICE_TITLE := TP-LINK CPE510/520
 | ||||
| +define Device/cpexxx
 | ||||
|    DEVICE_PACKAGES := rssileds | ||||
|    MTDPARTS := spi0.0:128k(u-boot)ro,64k(partition-table)ro,64k(product-info)ro,1792k(kernel),5888k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware) | ||||
|    IMAGE_SIZE := 7680k | ||||
| -  BOARDNAME := CPE510
 | ||||
| -  TPLINK_BOARD_NAME := CPE510
 | ||||
|    DEVICE_PROFILE := CPE510 | ||||
|    LOADER_TYPE := elf | ||||
| +  IMAGES := sysupgrade.bin factory.bin
 | ||||
| +  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
 | ||||
| +  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
 | ||||
| +endef
 | ||||
| +
 | ||||
| +define Device/cpe510-520
 | ||||
| +  $(Device/cpexxx)
 | ||||
| +  DEVICE_TITLE := TP-LINK CPE510/520 v1
 | ||||
| +  BOARDNAME := CPE510
 | ||||
| +  TPLINK_BOARD_NAME := CPE510
 | ||||
|    LOADER_FLASH_OFFS := 0x43000 | ||||
|    COMPILE := loader-$(1).elf | ||||
|    COMPILE/loader-$(1).elf := loader-okli-compile | ||||
|    KERNEL := kernel-bin | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 12288 | ||||
| -  IMAGES := sysupgrade.bin factory.bin
 | ||||
| -  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
 | ||||
| -  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
 | ||||
|  endef | ||||
|   | ||||
|  define Device/cpe210-220 | ||||
| @@ -190,6 +194,19 @@ $(Device/cpe510-520)
 | ||||
|    TPLINK_BOARD_NAME := CPE210 | ||||
|  endef | ||||
|   | ||||
| +define Device/cpe210-v2
 | ||||
| +  $(Device/cpexxx)
 | ||||
| +  DEVICE_TITLE := TP-LINK CPE210 v2
 | ||||
| +  BOARDNAME := CPE210V2
 | ||||
| +  TPLINK_BOARD_NAME := CPE210V2
 | ||||
| +  KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-combined
 | ||||
| +  TPLINK_HWID := 0x0
 | ||||
| +  TPLINK_HWREV := 0
 | ||||
| +  TPLINK_HEADER_VERSION := 1
 | ||||
| +  TPLINK_FLASHLAYOUT := 8Mlzma
 | ||||
| +endef
 | ||||
| +TARGET_DEVICES += cpe210-v2
 | ||||
| +
 | ||||
|  define Device/wbs210 | ||||
|  $(Device/cpe510-520) | ||||
|    DEVICE_TITLE := TP-LINK WBS210 | ||||
| diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
 | ||||
| index 23b69f3bd0eb66aca650eb2ffd7d5cd2a7cb5194..e6ecc5b2c52c1627c8b998fa731b50ed39649f96 100644
 | ||||
| --- a/tools/firmware-utils/src/tplink-safeloader.c
 | ||||
| +++ b/tools/firmware-utils/src/tplink-safeloader.c
 | ||||
| @@ -154,6 +154,48 @@ static struct device_info boards[] = {
 | ||||
|  		.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",
 | ||||
| +		.support_trail = '\xff',
 | ||||
| +		.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},
 | ||||
| +			{"os-image", 0x40000, 0x1c0000},
 | ||||
| +			{"file-system", 0x200000, 0x5b0000},
 | ||||
| +			{"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 */ | ||||
|  	{ | ||||
|  		.id	= "CPE510", | ||||
| @ -160,6 +160,8 @@ device tp-link-cpe210-v1.0 cpe210-220 | ||||
| alias tp-link-cpe210-v1.1 | ||||
| alias tp-link-cpe220-v1.1 | ||||
| 
 | ||||
| device tp-link-cpe210-v2.0 cpe210-v2 | ||||
| 
 | ||||
| device tp-link-cpe510-v1.0 cpe510-520 | ||||
| alias tp-link-cpe510-v1.1 | ||||
| alias tp-link-cpe520-v1.1 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user