Ver Fonte

kernel: update kernel 4.1 to version 4.1.11

https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.11

Signed-off-by: Hauke Mehrtens <[email protected]>

SVN-Revision: 47252
Hauke Mehrtens há 10 anos atrás
pai
commit
da94b00df5
27 ficheiros alterados com 127 adições e 153 exclusões
  1. 2 2
      include/kernel-version.mk
  2. 3 3
      target/linux/ar7/patches-4.1/500-serial_kludge.patch
  3. 14 14
      target/linux/ar71xx/patches-4.1/799-MIPS-ath79-add-minibox-v1-support.patch
  4. 1 1
      target/linux/ar71xx/patches-4.1/814-MIPS-ath79-add-blackswift.patch
  5. 3 3
      target/linux/ar71xx/patches-4.1/814-MIPS-ath79-add-tplink-tl-wdr6500-v2-support.patch
  6. 3 3
      target/linux/ar71xx/patches-4.1/815-MIPS-ath79-add-mr1750-support.patch
  7. 3 3
      target/linux/ar71xx/patches-4.1/816-MIPS-ath79-add-tl-wdr3320-v2-support.patch
  8. 2 2
      target/linux/bcm53xx/patches-4.1/191-usb-xhci-add-Broadcom-specific-fake-doorbell.patch
  9. 1 1
      target/linux/brcm2708/patches-4.1/0001-Main-bcm2708-bcm2709-linux-port.patch
  10. 1 1
      target/linux/brcm2708/patches-4.1/0011-bcm2708-alsa-sound-driver.patch
  11. 1 1
      target/linux/brcm2708/patches-4.1/0097-serial-8250-Don-t-crash-when-nr_uarts-is-0.patch
  12. 1 1
      target/linux/brcm2708/patches-4.1/0121-spidev-Add-spidev-compatible-string-to-silence-warni.patch
  13. 14 16
      target/linux/generic/patches-4.1/760-8139cp-fixes-from-4.3.patch
  14. 4 6
      target/linux/generic/patches-4.1/761-8139cp-fixes-from-4.4.patch
  15. 3 3
      target/linux/generic/patches-4.1/810-pci_disable_common_quirks.patch
  16. 5 5
      target/linux/generic/patches-4.1/902-debloat_proc.patch
  17. 2 2
      target/linux/generic/patches-4.1/903-debloat_direct_io.patch
  18. 1 1
      target/linux/ipq806x/patches-4.1/300-arch-arm-force-ZRELADDR-on-arch-qcom.patch
  19. 7 7
      target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch
  20. 2 2
      target/linux/lantiq/patches-4.1/0033-SPI-MIPS-lantiq-adds-spi-xway.patch
  21. 1 1
      target/linux/oxnas/patches-4.1/300-introduce-oxnas-platform.patch
  22. 8 8
      target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch
  23. 37 41
      target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch
  24. 1 1
      target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch
  25. 1 1
      target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch
  26. 2 2
      target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch
  27. 4 22
      target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch

+ 2 - 2
include/kernel-version.mk

@@ -4,12 +4,12 @@ LINUX_RELEASE?=1
 
 LINUX_VERSION-3.18 = .21
 LINUX_VERSION-4.0 = .9
-LINUX_VERSION-4.1 = .10
+LINUX_VERSION-4.1 = .11
 LINUX_VERSION-4.3 = -rc7
 
 LINUX_KERNEL_MD5SUM-3.18.21 = e4248caaa4cef318c04657e971b37298
 LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b
-LINUX_KERNEL_MD5SUM-4.1.10 = 16953359a8c245d478294af65fd756a8
+LINUX_KERNEL_MD5SUM-4.1.11 = 63e5981e38f935772a5309289fe76972
 LINUX_KERNEL_MD5SUM-4.3-rc7 = b33f9c9c1a597bb8e0d6f84c074e733f
 
 ifdef KERNEL_PATCHVER

+ 3 - 3
target/linux/ar7/patches-4.1/500-serial_kludge.patch

@@ -1,7 +1,7 @@
 --- a/drivers/tty/serial/8250/8250_core.c
 +++ b/drivers/tty/serial/8250/8250_core.c
-@@ -339,6 +339,13 @@ configured less than Maximum supported f
- 				  UART_FCR7_64BYTE,
+@@ -347,6 +347,13 @@ configured less than Maximum supported f
+ 		.rxtrig_bytes	= {1, 4, 8, 14},
  		.flags		= UART_CAP_FIFO,
  	},
 +	[PORT_AR7] = {
@@ -14,7 +14,7 @@
  };
  
  /* Uart divisor latch read */
