diff --git a/.config b/.config index bba31bd..089b228 100644 --- a/.config +++ b/.config @@ -437,7 +437,7 @@ CONFIG_OPKGSMIME_PASSPHRASE=y # Base system # CONFIG_PACKAGE_base-files=y -# CONFIG_PACKAGE_block-mount is not set +CONFIG_PACKAGE_block-mount=m # CONFIG_PACKAGE_bridge is not set CONFIG_PACKAGE_busybox=y # CONFIG_BUSYBOX_CUSTOM is not set @@ -1464,7 +1464,7 @@ CONFIG_PACKAGE_usign=y # CONFIG_PACKAGE_kmod-md-mod is not set # CONFIG_PACKAGE_kmod-nbd is not set # CONFIG_PACKAGE_kmod-scsi-cdrom is not set -# CONFIG_PACKAGE_kmod-scsi-core is not set +CONFIG_PACKAGE_kmod-scsi-core=m # CONFIG_PACKAGE_kmod-scsi-generic is not set # @@ -1542,7 +1542,7 @@ CONFIG_PACKAGE_usign=y # CONFIG_PACKAGE_kmod-fs-ntfs is not set # CONFIG_PACKAGE_kmod-fs-reiserfs is not set # CONFIG_PACKAGE_kmod-fs-udf is not set -# CONFIG_PACKAGE_kmod-fs-vfat is not set +CONFIG_PACKAGE_kmod-fs-vfat=m # CONFIG_PACKAGE_kmod-fs-xfs is not set # CONFIG_PACKAGE_kmod-fuse is not set @@ -1607,7 +1607,7 @@ CONFIG_PACKAGE_kmod-lib-crc-ccitt=y # CONFIG_PACKAGE_kmod-lib-crc8 is not set # CONFIG_PACKAGE_kmod-lib-lz4 is not set # CONFIG_PACKAGE_kmod-lib-lzo is not set -# CONFIG_PACKAGE_kmod-lib-textsearch is not set +CONFIG_PACKAGE_kmod-lib-textsearch=m # CONFIG_PACKAGE_kmod-lib-zlib is not set # @@ -1616,7 +1616,7 @@ CONFIG_PACKAGE_kmod-lib-crc-ccitt=y CONFIG_PACKAGE_kmod-nls-base=y # CONFIG_PACKAGE_kmod-nls-cp1250 is not set # CONFIG_PACKAGE_kmod-nls-cp1251 is not set -# CONFIG_PACKAGE_kmod-nls-cp437 is not set +CONFIG_PACKAGE_kmod-nls-cp437=m # CONFIG_PACKAGE_kmod-nls-cp775 is not set # CONFIG_PACKAGE_kmod-nls-cp850 is not set # CONFIG_PACKAGE_kmod-nls-cp852 is not set @@ -1624,7 +1624,7 @@ CONFIG_PACKAGE_kmod-nls-base=y # CONFIG_PACKAGE_kmod-nls-cp864 is not set # CONFIG_PACKAGE_kmod-nls-cp866 is not set # CONFIG_PACKAGE_kmod-nls-cp932 is not set -# CONFIG_PACKAGE_kmod-nls-iso8859-1 is not set +CONFIG_PACKAGE_kmod-nls-iso8859-1=m # CONFIG_PACKAGE_kmod-nls-iso8859-13 is not set # CONFIG_PACKAGE_kmod-nls-iso8859-15 is not set # CONFIG_PACKAGE_kmod-nls-iso8859-2 is not set @@ -1647,7 +1647,7 @@ CONFIG_PACKAGE_kmod-ip6tables=y # CONFIG_PACKAGE_kmod-ipt-compat-xtables is not set # CONFIG_PACKAGE_kmod-ipt-condition is not set CONFIG_PACKAGE_kmod-ipt-conntrack=y -# CONFIG_PACKAGE_kmod-ipt-conntrack-extra is not set +CONFIG_PACKAGE_kmod-ipt-conntrack-extra=m CONFIG_PACKAGE_kmod-ipt-core=y # CONFIG_PACKAGE_kmod-ipt-debug is not set # CONFIG_PACKAGE_kmod-ipt-delude is not set @@ -1686,15 +1686,15 @@ CONFIG_PACKAGE_kmod-ipt-nat=y # CONFIG_PACKAGE_kmod-ipt-u32 is not set # CONFIG_PACKAGE_kmod-ipt-ulog is not set CONFIG_PACKAGE_kmod-nf-conntrack=y -# CONFIG_PACKAGE_kmod-nf-conntrack-netlink is not set +CONFIG_PACKAGE_kmod-nf-conntrack-netlink=m CONFIG_PACKAGE_kmod-nf-conntrack6=y CONFIG_PACKAGE_kmod-nf-ipt=y CONFIG_PACKAGE_kmod-nf-ipt6=y CONFIG_PACKAGE_kmod-nf-nat=y # CONFIG_PACKAGE_kmod-nf-nat6 is not set -# CONFIG_PACKAGE_kmod-nf-nathelper is not set -# CONFIG_PACKAGE_kmod-nf-nathelper-extra is not set -# CONFIG_PACKAGE_kmod-nfnetlink is not set +CONFIG_PACKAGE_kmod-nf-nathelper=m +CONFIG_PACKAGE_kmod-nf-nathelper-extra=m +CONFIG_PACKAGE_kmod-nfnetlink=m # CONFIG_PACKAGE_kmod-nfnetlink-log is not set # CONFIG_PACKAGE_kmod-nfnetlink-queue is not set # CONFIG_PACKAGE_kmod-nft-core is not set @@ -1878,7 +1878,7 @@ CONFIG_PACKAGE_kmod-usb-core=y # CONFIG_PACKAGE_kmod-usb-ohci-pci is not set # CONFIG_PACKAGE_kmod-usb-printer is not set # CONFIG_PACKAGE_kmod-usb-serial is not set -# CONFIG_PACKAGE_kmod-usb-storage is not set +CONFIG_PACKAGE_kmod-usb-storage=m # CONFIG_PACKAGE_kmod-usb-storage-extras is not set # CONFIG_PACKAGE_kmod-usb-uhci is not set # CONFIG_PACKAGE_kmod-usb-wdm is not set @@ -2631,7 +2631,7 @@ CONFIG_PACKAGE_liblzo=m # CONFIG_PACKAGE_libmicroxml is not set # CONFIG_PACKAGE_libminiupnpc is not set # CONFIG_PACKAGE_libmms is not set -# CONFIG_PACKAGE_libmnl is not set +CONFIG_PACKAGE_libmnl=m # CONFIG_PACKAGE_libmodbus is not set # CONFIG_PACKAGE_libmosquitto is not set # CONFIG_PACKAGE_libmosquitto-nossl is not set @@ -2649,15 +2649,15 @@ CONFIG_PACKAGE_libncurses=m # CONFIG_PACKAGE_libnet-1.2.x is not set # CONFIG_PACKAGE_libnetconf is not set # CONFIG_PACKAGE_libnetfilter-acct is not set -# CONFIG_PACKAGE_libnetfilter-conntrack is not set -# CONFIG_PACKAGE_libnetfilter-cthelper is not set -# CONFIG_PACKAGE_libnetfilter-cttimeout is not set +CONFIG_PACKAGE_libnetfilter-conntrack=m +CONFIG_PACKAGE_libnetfilter-cthelper=m +CONFIG_PACKAGE_libnetfilter-cttimeout=m # CONFIG_PACKAGE_libnetfilter-log is not set -# CONFIG_PACKAGE_libnetfilter-queue is not set +CONFIG_PACKAGE_libnetfilter-queue=m # CONFIG_PACKAGE_libnetsnmp is not set # CONFIG_PACKAGE_libnettle is not set # CONFIG_PACKAGE_libnfc is not set -# CONFIG_PACKAGE_libnfnetlink is not set +CONFIG_PACKAGE_libnfnetlink=m # CONFIG_PACKAGE_libnftnl is not set # CONFIG_PACKAGE_libnl is not set # CONFIG_PACKAGE_libnl-core is not set @@ -2695,7 +2695,7 @@ CONFIG_PACKAGE_libpopt=m # CONFIG_PACKAGE_libprotobuf-c is not set # CONFIG_PACKAGE_libqrencode is not set # CONFIG_PACKAGE_libradcli is not set -# CONFIG_PACKAGE_libreadline is not set +CONFIG_PACKAGE_libreadline=m # CONFIG_PACKAGE_libroxml is not set # CONFIG_PACKAGE_librpc is not set # CONFIG_PACKAGE_librrd1 is not set @@ -2809,23 +2809,23 @@ CONFIG_PACKAGE_zlib=y # CONFIG_LUCI_LANG_pt is not set # CONFIG_LUCI_LANG_no is not set # CONFIG_LUCI_LANG_en is not set -# CONFIG_LUCI_LANG_el is not set +# CONFIG_LUCI_LANG_pl is not set # CONFIG_LUCI_LANG_sk is not set -# CONFIG_LUCI_LANG_ja is not set +# CONFIG_LUCI_LANG_ru is not set # CONFIG_LUCI_LANG_vi is not set -# CONFIG_LUCI_LANG_de is not set +# CONFIG_LUCI_LANG_he is not set # CONFIG_LUCI_LANG_ro is not set -# CONFIG_LUCI_LANG_pt-br is not set # CONFIG_LUCI_LANG_ms is not set -# CONFIG_LUCI_LANG_pl is not set # CONFIG_LUCI_LANG_zh-cn is not set -# CONFIG_LUCI_LANG_he is not set +# CONFIG_LUCI_LANG_de is not set # CONFIG_LUCI_LANG_zh-tw is not set # CONFIG_LUCI_LANG_tr is not set # CONFIG_LUCI_LANG_sv is not set -# CONFIG_LUCI_LANG_ru is not set +# CONFIG_LUCI_LANG_ja is not set +# CONFIG_LUCI_LANG_el is not set # CONFIG_LUCI_LANG_ca is not set # CONFIG_LUCI_LANG_es is not set +# CONFIG_LUCI_LANG_pt-br is not set # CONFIG_LUCI_LANG_cs is not set # CONFIG_LUCI_LANG_fr is not set # CONFIG_LUCI_LANG_it is not set @@ -3051,7 +3051,7 @@ CONFIG_RSYNC_zlib=y # Firewall # # CONFIG_PACKAGE_arptables is not set -# CONFIG_PACKAGE_conntrack-tools is not set +CONFIG_PACKAGE_conntrack-tools=m # CONFIG_PACKAGE_ebtables is not set # CONFIG_PACKAGE_fwknop is not set # CONFIG_PACKAGE_fwknopd is not set @@ -3064,7 +3064,7 @@ CONFIG_PACKAGE_iptables=y # CONFIG_PACKAGE_iptables-mod-cluster is not set # CONFIG_PACKAGE_iptables-mod-clusterip is not set # CONFIG_PACKAGE_iptables-mod-condition is not set -# CONFIG_PACKAGE_iptables-mod-conntrack-extra is not set +CONFIG_PACKAGE_iptables-mod-conntrack-extra=m # CONFIG_PACKAGE_iptables-mod-delude is not set # CONFIG_PACKAGE_iptables-mod-dhcpmac is not set # CONFIG_PACKAGE_iptables-mod-dnetmap is not set @@ -3260,7 +3260,19 @@ CONFIG_PACKAGE_iptables=y # CONFIG_PACKAGE_mcproxy is not set # CONFIG_PACKAGE_mwan3 is not set # CONFIG_PACKAGE_olsrd is not set -# CONFIG_PACKAGE_quagga is not set +CONFIG_PACKAGE_quagga=m +# CONFIG_PACKAGE_quagga-babeld is not set +CONFIG_PACKAGE_quagga-bgpd=m +# CONFIG_PACKAGE_quagga-isisd is not set +# CONFIG_PACKAGE_quagga-libospf is not set +CONFIG_PACKAGE_quagga-libzebra=m +# CONFIG_PACKAGE_quagga-ospf6d is not set +# CONFIG_PACKAGE_quagga-ospfd is not set +# CONFIG_PACKAGE_quagga-ripd is not set +# CONFIG_PACKAGE_quagga-ripngd is not set +CONFIG_PACKAGE_quagga-vtysh=m +CONFIG_PACKAGE_quagga-watchquagga=m +CONFIG_PACKAGE_quagga-zebra=m # CONFIG_PACKAGE_relayd is not set # CONFIG_PACKAGE_smcroute is not set # CONFIG_PACKAGE_ss is not set @@ -3640,7 +3652,8 @@ CONFIG_PACKAGE_ppp-mod-pppoe=y # CONFIG_PACKAGE_remserial is not set # CONFIG_PACKAGE_rssileds is not set # CONFIG_PACKAGE_samba36-client is not set -# CONFIG_PACKAGE_samba36-server is not set +CONFIG_PACKAGE_samba36-server=m +CONFIG_PACKAGE_SAMBA_MAX_DEBUG_LEVEL=-1 # CONFIG_PACKAGE_scapy is not set # CONFIG_PACKAGE_sctp is not set # CONFIG_PACKAGE_sctp-tools is not set diff --git a/bits/dev-ap9x-pci.c b/bits/dev-ap9x-pci.c new file mode 100644 index 0000000..19ba3da --- /dev/null +++ b/bits/dev-ap9x-pci.c @@ -0,0 +1,174 @@ +/* + * Atheros AP9X reference board PCI initialization + * + * Copyright (C) 2009-2012 Gabor Juhos + * + * 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 +#include +#include + +#include + +#include "dev-ap9x-pci.h" +#include "pci-ath9k-fixup.h" +#include "pci.h" + +static struct ath9k_platform_data ap9x_wmac0_data = { + .led_pin = -1, +}; +static struct ath9k_platform_data ap9x_wmac1_data = { + .led_pin = -1, +}; +static char ap9x_wmac0_mac[6]; +static char ap9x_wmac1_mac[6]; + +__init void ap9x_pci_setup_wmac_led_pin(unsigned wmac, int pin) +{ + switch (wmac) { + case 0: + ap9x_wmac0_data.led_pin = pin; + break; + case 1: + ap9x_wmac1_data.led_pin = pin; + break; + } +} + +__init struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac) +{ + switch (wmac) { + case 0: + return &ap9x_wmac0_data; + + case 1: + return &ap9x_wmac1_data; + } + + return NULL; +} + +__init void ap9x_pci_setup_wmac_gpio(unsigned wmac, u32 mask, u32 val) +{ + switch (wmac) { + case 0: + ap9x_wmac0_data.gpio_mask = mask; + ap9x_wmac0_data.gpio_val = val; + break; + case 1: + ap9x_wmac1_data.gpio_mask = mask; + ap9x_wmac1_data.gpio_val = val; + break; + } +} + +__init void ap9x_pci_setup_wmac_leds(unsigned wmac, struct gpio_led *leds, + int num_leds) +{ + switch (wmac) { + case 0: + ap9x_wmac0_data.leds = leds; + ap9x_wmac0_data.num_leds = num_leds; + break; + case 1: + ap9x_wmac1_data.leds = leds; + ap9x_wmac1_data.num_leds = num_leds; + break; + } +} + +static int ap91_pci_plat_dev_init(struct pci_dev *dev) +{ + switch (PCI_SLOT(dev->devfn)) { + case 0: + dev->dev.platform_data = &ap9x_wmac0_data; + break; + } + + return 0; +} + +__init void ap91_pci_init(u8 *cal_data, u8 *mac_addr) +{ + if (cal_data) + memcpy(ap9x_wmac0_data.eeprom_data, cal_data, + sizeof(ap9x_wmac0_data.eeprom_data)); + + if (mac_addr) { + memcpy(ap9x_wmac0_mac, mac_addr, sizeof(ap9x_wmac0_mac)); + ap9x_wmac0_data.macaddr = ap9x_wmac0_mac; + } + + pci_enable_ath9k_fixup(0, ap9x_wmac0_data.eeprom_data); + + ath79_pci_set_plat_dev_init(ap91_pci_plat_dev_init); + ath79_register_pci(); +} + +__init void ap91_pci_init_late(u8 *cal_data, u8 *mac_addr) +{ + if (cal_data) + memcpy(ap9x_wmac0_data.eeprom_data, cal_data, + sizeof(ap9x_wmac0_data.eeprom_data)); + + if (mac_addr) { + memcpy(ap9x_wmac0_mac, mac_addr, sizeof(ap9x_wmac0_mac)); + ap9x_wmac0_data.macaddr = ap9x_wmac0_mac; + } + + pci_late_ath9k_fixup(); +} + + +__init void ap91_pci_init_simple(void) +{ + ap91_pci_init(NULL, NULL); + ap9x_wmac0_data.eeprom_name = "pci_wmac0.eeprom"; +} + +static int ap94_pci_plat_dev_init(struct pci_dev *dev) +{ + switch (PCI_SLOT(dev->devfn)) { + case 17: + dev->dev.platform_data = &ap9x_wmac0_data; + break; + + case 18: + dev->dev.platform_data = &ap9x_wmac1_data; + break; + } + + return 0; +} + +__init void ap94_pci_init(u8 *cal_data0, u8 *mac_addr0, + u8 *cal_data1, u8 *mac_addr1) +{ + if (cal_data0) + memcpy(ap9x_wmac0_data.eeprom_data, cal_data0, + sizeof(ap9x_wmac0_data.eeprom_data)); + + if (cal_data1) + memcpy(ap9x_wmac1_data.eeprom_data, cal_data1, + sizeof(ap9x_wmac1_data.eeprom_data)); + + if (mac_addr0) { + memcpy(ap9x_wmac0_mac, mac_addr0, sizeof(ap9x_wmac0_mac)); + ap9x_wmac0_data.macaddr = ap9x_wmac0_mac; + } + + if (mac_addr1) { + memcpy(ap9x_wmac1_mac, mac_addr1, sizeof(ap9x_wmac1_mac)); + ap9x_wmac1_data.macaddr = ap9x_wmac1_mac; + } + + ath79_pci_set_plat_dev_init(ap94_pci_plat_dev_init); + ath79_register_pci(); + + pci_enable_ath9k_fixup(17, ap9x_wmac0_data.eeprom_data); + pci_enable_ath9k_fixup(18, ap9x_wmac1_data.eeprom_data); +} diff --git a/bits/dev-ap9x-pci.h b/bits/dev-ap9x-pci.h new file mode 100644 index 0000000..ea0a5ac --- /dev/null +++ b/bits/dev-ap9x-pci.h @@ -0,0 +1,49 @@ +/* + * Atheros AP9X reference board PCI initialization + * + * Copyright (C) 2009-2012 Gabor Juhos + * + * 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. + */ + +#ifndef _ATH79_DEV_AP9X_PCI_H +#define _ATH79_DEV_AP9X_PCI_H + +struct gpio_led; +struct ath9k_platform_data; + +#if defined(CONFIG_ATH79_DEV_AP9X_PCI) +void ap9x_pci_setup_wmac_led_pin(unsigned wmac, int pin); +void ap9x_pci_setup_wmac_gpio(unsigned wmac, u32 mask, u32 val); +void ap9x_pci_setup_wmac_leds(unsigned wmac, struct gpio_led *leds, + int num_leds); +struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac); + +void ap91_pci_init(u8 *cal_data, u8 *mac_addr); +void ap91_pci_init_late(u8 *cal_data, u8 *mac_addr); +void ap91_pci_init_simple(void); +void ap94_pci_init(u8 *cal_data0, u8 *mac_addr0, + u8 *cal_data1, u8 *mac_addr1); + +#else +static inline void ap9x_pci_setup_wmac_led_pin(unsigned wmac, int pin) {} +static inline void ap9x_pci_setup_wmac_gpio(unsigned wmac, + u32 mask, u32 val) {} +static inline void ap9x_pci_setup_wmac_leds(unsigned wmac, + struct gpio_led *leds, + int num_leds) {} +static inline struct ath9k_platform_data *ap9x_pci_get_wmac_data(unsigned wmac) +{ + return NULL; +} + +static inline void ap91_pci_init(u8 *cal_data, u8 *mac_addr) {} +static inline void ap91_pci_init_simple(void) {} +static inline void ap94_pci_init(u8 *cal_data0, u8 *mac_addr0, + u8 *cal_data1, u8 *mac_addr1) {} +#endif + +#endif /* _ATH79_DEV_AP9X_PCI_H */ + diff --git a/bits/mach-tl-wdr4300.c b/bits/mach-tl-wdr4300.c new file mode 100644 index 0000000..426b1fa --- /dev/null +++ b/bits/mach-tl-wdr4300.c @@ -0,0 +1,260 @@ +/* + * TP-LINK TL-WDR4300 board support + * + * Copyright (C) 2012 Gabor Juhos + * + * 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 +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + + +#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-spi.h" +#include "dev-usb.h" +#include "dev-wmac.h" +#include "machtypes.h" + +#define WDR4300_GPIO_LED_USB1 11 +#define WDR4300_GPIO_LED_USB2 12 +#define WDR4300_GPIO_LED_WLAN2G 13 +#define WDR4300_GPIO_LED_SYSTEM 14 +#define WDR4300_GPIO_LED_QSS 15 + +#define WDR4300_GPIO_BTN_WPS 16 +#define WDR4300_GPIO_BTN_RFKILL 17 + +#define WDR4300_GPIO_EXTERNAL_LNA0 18 +#define WDR4300_GPIO_EXTERNAL_LNA1 19 + +#define WDR4300_GPIO_USB1_POWER 22 +#define WDR4300_GPIO_USB2_POWER 21 + +#define WDR4300_KEYS_POLL_INTERVAL 20 /* msecs */ +#define WDR4300_KEYS_DEBOUNCE_INTERVAL (3 * WDR4300_KEYS_POLL_INTERVAL) + +#define WDR4300_MAC0_OFFSET 0 +#define WDR4300_MAC1_OFFSET 6 +#define WDR4300_WMAC_CALDATA_OFFSET 0x1000 +#define WDR4300_PCIE_CALDATA_OFFSET 0x5000 + +#define MAC_LEN 6 + +#define CONFIG_OFFSET 0x1fc00 +#define ART_OFFSET 0x1000 + +static const char *wdr4300_part_probes[] = { + "tp-link", + NULL, +}; + +static struct flash_platform_data wdr4300_flash_data = { + .part_probes = wdr4300_part_probes, +}; + +static struct gpio_led wdr4300_leds_gpio[] __initdata = { + { + .name = "tp-link:blue:qss", + .gpio = WDR4300_GPIO_LED_QSS, + .active_low = 1, + }, + { + .name = "tp-link:blue:system", + .gpio = WDR4300_GPIO_LED_SYSTEM, + .active_low = 1, + }, + { + .name = "tp-link:green:usb1", + .gpio = WDR4300_GPIO_LED_USB1, + .active_low = 1, + }, + { + .name = "tp-link:green:usb2", + .gpio = WDR4300_GPIO_LED_USB2, + .active_low = 1, + }, + { + .name = "tp-link:blue:wlan2g", + .gpio = WDR4300_GPIO_LED_WLAN2G, + .active_low = 1, + }, +}; + +static struct gpio_keys_button wdr4300_gpio_keys[] __initdata = { + { + .desc = "QSS button", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = WDR4300_KEYS_DEBOUNCE_INTERVAL, + .gpio = WDR4300_GPIO_BTN_WPS, + .active_low = 1, + }, + { + .desc = "RFKILL switch", + .type = EV_SW, + .code = KEY_RFKILL, + .debounce_interval = WDR4300_KEYS_DEBOUNCE_INTERVAL, + .gpio = WDR4300_GPIO_BTN_RFKILL, + .active_low = 1, + }, +}; + +static const struct ar8327_led_info wdr4300_leds_ar8327[] __initconst = { + AR8327_LED_INFO(PHY0_0, HW, "tp-link:blue:wan"), + AR8327_LED_INFO(PHY1_0, HW, "tp-link:blue:lan1"), + AR8327_LED_INFO(PHY2_0, HW, "tp-link:blue:lan2"), + AR8327_LED_INFO(PHY3_0, HW, "tp-link:blue:lan3"), + AR8327_LED_INFO(PHY4_0, HW, "tp-link:blue:lan4"), +}; + +static struct ar8327_pad_cfg wdr4300_ar8327_pad0_cfg = { + .mode = AR8327_PAD_MAC_RGMII, + .txclk_delay_en = true, + .rxclk_delay_en = true, + .txclk_delay_sel = AR8327_CLK_DELAY_SEL1, + .rxclk_delay_sel = AR8327_CLK_DELAY_SEL2, +}; + +static struct ar8327_led_cfg wdr4300_ar8327_led_cfg = { + .led_ctrl0 = 0xc737c737, + .led_ctrl1 = 0x00000000, + .led_ctrl2 = 0x00000000, + .led_ctrl3 = 0x0030c300, + .open_drain = false, +}; + +static struct ar8327_platform_data wdr4300_ar8327_data = { + .pad0_cfg = &wdr4300_ar8327_pad0_cfg, + .port0_cfg = { + .force_link = 1, + .speed = AR8327_PORT_SPEED_1000, + .duplex = 1, + .txpause = 1, + .rxpause = 1, + }, + .led_cfg = &wdr4300_ar8327_led_cfg, + .num_leds = ARRAY_SIZE(wdr4300_leds_ar8327), + .leds = wdr4300_leds_ar8327, +}; + +static struct mdio_board_info wdr4300_mdio0_info[] = { + { + .bus_id = "ag71xx-mdio.0", + .phy_addr = 0, + .platform_data = &wdr4300_ar8327_data, + }, +}; + +static u8 *mac, *art; + + + +static void notify_add(struct mtd_info *mtd) +{ + size_t len; + u8 tmpmac[ETH_ALEN]; + + if (!strcmp(mtd->name, "u-boot") && !mac) { + mac = kmalloc(MAC_LEN, GFP_KERNEL); + if (!mac) return; + + mtd_read(mtd, CONFIG_OFFSET, MAC_LEN, &len, mac); + + ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0); + + mdiobus_register_board_info(wdr4300_mdio0_info, + ARRAY_SIZE(wdr4300_mdio0_info)); + + ath79_register_mdio(0, 0x0); + + ath79_init_mac(ath79_eth0_data.mac_addr, mac, -2); + + /* GMAC0 is connected to an AR8327N switch */ + ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII; + ath79_eth0_data.phy_mask = BIT(0); + ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev; + ath79_eth0_pll_data.pll_1000 = 0x06000000; + ath79_register_eth(0); + } + + if (!strcmp(mtd->name, "art") && !art) { + art = kmalloc(mtd->size, GFP_KERNEL); + if (!art) return; + + mtd_read(mtd, 0, mtd->size, &len, art); + } + + + if (mac && art) { + ath79_init_mac(tmpmac, mac, -1); + ath79_register_wmac(art + WDR4300_WMAC_CALDATA_OFFSET, tmpmac); + + ath79_init_mac(tmpmac, mac, 0); + ap9x_pci_setup_wmac_led_pin(0, 0); + ap91_pci_init_late(art + WDR4300_PCIE_CALDATA_OFFSET, tmpmac); + + kfree(art); + art = NULL; + + kfree(mac); + mac = NULL; + } +} + +static void notify_remove(struct mtd_info *mtd) +{ +} + +static struct mtd_notifier spi_notifier = { + .add = notify_add, + .remove = notify_remove +}; + +static void __init wdr4300_setup(void) +{ + + register_mtd_user(&spi_notifier); + + ath79_register_m25p80(&wdr4300_flash_data); + ath79_register_leds_gpio(-1, ARRAY_SIZE(wdr4300_leds_gpio), + wdr4300_leds_gpio); + ath79_register_gpio_keys_polled(-1, WDR4300_KEYS_POLL_INTERVAL, + ARRAY_SIZE(wdr4300_gpio_keys), + wdr4300_gpio_keys); + + ath79_wmac_set_ext_lna_gpio(0, WDR4300_GPIO_EXTERNAL_LNA0); + ath79_wmac_set_ext_lna_gpio(1, WDR4300_GPIO_EXTERNAL_LNA1); + + ap91_pci_init_simple(); + + + gpio_request_one(WDR4300_GPIO_USB1_POWER, + GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, + "USB1 power"); + gpio_request_one(WDR4300_GPIO_USB2_POWER, + GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, + "USB2 power"); + ath79_register_usb(); +} + +MIPS_MACHINE(ATH79_MACH_TL_WDR4300, "TL-WDR4300", + "TP-LINK TL-WDR3600/4300/4310", + wdr4300_setup); diff --git a/bits/pci-ath9k-fixup.c b/bits/pci-ath9k-fixup.c new file mode 100644 index 0000000..2fc022f --- /dev/null +++ b/bits/pci-ath9k-fixup.c @@ -0,0 +1,136 @@ +/* + * Atheros AP94 reference board PCI initialization + * + * Copyright (C) 2009-2010 Gabor Juhos + * + * 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 +#include + +#include +#include + +struct ath9k_fixup { + u16 *cal_data; + unsigned slot; +}; + +static int ath9k_num_fixups; +static struct ath9k_fixup ath9k_fixups[2]; + +static void ath9k_pci_fixup(struct pci_dev *dev) +{ + void __iomem *mem; + u16 *cal_data = NULL; + u16 cmd; + u32 bar0; + u32 val; + unsigned i; + + for (i = 0; i < ath9k_num_fixups; i++) { + if (ath9k_fixups[i].cal_data == NULL) + continue; + + if (ath9k_fixups[i].slot != PCI_SLOT(dev->devfn)) + continue; + + cal_data = ath9k_fixups[i].cal_data; + break; + } + + printk(KERN_ERR "ath9k_pci_fixup devfn %x cal_data %p\n",dev->devfn,cal_data); + + if (cal_data == NULL) + return; + + if (*cal_data != 0xa55a) { + pr_err("pci %s: invalid calibration data\n", pci_name(dev)); + return; + } + + pr_info("pci %s: fixup device configuration\n", pci_name(dev)); + + mem = ioremap(AR71XX_PCI_MEM_BASE, 0x10000); + if (!mem) { + pr_err("pci %s: ioremap error\n", pci_name(dev)); + return; + } + + pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar0); + + switch (ath79_soc) { + case ATH79_SOC_AR7161: + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, + AR71XX_PCI_MEM_BASE); + break; + case ATH79_SOC_AR7240: + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0xffff); + break; + + case ATH79_SOC_AR7241: + case ATH79_SOC_AR7242: + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0x1000ffff); + break; + case ATH79_SOC_AR9344: + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0x1000ffff); + break; + + default: + BUG(); + } + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; + pci_write_config_word(dev, PCI_COMMAND, cmd); + + /* set pointer to first reg address */ + cal_data += 3; + while (*cal_data != 0xffff) { + u32 reg; + reg = *cal_data++; + val = *cal_data++; + val |= (*cal_data++) << 16; + + __raw_writel(val, mem + reg); + udelay(100); + } + + pci_read_config_dword(dev, PCI_VENDOR_ID, &val); + dev->vendor = val & 0xffff; + dev->device = (val >> 16) & 0xffff; + + pci_read_config_dword(dev, PCI_CLASS_REVISION, &val); + dev->revision = val & 0xff; + dev->class = val >> 8; /* upper 3 bytes */ + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); + pci_write_config_word(dev, PCI_COMMAND, cmd); + + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, bar0); + + iounmap(mem); +} +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup); + +void __init pci_enable_ath9k_fixup(unsigned slot, u16 *cal_data) +{ + if (ath9k_num_fixups >= ARRAY_SIZE(ath9k_fixups)) + return; + + ath9k_fixups[ath9k_num_fixups].slot = slot; + ath9k_fixups[ath9k_num_fixups].cal_data = cal_data; + ath9k_num_fixups++; +} + +void __init pci_late_ath9k_fixup(void) +{ + struct pci_dev *dev = NULL; + + for_each_pci_dev(dev) + pci_fixup_device(pci_fixup_early, dev); +} diff --git a/bits/pci-ath9k-fixup.h b/bits/pci-ath9k-fixup.h new file mode 100644 index 0000000..28ecb2d --- /dev/null +++ b/bits/pci-ath9k-fixup.h @@ -0,0 +1,7 @@ +#ifndef _PCI_ATH9K_FIXUP +#define _PCI_ATH9K_FIXUP + +void pci_enable_ath9k_fixup(unsigned slot, u16 *cal_data) __init; +void pci_late_ath9k_fixup(void) __init; + +#endif /* _PCI_ATH9K_FIXUP */ diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile index 7bf2f27..55d141c 100644 --- a/target/linux/ar71xx/image/Makefile +++ b/target/linux/ar71xx/image/Makefile @@ -295,27 +295,86 @@ endef define Device/tplink-16mlzma $(Device/tplink) TPLINK_FLASHLAYOUT := 16Mlzma - IMAGE_SIZE := 15872k + IMAGE_SIZE := 16128k +endef + +define Device/tplink-32mlzma +$(Device/tplink) + TPLINK_FLASHLAYOUT := 32Mlzma + IMAGE_SIZE := 32512k endef -define Device/tl-wdr4300-v1 +define Device/tplink-64mlzma +$(Device/tplink) + TPLINK_FLASHLAYOUT := 64Mlzma + IMAGE_SIZE := 65024k + BLOCKSIZE := 256k +endef + +define Device/tl-wdr4300-v1-8m $(Device/tplink-8mlzma) BOARDNAME = TL-WDR4300 DEVICE_PROFILE = TLWDR4300 TPLINK_HWID := 0x43000001 endef +define Device/tl-wdr4300-v1-16m +$(Device/tplink-16mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x43000001 +endef + +define Device/tl-wdr4300-v1-32m +$(Device/tplink-32mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x43000001 +endef + +define Device/tl-wdr4300-v1-64m +$(Device/tplink-64mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x43000001 +endef + define Device/tl-wdr3500-v1 $(Device/tl-wdr4300-v1) BOARDNAME = TL-WDR3500 TPLINK_HWID := 0x35000001 endef -define Device/tl-wdr3600-v1 -$(Device/tl-wdr4300-v1) +define Device/tl-wdr3600-v1-8m +$(Device/tplink-8mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 TPLINK_HWID := 0x36000001 endef +define Device/tl-wdr3600-v1-16m +$(Device/tplink-16mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x36000001 +endef + +define Device/tl-wdr3600-v1-32m +$(Device/tplink-32mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x36000001 +endef + + +define Device/tl-wdr3600-v1-64m +$(Device/tplink-64mlzma) + BOARDNAME = TL-WDR4300 + DEVICE_PROFILE = TLWDR4300 + TPLINK_HWID := 0x36000001 +endef + + define Device/tl-wdr4300-v1-il $(Device/tl-wdr4300-v1) TPLINK_HWID := 0x43008001 @@ -330,7 +389,7 @@ define Device/mw4530r-v1 $(Device/tl-wdr4300-v1) TPLINK_HWID := 0x45300001 endef -TARGET_DEVICES += tl-wdr3500-v1 tl-wdr3600-v1 tl-wdr4300-v1 tl-wdr4300-v1-il tl-wdr4310-v1 mw4530r-v1 +TARGET_DEVICES += tl-wdr3500-v1 tl-wdr3600-v1-8m tl-wdr3600-v1-16m tl-wdr3600-v1-32m tl-wdr3600-v1-64m tl-wdr4300-v1-8m tl-wdr4300-v1-16m tl-wdr4300-v1-32m tl-wdr4300-v1-64m tl-wdr4300-v1-il tl-wdr4310-v1 mw4530r-v1 define Device/tl-wdr6500-v2 $(Device/tplink-8mlzma) diff --git a/target/linux/ar71xx/patches-4.1/999-always-bitbang-spi.patch b/target/linux/ar71xx/patches-4.1/999-always-bitbang-spi.patch index 1030c31..e9ebded 100644 --- a/target/linux/ar71xx/patches-4.1/999-always-bitbang-spi.patch +++ b/target/linux/ar71xx/patches-4.1/999-always-bitbang-spi.patch @@ -76,24 +76,164 @@ Index: linux-4.1.11/drivers/mtd/tplinkpart.c =================================================================== --- linux-4.1.11.orig/drivers/mtd/tplinkpart.c +++ linux-4.1.11/drivers/mtd/tplinkpart.c -@@ -149,7 +149,7 @@ static int tplink_parse_partitions_offse - parts[0].name = "u-boot"; - parts[0].offset = 0; - parts[0].size = offset; -- parts[0].mask_flags = MTD_WRITEABLE; -+ //parts[0].mask_flags = MTD_WRITEABLE; +@@ -24,9 +24,10 @@ + #define TPLINK_HEADER_V2 0x02000000 + #define MD5SUM_LEN 16 + +-#define TPLINK_ART_LEN 0x10000 ++#define TPLINK_ART_LEN 0x20000 + #define TPLINK_KERNEL_OFFS 0x20000 + #define TPLINK_64K_KERNEL_OFFS 0x10000 ++#define TPLINK_256K_KERNEL_OFFS 0x40000 + + struct tplink_fw_header { + uint32_t version; /* header version */ +@@ -111,12 +112,12 @@ static int tplink_check_rootfs_magic(str + static int tplink_parse_partitions_offset(struct mtd_info *master, + struct mtd_partition **pparts, + struct mtd_part_parser_data *data, +- size_t offset) ++ size_t offset,size_t art_offset) + { + struct mtd_partition *parts; + struct tplink_fw_header *header; + int nr_parts; +- size_t art_offset; ++ size_t art_len; + size_t rootfs_offset; + size_t squashfs_offset; + int ret; +@@ -130,7 +131,7 @@ static int tplink_parse_partitions_offse + + header = tplink_read_header(master, offset); + if (!header) { +- pr_notice("%s: no TP-Link header found\n", master->name); ++ pr_notice("%s: no TP-Link header found at 0x%x\n", master->name, offset); + ret = -ENODEV; + goto err_free_parts; + } +@@ -144,29 +145,62 @@ static int tplink_parse_partitions_offse + else + rootfs_offset = offset + be32_to_cpu(header->rootfs_ofs); - parts[1].name = "kernel"; - parts[1].offset = offset; -@@ -162,7 +162,7 @@ static int tplink_parse_partitions_offse - parts[3].name = "art"; - parts[3].offset = art_offset; - parts[3].size = TPLINK_ART_LEN; +- art_offset = master->size - TPLINK_ART_LEN; + +- parts[0].name = "u-boot"; +- parts[0].offset = 0; +- parts[0].size = offset; +- parts[0].mask_flags = MTD_WRITEABLE; +- +- parts[1].name = "kernel"; +- parts[1].offset = offset; +- parts[1].size = rootfs_offset - offset; +- +- parts[2].name = "rootfs"; +- parts[2].offset = rootfs_offset; +- parts[2].size = art_offset - rootfs_offset; +- +- parts[3].name = "art"; +- parts[3].offset = art_offset; +- parts[3].size = TPLINK_ART_LEN; - parts[3].mask_flags = MTD_WRITEABLE; -+ //parts[3].mask_flags = MTD_WRITEABLE; +- +- parts[4].name = "firmware"; +- parts[4].offset = offset; +- parts[4].size = art_offset - offset; ++ if (!art_offset) { ++ art_offset = master->size - TPLINK_ART_LEN; ++ ++ parts[0].name = "u-boot"; ++ parts[0].offset = 0; ++ parts[0].size = offset; ++ //parts[0].mask_flags = MTD_WRITEABLE; ++ ++ parts[1].name = "kernel"; ++ parts[1].offset = offset; ++ parts[1].size = rootfs_offset - offset; ++ ++ parts[2].name = "rootfs"; ++ parts[2].offset = rootfs_offset; ++ parts[2].size = art_offset - rootfs_offset; ++ ++ ++ parts[3].name = "art"; ++ parts[3].offset = art_offset; ++ parts[3].size = TPLINK_ART_LEN; ++ //parts[3].mask_flags = MTD_WRITEABLE; ++ ++ parts[4].name = "firmware"; ++ parts[4].offset = offset; ++ parts[4].size = art_offset - offset; ++ } else { ++ nr_parts++; ++ ++ parts[0].name = "u-boot"; ++ parts[0].offset = 0; ++ parts[0].size = art_offset; ++ //parts[0].mask_flags = MTD_WRITEABLE; ++ ++ parts[1].name = "kernel"; ++ parts[1].offset = offset; ++ parts[1].size = rootfs_offset - offset; ++ ++ parts[2].name = "rootfs"; ++ parts[2].offset = rootfs_offset; ++ parts[2].size = master->size - rootfs_offset; ++ ++ ++ parts[3].name = "art"; ++ parts[3].offset = art_offset; ++ parts[3].size = TPLINK_ART_LEN; ++ //parts[3].mask_flags = MTD_WRITEABLE; ++ ++ parts[4].name = "firmware"; ++ parts[4].offset = offset; ++ parts[4].size = master-> size - offset; ++ ++ parts[5].name = "bootloader"; ++ parts[5].offset = 0; ++ parts[5].size = offset; ++ } + + vfree(header); + +@@ -184,8 +218,17 @@ static int tplink_parse_partitions(struc + struct mtd_partition **pparts, + struct mtd_part_parser_data *data) + { +- return tplink_parse_partitions_offset(master, pparts, data, +- TPLINK_KERNEL_OFFS); ++ int ret; ++ ++ ret = tplink_parse_partitions_offset(master, pparts, data, ++ TPLINK_KERNEL_OFFS, 0); ++ ++ if (ret > 0) return ret; ++ ++ ret = tplink_parse_partitions_offset(master, pparts, data, ++ TPLINK_256K_KERNEL_OFFS, TPLINK_KERNEL_OFFS); ++ ++ return ret; + } - parts[4].name = "firmware"; - parts[4].offset = offset; + static int tplink_parse_64k_partitions(struct mtd_info *master, +@@ -193,7 +236,7 @@ static int tplink_parse_64k_partitions(s + struct mtd_part_parser_data *data) + { + return tplink_parse_partitions_offset(master, pparts, data, +- TPLINK_64K_KERNEL_OFFS); ++ TPLINK_64K_KERNEL_OFFS, 0); + } + + static struct mtd_part_parser tplink_parser = { +@@ -208,6 +251,7 @@ static struct mtd_part_parser tplink_64k + .name = "tp-link-64k", + }; + ++ + static int __init tplink_parser_init(void) + { + register_mtd_parser(&tplink_parser); Index: linux-4.1.11/include/linux/mtd/spi-nor.h =================================================================== --- linux-4.1.11.orig/include/linux/mtd/spi-nor.h @@ -105,127 +245,21 @@ Index: linux-4.1.11/include/linux/mtd/spi-nor.h +void spi_nor_reboot_hook(struct spi_nor *nor, const char *name); + #endif -Index: linux-4.1.11/arch/mips/ath79/mach-tl-mr3x20.c +Index: linux-4.1.11/arch/mips/ath79/mach-tl-wdr4300.c =================================================================== ---- linux-4.1.11.orig/arch/mips/ath79/mach-tl-mr3x20.c -+++ linux-4.1.11/arch/mips/ath79/mach-tl-mr3x20.c -@@ -11,6 +11,11 @@ - #include - - #include -+#include -+#include -+#include -+ -+ - - #include "dev-eth.h" - #include "dev-ap9x-pci.h" -@@ -75,28 +80,76 @@ static struct gpio_keys_button tl_mr3x20 - } - }; - -+ -+#define MAC_LEN 6 -+#define ART_LEN (ATH9K_PLAT_EEP_MAX_WORDS << 1) -+ -+#define CONFIG_OFFSET 0x1fc00 -+#define ART_OFFSET 0x1000 -+ -+static u8 *mac, *art; -+ -+static void notify_add(struct mtd_info *mtd) -+{ -+ size_t len; -+ -+ if (!strcmp(mtd->name, "u-boot") && !mac) { -+ mac = kmalloc(MAC_LEN, GFP_KERNEL); -+ if (!mac) return; -+ -+ mtd_read(mtd, CONFIG_OFFSET, MAC_LEN, &len, mac); -+ -+ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1); -+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1); -+ -+ ath79_register_mdio(0, 0x0); -+ -+ /* LAN ports */ -+ ath79_register_eth(1); -+ /* WAN port */ -+ ath79_register_eth(0); -+ } -+ -+ if (!strcmp(mtd->name, "art") && !art) { -+ art = kmalloc(ART_LEN, GFP_KERNEL); -+ if (!art) return; -+ -+ mtd_read(mtd, ART_OFFSET, ART_LEN, &len, art); -+ } -+ -+ -+ if (mac && art) { -+ ap91_pci_init(art, mac); -+ -+ pci_fixup_irqs(pci_common_swizzle, pcibios_map_irq); -+ -+ kfree(art); -+ art = NULL; -+ -+ kfree(mac); -+ mac = NULL; -+ } -+} -+ -+static void notify_remove(struct mtd_info *mtd) -+{ -+} -+ -+static struct mtd_notifier spi_notifier = { -+ .add = notify_add, -+ .remove = notify_remove -+}; -+ -+ - static void __init tl_ap99_setup(void) +--- linux-4.1.11.orig/arch/mips/ath79/mach-tl-wdr4300.c ++++ linux-4.1.11/arch/mips/ath79/mach-tl-wdr4300.c +@@ -156,9 +156,12 @@ static struct mdio_board_info wdr4300_md + static void __init wdr4300_setup(void) { -- u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); -- u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); -+ register_mtd_user(&spi_notifier); - - ath79_register_m25p80(&tl_mr3x20_flash_data); + u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); +- u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); ++ u8 *art = (u8 *) KSEG1ADDR(0x1f020000); + u8 tmpmac[ETH_ALEN]; - ath79_register_gpio_keys_polled(-1, TL_MR3X20_KEYS_POLL_INTERVAL, - ARRAY_SIZE(tl_mr3x20_gpio_keys), - tl_mr3x20_gpio_keys); -- -- ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1); -- ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1); -- -- ath79_register_mdio(0, 0x0); -- -- /* LAN ports */ -- ath79_register_eth(1); -- /* WAN port */ -- ath79_register_eth(0); -- -- ap91_pci_init(ee, mac); - } - - static void __init tl_mr3x20_usb_setup(void) -Index: linux-4.1.11/arch/mips/ath79/dev-ap9x-pci.c -=================================================================== ---- linux-4.1.11.orig/arch/mips/ath79/dev-ap9x-pci.c -+++ linux-4.1.11/arch/mips/ath79/dev-ap9x-pci.c -@@ -103,10 +103,10 @@ __init void ap91_pci_init(u8 *cal_data, - ap9x_wmac0_data.macaddr = ap9x_wmac0_mac; - } - -+ pci_enable_ath9k_fixup(0, ap9x_wmac0_data.eeprom_data); ++ if ((art[0]==1) && !art[1] && !art[2] && !art[3]) ++ art = (u8 *) KSEG1ADDR(0x1fff0000); + - ath79_pci_set_plat_dev_init(ap91_pci_plat_dev_init); - ath79_register_pci(); -- -- pci_enable_ath9k_fixup(0, ap9x_wmac0_data.eeprom_data); - } - - __init void ap91_pci_init_simple(void) + ath79_register_m25p80(&wdr4300_flash_data); + ath79_register_leds_gpio(-1, ARRAY_SIZE(wdr4300_leds_gpio), + wdr4300_leds_gpio); diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c index 4922afb..b0d4410 100644 --- a/tools/firmware-utils/src/mktplinkfw.c +++ b/tools/firmware-utils/src/mktplinkfw.c @@ -212,6 +212,24 @@ static struct flash_layout layouts[] = { .kernel_ep = 0x80060000, .rootfs_ofs = 0x100000, }, { + .id = "16Mlzma", + .fw_max_len = 0xfc0000, + .kernel_la = 0x80060000, + .kernel_ep = 0x80060000, + .rootfs_ofs = 0x100000, + }, { + .id = "32Mlzma", + .fw_max_len = 0x1fc0000, + .kernel_la = 0x80060000, + .kernel_ep = 0x80060000, + .rootfs_ofs = 0x100000, + }, { + .id = "64Mlzma", + .fw_max_len = 0x3f80000, + .kernel_la = 0x80060000, + .kernel_ep = 0x80060000, + .rootfs_ofs = 0x100000, + }, { .id = "16Mppc", .fw_max_len = 0xf80000, .kernel_la = 0x00000000,