Skip to content

Commit

Permalink
ar71xx: add support for TP-Link 1043ND v4
Browse files Browse the repository at this point in the history
Based on work in LEDE 1a4d07c and Ludwig Thomeczek's work.

While at it, also backport the mktplinkfw-combined helper.

Signed-off-by: Zoltan HERPAI <[email protected]>
  • Loading branch information
wigyori committed Feb 4, 2017
1 parent d87bf96 commit df384cf
Show file tree
Hide file tree
Showing 13 changed files with 258 additions and 1 deletion.
10 changes: 10 additions & 0 deletions target/linux/ar71xx/base-files/etc/board.d/01_leds
Original file line number Diff line number Diff line change
Expand Up @@ -677,6 +677,16 @@ tl-wr1043nd-v2)
ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
;;

tl-wr1043nd-v4)
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
ucidef_set_led_switch "wan" "WAN" "tp-link:green:wan" "switch0" "0x20"
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04"
ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
;;

tl-wr2543n)
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
;;
Expand Down
6 changes: 6 additions & 0 deletions target/linux/ar71xx/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ wlr8100)
;;

esr1750 |\
tl-wr1043nd-v4 |\
epg5000)
ucidef_add_switch "switch0" \
"0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5:wan"
Expand Down Expand Up @@ -303,6 +304,11 @@ wndr4300)
[ -n "$mac_wan" ] && ucidef_set_interface_macaddr "wan" "$mac_wan"
;;

tl-wr1043nd-v4)
mac_wan=$(mtd_get_mac_binary config 0x1017c)
[ -n "$mac_wan" ] && ucidef_set_interface_macaddr "wan" "$mac_wan"
;;

esr900)
local mac
ucidef_add_switch "switch0" \
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/base-files/etc/diag.sh
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ get_status_led() {
tl-wr1041n-v2 | \
tl-wr1043nd | \
tl-wr1043nd-v2 | \
tl-wr1043nd-v4| \
tl-wr741nd | \
tl-wr741nd-v4 | \
tl-wr841n-v1 | \
Expand Down
3 changes: 3 additions & 0 deletions target/linux/ar71xx/base-files/lib/ar71xx.sh
Original file line number Diff line number Diff line change
Expand Up @@ -824,6 +824,9 @@ ar71xx_board_detect() {
*"TL-WR1043ND v2")
name="tl-wr1043nd-v2"
;;
*"TL-WR1043ND v4")
name="tl-wr1043nd-v4"
;;
*TL-WR2543N*)
name="tl-wr2543n"
;;
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/base-files/lib/upgrade/platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ platform_check_image() {
tl-wr1041n-v2 | \
tl-wr1043nd | \
tl-wr1043nd-v2 | \
tl-wr1043nd-v4| \
tl-wr2543n)
local magic_ver="0100"

Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/config-4.4
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ CONFIG_ATH79_MACH_TL_WDR6500_V2=y
CONFIG_ATH79_MACH_TL_WR1041N_V2=y
CONFIG_ATH79_MACH_TL_WR1043ND=y
CONFIG_ATH79_MACH_TL_WR1043ND_V2=y
CONFIG_ATH79_MACH_TL_WR1043ND_V4=y
CONFIG_ATH79_MACH_TL_WR2543N=y
CONFIG_ATH79_MACH_TL_WR703N=y
CONFIG_ATH79_MACH_TL_WR720N_V3=y
Expand Down
11 changes: 11 additions & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
Original file line number Diff line number Diff line change
Expand Up @@ -1420,6 +1420,17 @@ config ATH79_MACH_TL_WR1043ND_V2
select ATH79_DEV_USB
select ATH79_DEV_WMAC

config ATH79_MACH_TL_WR1043ND_V4
bool "TP-LINK TL-WR1043ND v4 support"
select SOC_QCA956X
select ATH79_DEV_AP9X_PCI if PCI
select ATH79_DEV_ETH
select ATH79_DEV_GPIO_BUTTONS
select ATH79_DEV_LEDS_GPIO
select ATH79_DEV_M25P80
select ATH79_DEV_USB
select ATH79_DEV_WMAC

config ATH79_MACH_TL_WR2543N
bool "TP-LINK TL-WR2543N/ND support"
select SOC_AR724X
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6) += mach-tl-wr941nd-v6.o
obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2) += mach-tl-wr1041n-v2.o
obj-$(CONFIG_ATH79_MACH_TL_WR1043ND) += mach-tl-wr1043nd.o
obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V2) += mach-tl-wr1043nd-v2.o
obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V4) += mach-tl-wr1043nd-v4.o
obj-$(CONFIG_ATH79_MACH_TL_WR2543N) += mach-tl-wr2543n.o
obj-$(CONFIG_ATH79_MACH_TL_WR703N) += mach-tl-wr703n.o
obj-$(CONFIG_ATH79_MACH_TL_WR720N_V3) += mach-tl-wr720n-v3.o
Expand Down
190 changes: 190 additions & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr1043nd-v4.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
/*
* TP-LINK WR1043 V4 support
*
* Copyright (C) 2015-2016 P. Wassi <p.wassi at gmx.at>
* Copyright (C) 2016 Matthias Schiffer <[email protected]>
* Copyright (C) 2016 Andreas Ziegler <[email protected]>
* Copyright (C) 2016 Ludwig Thomeczek <[email protected]>
*
* Derived from: mach-dir-869-a1.c
*
* 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
* by the Free Software Foundation.
*/


