aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Gorski <jogo@openwrt.org>2015-08-14 13:06:33 +0000
committerJonas Gorski <jogo@openwrt.org>2015-08-14 13:06:33 +0000
commit6be2305da83471c442dab83366c25be4dfb38793 (patch)
tree30cfe6f3fc964dca1936646468c87367b509e929
parent8e69c9f7ef2e1ca40b33a4a33c76b460c1f62861 (diff)
downloadupstream-6be2305da83471c442dab83366c25be4dfb38793.tar.gz
upstream-6be2305da83471c442dab83366c25be4dfb38793.tar.bz2
upstream-6be2305da83471c442dab83366c25be4dfb38793.zip
kernel: update 4.1 to 4.1.5
Changelog: * https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.5 Signed-off-by: Jonas Gorski <jogo@openwrt.org> SVN-Revision: 46598
-rw-r--r--include/kernel-version.mk4
-rw-r--r--target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch18
-rw-r--r--target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch4
-rw-r--r--target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch2
-rw-r--r--target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch6
-rw-r--r--target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch6
-rw-r--r--target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch4
-rw-r--r--target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch2
-rw-r--r--target/linux/generic/patches-4.1/304-mips_disable_fpu.patch2
-rw-r--r--target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch20
-rw-r--r--target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch55
-rw-r--r--target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch10
-rw-r--r--target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch20
-rw-r--r--target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch106
-rw-r--r--target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch7
-rw-r--r--target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch14
-rw-r--r--target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch84
-rw-r--r--target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch14
-rw-r--r--target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch6
-rw-r--r--target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch13
-rw-r--r--target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch2
-rw-r--r--target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch10
-rw-r--r--target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch18
-rw-r--r--target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch56
-rw-r--r--target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch15
-rw-r--r--target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch16
-rw-r--r--target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch28
-rw-r--r--target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch16
-rw-r--r--target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch11
-rw-r--r--target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch5
-rw-r--r--target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch5
-rw-r--r--target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch5
-rw-r--r--target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch13
-rw-r--r--target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch6
-rw-r--r--target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch7
-rw-r--r--target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/170-musb-add-driver.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch20
-rw-r--r--target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch8
-rw-r--r--target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch4
-rw-r--r--target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch23
-rw-r--r--target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch12
-rw-r--r--target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch6
-rw-r--r--target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch10
74 files changed, 332 insertions, 585 deletions
diff --git a/include/kernel-version.mk b/include/kernel-version.mk
index 8937cd0db8..6fd138911c 100644
--- a/include/kernel-version.mk
+++ b/include/kernel-version.mk
@@ -4,11 +4,11 @@ LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .20
LINUX_VERSION-4.0 = .9
-LINUX_VERSION-4.1 = .4
+LINUX_VERSION-4.1 = .5
LINUX_KERNEL_MD5SUM-3.18.20 = 952c9159acdf4efbc96e08a27109d994
LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b
-LINUX_KERNEL_MD5SUM-4.1.4 = 32cb4dd9f14d37bf71bafa6ed368f769
+LINUX_KERNEL_MD5SUM-4.1.5 = f23e1d4ce8f63e46db81d56e36281885
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
diff --git a/target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch b/target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch
index a80c8f4a1f..db847bde78 100644
--- a/target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch
+++ b/target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch
@@ -268,9 +268,9 @@
#endif
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
-@@ -38,6 +38,9 @@
- #include <asm/traps.h>
+@@ -39,6 +39,9 @@
#include <asm/dma-coherence.h>
+ #include <asm/mips-cm.h>
+/* For enabling BCM4710 cache workarounds */
+int bcm4710 = 0;
@@ -278,7 +278,7 @@
/*
* Special Variant of smp_call_function for use by cache functions:
*
-@@ -149,6 +152,9 @@ static void r4k_blast_dcache_user_page_s
+@@ -157,6 +160,9 @@ static void r4k_blast_dcache_user_page_s
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -288,7 +288,7 @@
if (dc_lsize == 0)
r4k_blast_dcache_user_page = (void *)cache_noop;
else if (dc_lsize == 16)
-@@ -167,6 +173,9 @@ static void r4k_blast_dcache_page_indexe
+@@ -175,6 +181,9 @@ static void r4k_blast_dcache_page_indexe
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -298,7 +298,7 @@
if (dc_lsize == 0)
r4k_blast_dcache_page_indexed = (void *)cache_noop;
else if (dc_lsize == 16)
-@@ -186,6 +195,9 @@ static void r4k_blast_dcache_setup(void)
+@@ -194,6 +203,9 @@ static void r4k_blast_dcache_setup(void)
{
unsigned long dc_lsize = cpu_dcache_line_size();
@@ -308,7 +308,7 @@
if (dc_lsize == 0)
r4k_blast_dcache = (void *)cache_noop;
else if (dc_lsize == 16)
-@@ -785,6 +797,8 @@ static void local_r4k_flush_cache_sigtra
+@@ -793,6 +805,8 @@ static void local_r4k_flush_cache_sigtra
unsigned long addr = (unsigned long) arg;
R4600_HIT_CACHEOP_WAR_IMPL;
@@ -317,7 +317,7 @@
if (dc_lsize)
protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
if (!cpu_icache_snoops_remote_store && scache_size)
-@@ -1591,6 +1605,17 @@ static void coherency_setup(void)
+@@ -1599,6 +1613,17 @@ static void coherency_setup(void)
* silly idea of putting something else there ...
*/
switch (current_cpu_type()) {
@@ -335,7 +335,7 @@
case CPU_R4000PC:
case CPU_R4000SC:
case CPU_R4000MC:
-@@ -1637,6 +1662,15 @@ void r4k_cache_init(void)
+@@ -1645,6 +1670,15 @@ void r4k_cache_init(void)
extern void build_copy_page(void);
struct cpuinfo_mips *c = &current_cpu_data;
@@ -351,7 +351,7 @@
probe_pcache();
setup_scache();
-@@ -1706,7 +1740,15 @@ void r4k_cache_init(void)
+@@ -1714,7 +1748,15 @@ void r4k_cache_init(void)
*/
local_r4k___flush_cache_all(NULL);
diff --git a/target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch b/target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch
index a78bfe85ff..2df8f0481b 100644
--- a/target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch
+++ b/target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch
@@ -21,7 +21,7 @@
#endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
-@@ -592,7 +592,7 @@ static inline void local_r4k_flush_cache
+@@ -600,7 +600,7 @@ static inline void local_r4k_flush_cache
*/
map_coherent = (cpu_has_dc_aliases &&
page_mapped(page) && !Page_dcache_dirty(page));
@@ -30,7 +30,7 @@
vaddr = kmap_coherent(page, addr);
else
vaddr = kmap_atomic(page);
-@@ -617,7 +617,7 @@ static inline void local_r4k_flush_cache
+@@ -625,7 +625,7 @@ static inline void local_r4k_flush_cache
}
if (vaddr) {
diff --git a/target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch b/target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch
index 4154fd3bb4..fa7732b1a4 100644
--- a/target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch
+++ b/target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch
@@ -33,7 +33,7 @@ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2702,6 +2702,33 @@ config BOOT_RAW
+@@ -2703,6 +2703,33 @@ config BOOT_RAW
diff --git a/target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch b/target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch
index 9f61050088..c974484b98 100644
--- a/target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch
+++ b/target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch
@@ -28,9 +28,6 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
1 file changed, 10 deletions(-)
delete mode 100644 arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
-diff --git a/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h b/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
-deleted file mode 100644
-index 11d3b57..0000000
--- a/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
+++ /dev/null
@@ -1,10 +0,0 @@
@@ -44,6 +41,3 @@ index 11d3b57..0000000
-#include <asm/mach-generic/dma-coherence.h>
-
-#endif /* __ASM_MACH_BCM63XX_DMA_COHERENCE_H */
---
-2.1.4
-
diff --git a/target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch b/target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch
index 7b8b727803..f4e0fbf4c1 100644
--- a/target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch
+++ b/target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -225,6 +225,46 @@ static struct board_info __initdata board_dsl_2751b_d1 = {
+@@ -225,6 +225,46 @@ static struct board_info __initdata boar
.num_board_fixups = ARRAY_SIZE(dsl2751b_e1_fixups),
},
};
@@ -47,7 +47,7 @@
#endif /* CONFIG_BCM63XX_CPU_6318 */
/*
-@@ -2352,6 +2392,7 @@ static const struct board_info __initconst *bcm963xx_boards[] = {
+@@ -2352,6 +2392,7 @@ static const struct board_info __initcon
&board_96318ref,
&board_96318ref_p300,
&board_dsl_2751b_d1,
@@ -55,7 +55,7 @@
#endif
#ifdef CONFIG_BCM63XX_CPU_6328
&board_96328avng,
-@@ -2449,6 +2490,7 @@ static struct of_device_id const bcm963xx_boards_dt[] = {
+@@ -2449,6 +2490,7 @@ static struct of_device_id const bcm963x
{ .compatible = "brcm,bcm96318ref", .data = &board_96318ref, },
{ .compatible = "brcm,bcm96318ref_p300", .data = &board_96318ref_p300, },
{ .compatible = "d-link,dsl-275xb-d", .data = &board_dsl_2751b_d1, },
diff --git a/target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch b/target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch
index 199cd0135e..f7543cca73 100644
--- a/target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch
+++ b/target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -1570,6 +1570,7 @@ config CPU_CAVIUM_OCTEON
+@@ -1571,6 +1571,7 @@ config CPU_CAVIUM_OCTEON
select CPU_SUPPORTS_HUGEPAGES
select USB_EHCI_BIG_ENDIAN_MMIO
select MIPS_L1_CACHE_SHIFT_7
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
help
The Cavium Octeon processor is a highly integrated chip containing
many ethernet hardware widgets for networking tasks. The processor
-@@ -1865,6 +1866,9 @@ config MIPS_MALTA_PM
+@@ -1866,6 +1867,9 @@ config MIPS_MALTA_PM
bool
default y
diff --git a/target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch b/target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch
index 54f7eb8d1b..49f2ded56c 100644
--- a/target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch
+++ b/target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch
@@ -18,7 +18,7 @@ Acked-by: Rob Landley <rob@landley.net>
config CEVT_BCM1480
bool
-@@ -2675,6 +2672,18 @@ config USE_OF
+@@ -2676,6 +2673,18 @@ config USE_OF
config BUILTIN_DTB
bool
diff --git a/target/linux/generic/patches-4.1/304-mips_disable_fpu.patch b/target/linux/generic/patches-4.1/304-mips_disable_fpu.patch
index e07135b075..3288d19d8e 100644
--- a/target/linux/generic/patches-4.1/304-mips_disable_fpu.patch
+++ b/target/linux/generic/patches-4.1/304-mips_disable_fpu.patch
@@ -26,7 +26,7 @@ v2: incorporated changes suggested by Jonas Gorski
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2667,6 +2667,20 @@ config MIPS_O32_FP64_SUPPORT
+@@ -2668,6 +2668,20 @@ config MIPS_O32_FP64_SUPPORT
If unsure, say N.
diff --git a/target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch b/target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch
index ec226a9c2a..e44740d6f7 100644
--- a/target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch
+++ b/target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch
@@ -75,7 +75,7 @@
uart->tx_loadsz = up->tx_loadsz;
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
-@@ -2176,6 +2176,7 @@ uart_report_port(struct uart_driver *drv
+@@ -2177,6 +2177,7 @@ uart_report_port(struct uart_driver *drv
snprintf(address, sizeof(address),
"I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
break;
@@ -83,7 +83,7 @@
case UPIO_MEM:
case UPIO_MEM32:
case UPIO_MEM32BE:
-@@ -2823,6 +2824,7 @@ int uart_match_port(struct uart_port *po
+@@ -2824,6 +2825,7 @@ int uart_match_port(struct uart_port *po
case UPIO_HUB6:
return (port1->iobase == port2->iobase) &&
(port1->hub6 == port2->hub6);
diff --git a/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch b/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch
index 33058fa0c0..c93adeb862 100644
--- a/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch
+++ b/target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch
@@ -28,8 +28,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
include/linux/mfd/axp20x.h | 86 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 184 insertions(+)
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index d18029b..cfbb7d7 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -32,6 +32,7 @@
@@ -40,7 +38,7 @@ index d18029b..cfbb7d7 100644
"AXP288",
};
-@@ -54,6 +55,25 @@ static const struct regmap_access_table axp20x_volatile_table = {
+@@ -54,6 +55,25 @@ static const struct regmap_access_table
.n_yes_ranges = ARRAY_SIZE(axp20x_volatile_ranges),
};
@@ -66,7 +64,7 @@ index d18029b..cfbb7d7 100644
static const struct regmap_range axp288_writeable_ranges[] = {
regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ6_STATE),
regmap_reg_range(AXP20X_DCDC_MODE, AXP288_FG_TUNE5),
-@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resources[] = {
+@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resour
},
};
@@ -87,7 +85,7 @@ index d18029b..cfbb7d7 100644
static struct resource axp288_fuel_gauge_resources[] = {
{
.start = AXP288_IRQ_QWBTU,
-@@ -129,6 +163,15 @@ static const struct regmap_config axp20x_regmap_config = {
+@@ -129,6 +163,15 @@ static const struct regmap_config axp20x
.cache_type = REGCACHE_RBTREE,
};
@@ -103,7 +101,7 @@ index d18029b..cfbb7d7 100644
static const struct regmap_config axp288_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
-@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_regmap_irqs[] = {
+@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_re
INIT_REGMAP_IRQ(AXP20X, GPIO0_INPUT, 4, 0),
};
@@ -138,7 +136,7 @@ index d18029b..cfbb7d7 100644
/* some IRQs are compatible with axp20x models */
static const struct regmap_irq axp288_regmap_irqs[] = {
INIT_REGMAP_IRQ(AXP288, VBUS_FALL, 0, 2),
-@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = {
+@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_re
static const struct of_device_id axp20x_of_match[] = {
{ .compatible = "x-powers,axp202", .data = (void *) AXP202_ID },
{ .compatible = "x-powers,axp209", .data = (void *) AXP209_ID },
@@ -146,7 +144,7 @@ index d18029b..cfbb7d7 100644
{ },
};
MODULE_DEVICE_TABLE(of, axp20x_of_match);
-@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp20x_regmap_irq_chip = {
+@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp2
};
@@ -165,7 +163,7 @@ index d18029b..cfbb7d7 100644
static const struct regmap_irq_chip axp288_regmap_irq_chip = {
.name = "axp288_irq_chip",
.status_base = AXP20X_IRQ1_STATE,
-@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] = {
+@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] =
},
};
@@ -180,7 +178,7 @@ index d18029b..cfbb7d7 100644
static struct resource axp288_adc_resources[] = {
{
.name = "GPADC",
-@@ -426,6 +518,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev)
+@@ -426,6 +518,12 @@ static int axp20x_match_device(struct ax
axp20x->regmap_cfg = &axp20x_regmap_config;
axp20x->regmap_irq_chip = &axp20x_regmap_irq_chip;
break;
@@ -193,8 +191,6 @@ index d18029b..cfbb7d7 100644
case AXP288_ID:
axp20x->cells = axp288_cells;
axp20x->nr_cells = ARRAY_SIZE(axp288_cells);
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index dfabd6d..95568eb 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
@@ -14,6 +14,7 @@
diff --git a/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch b/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch
index b49c969362..21fe2ec370 100644
--- a/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch
+++ b/target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch
@@ -16,8 +16,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/regulator/axp20x-regulator.c | 143 +++++++++++++++++++++++------------
1 file changed, 94 insertions(+), 49 deletions(-)
-diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
-index e4331f5..50ae0b5 100644
--- a/drivers/regulator/axp20x-regulator.c
+++ b/drivers/regulator/axp20x-regulator.c
@@ -32,15 +32,15 @@
@@ -97,7 +95,7 @@ index e4331f5..50ae0b5 100644
.n_voltages = ARRAY_SIZE(_table), \
.owner = THIS_MODULE, \
.vsel_reg = (_vreg), \
-@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops = {
+@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops =
};
static const struct regulator_desc axp20x_regulators[] = {
@@ -135,7 +133,10 @@ index e4331f5..50ae0b5 100644
{
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
+ u32 min, max, def, step;
-+
+
+- if (dcdcfreq < 750) {
+- dcdcfreq = 750;
+- dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n");
+ switch (axp20x->variant) {
+ case AXP202_ID:
+ case AXP209_ID:
@@ -148,35 +149,32 @@ index e4331f5..50ae0b5 100644
+ dev_err(&pdev->dev,
+ "Setting DCDC frequency for unsupported AXP variant\n");
+ return -EINVAL;
-+ }
-+
+ }
+
+- if (dcdcfreq > 1875) {
+- dcdcfreq = 1875;
+- dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n");
+ if (dcdcfreq == 0)
+ dcdcfreq = def;
-
-- if (dcdcfreq < 750) {
-- dcdcfreq = 750;
-- dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n");
++
+ if (dcdcfreq < min) {
+ dcdcfreq = min;
+ dev_warn(&pdev->dev, "DCDC frequency too low. Set to %ukHz\n",
+ min);
}
-- if (dcdcfreq > 1875) {
-- dcdcfreq = 1875;
-- dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n");
+- dcdcfreq = (dcdcfreq - 750) / 75;
+ if (dcdcfreq > max) {
+ dcdcfreq = max;
+ dev_warn(&pdev->dev, "DCDC frequency too high. Set to %ukHz\n",
+ max);
- }
-
-- dcdcfreq = (dcdcfreq - 750) / 75;
++ }
++
+ dcdcfreq = (dcdcfreq - min) / step;
return regmap_update_bits(axp20x->regmap, AXP20X_DCDC_FREQ,
AXP20X_FREQ_DCDC_MASK, dcdcfreq);
-@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(str
{
struct device_node *np, *regulators;
int ret;
@@ -185,7 +183,7 @@ index e4331f5..50ae0b5 100644
np = of_node_get(pdev->dev.parent->of_node);
if (!np)
-@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(str
if (!regulators) {
dev_warn(&pdev->dev, "regulators node not found\n");
} else {
@@ -193,7 +191,7 @@ index e4331f5..50ae0b5 100644
of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq);
ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
if (ret < 0) {
-@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(str
static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 workmode)
{
@@ -202,7 +200,6 @@ index e4331f5..50ae0b5 100644
+ unsigned int mask;
- if ((id != AXP20X_DCDC2) && (id != AXP20X_DCDC3))
-- return -EINVAL;
+ switch (axp20x->variant) {
+ case AXP202_ID:
+ case AXP209_ID:
@@ -212,22 +209,24 @@ index e4331f5..50ae0b5 100644
+ mask = AXP20X_WORKMODE_DCDC2_MASK;
+ if (id == AXP20X_DCDC3)
+ mask = AXP20X_WORKMODE_DCDC3_MASK;
-
-- if (id == AXP20X_DCDC3)
-- mask = AXP20X_WORKMODE_DCDC3_MASK;
++
+ workmode <<= ffs(mask) - 1;
+ break;
-
-- workmode <<= ffs(mask) - 1;
++
+ default:
+ /* should not happen */
+ WARN_ON(1);
-+ return -EINVAL;
+ return -EINVAL;
+-
+- if (id == AXP20X_DCDC3)
+- mask = AXP20X_WORKMODE_DCDC3_MASK;
+-
+- workmode <<= ffs(mask) - 1;
+ }
return regmap_update_bits(rdev->regmap, AXP20X_DCDC_MODE, mask, workmode);
}
-@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct
{
struct regulator_dev *rdev;
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
@@ -268,7 +267,7 @@ index e4331f5..50ae0b5 100644
return PTR_ERR(rdev);
}
-@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct
if (!ret) {
if (axp20x_set_dcdc_workmode(rdev, i, workmode))
dev_err(&pdev->dev, "Failed to set workmode on %s\n",
diff --git a/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch b/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch
index b2fdb65b34..cc5bc4f0e4 100644
--- a/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch
+++ b/target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch
@@ -19,8 +19,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/regulator/axp20x-regulator.c | 96 ++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
-diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
-index 50ae0b5..6468291 100644
--- a/drivers/regulator/axp20x-regulator.c
+++ b/drivers/regulator/axp20x-regulator.c
@@ -27,8 +27,12 @@
@@ -63,7 +61,7 @@ index 50ae0b5..6468291 100644
#define AXP_DESC_FIXED(_family, _id, _match, _supply, _volt) \
[_family##_##_id] = { \
.name = #_id, \
-@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops = {
+@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops =
.is_enabled = regulator_is_enabled_regmap,
};
@@ -78,7 +76,7 @@ index 50ae0b5..6468291 100644
static const struct regulator_desc axp20x_regulators[] = {
AXP_DESC(AXP20X, DCDC2, "dcdc2", "vin2", 700, 2275, 25,
AXP20X_DCDC2_V_OUT, 0x3f, AXP20X_PWR_OUT_CTRL, 0x10),
-@@ -152,6 +184,52 @@ static const struct regulator_desc axp20x_regulators[] = {
+@@ -152,6 +184,52 @@ static const struct regulator_desc axp20
AXP20X_IO_ENABLED, AXP20X_IO_DISABLED),
};
@@ -131,7 +129,7 @@ index 50ae0b5..6468291 100644
static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
{
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
-@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
+@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct p
def = 1500;
step = 75;
break;
@@ -144,7 +142,7 @@ index 50ae0b5..6468291 100644
default:
dev_err(&pdev->dev,
"Setting DCDC frequency for unsupported AXP variant\n");
-@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 work
+@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(stru
workmode <<= ffs(mask) - 1;
break;
@@ -159,7 +157,7 @@ index 50ae0b5..6468291 100644
default:
/* should not happen */
WARN_ON(1);
-@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct
regulators = axp20x_regulators;
nregulators = AXP20X_REG_ID_MAX;
break;
diff --git a/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch b/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch
index eba960e0e2..a4585799b6 100644
--- a/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch
+++ b/target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch
@@ -26,11 +26,9 @@ Changes in v3:
include/linux/mfd/axp20x.h | 6 ++++++
2 files changed, 13 insertions(+), 1 deletion(-)
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index b369cfc..8bd3283 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
-@@ -61,10 +61,16 @@ static const struct regmap_access_table axp152_volatile_table = {
+@@ -39,10 +39,16 @@ static const char * const axp20x_model_n
static const struct regmap_range axp20x_writeable_ranges[] = {
regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE),
regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES),
@@ -47,7 +45,7 @@ index b369cfc..8bd3283 100644
};
static const struct regmap_access_table axp20x_writeable_table = {
-@@ -195,7 +201,7 @@ static const struct regmap_config axp20x_regmap_config = {
+@@ -159,7 +165,7 @@ static const struct regmap_config axp20x
.val_bits = 8,
.wr_table = &axp20x_writeable_table,
.volatile_table = &axp20x_volatile_table,
@@ -56,11 +54,9 @@ index b369cfc..8bd3283 100644
.cache_type = REGCACHE_RBTREE,
};
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index 52203d5..cc8ad1e 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
-@@ -190,6 +190,12 @@ enum {
+@@ -151,6 +151,12 @@ enum {
#define AXP20X_CC_CTRL 0xb8
#define AXP20X_FG_RES 0xb9
diff --git a/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch b/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch
index 0aa420c958..f0c9055276 100644
--- a/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch
+++ b/target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch
@@ -13,11 +13,9 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/axp20x.c | 2 ++
1 file changed, 2 insertions(+)
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index cfbb7d7..6df9155 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
-@@ -370,6 +370,8 @@ static struct mfd_cell axp22x_cells[] = {
+@@ -376,6 +376,8 @@ static struct mfd_cell axp22x_cells[] =
.name = "axp20x-pek",
.num_resources = ARRAY_SIZE(axp22x_pek_resources),
.resources = axp22x_pek_resources,
diff --git a/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch b/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch
index da3867d0a8..a653f94e4c 100644
--- a/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch
+++ b/target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch
@@ -14,8 +14,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
include/linux/mfd/axp20x.h | 61 +++++++++++++++++++++++++++++++++-
2 files changed, 143 insertions(+), 1 deletion(-)
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index 8c2c3c4..b369cfc 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -30,12 +30,34 @@
@@ -53,7 +51,7 @@ index 8c2c3c4..b369cfc 100644
static const struct regmap_range axp20x_writeable_ranges[] = {
regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE),
regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES),
-@@ -93,6 +115,11 @@ static const struct regmap_access_table axp288_volatile_table = {
+@@ -99,6 +121,11 @@ static const struct regmap_access_table
.n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges),
};
@@ -65,7 +63,7 @@ index 8c2c3c4..b369cfc 100644
static struct resource axp20x_pek_resources[] = {
{
.name = "PEK_DBR",
-@@ -154,6 +181,15 @@ static struct resource axp288_fuel_gauge_resources[] = {
+@@ -160,6 +187,15 @@ static struct resource axp288_fuel_gauge
},
};
@@ -81,7 +79,7 @@ index 8c2c3c4..b369cfc 100644
static const struct regmap_config axp20x_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
-@@ -184,6 +220,26 @@ static const struct regmap_config axp288_regmap_config = {
+@@ -190,6 +226,26 @@ static const struct regmap_config axp288
#define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \
[_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) }
@@ -108,7 +106,7 @@ index 8c2c3c4..b369cfc 100644
static const struct regmap_irq axp20x_regmap_irqs[] = {
INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7),
INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN, 0, 6),
-@@ -293,6 +349,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = {
+@@ -299,6 +355,7 @@ static const struct regmap_irq axp288_re
};
static const struct of_device_id axp20x_of_match[] = {
@@ -116,7 +114,7 @@ index 8c2c3c4..b369cfc 100644
{ .compatible = "x-powers,axp202", .data = (void *) AXP202_ID },
{ .compatible = "x-powers,axp209", .data = (void *) AXP209_ID },
{ .compatible = "x-powers,axp221", .data = (void *) AXP221_ID },
-@@ -317,6 +374,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = {
+@@ -323,6 +380,18 @@ static const struct acpi_device_id axp20
};
MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match);
@@ -135,7 +133,7 @@ index 8c2c3c4..b369cfc 100644
static const struct regmap_irq_chip axp20x_regmap_irq_chip = {
.name = "axp20x_irq_chip",
.status_base = AXP20X_IRQ1_STATE,
-@@ -375,6 +444,14 @@ static struct mfd_cell axp22x_cells[] = {
+@@ -381,6 +450,14 @@ static struct mfd_cell axp22x_cells[] =
},
};
@@ -150,7 +148,7 @@ index 8c2c3c4..b369cfc 100644
static struct resource axp288_adc_resources[] = {
{
.name = "GPADC",
-@@ -513,6 +590,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev)
+@@ -519,6 +596,12 @@ static int axp20x_match_device(struct ax
}
switch (axp20x->variant) {
@@ -163,8 +161,6 @@ index 8c2c3c4..b369cfc 100644
case AXP202_ID:
case AXP209_ID:
axp20x->nr_cells = ARRAY_SIZE(axp20x_cells);
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index c2aa853..52203d5 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
@@ -12,7 +12,8 @@
@@ -236,7 +232,7 @@ index c2aa853..52203d5 100644
#define AXP20X_GPIO0_CTRL 0x90
#define AXP20X_LDO5_V_OUT 0x91
#define AXP20X_GPIO1_CTRL 0x92
-@@ -218,6 +257,26 @@ enum {
+@@ -224,6 +263,26 @@ enum {
/* IRQs */
enum {
diff --git a/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch b/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch
index 4f22ce1395..f1af8233e3 100644
--- a/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch
+++ b/target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch
@@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/nand_base.c | 91 +++++++++++++++++++++++++++-----------------
1 file changed, 56 insertions(+), 35 deletions(-)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index c2e1232..f580ed1 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struct mtd_info *mtd)
+@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struc
return corr >= ds_corr && ecc->strength >= chip->ecc_strength_ds;
}
@@ -42,7 +40,7 @@ index c2e1232..f580ed1 100644
- struct nand_chip *chip = mtd->priv;
- struct nand_ecc_ctrl *ecc = &chip->ecc;
- struct nand_buffers *nbuf;
--
+
- /* New bad blocks should be marked in OOB, flash-based BBT, or both */
- BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
- !(chip->bbt_options & NAND_BBT_USE_FLASH));
@@ -55,7 +53,7 @@ index c2e1232..f580ed1 100644
- nbuf->ecccalc = (uint8_t *)(nbuf + 1);
- nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
- nbuf->databuf = nbuf->ecccode + mtd->oobsize;
-
+-
- chip->buffers = nbuf;
- } else {
- if (!chip->buffers)
diff --git a/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch b/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch
index 88e313dbb5..d4eaeec118 100644
--- a/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch
+++ b/target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch
@@ -27,8 +27,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/mtd/nand.h | 38 +++
6 files changed, 635 insertions(+), 141 deletions(-)
-diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
-index 5897d8d..8242470 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -22,6 +22,10 @@ menuconfig MTD_NAND
@@ -42,22 +40,18 @@ index 5897d8d..8242470 100644
config MTD_NAND_BCH
tristate
select BCH
-diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
-index 582bbd05..fcbe032 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
-@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) += bcm47xxnflash/
+@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) +=
obj-$(CONFIG_MTD_NAND_SUNXI) += sunxi_nand.o
obj-$(CONFIG_MTD_NAND_HISI504) += hisi504_nand.o
+obj-$(CONFIG_MTD_OF_NAND_PARTS) += ofnandpart.o
+
nand-objs := nand_base.o nand_bbt.o nand_timings.o
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index f580ed1..a30b67f 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(s
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page)
{
@@ -93,7 +87,7 @@ index f580ed1..a30b67f 100644
}
}
-@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(s
static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *buf, int oob_required, int page)
{
@@ -134,7 +128,7 @@ index f580ed1..a30b67f 100644
if (stat < 0) {
mtd->ecc_stats.failed++;
} else {
-@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_
int page)
{
int start_step, end_step, num_steps;
@@ -143,7 +137,7 @@ index f580ed1..a30b67f 100644
uint8_t *p;
int data_col_addr, i, gaps = 0;
int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
-@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_
unsigned int max_bitflips = 0;
/* Column address within the page aligned to ECC size (256bytes) */
@@ -166,7 +160,7 @@ index f580ed1..a30b67f 100644
/* If we read not a page aligned data */
if (data_col_addr != 0)
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
-@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_
chip->read_buf(mtd, p, datafrag_len);
/* Calculate ECC */
@@ -178,7 +172,7 @@ index f580ed1..a30b67f 100644
/*
* The performance is faster if we position offsets according to
-@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_
aligned_len = eccfrag_len;
if (eccpos[index] & (busw - 1))
aligned_len++;
@@ -188,7 +182,7 @@ index f580ed1..a30b67f 100644
aligned_len++;
chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
-@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_
chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
p = bufpoi + data_col_addr;
@@ -205,7 +199,7 @@ index f580ed1..a30b67f 100644
if (stat < 0) {
mtd->ecc_stats.failed++;
} else {
-@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_
static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *buf, int oob_required, int page)
{
@@ -248,7 +242,7 @@ index f580ed1..a30b67f 100644
if (stat < 0) {
mtd->ecc_stats.failed++;
} else {
-@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct m
static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
{
@@ -265,7 +259,7 @@ index f580ed1..a30b67f 100644
uint8_t *ecc_calc = chip->buffers->ecccalc;
unsigned int max_bitflips = 0;
-@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_firs
chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
@@ -287,7 +281,7 @@ index f580ed1..a30b67f 100644
if (stat < 0) {
mtd->ecc_stats.failed++;
} else {
-@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_firs
static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *buf, int oob_required, int page)
{
@@ -300,7 +294,7 @@ index f580ed1..a30b67f 100644
uint8_t *p = buf;
uint8_t *oob = chip->oob_poi;
unsigned int max_bitflips = 0;
-@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struc
for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
int stat;
@@ -324,7 +318,7 @@ index f580ed1..a30b67f 100644
if (stat < 0) {
mtd->ecc_stats.failed++;
-@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struc
oob += eccbytes;
@@ -337,7 +331,7 @@ index f580ed1..a30b67f 100644
}
}
-@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
+@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct
return oob + len;
case MTD_OPS_AUTO_OOB: {
@@ -346,7 +340,7 @@ index f580ed1..a30b67f 100644
uint32_t boffs = 0, roffs = ops->ooboffs;
size_t bytes = 0;
-@@ -1600,17 +1606,21 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1600,17 +1606,21 @@ read_retry:
* the read methods return max bitflips per ecc step.
*/
if (unlikely(ops->mode == MTD_OPS_RAW))
@@ -376,7 +370,7 @@ index f580ed1..a30b67f 100644
if (ret < 0) {
if (use_bufpoi)
/* Invalidate page cache */
-@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
+@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mt
}
/**
@@ -416,7 +410,7 @@ index f580ed1..a30b67f 100644
* nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
* @mtd: mtd info structure
* @chip: nand chip info structure
-@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct
int page)
{
int length = mtd->oobsize;
@@ -435,7 +429,7 @@ index f580ed1..a30b67f 100644
if (sndrnd) {
pos = eccsize + i * (eccsize + chunk);
if (mtd->writesize > 512)
-@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd
static int nand_write_oob_syndrome(struct mtd_info *mtd,
struct nand_chip *chip, int page)
{
@@ -449,7 +443,7 @@ index f580ed1..a30b67f 100644
const uint8_t *bufpoi = chip->oob_poi;
/*
-@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
+@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struc
* or
* data-pad-ecc-pad-data-pad .... ecc-pad-oob
*/
@@ -458,7 +452,7 @@ index f580ed1..a30b67f 100644
pos = steps * (eccsize + chunk);
steps = 0;
} else
-@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_i
stats = mtd->ecc_stats;
if (ops->mode == MTD_OPS_AUTO_OOB)
@@ -467,7 +461,7 @@ index f580ed1..a30b67f 100644
else
len = mtd->oobsize;
-@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_i
while (1) {
if (ops->mode == MTD_OPS_RAW)
@@ -479,7 +473,7 @@ index f580ed1..a30b67f 100644
if (ret < 0)
break;
-@@ -2021,6 +2066,56 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2021,6 +2066,56 @@ out:
return ret;
}
@@ -536,7 +530,7 @@ index f580ed1..a30b67f 100644
/**
* nand_write_page_raw - [INTERN] raw page write function
-@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome(
struct nand_chip *chip,
const uint8_t *buf, int oob_required)
{
@@ -572,7 +566,7 @@ index f580ed1..a30b67f 100644
}
}
-@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome(
static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required)
{
@@ -601,7 +595,7 @@ index f580ed1..a30b67f 100644
}
/**
-@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct
static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required)
{
@@ -629,7 +623,7 @@ index f580ed1..a30b67f 100644
chip->oob_poi[eccpos[i]] = ecc_calc[i];
chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
-@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(stru
{
uint8_t *oob_buf = chip->oob_poi;
uint8_t *ecc_calc = chip->buffers->ecccalc;
@@ -644,7 +638,7 @@ index f580ed1..a30b67f 100644
uint32_t start_step = offset / ecc_size;
uint32_t end_step = (offset + data_len - 1) / ecc_size;
int oob_bytes = mtd->oobsize / ecc_steps;
-@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(stru
for (step = 0; step < ecc_steps; step++) {
/* configure controller for WRITE access */
@@ -653,7 +647,7 @@ index f580ed1..a30b67f 100644
/* write data (untouched subpages already masked by 0xFF) */
chip->write_buf(mtd, buf, ecc_size);
-@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(stru
if ((step < start_step) || (step > end_step))
memset(ecc_calc, 0xff, ecc_bytes);
else
@@ -662,7 +656,7 @@ index f580ed1..a30b67f 100644
/* mask OOB of un-touched subpages by padding 0xFF */
/* if oob_required, preserve OOB metadata of written subpage */
-@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(stru
/* copy calculated ECC for whole page to chip->buffer->oob */
/* this include masked-value(0xFF) for unwritten subpages */
ecc_calc = chip->buffers->ecccalc;
@@ -671,7 +665,7 @@ index f580ed1..a30b67f 100644
chip->oob_poi[eccpos[i]] = ecc_calc[i];
/* write OOB buffer to NAND device */
-@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(struct mtd_info *mtd,
+@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(stru
struct nand_chip *chip,
const uint8_t *buf, int oob_required)
{
@@ -712,7 +706,7 @@ index f580ed1..a30b67f 100644
}
}
-@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_in
int status, subpage;
if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
@@ -721,7 +715,7 @@ index f580ed1..a30b67f 100644
subpage = offset || (data_len < mtd->writesize);
else
subpage = 0;
-@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_in
chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
if (unlikely(raw))
@@ -742,7 +736,7 @@ index f580ed1..a30b67f 100644
if (status < 0)
return status;
-@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
+@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd
return oob + len;
case MTD_OPS_AUTO_OOB: {
@@ -751,7 +745,7 @@ index f580ed1..a30b67f 100644
uint32_t boffs = 0, woffs = ops->ooboffs;
size_t bytes = 0;
-@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_i
}
/**
@@ -798,7 +792,7 @@ index f580ed1..a30b67f 100644
* nand_write - [MTD Interface] NAND write with ECC
* @mtd: MTD device structure
* @to: offset to write to
-@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *m
}
/**
@@ -838,7 +832,7 @@ index f580ed1..a30b67f 100644
* nand_do_write_oob - [MTD Interface] NAND write out-of-band
* @mtd: MTD device structure
* @to: offset to write to
-@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_
__func__, (unsigned int)to, (int)ops->ooblen);
if (ops->mode == MTD_OPS_AUTO_OOB)
@@ -847,7 +841,7 @@ index f580ed1..a30b67f 100644
else
len = mtd->oobsize;
-@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_
nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
if (ops->mode == MTD_OPS_RAW)
@@ -861,7 +855,7 @@ index f580ed1..a30b67f 100644
chip->select_chip(mtd, -1);
-@@ -2694,6 +2866,54 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2694,6 +2866,54 @@ out:
}
/**
@@ -916,7 +910,7 @@ index f580ed1..a30b67f 100644
* single_erase - [GENERIC] NAND standard block erase command function
* @mtd: MTD device structure
* @page: the page address of the block which will be erased
-@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
+@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *m
}
/**
@@ -946,7 +940,7 @@ index f580ed1..a30b67f 100644
* nand_erase_nand - [INTERN] erase block(s)
* @mtd: MTD device structure
* @instr: erase instruction
-@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
+@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_i
}
/**
@@ -965,7 +959,7 @@ index f580ed1..a30b67f 100644
* nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
* @mtd: MTD device structure
* @ofs: offset relative to mtd start
-@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
+@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd
}
/**
@@ -999,7 +993,7 @@ index f580ed1..a30b67f 100644
* nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
* @mtd: MTD device structure
* @chip: nand chip info structure
-@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc)
+@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd
}
/**
@@ -1181,11 +1175,9 @@ index f580ed1..a30b67f 100644
/* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
switch (ecc->steps) {
-diff --git a/drivers/mtd/nand/nand_bch.c b/drivers/mtd/nand/nand_bch.c
-index 3803e0b..b82b976 100644
--- a/drivers/mtd/nand/nand_bch.c
+++ b/drivers/mtd/nand/nand_bch.c
-@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf,
+@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_in
unsigned char *code)
{
const struct nand_chip *chip = mtd->priv;
@@ -1204,7 +1196,7 @@ index 3803e0b..b82b976 100644
code[i] ^= nbc->eccmask[i];
return 0;
-@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf,
+@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_inf
unsigned char *read_ecc, unsigned char *calc_ecc)
{
const struct nand_chip *chip = mtd->priv;
@@ -1224,11 +1216,9 @@ index 3803e0b..b82b976 100644
/* error is located in data, correct it */
buf[errloc[i] >> 3] ^= (1 << (errloc[i] & 7));
/* else error in ecc, no action needed */
-diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c
-index 97c4c02..f35c418 100644
--- a/drivers/mtd/nand/nand_ecc.c
+++ b/drivers/mtd/nand/nand_ecc.c
-@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf,
+@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info *
unsigned char *code)
{
__nand_calculate_ecc(buf,
@@ -1237,7 +1227,7 @@ index 97c4c02..f35c418 100644
return 0;
}
-@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *mtd, unsigned char *buf,
+@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *m
unsigned char *read_ecc, unsigned char *calc_ecc)
{
return __nand_correct_data(buf, read_ecc, calc_ecc,
@@ -1246,8 +1236,6 @@ index 97c4c02..f35c418 100644
}
EXPORT_SYMBOL(nand_correct_data);
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 3d4ea7e..510e09b 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -708,6 +708,7 @@ struct nand_chip {
diff --git a/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch b/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch
index 135f50a5cb..76f0051266 100644
--- a/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch
+++ b/target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch
@@ -17,9 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2 files changed, 121 insertions(+)
create mode 100644 drivers/mtd/nand/ofnandpart.c
-diff --git a/drivers/mtd/nand/ofnandpart.c b/drivers/mtd/nand/ofnandpart.c
-new file mode 100644
-index 0000000..293daee
--- /dev/null
+++ b/drivers/mtd/nand/ofnandpart.c
@@ -0,0 +1,104 @@
@@ -127,11 +124,9 @@ index 0000000..293daee
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Parser for NAND flash partitioning information in device tree");
+MODULE_AUTHOR("Boris BREZILLON");
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 510e09b..5616f51 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
-@@ -1013,6 +1013,23 @@ static inline int jedec_feature(struct nand_chip *chip)
+@@ -1014,6 +1014,23 @@ static inline int jedec_feature(struct n
: 0;
}
diff --git a/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch b/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch
index efab359d84..45b9679d66 100644
--- a/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch
+++ b/target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch
@@ -24,11 +24,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/mtd/nand.h | 21 ++++++
2 files changed, 175 insertions(+)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index a30b67f..8a5d12e 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -1102,6 +1102,138 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+@@ -1102,6 +1102,138 @@ out:
EXPORT_SYMBOL(nand_lock);
/**
@@ -167,7 +165,7 @@ index a30b67f..8a5d12e 100644
* nand_read_page_raw - [INTERN] read raw page data without ecc
* @mtd: mtd info structure
* @chip: nand chip info structure
-@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
+@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_
uint8_t *wbuf = buf;
int use_bufpoi;
int part_pagewr = (column || writelen < (mtd->writesize - 1));
@@ -175,7 +173,7 @@ index a30b67f..8a5d12e 100644
if (part_pagewr)
use_bufpoi = 1;
-@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
+@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_
if (ret)
break;
@@ -190,7 +188,7 @@ index a30b67f..8a5d12e 100644
writelen -= bytes;
if (!writelen)
break;
-@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd
int page, status, pages_per_block, ret, chipnr;
struct nand_chip *chip = mtd->priv;
loff_t len;
@@ -198,7 +196,7 @@ index a30b67f..8a5d12e 100644
pr_debug("%s: start = 0x%012llx, len = %llu\n",
__func__, (unsigned long long)instr->addr,
-@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd
goto erase_exit;
}
@@ -217,8 +215,6 @@ index a30b67f..8a5d12e 100644
/* Increment page address and decrement length */
len -= (1ULL << chip->phys_erase_shift);
page += pages_per_block;
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 5616f51..4f7ca8d 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -521,6 +521,24 @@ struct nand_ecc_ctrl {
diff --git a/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch b/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch
index 7d1bdbd9aa..173bd1eb49 100644
--- a/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch
+++ b/target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch
@@ -34,11 +34,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/mtd/nand.h | 98 +++++++++++++++
2 files changed, 321 insertions(+), 55 deletions(-)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 8a5d12e..577cb9e 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -1102,6 +1102,62 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+@@ -1102,6 +1102,62 @@ out:
EXPORT_SYMBOL(nand_lock);
/**
@@ -119,7 +117,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(s
int eccbytes = chip->cur_ecc->bytes;
uint8_t *oob = chip->oob_poi;
int steps, size;
@@ -166,7 +164,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
p = bufpoi + data_col_addr;
@@ -176,7 +174,7 @@ index 8a5d12e..577cb9e 100644
/* Calculate ECC */
for (i = 0; i < eccfrag_len;
-@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_
}
if (gaps) {
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
@@ -186,7 +184,7 @@ index 8a5d12e..577cb9e 100644
} else {
/*
* Send the command to read the particular ECC bytes take care
-@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_
chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
mtd->writesize + aligned_pos, -1);
@@ -196,7 +194,7 @@ index 8a5d12e..577cb9e 100644
}
for (i = 0; i < eccfrag_len; i++)
-@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_
max_bitflips = max_t(unsigned int, max_bitflips, stat);
}
}
@@ -204,7 +202,7 @@ index 8a5d12e..577cb9e 100644
return max_bitflips;
}
-@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct m
uint8_t *ecc_code = chip->buffers->ecccode;
uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
unsigned int max_bitflips = 0;
@@ -224,7 +222,7 @@ index 8a5d12e..577cb9e 100644
for (i = 0; i < chip->cur_ecc->total; i++)
ecc_code[i] = chip->oob_poi[eccpos[i]];
-@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct m
max_bitflips = max_t(unsigned int, max_bitflips, stat);
}
}
@@ -232,7 +230,7 @@ index 8a5d12e..577cb9e 100644
return max_bitflips;
}
-@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_firs
uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
uint8_t *ecc_calc = chip->buffers->ecccalc;
unsigned int max_bitflips = 0;
@@ -248,7 +246,7 @@ index 8a5d12e..577cb9e 100644
for (i = 0; i < chip->cur_ecc->total; i++)
ecc_code[i] = chip->oob_poi[eccpos[i]];
-@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_firs
int stat;
chip->cur_ecc->hwctl(mtd, NAND_ECC_READ);
@@ -258,7 +256,7 @@ index 8a5d12e..577cb9e 100644
chip->cur_ecc->calculate(mtd, p, &ecc_calc[i]);
stat = chip->cur_ecc->correct(mtd, p, &ecc_code[i], NULL);
-@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_firs
max_bitflips = max_t(unsigned int, max_bitflips, stat);
}
}
@@ -266,7 +264,7 @@ index 8a5d12e..577cb9e 100644
return max_bitflips;
}
-@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struc
uint8_t *p = buf;
uint8_t *oob = chip->oob_poi;
unsigned int max_bitflips = 0;
@@ -297,7 +295,7 @@ index 8a5d12e..577cb9e 100644
stat = chip->cur_ecc->correct(mtd, p, oob, NULL);
if (stat < 0) {
-@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struc
oob += eccbytes;
if (chip->cur_ecc->postpad) {
@@ -339,7 +337,7 @@ index 8a5d12e..577cb9e 100644
switch (ops->mode) {
case MTD_OPS_PLACE_OOB:
-@@ -1737,6 +1838,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1737,6 +1838,7 @@ read_retry:
* Now read the page into the buffer. Absent an error,
* the read methods return max bitflips per ecc step.
*/
@@ -347,7 +345,7 @@ index 8a5d12e..577cb9e 100644
if (unlikely(ops->mode == MTD_OPS_RAW))
ret = chip->cur_ecc->read_page_raw(mtd, chip,
bufpoi,
-@@ -1753,6 +1855,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1753,6 +1855,8 @@ read_retry:
bufpoi,
oob_required,
page);
@@ -356,7 +354,7 @@ index 8a5d12e..577cb9e 100644
if (ret < 0) {
if (use_bufpoi)
/* Invalidate page cache */
-@@ -1780,8 +1884,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1780,8 +1884,8 @@ read_retry:
int toread = min(oobreadlen, max_oobsize);
if (toread) {
@@ -367,7 +365,7 @@ index 8a5d12e..577cb9e 100644
oobreadlen -= toread;
}
}
-@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_info *mtd, loff_t from, size_t len,
+@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_inf
nand_get_device(part->master, FL_READING);
if (part->ecc)
chip->cur_ecc = part->ecc;
@@ -383,7 +381,7 @@ index 8a5d12e..577cb9e 100644
chip->cur_ecc = &chip->ecc;
nand_release_device(part->master);
return ret;
-@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_
int page)
{
chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
@@ -394,7 +392,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct
chip->cur_ecc->postpad;
int eccsize = chip->cur_ecc->size;
uint8_t *bufpoi = chip->oob_poi;
@@ -403,7 +401,7 @@ index 8a5d12e..577cb9e 100644
chip->cmdfunc(mtd, NAND_CMD_READ0, chip->cur_ecc->size, page);
for (i = 0; i < chip->cur_ecc->steps; i++) {
-@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct
} else
sndrnd = 1;
toread = min_t(int, length, chunk);
@@ -424,7 +422,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd
int length = mtd->oobsize;
chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
@@ -435,7 +433,7 @@ index 8a5d12e..577cb9e 100644
/* Send command to program the OOB data */
chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
-@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
+@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struc
} else
sndcmd = 1;
len = min_t(int, length, chunk);
@@ -457,7 +455,7 @@ index 8a5d12e..577cb9e 100644
chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
status = chip->waitfunc(mtd, chip);
-@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_i
break;
len = min(len, readlen);
@@ -466,7 +464,7 @@ index 8a5d12e..577cb9e 100644
if (chip->options & NAND_NEED_READRDY) {
/* Apply delay or wait for ready/busy pin */
-@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd
nand_get_device(part->master, FL_READING);
if (part->ecc)
chip->cur_ecc = part->ecc;
@@ -475,7 +473,7 @@ index 8a5d12e..577cb9e 100644
switch (ops->mode) {
case MTD_OPS_PLACE_OOB:
-@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd
ret = nand_do_read_ops(part->master, from, ops);
out:
@@ -483,7 +481,7 @@ index 8a5d12e..577cb9e 100644
chip->cur_ecc = &chip->ecc;
nand_release_device(part->master);
return ret;
-@@ -2261,9 +2386,11 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2261,9 +2386,11 @@ out:
static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required)
{
@@ -498,7 +496,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome(
int eccbytes = chip->cur_ecc->bytes;
uint8_t *oob = chip->oob_poi;
int steps, size;
@@ -544,7 +542,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct
uint8_t *ecc_calc = chip->buffers->ecccalc;
const uint8_t *p = buf;
uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
@@ -568,7 +566,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(stru
chip->cur_ecc->hwctl(mtd, NAND_ECC_WRITE);
/* write data (untouched subpages already masked by 0xFF) */
@@ -579,7 +577,7 @@ index 8a5d12e..577cb9e 100644
/* mask ECC of un-touched subpages by padding 0xFF */
if ((step < start_step) || (step > end_step))
-@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(stru
chip->oob_poi[eccpos[i]] = ecc_calc[i];
/* write OOB buffer to NAND device */
@@ -589,7 +587,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(struct mtd_info *mtd,
+@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(stru
int eccsteps = chip->cur_ecc->steps;
const uint8_t *p = buf;
uint8_t *oob = chip->oob_poi;
@@ -638,7 +636,7 @@ index 8a5d12e..577cb9e 100644
return 0;
}
-@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_in
chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
@@ -646,7 +644,7 @@ index 8a5d12e..577cb9e 100644
if (unlikely(raw))
status = chip->cur_ecc->write_page_raw(mtd, chip, buf,
oob_required);
-@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_in
else
status = chip->cur_ecc->write_page(mtd, chip, buf,
oob_required);
@@ -654,7 +652,7 @@ index 8a5d12e..577cb9e 100644
if (status < 0)
return status;
-@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct
panic_nand_get_device(chip, part->master, FL_WRITING);
if (part->ecc)
chip->cur_ecc = part->ecc;
@@ -663,7 +661,7 @@ index 8a5d12e..577cb9e 100644
ops.len = len;
ops.datbuf = (uint8_t *)buf;
-@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct
ret = nand_do_write_ops(part->master, to, &ops);
@@ -671,7 +669,7 @@ index 8a5d12e..577cb9e 100644
chip->cur_ecc = &chip->ecc;
*retlen = ops.retlen;
return ret;
-@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_in
nand_get_device(part->master, FL_WRITING);
if (part->ecc)
chip->cur_ecc = part->ecc;
@@ -687,7 +685,7 @@ index 8a5d12e..577cb9e 100644
chip->cur_ecc = &chip->ecc;
nand_release_device(part->master);
return ret;
-@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mt
nand_get_device(part->master, FL_WRITING);
if (part->ecc)
chip->cur_ecc = part->ecc;
@@ -696,7 +694,7 @@ index 8a5d12e..577cb9e 100644
switch (ops->mode) {
case MTD_OPS_PLACE_OOB:
-@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mt
ret = nand_do_write_ops(part->master, to, ops);
out:
@@ -712,11 +710,9 @@ index 8a5d12e..577cb9e 100644
/* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 4f7ca8d..6cbd06a3 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
-@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_info *mtd, int page,
+@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_inf
int nand_pst_create(struct mtd_info *mtd);
@@ -807,7 +803,7 @@ index 4f7ca8d..6cbd06a3 100644
void (*release)(struct nand_part *part);
};
-@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_in
extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, uint8_t *buf);
diff --git a/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch b/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch
index f4c36ec56c..f5dfba0c1c 100644
--- a/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch
+++ b/target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch
@@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/of_mtd.h | 6 ++++++
2 files changed, 41 insertions(+)
-diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c
-index b7361ed..4e42c26 100644
--- a/drivers/of/of_mtd.c
+++ b/drivers/of/of_mtd.c
-@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct device_node *np)
+@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct devi
EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength);
/**
@@ -58,8 +56,6 @@ index b7361ed..4e42c26 100644
* of_get_nand_bus_width - Get nand bus witdh for given device_node
* @np: Pointer to the given device_node
*
-diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h
-index e266caa..1059472 100644
--- a/include/linux/of_mtd.h
+++ b/include/linux/of_mtd.h
@@ -15,6 +15,7 @@
@@ -70,15 +66,15 @@ index e266caa..1059472 100644
int of_get_nand_bus_width(struct device_node *np);
bool of_get_nand_on_flash_bbt(struct device_node *np);
-@@ -35,6 +36,11 @@ static inline int of_get_nand_ecc_strength(struct device_node *np)
+@@ -34,6 +35,11 @@ static inline int of_get_nand_ecc_streng
+ {
return -ENOSYS;
}
-
++
+static inline int of_get_nand_rnd_mode(struct device_node *np)
+{
+ return -ENOSYS;
+}
-+
+
static inline int of_get_nand_bus_width(struct device_node *np)
{
- return -ENOSYS;
diff --git a/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch b/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch
index ac8015607c..5a4917c157 100644
--- a/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch
+++ b/target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch
@@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/mtd/nand.h | 4 ++++
2 files changed, 11 insertions(+)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 577cb9e..51642c6 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -4382,6 +4382,13 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4382,6 +4382,13 @@ ident_done:
if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
chip->cmdfunc = nand_command_lp;
@@ -31,8 +29,6 @@ index 577cb9e..51642c6 100644
pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
*maf_id, *dev_id);
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 6cbd06a3..5844d6f 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -748,6 +748,9 @@ struct nand_chip {
diff --git a/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch b/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch
index 4430a50822..c6554da68d 100644
--- a/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch
+++ b/target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch
@@ -15,8 +15,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
4 files changed, 164 insertions(+), 2 deletions(-)
create mode 100644 drivers/mtd/nand/nand_hynix.c
-diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
-index fcbe032..07b7c8c 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -5,7 +5,7 @@
@@ -28,9 +26,6 @@ index fcbe032..07b7c8c 100644
obj-$(CONFIG_MTD_SM_COMMON) += sm_common.o
obj-$(CONFIG_MTD_NAND_CAFE) += cafe_nand.o
-diff --git a/drivers/mtd/nand/nand_hynix.c b/drivers/mtd/nand/nand_hynix.c
-new file mode 100644
-index 0000000..0d051bf5
--- /dev/null
+++ b/drivers/mtd/nand/nand_hynix.c
@@ -0,0 +1,159 @@
@@ -193,11 +188,9 @@ index 0000000..0d051bf5
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Boris BREZILLON <b.brezillon.dev@gmail.com>");
+MODULE_DESCRIPTION("Hynix NAND specific code");
-diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
-index dd620c1..b786718 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
-@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] = {
+@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] =
{NULL}
};
@@ -205,7 +198,7 @@ index dd620c1..b786718 100644
/* Manufacturer IDs */
struct nand_manufacturers nand_manuf_ids[] = {
{NAND_MFR_TOSHIBA, "Toshiba"},
-@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids[] = {
+@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids
{NAND_MFR_NATIONAL, "National"},
{NAND_MFR_RENESAS, "Renesas"},
{NAND_MFR_STMICRO, "ST Micro"},
@@ -214,8 +207,6 @@ index dd620c1..b786718 100644
{NAND_MFR_MICRON, "Micron"},
{NAND_MFR_AMD, "AMD/Spansion"},
{NAND_MFR_MACRONIX, "Macronix"},
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 5844d6f..328aab2 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -959,6 +959,8 @@ struct nand_manufacturers {
diff --git a/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch b/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch
index 4ff54d7062..278edd4c19 100644
--- a/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch
+++ b/target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch
@@ -13,8 +13,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
include/linux/mtd/nand.h | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 328aab2..c20f35b 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -176,17 +176,17 @@ typedef enum {
diff --git a/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch b/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch
index c92398e4ba..bc428f6ac2 100644
--- a/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch
+++ b/target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch
@@ -22,11 +22,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/nand_base.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 51642c6..e3d4d8e 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mt
mtd->erasesize = (128 * 1024) <<
(((extid >> 1) & 0x04) | (extid & 0x03));
*busw = 0;
diff --git a/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch b/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch
index a150cbf2eb..186ce2ea99 100644
--- a/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch
+++ b/target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/nand_base.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index e3d4d8e..5c6f465 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -4437,9 +4437,11 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4437,9 +4437,11 @@ ident_done:
pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
type->name);
diff --git a/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch b/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch
index 6894cc5a92..3e293a983f 100644
--- a/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch
+++ b/target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch
@@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/nand_base.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 5c6f465..05ec786 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type)
+@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struc
}
static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
@@ -25,7 +23,7 @@ index 5c6f465..05ec786 100644
{
if (!strncmp(type->id, id_data, type->id_len)) {
mtd->writesize = type->pagesize;
-@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd
}
/*
@@ -47,7 +45,7 @@ index 5c6f465..05ec786 100644
* Get the flash and manufacturer id and lookup if the type is supported.
*/
static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
-@@ -4385,8 +4400,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4385,8 +4400,7 @@ ident_done:
* Check, if buswidth is correct. Hardware drivers should set
* chip correct!
*/
@@ -57,7 +55,7 @@ index 5c6f465..05ec786 100644
pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
pr_warn("bus width %d instead %d bit\n",
(chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
-@@ -4424,8 +4438,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4424,8 +4438,7 @@ ident_done:
return ERR_PTR(err);
}
diff --git a/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch b/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch
index d993c9db6c..f61e4a0787 100644
--- a/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch
+++ b/target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch
@@ -12,8 +12,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/sunxi_nand.c | 73 +++++++++++++++++++++++++++++++++++++------
2 files changed, 65 insertions(+), 9 deletions(-)
-diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
-index 8242470..7df88c6 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -525,6 +525,7 @@ config MTD_NAND_XWAY
@@ -24,8 +22,6 @@ index 8242470..7df88c6 100644
help
Enables support for NAND Flash chips on Allwinner SoCs.
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 6f93b29..c3e0473 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -202,6 +202,23 @@ struct sunxi_nand_hw_ecc {
@@ -52,7 +48,7 @@ index 6f93b29..c3e0473 100644
* 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(struct mtd_info *mtd,
+@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(st
int oob_required, int page)
{
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -61,7 +57,7 @@ index 6f93b29..c3e0473 100644
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(struct mtd_info *mtd,
+@@ -607,7 +624,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);
@@ -70,7 +66,7 @@ index 6f93b29..c3e0473 100644
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_read_page(struct mtd_info *mtd,
+@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
int page)
{
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -79,7 +75,7 @@ index 6f93b29..c3e0473 100644
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_write_page(struct mtd_info *mtd,
+@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
int oob_required)
{
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -88,7 +84,7 @@ index 6f93b29..c3e0473 100644
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 mtd_info *mtd, struct nand_ecc_ctrl *ecc,
+@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mt
ecc->strength = nand->ecc_strength_ds;
}
@@ -104,7 +100,7 @@ index 6f93b29..c3e0473 100644
ecc->mode = NAND_ECC_HW;
-@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc,
+@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mt
return 0;
}
@@ -145,7 +141,7 @@ index 6f93b29..c3e0473 100644
struct mtd_info *mtd;
struct nand_chip *nand;
int nsels;
-@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
+@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct d
return ret;
}
diff --git a/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch b/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch
index 5d37a38b52..e169bfae1f 100644
--- a/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch
+++ b/target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch
@@ -11,8 +11,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/sunxi_nand.c | 603 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 585 insertions(+), 18 deletions(-)
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index c3e0473..2f6ab39 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -206,10 +206,12 @@ struct sunxi_nand_hw_ecc {
@@ -28,7 +26,7 @@ index c3e0473..2f6ab39 100644
};
static inline struct sunxi_nand_part *
-@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *part)
+@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *par
}
/*
@@ -66,7 +64,7 @@ index c3e0473..2f6ab39 100644
unsigned long clk_rate;
int selected;
int nsels;
-@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct mtd_info *mtd, const uint8_t *buf,
+@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct m
}
}
@@ -252,7 +250,7 @@ index c3e0473..2f6ab39 100644
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(struct mtd_info *mtd,
+@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(st
int oob_required, int page)
{
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -296,7 +294,7 @@ index c3e0473..2f6ab39 100644
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(struct mtd_info *mtd,
+@@ -556,12 +788,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++) {
@@ -313,7 +311,7 @@ index c3e0473..2f6ab39 100644
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
-@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(st
if (ret)
return ret;
@@ -339,7 +337,7 @@ index c3e0473..2f6ab39 100644
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(struct mtd_info *mtd,
+@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(st
memcpy_fromio(buf + (i * ecc->size),
nfc->regs + NFC_RAM0_BASE, ecc->size);
@@ -349,7 +347,7 @@ index c3e0473..2f6ab39 100644
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(struct mtd_info *mtd,
+@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(st
if (ret)
return ret;
@@ -362,7 +360,7 @@ index c3e0473..2f6ab39 100644
}
}
-@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -606,11 +864,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);
@@ -378,7 +376,7 @@ index c3e0473..2f6ab39 100644
tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
tmp &= ~NFC_ECC_EN;
-@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -627,6 +888,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;
@@ -386,7 +384,7 @@ index c3e0473..2f6ab39 100644
int offset;
int ret;
u32 tmp;
-@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(s
writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
for (i = 0; i < ecc->steps; i++) {
@@ -451,7 +449,7 @@ index c3e0473..2f6ab39 100644
}
chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
-@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -671,6 +967,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;
@@ -461,7 +459,7 @@ index c3e0473..2f6ab39 100644
}
if (oob_required) {
-@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -679,11 +978,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);
@@ -477,7 +475,7 @@ index c3e0473..2f6ab39 100644
tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
tmp &= ~NFC_ECC_EN;
-@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(s
return 0;
}
@@ -554,7 +552,7 @@ index c3e0473..2f6ab39 100644
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_read_page(struct mtd_info *mtd,
+@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
for (i = 0; i < ecc->steps; i++) {
@@ -573,7 +571,7 @@ index c3e0473..2f6ab39 100644
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_read_page(struct mtd_info *mtd,
+@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
buf += ecc->size;
offset += ecc->size;
@@ -583,7 +581,7 @@ index c3e0473..2f6ab39 100644
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_read_page(struct mtd_info *mtd,
+@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
if (oob_required) {
chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -593,7 +591,7 @@ index c3e0473..2f6ab39 100644
oob += ecc->bytes + ecc->prepad;
}
-@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -750,10 +1120,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);
@@ -608,7 +606,7 @@ index c3e0473..2f6ab39 100644
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_write_page(struct mtd_info *mtd,
+@@ -768,6 +1141,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;
@@ -616,7 +614,7 @@ index c3e0473..2f6ab39 100644
uint8_t *oob = chip->oob_poi;
int offset = 0;
int ret;
-@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
for (i = 0; i < ecc->steps; i++) {
@@ -626,7 +624,7 @@ index c3e0473..2f6ab39 100644
offset += ecc->size;
/* Fill OOB data in */
-@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
4);
}
@@ -643,7 +641,7 @@ index c3e0473..2f6ab39 100644
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_write_page(struct mtd_info *mtd,
+@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
if (ret)
return ret;
@@ -653,7 +651,7 @@ index c3e0473..2f6ab39 100644
offset += ecc->bytes + ecc->prepad;
oob += ecc->bytes + ecc->prepad;
}
-@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -812,9 +1200,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);
@@ -666,7 +664,7 @@ index c3e0473..2f6ab39 100644
tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
tmp &= ~NFC_ECC_EN;
-@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
return 0;
}
@@ -795,7 +793,7 @@ index c3e0473..2f6ab39 100644
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_ctrl_init(struct mtd_info *mtd,
+@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ct
return 0;
}
@@ -836,7 +834,7 @@ index c3e0473..2f6ab39 100644
static void sunxi_nand_ecc_cleanup(struct nand_ecc_ctrl *ecc)
{
switch (ecc->mode) {
-@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
+@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse
if (ret)
goto err;
@@ -851,7 +849,7 @@ index c3e0473..2f6ab39 100644
return &part->part;
-@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
+@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct d
if (ret)
return ret;
@@ -882,7 +880,7 @@ index c3e0473..2f6ab39 100644
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(struct sunxi_nfc *nfc)
+@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(str
node);
nand_release(&chip->mtd);
sunxi_nand_ecc_cleanup(&chip->nand.ecc);
diff --git a/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch b/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch
index 51b0fbfd9a..126998f4b5 100644
--- a/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch
+++ b/target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch
@@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/sunxi_nand.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 2f6ab39..74f2caf 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(struct nand_part *part)
+@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(stru
struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
struct device_node *pp)
{
@@ -31,15 +29,16 @@ index 2f6ab39..74f2caf 100644
- ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
- if (ret)
- goto err;
-+ if (of_find_property(pp, "nand-ecc-mode", NULL)) {
-+ ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
-+ if (ret)
-+ goto err;
-
+-
- ret = sunxi_nand_rnd_init(master, &part->rnd, &part->ecc, pp);
- if (ret) {
- sunxi_nand_ecc_cleanup(&part->ecc);
- goto err;
++ if (of_find_property(pp, "nand-ecc-mode", NULL)) {
++ ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
++ if (ret)
++ goto err;
++
+ part->part.ecc = &part->ecc;
}
diff --git a/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch b/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch
index 19775eb5a6..25b9359daa 100644
--- a/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch
+++ b/target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch
@@ -14,11 +14,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/mtd/nand/sunxi_nand.c | 9 +++++++++
1 file changed, 9 insertions(+)
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 74f2caf..72ab770 100644
--- 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 device *dev, struct sunxi_nfc *nfc,
+@@ -1853,6 +1853,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;
diff --git a/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch
index 91c6efbc3f..9611720357 100644
--- a/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch
+++ b/target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun4i-a10.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index abea24e..e0a737f 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -924,6 +924,86 @@
+@@ -774,6 +774,86 @@
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
};
diff --git a/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch
index 290dbb762e..3193a6a3de 100644
--- a/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch
+++ b/target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun5i.dtsi | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
-diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi
-index f11efb7..1962ec9 100644
--- a/arch/arm/boot/dts/sun5i-a10s.dtsi
+++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
-@@ -201,6 +201,20 @@
- allwinner,drive = <SUN4I_PINCTRL_30_MA>;
- allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+@@ -656,4 +656,18 @@
+ clocks = <&ahb_gates 28>;
+ };
};
+
+ nand_cs2_pins_a: nand_cs@2 {
@@ -34,15 +32,11 @@ index f11efb7..1962ec9 100644
+ allwinner,pull = <0>;
+ };
};
-
- &sram_a {
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 772f8d8..0dc7c96 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -544,6 +544,44 @@
+@@ -528,6 +528,44 @@
allwinner,drive = <SUN4I_PINCTRL_30_MA>;
- allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
};
+
+ nand_pins_a: nand_base0@0 {
diff --git a/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch b/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch
index 5720a8b4df..0f3dc61a2a 100644
--- a/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch
+++ b/target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 0d7e600..6ec86c9 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -1164,6 +1164,86 @@
+@@ -978,6 +978,86 @@
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
};
diff --git a/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch b/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch
index b1a9b07402..ff8e093c49 100644
--- a/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch
+++ b/target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 11 +++++++++++
1 file changed, 11 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 6ec86c9..092adc6 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -641,6 +641,17 @@
+@@ -543,6 +543,17 @@
#dma-cells = <2>;
};
diff --git a/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch b/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch
index d5112609de..64473a93bf 100644
--- a/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch
+++ b/target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun4i-a10.dtsi | 11 +++++++++++
1 file changed, 11 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index e0a737f..7cd636d 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -514,6 +514,17 @@
+@@ -428,6 +428,17 @@
#dma-cells = <2>;
};
diff --git a/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch b/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch
index 163130e4d9..5c4e1f1b3b 100644
--- a/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch
+++ b/target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch
@@ -10,11 +10,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun5i.dtsi | 11 +++++++++++
1 file changed, 11 insertions(+)
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 0dc7c96..801ab01 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -353,6 +353,17 @@
+@@ -365,6 +365,17 @@
#dma-cells = <2>;
};
diff --git a/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch b/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch
index 72763644b6..6097ce30fe 100644
--- a/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch
+++ b/target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch
@@ -10,13 +10,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 59 +++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
-diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-index b3c234c..fd1e921 100644
--- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
+++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-@@ -155,3 +155,62 @@
- status = "okay";
- };
+@@ -201,3 +201,62 @@
+ status = "okay";
+ };
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch b/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch
index b632db1f1a..a7dee1301d 100644
--- a/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch
+++ b/target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-index 39a51d5..f35957d 100644
--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
+++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-@@ -142,3 +142,60 @@
- status = "okay";
- };
+@@ -245,3 +245,60 @@
+ status = "okay";
+ };
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch b/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch
index 1f742a9de1..4075a9e262 100644
--- a/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch
+++ b/target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 57 ++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-index 046a84d..a6faca3 100644
--- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
+++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-@@ -147,3 +147,60 @@
- regulator-max-microvolt = <3000000>;
- regulator-name = "avcc";
+@@ -215,3 +215,60 @@
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "avcc";
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch b/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch
index b948c203ae..2464408805 100644
--- a/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch
+++ b/target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-index b3c234c..fd1e921 100644
--- a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
+++ b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-@@ -155,3 +155,62 @@
- status = "okay";
- };
+@@ -189,3 +189,62 @@
+ status = "okay";
+ };
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch b/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch
index bb817c1241..93eb3ebad7 100644
--- a/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch
+++ b/target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-index b3c234c..fd1e921 100644
--- a/arch/arm/boot/dts/sun4i-a10-pcduino.dts
+++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-@@ -155,3 +155,62 @@
- status = "okay";
- };
+@@ -194,3 +194,62 @@
+ status = "okay";
+ };
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch b/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch
index 25418b5db5..81de87fd9e 100644
--- a/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch
+++ b/target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
-index b3c234c..fd1e921 100644
--- a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
+++ b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
-@@ -155,3 +155,62 @@
- status = "okay";
- };
+@@ -210,3 +210,62 @@
+ status = "okay";
+ };
};
+&nfc {
+ pinctrl-names = "default";
diff --git a/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch b/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch
index 9df18a3170..ff047fca92 100644
--- a/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch
+++ b/target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch
@@ -1,17 +1,15 @@
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index c2e1232..f561c68 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -3611,6 +3611,8 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type)
+@@ -4249,6 +4249,8 @@ static inline bool is_full_id_nand(struc
static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
- struct nand_flash_dev *type, u8 *id_data, int *busw)
+ struct nand_flash_dev *type, const u8 *id_data, int *busw)
{
+ int mode;
+
if (!strncmp(type->id, id_data, type->id_len)) {
mtd->writesize = type->pagesize;
mtd->erasesize = type->erasesize;
-@@ -3621,8 +3623,9 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4259,8 +4261,9 @@ static bool find_full_id_nand(struct mtd
chip->options |= type->options;
chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
chip->ecc_step_ds = NAND_ECC_STEP(type);
@@ -23,11 +21,9 @@ index c2e1232..f561c68 100644
*busw = type->options & NAND_BUSWIDTH_16;
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 5095a32..72e4135 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1083,7 +1083,7 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip,
+@@ -1427,7 +1427,7 @@ static int sunxi_nand_chip_init_timings(
mode = onfi_get_async_timing_mode(&chip->nand);
if (mode == ONFI_TIMING_MODE_UNKNOWN) {
@@ -36,7 +32,7 @@ index 5095a32..72e4135 100644
} else {
uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {};
-@@ -1097,9 +1097,10 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip,
+@@ -1441,9 +1441,10 @@ static int sunxi_nand_chip_init_timings(
feature);
if (ret)
return ret;
@@ -48,11 +44,9 @@ index 5095a32..72e4135 100644
if (IS_ERR(timings))
return PTR_ERR(timings);
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 3d4ea7e..2eb92a3 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
-@@ -536,6 +536,55 @@ struct nand_buffers {
+@@ -612,6 +612,55 @@ struct nand_buffers {
uint8_t *databuf;
};
@@ -108,7 +102,7 @@ index 3d4ea7e..2eb92a3 100644
/**
* struct nand_chip - NAND Private Flash Chip Data
* @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the
-@@ -600,11 +649,7 @@ struct nand_buffers {
+@@ -676,11 +725,7 @@ struct nand_buffers {
* @ecc_step_ds: [INTERN] ECC step required by the @ecc_strength_ds,
* also from the datasheet. It is the recommended ECC step
* size, if known; if unknown, set to zero.
@@ -121,7 +115,7 @@ index 3d4ea7e..2eb92a3 100644
* @numchips: [INTERN] number of physical chips
* @chipsize: [INTERN] the size of one chip for multichip arrays
* @pagemask: [INTERN] page number mask = number of (pages / chip) - 1
-@@ -689,7 +734,7 @@ struct nand_chip {
+@@ -769,7 +814,7 @@ struct nand_chip {
uint8_t bits_per_cell;
uint16_t ecc_strength_ds;
uint16_t ecc_step_ds;
@@ -130,9 +124,9 @@ index 3d4ea7e..2eb92a3 100644
int badblockpos;
int badblockbits;
-@@ -975,55 +1020,6 @@ static inline int jedec_feature(struct nand_chip *chip)
- : 0;
- }
+@@ -1156,55 +1201,6 @@ struct ofnandpart_data {
+ int ofnandpart_parse(struct mtd_info *master,
+ const struct ofnandpart_data *data);
-/*
- * struct nand_sdr_timings - SDR NAND chip timings
diff --git a/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch b/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch
index d7a396396f..03c7f265d2 100644
--- a/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch
+++ b/target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch
@@ -1,8 +1,6 @@
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index f561c68..8e636df 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
-@@ -3624,8 +3624,13 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4262,8 +4262,13 @@ static bool find_full_id_nand(struct mtd
chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
chip->ecc_step_ds = NAND_ECC_STEP(type);
@@ -18,11 +16,9 @@ index f561c68..8e636df 100644
*busw = type->options & NAND_BUSWIDTH_16;
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 2eb92a3..7d9e599 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
-@@ -863,6 +863,7 @@ struct nand_flash_dev {
+@@ -988,6 +988,7 @@ struct nand_flash_dev {
uint16_t step_ds;
} ecc;
int onfi_timing_mode_default;
diff --git a/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch b/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch
index e2f591e999..49ec6b0c19 100644
--- a/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch
+++ b/target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch
@@ -1,5 +1,3 @@
-diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
-index dd620c1..15b4a03 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
@@ -19,6 +19,49 @@
@@ -52,7 +50,7 @@ index dd620c1..15b4a03 100644
* The chip ID list:
* name, device ID, page size, chip size in MiB, eraseblock size, options
*
-@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] = {
+@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] =
{ .id = {0xad, 0xde, 0x94, 0xda, 0x74, 0xc4} },
SZ_8K, SZ_8K, SZ_2M, 0, 6, 640, NAND_ECC_INFO(40, SZ_1K),
4 },
diff --git a/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch b/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch
index 362ed698a5..8c49dee746 100644
--- a/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch
+++ b/target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch
@@ -13,11 +13,9 @@ Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
drivers/mtd/nand/sunxi_nand.c | 38 +++++++++++++++++++++-----------------
1 file changed, 21 insertions(+), 17 deletions(-)
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 72ab770..3668197 100644
--- 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(struct mtd_info *mtd,
+@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
for (i = 0; i < ecc->steps; i++) {
bool rndactiv = false;
@@ -26,7 +24,7 @@ index 72ab770..3668197 100644
if (i)
chip->cmdfunc(mtd, NAND_CMD_RNDIN, i * ecc->size, -1);
-@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(s
offset = layout->eccpos[i * ecc->bytes] - 4 + mtd->writesize;
/* Fill OOB data in */
@@ -49,7 +47,7 @@ index 72ab770..3668197 100644
if (i) {
cnt = ecc->bytes + 4;
-@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(s
if (rndactiv) {
/* pre randomize to generate FF patterns on the NAND */
if (!i) {
@@ -69,7 +67,7 @@ index 72ab770..3668197 100644
}
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(struct mtd_info *mtd,
+@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(s
writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
}
@@ -78,7 +76,7 @@ index 72ab770..3668197 100644
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_write_page(struct mtd_info *mtd,
+@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
/* Fill OOB data in */
if (oob_required) {
tmp = 0xffffffff;
diff --git a/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch b/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch
index 295865bbe5..76bc222738 100644
--- a/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch
+++ b/target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch
@@ -22,11 +22,9 @@ Changes in v2:
drivers/mmc/host/sunxi-mmc.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
-diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
-index 4d3e1ff..daa90b7 100644
--- a/drivers/mmc/host/sunxi-mmc.c
+++ b/drivers/mmc/host/sunxi-mmc.c
-@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mmc_host *mmc)
+@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mm
return 0;
}
@@ -51,7 +49,7 @@ index 4d3e1ff..daa90b7 100644
static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host,
struct mmc_data *data)
{
-@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(struct sunxi_mmc_host *host,
+@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(s
u32 arg, cmd_val, ri;
unsigned long expire = jiffies + msecs_to_jiffies(1000);
@@ -60,7 +58,7 @@ index 4d3e1ff..daa90b7 100644
cmd_val = SDXC_START | SDXC_RESP_EXPIRE |
SDXC_STOP_ABORT_CMD | SDXC_CHECK_RESPONSE_CRC;
-@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en)
+@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct s
{
unsigned long expire = jiffies + msecs_to_jiffies(250);
u32 rval;
@@ -72,17 +70,17 @@ index 4d3e1ff..daa90b7 100644
rval = mmc_readl(host, REG_CLKCR);
rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON);
-@@ -785,6 +810,13 @@ static void sunxi_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
+@@ -784,6 +809,13 @@ static void sunxi_mmc_request(struct mmc
+ mmc_request_done(mmc, mrq);
return;
}
-
++
+ ret = sunxi_mmc_wait_card_ready(host);
+ if (ret) {
+ mrq->cmd->error = ret;
+ mmc_request_done(mmc, mrq);
+ return;
+ }
-+
+
if (data) {
ret = sunxi_mmc_map_dma(host, data);
- if (ret < 0) {
diff --git a/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch b/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch
index 7ca26b0cdb..f2f799e734 100644
--- a/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch
+++ b/target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch
@@ -1,8 +1,6 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 6a63f30..f5f384c 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -107,7 +107,7 @@
+@@ -111,7 +111,7 @@
720000 1200000
528000 1100000
312000 1000000
diff --git a/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch b/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch
index 3199cd9e82..2545f8aacb 100644
--- a/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch
+++ b/target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch
@@ -9,18 +9,14 @@ to other sun8i family SoCs like the A23.
Signed-off-by: Jens Kuske <jenskuske@gmail.com>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
-diff --git a/Documentation/devicetree/bindings/arm/sunxi.txt b/Documentation/devicetree/bindings/arm/sunxi.txt
-index 42941fd..3cb4b94 100644
--- a/Documentation/devicetree/bindings/arm/sunxi.txt
+++ b/Documentation/devicetree/bindings/arm/sunxi.txt
-@@ -9,4 +9,5 @@ using one of the following compatible strings:
+@@ -9,4 +9,5 @@ using one of the following compatible st
allwinner,sun6i-a31
allwinner,sun7i-a20
allwinner,sun8i-a23
+ allwinner,sun8i-h3
allwinner,sun9i-a80
-diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
-index 81502b9..4efe2d4 100644
--- a/arch/arm/mach-sunxi/Kconfig
+++ b/arch/arm/mach-sunxi/Kconfig
@@ -35,7 +35,7 @@ config MACH_SUN7I
@@ -32,8 +28,6 @@ index 81502b9..4efe2d4 100644
default ARCH_SUNXI
select ARM_GIC
select MFD_SUN6I_PRCM
-diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c
-index 1bc811a..8270902 100644
--- a/arch/arm/mach-sunxi/sunxi.c
+++ b/arch/arm/mach-sunxi/sunxi.c
@@ -67,10 +67,12 @@ MACHINE_END
@@ -50,6 +44,3 @@ index 1bc811a..8270902 100644
.dt_compat = sun8i_board_dt_compat,
.init_late = sunxi_dt_cpufreq_init,
MACHINE_END
---
-cgit v0.10.2
-
diff --git a/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch b/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch
index 6610966885..df434a41e8 100644
--- a/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch
+++ b/target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch
@@ -1,8 +1,6 @@
-diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
-index 9cdcba24d..d13c136 100644
--- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt
+++ b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
-@@ -4,7 +4,10 @@ This driver follows the generic DMA bindings defined in dma.txt.
+@@ -4,7 +4,10 @@ This driver follows the generic DMA bind
Required properties:
@@ -14,11 +12,9 @@ index 9cdcba24d..d13c136 100644
- reg: Should contain the registers base address and length
- interrupts: Should contain a reference to the interrupt used by this device
- clocks: Should contain a reference to the parent AHB clock
-diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
-index 11e5365..842ff97 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
-@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
+@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23
.nr_max_vchans = 37,
};
diff --git a/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch b/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch
index ea1e100a06..471fb2ad6e 100644
--- a/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch
+++ b/target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch
@@ -55,9 +55,6 @@ Changes from v1:
create mode 100644 Documentation/devicetree/bindings/dma/sun4i-dma.txt
create mode 100644 drivers/dma/sun4i-dma.c
-diff --git a/Documentation/devicetree/bindings/dma/sun4i-dma.txt b/Documentation/devicetree/bindings/dma/sun4i-dma.txt
-new file mode 100644
-index 0000000..f1634a2
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/sun4i-dma.txt
@@ -0,0 +1,46 @@
@@ -107,11 +104,9 @@ index 0000000..f1634a2
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
-diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
-index fd7ac13..12372c2 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
-@@ -443,6 +443,17 @@ config XGENE_DMA
+@@ -444,6 +444,17 @@ config XGENE_DMA
help
Enable support for the APM X-Gene SoC DMA engine.
@@ -129,8 +124,6 @@ index fd7ac13..12372c2 100644
config DMA_ENGINE
bool
-diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
-index 69f77d5..3eba5e9 100644
--- a/drivers/dma/Makefile
+++ b/drivers/dma/Makefile
@@ -54,3 +54,4 @@ obj-$(CONFIG_NBPFAXI_DMA) += nbpfaxi.o
@@ -138,9 +131,6 @@ index 69f77d5..3eba5e9 100644
obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o
obj-$(CONFIG_XGENE_DMA) += xgene-dma.o
+obj-$(CONFIG_SUN4I_DMA) += sun4i-dma.o
-diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c
-new file mode 100644
-index 0000000..a8d55518
--- /dev/null
+++ b/drivers/dma/sun4i-dma.c
@@ -0,0 +1,1235 @@
diff --git a/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch b/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch
index 150be4192e..f4b1b5c37c 100644
--- a/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch
+++ b/target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch
@@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2 files changed, 250 insertions(+)
create mode 100644 drivers/clk/sunxi/clk-a10-pll2.c
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index 058f273..eb36c38 100644
--- a/drivers/clk/sunxi/Makefile
+++ b/drivers/clk/sunxi/Makefile
@@ -4,6 +4,7 @@
@@ -30,9 +28,6 @@ index 058f273..eb36c38 100644
obj-y += clk-a20-gmac.o
obj-y += clk-mod0.o
obj-y += clk-sun8i-mbus.o
-diff --git a/drivers/clk/sunxi/clk-a10-pll2.c b/drivers/clk/sunxi/clk-a10-pll2.c
-new file mode 100644
-index 0000000..bdbf1e9
--- /dev/null
+++ b/drivers/clk/sunxi/clk-a10-pll2.c
@@ -0,0 +1,249 @@
diff --git a/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch b/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch
index 3663610f2a..c19d7a6d88 100644
--- a/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch
+++ b/target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch
@@ -17,8 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2 files changed, 42 insertions(+)
create mode 100644 drivers/clk/sunxi/clk-a10-codec.c
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index eb36c38..6fa845e 100644
--- a/drivers/clk/sunxi/Makefile
+++ b/drivers/clk/sunxi/Makefile
@@ -3,6 +3,7 @@
@@ -29,9 +27,6 @@ index eb36c38..6fa845e 100644
obj-y += clk-a10-hosc.o
obj-y += clk-a10-pll2.o
obj-y += clk-a20-gmac.o
-diff --git a/drivers/clk/sunxi/clk-a10-codec.c b/drivers/clk/sunxi/clk-a10-codec.c
-new file mode 100644
-index 0000000..c70acbf
--- /dev/null
+++ b/drivers/clk/sunxi/clk-a10-codec.c
@@ -0,0 +1,41 @@
diff --git a/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch b/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch
index 87ec3feb2a..a6387845d9 100644
--- a/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch
+++ b/target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch
@@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2 files changed, 70 insertions(+)
create mode 100644 drivers/clk/sunxi/clk-a10-mod1.c
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index 6fa845e..960eeab 100644
--- a/drivers/clk/sunxi/Makefile
+++ b/drivers/clk/sunxi/Makefile
@@ -5,6 +5,7 @@
@@ -30,9 +28,6 @@ index 6fa845e..960eeab 100644
obj-y += clk-a10-pll2.o
obj-y += clk-a20-gmac.o
obj-y += clk-mod0.o
-diff --git a/drivers/clk/sunxi/clk-a10-mod1.c b/drivers/clk/sunxi/clk-a10-mod1.c
-new file mode 100644
-index 0000000..1357641
--- /dev/null
+++ b/drivers/clk/sunxi/clk-a10-mod1.c
@@ -0,0 +1,69 @@
diff --git a/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch b/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch
index 0d3de3c203..f7ddfa142d 100644
--- a/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch
+++ b/target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch
@@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++
3 files changed, 24 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 30f663a..fab13af 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -195,6 +195,14 @@
+@@ -162,6 +162,14 @@
clock-output-names = "pll1";
};
@@ -36,11 +34,9 @@ index 30f663a..fab13af 100644
pll4: clk@01c20018 {
#clock-cells = <0>;
compatible = "allwinner,sun4i-a10-pll1-clk";
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 53d3ead..a4b6a66 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -102,6 +102,14 @@
+@@ -136,6 +136,14 @@
clock-output-names = "pll1";
};
@@ -55,11 +51,9 @@ index 53d3ead..a4b6a66 100644
pll4: clk@01c20018 {
#clock-cells = <0>;
compatible = "allwinner,sun4i-a10-pll1-clk";
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 7549f1b..12d9ffd 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -199,6 +199,14 @@
+@@ -203,6 +203,14 @@
clock-output-names = "pll1";
};
diff --git a/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch b/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch
index 05ddd4babc..d80eae7e0b 100644
--- a/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch
+++ b/target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch
@@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++
3 files changed, 24 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index fab13af..abea24e 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -454,6 +454,14 @@
+@@ -420,6 +420,14 @@
clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
clock-output-names = "spi3";
};
@@ -36,11 +34,9 @@ index fab13af..abea24e 100644
};
soc@01c00000 {
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index a4b6a66..5c0edd6 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -292,6 +292,14 @@
+@@ -350,6 +350,14 @@
clock-output-names = "usb_ohci0", "usb_phy";
};
@@ -55,11 +51,9 @@ index a4b6a66..5c0edd6 100644
mbus_clk: clk@01c2015c {
#clock-cells = <0>;
compatible = "allwinner,sun5i-a13-mbus-clk";
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 12d9ffd..400e696 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -468,6 +468,14 @@
+@@ -464,6 +464,14 @@
clock-output-names = "spi3";
};
diff --git a/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch b/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch
index 5727c56e24..38f785684a 100644
--- a/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch
+++ b/target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch
@@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 400e696..a0d18b2 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -450,6 +450,29 @@
+@@ -447,6 +447,29 @@
clock-output-names = "ir1";
};
@@ -48,8 +46,8 @@ index 400e696..a0d18b2 100644
+ };
usb_clk: clk@01c200cc {
#clock-cells = <1>;
- #reset-cells = <1>;
-@@ -468,6 +491,22 @@
+ #reset-cells = <1>;
+@@ -464,6 +487,22 @@
clock-output-names = "spi3";
};
diff --git a/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch b/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch
index 223993fb17..79a93f5f8a 100644
--- a/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch
+++ b/target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch
@@ -8,11 +8,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index a0d18b2..1cced70 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -470,7 +470,7 @@
+@@ -467,7 +467,7 @@
#clock-cells = <0>;
compatible = "allwinner,sun4i-a10-mod1-clk";
reg = <0x01c200c0 0x4>;
diff --git a/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch b/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch
index a83cda2f73..b73884f7c2 100644
--- a/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch
+++ b/target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch
@@ -20,8 +20,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
create mode 100644 sound/soc/sunxi/Makefile
create mode 100644 sound/soc/sunxi/sunxi-codec.c
-diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
-index 3ba52da..87dbf48 100644
--- a/sound/soc/Kconfig
+++ b/sound/soc/Kconfig
@@ -53,6 +53,7 @@ source "sound/soc/samsung/Kconfig"
@@ -32,8 +30,6 @@ index 3ba52da..87dbf48 100644
source "sound/soc/tegra/Kconfig"
source "sound/soc/txx9/Kconfig"
source "sound/soc/ux500/Kconfig"
-diff --git a/sound/soc/Makefile b/sound/soc/Makefile
-index 974ba70..39011b8 100644
--- a/sound/soc/Makefile
+++ b/sound/soc/Makefile
@@ -34,6 +34,7 @@ obj-$(CONFIG_SND_SOC) += samsung/
@@ -44,9 +40,6 @@ index 974ba70..39011b8 100644
obj-$(CONFIG_SND_SOC) += tegra/
obj-$(CONFIG_SND_SOC) += txx9/
obj-$(CONFIG_SND_SOC) += ux500/
-diff --git a/sound/soc/sunxi/Kconfig b/sound/soc/sunxi/Kconfig
-new file mode 100644
-index 0000000..79511ae
--- /dev/null
+++ b/sound/soc/sunxi/Kconfig
@@ -0,0 +1,10 @@
@@ -60,17 +53,11 @@ index 0000000..79511ae
+ default y
+
+endmenu
-diff --git a/sound/soc/sunxi/Makefile b/sound/soc/sunxi/Makefile
-new file mode 100644
-index 0000000..b8950d3
--- /dev/null
+++ b/sound/soc/sunxi/Makefile
@@ -0,0 +1,2 @@
+obj-$(CONFIG_SND_SUNXI_SOC_CODEC) += sunxi-codec.o
+
-diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c
-new file mode 100644
-index 0000000..67f978e
--- /dev/null
+++ b/sound/soc/sunxi/sunxi-codec.c
@@ -0,0 +1,802 @@
diff --git a/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch b/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch
index 120220ce3d..b3668ded3d 100644
--- a/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch
+++ b/target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
sound/soc/sunxi/sunxi-codec.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
-diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c
-index 67f978e..77a191b 100644
--- a/sound/soc/sunxi/sunxi-codec.c
+++ b/sound/soc/sunxi/sunxi-codec.c
-@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct snd_pcm_substream *substream,
+@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct sn
regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION);
}
@@ -25,7 +23,7 @@ index 67f978e..77a191b 100644
/* send last sample when DAC FIFO under run */
regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_SEND_LASAT, 0x0 << SUNXI_DAC_FIFOC_SEND_LASAT);
} else {
-@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct snd_pcm_substream *substream,
+@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct
regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 7 << SUNXI_DAC_FIFOC_DAC_FS, hwrate << SUNXI_DAC_FIFOC_DAC_FS);
regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_MONO_EN, is_mono << SUNXI_DAC_FIFOC_MONO_EN);
regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS, is_24bit << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS);
diff --git a/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch b/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch
index 8500e9dc6d..43997e189a 100644
--- a/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch
+++ b/target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20.dtsi | 12 ++++++++++++
1 file changed, 12 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 1cced70..a99bbae 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -1214,6 +1214,18 @@
+@@ -1182,6 +1182,18 @@
status = "disabled";
};
diff --git a/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch b/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch
index c59f61b57d..8b4dbe49ef 100644
--- a/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch
+++ b/target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch
@@ -1,7 +1,6 @@
-diff -ruN old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
---- old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts 2015-07-10 18:50:06.000000000 +0200
-+++ new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts 2015-08-02 11:45:06.000000000 +0200
-@@ -245,3 +245,10 @@
+--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
++++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
+@@ -302,3 +302,10 @@
};
};
diff --git a/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch b/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch
index 0f54548dcd..e296638bf7 100644
--- a/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch
+++ b/target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch
@@ -8,13 +8,11 @@ Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-index 39a51d5..5f9f0b9 100644
--- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-@@ -84,6 +84,13 @@
- status = "okay";
- };
+@@ -180,6 +180,13 @@
+
+ #include "axp209.dtsi"
+&codec {
+ routing =
diff --git a/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch b/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch
index 7dc0b10c0e..afa42e1d9c 100644
--- a/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch
+++ b/target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 7 +++++++
1 file changed, 7 insertions(+)
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-index 4611e2f..d05e06d 100644
--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-@@ -105,6 +105,13 @@
- status = "okay";
- };
+@@ -257,6 +257,13 @@
+
+ #include "axp209.dtsi"
+&codec {
+ routing =
diff --git a/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch b/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch
index 5fc9e5aa66..c90156d5ca 100644
--- a/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch
+++ b/target/linux/sunxi/patches-4.1/170-musb-add-driver.patch
@@ -26,9 +26,6 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
create mode 100644 Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
create mode 100644 drivers/usb/musb/sunxi.c
-diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-new file mode 100644
-index 0000000..9254a6c
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
@@ -0,0 +1,27 @@
@@ -59,8 +56,6 @@ index 0000000..9254a6c
+ extcon = <&usbphy 0>;
+ status = "disabled";
+ };
-diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
-index 39db8b6..37081ed 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -5,7 +5,7 @@
@@ -97,11 +92,9 @@ index 39db8b6..37081ed 100644
config USB_MUSB_DAVINCI
tristate "DaVinci"
depends on ARCH_DAVINCI_DMx
-diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
-index ba49501..f95befe 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
-@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx.o
+@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX) += da8xx.
obj-$(CONFIG_USB_MUSB_BLACKFIN) += blackfin.o
obj-$(CONFIG_USB_MUSB_UX500) += ux500.o
obj-$(CONFIG_USB_MUSB_JZ4740) += jz4740.o
@@ -109,9 +102,6 @@ index ba49501..f95befe 100644
obj-$(CONFIG_USB_MUSB_AM335X_CHILD) += musb_am335x.o
-diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
-new file mode 100644
-index 0000000..00d7248
--- /dev/null
+++ b/drivers/usb/musb/sunxi.c
@@ -0,0 +1,703 @@
diff --git a/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch b/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch
index 374dbc4ddb..af958f2b4f 100644
--- a/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch
+++ b/target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch
@@ -15,11 +15,9 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/sunxi.c | 50 +++++++++++++++++++---
2 files changed, 46 insertions(+), 7 deletions(-)
-diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-index 9254a6c..fde180b 100644
--- a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
+++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG controller
+@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG control
-------------------------------------------
Required properties:
@@ -31,8 +29,6 @@ index 9254a6c..fde180b 100644
- interrupts : interrupt to which the musb controller is connected
- interrupt-names : must be "mc"
- phys : phy specifier for the otg phy
-diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
-index 00d7248..df2f75e 100644
--- a/drivers/usb/musb/sunxi.c
+++ b/drivers/usb/musb/sunxi.c
@@ -26,6 +26,7 @@
@@ -60,7 +56,7 @@ index 00d7248..df2f75e 100644
struct phy *phy;
struct platform_device *usb_phy;
struct usb_phy *xceiv;
-@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb *
musb->phy = glue->phy;
musb->xceiv = glue->xceiv;
@@ -86,7 +82,7 @@ index 00d7248..df2f75e 100644
writeb(SUNXI_MUSB_VEND0_PIO_MODE, musb->mregs + SUNXI_MUSB_VEND0);
/* Register notifier before calling phy_init() */
-@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb *
ret = extcon_register_notifier(glue->extcon, EXTCON_USB_HOST,
&glue->host_nb);
if (ret)
@@ -95,7 +91,7 @@ index 00d7248..df2f75e 100644
}
ret = phy_init(glue->phy);
-@@ -273,10 +285,14 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -273,10 +285,14 @@ error_unregister_notifier:
if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST,
&glue->host_nb);
@@ -111,7 +107,7 @@ index 00d7248..df2f75e 100644
return ret;
}
-@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb *musb)
+@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb *
extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST,
&glue->host_nb);
@@ -125,7 +121,7 @@ index 00d7248..df2f75e 100644
return 0;
}
-@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platform_device *pdev)
+@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platf
INIT_WORK(&glue->work, sunxi_musb_work);
glue->host_nb.notifier_call = sunxi_musb_host_notifier;
@@ -138,7 +134,7 @@ index 00d7248..df2f75e 100644
glue->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(glue->clk)) {
dev_err(&pdev->dev, "Error getting clock: %ld\n",
-@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platform_device *pdev)
+@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platf
return PTR_ERR(glue->clk);
}
@@ -156,7 +152,7 @@ index 00d7248..df2f75e 100644
glue->phy = devm_phy_get(&pdev->dev, "usb");
if (IS_ERR(glue->phy)) {
if (PTR_ERR(glue->phy) == -EPROBE_DEFER)
-@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct platform_device *pdev)
+@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct plat
static const struct of_device_id sunxi_musb_match[] = {
{ .compatible = "allwinner,sun4i-a10-musb", },
diff --git a/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch b/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch
index 8a6ac4877c..5ce12f3c25 100644
--- a/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch
+++ b/target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch
@@ -1,8 +1,6 @@
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20.dtsi
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -679,6 +679,14 @@
+--- a/arch/arm/boot/dts/sun7i-a20.dtsi
++++ b/arch/arm/boot/dts/sun7i-a20.dtsi
+@@ -745,6 +745,14 @@
status = "disabled";
};
diff --git a/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch b/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch
index 5478e64fc3..ab1879dbc8 100644
--- a/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch
+++ b/target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch
@@ -15,11 +15,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/arm/boot/dts/sun4i-a10.dtsi | 8 ++++++++
1 file changed, 8 insertions(+)
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 61c03d1..551e3d1 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -643,6 +643,14 @@
+@@ -591,6 +591,14 @@
status = "disabled";
};
diff --git a/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch b/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch
index de5be3ddac..1b66c97366 100644
--- a/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch
+++ b/target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch
@@ -27,11 +27,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss-hash.c
create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss.h
-diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
-index 4044125..07bc7aa 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
-@@ -480,4 +480,21 @@ config CRYPTO_DEV_IMGTEC_HASH
+@@ -460,4 +460,21 @@ config CRYPTO_DEV_IMGTEC_HASH
hardware hash accelerator. Supporting MD5/SHA1/SHA224/SHA256
hashing algorithms.
@@ -53,26 +51,18 @@ index 4044125..07bc7aa 100644
+ will be called sun4i-ss.
+
endif # CRYPTO_HW
-diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
-index e35c07a..c3ced6f 100644
--- a/drivers/crypto/Makefile
+++ b/drivers/crypto/Makefile
-@@ -28,3 +28,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
+@@ -27,3 +27,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
obj-$(CONFIG_CRYPTO_DEV_QAT) += qat/
obj-$(CONFIG_CRYPTO_DEV_QCE) += qce/
obj-$(CONFIG_CRYPTO_DEV_VMX) += vmx/
+obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sunxi-ss/
-diff --git a/drivers/crypto/sunxi-ss/Makefile b/drivers/crypto/sunxi-ss/Makefile
-new file mode 100644
-index 0000000..8f4c7a2
--- /dev/null
+++ b/drivers/crypto/sunxi-ss/Makefile
@@ -0,0 +1,2 @@
+obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sun4i-ss.o
+sun4i-ss-y += sun4i-ss-core.o sun4i-ss-hash.o sun4i-ss-cipher.o
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
-new file mode 100644
-index 0000000..e070c31
--- /dev/null
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
@@ -0,0 +1,542 @@
@@ -618,9 +608,6 @@ index 0000000..e070c31
+ memcpy(op->key, key, keylen);
+ return 0;
+}
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
-new file mode 100644
-index 0000000..0b79b58
--- /dev/null
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
@@ -0,0 +1,403 @@
@@ -1027,9 +1014,6 @@ index 0000000..0b79b58
+MODULE_DESCRIPTION("Allwinner Security System cryptographic accelerator");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corentin LABBE <clabbe.montjoie@gmail.com>");
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-hash.c b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c
-new file mode 100644
-index 0000000..ff80314
--- /dev/null
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c
@@ -0,0 +1,492 @@
@@ -1525,9 +1509,6 @@ index 0000000..ff80314
+
+ return sun4i_hash_final(areq);
+}
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss.h b/drivers/crypto/sunxi-ss/sun4i-ss.h
-new file mode 100644
-index 0000000..db18b255
--- /dev/null
+++ b/drivers/crypto/sunxi-ss/sun4i-ss.h
@@ -0,0 +1,199 @@
diff --git a/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch b/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch
index d47cc0b416..0322387aa7 100644
--- a/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch
+++ b/target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch
@@ -10,10 +10,8 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts | 11 +++++++++++
2 files changed, 22 insertions(+)
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
@@ -71,12 +71,23 @@
};
@@ -38,10 +36,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
};
usbphy: phy@01c13400 {
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
+--- a/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
++++ b/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
@@ -69,12 +69,23 @@
};
diff --git a/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch b/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch
index ca09504e3a..ae5576fa5d 100644
--- a/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch
+++ b/target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch
@@ -14,10 +14,8 @@ GPIO, but this is not supported in this patch.
arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 36 ++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
@@ -88,6 +88,20 @@
interrupts = <10 8>; /* PH10 / EINT10 */
interrupt-names = "host-wake";
diff --git a/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch b/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch
index e60aece1e6..83de5fd9f3 100644
--- a/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch
+++ b/target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch
@@ -1,7 +1,5 @@
-Index: linux-4.1.3/arch/arm/boot/dts/Makefile
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/Makefile
-+++ linux-4.1.3/arch/arm/boot/dts/Makefile
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
@@ -554,6 +554,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \
sun7i-a20-cubietruck.dtb \
sun7i-a20-hummingbird.dtb \
@@ -10,10 +8,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/Makefile
sun7i-a20-m3.dtb \
sun7i-a20-olinuxino-lime.dtb \
sun7i-a20-olinuxino-lime2.dtb \
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
-===================================================================
--- /dev/null
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
++++ b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2015 Daniel Golle <daniel@makrotopia.org>