-@@ -3340,7 +3347,11 @@ static void serial8250_console_putchar(s
+@@ -3348,7 +3355,11 @@ static void serial8250_console_putchar(s
  {
  	struct uart_8250_port *up = up_to_u8250p(port);
  

+ 14 - 14
target/linux/ar71xx/patches-4.1/799-MIPS-ath79-add-minibox-v1-support.patch

@@ -1,19 +1,19 @@
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -64,6 +64,7 @@ enum ath79_mach_type {
-	ATH79_MACH_EPG5000,		/* EnGenius EPG5000 */
-	ATH79_MACH_F9K1115V2,		/* Belkin AC1750DB */
-	ATH79_MACH_GL_INET,		/* GL-CONNECT GL-INET */
+@@ -69,6 +69,7 @@ enum ath79_mach_type {
+ 	ATH79_MACH_EPG5000,		/* EnGenius EPG5000 */
+ 	ATH79_MACH_F9K1115V2,		/* Belkin AC1750DB */
+ 	ATH79_MACH_GL_INET,		/* GL-CONNECT GL-INET */
 +	ATH79_MACH_GS_MINIBOX_V1,	/* Gainstrong MiniBox V1.0 */
-	ATH79_MACH_GS_OOLITE,           /* GS OOLITE V1.0 */
-	ATH79_MACH_HIWIFI_HC6361,	/* HiWiFi HC6361 */
-	ATH79_MACH_JA76PF,		/* jjPlus JA76PF */
+ 	ATH79_MACH_GS_OOLITE,           /* GS OOLITE V1.0 */
+ 	ATH79_MACH_HIWIFI_HC6361,	/* HiWiFi HC6361 */
+ 	ATH79_MACH_JA76PF,		/* jjPlus JA76PF */
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -511,6 +511,16 @@
-	select ATH79_DEV_M25P80
-	select ATH79_DEV_WMAC
-
+@@ -556,6 +556,16 @@ config ATH79_MACH_EAP300V2
+ 	select ATH79_DEV_M25P80
+ 	select ATH79_DEV_WMAC
+ 
 +config ATH79_MACH_GS_MINIBOX_V1
 +	bool "Gainstrong MiniBox V1.0 support"
 +	select SOC_AR933X
@@ -27,9 +27,9 @@
  config ATH79_MACH_GS_OOLITE
         bool "GS Oolite V1 support"
         select SOC_AR933X
---- a/arch/mips/ath79/Makefile	2015-08-10 23:27:44.599500173 +0200
-+++ b/arch/mips/ath79/Makefile	2015-08-10 23:29:25.090929262 +0200
-@@ -75,6 +75,7 @@
+--- a/arch/mips/ath79/Makefile
++++ b/arch/mips/ath79/Makefile
+@@ -80,6 +80,7 @@ obj-$(CONFIG_ATH79_MACH_EPG5000)	+= mach
  obj-$(CONFIG_ATH79_MACH_ESR1750)	+= mach-esr1750.o
  obj-$(CONFIG_ATH79_MACH_F9K1115V2)	+= mach-f9k1115v2.o
  obj-$(CONFIG_ATH79_MACH_GL_INET)	+= mach-gl-inet.o

+ 1 - 1
target/linux/ar71xx/patches-4.1/814-MIPS-ath79-add-blackswift.patch

@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -904,6 +904,16 @@ config ATH79_MACH_EAP7660D
+@@ -914,6 +914,16 @@ config ATH79_MACH_EAP7660D
  	select ATH79_DEV_LEDS_GPIO
  	select ATH79_DEV_M25P80
  

+ 3 - 3
target/linux/ar71xx/patches-4.1/814-MIPS-ath79-add-tplink-tl-wdr6500-v2-support.patch

@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -1053,6 +1053,17 @@ config ATH79_MACH_TL_WDR4300
+@@ -1063,6 +1063,17 @@ config ATH79_MACH_TL_WDR4300
  	select ATH79_DEV_USB
  	select ATH79_DEV_WMAC
  
@@ -20,7 +20,7 @@
  	select SOC_AR933X
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -155,6 +155,7 @@ enum ath79_mach_type {
+@@ -156,6 +156,7 @@ enum ath79_mach_type {
  	ATH79_MACH_TL_WA901ND_V3,	/* TP-LINK TL-WA901ND v3 */
  	ATH79_MACH_TL_WDR3500,		/* TP-LINK TL-WDR3500 */
  	ATH79_MACH_TL_WDR4300,		/* TP-LINK TL-WDR4300 */
@@ -30,7 +30,7 @@
  	ATH79_MACH_TL_WR1043ND,		/* TP-LINK TL-WR1043ND */
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -131,6 +131,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WA901ND)	+= m
+@@ -132,6 +132,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WA901ND)	+= m
  obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V2)	+= mach-tl-wa901nd-v2.o
  obj-$(CONFIG_ATH79_MACH_TL_WDR3500)     += mach-tl-wdr3500.o
  obj-$(CONFIG_ATH79_MACH_TL_WDR4300)     += mach-tl-wdr4300.o

+ 3 - 3
target/linux/ar71xx/patches-4.1/815-MIPS-ath79-add-mr1750-support.patch

@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -900,6 +900,16 @@ config ATH79_MACH_CAP4200AG
+@@ -910,6 +910,16 @@ config ATH79_MACH_CAP4200AG
  	select ATH79_DEV_M25P80
  	select ATH79_DEV_WMAC
  
@@ -19,7 +19,7 @@
  	select SOC_QCA955X
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -91,6 +91,7 @@ obj-$(CONFIG_ATH79_MACH_HORNET_UB)	+= ma
+@@ -92,6 +92,7 @@ obj-$(CONFIG_ATH79_MACH_HORNET_UB)	+= ma
  obj-$(CONFIG_ATH79_MACH_MC_MAC1200R)     += mach-mc-mac1200r.o
  obj-$(CONFIG_ATH79_MACH_MR12)		+= mach-mr12.o
  obj-$(CONFIG_ATH79_MACH_MR16)		+= mach-mr16.o
@@ -29,7 +29,7 @@
  obj-$(CONFIG_ATH79_MACH_MYNET_N600)	+= mach-mynet-n600.o
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -80,6 +80,7 @@ enum ath79_mach_type {
+@@ -81,6 +81,7 @@ enum ath79_mach_type {
  	ATH79_MACH_HORNET_UB,		/* ALFA Networks Hornet-UB */
  	ATH79_MACH_MR12,		/* Cisco Meraki MR12 */
  	ATH79_MACH_MR16,		/* Cisco Meraki MR16 */

+ 3 - 3
target/linux/ar71xx/patches-4.1/816-MIPS-ath79-add-tl-wdr3320-v2-support.patch

@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
-@@ -1055,6 +1055,17 @@ config ATH79_MACH_TL_WA901ND_V2
+@@ -1065,6 +1065,17 @@ config ATH79_MACH_TL_WA901ND_V2
  	select ATH79_DEV_M25P80
  	select ATH79_DEV_WMAC
  
@@ -20,7 +20,7 @@
  	select SOC_AR934X
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -155,6 +155,7 @@ enum ath79_mach_type {
+@@ -156,6 +156,7 @@ enum ath79_mach_type {
  	ATH79_MACH_TL_WA901ND,		/* TP-LINK TL-WA901ND */
  	ATH79_MACH_TL_WA901ND_V2,	/* TP-LINK TL-WA901ND v2 */
  	ATH79_MACH_TL_WA901ND_V3,	/* TP-LINK TL-WA901ND v3 */
@@ -30,7 +30,7 @@
  	ATH79_MACH_TL_WDR6500_V2,	/* TP-LINK TL-WDR6500 v2 */
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -131,6 +131,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WA7210N_V2)	+
+@@ -132,6 +132,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WA7210N_V2)	+
  obj-$(CONFIG_ATH79_MACH_TL_WA830RE_V2)	+= mach-tl-wa830re-v2.o
  obj-$(CONFIG_ATH79_MACH_TL_WA901ND)	+= mach-tl-wa901nd.o
  obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V2)	+= mach-tl-wa901nd-v2.o

+ 2 - 2
target/linux/bcm53xx/patches-4.1/191-usb-xhci-add-Broadcom-specific-fake-doorbell.patch

@@ -74,7 +74,7 @@ Signed-off-by: Hauke Mehrtens <[email protected]>
  /*
   * Set the run bit and wait for the host to be running.
   */
-@@ -556,10 +589,25 @@ int xhci_init(struct usb_hcd *hcd)
+@@ -557,10 +590,25 @@ int xhci_init(struct usb_hcd *hcd)
  
  static int xhci_run_finished(struct xhci_hcd *xhci)
  {
@@ -103,7 +103,7 @@ Signed-off-by: Hauke Mehrtens <[email protected]>
  	xhci->shared_hcd->state = HC_STATE_RUNNING;
  	xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
  
-@@ -569,6 +617,9 @@ static int xhci_run_finished(struct xhci
+@@ -570,6 +618,9 @@ static int xhci_run_finished(struct xhci
  	xhci_dbg_trace(xhci, trace_xhci_dbg_init,
  			"Finished xhci_run for USB3 roothub");
  	return 0;

+ 1 - 1
target/linux/brcm2708/patches-4.1/0001-Main-bcm2708-bcm2709-linux-port.patch

@@ -197,7 +197,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
  config DEBUG_AT91_UART
 --- a/arch/arm/Makefile
 +++ b/arch/arm/Makefile
-@@ -147,6 +147,8 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x003080
+@@ -155,6 +155,8 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x003080
  
  # Machine directory name.  This list is sorted alphanumerically
  # by CONFIG_* macro name.

+ 1 - 1
target/linux/brcm2708/patches-4.1/0011-bcm2708-alsa-sound-driver.patch

@@ -197,7 +197,7 @@ Signed-off-by: Noralf Trønnes <[email protected]>
  		for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
 --- a/sound/arm/Kconfig
 +++ b/sound/arm/Kconfig
-@@ -39,5 +39,13 @@ config SND_PXA2XX_AC97
+@@ -40,5 +40,13 @@ config SND_PXA2XX_AC97
  	  Say Y or M if you want to support any AC97 codec attached to
  	  the PXA2xx AC97 interface.
  

+ 1 - 1
target/linux/brcm2708/patches-4.1/0097-serial-8250-Don-t-crash-when-nr_uarts-is-0.patch

@@ -9,7 +9,7 @@ Subject: [PATCH 097/171] serial: 8250: Don't crash when nr_uarts is 0
 
 --- a/drivers/tty/serial/8250/8250_core.c
 +++ b/drivers/tty/serial/8250/8250_core.c
-@@ -3262,6 +3262,8 @@ static void __init serial8250_isa_init_p
+@@ -3270,6 +3270,8 @@ static void __init serial8250_isa_init_p
  
  	if (nr_uarts > UART_NR)
  		nr_uarts = UART_NR;

+ 1 - 1
target/linux/brcm2708/patches-4.1/0121-spidev-Add-spidev-compatible-string-to-silence-warni.patch

@@ -11,7 +11,7 @@ See: https://github.com/raspberrypi/linux/issues/1054
 
 --- a/drivers/spi/spidev.c
 +++ b/drivers/spi/spidev.c
-@@ -706,6 +706,7 @@ static struct class *spidev_class;
+@@ -707,6 +707,7 @@ static struct class *spidev_class;
  #ifdef CONFIG_OF
  static const struct of_device_id spidev_dt_ids[] = {
  	{ .compatible = "rohm,dh2228fv" },

+ 14 - 16
target/linux/generic/patches-4.1/760-8139cp-fixes-from-4.3.patch

@@ -113,8 +113,6 @@ Date:   Fri Sep 18 00:19:08 2015 +0100
     
     Signed-off-by: David Woodhouse <[email protected]>
     Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
-index d79e33b..686334f 100644
 --- a/drivers/net/ethernet/realtek/8139cp.c
 +++ b/drivers/net/ethernet/realtek/8139cp.c
 @@ -157,6 +157,7 @@ enum {
@@ -133,7 +131,7 @@ index d79e33b..686334f 100644
  
  	unsigned		rx_buf_sz;
  	unsigned		wol_enabled : 1; /* Is Wake-on-LAN enabled? */
-@@ -665,7 +667,7 @@ static void cp_tx (struct cp_private *cp)
+@@ -665,7 +667,7 @@ static void cp_tx (struct cp_private *cp
  		BUG_ON(!skb);
  
  		dma_unmap_single(&cp->pdev->dev, le64_to_cpu(txd->addr),
@@ -142,7 +140,7 @@ index d79e33b..686334f 100644
  				 PCI_DMA_TODEVICE);
  
  		if (status & LastFrag) {
-@@ -733,7 +735,7 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -733,7 +735,7 @@ static netdev_tx_t cp_start_xmit (struct
  {
  	struct cp_private *cp = netdev_priv(dev);
  	unsigned entry;
@@ -151,7 +149,7 @@ index d79e33b..686334f 100644
  	unsigned long intr_flags;
  	__le32 opts2;
  	int mss = 0;
-@@ -753,6 +755,21 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -753,6 +755,21 @@ static netdev_tx_t cp_start_xmit (struct
  	mss = skb_shinfo(skb)->gso_size;
  
  	opts2 = cpu_to_le32(cp_tx_vlan_tag(skb));
@@ -173,7 +171,7 @@ index d79e33b..686334f 100644
  
  	if (skb_shinfo(skb)->nr_frags == 0) {
  		struct cp_desc *txd = &cp->tx_ring[entry];
-@@ -768,31 +785,20 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -768,31 +785,20 @@ static netdev_tx_t cp_start_xmit (struct
  		txd->addr = cpu_to_le64(mapping);
  		wmb();
  
@@ -211,7 +209,7 @@ index d79e33b..686334f 100644
  
  		/* We must give this initial chunk to the device last.
  		 * Otherwise we could race with the device.
-@@ -805,14 +811,14 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -805,14 +811,14 @@ static netdev_tx_t cp_start_xmit (struct
  			goto out_dma_error;
  
  		cp->tx_skb[entry] = skb;
@@ -228,7 +226,7 @@ index d79e33b..686334f 100644
  			len = skb_frag_size(this_frag);
  			mapping = dma_map_single(&cp->pdev->dev,
  						 skb_frag_address(this_frag),
-@@ -824,19 +830,7 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -824,19 +830,7 @@ static netdev_tx_t cp_start_xmit (struct
  
  			eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
  
@@ -249,7 +247,7 @@ index d79e33b..686334f 100644
  
  			if (frag == skb_shinfo(skb)->nr_frags - 1)
  				ctrl |= LastFrag;
-@@ -849,8 +843,8 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -849,8 +843,8 @@ static netdev_tx_t cp_start_xmit (struct
  			txd->opts1 = cpu_to_le32(ctrl);
  			wmb();
  
@@ -259,7 +257,7 @@ index d79e33b..686334f 100644
  		}
  
  		txd = &cp->tx_ring[first_entry];
-@@ -858,27 +852,17 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -858,27 +852,17 @@ static netdev_tx_t cp_start_xmit (struct
  		txd->addr = cpu_to_le64(first_mapping);
  		wmb();
  
@@ -294,7 +292,7 @@ index d79e33b..686334f 100644
  	if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1))
  		netif_stop_queue(dev);
  
-@@ -1115,6 +1099,7 @@ static int cp_init_rings (struct cp_private *cp)
+@@ -1115,6 +1099,7 @@ static int cp_init_rings (struct cp_priv
  {
  	memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
  	cp->tx_ring[CP_TX_RING_SIZE - 1].opts1 = cpu_to_le32(RingEnd);
@@ -302,7 +300,7 @@ index d79e33b..686334f 100644
  
  	cp_init_rings_index(cp);
  
-@@ -1151,7 +1136,7 @@ static void cp_clean_rings (struct cp_private *cp)
+@@ -1151,7 +1136,7 @@ static void cp_clean_rings (struct cp_pr
  			desc = cp->rx_ring + i;
  			dma_unmap_single(&cp->pdev->dev,le64_to_cpu(desc->addr),
  					 cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
@@ -311,7 +309,7 @@ index d79e33b..686334f 100644
  		}
  	}
  
-@@ -1164,7 +1149,7 @@ static void cp_clean_rings (struct cp_private *cp)
+@@ -1164,7 +1149,7 @@ static void cp_clean_rings (struct cp_pr
  					 le32_to_cpu(desc->opts1) & 0xffff,
  					 PCI_DMA_TODEVICE);
  			if (le32_to_cpu(desc->opts1) & LastFrag)
@@ -320,7 +318,7 @@ index d79e33b..686334f 100644
  			cp->dev->stats.tx_dropped++;
  		}
  	}
-@@ -1172,6 +1157,7 @@ static void cp_clean_rings (struct cp_private *cp)
+@@ -1172,6 +1157,7 @@ static void cp_clean_rings (struct cp_pr
  
  	memset(cp->rx_ring, 0, sizeof(struct cp_desc) * CP_RX_RING_SIZE);
  	memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
@@ -328,7 +326,7 @@ index d79e33b..686334f 100644
  
  	memset(cp->rx_skb, 0, sizeof(struct sk_buff *) * CP_RX_RING_SIZE);
  	memset(cp->tx_skb, 0, sizeof(struct sk_buff *) * CP_TX_RING_SIZE);
-@@ -1249,7 +1235,7 @@ static void cp_tx_timeout(struct net_device *dev)
+@@ -1249,7 +1235,7 @@ static void cp_tx_timeout(struct net_dev
  {
  	struct cp_private *cp = netdev_priv(dev);
  	unsigned long flags;
@@ -337,7 +335,7 @@ index d79e33b..686334f 100644
  
  	netdev_warn(dev, "Transmit timeout, status %2x %4x %4x %4x\n",
  		    cpr8(Cmd), cpr16(CpCmd),
-@@ -1257,13 +1243,26 @@ static void cp_tx_timeout(struct net_device *dev)
+@@ -1257,13 +1243,26 @@ static void cp_tx_timeout(struct net_dev
  
  	spin_lock_irqsave(&cp->lock, flags);
  

+ 4 - 6
target/linux/generic/patches-4.1/761-8139cp-fixes-from-4.4.patch

@@ -33,8 +33,6 @@ Date:   Wed Sep 23 09:46:09 2015 +0100
     
     Signed-off-by: David Woodhouse <[email protected]>
     Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
-index 686334f..deae10d 100644
 --- a/drivers/net/ethernet/realtek/8139cp.c
 +++ b/drivers/net/ethernet/realtek/8139cp.c
 @@ -175,7 +175,7 @@ enum {
@@ -46,7 +44,7 @@ index 686334f..deae10d 100644
  	TxError		= (1 << 23), /* Tx error summary */
  	RxError		= (1 << 20), /* Rx error summary */
  	IPCS		= (1 << 18), /* Calculate IP checksum */
-@@ -754,10 +754,16 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+@@ -754,10 +754,16 @@ static netdev_tx_t cp_start_xmit (struct
  	eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
  	mss = skb_shinfo(skb)->gso_size;
  
@@ -64,7 +62,7 @@ index 686334f..deae10d 100644
  	else if (skb->ip_summed == CHECKSUM_PARTIAL) {
  		const struct iphdr *ip = ip_hdr(skb);
  		if (ip->protocol == IPPROTO_TCP)
-@@ -1852,6 +1858,15 @@ static void cp_set_d3_state (struct cp_private *cp)
+@@ -1852,6 +1858,15 @@ static void cp_set_d3_state (struct cp_p
  	pci_set_power_state (cp->pdev, PCI_D3hot);
  }
  
@@ -80,7 +78,7 @@ index 686334f..deae10d 100644
  static const struct net_device_ops cp_netdev_ops = {
  	.ndo_open		= cp_open,
  	.ndo_stop		= cp_close,
-@@ -1864,6 +1879,7 @@ static const struct net_device_ops cp_netdev_ops = {
+@@ -1864,6 +1879,7 @@ static const struct net_device_ops cp_ne
  	.ndo_tx_timeout		= cp_tx_timeout,
  	.ndo_set_features	= cp_set_features,
  	.ndo_change_mtu		= cp_change_mtu,
@@ -88,7 +86,7 @@ index 686334f..deae10d 100644
  
  #ifdef CONFIG_NET_POLL_CONTROLLER
  	.ndo_poll_controller	= cp_poll_controller,
-@@ -1983,12 +1999,12 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
+@@ -1983,12 +1999,12 @@ static int cp_init_one (struct pci_dev *
  	dev->ethtool_ops = &cp_ethtool_ops;
  	dev->watchdog_timeo = TX_TIMEOUT;
  

+ 3 - 3
target/linux/generic/patches-4.1/810-pci_disable_common_quirks.patch

@@ -23,7 +23,7 @@
  /* The Mellanox Tavor device gives false positive parity errors
   * Mark this device with a broken_parity_status, to allow
   * PCI scanning code to "skip" this now blacklisted device.
-@@ -2949,6 +2950,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
+@@ -2965,6 +2966,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
  
@@ -31,7 +31,7 @@
  
  /*
   * Ivytown NTB BAR sizes are misreported by the hardware due to an erratum.  To
-@@ -3005,6 +3007,8 @@ static void fixup_debug_report(struct pc
+@@ -3021,6 +3023,8 @@ static void fixup_debug_report(struct pc
  	}
  }
  
@@ -40,7 +40,7 @@
  /*
   * Some BIOS implementations leave the Intel GPU interrupts enabled,
   * even though no one is handling them (f.e. i915 driver is never loaded).
-@@ -3039,6 +3043,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
+@@ -3055,6 +3059,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq);
  

+ 5 - 5
target/linux/generic/patches-4.1/902-debloat_proc.patch

@@ -79,17 +79,17 @@
  }
 --- a/kernel/irq/proc.c
 +++ b/kernel/irq/proc.c
-@@ -325,6 +325,9 @@ void register_irq_proc(unsigned int irq,
- {
+@@ -327,6 +327,9 @@ void register_irq_proc(unsigned int irq,
+ 	static DEFINE_MUTEX(register_lock);
  	char name [MAX_NAMELEN];
  
 +	if (IS_ENABLED(CONFIG_PROC_STRIPPED) && !IS_ENABLED(CONFIG_SMP))
 +		return;
 +
- 	if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip) || desc->dir)
+ 	if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip))
  		return;
  
-@@ -361,6 +364,9 @@ void unregister_irq_proc(unsigned int ir
+@@ -376,6 +379,9 @@ void unregister_irq_proc(unsigned int ir
  {
  	char name [MAX_NAMELEN];
  
@@ -99,7 +99,7 @@
  	if (!root_irq_dir || !desc->dir)
  		return;
  #ifdef CONFIG_SMP
-@@ -396,6 +402,9 @@ void init_irq_proc(void)
+@@ -411,6 +417,9 @@ void init_irq_proc(void)
  	unsigned int irq;
  	struct irq_desc *desc;
  

+ 2 - 2
target/linux/generic/patches-4.1/903-debloat_direct_io.patch

@@ -26,7 +26,7 @@
  endif
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2649,6 +2649,7 @@ enum {
+@@ -2647,6 +2647,7 @@ enum {
  	DIO_SKIP_DIO_COUNT = 0x08,
  };
  
@@ -34,7 +34,7 @@
  void dio_end_io(struct bio *bio, int error);
  
  ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
-@@ -2656,6 +2657,18 @@ ssize_t __blockdev_direct_IO(struct kioc
+@@ -2654,6 +2655,18 @@ ssize_t __blockdev_direct_IO(struct kioc
  			     loff_t offset, get_block_t get_block,
  			     dio_iodone_t end_io, dio_submit_t submit_io,
  			     int flags);

+ 1 - 1
target/linux/ipq806x/patches-4.1/300-arch-arm-force-ZRELADDR-on-arch-qcom.patch

@@ -44,7 +44,7 @@ Signed-off-by: Mathieu Olivari <[email protected]>
  	select GENERIC_CLOCKEVENTS
 --- a/arch/arm/Makefile
 +++ b/arch/arm/Makefile
-@@ -240,9 +240,11 @@ MACHINE  := arch/arm/mach-$(word 1,$(mac
+@@ -248,9 +248,11 @@ MACHINE  := arch/arm/mach-$(word 1,$(mac
  else
  MACHINE  :=
  endif

+ 7 - 7
target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch

@@ -1,6 +1,6 @@
 --- a/drivers/tty/serial/8250/8250_core.c
 +++ b/drivers/tty/serial/8250/8250_core.c
-@@ -438,6 +438,20 @@ static void mem_serial_out(struct uart_p
+@@ -446,6 +446,20 @@ static void mem_serial_out(struct uart_p
  	writeb(value, p->membase + offset);
  }
  
@@ -21,7 +21,7 @@
  static void mem32_serial_out(struct uart_port *p, int offset, int value)
  {
  	offset = offset << p->regshift;
-@@ -505,6 +519,11 @@ static void set_io_from_upio(struct uart
+@@ -513,6 +527,11 @@ static void set_io_from_upio(struct uart
  		p->serial_out = mem32be_serial_out;
  		break;
  
@@ -33,7 +33,7 @@
  #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
  	case UPIO_AU:
  		p->serial_in = au_serial_in;
-@@ -531,6 +550,7 @@ serial_port_out_sync(struct uart_port *p
+@@ -539,6 +558,7 @@ serial_port_out_sync(struct uart_port *p
  	case UPIO_MEM:
  	case UPIO_MEM32:
  	case UPIO_MEM32BE:
@@ -41,7 +41,7 @@
  	case UPIO_AU:
  		p->serial_out(p, offset, value);
  		p->serial_in(p, UART_LCR);	/* safe, no side-effects */
-@@ -2768,6 +2788,7 @@ static int serial8250_request_std_resour
+@@ -2776,6 +2796,7 @@ static int serial8250_request_std_resour
  	case UPIO_MEM32:
  	case UPIO_MEM32BE:
  	case UPIO_MEM:
@@ -49,7 +49,7 @@
  		if (!port->mapbase)
  			break;
  
-@@ -2805,6 +2826,7 @@ static void serial8250_release_std_resou
+@@ -2813,6 +2834,7 @@ static void serial8250_release_std_resou
  	case UPIO_MEM32:
  	case UPIO_MEM32BE:
  	case UPIO_MEM:
@@ -57,7 +57,7 @@
  		if (!port->mapbase)
  			break;
  
-@@ -3693,6 +3715,7 @@ static int serial8250_probe(struct platf
+@@ -3701,6 +3723,7 @@ static int serial8250_probe(struct platf
  		uart.port.set_termios	= p->set_termios;
  		uart.port.pm		= p->pm;
  		uart.port.dev		= &dev->dev;
@@ -65,7 +65,7 @@
  		uart.port.irqflags	|= irqflag;
  		ret = serial8250_register_8250_port(&uart);
  		if (ret < 0) {
-@@ -3849,6 +3872,7 @@ int serial8250_register_8250_port(struct
+@@ -3857,6 +3880,7 @@ int serial8250_register_8250_port(struct
  		uart->bugs		= up->bugs;
  		uart->port.mapbase      = up->port.mapbase;
  		uart->port.mapsize      = up->port.mapsize;

+ 2 - 2
target/linux/lantiq/patches-4.1/0033-SPI-MIPS-lantiq-adds-spi-xway.patch

@@ -18,7 +18,7 @@ Signed-off-by: John Crispin <[email protected]>
 
 --- a/drivers/spi/Kconfig
 +++ b/drivers/spi/Kconfig
-@@ -626,6 +626,14 @@
+@@ -626,6 +626,14 @@ config SPI_NUC900
  	help
  	  SPI driver for Nuvoton NUC900 series ARM SoCs
  
@@ -35,7 +35,7 @@ Signed-off-by: John Crispin <[email protected]>
  #
 --- a/drivers/spi/Makefile
 +++ b/drivers/spi/Makefile
-@@ -90,3 +90,4 @@
+@@ -90,3 +90,4 @@ obj-$(CONFIG_SPI_TXX9)			+= spi-txx9.o
  obj-$(CONFIG_SPI_XCOMM)		+= spi-xcomm.o
  obj-$(CONFIG_SPI_XILINX)		+= spi-xilinx.o
  obj-$(CONFIG_SPI_XTENSA_XTFPGA)		+= spi-xtensa-xtfpga.o

+ 1 - 1
target/linux/oxnas/patches-4.1/300-introduce-oxnas-platform.patch

@@ -30,7 +30,7 @@
  source "arch/arm/mach-pxa/Kconfig"
 --- a/arch/arm/Makefile
 +++ b/arch/arm/Makefile
-@@ -187,6 +187,7 @@ machine-$(CONFIG_ARCH_NSPIRE)		+= nspire
+@@ -195,6 +195,7 @@ machine-$(CONFIG_ARCH_NSPIRE)		+= nspire
  machine-$(CONFIG_ARCH_OMAP1)		+= omap1
  machine-$(CONFIG_ARCH_OMAP2PLUS)	+= omap2
  machine-$(CONFIG_ARCH_ORION5X)		+= orion5x

+ 8 - 8
target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch

@@ -24,7 +24,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -202,6 +202,23 @@ struct sunxi_nand_hw_ecc {
+@@ -206,6 +206,23 @@ struct sunxi_nand_hw_ecc {
  };
  
  /*
@@ -48,7 +48,7 @@ Signed-off-by: Hans de Goede <[email protected]>
   * NAND chip structure: stores NAND chip device related information
   *
   * @node:		used to store NAND chips into a list
-@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -525,7 +542,7 @@ static int sunxi_nfc_hw_ecc_read_page(st
  				      int oob_required, int page)
  {
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -57,7 +57,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	struct nand_ecclayout *layout = ecc->layout;
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
  	unsigned int max_bitflips = 0;
-@@ -607,7 +624,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -611,7 +628,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
  				       const uint8_t *buf, int oob_required)
  {
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -66,7 +66,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	struct nand_ecclayout *layout = ecc->layout;
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
  	int offset;
-@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
+@@ -679,7 +696,7 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  					       int page)
  {
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -75,7 +75,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
  	unsigned int max_bitflips = 0;
  	uint8_t *oob = chip->oob_poi;
-@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -747,7 +764,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  						int oob_required)
  {
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -84,7 +84,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
  	uint8_t *oob = chip->oob_poi;
  	int offset = 0;
-@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mt
+@@ -1091,8 +1108,13 @@ static int sunxi_nand_ecc_init(struct mt
  		ecc->strength = nand->ecc_strength_ds;
  	}
  
@@ -100,7 +100,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
  	ecc->mode = NAND_ECC_HW;
  
-@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mt
+@@ -1127,12 +1149,39 @@ static int sunxi_nand_ecc_init(struct mt
  	return 0;
  }
  
@@ -141,7 +141,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	struct mtd_info *mtd;
  	struct nand_chip *nand;
  	int nsels;
-@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct d
+@@ -1261,8 +1310,14 @@ static int sunxi_nand_chip_init(struct d
  		return ret;
  	}
  

+ 37 - 41
target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch

@@ -13,7 +13,7 @@ Signed-off-by: Hans de Goede <[email protected]>
 
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -206,10 +206,12 @@ struct sunxi_nand_hw_ecc {
+@@ -210,10 +210,12 @@ struct sunxi_nand_hw_ecc {
   *
   * @part: base paritition structure
   * @ecc: per-partition ECC info
@@ -26,7 +26,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  };
  
  static inline struct sunxi_nand_part *
-@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *par
+@@ -223,6 +225,29 @@ to_sunxi_nand_part(struct nand_part *par
  }
  
  /*
@@ -56,7 +56,7 @@ Signed-off-by: Hans de Goede <[email protected]>
   * NAND chip structure: stores NAND chip device related information
   *
   * @node:		used to store NAND chips into a list
-@@ -233,6 +258,7 @@ struct sunxi_nand_chip {
+@@ -237,6 +262,7 @@ struct sunxi_nand_chip {
  	struct list_head node;
  	struct nand_chip nand;
  	struct mtd_info mtd;
@@ -64,7 +64,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	unsigned long clk_rate;
  	int selected;
  	int nsels;
-@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct m
+@@ -493,6 +519,185 @@ static void sunxi_nfc_write_buf(struct m
  	}
  }
  
@@ -250,7 +250,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  static uint8_t sunxi_nfc_read_byte(struct mtd_info *mtd)
  {
  	uint8_t ret;
-@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -542,16 +747,43 @@ static int sunxi_nfc_hw_ecc_read_page(st
  				      int oob_required, int page)
  {
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -294,7 +294,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  	tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE);
  	tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) |
-@@ -556,12 +788,15 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -560,12 +792,15 @@ static int sunxi_nfc_hw_ecc_read_page(st
  	writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
  	for (i = 0; i < ecc->steps; i++) {
@@ -311,7 +311,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
  		chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
  
-@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -573,6 +808,25 @@ static int sunxi_nfc_hw_ecc_read_page(st
  		if (ret)
  			return ret;
  
@@ -337,7 +337,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30);
  		writel(tmp, nfc->regs + NFC_REG_CMD);
  
-@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -583,6 +837,9 @@ static int sunxi_nfc_hw_ecc_read_page(st
  		memcpy_fromio(buf + (i * ecc->size),
  			      nfc->regs + NFC_RAM0_BASE, ecc->size);
  
@@ -347,7 +347,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) {
  			mtd->ecc_stats.failed++;
  		} else {
-@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -598,9 +855,10 @@ static int sunxi_nfc_hw_ecc_read_page(st
  			if (ret)
  				return ret;
  
@@ -360,7 +360,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		}
  	}
  
-@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(st
+@@ -610,11 +868,14 @@ static int sunxi_nfc_hw_ecc_read_page(st
  			offset = mtd->writesize +
  				 ecc->layout->oobfree[ecc->steps].offset;
  			chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -376,7 +376,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  	tmp &= ~NFC_ECC_EN;
  
-@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -631,6 +892,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
  	struct nand_ecc_ctrl *ecc = chip->cur_ecc;
  	struct nand_ecclayout *layout = ecc->layout;
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
@@ -384,7 +384,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	int offset;
  	int ret;
  	u32 tmp;
-@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -645,17 +907,57 @@ static int sunxi_nfc_hw_ecc_write_page(s
  	writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
  	for (i = 0; i < ecc->steps; i++) {
@@ -401,10 +401,9 @@ Signed-off-by: Hans de Goede <[email protected]>
  		offset = layout->eccpos[i * ecc->bytes] - 4 + mtd->writesize;
  
  		/* Fill OOB data in */
--		if (oob_required) {
--			tmp = 0xffffffff;
--			memcpy_toio(nfc->regs + NFC_REG_USER_DATA_BASE, &tmp,
--				    4);
+-		writel(NFC_BUF_TO_USER_DATA(chip->oob_poi +
+-					    layout->oobfree[i].offset),
+-		       nfc->regs + NFC_REG_USER_DATA_BASE);
 +		if (!oob_required)
 +			memset(oob_buf, 0xff, 4);
 +		else
@@ -421,10 +420,7 @@ Signed-off-by: Hans de Goede <[email protected]>
 +			    nand_rnd_is_activ(mtd, -1, offset, &cnt) > 0 &&
 +			    cnt == ecc->bytes + 4)
 +				rndactiv = true;
- 		} else {
--			memcpy_toio(nfc->regs + NFC_REG_USER_DATA_BASE,
--				    chip->oob_poi + offset - mtd->writesize,
--				    4);
++		} else {
 +			cnt = ecc->bytes + 2;
 +			if (rnd &&
 +			    nand_rnd_is_activ(mtd, -1, offset + 2, &cnt) > 0 &&
@@ -446,10 +442,11 @@ Signed-off-by: Hans de Goede <[email protected]>
 +			tmp &= ~(NFC_RANDOM_DIRECTION | NFC_ECC_EXCEPTION);
 +			tmp |= NFC_RANDOM_EN;
 +			writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
- 		}
++		}
  
  		chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
-@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(s
+ 
+@@ -669,6 +971,9 @@ static int sunxi_nfc_hw_ecc_write_page(s
  		ret = sunxi_nfc_wait_int(nfc, NFC_CMD_INT_FLAG, 0);
  		if (ret)
  			return ret;
@@ -459,7 +456,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	}
  
  	if (oob_required) {
-@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -677,11 +982,14 @@ static int sunxi_nfc_hw_ecc_write_page(s
  			offset = mtd->writesize +
  				 ecc->layout->oobfree[i].offset;
  			chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
@@ -475,7 +472,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  	tmp &= ~NFC_ECC_EN;
  
-@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -690,22 +998,76 @@ static int sunxi_nfc_hw_ecc_write_page(s
  	return 0;
  }
  
@@ -552,7 +549,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  	tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE);
  	tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) |
-@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
+@@ -714,7 +1076,17 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  	writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
  	for (i = 0; i < ecc->steps; i++) {
@@ -571,7 +568,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
  		tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30);
  		writel(tmp, nfc->regs + NFC_REG_CMD);
-@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
+@@ -727,6 +1099,9 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  		buf += ecc->size;
  		offset += ecc->size;
  
@@ -581,7 +578,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) {
  			mtd->ecc_stats.failed++;
  		} else {
-@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
+@@ -737,7 +1112,8 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  
  		if (oob_required) {
  			chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -591,7 +588,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  			oob += ecc->bytes + ecc->prepad;
  		}
  
-@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
+@@ -748,10 +1124,13 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  		cnt = mtd->oobsize - (oob - chip->oob_poi);
  		if (cnt > 0) {
  			chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -606,7 +603,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	writel(readl(nfc->regs + NFC_REG_ECC_CTL) & ~NFC_ECC_EN,
  	       nfc->regs + NFC_REG_ECC_CTL);
  
-@@ -768,6 +1141,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -766,6 +1145,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  	struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
  	struct nand_ecc_ctrl *ecc = chip->cur_ecc;
  	struct sunxi_nand_hw_ecc *data = ecc->priv;
@@ -614,7 +611,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  	uint8_t *oob = chip->oob_poi;
  	int offset = 0;
  	int ret;
-@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -781,13 +1161,24 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  	writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
  	for (i = 0; i < ecc->steps; i++) {
@@ -624,9 +621,8 @@ Signed-off-by: Hans de Goede <[email protected]>
  		offset += ecc->size;
  
  		/* Fill OOB data in */
-@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
- 				    4);
- 		}
+ 		writel(NFC_BUF_TO_USER_DATA(oob),
+ 		       nfc->regs + NFC_REG_USER_DATA_BASE);
  
 +		cnt = ecc->bytes + 4;
 +		if (rnd &&
@@ -641,7 +637,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | NFC_ACCESS_DIR |
  		      (1 << 30);
  		writel(tmp, nfc->regs + NFC_REG_CMD);
-@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -796,6 +1187,9 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  		if (ret)
  			return ret;
  
@@ -651,7 +647,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  		offset += ecc->bytes + ecc->prepad;
  		oob += ecc->bytes + ecc->prepad;
  	}
-@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -804,9 +1198,11 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  		cnt = mtd->oobsize - (oob - chip->oob_poi);
  		if (cnt > 0) {
  			chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
@@ -664,7 +660,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
  	tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  	tmp &= ~NFC_ECC_EN;
-@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
+@@ -816,6 +1212,128 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
  	return 0;
  }
  
@@ -793,7 +789,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip,
  				       const struct nand_sdr_timings *timings)
  {
-@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ct
+@@ -1076,6 +1594,40 @@ static int sunxi_nand_hw_syndrome_ecc_ct
  	return 0;
  }
  
@@ -834,7 +830,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  static void sunxi_nand_ecc_cleanup(struct nand_ecc_ctrl *ecc)
  {
  	switch (ecc->mode) {
-@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse
+@@ -1167,7 +1719,14 @@ struct nand_part *sunxi_ofnandpart_parse
  	if (ret)
  		goto err;
  
@@ -849,7 +845,7 @@ Signed-off-by: Hans de Goede <[email protected]>
  
  	return &part->part;
  
-@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct d
+@@ -1292,18 +1851,30 @@ static int sunxi_nand_chip_init(struct d
  	if (ret)
  		return ret;
  
@@ -880,10 +876,10 @@ Signed-off-by: Hans de Goede <[email protected]>
  	ret = nand_scan_tail(mtd);
  	if (ret) {
  		dev_err(dev, "nand_scan_tail failed: %d\n", ret);
-@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(str
- 					node);
+@@ -1360,6 +1931,8 @@ static void sunxi_nand_chips_cleanup(str
  		nand_release(&chip->mtd);
  		sunxi_nand_ecc_cleanup(&chip->nand.ecc);
+ 		list_del(&chip->node);
 +		sunxi_nand_rnd_cleanup(&chip->nand.rnd);
 +		kfree(chip->buffer);
  	}

+ 1 - 1
target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch

@@ -15,7 +15,7 @@ Signed-off-by: Hans de Goede <[email protected]>
 
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(stru
+@@ -1709,28 +1709,37 @@ static void sunxi_nand_part_release(stru
  struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
  					 struct device_node *pp)
  {

+ 1 - 1
target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch

@@ -16,7 +16,7 @@ Signed-off-by: Hans de Goede <[email protected]>
 
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1853,6 +1853,15 @@ static int sunxi_nand_chip_init(struct d
+@@ -1851,6 +1851,15 @@ static int sunxi_nand_chip_init(struct d
  	if (of_get_nand_on_flash_bbt(np))
  		nand->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
  

+ 2 - 2
target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch

@@ -23,7 +23,7 @@
  
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1427,7 +1427,7 @@ static int sunxi_nand_chip_init_timings(
+@@ -1425,7 +1425,7 @@ static int sunxi_nand_chip_init_timings(
  
  	mode = onfi_get_async_timing_mode(&chip->nand);
  	if (mode == ONFI_TIMING_MODE_UNKNOWN) {
@@ -32,7 +32,7 @@
  	} else {
  		uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {};
  
-@@ -1441,9 +1441,10 @@ static int sunxi_nand_chip_init_timings(
+@@ -1439,9 +1439,10 @@ static int sunxi_nand_chip_init_timings(
  						feature);
  		if (ret)
  			return ret;

+ 4 - 22
target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch

@@ -15,7 +15,7 @@ Signed-off-by: Boris Brezillon <[email protected]>
 
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -908,7 +908,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
  
  	for (i = 0; i < ecc->steps; i++) {
  		bool rndactiv = false;
@@ -24,7 +24,7 @@ Signed-off-by: Boris Brezillon <[email protected]>
  
  		if (i)
  			chip->cmdfunc(mtd, NAND_CMD_RNDIN, i * ecc->size, -1);
-@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -919,15 +919,13 @@ static int sunxi_nfc_hw_ecc_write_page(s
  		offset = layout->eccpos[i * ecc->bytes] - 4 + mtd->writesize;
  
  		/* Fill OOB data in */
@@ -47,7 +47,7 @@ Signed-off-by: Boris Brezillon <[email protected]>
  
  		if (i) {
  			cnt = ecc->bytes + 4;
-@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -946,12 +944,16 @@ static int sunxi_nfc_hw_ecc_write_page(s
  		if (rndactiv) {
  			/* pre randomize to generate FF patterns on the NAND */
  			if (!i) {
@@ -67,7 +67,7 @@ Signed-off-by: Boris Brezillon <[email protected]>
  			}
  			tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
  			tmp &= ~(NFC_RANDOM_DIRECTION | NFC_ECC_EXCEPTION);
-@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(s
+@@ -959,6 +961,8 @@ static int sunxi_nfc_hw_ecc_write_page(s
  			writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  		}
  
@@ -76,21 +76,3 @@ Signed-off-by: Boris Brezillon <[email protected]>
  		chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
  
  		ret = sunxi_nfc_wait_cmd_fifo_empty(nfc);
-@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
- 		/* Fill OOB data in */
- 		if (oob_required) {
- 			tmp = 0xffffffff;
--			memcpy_toio(nfc->regs + NFC_REG_USER_DATA_BASE, &tmp,
--				    4);
- 		} else {
--			memcpy_toio(nfc->regs + NFC_REG_USER_DATA_BASE, oob,
--				    4);
-+			memcpy(&tmp, oob, sizeof(tmp));
-+			tmp = le32_to_cpu(tmp);
- 		}
- 
-+		writel(tmp, nfc->regs + NFC_REG_USER_DATA_BASE);
-+
- 		cnt = ecc->bytes + 4;
- 		if (rnd &&
- 		    nand_rnd_is_activ(mtd, rnd->page, offset, &cnt) > 0 &&