#include <linux/gpio.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/ath9k_platform.h>

#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/irq.h>
#include <asm/mach-ath79/ar71xx_regs.h>

#include <linux/platform_data/phy-at803x.h>
#include <linux/ar8216_platform.h>

#include "common.h"
#include "dev-ap9x-pci.h"
#include "dev-eth.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-m25p80.h"
#include "dev-wmac.h"
#include "dev-usb.h"
#include "machtypes.h"
#include "nvram.h"

#define TL_WR1043_V4_GPIO_BTN_RESET 2
#define TL_WR1043_V4_GPIO_BTN_RFKILL 5

#define TL_WR1043_V4_GPIO_LED_WLAN 19
#define TL_WR1043_V4_GPIO_LED_USB 7
#define TL_WR1043_V4_GPIO_LED_WPS 1
#define TL_WR1043_V4_GPIO_LED_SYSTEM 6

#define TL_WR1043_V4_GPIO_USB_POWER 8

#define TL_WR1043_V4_GPIO_LED_WAN 15
#define TL_WR1043_V4_GPIO_LED_LAN1 9
#define TL_WR1043_V4_GPIO_LED_LAN2 14
#define TL_WR1043_V4_GPIO_LED_LAN3 21
#define TL_WR1043_V4_GPIO_LED_LAN4 20

#define TL_WR1043_V4_KEYS_POLL_INTERVAL 20 /* msecs */
#define TL_WR1043_V4_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR1043_V4_KEYS_POLL_INTERVAL)

#define TL_WR1043_V4_MAC_LOCATION 0x1ff80174

#define TL_WR1043_V4_EEPROM_ADDR 0x1fff0000
#define TL_WR1043_V4_WMAC_CALDATA_OFFSET 0x1000

static struct gpio_led tl_wr1043nd_v4_leds_gpio[] __initdata = {
{
.name = "tp-link:green:wps",
.gpio = TL_WR1043_V4_GPIO_LED_WPS,
.active_low = 1,
},
{
.name = "tp-link:green:system",
.gpio = TL_WR1043_V4_GPIO_LED_SYSTEM,
.active_low = 1,
},
{
.name = "tp-link:green:wlan",
.gpio = TL_WR1043_V4_GPIO_LED_WLAN,
.active_low = 1,
},
{
.name = "tp-link:green:usb",
.gpio = TL_WR1043_V4_GPIO_LED_USB,
.active_low = 1,
},
{
.name = "tp-link:green:wan",
.gpio = TL_WR1043_V4_GPIO_LED_WAN,
.active_low = 1,
},
{
.name = "tp-link:green:lan1",
.gpio = TL_WR1043_V4_GPIO_LED_LAN1,
.active_low = 1,
},
{
.name = "tp-link:green:lan2",
.gpio = TL_WR1043_V4_GPIO_LED_LAN2,
.active_low = 1,
},
{
.name = "tp-link:green:lan3",
.gpio = TL_WR1043_V4_GPIO_LED_LAN3,
.active_low = 1,
},
{
.name = "tp-link:green:lan4",
.gpio = TL_WR1043_V4_GPIO_LED_LAN4,
.active_low = 1,
},
};

static struct gpio_keys_button tl_wr1043nd_v4_gpio_keys[] __initdata = {
{
.desc = "Reset button",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = TL_WR1043_V4_KEYS_DEBOUNCE_INTERVAL,
.gpio = TL_WR1043_V4_GPIO_BTN_RESET,
.active_low = 1,
},
{
.desc = "RFKILL button",
.type = EV_KEY,
.code = KEY_RFKILL,
.debounce_interval = TL_WR1043_V4_KEYS_DEBOUNCE_INTERVAL,
.gpio = TL_WR1043_V4_GPIO_BTN_RFKILL,
.active_low = 1,
},
};

static struct ar8327_pad_cfg tl_wr1043nd_v4_ar8327_pad0_cfg = {
.mode = AR8327_PAD_MAC_SGMII,
.sgmii_delay_en = true,
};

static struct ar8327_platform_data tl_wr1043nd_v4_ar8327_data = {
.pad0_cfg = &tl_wr1043nd_v4_ar8327_pad0_cfg,
.port0_cfg = {
.force_link = 1,
.speed = AR8327_PORT_SPEED_1000,
.duplex = 1,
.txpause = 1,
.rxpause = 1,
},
};

static struct mdio_board_info tl_wr1043nd_v4_mdio0_info[] = {
{
.bus_id = "ag71xx-mdio.0",
.phy_addr = 0,
.platform_data = &tl_wr1043nd_v4_ar8327_data,
},
};

