From patchwork Sat Oct 7 21:20:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hauke Mehrtens X-Patchwork-Id: 822936 X-Patchwork-Delegate: hauke@hauke-m.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133; helo=bombadil.infradead.org; envelope-from=lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="drEplE9C"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3y8fct34LNz9t3n for ; Sun, 8 Oct 2017 08:23:26 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Subject:References: In-Reply-To:Message-Id:Date:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=p9Dzs9m52leevaGUUiccCG+q+mbYJVdeb32jf0IHNX4=; b=drEplE9C6X/Hsa eM/sUc5Sz848LxXrqoyqeffBvNjZ42UNVRfqVmBB2N3P/d6pndsjsbJCz+PrOASYp44QUFQrk+dB4 mMmqTXtdcyJqgS7ASYR2EVyww/cy2ry26YvAprIIwWnivDEoN7VEv1qbQVEYNPOFA5Ygjq9knp21m UUKN0hhAotTiNuXnCZML4BwKsBTLkh3FryCnpYdg482EjIS6i+UEKZN0bdIgTAxnE1K0krncAm2BM k++auWvfISrh4e9GbhielARoVKxzip9r62fD+MExMbUgrGk2mspefw7I/oir5izAoDyaOL0OwYrEe hRbSRGRvtaMq9o0/mC7A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1e0wZA-0007Nv-TY; Sat, 07 Oct 2017 21:23:24 +0000 Received: from mx1.mailbox.org ([80.241.60.212]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1e0wXi-0006Vn-DX for lede-dev@lists.infradead.org; Sat, 07 Oct 2017 21:22:06 +0000 Received: from smtp1.mailbox.org (smtp1.mailbox.org [80.241.60.240]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.mailbox.org (Postfix) with ESMTPS id 4C45D46CA8; Sat, 7 Oct 2017 23:21:33 +0200 (CEST) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter02.heinlein-hosting.de (spamfilter02.heinlein-hosting.de [80.241.56.116]) (amavisd-new, port 10030) with ESMTP id phmzKfDWYSuu; Sat, 7 Oct 2017 23:21:28 +0200 (CEST) From: Hauke Mehrtens To: lede-dev@lists.infradead.org Date: Sat, 7 Oct 2017 23:20:47 +0200 Message-Id: <20171007212049.11361-3-hauke@hauke-m.de> In-Reply-To: <20171007212049.11361-1-hauke@hauke-m.de> References: <20171007212049.11361-1-hauke@hauke-m.de> X-Spam-Note: CRM114 run bypassed due to message size (113668 bytes) X-Spam-Score: -2.6 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [80.241.60.212 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Subject: [LEDE-DEV] [PATCH 2/4] ar71xx: make the target compile with kernel 4.9 X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hauke Mehrtens MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This makes the ar71xx target compile with kernel 4.9. Signed-off-by: Hauke Mehrtens --- 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 #include #include +#include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include +#include 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 #include #include +#include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include +#include #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 #include #include +#include #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 #include #include +#include #include @@ -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 -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 ---- - ---- 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 @@ -12,14 +12,18 @@ #include #include - #include + #include +#include #include #include 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 #include #include -@@ -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 --- 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 -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 ---- - 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 @@ -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 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 #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 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 #include #include -@@ -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; }