[LEDE-DEV] [PATCH 2/4] ar71xx: make the target compile with kernel 4.9
Hauke Mehrtens
hauke at hauke-m.de
Sat Oct 7 14:20:47 PDT 2017
This makes the ar71xx target compile with kernel 4.9.
Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---
target/linux/ar71xx/config-4.9 | 24 +++--
.../linux/ar71xx/files/arch/mips/ath79/mach-c60.c | 56 ++++++++++
.../ar71xx/files/arch/mips/ath79/mach-rb2011.c | 58 +++++++++++
.../ar71xx/files/arch/mips/ath79/mach-rb922.c | 58 +++++++++++
.../ar71xx/files/arch/mips/ath79/mach-rb95x.c | 56 ++++++++++
.../ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c | 58 +++++++++++
.../ar71xx/files/drivers/gpio/gpio-nxp-74hc153.c | 4 +
.../linux/ar71xx/files/drivers/mtd/cybertan_part.c | 5 +
.../ar71xx/files/drivers/mtd/nand/ar934x_nfc.c | 62 ++++++++++-
.../ar71xx/files/drivers/mtd/nand/rb4xx_nand.c | 56 ++++++++++
.../ar71xx/files/drivers/mtd/nand/rb750_nand.c | 56 ++++++++++
.../ar71xx/files/drivers/mtd/nand/rb91x_nand.c | 56 ++++++++++
target/linux/ar71xx/files/drivers/mtd/tplinkpart.c | 13 +++
.../linux/ar71xx/files/drivers/net/dsa/mv88e6063.c | 104 ++++++++-----------
.../net/ethernet/atheros/ag71xx/ag71xx_mdio.c | 4 +
.../net/ethernet/atheros/ag71xx/ag71xx_phy.c | 28 ++++-
.../ar71xx/files/drivers/spi/spi-rb4xx-cpld.c | 5 +
target/linux/ar71xx/mikrotik/config-default | 2 +-
target/linux/ar71xx/nand/config-default | 2 +-
.../002-add_back_gpio_function_select.patch | 8 +-
.../004-register_gpio_driver_earlier.patch | 4 +-
...make-ath79_ddr_ctrl_init-compatible-for-n.patch | 31 ------
...PS-ath79-do-AR724x-PCIe-root-complex-init.patch | 2 +-
.../patches-4.9/203-MIPS-ath79-fix-restart.patch | 4 +-
.../310-lib-add-rle-decompression.patch | 2 +-
.../403-mtd_fix_cfi_cmdset_0002_status_check.patch | 14 +--
.../patches-4.9/404-mtd-cybertan-trx-parser.patch | 10 +-
.../405-mtd-tp-link-partition-parser.patch | 6 +-
...low-to-pass-probe-types-via-platform-data.patch | 23 +++--
.../patches-4.9/409-mtd-rb4xx_nand_driver.patch | 6 +-
.../patches-4.9/410-mtd-rb750-nand-driver.patch | 2 +-
.../411-mtd-cfi_cmdset_0002-force-word-write.patch | 6 +-
...412-mtd-m25p80-zero-partition-parser-data.patch | 10 --
.../patches-4.9/413-mtd-ar934x-nand-driver.patch | 2 +-
.../patches-4.9/414-mtd-rb91x-nand-driver.patch | 2 +-
.../patches-4.9/423-dsa-add-88e6063-driver.patch | 14 +--
.../430-drivers-link-spi-before-mtd.patch | 4 +-
.../patches-4.9/432-spi-rb4xx-spi-driver.patch | 6 +-
.../patches-4.9/433-spi-rb4xx-cpld-driver.patch | 4 +-
.../patches-4.9/435-spi-vsc7385_driver.patch | 6 +-
.../440-leds-wndr3700-usb-led-driver.patch | 8 +-
.../patches-4.9/441-leds-rb750-led-driver.patch | 4 +-
.../450-gpio-nxp-74hc153-gpio-chip-driver.patch | 4 +-
...io-74x164-improve-platform-device-support.patch | 66 ++++++------
.../452-gpio-add-gpio-latch-driver.patch | 4 +-
.../460-m25p80-spi-read-flash-check.patch | 15 ---
.../490-usb-ehci-add-quirks-for-qca-socs.patch | 6 +-
.../ar71xx/patches-4.9/500-MIPS-fw-myloader.patch | 4 +-
...504-MIPS-ath79-add-ath79_device_reset_get.patch | 5 +-
...MIPS-ath79-add-ath79_gpio_function_select.patch | 2 +-
...09-MIPS-ath79-process-board-kernel-option.patch | 4 +-
.../602-MIPS-ath79-add-openwrt-stuff.patch | 6 +-
.../patches-4.9/611-MIPS-ath79-wdt-timeout.patch | 2 +-
...20-MIPS-ath79-add-support-for-QCA953x-SoC.patch | 40 +++----
...21-MIPS-ath79-add-support-for-QCA956x-SoC.patch | 48 ++++-----
.../630-MIPS-ath79-fix-chained-irq-disable.patch | 26 +++--
.../632-MIPS-ath79-gpio-enable-set-direction.patch | 2 +-
...MIPS-ath79-ar724x-clock-calculation-fixes.patch | 22 ----
.../700-MIPS-ath79-add-openwrt-Kconfig.patch | 6 +-
.../818-MIPS-ath79-add-nu801-led-driver.patch | 4 +-
.../820-MIPS-ath79-add_gpio_function2_setup.patch | 2 +-
...-add-support-for-boot-console-with-arbitr.patch | 76 --------------
.../900-mdio_bitbang_ignore_ta_value.patch | 9 ++
...tbang-prevent-rescheduling-during-command.patch | 6 +-
.../902-at803x-add-reset-gpio-pdata.patch | 10 +-
.../patches-4.9/910-unaligned_access_hacks.patch | 115 +++++++--------------
.../ar71xx/patches-4.9/930-chipidea-pullup.patch | 6 +-
67 files changed, 883 insertions(+), 492 deletions(-)
delete mode 100644 target/linux/ar71xx/patches-4.9/101-MIPS-ath79-make-ath79_ddr_ctrl_init-compatible-for-n.patch
delete mode 100644 target/linux/ar71xx/patches-4.9/412-mtd-m25p80-zero-partition-parser-data.patch
delete mode 100644 target/linux/ar71xx/patches-4.9/460-m25p80-spi-read-flash-check.patch
delete mode 100644 target/linux/ar71xx/patches-4.9/634-MIPS-ath79-ar724x-clock-calculation-fixes.patch
delete mode 100644 target/linux/ar71xx/patches-4.9/821-serial-core-add-support-for-boot-console-with-arbitr.patch
diff --git a/target/linux/ar71xx/config-4.9 b/target/linux/ar71xx/config-4.9
index 0e77560414..c5b89088f1 100644
--- a/target/linux/ar71xx/config-4.9
+++ b/target/linux/ar71xx/config-4.9
@@ -7,7 +7,6 @@ CONFIG_AR8216_PHY_LEDS=y
CONFIG_ARCH_BINFMT_ELF_STATE=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
CONFIG_ARCH_DISCARD_MEMBLOCK=y
-CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
# CONFIG_ARCH_HAS_GCOV_PROFILE_ALL is not set
CONFIG_ARCH_HAS_RESET_CONTROLLER=y
@@ -15,7 +14,6 @@ CONFIG_ARCH_HAS_RESET_CONTROLLER=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
@@ -256,7 +254,7 @@ CONFIG_ATH79_NVRAM=y
CONFIG_ATH79_PCI_ATH9K_FIXUP=y
# CONFIG_ATH79_ROUTERBOOT is not set
CONFIG_ATH79_WDT=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_BLK_MQ_PCI=y
CONFIG_CEVT_R4K=y
CONFIG_CLKDEV_LOOKUP=y
CONFIG_CLONE_BACKWARDS=y
@@ -267,6 +265,7 @@ CONFIG_COMMON_CLK=y
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_CPU_GENERIC_DUMP_TLB=y
CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_CPU_HAS_RIXI=y
CONFIG_CPU_HAS_SYNC=y
CONFIG_CPU_MIPS32=y
CONFIG_CPU_MIPS32_R2=y
@@ -284,6 +283,7 @@ CONFIG_DMA_NONCOHERENT=y
CONFIG_DTC=y
CONFIG_EARLY_PRINTK=y
CONFIG_ETHERNET_PACKET_MANGLE=y
+CONFIG_FIXED_PHY=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CMOS_UPDATE=y
@@ -297,11 +297,13 @@ CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_74X164=y
-CONFIG_GPIO_DEVRES=y
+CONFIG_GPIO_ATH79=y
+CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_LATCH is not set
CONFIG_GPIO_NXP_74HC153=y
CONFIG_GPIO_PCF857X=y
CONFIG_GPIO_SYSFS=y
+CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_HARDWARE_WATCHPOINTS=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
@@ -313,7 +315,7 @@ CONFIG_HAVE_ARCH_KGDB=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
-CONFIG_HAVE_BPF_JIT=y
+CONFIG_HAVE_CBPF_JIT=y
CONFIG_HAVE_CC_STACKPROTECTOR=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
@@ -322,7 +324,6 @@ CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
@@ -340,6 +341,7 @@ CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_HAVE_NET_DSA=y
CONFIG_HAVE_OPROFILE=y
CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HW_HAS_PCI=y
@@ -352,13 +354,13 @@ CONFIG_IMAGE_CMDLINE_HACK=y
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_SOURCE="../../root"
+CONFIG_INTEL_XWAY_PHY=y
CONFIG_IP17XX_PHY=y
CONFIG_IRQCHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_IRQ_MIPS_CPU=y
CONFIG_IRQ_WORK=y
-CONFIG_LANTIQ_PHY=y
CONFIG_LEDS_GPIO=y
# CONFIG_LEDS_WNDR3700_USB is not set
CONFIG_LIBFDT=y
@@ -368,7 +370,10 @@ CONFIG_MDIO_BOARDINFO=y
CONFIG_MDIO_GPIO=y
CONFIG_MICREL_PHY=y
CONFIG_MIPS=y
+CONFIG_MIPS_ASID_BITS=8
+CONFIG_MIPS_ASID_SHIFT=0
CONFIG_MIPS_CLOCK_VSYSCALL=y
+# CONFIG_MIPS_CMDLINE_BUILTIN_EXTEND is not set
# CONFIG_MIPS_CMDLINE_DTB_EXTEND is not set
CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER=y
# CONFIG_MIPS_CMDLINE_FROM_DTB is not set
@@ -421,7 +426,6 @@ CONFIG_OF_FLATTREE=y
CONFIG_OF_GPIO=y
CONFIG_OF_IRQ=y
CONFIG_OF_MDIO=y
-CONFIG_OF_MTD=y
CONFIG_OF_NET=y
CONFIG_OF_PCI=y
CONFIG_OF_PCI_IRQ=y
@@ -429,6 +433,7 @@ CONFIG_PCI=y
CONFIG_PCI_AR724X=y
CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_DRIVERS_LEGACY=y
CONFIG_PERF_USE_VMALLOC=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_PHYLIB=y
@@ -465,6 +470,7 @@ CONFIG_SPI_MASTER=y
CONFIG_SRCU=y
CONFIG_SWCONFIG=y
CONFIG_SWCONFIG_LEDS=y
+CONFIG_SWPHY=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_SYS_HAS_CPU_MIPS32_R2=y
CONFIG_SYS_HAS_EARLY_PRINTK=y
@@ -473,7 +479,7 @@ CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
CONFIG_SYS_SUPPORTS_MIPS16=y
CONFIG_SYS_SUPPORTS_ZBOOT=y
+CONFIG_SYS_SUPPORTS_ZBOOT_UART_PROM=y
CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_USB_SUPPORT=y
CONFIG_USE_OF=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c
index e78e311d2e..7b01af515b 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c
@@ -22,6 +22,7 @@
#include <linux/platform/ar934x_nfc.h>
#include <linux/ar8216_platform.h>
#include <linux/ath9k_platform.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ar71xx_regs.h>
@@ -119,6 +120,7 @@ static struct mdio_board_info c60_mdio0_info[] = {
},
};
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout c60_nand_ecclayout = {
.eccbytes = 7,
.eccpos = { 4, 8, 9, 10, 13, 14, 15 },
@@ -126,13 +128,67 @@ static struct nand_ecclayout c60_nand_ecclayout = {
.oobfree = { { 0, 3 }, { 6, 2 }, { 11, 2 }, }
};
+#else
+
+static int c60_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 1:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 2:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int c60_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 2:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops c60_nand_ecclayout_ops = {
+ .ecc = c60_ooblayout_ecc,
+ .free = c60_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int c60_nand_scan_fixup(struct mtd_info *mtd)
{
struct nand_chip *chip = mtd->priv;
chip->ecc.size = 512;
chip->ecc.strength = 4;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
chip->ecc.layout = &c60_nand_ecclayout;
+#else
+ mtd_set_ooblayout(mtd, &c60_nand_ecclayout_ops);
+#endif
return 0;
}
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
index 6e498395bd..9100a5977a 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
@@ -23,6 +23,7 @@
#include <linux/spi/flash.h>
#include <linux/routerboot.h>
#include <linux/gpio.h>
+#include <linux/version.h>
#include <asm/prom.h>
#include <asm/mach-ath79/ath79.h>
@@ -188,6 +189,7 @@ static void rb2011_nand_select_chip(int chip_no)
ndelay(500);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout rb2011_nand_ecclayout = {
.eccbytes = 6,
.eccpos = { 8, 9, 10, 13, 14, 15 },
@@ -195,16 +197,72 @@ static struct nand_ecclayout rb2011_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb2011_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb2011_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb2011_nand_ecclayout_ops = {
+ .ecc = rb2011_ooblayout_ecc,
+ .free = rb2011_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int rb2011_nand_scan_fixup(struct mtd_info *mtd)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
struct nand_chip *chip = mtd->priv;
+#endif
if (mtd->writesize == 512) {
/*
* Use the OLD Yaffs-1 OOB layout, otherwise RouterBoot
* will not be able to find the kernel that we load.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
chip->ecc.layout = &rb2011_nand_ecclayout;
+#else
+ mtd_set_ooblayout(mtd, &rb2011_nand_ecclayout_ops);
+#endif
}
return 0;
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
index 0c5373c365..577fb0eee0 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
@@ -20,6 +20,7 @@
#include <linux/routerboot.h>
#include <linux/gpio.h>
#include <linux/platform_data/phy-at803x.h>
+#include <linux/version.h>
#include <asm/prom.h>
#include <asm/mach-ath79/ath79.h>
@@ -132,6 +133,7 @@ static void rb922gs_nand_select_chip(int chip_no)
ndelay(500);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout rb922gs_nand_ecclayout = {
.eccbytes = 6,
.eccpos = { 8, 9, 10, 13, 14, 15 },
@@ -139,16 +141,72 @@ static struct nand_ecclayout rb922gs_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb922gs_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb922gs_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb922gs_nand_ecclayout_ops = {
+ .ecc = rb922gs_ooblayout_ecc,
+ .free = rb922gs_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int rb922gs_nand_scan_fixup(struct mtd_info *mtd)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
struct nand_chip *chip = mtd->priv;
+#endif
if (mtd->writesize == 512) {
/*
* Use the OLD Yaffs-1 OOB layout, otherwise RouterBoot
* will not be able to find the kernel that we load.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
chip->ecc.layout = &rb922gs_nand_ecclayout;
+#else
+ mtd_set_ooblayout(mtd, &rb922gs_nand_ecclayout_ops);
+#endif
}
return 0;
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
index e940d6cc11..9eaeaa7f9d 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
@@ -24,6 +24,7 @@
#include <linux/spi/flash.h>
#include <linux/routerboot.h>
#include <linux/gpio.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>
@@ -146,6 +147,7 @@ static void rb95x_nand_select_chip(int chip_no)
ndelay(500);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout rb95x_nand_ecclayout = {
.eccbytes = 6,
.eccpos = { 8, 9, 10, 13, 14, 15 },
@@ -153,6 +155,56 @@ static struct nand_ecclayout rb95x_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb95x_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb95x_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb95x_nand_ecclayout_ops = {
+ .ecc = rb95x_ooblayout_ecc,
+ .free = rb95x_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int rb95x_nand_scan_fixup(struct mtd_info *mtd)
{
struct nand_chip *chip = mtd->priv;
@@ -162,7 +214,11 @@ static int rb95x_nand_scan_fixup(struct mtd_info *mtd)
* Use the OLD Yaffs-1 OOB layout, otherwise RouterBoot
* will not be able to find the kernel that we load.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
chip->ecc.layout = &rb95x_nand_ecclayout;
+#else
+ mtd_set_ooblayout(mtd, &rb95x_nand_ecclayout_ops);
+#endif
}
chip->options = NAND_NO_SUBPAGE_WRITE;
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
index 62063e06a2..d2edfc9c71 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
@@ -24,6 +24,7 @@
#include <linux/rle.h>
#include <linux/routerboot.h>
#include <linux/gpio.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>
@@ -163,6 +164,7 @@ static void rbsxtlite_nand_select_chip(int chip_no)
ndelay(500);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout rbsxtlite_nand_ecclayout = {
.eccbytes = 6,
.eccpos = { 8, 9, 10, 13, 14, 15 },
@@ -170,16 +172,72 @@ static struct nand_ecclayout rbsxtlite_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rbsxtlite_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rbsxtlite_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rbsxtlite_nand_ecclayout_ops = {
+ .ecc = rbsxtlite_ooblayout_ecc,
+ .free = rbsxtlite_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int rbsxtlite_nand_scan_fixup(struct mtd_info *mtd)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
struct nand_chip *chip = mtd->priv;
+#endif
if (mtd->writesize == 512) {
/*
* Use the OLD Yaffs-1 OOB layout, otherwise RouterBoot
* will not be able to find the kernel that we load.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
chip->ecc.layout = &rbsxtlite_nand_ecclayout;
+#else
+ mtd_set_ooblayout(mtd, &rbsxtlite_nand_ecclayout_ops);
+#endif
}
return 0;
diff --git a/target/linux/ar71xx/files/drivers/gpio/gpio-nxp-74hc153.c b/target/linux/ar71xx/files/drivers/gpio/gpio-nxp-74hc153.c
index 8c01efe4a0..1355e3ff6e 100644
--- a/target/linux/ar71xx/files/drivers/gpio/gpio-nxp-74hc153.c
+++ b/target/linux/ar71xx/files/drivers/gpio/gpio-nxp-74hc153.c
@@ -168,7 +168,11 @@ static int nxp_74hc153_probe(struct platform_device *pdev)
gc->base = pdata->gpio_base;
gc->ngpio = NXP_74HC153_NUM_GPIOS;
gc->label = dev_name(nxp->parent);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
gc->dev = nxp->parent;
+#else
+ gc->parent = nxp->parent;
+#endif
gc->owner = THIS_MODULE;
err = gpiochip_add(&nxp->gpio_chip);
diff --git a/target/linux/ar71xx/files/drivers/mtd/cybertan_part.c b/target/linux/ar71xx/files/drivers/mtd/cybertan_part.c
index 391411f8de..4d33c19b7e 100644
--- a/target/linux/ar71xx/files/drivers/mtd/cybertan_part.c
+++ b/target/linux/ar71xx/files/drivers/mtd/cybertan_part.c
@@ -28,6 +28,7 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
+#include <linux/version.h>
struct cybertan_header {
char magic[4];
@@ -82,7 +83,11 @@ struct firmware_header {
#define NVRAM_LEN 0x10000
static int cybertan_parse_partitions(struct mtd_info *master,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
struct mtd_partition **pparts,
+#else
+ const struct mtd_partition **pparts,
+#endif
struct mtd_part_parser_data *data)
{
struct firmware_header *header;
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/ar934x_nfc.c b/target/linux/ar71xx/files/drivers/mtd/nand/ar934x_nfc.c
index a47fc0468e..4b67fd63b6 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/ar934x_nfc.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/ar934x_nfc.c
@@ -18,6 +18,7 @@
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/slab.h>
+#include <linux/version.h>
#include <linux/platform/ar934x_nfc.h>
@@ -1241,6 +1242,7 @@ ar934x_nfc_init_tail(struct mtd_info *mtd)
return err;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
static struct nand_ecclayout ar934x_nfc_oob_64_hwecc = {
.eccbytes = 28,
.eccpos = {
@@ -1261,14 +1263,54 @@ static struct nand_ecclayout ar934x_nfc_oob_64_hwecc = {
},
};
+#else
+
+static int ar934x_nfc_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ if (section)
+ return -ERANGE;
+
+ oobregion->offset = 20;
+ oobregion->length = 28;
+
+ return 0;
+}
+
+static int ar934x_nfc_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 4;
+ oobregion->length = 16;
+ return 0;
+ case 1:
+ oobregion->offset = 48;
+ oobregion->length = 16;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops ar934x_nfc_ecclayout_ops = {
+ .ecc = ar934x_nfc_ooblayout_ecc,
+ .free = ar934x_nfc_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static int
ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc)
{
struct nand_chip *nand = &nfc->nand_chip;
u32 ecc_cap;
u32 ecc_thres;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
+ struct mtd_oob_region oobregion;
+#endif
- if (!config_enabled(CONFIG_MTD_NAND_AR934X_HW_ECC)) {
+ if (!IS_ENABLED(CONFIG_MTD_NAND_AR934X_HW_ECC)) {
dev_err(nfc->parent, "hardware ECC support is disabled\n");
return -EINVAL;
}
@@ -1284,7 +1326,11 @@ ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc)
nand->ecc.size = 512;
nand->ecc.bytes = 7;
nand->ecc.strength = 4;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
nand->ecc.layout = &ar934x_nfc_oob_64_hwecc;
+#else
+ mtd_set_ooblayout(&nfc->mtd, &ar934x_nfc_ecclayout_ops);
+#endif
break;
default:
@@ -1294,7 +1340,11 @@ ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc)
return -EINVAL;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
BUG_ON(!nand->ecc.layout);
+#else
+ BUG_ON(!nfc->mtd.ooblayout->ecc);
+#endif
switch (nand->ecc.strength) {
case 4:
@@ -1309,7 +1359,12 @@ ar934x_nfc_setup_hwecc(struct ar934x_nfc *nfc)
}
nfc->ecc_thres = ecc_thres;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
nfc->ecc_oob_pos = nand->ecc.layout->eccpos[0];
+#else
+ nfc->mtd.ooblayout->ecc(&nfc->mtd, 0, &oobregion);
+ nfc->ecc_oob_pos = oobregion.offset;
+#endif
nfc->ecc_ctrl_reg = ecc_cap << AR934X_NFC_ECC_CTRL_ECC_CAP_S;
nfc->ecc_ctrl_reg |= ecc_thres << AR934X_NFC_ECC_CTRL_ERR_THRES_S;
@@ -1432,7 +1487,12 @@ ar934x_nfc_probe(struct platform_device *pdev)
break;
case AR934X_NFC_ECC_SOFT_BCH:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
nand->ecc.mode = NAND_ECC_SOFT_BCH;
+#else
+ nand->ecc.mode = NAND_ECC_SOFT;
+ nand->ecc.algo = NAND_ECC_BCH;
+#endif
break;
case AR934X_NFC_ECC_HW:
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
index 96ec5dd1e5..b397575f77 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
@@ -23,6 +23,7 @@
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/slab.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/rb4xx_cpld.h>
@@ -41,6 +42,7 @@ struct rb4xx_nand_info {
struct mtd_info mtd;
};
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
/*
* We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader
* will not be able to find the kernel that we load.
@@ -52,6 +54,56 @@ static struct nand_ecclayout rb4xx_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb4xx_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb4xx_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb4xx_nand_ecclayout_ops = {
+ .ecc = rb4xx_ooblayout_ecc,
+ .free = rb4xx_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static struct mtd_partition rb4xx_nand_partitions[] = {
{
.name = "booter",
@@ -229,7 +281,11 @@ static int rb4xx_nand_probe(struct platform_device *pdev)
}
if (info->mtd.writesize == 512)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
info->chip.ecc.layout = &rb4xx_nand_ecclayout;
+#else
+ mtd_set_ooblayout(&info->mtd, &rb4xx_nand_ecclayout_ops);
+#endif
ret = nand_scan_tail(&info->mtd);
if (ret) {
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
index 0604c5a235..f8a6722cba 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
@@ -16,6 +16,7 @@
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/slab.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ar71xx_regs.h>
#include <asm/mach-ath79/ath79.h>
@@ -49,6 +50,7 @@ static inline struct rb750_nand_info *mtd_to_rbinfo(struct mtd_info *mtd)
return container_of(mtd, struct rb750_nand_info, mtd);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
/*
* We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader
* will not be able to find the kernel that we load.
@@ -60,6 +62,56 @@ static struct nand_ecclayout rb750_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb750_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb750_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb750_nand_ecclayout_ops = {
+ .ecc = rb750_ooblayout_ecc,
+ .free = rb750_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static struct mtd_partition rb750_nand_partitions[] = {
{
.name = "booter",
@@ -292,7 +344,11 @@ static int rb750_nand_probe(struct platform_device *pdev)
}
if (info->mtd.writesize == 512)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
info->chip.ecc.layout = &rb750_nand_ecclayout;
+#else
+ mtd_set_ooblayout(&info->mtd, &rb750_nand_ecclayout_ops);
+#endif
ret = nand_scan_tail(&info->mtd);
if (ret) {
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
index 1308e18ba6..15b1816ae1 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
@@ -19,6 +19,7 @@
#include <linux/slab.h>
#include <linux/gpio.h>
#include <linux/platform_data/rb91x_nand.h>
+#include <linux/version.h>
#include <asm/mach-ath79/ar71xx_regs.h>
#include <asm/mach-ath79/ath79.h>
@@ -56,6 +57,7 @@ static inline struct rb91x_nand_info *mtd_to_rbinfo(struct mtd_info *mtd)
return container_of(mtd, struct rb91x_nand_info, mtd);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
/*
* We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader
* will not be able to find the kernel that we load.
@@ -67,6 +69,56 @@ static struct nand_ecclayout rb91x_nand_ecclayout = {
.oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
};
+#else
+
+static int rb91x_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 8;
+ oobregion->length = 3;
+ return 0;
+ case 1:
+ oobregion->offset = 13;
+ oobregion->length = 3;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static int rb91x_ooblayout_free(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *oobregion)
+{
+ switch (section) {
+ case 0:
+ oobregion->offset = 0;
+ oobregion->length = 4;
+ return 0;
+ case 1:
+ oobregion->offset = 4;
+ oobregion->length = 1;
+ return 0;
+ case 2:
+ oobregion->offset = 6;
+ oobregion->length = 2;
+ return 0;
+ case 3:
+ oobregion->offset = 11;
+ oobregion->length = 2;
+ return 0;
+ default:
+ return -ERANGE;
+ }
+}
+
+static const struct mtd_ooblayout_ops rb91x_nand_ecclayout_ops = {
+ .ecc = rb91x_ooblayout_ecc,
+ .free = rb91x_ooblayout_free,
+};
+#endif /* < 4.6 */
+
static struct mtd_partition rb91x_nand_partitions[] = {
{
.name = "booter",
@@ -334,7 +386,11 @@ static int rb91x_nand_probe(struct platform_device *pdev)
return ret;
if (rbni->mtd.writesize == 512)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
rbni->chip.ecc.layout = &rb91x_nand_ecclayout;
+#else
+ mtd_set_ooblayout(&rbni->mtd, &rb91x_nand_ecclayout_ops);
+#endif
ret = nand_scan_tail(&rbni->mtd);
if (ret)
diff --git a/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c b/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
index ac1efa1c22..1b94163b83 100644
--- a/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
+++ b/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
@@ -15,6 +15,7 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
+#include <linux/version.h>
#define TPLINK_NUM_PARTS 5
#define TPLINK_HEADER_V1 0x01000000
@@ -109,7 +110,11 @@ static int tplink_check_rootfs_magic(struct mtd_info *mtd, size_t offset)
}
static int tplink_parse_partitions_offset(struct mtd_info *master,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
struct mtd_partition **pparts,
+#else
+ const struct mtd_partition **pparts,
+#endif
struct mtd_part_parser_data *data,
size_t offset)
{
@@ -181,7 +186,11 @@ err:
}
static int tplink_parse_partitions(struct mtd_info *master,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
struct mtd_partition **pparts,
+#else
+ const struct mtd_partition **pparts,
+#endif
struct mtd_part_parser_data *data)
{
return tplink_parse_partitions_offset(master, pparts, data,
@@ -189,7 +198,11 @@ static int tplink_parse_partitions(struct mtd_info *master,
}
static int tplink_parse_64k_partitions(struct mtd_info *master,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
struct mtd_partition **pparts,
+#else
+ const struct mtd_partition **pparts,
+#endif
struct mtd_part_parser_data *data)
{
return tplink_parse_partitions_offset(master, pparts, data,
diff --git a/target/linux/ar71xx/files/drivers/net/dsa/mv88e6063.c b/target/linux/ar71xx/files/drivers/net/dsa/mv88e6063.c
index b9e9af35b8..5b6da713f4 100644
--- a/target/linux/ar71xx/files/drivers/net/dsa/mv88e6063.c
+++ b/target/linux/ar71xx/files/drivers/net/dsa/mv88e6063.c
@@ -17,6 +17,7 @@
#include <linux/netdevice.h>
#include <linux/phy.h>
#include <net/dsa.h>
+#include <linux/version.h>
#define REG_BASE 0x10
#define REG_PHY(p) (REG_BASE + (p))
@@ -26,11 +27,12 @@
static int reg_read(struct dsa_switch *ds, int addr, int reg)
{
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)
- return mdiobus_read(ds->master_mii_bus, addr, reg);
-#else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev);
return mdiobus_read(bus, addr, reg);
+#else
+ struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->dev);
+ return mdiobus_read(bus, addr, reg);
#endif
}
@@ -47,14 +49,22 @@ static int reg_read(struct dsa_switch *ds, int addr, int reg)
static int reg_write(struct dsa_switch *ds, int addr, int reg, u16 val)
{
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)
- return mdiobus_write(ds->master_mii_bus, addr, reg, val);
-#else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev);
return mdiobus_write(bus, addr, reg, val);
+#else
+ struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->dev);
+ return mdiobus_write(bus, addr, reg, val);
#endif
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)
+static enum dsa_tag_protocol mv88e6063_get_tag_protocol(struct dsa_switch *ds)
+{
+ return DSA_TAG_PROTO_TRAILER;
+}
+#endif
+
#define REG_WRITE(addr, reg, val) \
({ \
int __ret; \
@@ -64,16 +74,20 @@ static int reg_write(struct dsa_switch *ds, int addr, int reg, u16 val)
return __ret; \
})
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)
-static char *mv88e6063_probe(struct mii_bus *bus, int sw_addr)
-{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
+static char *mv88e6063_drv_probe(struct device *host_dev, int sw_addr)
#else
-static char *mv88e6063_probe(struct device *host_dev, int sw_addr)
+static const char *mv88e6063_drv_probe(struct device *dsa_dev,
+ struct device *host_dev, int sw_addr,
+ void **_priv)
+#endif
{
struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev);
-#endif
int ret;
+ if (!bus)
+ return NULL;
+
ret = mdiobus_read(bus, REG_PORT(0), 0x03);
if (ret >= 0) {
ret &= 0xfff0;
@@ -163,7 +177,11 @@ static int mv88e6063_setup_port(struct dsa_switch *ds, int p)
REG_WRITE(addr, 0x06,
((p & 0xf) << 12) |
(dsa_is_cpu_port(ds, p) ?
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
ds->phys_port_mask :
+#else
+ ds->enabled_port_mask :
+#endif
(1 << ds->dst->cpu_port)));
/*
@@ -240,72 +258,32 @@ mv88e6063_phy_write(struct dsa_switch *ds, int port, int regnum, u16 val)
return reg_write(ds, addr, regnum, val);
}
-static void mv88e6063_poll_link(struct dsa_switch *ds)
-{
- int i;
-
- for (i = 0; i < DSA_MAX_PORTS; i++) {
- struct net_device *dev;
- int uninitialized_var(port_status);
- int link;
- int speed;
- int duplex;
- int fc;
-
- dev = ds->ports[i];
- if (dev == NULL)
- continue;
-
- link = 0;
- if (dev->flags & IFF_UP) {
- port_status = reg_read(ds, REG_PORT(i), 0x00);
- if (port_status < 0)
- continue;
-
- link = !!(port_status & 0x1000);
- }
-
- if (!link) {
- if (netif_carrier_ok(dev)) {
- printk(KERN_INFO "%s: link down\n", dev->name);
- netif_carrier_off(dev);
- }
- continue;
- }
-
- speed = (port_status & 0x0100) ? 100 : 10;
- duplex = (port_status & 0x0200) ? 1 : 0;
- fc = ((port_status & 0xc000) == 0xc000) ? 1 : 0;
-
- if (!netif_carrier_ok(dev)) {
- printk(KERN_INFO "%s: link up, %d Mb/s, %s duplex, "
- "flow control %sabled\n", dev->name,
- speed, duplex ? "full" : "half",
- fc ? "en" : "dis");
- netif_carrier_on(dev);
- }
- }
-}
-
-static struct dsa_switch_driver mv88e6063_switch_driver = {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,9,0)
+static struct dsa_switch_driver mv88e6063_switch_ops = {
+#else
+static struct dsa_switch_ops mv88e6063_switch_ops = {
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
.tag_protocol = htons(ETH_P_TRAILER),
- .probe = mv88e6063_probe,
+#else
+ .get_tag_protocol = mv88e6063_get_tag_protocol,
+#endif
+ .probe = mv88e6063_drv_probe,
.setup = mv88e6063_setup,
.set_addr = mv88e6063_set_addr,
.phy_read = mv88e6063_phy_read,
.phy_write = mv88e6063_phy_write,
- .poll_link = mv88e6063_poll_link,
};
static int __init mv88e6063_init(void)
{
- register_switch_driver(&mv88e6063_switch_driver);
+ register_switch_driver(&mv88e6063_switch_ops);
return 0;
}
module_init(mv88e6063_init);
static void __exit mv88e6063_cleanup(void)
{
- unregister_switch_driver(&mv88e6063_switch_driver);
+ unregister_switch_driver(&mv88e6063_switch_ops);
}
module_exit(mv88e6063_cleanup);
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
index b63a4b7f9d..2915476569 100644
--- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
+++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_mdio.c
@@ -254,7 +254,11 @@ static int ag71xx_mdio_probe(struct platform_device *pdev)
am->mii_bus->read = ag71xx_mdio_read;
am->mii_bus->write = ag71xx_mdio_write;
am->mii_bus->reset = ag71xx_mdio_reset;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
am->mii_bus->irq = am->mii_irq;
+#else
+ memcpy(am->mii_bus->irq, am->mii_irq, sizeof(am->mii_bus->irq));
+#endif
am->mii_bus->priv = am;
am->mii_bus->parent = &pdev->dev;
snprintf(am->mii_bus->id, MII_BUS_ID_SIZE, "%s", dev_name(&pdev->dev));
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c
index 9de77e924b..12fa2e301b 100644
--- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c
+++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c
@@ -112,6 +112,7 @@ static int ag71xx_phy_connect_multi(struct ag71xx *ag)
if (!(pdata->phy_mask & (1 << phy_addr)))
continue;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
if (ag->mii_bus->phy_map[phy_addr] == NULL)
continue;
@@ -122,6 +123,18 @@ static int ag71xx_phy_connect_multi(struct ag71xx *ag)
if (phydev == NULL)
phydev = ag->mii_bus->phy_map[phy_addr];
+#else
+ if (ag->mii_bus->mdio_map[phy_addr] == NULL)
+ continue;
+
+ DBG("%s: PHY found at %s, uid=%08x\n",
+ dev_name(dev),
+ dev_name(&ag->mii_bus->mdio_map[phy_addr]->dev),
+ ag->mii_bus->mdio_map[phy_addr]->phy_id);
+
+ if (phydev == NULL)
+ phydev = mdiobus_get_phy(ag->mii_bus, phy_addr);
+#endif
}
if (!phydev) {
@@ -130,13 +143,21 @@ static int ag71xx_phy_connect_multi(struct ag71xx *ag)
return -ENODEV;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
ag->phy_dev = phy_connect(ag->dev, dev_name(&phydev->dev),
+#else
+ ag->phy_dev = phy_connect(ag->dev, phydev_name(phydev),
+#endif
&ag71xx_phy_link_adjust,
pdata->phy_if_mode);
if (IS_ERR(ag->phy_dev)) {
dev_err(dev, "could not connect to PHY at %s\n",
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
dev_name(&phydev->dev));
+#else
+ phydev_name(phydev));
+#endif
return PTR_ERR(ag->phy_dev);
}
@@ -149,7 +170,12 @@ static int ag71xx_phy_connect_multi(struct ag71xx *ag)
phydev->advertising = phydev->supported;
dev_info(dev, "connected to PHY at %s [uid=%08x, driver=%s]\n",
- dev_name(&phydev->dev), phydev->phy_id, phydev->drv->name);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
+ dev_name(&phydev->dev),
+#else
+ phydev_name(phydev),
+#endif
+ phydev->phy_id, phydev->drv->name);
ag->link = 0;
ag->speed = 0;
diff --git a/target/linux/ar71xx/files/drivers/spi/spi-rb4xx-cpld.c b/target/linux/ar71xx/files/drivers/spi/spi-rb4xx-cpld.c
index 0534c7c374..18af83b67c 100644
--- a/target/linux/ar71xx/files/drivers/spi/spi-rb4xx-cpld.c
+++ b/target/linux/ar71xx/files/drivers/spi/spi-rb4xx-cpld.c
@@ -21,6 +21,7 @@
#include <linux/spi/spi.h>
#include <linux/gpio.h>
#include <linux/slab.h>
+#include <linux/version.h>
#include <asm/mach-ath79/rb4xx_cpld.h>
@@ -246,7 +247,11 @@ static int rb4xx_cpld_gpio_init(struct rb4xx_cpld *cpld, unsigned int base)
cpld->chip.base = base;
cpld->chip.ngpio = CPLD_NUM_GPIOS;
cpld->chip.can_sleep = 1;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,5,0)
cpld->chip.dev = &cpld->spi->dev;
+#else
+ cpld->chip.parent = &cpld->spi->dev;
+#endif
cpld->chip.owner = THIS_MODULE;
err = gpiochip_add(&cpld->chip);
diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
index 3ff5379cc4..e333166e93 100644
--- a/target/linux/ar71xx/mikrotik/config-default
+++ b/target/linux/ar71xx/mikrotik/config-default
@@ -215,7 +215,7 @@ CONFIG_ATH79_ROUTERBOOT=y
CONFIG_CRC16=y
CONFIG_CRYPTO_DEFLATE=y
CONFIG_GPIO_LATCH=y
-# CONFIG_LANTIQ_PHY is not set
+# CONFIG_INTEL_XWAY_PHY is not set
CONFIG_LEDS_RB750=y
CONFIG_LZO_DECOMPRESS=y
# CONFIG_MTD_CFI is not set
diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
index ec9d550f22..fc243c5008 100644
--- a/target/linux/ar71xx/nand/config-default
+++ b/target/linux/ar71xx/nand/config-default
@@ -212,8 +212,8 @@ CONFIG_BCH=y
CONFIG_CRC16=y
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y
+# CONFIG_INTEL_XWAY_PHY is not set
# CONFIG_IP17XX_PHY is not set
-# CONFIG_LANTIQ_PHY is not set
CONFIG_LEDS_NU801=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
diff --git a/target/linux/ar71xx/patches-4.9/002-add_back_gpio_function_select.patch b/target/linux/ar71xx/patches-4.9/002-add_back_gpio_function_select.patch
index 73cfeb5506..5b26a640eb 100644
--- a/target/linux/ar71xx/patches-4.9/002-add_back_gpio_function_select.patch
+++ b/target/linux/ar71xx/patches-4.9/002-add_back_gpio_function_select.patch
@@ -62,8 +62,8 @@
+}
--- a/arch/mips/include/asm/mach-ath79/ath79.h
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
-@@ -117,6 +117,7 @@ static inline int soc_is_qca955x(void)
-
+@@ -118,6 +118,7 @@ static inline int soc_is_qca955x(void)
+ void ath79_ddr_wb_flush(unsigned int reg);
void ath79_ddr_set_pci_windows(void);
+extern void __iomem *ath79_gpio_base;
@@ -80,9 +80,9 @@
}
--- a/arch/mips/ath79/common.h
+++ b/arch/mips/ath79/common.h
-@@ -25,6 +25,9 @@ unsigned long ath79_get_sys_clk_rate(con
+@@ -24,6 +24,9 @@ unsigned long ath79_get_sys_clk_rate(con
+
void ath79_ddr_ctrl_init(void);
- void ath79_ddr_wb_flush(unsigned int reg);
+void ath79_gpio_function_enable(u32 mask);
+void ath79_gpio_function_disable(u32 mask);
diff --git a/target/linux/ar71xx/patches-4.9/004-register_gpio_driver_earlier.patch b/target/linux/ar71xx/patches-4.9/004-register_gpio_driver_earlier.patch
index 0c07cb18c7..e6e972b7ef 100644
--- a/target/linux/ar71xx/patches-4.9/004-register_gpio_driver_earlier.patch
+++ b/target/linux/ar71xx/patches-4.9/004-register_gpio_driver_earlier.patch
@@ -3,8 +3,8 @@ from mach files succeed.
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c
-@@ -202,4 +202,8 @@ static struct platform_driver ath79_gpio
- .probe = ath79_gpio_probe,
+@@ -322,4 +322,8 @@ static struct platform_driver ath79_gpio
+ .remove = ath79_gpio_remove,
};
-module_platform_driver(ath79_gpio_driver);
diff --git a/target/linux/ar71xx/patches-4.9/101-MIPS-ath79-make-ath79_ddr_ctrl_init-compatible-for-n.patch b/target/linux/ar71xx/patches-4.9/101-MIPS-ath79-make-ath79_ddr_ctrl_init-compatible-for-n.patch
deleted file mode 100644
index 09e6617b90..0000000000
--- a/target/linux/ar71xx/patches-4.9/101-MIPS-ath79-make-ath79_ddr_ctrl_init-compatible-for-n.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Felix Fietkau <nbd at nbd.name>
-Date: Sat, 14 May 2016 20:20:04 +0200
-Subject: [PATCH] MIPS: ath79: make ath79_ddr_ctrl_init() compatible for newer
- SoCs
-
-AR913x, AR724x and AR933x are the only SoCs where the
-ath79_ddr_wb_flush_base starts at 0x7c, all newer SoCs use 0x9c
-Invert the logic to make the code compatible with AR95xx
-
-Signed-off-by: Felix Fietkau <nbd at nbd.name>
----
-
---- a/arch/mips/ath79/common.c
-+++ b/arch/mips/ath79/common.c
-@@ -46,12 +46,12 @@ void ath79_ddr_ctrl_init(void)
- {
- ath79_ddr_base = ioremap_nocache(AR71XX_DDR_CTRL_BASE,
- AR71XX_DDR_CTRL_SIZE);
-- if (soc_is_ar71xx() || soc_is_ar934x()) {
-- ath79_ddr_wb_flush_base = ath79_ddr_base + 0x9c;
-- ath79_ddr_pci_win_base = ath79_ddr_base + 0x7c;
-- } else {
-+ if (soc_is_ar913x() || soc_is_ar724x() || soc_is_ar933x()) {
- ath79_ddr_wb_flush_base = ath79_ddr_base + 0x7c;
- ath79_ddr_pci_win_base = 0;
-+ } else {
-+ ath79_ddr_wb_flush_base = ath79_ddr_base + 0x9c;
-+ ath79_ddr_pci_win_base = ath79_ddr_base + 0x7c;
- }
- }
- EXPORT_SYMBOL_GPL(ath79_ddr_ctrl_init);
diff --git a/target/linux/ar71xx/patches-4.9/106-02-MIPS-ath79-do-AR724x-PCIe-root-complex-init.patch b/target/linux/ar71xx/patches-4.9/106-02-MIPS-ath79-do-AR724x-PCIe-root-complex-init.patch
index d3948b8353..3af99bf3b5 100644
--- a/target/linux/ar71xx/patches-4.9/106-02-MIPS-ath79-do-AR724x-PCIe-root-complex-init.patch
+++ b/target/linux/ar71xx/patches-4.9/106-02-MIPS-ath79-do-AR724x-PCIe-root-complex-init.patch
@@ -43,7 +43,7 @@ Signed-off-by: Mathias Kresin <dev at kresin.me>
@@ -12,14 +12,18 @@
#include <linux/irq.h>
#include <linux/pci.h>
- #include <linux/module.h>
+ #include <linux/init.h>
+#include <linux/delay.h>
#include <linux/platform_device.h>
#include <asm/mach-ath79/ath79.h>
diff --git a/target/linux/ar71xx/patches-4.9/203-MIPS-ath79-fix-restart.patch b/target/linux/ar71xx/patches-4.9/203-MIPS-ath79-fix-restart.patch
index 77773ea920..48f4d95e74 100644
--- a/target/linux/ar71xx/patches-4.9/203-MIPS-ath79-fix-restart.patch
+++ b/target/linux/ar71xx/patches-4.9/203-MIPS-ath79-fix-restart.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
-@@ -44,6 +44,7 @@ static char ath79_sys_type[ATH79_SYS_TYP
+@@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYP
static void ath79_restart(char *command)
{
@@ -10,7 +10,7 @@
if (cpu_wait)
--- a/arch/mips/include/asm/mach-ath79/ath79.h
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
-@@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned
+@@ -135,6 +135,7 @@ static inline u32 ath79_pll_rr(unsigned
static inline void ath79_reset_wr(unsigned reg, u32 val)
{
__raw_writel(val, ath79_reset_base + reg);
diff --git a/target/linux/ar71xx/patches-4.9/310-lib-add-rle-decompression.patch b/target/linux/ar71xx/patches-4.9/310-lib-add-rle-decompression.patch
index f5466db176..d8480125a9 100644
--- a/target/linux/ar71xx/patches-4.9/310-lib-add-rle-decompression.patch
+++ b/target/linux/ar71xx/patches-4.9/310-lib-add-rle-decompression.patch
@@ -12,7 +12,7 @@
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
--- a/lib/Makefile
+++ b/lib/Makefile
-@@ -110,6 +110,7 @@ obj-$(CONFIG_XZ_DEC) += xz/
+@@ -120,6 +120,7 @@ obj-$(CONFIG_XZ_DEC) += xz/
obj-$(CONFIG_RAID6_PQ) += raid6/
obj-$(CONFIG_LZMA_COMPRESS) += lzma/
obj-$(CONFIG_LZMA_DECOMPRESS) += lzma/
diff --git a/target/linux/ar71xx/patches-4.9/403-mtd_fix_cfi_cmdset_0002_status_check.patch b/target/linux/ar71xx/patches-4.9/403-mtd_fix_cfi_cmdset_0002_status_check.patch
index 1ccce4ecec..415d835ee3 100644
--- a/target/linux/ar71xx/patches-4.9/403-mtd_fix_cfi_cmdset_0002_status_check.patch
+++ b/target/linux/ar71xx/patches-4.9/403-mtd_fix_cfi_cmdset_0002_status_check.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -1632,8 +1632,8 @@ static int __xipram do_write_oneword(str
+@@ -1630,8 +1630,8 @@ static int __xipram do_write_oneword(str
break;
}
@@ -11,7 +11,7 @@
/* Latency issues. Drop the lock, wait a while and retry */
UDELAY(map, chip, adr, 1);
-@@ -1649,6 +1649,8 @@ static int __xipram do_write_oneword(str
+@@ -1647,6 +1647,8 @@ static int __xipram do_write_oneword(str
ret = -EIO;
}
@@ -20,7 +20,7 @@
xip_enable(map, chip, adr);
op_done:
if (mode == FL_OTP_WRITE)
-@@ -2227,7 +2229,6 @@ static int cfi_amdstd_panic_write(struct
+@@ -2225,7 +2227,6 @@ static int cfi_amdstd_panic_write(struct
return 0;
}
@@ -28,7 +28,7 @@
/*
* Handle devices with one erase region, that only implement
* the chip erase command.
-@@ -2291,8 +2292,8 @@ static int __xipram do_erase_chip(struct
+@@ -2289,8 +2290,8 @@ static int __xipram do_erase_chip(struct
chip->erase_suspended = 0;
}
@@ -39,7 +39,7 @@
if (time_after(jiffies, timeo)) {
printk(KERN_WARNING "MTD %s(): software timeout\n",
-@@ -2312,6 +2313,7 @@ static int __xipram do_erase_chip(struct
+@@ -2310,6 +2311,7 @@ static int __xipram do_erase_chip(struct
ret = -EIO;
}
@@ -47,7 +47,7 @@
chip->state = FL_READY;
xip_enable(map, chip, adr);
DISABLE_VPP(map);
-@@ -2380,9 +2382,9 @@ static int __xipram do_erase_oneblock(st
+@@ -2378,9 +2380,9 @@ static int __xipram do_erase_oneblock(st
chip->erase_suspended = 0;
}
@@ -59,7 +59,7 @@
}
if (time_after(jiffies, timeo)) {
-@@ -2404,6 +2406,7 @@ static int __xipram do_erase_oneblock(st
+@@ -2402,6 +2404,7 @@ static int __xipram do_erase_oneblock(st
ret = -EIO;
}
diff --git a/target/linux/ar71xx/patches-4.9/404-mtd-cybertan-trx-parser.patch b/target/linux/ar71xx/patches-4.9/404-mtd-cybertan-trx-parser.patch
index 3f67c4c5da..6c2322e07f 100644
--- a/target/linux/ar71xx/patches-4.9/404-mtd-cybertan-trx-parser.patch
+++ b/target/linux/ar71xx/patches-4.9/404-mtd-cybertan-trx-parser.patch
@@ -1,8 +1,8 @@
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -174,6 +174,12 @@ config MTD_BCM47XX_PARTS
- This provides partitions parser for devices based on BCM47xx
- boards.
+@@ -178,6 +178,12 @@ menu "Partition parsers"
+ source "drivers/mtd/parsers/Kconfig"
+ endmenu
+config MTD_CYBERTAN_PARTS
+ tristate "Cybertan partitioning support"
@@ -15,10 +15,10 @@
depends on ADM5120 || ATH25 || ATH79
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_MTD_AR7_PARTS) += ar7part.o
- obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63xxpart.o
+@@ -17,6 +17,7 @@ obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63
obj-$(CONFIG_MTD_BCM47XX_PARTS) += bcm47xxpart.o
obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
+ obj-y += parsers/
+obj-$(CONFIG_MTD_CYBERTAN_PARTS) += cybertan_part.o
# 'Users' - code which presents functionality to userspace.
diff --git a/target/linux/ar71xx/patches-4.9/405-mtd-tp-link-partition-parser.patch b/target/linux/ar71xx/patches-4.9/405-mtd-tp-link-partition-parser.patch
index 9d0d1db168..a53d9501ec 100644
--- a/target/linux/ar71xx/patches-4.9/405-mtd-tp-link-partition-parser.patch
+++ b/target/linux/ar71xx/patches-4.9/405-mtd-tp-link-partition-parser.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
-@@ -196,6 +196,12 @@ config MTD_MYLOADER_PARTS
+@@ -200,6 +200,12 @@ config MTD_MYLOADER_PARTS
You will still need the parsing functions to be called by the driver
for your particular device. It won't happen automatically.
@@ -15,10 +15,10 @@
#
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_MTD_AR7_PARTS) += ar7part.o
- obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63xxpart.o
+@@ -17,6 +17,7 @@ obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63
obj-$(CONFIG_MTD_BCM47XX_PARTS) += bcm47xxpart.o
obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
+ obj-y += parsers/
+obj-$(CONFIG_MTD_TPLINK_PARTS) += tplinkpart.o
obj-$(CONFIG_MTD_CYBERTAN_PARTS) += cybertan_part.o
diff --git a/target/linux/ar71xx/patches-4.9/407-mtd-m25p80-allow-to-pass-probe-types-via-platform-data.patch b/target/linux/ar71xx/patches-4.9/407-mtd-m25p80-allow-to-pass-probe-types-via-platform-data.patch
index 04acdb6d9e..4fa957e70b 100644
--- a/target/linux/ar71xx/patches-4.9/407-mtd-m25p80-allow-to-pass-probe-types-via-platform-data.patch
+++ b/target/linux/ar71xx/patches-4.9/407-mtd-m25p80-allow-to-pass-probe-types-via-platform-data.patch
@@ -1,16 +1,27 @@
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
-@@ -251,7 +251,9 @@ static int m25p_probe(struct spi_device
+@@ -192,6 +192,7 @@ static ssize_t m25p80_read(struct spi_no
+ */
+ static int m25p_probe(struct spi_device *spi)
+ {
++ struct mtd_part_parser_data ppdata = {0,};
+ struct flash_platform_data *data;
+ struct m25p *flash;
+ struct spi_nor *nor;
+@@ -244,8 +245,11 @@ static int m25p_probe(struct spi_device
+ if (ret)
+ return ret;
- ppdata.of_node = spi->dev.of_node;
-
-- return mtd_device_parse_register(&nor->mtd, NULL, &ppdata,
+- return mtd_device_register(&nor->mtd, data ? data->parts : NULL,
+- data ? data->nr_parts : 0);
+ return mtd_device_parse_register(&nor->mtd,
+ data ? data->part_probes : NULL,
+ &ppdata,
- data ? data->parts : NULL,
- data ? data->nr_parts : 0);
++ data ? data->parts : NULL,
++ data ? data->nr_parts : 0);
}
+
+
--- a/include/linux/spi/flash.h
+++ b/include/linux/spi/flash.h
@@ -24,6 +24,7 @@ struct flash_platform_data {
diff --git a/target/linux/ar71xx/patches-4.9/409-mtd-rb4xx_nand_driver.patch b/target/linux/ar71xx/patches-4.9/409-mtd-rb4xx_nand_driver.patch
index 4039aa185a..93d34b8826 100644
--- a/target/linux/ar71xx/patches-4.9/409-mtd-rb4xx_nand_driver.patch
+++ b/target/linux/ar71xx/patches-4.9/409-mtd-rb4xx_nand_driver.patch
@@ -1,8 +1,8 @@
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
-@@ -546,4 +546,8 @@ config MTD_NAND_HISI504
- help
- Enables support for NAND controller on Hisilicon SoC Hip04.
+@@ -569,4 +569,8 @@ config MTD_NAND_MTK
+ Enables support for NAND controller on MTK SoCs.
+ This controller is found on mt27xx, mt81xx, mt65xx SoCs.
+config MTD_NAND_RB4XX
+ tristate "NAND flash driver for RouterBoard 4xx series"
diff --git a/target/linux/ar71xx/patches-4.9/410-mtd-rb750-nand-driver.patch b/target/linux/ar71xx/patches-4.9/410-mtd-rb750-nand-driver.patch
index c67d1776f1..9ea879c8e4 100644
--- a/target/linux/ar71xx/patches-4.9/410-mtd-rb750-nand-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/410-mtd-rb750-nand-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
-@@ -550,4 +550,8 @@ config MTD_NAND_RB4XX
+@@ -573,4 +573,8 @@ config MTD_NAND_RB4XX
tristate "NAND flash driver for RouterBoard 4xx series"
depends on MTD_NAND && ATH79_MACH_RB4XX
diff --git a/target/linux/ar71xx/patches-4.9/411-mtd-cfi_cmdset_0002-force-word-write.patch b/target/linux/ar71xx/patches-4.9/411-mtd-cfi_cmdset_0002-force-word-write.patch
index 39c5478182..7f5b2f55ac 100644
--- a/target/linux/ar71xx/patches-4.9/411-mtd-cfi_cmdset_0002-force-word-write.patch
+++ b/target/linux/ar71xx/patches-4.9/411-mtd-cfi_cmdset_0002-force-word-write.patch
@@ -35,7 +35,7 @@
/* Atmel chips don't use the same PRI format as AMD chips */
static void fixup_convert_atmel_pri(struct mtd_info *mtd)
-@@ -1791,6 +1795,7 @@ static int cfi_amdstd_write_words(struct
+@@ -1789,6 +1793,7 @@ static int cfi_amdstd_write_words(struct
/*
* FIXME: interleaved mode not tested, and probably not supported!
*/
@@ -43,7 +43,7 @@
static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
unsigned long adr, const u_char *buf,
int len)
-@@ -1919,7 +1924,6 @@ static int __xipram do_write_buffer(stru
+@@ -1917,7 +1922,6 @@ static int __xipram do_write_buffer(stru
return ret;
}
@@ -51,7 +51,7 @@
static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
size_t *retlen, const u_char *buf)
{
-@@ -1994,6 +1998,7 @@ static int cfi_amdstd_write_buffers(stru
+@@ -1992,6 +1996,7 @@ static int cfi_amdstd_write_buffers(stru
return 0;
}
diff --git a/target/linux/ar71xx/patches-4.9/412-mtd-m25p80-zero-partition-parser-data.patch b/target/linux/ar71xx/patches-4.9/412-mtd-m25p80-zero-partition-parser-data.patch
deleted file mode 100644
index 866920a249..0000000000
--- a/target/linux/ar71xx/patches-4.9/412-mtd-m25p80-zero-partition-parser-data.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -249,6 +249,7 @@ static int m25p_probe(struct spi_device
- if (ret)
- return ret;
-
-+ memset(&ppdata, '\0', sizeof(ppdata));
- ppdata.of_node = spi->dev.of_node;
-
- return mtd_device_parse_register(&nor->mtd,
diff --git a/target/linux/ar71xx/patches-4.9/413-mtd-ar934x-nand-driver.patch b/target/linux/ar71xx/patches-4.9/413-mtd-ar934x-nand-driver.patch
index cfcd07a193..9f9c339e6b 100644
--- a/target/linux/ar71xx/patches-4.9/413-mtd-ar934x-nand-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/413-mtd-ar934x-nand-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
-@@ -554,4 +554,12 @@ config MTD_NAND_RB750
+@@ -577,4 +577,12 @@ config MTD_NAND_RB750
tristate "NAND flash driver for the RouterBoard 750"
depends on MTD_NAND && ATH79_MACH_RB750
diff --git a/target/linux/ar71xx/patches-4.9/414-mtd-rb91x-nand-driver.patch b/target/linux/ar71xx/patches-4.9/414-mtd-rb91x-nand-driver.patch
index 8b7582dce1..d1b61f096d 100644
--- a/target/linux/ar71xx/patches-4.9/414-mtd-rb91x-nand-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/414-mtd-rb91x-nand-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
-@@ -554,6 +554,10 @@ config MTD_NAND_RB750
+@@ -577,6 +577,10 @@ config MTD_NAND_RB750
tristate "NAND flash driver for the RouterBoard 750"
depends on MTD_NAND && ATH79_MACH_RB750
diff --git a/target/linux/ar71xx/patches-4.9/423-dsa-add-88e6063-driver.patch b/target/linux/ar71xx/patches-4.9/423-dsa-add-88e6063-driver.patch
index 1348cd9b04..1df93e9965 100644
--- a/target/linux/ar71xx/patches-4.9/423-dsa-add-88e6063-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/423-dsa-add-88e6063-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/dsa/Kconfig
+++ b/drivers/net/dsa/Kconfig
-@@ -13,6 +13,13 @@ config NET_DSA_MV88E6060
+@@ -9,6 +9,13 @@ config NET_DSA_MV88E6060
This enables support for the Marvell 88E6060 ethernet switch
chip.
@@ -11,14 +11,14 @@
+ This enables support for the Marvell 88E6063 ethernet switch
+ chip
+
- config NET_DSA_MV88E6XXX_NEED_PPU
- bool
- default n
+ config NET_DSA_BCM_SF2
+ tristate "Broadcom Starfighter 2 Ethernet switch support"
+ depends on HAS_IOMEM && NET_DSA
--- a/drivers/net/dsa/Makefile
+++ b/drivers/net/dsa/Makefile
@@ -1,4 +1,5 @@
obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
+obj-$(CONFIG_NET_DSA_MV88E6063) += mv88e6063.o
- obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx_drv.o
- mv88e6xxx_drv-y += mv88e6xxx.o
- ifdef CONFIG_NET_DSA_MV88E6123_61_65
+ obj-$(CONFIG_NET_DSA_BCM_SF2) += bcm_sf2.o
+ obj-$(CONFIG_NET_DSA_QCA8K) += qca8k.o
+
diff --git a/target/linux/ar71xx/patches-4.9/430-drivers-link-spi-before-mtd.patch b/target/linux/ar71xx/patches-4.9/430-drivers-link-spi-before-mtd.patch
index e1adfb0183..a862454597 100644
--- a/target/linux/ar71xx/patches-4.9/430-drivers-link-spi-before-mtd.patch
+++ b/target/linux/ar71xx/patches-4.9/430-drivers-link-spi-before-mtd.patch
@@ -1,6 +1,6 @@
--- a/drivers/Makefile
+++ b/drivers/Makefile
-@@ -74,8 +74,8 @@ obj-$(CONFIG_SCSI) += scsi/
+@@ -77,8 +77,8 @@ obj-$(CONFIG_SCSI) += scsi/
obj-y += nvme/
obj-$(CONFIG_ATA) += ata/
obj-$(CONFIG_TARGET_CORE) += target/
@@ -8,5 +8,5 @@
obj-$(CONFIG_SPI) += spi/
+obj-$(CONFIG_MTD) += mtd/
obj-$(CONFIG_SPMI) += spmi/
- obj-y += hsi/
+ obj-$(CONFIG_HSI) += hsi/
obj-y += net/
diff --git a/target/linux/ar71xx/patches-4.9/432-spi-rb4xx-spi-driver.patch b/target/linux/ar71xx/patches-4.9/432-spi-rb4xx-spi-driver.patch
index 7d99c43b95..e896d0bdf4 100644
--- a/target/linux/ar71xx/patches-4.9/432-spi-rb4xx-spi-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/432-spi-rb4xx-spi-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
-@@ -477,6 +477,12 @@ config SPI_QUP
+@@ -533,6 +533,12 @@ config SPI_QUP
This driver can also be built as a module. If so, the module
will be called spi_qup.
@@ -15,8 +15,8 @@
depends on ARCH_S3C24XX
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
-@@ -66,6 +66,7 @@ spi-pxa2xx-platform-objs := spi-pxa2xx.
- spi-pxa2xx-platform-$(CONFIG_SPI_PXA2XX_DMA) += spi-pxa2xx-dma.o
+@@ -72,6 +72,7 @@ obj-$(CONFIG_SPI_PPC4xx) += spi-ppc4xx.
+ spi-pxa2xx-platform-objs := spi-pxa2xx.o spi-pxa2xx-dma.o
obj-$(CONFIG_SPI_PXA2XX) += spi-pxa2xx-platform.o
obj-$(CONFIG_SPI_PXA2XX_PCI) += spi-pxa2xx-pci.o
+obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o
diff --git a/target/linux/ar71xx/patches-4.9/433-spi-rb4xx-cpld-driver.patch b/target/linux/ar71xx/patches-4.9/433-spi-rb4xx-cpld-driver.patch
index 0932c729f9..c44acab32e 100644
--- a/target/linux/ar71xx/patches-4.9/433-spi-rb4xx-cpld-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/433-spi-rb4xx-cpld-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
-@@ -713,6 +713,13 @@ config SPI_TLE62X0
+@@ -761,6 +761,13 @@ config SPI_TLE62X0
sysfs interface, with each line presented as a kind of GPIO
exposing both switch control and diagnostic feedback.
@@ -16,7 +16,7 @@
#
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
-@@ -67,6 +67,7 @@ spi-pxa2xx-platform-$(CONFIG_SPI_PXA2XX_
+@@ -73,6 +73,7 @@ spi-pxa2xx-platform-objs := spi-pxa2xx.
obj-$(CONFIG_SPI_PXA2XX) += spi-pxa2xx-platform.o
obj-$(CONFIG_SPI_PXA2XX_PCI) += spi-pxa2xx-pci.o
obj-$(CONFIG_SPI_RB4XX) += spi-rb4xx.o
diff --git a/target/linux/ar71xx/patches-4.9/435-spi-vsc7385_driver.patch b/target/linux/ar71xx/patches-4.9/435-spi-vsc7385_driver.patch
index 880c088c56..f9f1f7a1e5 100644
--- a/target/linux/ar71xx/patches-4.9/435-spi-vsc7385_driver.patch
+++ b/target/linux/ar71xx/patches-4.9/435-spi-vsc7385_driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
-@@ -720,6 +720,11 @@ config SPI_RB4XX_CPLD
+@@ -768,6 +768,11 @@ config SPI_RB4XX_CPLD
SPI driver for the Xilinx CPLD chip present on the
MikroTik RB4xx boards.
@@ -14,8 +14,8 @@
#
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
-@@ -91,6 +91,7 @@ obj-$(CONFIG_SPI_TEGRA20_SLINK) += spi-
- obj-$(CONFIG_SPI_TLE62X0) += spi-tle62x0.o
+@@ -99,6 +99,7 @@ spi-thunderx-objs := spi-cavium.o spi-
+ obj-$(CONFIG_SPI_THUNDERX) += spi-thunderx.o
obj-$(CONFIG_SPI_TOPCLIFF_PCH) += spi-topcliff-pch.o
obj-$(CONFIG_SPI_TXX9) += spi-txx9.o
+obj-$(CONFIG_SPI_VSC7385) += spi-vsc7385.o
diff --git a/target/linux/ar71xx/patches-4.9/440-leds-wndr3700-usb-led-driver.patch b/target/linux/ar71xx/patches-4.9/440-leds-wndr3700-usb-led-driver.patch
index 3ef0d1b0d4..0bf5b1a7d9 100644
--- a/target/linux/ar71xx/patches-4.9/440-leds-wndr3700-usb-led-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/440-leds-wndr3700-usb-led-driver.patch
@@ -1,8 +1,8 @@
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
-@@ -605,6 +605,13 @@ config LEDS_VERSATILE
- This option enabled support for the LEDs on the ARM Versatile
- and RealView boards. Say Y to enabled these.
+@@ -659,6 +659,13 @@ config LEDS_MLXCPLD
+ This option enabled support for the LEDs on the Mellanox
+ boards. Say Y to enabled these.
+config LEDS_WNDR3700_USB
+ tristate "NETGEAR WNDR3700 USB LED driver"
@@ -16,7 +16,7 @@
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
-@@ -47,6 +47,7 @@ obj-$(CONFIG_LEDS_DA9052) += leds-da905
+@@ -48,6 +48,7 @@ obj-$(CONFIG_LEDS_DA9052) += leds-da905
obj-$(CONFIG_LEDS_WM831X_STATUS) += leds-wm831x-status.o
obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o
obj-$(CONFIG_LEDS_PWM) += leds-pwm.o
diff --git a/target/linux/ar71xx/patches-4.9/441-leds-rb750-led-driver.patch b/target/linux/ar71xx/patches-4.9/441-leds-rb750-led-driver.patch
index fc2d02b8ff..777a0df917 100644
--- a/target/linux/ar71xx/patches-4.9/441-leds-rb750-led-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/441-leds-rb750-led-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
-@@ -612,6 +612,10 @@ config LEDS_WNDR3700_USB
+@@ -666,6 +666,10 @@ config LEDS_WNDR3700_USB
This option enables support for the USB LED found on the
NETGEAR WNDR3700 board.
@@ -13,7 +13,7 @@
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
-@@ -54,6 +54,7 @@ obj-$(CONFIG_LEDS_LT3593) += leds-lt359
+@@ -55,6 +55,7 @@ obj-$(CONFIG_LEDS_LT3593) += leds-lt359
obj-$(CONFIG_LEDS_ADP5520) += leds-adp5520.o
obj-$(CONFIG_LEDS_DELL_NETBOOKS) += dell-led.o
obj-$(CONFIG_LEDS_MC13783) += leds-mc13783.o
diff --git a/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch b/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch
index 8bccd12fac..41cf75a558 100644
--- a/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/450-gpio-nxp-74hc153-gpio-chip-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -1040,4 +1040,12 @@ config GPIO_VIPERBOARD
+@@ -1211,4 +1211,12 @@ config GPIO_VIPERBOARD
endmenu
@@ -15,7 +15,7 @@
endif
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
-@@ -69,6 +69,7 @@ obj-$(CONFIG_GPIO_MSIC) += gpio-msic.o
+@@ -83,6 +83,7 @@ obj-$(CONFIG_GPIO_MSIC) += gpio-msic.o
obj-$(CONFIG_GPIO_MVEBU) += gpio-mvebu.o
obj-$(CONFIG_GPIO_MXC) += gpio-mxc.o
obj-$(CONFIG_GPIO_MXS) += gpio-mxs.o
diff --git a/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch b/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch
index 0f7faf280f..d9cfa888fb 100644
--- a/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch
+++ b/target/linux/ar71xx/patches-4.9/451-gpio-74x164-improve-platform-device-support.patch
@@ -8,17 +8,15 @@
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/slab.h>
-@@ -107,8 +108,18 @@ static int gen_74x164_direction_output(s
+@@ -103,9 +104,16 @@ static int gen_74x164_direction_output(s
static int gen_74x164_probe(struct spi_device *spi)
{
struct gen_74x164_chip *chip;
-+ struct gen_74x164_chip_platform_data *pdata;
-+ struct device_node *np;
++ struct gen_74x164_chip_platform_data *pdata = spi->dev.platform_data;
++ struct device_node *np = spi->dev.of_node;
+ u32 nregs;
int ret;
-+ pdata = spi->dev.platform_data;
-+ np = spi->dev.of_node;
-+
+ if (!np && !pdata) {
+ dev_err(&spi->dev, "No configuration data available.\n");
+ return -EINVAL;
@@ -27,47 +25,57 @@
/*
* bits_per_word cannot be configured in platform data
*/
-@@ -130,18 +141,28 @@ static int gen_74x164_probe(struct spi_d
- chip->gpio_chip.set = gen_74x164_set_value;
- chip->gpio_chip.base = -1;
+@@ -115,17 +123,23 @@ static int gen_74x164_probe(struct spi_d
+ if (ret < 0)
+ return ret;
- if (of_property_read_u32(spi->dev.of_node, "registers-number",
-- &chip->registers)) {
+- &nregs)) {
- dev_err(&spi->dev,
- "Missing registers-number property in the DT.\n");
- return -EINVAL;
+- }
+ if (np) {
-+ if (of_property_read_u32(spi->dev.of_node, "registers-number", &chip->registers)) {
-+ dev_err(&spi->dev, "Missing registers-number property in the DT.\n");
-+ ret = -EINVAL;
-+ goto exit_destroy;
++ if (of_property_read_u32(np, "registers-number", &nregs)) {
++ dev_err(&spi->dev,
++ "Missing registers-number property in the DT.\n");
++ return -EINVAL;
+ }
+ } else if (pdata) {
-+ chip->gpio_chip.base = pdata->base;
-+ chip->registers = pdata->num_registers;
- }
++ nregs = pdata->num_registers;
++ }
-+ if (!chip->registers)
-+ chip->registers = 1;
-+
- chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers;
- chip->buffer = devm_kzalloc(&spi->dev, chip->registers, GFP_KERNEL);
- if (!chip->buffer)
+ chip = devm_kzalloc(&spi->dev, sizeof(*chip) + nregs, GFP_KERNEL);
+ if (!chip)
return -ENOMEM;
+ if (pdata && pdata->init_data)
+ memcpy(chip->buffer, pdata->init_data, chip->registers);
++
+ spi_set_drvdata(spi, chip);
+
+ chip->gpio_chip.label = spi->modalias;
+@@ -133,7 +147,11 @@ static int gen_74x164_probe(struct spi_d
+ chip->gpio_chip.get = gen_74x164_get_value;
+ chip->gpio_chip.set = gen_74x164_set_value;
+ chip->gpio_chip.set_multiple = gen_74x164_set_multiple;
+- chip->gpio_chip.base = -1;
++ if (np)
++ chip->gpio_chip.base = -1;
++ else if (pdata)
++ chip->gpio_chip.base = pdata->base;
+
- chip->gpio_chip.can_sleep = true;
- chip->gpio_chip.dev = &spi->dev;
- chip->gpio_chip.owner = THIS_MODULE;
-@@ -174,16 +195,18 @@ static int gen_74x164_remove(struct spi_
+
+ chip->registers = nregs;
+ chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers;
+@@ -170,17 +188,19 @@ static int gen_74x164_remove(struct spi_
return 0;
}
+#ifdef CONFIG_OF
static const struct of_device_id gen_74x164_dt_ids[] = {
{ .compatible = "fairchild,74hc595" },
+ { .compatible = "nxp,74lvc594" },
{},
};
MODULE_DEVICE_TABLE(of, gen_74x164_dt_ids);
@@ -99,11 +107,11 @@
+#endif
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -991,7 +991,6 @@ menu "SPI GPIO expanders"
+@@ -1154,7 +1154,6 @@ menu "SPI GPIO expanders"
config GPIO_74X164
tristate "74x164 serial-in/parallel-out 8-bits shift register"
-- depends on OF
+- depends on OF_GPIO
help
Driver for 74x164 compatible serial-in/parallel-out 8-outputs
shift registers. This driver can be used to provide access
diff --git a/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch b/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch
index c545252b38..5ddf6de928 100644
--- a/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/452-gpio-add-gpio-latch-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -1047,4 +1047,9 @@ config GPIO_NXP_74HC153
+@@ -1218,4 +1218,9 @@ config GPIO_NXP_74HC153
Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This
provides a GPIO interface supporting input mode only.
@@ -12,7 +12,7 @@
endif
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
-@@ -47,6 +47,7 @@ obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz
+@@ -56,6 +56,7 @@ obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz
obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
obj-$(CONFIG_ARCH_KS8695) += gpio-ks8695.o
obj-$(CONFIG_GPIO_INTEL_MID) += gpio-intel-mid.o
diff --git a/target/linux/ar71xx/patches-4.9/460-m25p80-spi-read-flash-check.patch b/target/linux/ar71xx/patches-4.9/460-m25p80-spi-read-flash-check.patch
deleted file mode 100644
index a34b38398d..0000000000
--- a/target/linux/ar71xx/patches-4.9/460-m25p80-spi-read-flash-check.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -149,8 +149,10 @@ static int m25p80_read(struct spi_nor *n
- msg.data_nbits = m25p80_rx_nbits(nor);
-
- ret = spi_flash_read(spi, &msg);
-- *retlen = msg.retlen;
-- return ret;
-+ if (!ret) {
-+ *retlen = msg.retlen;
-+ return 0;
-+ }
- }
-
- spi_message_init(&m);
diff --git a/target/linux/ar71xx/patches-4.9/490-usb-ehci-add-quirks-for-qca-socs.patch b/target/linux/ar71xx/patches-4.9/490-usb-ehci-add-quirks-for-qca-socs.patch
index d74ef1c83d..8a05adb050 100644
--- a/target/linux/ar71xx/patches-4.9/490-usb-ehci-add-quirks-for-qca-socs.patch
+++ b/target/linux/ar71xx/patches-4.9/490-usb-ehci-add-quirks-for-qca-socs.patch
@@ -40,7 +40,7 @@
retval = ehci_handshake(ehci, &ehci->regs->command,
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
-@@ -228,6 +228,10 @@ struct ehci_hcd { /* one per controlle
+@@ -231,6 +231,10 @@ struct ehci_hcd { /* one per controlle
unsigned need_oc_pp_cycle:1; /* MPC834X port power */
unsigned imx28_write_fix:1; /* For Freescale i.MX28 */
unsigned ignore_oc:1;
@@ -72,7 +72,7 @@
#endif /* __USB_CORE_EHCI_PDRIVER_H */
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
-@@ -51,6 +51,14 @@ struct ehci_platform_priv {
+@@ -52,6 +52,14 @@ struct ehci_platform_priv {
static const char hcd_name[] = "ehci-platform";
@@ -87,7 +87,7 @@
static int ehci_platform_reset(struct usb_hcd *hcd)
{
struct platform_device *pdev = to_platform_device(hcd->self.controller);
-@@ -256,6 +264,13 @@ static int ehci_platform_probe(struct pl
+@@ -261,6 +269,13 @@ static int ehci_platform_probe(struct pl
priv->reset_on_resume = true;
if (pdata->ignore_oc)
ehci->ignore_oc = 1;
diff --git a/target/linux/ar71xx/patches-4.9/500-MIPS-fw-myloader.patch b/target/linux/ar71xx/patches-4.9/500-MIPS-fw-myloader.patch
index 811a234a2c..bcb19372ef 100644
--- a/target/linux/ar71xx/patches-4.9/500-MIPS-fw-myloader.patch
+++ b/target/linux/ar71xx/patches-4.9/500-MIPS-fw-myloader.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
-@@ -218,6 +218,7 @@ endif
+@@ -213,6 +213,7 @@ cflags-$(toolchain-virt) += -DTOOLCHAIN
#
libs-$(CONFIG_FW_ARC) += arch/mips/fw/arc/
libs-$(CONFIG_FW_CFE) += arch/mips/fw/cfe/
@@ -10,7 +10,7 @@
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1118,6 +1118,9 @@ config MIPS_MSC
+@@ -1144,6 +1144,9 @@ config MIPS_MSC
config MIPS_NILE4
bool
diff --git a/target/linux/ar71xx/patches-4.9/504-MIPS-ath79-add-ath79_device_reset_get.patch b/target/linux/ar71xx/patches-4.9/504-MIPS-ath79-add-ath79_device_reset_get.patch
index 4f79136abe..c0e96b2729 100644
--- a/target/linux/ar71xx/patches-4.9/504-MIPS-ath79-add-ath79_device_reset_get.patch
+++ b/target/linux/ar71xx/patches-4.9/504-MIPS-ath79-add-ath79_device_reset_get.patch
@@ -1,12 +1,13 @@
--- a/arch/mips/include/asm/mach-ath79/ath79.h
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
-@@ -144,5 +144,6 @@ static inline u32 ath79_reset_rr(unsigne
+@@ -145,6 +145,7 @@ static inline u32 ath79_reset_rr(unsigne
void ath79_device_reset_set(u32 mask);
void ath79_device_reset_clear(u32 mask);
+u32 ath79_device_reset_get(u32 mask);
- #endif /* __ASM_MACH_ATH79_H */
+ void ath79_cpu_irq_init(unsigned irq_wb_chan2, unsigned irq_wb_chan3);
+ void ath79_misc_irq_init(void __iomem *regs, int irq,
--- a/arch/mips/ath79/common.c
+++ b/arch/mips/ath79/common.c
@@ -142,3 +142,29 @@ void ath79_device_reset_clear(u32 mask)
diff --git a/target/linux/ar71xx/patches-4.9/505-MIPS-ath79-add-ath79_gpio_function_select.patch b/target/linux/ar71xx/patches-4.9/505-MIPS-ath79-add-ath79_gpio_function_select.patch
index 3adb088d52..278e781539 100644
--- a/target/linux/ar71xx/patches-4.9/505-MIPS-ath79-add-ath79_gpio_function_select.patch
+++ b/target/linux/ar71xx/patches-4.9/505-MIPS-ath79-add-ath79_gpio_function_select.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/common.h
+++ b/arch/mips/ath79/common.h
-@@ -28,6 +28,7 @@ void ath79_ddr_wb_flush(unsigned int reg
+@@ -27,6 +27,7 @@ void ath79_ddr_ctrl_init(void);
void ath79_gpio_function_enable(u32 mask);
void ath79_gpio_function_disable(u32 mask);
void ath79_gpio_function_setup(u32 set, u32 clear);
diff --git a/target/linux/ar71xx/patches-4.9/509-MIPS-ath79-process-board-kernel-option.patch b/target/linux/ar71xx/patches-4.9/509-MIPS-ath79-process-board-kernel-option.patch
index 40bd8522ab..3091ab69b6 100644
--- a/target/linux/ar71xx/patches-4.9/509-MIPS-ath79-process-board-kernel-option.patch
+++ b/target/linux/ar71xx/patches-4.9/509-MIPS-ath79-process-board-kernel-option.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
-@@ -253,6 +253,8 @@ void __init plat_time_init(void)
+@@ -283,6 +283,8 @@ void __init plat_time_init(void)
mips_hpt_frequency = cpu_clk_rate / 2;
}
@@ -8,4 +8,4 @@
+
static int __init ath79_setup(void)
{
- of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+ if (mips_machtype == ATH79_MACH_GENERIC_OF)
diff --git a/target/linux/ar71xx/patches-4.9/602-MIPS-ath79-add-openwrt-stuff.patch b/target/linux/ar71xx/patches-4.9/602-MIPS-ath79-add-openwrt-stuff.patch
index 9959a39651..cbd69e337b 100644
--- a/target/linux/ar71xx/patches-4.9/602-MIPS-ath79-add-openwrt-stuff.patch
+++ b/target/linux/ar71xx/patches-4.9/602-MIPS-ath79-add-openwrt-stuff.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
-@@ -110,6 +110,20 @@ config SOC_QCA955X
+@@ -98,6 +98,20 @@ config SOC_QCA955X
select PCI_AR724X if PCI
def_bool n
@@ -21,7 +21,7 @@
config PCI_AR724X
def_bool n
-@@ -119,6 +133,10 @@ config ATH79_DEV_GPIO_BUTTONS
+@@ -107,6 +121,10 @@ config ATH79_DEV_GPIO_BUTTONS
config ATH79_DEV_LEDS_GPIO
def_bool n
@@ -32,7 +32,7 @@
config ATH79_DEV_SPI
def_bool n
-@@ -129,4 +147,14 @@ config ATH79_DEV_WMAC
+@@ -117,4 +135,14 @@ config ATH79_DEV_WMAC
depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA955X)
def_bool n
diff --git a/target/linux/ar71xx/patches-4.9/611-MIPS-ath79-wdt-timeout.patch b/target/linux/ar71xx/patches-4.9/611-MIPS-ath79-wdt-timeout.patch
index 7a70ac3f87..0927d5a977 100644
--- a/target/linux/ar71xx/patches-4.9/611-MIPS-ath79-wdt-timeout.patch
+++ b/target/linux/ar71xx/patches-4.9/611-MIPS-ath79-wdt-timeout.patch
@@ -6,7 +6,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
--- a/drivers/watchdog/ath79_wdt.c
+++ b/drivers/watchdog/ath79_wdt.c
-@@ -114,10 +114,14 @@ static inline void ath79_wdt_disable(voi
+@@ -115,10 +115,14 @@ static inline void ath79_wdt_disable(voi
static int ath79_wdt_set_timeout(int val)
{
diff --git a/target/linux/ar71xx/patches-4.9/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch b/target/linux/ar71xx/patches-4.9/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
index 5cfb4e78d7..869fdd6dd0 100644
--- a/target/linux/ar71xx/patches-4.9/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
+++ b/target/linux/ar71xx/patches-4.9/620-MIPS-ath79-add-support-for-QCA953x-SoC.patch
@@ -22,7 +22,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
-@@ -116,6 +116,10 @@ config SOC_AR934X
+@@ -104,6 +104,10 @@ config SOC_AR934X
select PCI_AR724X if PCI
def_bool n
@@ -33,7 +33,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
config SOC_QCA955X
select HW_HAS_PCI
select PCI_AR724X if PCI
-@@ -155,7 +159,7 @@ config ATH79_DEV_USB
+@@ -143,7 +147,7 @@ config ATH79_DEV_USB
def_bool n
config ATH79_DEV_WMAC
@@ -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
+@@ -356,6 +356,91 @@ static void __init ar934x_clocks_init(vo
iounmap(dpll_base);
}
@@ -316,15 +316,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
return;
--- a/arch/mips/ath79/irq.c
+++ b/arch/mips/ath79/irq.c
-@@ -105,6 +105,7 @@ static void __init ath79_misc_irq_init(v
- else if (soc_is_ar724x() ||
- soc_is_ar933x() ||
- soc_is_ar934x() ||
-+ soc_is_qca953x() ||
- soc_is_qca955x())
- ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack;
- else
-@@ -148,6 +149,34 @@ static void ar934x_ip2_irq_init(void)
+@@ -56,6 +56,34 @@ static void ar934x_ip2_irq_init(void)
irq_set_chained_handler(ATH79_CPU_IRQ(2), ar934x_ip2_irq_dispatch);
}
@@ -359,16 +351,24 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
static void qca955x_ip2_irq_dispatch(struct irq_desc *desc)
{
u32 status;
-@@ -362,7 +391,7 @@ void __init arch_init_irq(void)
+@@ -143,7 +171,7 @@ void __init arch_init_irq(void)
soc_is_ar913x() || soc_is_ar933x()) {
- irq_wb_chan[2] = 3;
- irq_wb_chan[3] = 2;
+ irq_wb_chan2 = 3;
+ irq_wb_chan3 = 2;
- } else if (soc_is_ar934x()) {
+ } else if (soc_is_ar934x() || soc_is_qca953x()) {
- irq_wb_chan[3] = 2;
+ irq_wb_chan3 = 2;
}
-@@ -371,6 +400,8 @@ void __init arch_init_irq(void)
+@@ -154,6 +182,7 @@ void __init arch_init_irq(void)
+ else if (soc_is_ar724x() ||
+ soc_is_ar933x() ||
+ soc_is_ar934x() ||
++ soc_is_qca953x() ||
+ soc_is_qca955x())
+ misc_is_ar71xx = false;
+ else
+@@ -164,6 +193,8 @@ void __init arch_init_irq(void)
if (soc_is_ar934x())
ar934x_ip2_irq_init();
@@ -379,7 +379,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
}
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
-@@ -64,6 +64,7 @@ static void __init ath79_detect_sys_type
+@@ -60,6 +60,7 @@ static void __init ath79_detect_sys_type
u32 major;
u32 minor;
u32 rev = 0;
@@ -387,7 +387,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
id = ath79_reset_rr(AR71XX_RESET_REG_REV_ID);
major = id & REV_ID_MAJOR_MASK;
-@@ -156,6 +157,17 @@ static void __init ath79_detect_sys_type
+@@ -152,6 +153,17 @@ static void __init ath79_detect_sys_type
rev = id & AR934X_REV_ID_REVISION_MASK;
break;
@@ -405,7 +405,7 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
case REV_ID_MAJOR_QCA9556:
ath79_soc = ATH79_SOC_QCA9556;
chip = "9556";
-@@ -172,11 +184,12 @@ static void __init ath79_detect_sys_type
+@@ -168,11 +180,12 @@ static void __init ath79_detect_sys_type
panic("ath79: unknown SoC, id:0x%08x", id);
}
diff --git a/target/linux/ar71xx/patches-4.9/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch b/target/linux/ar71xx/patches-4.9/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
index a381851ccf..dafac99190 100644
--- a/target/linux/ar71xx/patches-4.9/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
+++ b/target/linux/ar71xx/patches-4.9/621-MIPS-ath79-add-support-for-QCA956x-SoC.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
-@@ -125,6 +125,12 @@ config SOC_QCA955X
+@@ -113,6 +113,12 @@ config SOC_QCA955X
select PCI_AR724X if PCI
def_bool n
@@ -13,7 +13,7 @@
config ATH79_DEV_M25P80
select ATH79_DEV_SPI
def_bool n
-@@ -159,7 +165,7 @@ config ATH79_DEV_USB
+@@ -147,7 +153,7 @@ config ATH79_DEV_USB
def_bool n
config ATH79_DEV_WMAC
@@ -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
+@@ -526,6 +526,100 @@ static void __init qca955x_clocks_init(v
clk_add_alias("uart", NULL, "ref", NULL);
}
@@ -133,7 +133,7 @@
+ qca956x_clocks_init();
else
BUG();
-
+ }
--- a/arch/mips/ath79/common.c
+++ b/arch/mips/ath79/common.c
@@ -107,6 +107,8 @@ void ath79_device_reset_set(u32 mask)
@@ -291,20 +291,9 @@
return;
--- a/arch/mips/ath79/irq.c
+++ b/arch/mips/ath79/irq.c
-@@ -106,7 +106,9 @@ static void __init ath79_misc_irq_init(v
- soc_is_ar933x() ||
- soc_is_ar934x() ||
- soc_is_qca953x() ||
-- soc_is_qca955x())
-+ soc_is_qca955x() ||
-+ soc_is_qca956x() ||
-+ soc_is_tp9343())
- ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack;
- else
- BUG();
-@@ -263,6 +265,87 @@ static unsigned irq_wb_chan[8] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- };
+@@ -156,6 +156,87 @@ static void qca955x_irq_init(void)
+ irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
+ }
+static void qca956x_ip2_irq_dispatch(struct irq_desc *desc)
+{
@@ -387,10 +376,21 @@
+ late_time_init = &qca956x_enable_timer_cb;
+}
+
- asmlinkage void plat_irq_dispatch(void)
+ void __init arch_init_irq(void)
{
- unsigned long pending;
-@@ -404,4 +487,6 @@ void __init arch_init_irq(void)
+ unsigned irq_wb_chan2 = -1;
+@@ -183,7 +264,9 @@ void __init arch_init_irq(void)
+ soc_is_ar933x() ||
+ soc_is_ar934x() ||
+ soc_is_qca953x() ||
+- soc_is_qca955x())
++ soc_is_qca955x() ||
++ soc_is_qca956x() ||
++ soc_is_tp9343())
+ misc_is_ar71xx = false;
+ else
+ BUG();
+@@ -197,4 +280,6 @@ void __init arch_init_irq(void)
qca953x_irq_init();
else if (soc_is_qca955x())
qca955x_irq_init();
@@ -449,7 +449,7 @@
return -ENODEV;
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
-@@ -180,6 +180,18 @@ static void __init ath79_detect_sys_type
+@@ -176,6 +176,18 @@ static void __init ath79_detect_sys_type
rev = id & QCA955X_REV_ID_REVISION_MASK;
break;
@@ -468,7 +468,7 @@
default:
panic("ath79: unknown SoC, id:0x%08x", id);
}
-@@ -187,9 +199,12 @@ static void __init ath79_detect_sys_type
+@@ -183,9 +195,12 @@ static void __init ath79_detect_sys_type
if (ver == 1)
ath79_soc_rev = rev;
@@ -712,6 +712,6 @@
+ return soc_is_qca9561() || soc_is_qca9563();
+}
+
+ void ath79_ddr_wb_flush(unsigned int reg);
void ath79_ddr_set_pci_windows(void);
- extern void __iomem *ath79_gpio_base;
diff --git a/target/linux/ar71xx/patches-4.9/630-MIPS-ath79-fix-chained-irq-disable.patch b/target/linux/ar71xx/patches-4.9/630-MIPS-ath79-fix-chained-irq-disable.patch
index 63b91ddc0e..2b92b88d03 100644
--- a/target/linux/ar71xx/patches-4.9/630-MIPS-ath79-fix-chained-irq-disable.patch
+++ b/target/linux/ar71xx/patches-4.9/630-MIPS-ath79-fix-chained-irq-disable.patch
@@ -1,16 +1,16 @@
--- a/arch/mips/ath79/irq.c
+++ b/arch/mips/ath79/irq.c
-@@ -26,6 +26,9 @@
- #include "common.h"
+@@ -27,6 +27,9 @@
#include "machtypes.h"
+
+static struct irq_chip ip2_chip;
+static struct irq_chip ip3_chip;
+
- static void ath79_misc_irq_handler(struct irq_desc *desc)
+ static void ar934x_ip2_irq_dispatch(struct irq_desc *desc)
{
- void __iomem *base = ath79_reset_base;
-@@ -145,8 +148,7 @@ static void ar934x_ip2_irq_init(void)
+ u32 status;
+@@ -50,8 +53,7 @@ static void ar934x_ip2_irq_init(void)
for (i = ATH79_IP2_IRQ_BASE;
i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
@@ -20,7 +20,7 @@
irq_set_chained_handler(ATH79_CPU_IRQ(2), ar934x_ip2_irq_dispatch);
}
-@@ -174,7 +176,7 @@ static void qca953x_irq_init(void)
+@@ -79,7 +81,7 @@ static void qca953x_irq_init(void)
for (i = ATH79_IP2_IRQ_BASE;
i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
@@ -29,7 +29,7 @@
irq_set_chained_handler(ATH79_CPU_IRQ(2), qca953x_ip2_irq_dispatch);
}
-@@ -238,15 +240,13 @@ static void qca955x_irq_init(void)
+@@ -143,15 +145,13 @@ static void qca955x_irq_init(void)
for (i = ATH79_IP2_IRQ_BASE;
i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
@@ -47,7 +47,7 @@
irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
}
-@@ -331,13 +331,13 @@ static void qca956x_irq_init(void)
+@@ -222,13 +222,13 @@ static void qca956x_irq_init(void)
for (i = ATH79_IP2_IRQ_BASE;
i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
@@ -63,9 +63,9 @@
irq_set_chained_handler(ATH79_CPU_IRQ(3), qca956x_ip3_irq_dispatch);
-@@ -463,8 +463,36 @@ IRQCHIP_DECLARE(ar79_cpu_intc, "qca,ar71
-
- #endif
+@@ -237,12 +237,40 @@ static void qca956x_irq_init(void)
+ late_time_init = &qca956x_enable_timer_cb;
+ }
+static void ath79_ip2_disable(struct irq_data *data)
+{
@@ -89,6 +89,10 @@
+
void __init arch_init_irq(void)
{
+ unsigned irq_wb_chan2 = -1;
+ unsigned irq_wb_chan3 = -1;
+ bool misc_is_ar71xx;
+
+ ip2_chip = dummy_irq_chip;
+ ip2_chip.irq_disable = ath79_ip2_disable;
+ ip2_chip.irq_enable = ath79_ip2_enable;
diff --git a/target/linux/ar71xx/patches-4.9/632-MIPS-ath79-gpio-enable-set-direction.patch b/target/linux/ar71xx/patches-4.9/632-MIPS-ath79-gpio-enable-set-direction.patch
index 0a6be75088..4cf36325e1 100644
--- a/target/linux/ar71xx/patches-4.9/632-MIPS-ath79-gpio-enable-set-direction.patch
+++ b/target/linux/ar71xx/patches-4.9/632-MIPS-ath79-gpio-enable-set-direction.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/common.h
+++ b/arch/mips/ath79/common.h
-@@ -29,6 +29,7 @@ void ath79_gpio_function_enable(u32 mask
+@@ -28,6 +28,7 @@ void ath79_gpio_function_enable(u32 mask
void ath79_gpio_function_disable(u32 mask);
void ath79_gpio_function_setup(u32 set, u32 clear);
void ath79_gpio_output_select(unsigned gpio, u8 val);
diff --git a/target/linux/ar71xx/patches-4.9/634-MIPS-ath79-ar724x-clock-calculation-fixes.patch b/target/linux/ar71xx/patches-4.9/634-MIPS-ath79-ar724x-clock-calculation-fixes.patch
deleted file mode 100644
index 90149ef187..0000000000
--- a/target/linux/ar71xx/patches-4.9/634-MIPS-ath79-ar724x-clock-calculation-fixes.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/arch/mips/ath79/clock.c
-+++ b/arch/mips/ath79/clock.c
-@@ -26,7 +26,7 @@
- #include "common.h"
-
- #define AR71XX_BASE_FREQ 40000000
--#define AR724X_BASE_FREQ 5000000
-+#define AR724X_BASE_FREQ 40000000
- #define AR913X_BASE_FREQ 5000000
-
- static struct clk *clks[3];
-@@ -103,8 +103,8 @@ static void __init ar724x_clocks_init(vo
- div = ((pll >> AR724X_PLL_FB_SHIFT) & AR724X_PLL_FB_MASK);
- freq = div * ref_rate;
-
-- div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK);
-- freq *= div;
-+ div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK) * 2;
-+ freq /= div;
-
- cpu_rate = freq;
-
diff --git a/target/linux/ar71xx/patches-4.9/700-MIPS-ath79-add-openwrt-Kconfig.patch b/target/linux/ar71xx/patches-4.9/700-MIPS-ath79-add-openwrt-Kconfig.patch
index 23162053ca..5d4b180003 100644
--- a/target/linux/ar71xx/patches-4.9/700-MIPS-ath79-add-openwrt-Kconfig.patch
+++ b/target/linux/ar71xx/patches-4.9/700-MIPS-ath79-add-openwrt-Kconfig.patch
@@ -1,8 +1,8 @@
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
-@@ -94,6 +94,8 @@ choice
- select SOC_AR913X
- endchoice
+@@ -82,6 +82,8 @@ config ATH79_MACH_UBNT_XM
+ Say 'Y' here if you want your kernel to support the
+ Ubiquiti Networks XM (rev 1.0) board.
+source "arch/mips/ath79/Kconfig.openwrt"
+
diff --git a/target/linux/ar71xx/patches-4.9/818-MIPS-ath79-add-nu801-led-driver.patch b/target/linux/ar71xx/patches-4.9/818-MIPS-ath79-add-nu801-led-driver.patch
index 420bbff185..337447e2bf 100644
--- a/target/linux/ar71xx/patches-4.9/818-MIPS-ath79-add-nu801-led-driver.patch
+++ b/target/linux/ar71xx/patches-4.9/818-MIPS-ath79-add-nu801-led-driver.patch
@@ -1,6 +1,6 @@
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
-@@ -568,6 +568,13 @@ config LEDS_SEAD3
+@@ -606,6 +606,13 @@ config LEDS_IS31FL32XX
comment "LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)"
@@ -16,7 +16,7 @@
depends on LEDS_CLASS
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
-@@ -55,6 +55,7 @@ obj-$(CONFIG_LEDS_ADP5520) += leds-adp5
+@@ -56,6 +56,7 @@ obj-$(CONFIG_LEDS_ADP5520) += leds-adp5
obj-$(CONFIG_LEDS_DELL_NETBOOKS) += dell-led.o
obj-$(CONFIG_LEDS_MC13783) += leds-mc13783.o
obj-$(CONFIG_LEDS_RB750) += leds-rb750.o
diff --git a/target/linux/ar71xx/patches-4.9/820-MIPS-ath79-add_gpio_function2_setup.patch b/target/linux/ar71xx/patches-4.9/820-MIPS-ath79-add_gpio_function2_setup.patch
index a773e57dec..afa7b69b43 100644
--- a/target/linux/ar71xx/patches-4.9/820-MIPS-ath79-add_gpio_function2_setup.patch
+++ b/target/linux/ar71xx/patches-4.9/820-MIPS-ath79-add_gpio_function2_setup.patch
@@ -4,7 +4,7 @@ functions on the Arduino Yun.
--- a/arch/mips/ath79/common.h
+++ b/arch/mips/ath79/common.h
-@@ -30,6 +30,7 @@ void ath79_ddr_wb_flush(unsigned int reg
+@@ -29,6 +29,7 @@ void ath79_ddr_ctrl_init(void);
void ath79_gpio_function_enable(u32 mask);
void ath79_gpio_function_disable(u32 mask);
void ath79_gpio_function_setup(u32 set, u32 clear);
diff --git a/target/linux/ar71xx/patches-4.9/821-serial-core-add-support-for-boot-console-with-arbitr.patch b/target/linux/ar71xx/patches-4.9/821-serial-core-add-support-for-boot-console-with-arbitr.patch
deleted file mode 100644
index 9d6e7bca05..0000000000
--- a/target/linux/ar71xx/patches-4.9/821-serial-core-add-support-for-boot-console-with-arbitr.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 4d3c17975c7814884a721fe693b3adf5c426d759 Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke at hauke-m.de>
-Date: Tue, 10 Nov 2015 22:18:39 +0100
-Subject: [RFC] serial: core: add support for boot console with arbitrary
- baud rates
-
-The Arduino Yun uses a baud rate of 250000 by default. The serial is
-going over the Atmel ATmega and is used to connect to this chip.
-Without this patch Linux wants to switch the console to 230400 Baud.
-
-With this patch Linux will use the configured baud rate and not some
-standard one which is near by.
-
-Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
----
- drivers/tty/serial/serial_core.c | 13 ++++++++++---
- include/linux/console.h | 1 +
- 2 files changed, 11 insertions(+), 3 deletions(-)
-
---- a/drivers/tty/serial/serial_core.c
-+++ b/drivers/tty/serial/serial_core.c
-@@ -164,6 +164,8 @@ static int uart_port_startup(struct tty_
- if (retval == 0) {
- if (uart_console(uport) && uport->cons->cflag) {
- tty->termios.c_cflag = uport->cons->cflag;
-+ tty->termios.c_ospeed = uport->cons->baud;
-+ tty->termios.c_ispeed = uport->cons->baud;
- uport->cons->cflag = 0;
- }
- /*
-@@ -1909,7 +1911,7 @@ static const struct baud_rates baud_rate
- { 4800, B4800 },
- { 2400, B2400 },
- { 1200, B1200 },
-- { 0, B38400 }
-+ { 0, BOTHER }
- };
-
- /**
-@@ -1948,10 +1950,13 @@ uart_set_options(struct uart_port *port,
- * Construct a cflag setting.
- */
- for (i = 0; baud_rates[i].rate; i++)
-- if (baud_rates[i].rate <= baud)
-+ if (baud_rates[i].rate == baud)
- break;
-
- termios.c_cflag |= baud_rates[i].cflag;
-+ if (!baud_rates[i].rate) {
-+ termios.c_ospeed = baud;
-+ }
-
- if (bits == 7)
- termios.c_cflag |= CS7;
-@@ -1981,8 +1986,10 @@ uart_set_options(struct uart_port *port,
- * Allow the setting of the UART parameters with a NULL console
- * too:
- */
-- if (co)
-+ if (co) {
- co->cflag = termios.c_cflag;
-+ co->baud = baud;
-+ }
-
- return 0;
- }
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -128,6 +128,7 @@ struct console {
- short flags;
- short index;
- int cflag;
-+ int baud;
- void *data;
- struct console *next;
- };
diff --git a/target/linux/ar71xx/patches-4.9/900-mdio_bitbang_ignore_ta_value.patch b/target/linux/ar71xx/patches-4.9/900-mdio_bitbang_ignore_ta_value.patch
index 4536d519f8..8f8f349a66 100644
--- a/target/linux/ar71xx/patches-4.9/900-mdio_bitbang_ignore_ta_value.patch
+++ b/target/linux/ar71xx/patches-4.9/900-mdio_bitbang_ignore_ta_value.patch
@@ -1,5 +1,14 @@
--- a/drivers/net/phy/mdio-bitbang.c
+++ b/drivers/net/phy/mdio-bitbang.c
+@@ -155,7 +155,7 @@ static int mdiobb_cmd_addr(struct mdiobb
+ static int mdiobb_read(struct mii_bus *bus, int phy, int reg)
+ {
+ struct mdiobb_ctrl *ctrl = bus->priv;
+- int ret, i;
++ int ret;
+
+ if (reg & MII_ADDR_C45) {
+ reg = mdiobb_cmd_addr(ctrl, phy, reg);
@@ -165,19 +165,7 @@ static int mdiobb_read(struct mii_bus *b
ctrl->ops->set_mdio_dir(ctrl, 0);
diff --git a/target/linux/ar71xx/patches-4.9/901-phy-mdio-bitbang-prevent-rescheduling-during-command.patch b/target/linux/ar71xx/patches-4.9/901-phy-mdio-bitbang-prevent-rescheduling-during-command.patch
index 68f86e0e09..a830346a31 100644
--- a/target/linux/ar71xx/patches-4.9/901-phy-mdio-bitbang-prevent-rescheduling-during-command.patch
+++ b/target/linux/ar71xx/patches-4.9/901-phy-mdio-bitbang-prevent-rescheduling-during-command.patch
@@ -25,8 +25,8 @@ Signed-off-by: Jonas Gorski <jogo at openwrt.org>
@@ -156,7 +157,9 @@ static int mdiobb_read(struct mii_bus *b
{
struct mdiobb_ctrl *ctrl = bus->priv;
- int ret, i;
-+ long flags;
+ int ret;
++ unsigned long flags;
+ local_irq_save(flags);
if (reg & MII_ADDR_C45) {
@@ -44,7 +44,7 @@ Signed-off-by: Jonas Gorski <jogo at openwrt.org>
static int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val)
{
struct mdiobb_ctrl *ctrl = bus->priv;
-+ long flags;
++ unsigned long flags;
+ local_irq_save(flags);
if (reg & MII_ADDR_C45) {
diff --git a/target/linux/ar71xx/patches-4.9/902-at803x-add-reset-gpio-pdata.patch b/target/linux/ar71xx/patches-4.9/902-at803x-add-reset-gpio-pdata.patch
index 2244f882e7..cde588bca0 100644
--- a/target/linux/ar71xx/patches-4.9/902-at803x-add-reset-gpio-pdata.patch
+++ b/target/linux/ar71xx/patches-4.9/902-at803x-add-reset-gpio-pdata.patch
@@ -16,19 +16,19 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
#endif /* _PHY_AT803X_PDATA_H */
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
-@@ -243,6 +243,7 @@ static int at803x_resume(struct phy_devi
+@@ -264,6 +264,7 @@ static int at803x_resume(struct phy_devi
static int at803x_probe(struct phy_device *phydev)
{
+ struct at803x_platform_data *pdata;
- struct device *dev = &phydev->dev;
+ struct device *dev = &phydev->mdio.dev;
struct at803x_priv *priv;
struct gpio_desc *gpiod_reset;
-@@ -255,6 +256,12 @@ static int at803x_probe(struct phy_devic
+@@ -276,6 +277,12 @@ static int at803x_probe(struct phy_devic
phydev->drv->phy_id != ATH8032_PHY_ID)
goto does_not_require_reset_workaround;
-+ pdata = dev_get_platdata(&phydev->dev);
++ pdata = dev_get_platdata(dev);
+ if (pdata && pdata->has_reset_gpio) {
+ devm_gpio_request(dev, pdata->reset_gpio, "reset");
+ gpio_direction_output(pdata->reset_gpio, 1);
@@ -37,7 +37,7 @@ Signed-off-by: Felix Fietkau <nbd at nbd.name>
gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(gpiod_reset))
return PTR_ERR(gpiod_reset);
-@@ -377,15 +384,23 @@ static void at803x_link_change_notify(st
+@@ -407,15 +414,23 @@ static void at803x_link_change_notify(st
* cannot recover from by software.
*/
if (phydev->state == PHY_NOLINK) {
diff --git a/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch
index 5bedf5dc9e..21ceca156f 100644
--- a/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch
+++ b/target/linux/ar71xx/patches-4.9/910-unaligned_access_hacks.patch
@@ -49,7 +49,7 @@
-#define _HAVE_ARCH_IPV6_CSUM
-static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
- const struct in6_addr *daddr,
-- __u32 len, unsigned short proto,
+- __u32 len, __u8 proto,
- __wsum sum)
-{
- __wsum tmp;
@@ -184,9 +184,9 @@
}
--- a/include/uapi/linux/icmp.h
+++ b/include/uapi/linux/icmp.h
-@@ -80,7 +80,7 @@ struct icmphdr {
- __be16 mtu;
+@@ -81,7 +81,7 @@ struct icmphdr {
} frag;
+ __u8 reserved[4];
} un;
-};
+} __attribute__((packed, aligned(2)));
@@ -214,7 +214,7 @@
#include <linux/uaccess.h>
#include <linux/ipv6.h>
#include <linux/icmpv6.h>
-@@ -786,10 +787,10 @@ static void tcp_v6_send_response(const s
+@@ -796,10 +797,10 @@ static void tcp_v6_send_response(const s
topt = (__be32 *)(t1 + 1);
if (tsecr) {
@@ -241,7 +241,7 @@
*/
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
-@@ -433,7 +433,7 @@ int ipv6_recv_error(struct sock *sk, str
+@@ -471,7 +471,7 @@ int ipv6_recv_error(struct sock *sk, str
ipv6_iface_scope_id(&sin->sin6_addr,
IP6CB(skb)->iif);
} else {
@@ -250,7 +250,7 @@
&sin->sin6_addr);
sin->sin6_scope_id = 0;
}
-@@ -770,12 +770,12 @@ int ip6_datagram_send_ctl(struct net *ne
+@@ -814,12 +814,12 @@ int ip6_datagram_send_ctl(struct net *ne
}
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
@@ -267,7 +267,7 @@
case IPV6_2292HOPOPTS:
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
-@@ -395,7 +395,7 @@ static void ip6gre_err(struct sk_buff *s
+@@ -394,7 +394,7 @@ static void ip6gre_err(struct sk_buff *s
return;
ipv6h = (const struct ipv6hdr *)skb->data;
greh = (const struct gre_base_hdr *)(skb->data + offset);
@@ -276,63 +276,20 @@
t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
key, greh->protocol);
-@@ -479,11 +479,11 @@ static int ip6gre_rcv(struct sk_buff *sk
- offset += 4;
- }
- if (flags&GRE_KEY) {
-- key = *(__be32 *)(h + offset);
-+ key = net_hdr_word(h + offset);
- offset += 4;
- }
- if (flags&GRE_SEQ) {
-- seqno = ntohl(*(__be32 *)(h + offset));
-+ seqno = ntohl(net_hdr_word(h + offset));
- offset += 4;
- }
- }
-@@ -745,7 +745,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
-
- if (tunnel->parms.o_flags&GRE_SEQ) {
- ++tunnel->o_seqno;
-- *ptr = htonl(tunnel->o_seqno);
-+ net_hdr_word(ptr) = htonl(tunnel->o_seqno);
- ptr--;
- }
- if (tunnel->parms.o_flags&GRE_KEY) {
-@@ -841,7 +841,7 @@ static inline int ip6gre_xmit_ipv6(struc
-
- dsfield = ipv6_get_dsfield(ipv6h);
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
-- fl6.flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK);
-+ fl6.flowlabel |= net_hdr_word(ipv6h) & IPV6_TCLASS_MASK;
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL)
- fl6.flowlabel |= ip6_flowlabel(ipv6h);
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
---- a/net/ipv6/ip6_tunnel.c
-+++ b/net/ipv6/ip6_tunnel.c
-@@ -1409,7 +1409,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
-
- dsfield = ipv6_get_dsfield(ipv6h);
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
-- fl6.flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK);
-+ fl6.flowlabel |= net_hdr_word(ipv6h) & IPV6_TCLASS_MASK;
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL)
- fl6.flowlabel |= ip6_flowlabel(ipv6h);
- if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
-@@ -573,7 +573,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
+@@ -574,7 +574,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
goto drop;
}
- pkt_len = ntohl(*(__be32 *)(nh + optoff + 2));
+ pkt_len = ntohl(net_hdr_word(nh + optoff + 2));
if (pkt_len <= IPV6_MAXPLEN) {
- IP6_INC_STATS_BH(net, ipv6_skb_idev(skb),
- IPSTATS_MIB_INHDRERRORS);
+ __IP6_INC_STATS(net, ipv6_skb_idev(skb),
+ IPSTATS_MIB_INHDRERRORS);
--- a/include/linux/types.h
+++ b/include/linux/types.h
-@@ -232,5 +232,11 @@ typedef void (*call_rcu_func_t)(struct r
+@@ -231,5 +231,11 @@ typedef void (*call_rcu_func_t)(struct r
/* clocksource cycle base type */
typedef u64 cycle_t;
@@ -346,7 +303,7 @@
#endif /* _LINUX_TYPES_H */
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1321,8 +1321,8 @@ static struct sk_buff **inet_gro_receive
+@@ -1318,8 +1318,8 @@ struct sk_buff **inet_gro_receive(struct
if (unlikely(ip_fast_csum((u8 *)iph, 5)))
goto out_unlock;
@@ -370,7 +327,7 @@
return neigh_create(&arp_tbl, pkey, dev);
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
-@@ -451,48 +451,53 @@ static void tcp_options_write(__be32 *pt
+@@ -448,48 +448,53 @@ static void tcp_options_write(__be32 *pt
u16 options = opts->options; /* mungable copy */
if (unlikely(OPTION_MD5 & options)) {
@@ -447,7 +404,7 @@
}
if (unlikely(opts->num_sack_blocks)) {
-@@ -500,16 +505,17 @@ static void tcp_options_write(__be32 *pt
+@@ -497,16 +502,17 @@ static void tcp_options_write(__be32 *pt
tp->duplicate_sack : tp->selective_acks;
int this_sack;
@@ -471,7 +428,7 @@
}
tp->rx_opt.dsack = 0;
-@@ -522,13 +528,14 @@ static void tcp_options_write(__be32 *pt
+@@ -519,13 +525,14 @@ static void tcp_options_write(__be32 *pt
if (foc->exp) {
len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len;
@@ -491,7 +448,7 @@
memcpy(p, foc->val, foc->len);
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
-@@ -505,7 +505,7 @@ static struct sk_buff *add_grec(struct s
+@@ -509,7 +509,7 @@ static struct sk_buff *add_grec(struct s
if (!skb)
return NULL;
psrc = (__be32 *)skb_put(skb, sizeof(__be32));
@@ -540,7 +497,7 @@
#define IGMP_HOST_MEMBERSHIP_REPORT 0x12 /* Ditto */
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
-@@ -95,7 +95,7 @@ __be32 __skb_flow_get_ports(const struct
+@@ -84,7 +84,7 @@ __be32 __skb_flow_get_ports(const struct
ports = __skb_header_pointer(skb, thoff + poff,
sizeof(_ports), data, hlen, &_ports);
if (ports)
@@ -562,7 +519,7 @@
#define ICMPV6_ROUTER_PREF_LOW 0x3
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
-@@ -76,7 +76,7 @@ struct ra_msg {
+@@ -87,7 +87,7 @@ struct ra_msg {
struct icmp6hdr icmph;
__be32 reachable_time;
__be32 retrans_timer;
@@ -571,7 +528,7 @@
struct rd_msg {
struct icmp6hdr icmph;
-@@ -148,10 +148,10 @@ static inline u32 ndisc_hashfn(const voi
+@@ -365,10 +365,10 @@ static inline u32 ndisc_hashfn(const voi
{
const u32 *p32 = pkey;
@@ -588,7 +545,7 @@
static inline struct neighbour *__ipv6_neigh_lookup_noref(struct net_device *dev, const void *pkey)
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
-@@ -151,7 +151,7 @@ next_knode:
+@@ -159,7 +159,7 @@ next_knode:
data = skb_header_pointer(skb, toff, 4, &hdata);
if (!data)
goto out;
@@ -597,7 +554,7 @@
n = rcu_dereference_bh(n->next);
goto next_knode;
}
-@@ -204,8 +204,8 @@ check_terminal:
+@@ -212,8 +212,8 @@ check_terminal:
&hdata);
if (!data)
goto out;
@@ -610,7 +567,7 @@
goto next_ht;
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
-@@ -225,7 +225,7 @@ static struct sk_buff **ipv6_gro_receive
+@@ -220,7 +220,7 @@ static struct sk_buff **ipv6_gro_receive
continue;
iph2 = (struct ipv6hdr *)(p->data + off);
@@ -621,7 +578,7 @@
* XXX skbs on the gro_list have all been parsed and pulled
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
-@@ -45,7 +45,7 @@ struct prefix_info {
+@@ -46,7 +46,7 @@ struct prefix_info {
__be32 reserved2;
struct in6_addr prefix;
@@ -642,9 +599,9 @@
- *(__be32 *)iph = to;
+ net_hdr_word(iph) = to;
if (skb->ip_summed == CHECKSUM_COMPLETE)
- skb->csum = csum_add(csum_sub(skb->csum, from), to);
- return 1;
-@@ -134,7 +134,7 @@ static inline int IP6_ECN_set_ce(struct
+ skb->csum = csum_add(csum_sub(skb->csum, (__force __wsum)from),
+ (__force __wsum)to);
+@@ -135,7 +135,7 @@ static inline int IP6_ECN_set_ce(struct
static inline void IP6_ECN_clear(struct ipv6hdr *iph)
{
@@ -664,7 +621,7 @@
#define IP6_MF 0x0001
#define IP6_OFFSET 0xFFF8
-@@ -417,8 +417,8 @@ static inline void __ipv6_addr_set_half(
+@@ -449,8 +449,8 @@ static inline void __ipv6_addr_set_half(
}
#endif
#endif
@@ -675,7 +632,7 @@
}
static inline void ipv6_addr_set(struct in6_addr *addr,
-@@ -477,6 +477,8 @@ static inline bool ipv6_prefix_equal(con
+@@ -509,6 +509,8 @@ static inline bool ipv6_prefix_equal(con
const __be32 *a1 = addr1->s6_addr32;
const __be32 *a2 = addr2->s6_addr32;
unsigned int pdw, pbi;
@@ -684,7 +641,7 @@
/* check complete u32 in prefix */
pdw = prefixlen >> 5;
-@@ -485,7 +487,9 @@ static inline bool ipv6_prefix_equal(con
+@@ -517,7 +519,9 @@ static inline bool ipv6_prefix_equal(con
/* check incomplete u32 in prefix */
pbi = prefixlen & 0x1f;
@@ -695,7 +652,7 @@
return false;
return true;
-@@ -629,13 +633,13 @@ static inline void ipv6_addr_set_v4mappe
+@@ -661,13 +665,13 @@ static inline void ipv6_addr_set_v4mappe
*/
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
{
@@ -711,7 +668,7 @@
if (xb)
return i * 32 + 31 - __fls(ntohl(xb));
}
-@@ -804,17 +808,18 @@ static inline int ip6_default_np_autolab
+@@ -836,17 +840,18 @@ static inline int ip6_default_np_autolab
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
__be32 flowlabel)
{
@@ -803,7 +760,7 @@
for (i = 5; i < MD5_MESSAGE_BYTES / 4; i++)
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
-@@ -138,7 +138,7 @@ static __be32 addr_bit_set(const void *t
+@@ -136,7 +136,7 @@ static __be32 addr_bit_set(const void *t
* See include/asm-generic/bitops/le.h.
*/
return (__force __be32)(1 << ((~fn_bit ^ BITOP_BE32_SWIZZLE) & 0x1f)) &
@@ -814,7 +771,7 @@
static struct fib6_node *node_alloc(void)
--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
-@@ -456,7 +456,7 @@ static void tcp_sack(const struct sk_buf
+@@ -452,7 +452,7 @@ static void tcp_sack(const struct sk_buf
/* Fast path for timestamp-only option */
if (length == TCPOLEN_TSTAMP_ALIGNED
@@ -838,7 +795,7 @@
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -3818,14 +3818,16 @@ static bool tcp_parse_aligned_timestamp(
+@@ -3886,14 +3886,16 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);
@@ -862,7 +819,7 @@
return true;
--- a/include/uapi/linux/if_pppox.h
+++ b/include/uapi/linux/if_pppox.h
-@@ -47,6 +47,7 @@ struct pppoe_addr {
+@@ -50,6 +50,7 @@ struct pppoe_addr {
*/
struct pptp_addr {
__u16 call_id;
@@ -901,7 +858,7 @@
static inline struct neighbour *___neigh_lookup_noref(
--- a/include/uapi/linux/netfilter_arp/arp_tables.h
+++ b/include/uapi/linux/netfilter_arp/arp_tables.h
-@@ -68,7 +68,7 @@ struct arpt_arp {
+@@ -69,7 +69,7 @@ struct arpt_arp {
__u8 flags;
/* Inverse flags */
__u16 invflags;
diff --git a/target/linux/ar71xx/patches-4.9/930-chipidea-pullup.patch b/target/linux/ar71xx/patches-4.9/930-chipidea-pullup.patch
index 23b8e86aac..370cbb5314 100644
--- a/target/linux/ar71xx/patches-4.9/930-chipidea-pullup.patch
+++ b/target/linux/ar71xx/patches-4.9/930-chipidea-pullup.patch
@@ -18,7 +18,7 @@
static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
-@@ -851,7 +851,7 @@ static inline void ci_role_destroy(struc
+@@ -839,7 +839,7 @@ static inline void ci_role_destroy(struc
{
ci_hdrc_gadget_destroy(ci);
ci_hdrc_host_destroy(ci);
@@ -27,7 +27,7 @@
ci_hdrc_otg_destroy(ci);
}
-@@ -902,6 +902,9 @@ static int ci_hdrc_probe(struct platform
+@@ -890,6 +890,9 @@ static int ci_hdrc_probe(struct platform
ci->supports_runtime_pm = !!(ci->platdata->flags &
CI_HDRC_SUPPORTS_RUNTIME_PM);
@@ -37,7 +37,7 @@
ret = hw_device_init(ci, base);
if (ret < 0) {
dev_err(dev, "can't initialize hardware\n");
-@@ -967,7 +970,7 @@ static int ci_hdrc_probe(struct platform
+@@ -955,7 +958,7 @@ static int ci_hdrc_probe(struct platform
goto deinit_phy;
}
--
2.11.0
More information about the Lede-dev
mailing list