static void __init tl_wr1043nd_v4_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(TL_WR1043_V4_MAC_LOCATION);
u8 *eeprom = (u8 *) KSEG1ADDR(TL_WR1043_V4_EEPROM_ADDR);

ath79_register_m25p80(NULL);

ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
ath79_eth0_data.phy_mask = BIT(0);

mdiobus_register_board_info(tl_wr1043nd_v4_mdio0_info,
ARRAY_SIZE(tl_wr1043nd_v4_mdio0_info));

ath79_register_usb();
ath79_register_mdio(0, 0);
ath79_register_eth(0);

ath79_register_wmac(eeprom + TL_WR1043_V4_WMAC_CALDATA_OFFSET, mac);

ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr1043nd_v4_leds_gpio),
tl_wr1043nd_v4_leds_gpio);

ath79_register_gpio_keys_polled(-1, TL_WR1043_V4_KEYS_POLL_INTERVAL,
ARRAY_SIZE(tl_wr1043nd_v4_gpio_keys),
tl_wr1043nd_v4_gpio_keys);

gpio_request_one(TL_WR1043_V4_GPIO_USB_POWER,
GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
"USB power");
}

MIPS_MACHINE(ATH79_MACH_TL_WR1043ND_V4, "TL-WR1043ND-v4",
"TP-LINK TL-WR1043ND v4", tl_wr1043nd_v4_setup);
1 change: 1 addition & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ enum ath79_mach_type {
ATH79_MACH_TL_WR1041N_V2, /* TP-LINK TL-WR1041N v2 */
ATH79_MACH_TL_WR1043ND, /* TP-LINK TL-WR1043ND */
ATH79_MACH_TL_WR1043ND_V2, /* TP-LINK TL-WR1043ND v2 */
ATH79_MACH_TL_WR1043ND_V4, /* TP-LINK TL-WR1043ND v4 */
ATH79_MACH_TL_WR2543N, /* TP-LINK TL-WR2543N/ND */
ATH79_MACH_TL_WR703N, /* TP-LINK TL-WR703N */
ATH79_MACH_TL_WR710N, /* TP-LINK TL-WR710N */
Expand Down
32 changes: 31 additions & 1 deletion target/linux/ar71xx/image/tp-link.mk
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,20 @@ define Build/mktplinkfw
$(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
endef

# mktplinkfw-combined
#
# -c combined image
define Build/mktplinkfw-combined
$(STAGING_DIR_HOST)/bin/mktplinkfw \
-H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) $(1) \
-m $(TPLINK_HEADER_VERSION) \
-k $@ \
-o $@.new \
-s -S \
-c
@mv $@.new $@
endef

# mktplinkfw-initramfs <optional extra arguments to mktplinkfw binary>
#
# -c combined image
Expand Down Expand Up @@ -592,7 +606,23 @@ define Device/tl-wr1043nd-v3
DEVICE_PROFILE := TLWR1043
TPLINK_HWID := 0x10430003
endef
TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3

define Device/tl-wr1043nd-v4
MTDPARTS := spi0.0:128k(u-boot)ro,1536k(kernel),14016k(rootfs),128k(product-info)ro,320k(config)ro,64k(partition-table)ro,128k(logs)ro,64k(ART)ro,15552k@0x20000(firmware)
IMAGE_SIZE := 15552k
BOARDNAME := TL-WR1043ND-v4
TPLINK_BOARD_NAME := TLWR1043NDV4
TPLINK_HWID := 0x10430004
TPLINK_FLASHLAYOUT := 16Msafeloader
DEVICE_PROFILE := TLWR1043
LOADER_TYPE := elf
KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-combined
IMAGES := sysupgrade.bin factory.bin
IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
endef

TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3 tl-wr1043nd-v4

define Device/tl-wr2543-v1
$(Device/tplink-8mlzma)
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/mikrotik/config-default
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
# CONFIG_ATH79_MACH_TL_WR1041N_V2 is not set
# CONFIG_ATH79_MACH_TL_WR1043ND is not set
# CONFIG_ATH79_MACH_TL_WR1043ND_V2 is not set
# CONFIG_ATH79_MACH_TL_WR1043ND_V4 is not set
# CONFIG_ATH79_MACH_TL_WR2543N is not set
# CONFIG_ATH79_MACH_TL_WR703N is not set
# CONFIG_ATH79_MACH_TL_WR720N_V3 is not set
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/nand/config-default
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
# CONFIG_ATH79_MACH_TL_WDR4300 is not set
# CONFIG_ATH79_MACH_TL_WR1041N_V2 is not set
# CONFIG_ATH79_MACH_TL_WR1043ND is not set
# CONFIG_ATH79_MACH_TL_WR1043ND_V4 is not set
# CONFIG_ATH79_MACH_TL_WR2543N is not set
# CONFIG_ATH79_MACH_TL_WR703N is not set
# CONFIG_ATH79_MACH_TL_WR720N_V3 is not set
Expand Down

0 comments on commit df384cf

Please sign in to comment.