From b052b62efc3d49f61eb12d48b16851a48cfb928c Mon Sep 17 00:00:00 2001
From: Christian Lamparter <chunkeey@gmail.com>
Date: Sat, 7 Mar 2020 16:58:32 +0100
Subject: [PATCH] apm821xx: 4.14: remove kernel config and patches

This patch removes the 4.14 kernel support from the apm821xx target.
The 4.19 kernel has been available and stable for a while and the 5.4
kernel support has been tested successfully on real hardware as well.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
---
 target/linux/apm821xx/config-4.14             | 366 -----------
 ...-remove-unused-definitions-and-write.patch | 120 ----
 ...-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch |  31 -
 ...-remove-extern-statement-before-func.patch |  76 ---
 ...-remove-double-assignment-of-pd_uinf.patch |  24 -
 ...-fix-dynamic_sa_ctl-s-sa_contents-de.patch |  87 ---
 ...-move-and-refactor-dynamic_contents-.patch | 234 -------
 ...-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch | 248 -------
 ...x-refactor-crypto4xx_copy_pkt_to_dst.patch | 171 -----
 ...-replace-crypto4xx_dev-s-scatter_buf.patch |  59 --
 ...rypto4xx-pointer-arithmetic-overhaul.patch | 373 -----------
 ...to4xx-wire-up-hmac_mc-to-hmac_muting.patch |  25 -
 ...pto-crypto4xx-fix-off-by-one-AES-OFB.patch |  49 --
 ...4xx-fix-type-mismatch-compiler-error.patch |  29 -
 ...-crypto4xx-add-backlog-queue-support.patch | 161 -----
 ...-use-the-correct-LE32-format-for-IV-.patch | 236 -------
 ...rypto4xx-overhaul-crypto4xx_build_pd.patch | 535 ---------------
 ...rypto-crypto4xx-fix-various-warnings.patch |  62 --
 ...rypto4xx-fix-stalls-under-heavy-load.patch | 112 ----
 ...-simplify-sa-and-state-context-acqui.patch | 209 ------
 ...o-crypto4xx-prepare-for-AEAD-support.patch | 617 ------------------
 ...crypto-crypto4xx-add-aes-ccm-support.patch | 256 --------
 ...crypto-crypto4xx-add-aes-gcm-support.patch | 220 -------
 ...-shuffle-iomap-in-front-of-request_i.patch |  71 --
 ...o-crypto4xx-support-Revision-B-parts.patch | 150 -----
 ...to-crypto4xx-fix-missing-irq-devname.patch |  37 --
 ...04-crypto-crypto4xx-kill-MODULE_NAME.patch |  47 --
 ...-perform-aead-icv-check-in-the-drive.patch | 146 -----
 ...ng-memory-allocator-instead-of-alloc.patch |  39 --
 ...-crypto4xx-performance-optimizations.patch | 159 -----
 ...crypto-crypto4xx-convert-to-skcipher.patch | 578 ----------------
 ...-0004-crypto-crypto4xx-avoid-VLA-use.patch |  61 --
 ...crypto-crypto4xx-add-aes-ctr-support.patch | 247 -------
 ...rypto4xx-extend-aead-fallback-checks.patch | 102 ---
 ...-put-temporary-dst-sg-into-request-c.patch | 157 -----
 .../023-0001-treewide-kzalloc-kcalloc.patch   | 447 -------------
 ...remove-useless-setting-of-type-flags.patch |  84 ---
 ...-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch |  34 -
 ...4xx_core-don-t-abuse-__dma_sync_page.patch |  30 -
 ...s-tree-phase-out-dma_zalloc_coherent.patch |  40 --
 ...to-crypto4xx-add-prng-crypto-support.patch | 199 ------
 ...rypto4xx-fix-AES-CTR-blocksize-value.patch |  60 --
 ...pto4xx-fix-blocksize-for-cfb-and-ofb.patch |  44 --
 ...-block-ciphers-should-only-accept-co.patch | 172 -----
 ...lace-custom-rgmii_mode_name-with-phy.patch |  51 --
 ...emac-replace-custom-PHY_MODE_-macros.patch | 246 -------
 ...-emac-support-RGMII-RX-TX-ID-phymode.patch |  59 --
 .../140-GPIO-add-named-gpio-exports.patch     | 169 -----
 .../200-add-meraki-mr24-ikarem-support.patch  |  32 -
 .../201-add-amcc-apollo3g-support.patch       |  30 -
 .../202-add-netgear-wndr4700-support.patch    |  32 -
 ...-add-meraki-mx60-buckminster-support.patch |  32 -
 .../300-fix-atheros-nics-on-apm82181.patch    |  51 --
 .../301-fix-memory-map-wndr4700.patch         |  14 -
 ...ings-add-protection-control-property.patch |  38 --
 .../701-powerpc_ibm_apm82181_phyclk_fix.patch |  51 --
 ...mware-loader-for-uPD720201-and-uPD72.patch | 545 ----------------
 .../802-usb-xhci-force-msi-renesas-xhci.patch |  54 --
 ...03-hwmon-tc654-add-detection-routine.patch |  65 --
 ...mon-tc654-add-thermal_cooling-device.patch | 174 -----
 60 files changed, 8847 deletions(-)
 delete mode 100644 target/linux/apm821xx/config-4.14
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0002-crypto-crypto4xx-remove-unused-definitions-and-write.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0003-crypto-crypto4xx-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0004-crypto-crypto4xx-remove-extern-statement-before-func.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0005-crypto-crypto4xx-remove-double-assignment-of-pd_uinf.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0006-crypto-crypto4xx-fix-dynamic_sa_ctl-s-sa_contents-de.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0007-crypto-crypto4xx-move-and-refactor-dynamic_contents-.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0008-crypto-crypto4xx-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0009-crypto-crypto4xx-refactor-crypto4xx_copy_pkt_to_dst.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0010-crypto-crypto4xx-replace-crypto4xx_dev-s-scatter_buf.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0012-crypto-crypto4xx-pointer-arithmetic-overhaul.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0013-crypto-crypto4xx-wire-up-hmac_mc-to-hmac_muting.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0014-crypto-crypto4xx-fix-off-by-one-AES-OFB.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0015-crypto-crypto4xx-fix-type-mismatch-compiler-error.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0017-crypto-crypto4xx-add-backlog-queue-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0018-crypto-crypto4xx-use-the-correct-LE32-format-for-IV-.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0020-crypto-crypto4xx-fix-various-warnings.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0021-crypto-crypto4xx-fix-stalls-under-heavy-load.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0022-crypto-crypto4xx-simplify-sa-and-state-context-acqui.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0023-crypto-crypto4xx-prepare-for-AEAD-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0024-crypto-crypto4xx-add-aes-ccm-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/020-0025-crypto-crypto4xx-add-aes-gcm-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/021-0001-crypto-crypto4xx-shuffle-iomap-in-front-of-request_i.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/021-0002-crypto-crypto4xx-support-Revision-B-parts.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/021-0003-crypto-crypto4xx-fix-missing-irq-devname.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/021-0004-crypto-crypto4xx-kill-MODULE_NAME.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/021-0005-crypto-crypto4xx-perform-aead-icv-check-in-the-drive.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0001-crypto-Use-zeroing-memory-allocator-instead-of-alloc.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0002-crypto-crypto4xx-performance-optimizations.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0003-crypto-crypto4xx-convert-to-skcipher.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0004-crypto-crypto4xx-avoid-VLA-use.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0005-crypto-crypto4xx-add-aes-ctr-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0007-crypto-crypto4xx-extend-aead-fallback-checks.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/022-0008-crypto-crypto4xx-put-temporary-dst-sg-into-request-c.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0001-treewide-kzalloc-kcalloc.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0002-crypto-skcipher-remove-useless-setting-of-type-flags.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0003-crypto-drop-mask-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0004-crypto4xx_core-don-t-abuse-__dma_sync_page.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0005-cross-tree-phase-out-dma_zalloc_coherent.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0006-crypto-crypto4xx-add-prng-crypto-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0013-crypto-crypto4xx-fix-AES-CTR-blocksize-value.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0014-crypto-crypto4xx-fix-blocksize-for-cfb-and-ofb.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/023-0015-crypto-crypto4xx-block-ciphers-should-only-accept-co.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/030-0001-net-ibm-emac-replace-custom-rgmii_mode_name-with-phy.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/030-0002-net-ibm-emac-replace-custom-PHY_MODE_-macros.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/030-0003-net-ibm-emac-support-RGMII-RX-TX-ID-phymode.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/140-GPIO-add-named-gpio-exports.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/200-add-meraki-mr24-ikarem-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/201-add-amcc-apollo3g-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/202-add-netgear-wndr4700-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/203-add-meraki-mx60-buckminster-support.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/300-fix-atheros-nics-on-apm82181.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/301-fix-memory-map-wndr4700.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/302-0001-dt-bindings-add-protection-control-property.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/701-powerpc_ibm_apm82181_phyclk_fix.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/802-usb-xhci-force-msi-renesas-xhci.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/803-hwmon-tc654-add-detection-routine.patch
 delete mode 100644 target/linux/apm821xx/patches-4.14/804-hwmon-tc654-add-thermal_cooling-device.patch

diff --git a/target/linux/apm821xx/config-4.14 b/target/linux/apm821xx/config-4.14
deleted file mode 100644
index ccc59b294d6..00000000000
--- a/target/linux/apm821xx/config-4.14
+++ /dev/null
@@ -1,366 +0,0 @@
-# CONFIG_40x is not set
-CONFIG_44x=y
-CONFIG_460EX=y
-CONFIG_4xx=y
-CONFIG_4xx_SOC=y
-# CONFIG_ADVANCED_OPTIONS is not set
-CONFIG_APM821xx=y
-CONFIG_APOLLO3G=y
-# CONFIG_ARCHES is not set
-CONFIG_ARCH_DMA_ADDR_T_64BIT=y
-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-CONFIG_ARCH_HAS_DMA_SET_COHERENT_MASK=y
-CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
-CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
-CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
-CONFIG_ARCH_HAS_SG_CHAIN=y
-CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
-# CONFIG_ARCH_HAS_STRICT_MODULE_RWX is not set
-CONFIG_ARCH_HAS_WALK_MEMORY=y
-CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
-CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
-CONFIG_ARCH_MMAP_RND_BITS=11
-CONFIG_ARCH_MMAP_RND_BITS_MAX=17
-CONFIG_ARCH_MMAP_RND_BITS_MIN=11
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17
-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
-CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
-# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
-CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
-# CONFIG_ARCH_RANDOM is not set
-CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
-CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
-CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y
-CONFIG_ARCH_SUPPORTS_UPROBES=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARCH_USE_BUILTIN_BSWAP=y
-CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
-CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y
-CONFIG_AUDIT_ARCH=y
-# CONFIG_BAMBOO is not set
-CONFIG_BCH=y
-CONFIG_BLK_MQ_PCI=y
-# CONFIG_BLUESTONE is not set
-CONFIG_BOOKE=y
-CONFIG_BOOKE_WDT=y
-# CONFIG_BOUNCE is not set
-CONFIG_BUCKMINSTER=y
-# CONFIG_CANYONLANDS is not set
-CONFIG_CLONE_BACKWARDS=y
-CONFIG_CMDLINE="rootfstype=squashfs noinitrd"
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CONSISTENT_SIZE=0x00200000
-CONFIG_CPU_BIG_ENDIAN=y
-CONFIG_CRC16=y
-# CONFIG_CRC32_SARWATE is not set
-CONFIG_CRC32_SLICEBY8=y
-CONFIG_CRYPTO_ACOMP2=y
-CONFIG_CRYPTO_AEAD=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_CCM=y
-CONFIG_CRYPTO_CTR=y
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_DEV_PPC4XX=y
-CONFIG_CRYPTO_DRBG=y
-CONFIG_CRYPTO_DRBG_HMAC=y
-CONFIG_CRYPTO_DRBG_MENU=y
-CONFIG_CRYPTO_GCM=y
-CONFIG_CRYPTO_GF128MUL=y
-CONFIG_CRYPTO_GHASH=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_HW=y
-CONFIG_CRYPTO_JITTERENTROPY=y
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_MANAGER2=y
-CONFIG_CRYPTO_MD5_PPC=y
-CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_NULL2=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_RNG_DEFAULT=y
-CONFIG_CRYPTO_SEQIV=y
-CONFIG_CRYPTO_SHA1_PPC=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_WORKQUEUE=y
-CONFIG_DECOMPRESS_GZIP=y
-# CONFIG_DEFAULT_UIMAGE is not set
-CONFIG_DTC=y
-# CONFIG_E200 is not set
-CONFIG_EARLY_PRINTK=y
-# CONFIG_EBONY is not set
-CONFIG_EDAC_ATOMIC_SCRUB=y
-CONFIG_EDAC_SUPPORT=y
-# CONFIG_EIGER is not set
-# CONFIG_EPAPR_BOOT is not set
-CONFIG_EXTRA_TARGETS="uImage"
-CONFIG_FIXED_PHY=y
-# CONFIG_FORCE_SMP is not set
-CONFIG_FREEZER=y
-# CONFIG_FSL_LBC is not set
-# CONFIG_FSL_ULI1575 is not set
-CONFIG_GENERIC_ATOMIC64=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_CPU_AUTOPROBE=y
-# CONFIG_GENERIC_CSUM is not set
-CONFIG_GENERIC_IO=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_MSI_IRQ=y
-CONFIG_GENERIC_NVRAM=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_SMP_IDLE_THREAD=y
-CONFIG_GENERIC_STRNCPY_FROM_USER=y
-CONFIG_GENERIC_STRNLEN_USER=y
-# CONFIG_GENERIC_TBSYNC is not set
-CONFIG_GENERIC_TIME_VSYSCALL=y
-# CONFIG_GEN_RTC is not set
-# CONFIG_GE_FPGA is not set
-# CONFIG_GLACIER is not set
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_GENERIC=y
-CONFIG_GPIO_GENERIC_PLATFORM=y
-CONFIG_GPIO_SYSFS=y
-# CONFIG_GRO_CELLS is not set
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT_MAP=y
-# CONFIG_HAS_RAPIDIO is not set
-# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
-CONFIG_HAVE_ARCH_AUDITSYSCALL=y
-# CONFIG_HAVE_ARCH_BITREVERSE is not set
-CONFIG_HAVE_ARCH_JUMP_LABEL=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
-CONFIG_HAVE_ARCH_TRACEHOOK=y
-# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
-CONFIG_HAVE_CBPF_JIT=y
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
-CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
-CONFIG_HAVE_GENERIC_GUP=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_IOREMAP_PROT=y
-CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
-CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
-CONFIG_HAVE_KPROBES_ON_FTRACE=y
-CONFIG_HAVE_MEMBLOCK=y
-CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
-CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
-CONFIG_HAVE_NET_DSA=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HAVE_PERF_EVENTS=y
-CONFIG_HAVE_PERF_REGS=y
-CONFIG_HAVE_PERF_USER_STACK_DUMP=y
-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
-# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
-CONFIG_HAVE_VIRT_CPU_ACCOUNTING=y
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_PPC4XX=y
-CONFIG_HZ=1000
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_1000=y
-CONFIG_HZ_PERIODIC=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_IBM_IIC=y
-CONFIG_IBM_EMAC=y
-CONFIG_IBM_EMAC_EMAC4=y
-CONFIG_IBM_EMAC_POLL_WEIGHT=32
-CONFIG_IBM_EMAC_RGMII=y
-CONFIG_IBM_EMAC_RXB=128
-CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
-CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
-CONFIG_IBM_EMAC_TAH=y
-CONFIG_IBM_EMAC_TXB=128
-# CONFIG_ICON is not set
-CONFIG_IKAREM=y
-CONFIG_ILLEGAL_POINTER_VALUE=0
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_IOMMU_HELPER is not set
-# CONFIG_IPIC is not set
-CONFIG_IRQCHIP=y
-CONFIG_IRQ_DOMAIN=y
-CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_IRQ_WORK=y
-CONFIG_ISA_DMA_API=y
-# CONFIG_JFFS2_FS is not set
-# CONFIG_KATMAI is not set
-CONFIG_KERNEL_GZIP=y
-CONFIG_KERNEL_START=0xc0000000
-CONFIG_LEDS_TRIGGER_MTD=y
-CONFIG_LIBFDT=y
-CONFIG_LOWMEM_SIZE=0x30000000
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MDIO_BUS=y
-CONFIG_MDIO_DEVICE=y
-CONFIG_MIGRATION=y
-# CONFIG_MMIO_NVRAM is not set
-CONFIG_MODULES_USE_ELF_RELA=y
-# CONFIG_MPIC is not set
-# CONFIG_MPIC_U3_HT_IRQS is not set
-# CONFIG_MPIC_WEIRD is not set
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_BCH=y
-CONFIG_MTD_NAND_ECC=y
-CONFIG_MTD_NAND_ECC_BCH=y
-CONFIG_MTD_NAND_ECC_SMC=y
-CONFIG_MTD_NAND_NDFC=y
-# CONFIG_MTD_SPLIT is not set
-# CONFIG_MTD_SPLIT_SQUASHFS_ROOT is not set
-CONFIG_NEED_DMA_MAP_STATE=y
-# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set
-CONFIG_NEED_PER_CPU_KM=y
-CONFIG_NEED_SG_DMA_LENGTH=y
-# CONFIG_NONSTATIC_KERNEL is not set
-CONFIG_NOT_COHERENT_CACHE=y
-CONFIG_NO_BOOTMEM=y
-CONFIG_NR_IRQS=512
-CONFIG_OF=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_ADDRESS_PCI=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_GPIO=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_MDIO=y
-CONFIG_OF_NET=y
-CONFIG_OF_PCI=y
-CONFIG_OF_PCI_IRQ=y
-CONFIG_OF_RESERVED_MEM=y
-CONFIG_OLD_SIGACTION=y
-CONFIG_OLD_SIGSUSPEND=y
-CONFIG_PAGE_OFFSET=0xc0000000
-CONFIG_PCI=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIE_PME=y
-CONFIG_PCI_BUS_ADDR_T_64BIT=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_MSI=y
-# CONFIG_PCI_MSI_IRQ_DOMAIN is not set
-CONFIG_PGTABLE_LEVELS=2
-CONFIG_PHYLIB=y
-CONFIG_PHYSICAL_START=0x00000000
-CONFIG_PHYS_64BIT=y
-CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_PM=y
-CONFIG_PM_AUTOSLEEP=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_WAKELOCKS_GC=y
-CONFIG_PM_WAKELOCKS_LIMIT=100
-CONFIG_PPC=y
-CONFIG_PPC32=y
-CONFIG_PPC44x_SIMPLE=y
-CONFIG_PPC4xx_CPM=y
-CONFIG_PPC4xx_GPIO=y
-# CONFIG_PPC4xx_HSTA_MSI is not set
-CONFIG_PPC4xx_MSI=y
-CONFIG_PPC4xx_OCM=y
-CONFIG_PPC4xx_PCI_EXPRESS=y
-# CONFIG_PPC64 is not set
-# CONFIG_PPC_47x is not set
-# CONFIG_PPC_85xx is not set
-# CONFIG_PPC_8xx is not set
-# CONFIG_PPC_970_NAP is not set
-CONFIG_PPC_ADV_DEBUG_DACS=2
-CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y
-CONFIG_PPC_ADV_DEBUG_DVCS=2
-CONFIG_PPC_ADV_DEBUG_IACS=4
-CONFIG_PPC_ADV_DEBUG_REGS=y
-# CONFIG_PPC_BOOK3S_32 is not set
-# CONFIG_PPC_CELL is not set
-# CONFIG_PPC_CELL_NATIVE is not set
-# CONFIG_PPC_COPRO_BASE is not set
-CONFIG_PPC_DCR=y
-# CONFIG_PPC_DCR_MMIO is not set
-CONFIG_PPC_DCR_NATIVE=y
-# CONFIG_PPC_DOORBELL is not set
-# CONFIG_PPC_EARLY_DEBUG is not set
-# CONFIG_PPC_EPAPR_HV_PIC is not set
-CONFIG_PPC_FPU=y
-# CONFIG_PPC_I8259 is not set
-# CONFIG_PPC_ICP_HV is not set
-# CONFIG_PPC_ICP_NATIVE is not set
-# CONFIG_PPC_ICS_RTAS is not set
-CONFIG_PPC_INDIRECT_PCI=y
-CONFIG_PPC_LIB_RHEAP=y
-CONFIG_PPC_MMU_NOHASH=y
-# CONFIG_PPC_MM_SLICES is not set
-# CONFIG_PPC_MPC106 is not set
-CONFIG_PPC_MSI_BITMAP=y
-# CONFIG_PPC_P7_NAP is not set
-CONFIG_PPC_PCI_CHOICE=y
-# CONFIG_PPC_PTDUMP is not set
-# CONFIG_PPC_RTAS is not set
-CONFIG_PPC_UDBG_16550=y
-CONFIG_PPC_WERROR=y
-# CONFIG_PPC_XICS is not set
-# CONFIG_PPC_XIVE is not set
-# CONFIG_PPC_XIVE_SPAPR is not set
-# CONFIG_PQ2ADS is not set
-CONFIG_PTE_64BIT=y
-# CONFIG_RAINIER is not set
-CONFIG_RAS=y
-# CONFIG_RCU_NEED_SEGCBLIST is not set
-# CONFIG_RCU_STALL_COMMON is not set
-CONFIG_RD_GZIP=y
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_SAM440EP is not set
-# CONFIG_SCHED_INFO is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SEQUOIA is not set
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_FSL=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SIMPLE_GPIO=y
-CONFIG_SPARSE_IRQ=y
-CONFIG_SRCU=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-# CONFIG_SWIOTLB is not set
-CONFIG_SWPHY=y
-CONFIG_SYSCTL_EXCEPTION_TRACE=y
-# CONFIG_TAISHAN is not set
-CONFIG_TASK_SIZE=0xc0000000
-CONFIG_THREAD_SHIFT=13
-CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TINY_SRCU=y
-CONFIG_USB_SUPPORT=y
-CONFIG_VDSO32=y
-# CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set
-# CONFIG_WARP is not set
-CONFIG_WATCHDOG_CORE=y
-CONFIG_WNDR4700=y
-# CONFIG_XILINX_SYSACE is not set
-# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
-CONFIG_XZ_DEC_BCJ=y
-CONFIG_XZ_DEC_POWERPC=y
-# CONFIG_YOSEMITE is not set
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
diff --git a/target/linux/apm821xx/patches-4.14/020-0002-crypto-crypto4xx-remove-unused-definitions-and-write.patch b/target/linux/apm821xx/patches-4.14/020-0002-crypto-crypto4xx-remove-unused-definitions-and-write.patch
deleted file mode 100644
index 6cae1eaa3ee..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0002-crypto-crypto4xx-remove-unused-definitions-and-write.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 81065f66dd99b3af58626a914b8c0fcff6b8b0ba Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:15 +0200
-Subject: [PATCH 02/25] crypto: crypto4xx - remove unused definitions and
- write-only variables
-
-This patch removes several unused code and definitons
-(structs, variables, ...).
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  6 ------
- drivers/crypto/amcc/crypto4xx_core.c |  2 +-
- drivers/crypto/amcc/crypto4xx_core.h | 16 ----------------
- 3 files changed, 1 insertion(+), 23 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -75,7 +75,6 @@ int crypto4xx_encrypt(struct ablkcipher_
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 
- 	ctx->direction = DIR_OUTBOUND;
--	ctx->hash_final = 0;
- 	ctx->is_hash = 0;
- 	ctx->pd_ctl = 0x1;
- 
-@@ -89,7 +88,6 @@ int crypto4xx_decrypt(struct ablkcipher_
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 
- 	ctx->direction = DIR_INBOUND;
--	ctx->hash_final = 0;
- 	ctx->is_hash = 0;
- 	ctx->pd_ctl = 1;
- 
-@@ -136,7 +134,6 @@ static int crypto4xx_setkey_aes(struct c
- 	}
- 	/* Setup SA */
- 	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
--	ctx->hash_final = 0;
- 
- 	set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, (cm == CRYPTO_MODE_CBC ?
- 				 SA_SAVE_IV : SA_NOT_SAVE_IV),
-@@ -192,7 +189,6 @@ static int crypto4xx_hash_alg_init(struc
- 
- 	ctx->dev   = my_alg->dev;
- 	ctx->is_hash = 1;
--	ctx->hash_final = 0;
- 
- 	/* Create SA */
- 	if (ctx->sa_in_dma_addr || ctx->sa_out_dma_addr)
-@@ -257,7 +253,6 @@ int crypto4xx_hash_update(struct ahash_r
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 
- 	ctx->is_hash = 1;
--	ctx->hash_final = 0;
- 	ctx->pd_ctl = 0x11;
- 	ctx->direction = DIR_INBOUND;
- 
-@@ -275,7 +270,6 @@ int crypto4xx_hash_digest(struct ahash_r
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 
--	ctx->hash_final = 1;
- 	ctx->pd_ctl = 0x11;
- 	ctx->direction = DIR_INBOUND;
- 
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -969,7 +969,7 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 
- 	sa->sa_command_1.bf.hash_crypto_offset = 0;
- 	pd->pd_ctl.w = ctx->pd_ctl;
--	pd->pd_ctl_len.w = 0x00400000 | (ctx->bypass << 24) | datalen;
-+	pd->pd_ctl_len.w = 0x00400000 | datalen;
- 	pd_uinfo->state = PD_ENTRY_INUSE;
- 	wmb();
- 	/* write any value to push engine to read a pd */
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -72,7 +72,6 @@ struct pd_uinfo {
- struct crypto4xx_device {
- 	struct crypto4xx_core_device *core_dev;
- 	char *name;
--	u64  ce_phy_address;
- 	void __iomem *ce_base;
- 	void __iomem *trng_base;
- 
-@@ -127,21 +126,9 @@ struct crypto4xx_ctx {
- 	u32 sa_len;
- 	u32 offset_to_sr_ptr;           /* offset to state ptr, in dynamic sa */
- 	u32 direction;
--	u32 next_hdr;
- 	u32 save_iv;
--	u32 pd_ctl_len;
- 	u32 pd_ctl;
--	u32 bypass;
- 	u32 is_hash;
--	u32 hash_final;
--};
--
--struct crypto4xx_req_ctx {
--	struct crypto4xx_device *dev;	/* Device in which
--					operation to send to */
--	void *sa;
--	u32 sa_dma_addr;
--	u16 sa_len;
- };
- 
- struct crypto4xx_alg_common {
-@@ -172,9 +159,6 @@ static inline struct crypto4xx_alg *cryp
- 
- extern int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
- extern void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
--extern u32 crypto4xx_alloc_sa_rctx(struct crypto4xx_ctx *ctx,
--				   struct crypto4xx_ctx *rctx);
--extern void crypto4xx_free_sa_rctx(struct crypto4xx_ctx *rctx);
- extern void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
- extern u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
- extern u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx);
diff --git a/target/linux/apm821xx/patches-4.14/020-0003-crypto-crypto4xx-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch b/target/linux/apm821xx/patches-4.14/020-0003-crypto-crypto4xx-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch
deleted file mode 100644
index 5b0a5df9e9c..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0003-crypto-crypto4xx-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 1ef52a95ea53c3c54b061e3f1af85976356c7132 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:16 +0200
-Subject: [PATCH 03/25] crypto: crypto4xx - set CRYPTO_ALG_KERN_DRIVER_ONLY
- flag
-
-The security offload function is performed by a cryptographic
-engine core attached to the 128-bit PLB (processor local bus)
-with builtin DMA and interrupt controllers. This, I think,
-satisfies the requirement for the CRYPTO_ALG_KERN_DRIVER_ONLY
-flag.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1121,7 +1121,9 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_name 	= "cbc(aes)",
- 		.cra_driver_name = "cbc-aes-ppc4xx",
- 		.cra_priority 	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags 	= CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC,
-+		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_ASYNC |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY,
- 		.cra_blocksize 	= AES_BLOCK_SIZE,
- 		.cra_ctxsize 	= sizeof(struct crypto4xx_ctx),
- 		.cra_type 	= &crypto_ablkcipher_type,
diff --git a/target/linux/apm821xx/patches-4.14/020-0004-crypto-crypto4xx-remove-extern-statement-before-func.patch b/target/linux/apm821xx/patches-4.14/020-0004-crypto-crypto4xx-remove-extern-statement-before-func.patch
deleted file mode 100644
index cd61ac719bc..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0004-crypto-crypto4xx-remove-extern-statement-before-func.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 886c251fd4ca40a27697afec7bc44c115e803d78 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:17 +0200
-Subject: [PATCH 04/25] crypto: crypto4xx - remove extern statement before
- function declaration
-
-All function declarations are "extern" by default, there is no need to
-specify it explicitly.
-
-For C99 states in 6.2.2.5:
-"If the declaration of an identifier for a function has no
-storage-class specifier, its linkage is determined exactly
-as if it were declared with the storage-class specifier
-extern."
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.h | 48 ++++++++++++++++++------------------
- 1 file changed, 24 insertions(+), 24 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -157,28 +157,28 @@ static inline struct crypto4xx_alg *cryp
- 	return container_of(x, struct crypto4xx_alg, alg.u.cipher);
- }
- 
--extern int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
--extern void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
--extern void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
--extern u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
--extern u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx);
--extern u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx);
--extern u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx);
--extern void crypto4xx_memcpy_le(unsigned int *dst,
--				const unsigned char *buf, int len);
--extern u32 crypto4xx_build_pd(struct crypto_async_request *req,
--			      struct crypto4xx_ctx *ctx,
--			      struct scatterlist *src,
--			      struct scatterlist *dst,
--			      unsigned int datalen,
--			      void *iv, u32 iv_len);
--extern int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
--				    const u8 *key, unsigned int keylen);
--extern int crypto4xx_encrypt(struct ablkcipher_request *req);
--extern int crypto4xx_decrypt(struct ablkcipher_request *req);
--extern int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
--extern int crypto4xx_hash_digest(struct ahash_request *req);
--extern int crypto4xx_hash_final(struct ahash_request *req);
--extern int crypto4xx_hash_update(struct ahash_request *req);
--extern int crypto4xx_hash_init(struct ahash_request *req);
-+int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
-+void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
-+void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
-+u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
-+u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx);
-+u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx);
-+u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx);
-+void crypto4xx_memcpy_le(unsigned int *dst,
-+			 const unsigned char *buf, int len);
-+u32 crypto4xx_build_pd(struct crypto_async_request *req,
-+		       struct crypto4xx_ctx *ctx,
-+		       struct scatterlist *src,
-+		       struct scatterlist *dst,
-+		       unsigned int datalen,
-+		       void *iv, u32 iv_len);
-+int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_encrypt(struct ablkcipher_request *req);
-+int crypto4xx_decrypt(struct ablkcipher_request *req);
-+int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
-+int crypto4xx_hash_digest(struct ahash_request *req);
-+int crypto4xx_hash_final(struct ahash_request *req);
-+int crypto4xx_hash_update(struct ahash_request *req);
-+int crypto4xx_hash_init(struct ahash_request *req);
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0005-crypto-crypto4xx-remove-double-assignment-of-pd_uinf.patch b/target/linux/apm821xx/patches-4.14/020-0005-crypto-crypto4xx-remove-double-assignment-of-pd_uinf.patch
deleted file mode 100644
index 802bef756eb..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0005-crypto-crypto4xx-remove-double-assignment-of-pd_uinf.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From c587e65deacf8c86de2d7c51f1e81d0a4a9147a8 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:18 +0200
-Subject: [PATCH 05/25] crypto: crypto4xx - remove double assignment of
- pd_uinfo->state
-
-crypto4xx_put_pd_to_pdr() already clears the flag.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 1 -
- 1 file changed, 1 deletion(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1086,7 +1086,6 @@ static void crypto4xx_bh_tasklet_cb(unsi
- 			pd->pd_ctl.bf.pe_done = 0;
- 			crypto4xx_pd_done(core_dev->dev, tail);
- 			crypto4xx_put_pd_to_pdr(core_dev->dev, tail);
--			pd_uinfo->state = PD_ENTRY_FREE;
- 		} else {
- 			/* if tail not done, break */
- 			break;
diff --git a/target/linux/apm821xx/patches-4.14/020-0006-crypto-crypto4xx-fix-dynamic_sa_ctl-s-sa_contents-de.patch b/target/linux/apm821xx/patches-4.14/020-0006-crypto-crypto4xx-fix-dynamic_sa_ctl-s-sa_contents-de.patch
deleted file mode 100644
index db57f7b3a81..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0006-crypto-crypto4xx-fix-dynamic_sa_ctl-s-sa_contents-de.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From 453e3090b9c3f5da70b21648c2244e9821f0916d Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:19 +0200
-Subject: [PATCH 06/25] crypto: crypto4xx - fix dynamic_sa_ctl's sa_contents
- declaration
-
-The driver had a union dynamic_sa_contents in place that
-described the meaning of the bits in the sa_contents
-variable.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c |  4 ++--
- drivers/crypto/amcc/crypto4xx_sa.c  | 12 ++++++------
- drivers/crypto/amcc/crypto4xx_sa.h  |  2 +-
- 3 files changed, 9 insertions(+), 9 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -150,7 +150,7 @@ static int crypto4xx_setkey_aes(struct c
- 				 SA_NOT_COPY_HDR);
- 	crypto4xx_memcpy_le(ctx->sa_in + get_dynamic_sa_offset_key_field(ctx),
- 			    key, keylen);
--	sa->sa_contents = SA_AES_CONTENTS | (keylen << 2);
-+	sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
- 	sa->sa_command_1.bf.key_len = keylen >> 3;
- 	ctx->is_hash = 0;
- 	ctx->direction = DIR_INBOUND;
-@@ -220,7 +220,7 @@ static int crypto4xx_hash_alg_init(struc
- 				 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- 				 SA_NOT_COPY_HDR);
- 	ctx->direction = DIR_INBOUND;
--	sa->sa_contents = SA_HASH160_CONTENTS;
-+	sa->sa_contents.w = SA_HASH160_CONTENTS;
- 	sa_in = (struct dynamic_sa_hash160 *) ctx->sa_in;
- 	/* Need to zero hash digest in SA */
- 	memset(sa_in->inner_digest, 0, sizeof(sa_in->inner_digest));
---- a/drivers/crypto/amcc/crypto4xx_sa.c
-+++ b/drivers/crypto/amcc/crypto4xx_sa.c
-@@ -40,9 +40,9 @@ u32 get_dynamic_sa_offset_state_ptr_fiel
- 	union dynamic_sa_contents cts;
- 
- 	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
- 	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
- 	offset = cts.bf.key_size
- 		+ cts.bf.inner_size
- 		+ cts.bf.outer_size
-@@ -66,9 +66,9 @@ u32 get_dynamic_sa_iv_size(struct crypto
- 	union dynamic_sa_contents cts;
- 
- 	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
- 	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
- 	return (cts.bf.iv0 + cts.bf.iv1 + cts.bf.iv2 + cts.bf.iv3) * 4;
- }
- 
-@@ -77,9 +77,9 @@ u32 get_dynamic_sa_offset_key_field(stru
- 	union dynamic_sa_contents cts;
- 
- 	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
- 	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents;
-+		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
- 
- 	return sizeof(struct dynamic_sa_ctl);
- }
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -169,7 +169,7 @@ union sa_command_1 {
- } __attribute__((packed));
- 
- struct dynamic_sa_ctl {
--	u32 sa_contents;
-+	union dynamic_sa_contents sa_contents;
- 	union sa_command_0 sa_command_0;
- 	union sa_command_1 sa_command_1;
- } __attribute__((packed));
diff --git a/target/linux/apm821xx/patches-4.14/020-0007-crypto-crypto4xx-move-and-refactor-dynamic_contents-.patch b/target/linux/apm821xx/patches-4.14/020-0007-crypto-crypto4xx-move-and-refactor-dynamic_contents-.patch
deleted file mode 100644
index 20de0d1d700..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0007-crypto-crypto4xx-move-and-refactor-dynamic_contents-.patch
+++ /dev/null
@@ -1,234 +0,0 @@
-From 249c8d98ea339325dca481d5dae93686cd494059 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:20 +0200
-Subject: [PATCH 07/25] crypto: crypto4xx - move and refactor dynamic_contents
- helpers
-
-This patch refactors and moves the dynamic_contents helper
-functions into the crypto4xx_sa.h header file.
-
- * get_dynamic_sa_iv_size is no longer needed, as the cryptoapi
-   provides the required IV size information as well.
-
- * refactor the function declarations to use the a pointer to the
-   dynamic_sa_contents union, instead of the crypto4xx_ctx.
-
- * rename get_dynamic_sa_offset_key_field to get_dynamic_sa_key_field.
-   It returns the pointer to the key directly.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/Makefile         |  2 +-
- drivers/crypto/amcc/crypto4xx_alg.c  | 20 ++++-----
- drivers/crypto/amcc/crypto4xx_core.h |  3 --
- drivers/crypto/amcc/crypto4xx_sa.c   | 85 ------------------------------------
- drivers/crypto/amcc/crypto4xx_sa.h   | 28 ++++++++++++
- 5 files changed, 39 insertions(+), 99 deletions(-)
- delete mode 100644 drivers/crypto/amcc/crypto4xx_sa.c
-
---- a/drivers/crypto/amcc/Makefile
-+++ b/drivers/crypto/amcc/Makefile
-@@ -1,3 +1,3 @@
- obj-$(CONFIG_CRYPTO_DEV_PPC4XX) += crypto4xx.o
--crypto4xx-y :=  crypto4xx_core.o crypto4xx_alg.o crypto4xx_sa.o
-+crypto4xx-y :=  crypto4xx_core.o crypto4xx_alg.o
- crypto4xx-$(CONFIG_HW_RANDOM_PPC4XX) += crypto4xx_trng.o
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -29,8 +29,8 @@
- #include <crypto/aes.h>
- #include <crypto/sha.h>
- #include "crypto4xx_reg_def.h"
--#include "crypto4xx_sa.h"
- #include "crypto4xx_core.h"
-+#include "crypto4xx_sa.h"
- 
- static void set_dynamic_sa_command_0(struct dynamic_sa_ctl *sa, u32 save_h,
- 				     u32 save_iv, u32 ld_h, u32 ld_iv,
-@@ -79,8 +79,8 @@ int crypto4xx_encrypt(struct ablkcipher_
- 	ctx->pd_ctl = 0x1;
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, req->info,
--				  get_dynamic_sa_iv_size(ctx));
-+		req->nbytes, req->info,
-+		crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
- }
- 
- int crypto4xx_decrypt(struct ablkcipher_request *req)
-@@ -92,8 +92,8 @@ int crypto4xx_decrypt(struct ablkcipher_
- 	ctx->pd_ctl = 1;
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, req->info,
--				  get_dynamic_sa_iv_size(ctx));
-+		req->nbytes, req->info,
-+		crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
- }
- 
- /**
-@@ -148,15 +148,15 @@ static int crypto4xx_setkey_aes(struct c
- 				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
- 				 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- 				 SA_NOT_COPY_HDR);
--	crypto4xx_memcpy_le(ctx->sa_in + get_dynamic_sa_offset_key_field(ctx),
-+	crypto4xx_memcpy_le(get_dynamic_sa_key_field(sa),
- 			    key, keylen);
- 	sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
- 	sa->sa_command_1.bf.key_len = keylen >> 3;
- 	ctx->is_hash = 0;
- 	ctx->direction = DIR_INBOUND;
--	memcpy(ctx->sa_in + get_dynamic_sa_offset_state_ptr_field(ctx),
--			(void *)&ctx->state_record_dma_addr, 4);
--	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(ctx);
-+	memcpy(sa + get_dynamic_sa_offset_state_ptr_field(sa),
-+	       (void *)&ctx->state_record_dma_addr, 4);
-+	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
- 
- 	memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
- 	sa = (struct dynamic_sa_ctl *) ctx->sa_out;
-@@ -226,7 +226,7 @@ static int crypto4xx_hash_alg_init(struc
- 	memset(sa_in->inner_digest, 0, sizeof(sa_in->inner_digest));
- 	memset(sa_in->outer_digest, 0, sizeof(sa_in->outer_digest));
- 	sa_in->state_ptr = ctx->state_record_dma_addr;
--	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(ctx);
-+	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
- 
- 	return 0;
- }
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -161,9 +161,6 @@ int crypto4xx_alloc_sa(struct crypto4xx_
- void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
- void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
- u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
--u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx);
--u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx);
--u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx);
- void crypto4xx_memcpy_le(unsigned int *dst,
- 			 const unsigned char *buf, int len);
- u32 crypto4xx_build_pd(struct crypto_async_request *req,
---- a/drivers/crypto/amcc/crypto4xx_sa.c
-+++ /dev/null
-@@ -1,85 +0,0 @@
--/**
-- * AMCC SoC PPC4xx Crypto Driver
-- *
-- * Copyright (c) 2008 Applied Micro Circuits Corporation.
-- * All rights reserved. James Hsiao <jhsiao@amcc.com>
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * @file crypto4xx_sa.c
-- *
-- * This file implements the security context
-- * associate format.
-- */
--#include <linux/kernel.h>
--#include <linux/module.h>
--#include <linux/moduleparam.h>
--#include <linux/mod_devicetable.h>
--#include <linux/interrupt.h>
--#include <linux/spinlock_types.h>
--#include <linux/highmem.h>
--#include <linux/scatterlist.h>
--#include <linux/crypto.h>
--#include <crypto/algapi.h>
--#include <crypto/des.h>
--#include "crypto4xx_reg_def.h"
--#include "crypto4xx_sa.h"
--#include "crypto4xx_core.h"
--
--u32 get_dynamic_sa_offset_state_ptr_field(struct crypto4xx_ctx *ctx)
--{
--	u32 offset;
--	union dynamic_sa_contents cts;
--
--	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
--	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
--	offset = cts.bf.key_size
--		+ cts.bf.inner_size
--		+ cts.bf.outer_size
--		+ cts.bf.spi
--		+ cts.bf.seq_num0
--		+ cts.bf.seq_num1
--		+ cts.bf.seq_num_mask0
--		+ cts.bf.seq_num_mask1
--		+ cts.bf.seq_num_mask2
--		+ cts.bf.seq_num_mask3
--		+ cts.bf.iv0
--		+ cts.bf.iv1
--		+ cts.bf.iv2
--		+ cts.bf.iv3;
--
--	return sizeof(struct dynamic_sa_ctl) + offset * 4;
--}
--
--u32 get_dynamic_sa_iv_size(struct crypto4xx_ctx *ctx)
--{
--	union dynamic_sa_contents cts;
--
--	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
--	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
--	return (cts.bf.iv0 + cts.bf.iv1 + cts.bf.iv2 + cts.bf.iv3) * 4;
--}
--
--u32 get_dynamic_sa_offset_key_field(struct crypto4xx_ctx *ctx)
--{
--	union dynamic_sa_contents cts;
--
--	if (ctx->direction == DIR_INBOUND)
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_in)->sa_contents.w;
--	else
--		cts.w = ((struct dynamic_sa_ctl *) ctx->sa_out)->sa_contents.w;
--
--	return sizeof(struct dynamic_sa_ctl);
--}
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -240,4 +240,32 @@ struct dynamic_sa_hash160 {
- #define SA_HASH160_LEN		(sizeof(struct dynamic_sa_hash160)/4)
- #define SA_HASH160_CONTENTS     0x2000a502
- 
-+static inline u32
-+get_dynamic_sa_offset_state_ptr_field(struct dynamic_sa_ctl *cts)
-+{
-+	u32 offset;
-+
-+	offset = cts->sa_contents.bf.key_size
-+		+ cts->sa_contents.bf.inner_size
-+		+ cts->sa_contents.bf.outer_size
-+		+ cts->sa_contents.bf.spi
-+		+ cts->sa_contents.bf.seq_num0
-+		+ cts->sa_contents.bf.seq_num1
-+		+ cts->sa_contents.bf.seq_num_mask0
-+		+ cts->sa_contents.bf.seq_num_mask1
-+		+ cts->sa_contents.bf.seq_num_mask2
-+		+ cts->sa_contents.bf.seq_num_mask3
-+		+ cts->sa_contents.bf.iv0
-+		+ cts->sa_contents.bf.iv1
-+		+ cts->sa_contents.bf.iv2
-+		+ cts->sa_contents.bf.iv3;
-+
-+	return sizeof(struct dynamic_sa_ctl) + offset * 4;
-+}
-+
-+static inline u8 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
-+{
-+	return (u8 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
-+}
-+
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0008-crypto-crypto4xx-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch b/target/linux/apm821xx/patches-4.14/020-0008-crypto-crypto4xx-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch
deleted file mode 100644
index 0a8da95cbd8..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0008-crypto-crypto4xx-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch
+++ /dev/null
@@ -1,248 +0,0 @@
-From f2a13e7cba9e2b16f4888fbd9cf2bc25b95945be Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:21 +0200
-Subject: [PATCH 08/25] crypto: crypto4xx - enable AES RFC3686, ECB, CFB and
- OFB offloads
-
-The crypto engine supports more than just aes-cbc. This patch
-enables the remaining AES block cipher modes that pass the
-testmanager's test vectors.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 66 ++++++++++++++++++++++++
- drivers/crypto/amcc/crypto4xx_core.c | 98 ++++++++++++++++++++++++++++++++++++
- drivers/crypto/amcc/crypto4xx_core.h | 10 ++++
- drivers/crypto/amcc/crypto4xx_sa.h   |  3 ++
- 4 files changed, 177 insertions(+)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -28,6 +28,7 @@
- #include <crypto/algapi.h>
- #include <crypto/aes.h>
- #include <crypto/sha.h>
-+#include <crypto/ctr.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
- #include "crypto4xx_sa.h"
-@@ -172,6 +173,71 @@ int crypto4xx_setkey_aes_cbc(struct cryp
- 				    CRYPTO_FEEDBACK_MODE_NO_FB);
- }
- 
-+int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_CFB,
-+				    CRYPTO_FEEDBACK_MODE_128BIT_CFB);
-+}
-+
-+int crypto4xx_setkey_aes_ecb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_ECB,
-+				    CRYPTO_FEEDBACK_MODE_NO_FB);
-+}
-+
-+int crypto4xx_setkey_aes_ofb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_OFB,
-+				    CRYPTO_FEEDBACK_MODE_64BIT_OFB);
-+}
-+
-+int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	int rc;
-+
-+	rc = crypto4xx_setkey_aes(cipher, key, keylen - CTR_RFC3686_NONCE_SIZE,
-+		CRYPTO_MODE_CTR, CRYPTO_FEEDBACK_MODE_NO_FB);
-+	if (rc)
-+		return rc;
-+
-+	memcpy(ctx->state_record,
-+		key + keylen - CTR_RFC3686_NONCE_SIZE, CTR_RFC3686_NONCE_SIZE);
-+
-+	return 0;
-+}
-+
-+int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req)
-+{
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	__be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
-+		*(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
-+
-+	ctx->direction = DIR_OUTBOUND;
-+	ctx->pd_ctl = 1;
-+
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-+				  req->nbytes, iv, AES_IV_SIZE);
-+}
-+
-+int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req)
-+{
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	__be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
-+		*(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
-+
-+	ctx->direction = DIR_INBOUND;
-+	ctx->pd_ctl = 1;
-+
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-+				  req->nbytes, iv, AES_IV_SIZE);
-+}
-+
- /**
-  * HASH SHA1 Functions
-  */
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -36,6 +36,7 @@
- #include <asm/dcr-regs.h>
- #include <asm/cacheflush.h>
- #include <crypto/aes.h>
-+#include <crypto/ctr.h>
- #include <crypto/sha.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
-@@ -1140,6 +1141,103 @@ struct crypto4xx_alg_common crypto4xx_al
- 			}
- 		}
- 	}},
-+	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
-+		.cra_name	= "cfb(aes)",
-+		.cra_driver_name = "cfb-aes-ppc4xx",
-+		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_ASYNC |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+		.cra_blocksize	= AES_BLOCK_SIZE,
-+		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+		.cra_type	= &crypto_ablkcipher_type,
-+		.cra_init	= crypto4xx_alg_init,
-+		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_module	= THIS_MODULE,
-+		.cra_u		= {
-+			.ablkcipher = {
-+				.min_keysize	= AES_MIN_KEY_SIZE,
-+				.max_keysize	= AES_MAX_KEY_SIZE,
-+				.ivsize		= AES_IV_SIZE,
-+				.setkey		= crypto4xx_setkey_aes_cfb,
-+				.encrypt	= crypto4xx_encrypt,
-+				.decrypt	= crypto4xx_decrypt,
-+			}
-+		}
-+	} },
-+	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
-+		.cra_name	= "rfc3686(ctr(aes))",
-+		.cra_driver_name = "rfc3686-ctr-aes-ppc4xx",
-+		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_ASYNC |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+		.cra_blocksize	= AES_BLOCK_SIZE,
-+		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+		.cra_type	= &crypto_ablkcipher_type,
-+		.cra_init	= crypto4xx_alg_init,
-+		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_module	= THIS_MODULE,
-+		.cra_u		= {
-+			.ablkcipher = {
-+				.min_keysize	= AES_MIN_KEY_SIZE +
-+						  CTR_RFC3686_NONCE_SIZE,
-+				.max_keysize	= AES_MAX_KEY_SIZE +
-+						  CTR_RFC3686_NONCE_SIZE,
-+				.ivsize		= CTR_RFC3686_IV_SIZE,
-+				.setkey		= crypto4xx_setkey_rfc3686,
-+				.encrypt	= crypto4xx_rfc3686_encrypt,
-+				.decrypt	= crypto4xx_rfc3686_decrypt,
-+			}
-+		}
-+	} },
-+	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
-+		.cra_name	= "ecb(aes)",
-+		.cra_driver_name = "ecb-aes-ppc4xx",
-+		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_ASYNC |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+		.cra_blocksize	= AES_BLOCK_SIZE,
-+		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+		.cra_type	= &crypto_ablkcipher_type,
-+		.cra_init	= crypto4xx_alg_init,
-+		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_module	= THIS_MODULE,
-+		.cra_u		= {
-+			.ablkcipher = {
-+				.min_keysize	= AES_MIN_KEY_SIZE,
-+				.max_keysize	= AES_MAX_KEY_SIZE,
-+				.setkey		= crypto4xx_setkey_aes_ecb,
-+				.encrypt	= crypto4xx_encrypt,
-+				.decrypt	= crypto4xx_decrypt,
-+			}
-+		}
-+	} },
-+	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
-+		.cra_name	= "ofb(aes)",
-+		.cra_driver_name = "ofb-aes-ppc4xx",
-+		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
-+				  CRYPTO_ALG_ASYNC |
-+				  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+		.cra_blocksize	= AES_BLOCK_SIZE,
-+		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+		.cra_type	= &crypto_ablkcipher_type,
-+		.cra_init	= crypto4xx_alg_init,
-+		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_module	= THIS_MODULE,
-+		.cra_u		= {
-+			.ablkcipher = {
-+				.min_keysize	= AES_MIN_KEY_SIZE,
-+				.max_keysize	= AES_MAX_KEY_SIZE,
-+				.ivsize		= AES_IV_SIZE,
-+				.setkey		= crypto4xx_setkey_aes_cbc,
-+				.encrypt	= crypto4xx_encrypt,
-+				.decrypt	= crypto4xx_decrypt,
-+			}
-+		}
-+	} },
- };
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -171,8 +171,18 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 		       void *iv, u32 iv_len);
- int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
-+int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_setkey_aes_ecb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_setkey_aes_ofb(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
- int crypto4xx_encrypt(struct ablkcipher_request *req);
- int crypto4xx_decrypt(struct ablkcipher_request *req);
-+int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req);
-+int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req);
- int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
- int crypto4xx_hash_digest(struct ahash_request *req);
- int crypto4xx_hash_final(struct ahash_request *req);
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -112,6 +112,9 @@ union sa_command_0 {
- 
- #define CRYPTO_MODE_ECB				0
- #define CRYPTO_MODE_CBC				1
-+#define CRYPTO_MODE_OFB				2
-+#define CRYPTO_MODE_CFB				3
-+#define CRYPTO_MODE_CTR				4
- 
- #define CRYPTO_FEEDBACK_MODE_NO_FB		0
- #define CRYPTO_FEEDBACK_MODE_64BIT_OFB		0
diff --git a/target/linux/apm821xx/patches-4.14/020-0009-crypto-crypto4xx-refactor-crypto4xx_copy_pkt_to_dst.patch b/target/linux/apm821xx/patches-4.14/020-0009-crypto-crypto4xx-refactor-crypto4xx_copy_pkt_to_dst.patch
deleted file mode 100644
index 829c560be75..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0009-crypto-crypto4xx-refactor-crypto4xx_copy_pkt_to_dst.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-From 5c727f92ea5e019fd216f73009eee2b6e0867726 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:22 +0200
-Subject: [PATCH 09/25] crypto: crypto4xx - refactor
- crypto4xx_copy_pkt_to_dst()
-
-This patch refactors the crypto4xx_copy_pkt_to_dst() to use
-scatterwalk_map_and_copy() to copy the processed data between
-the crypto engine's scatter ring buffer and the destination
-specified by the ablkcipher_request.
-
-This also makes the crypto4xx_fill_one_page() function redundant.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 126 +++++++++--------------------------
- 1 file changed, 30 insertions(+), 96 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -38,6 +38,7 @@
- #include <crypto/aes.h>
- #include <crypto/ctr.h>
- #include <crypto/sha.h>
-+#include <crypto/scatterwalk.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
- #include "crypto4xx_sa.h"
-@@ -479,111 +480,44 @@ static inline struct ce_sd *crypto4xx_ge
- 	return  (struct ce_sd *)(dev->sdr + sizeof(struct ce_sd) * idx);
- }
- 
--static u32 crypto4xx_fill_one_page(struct crypto4xx_device *dev,
--				   dma_addr_t *addr, u32 *length,
--				   u32 *idx, u32 *offset, u32 *nbytes)
--{
--	u32 len;
--
--	if (*length > dev->scatter_buffer_size) {
--		memcpy(phys_to_virt(*addr),
--			dev->scatter_buffer_va +
--			*idx * dev->scatter_buffer_size + *offset,
--			dev->scatter_buffer_size);
--		*offset = 0;
--		*length -= dev->scatter_buffer_size;
--		*nbytes -= dev->scatter_buffer_size;
--		if (*idx == PPC4XX_LAST_SD)
--			*idx = 0;
--		else
--			(*idx)++;
--		*addr = *addr +  dev->scatter_buffer_size;
--		return 1;
--	} else if (*length < dev->scatter_buffer_size) {
--		memcpy(phys_to_virt(*addr),
--			dev->scatter_buffer_va +
--			*idx * dev->scatter_buffer_size + *offset, *length);
--		if ((*offset + *length) == dev->scatter_buffer_size) {
--			if (*idx == PPC4XX_LAST_SD)
--				*idx = 0;
--			else
--				(*idx)++;
--			*nbytes -= *length;
--			*offset = 0;
--		} else {
--			*nbytes -= *length;
--			*offset += *length;
--		}
--
--		return 0;
--	} else {
--		len = (*nbytes <= dev->scatter_buffer_size) ?
--				(*nbytes) : dev->scatter_buffer_size;
--		memcpy(phys_to_virt(*addr),
--			dev->scatter_buffer_va +
--			*idx * dev->scatter_buffer_size + *offset,
--			len);
--		*offset = 0;
--		*nbytes -= len;
--
--		if (*idx == PPC4XX_LAST_SD)
--			*idx = 0;
--		else
--			(*idx)++;
--
--		return 0;
--    }
--}
--
- static void crypto4xx_copy_pkt_to_dst(struct crypto4xx_device *dev,
- 				      struct ce_pd *pd,
- 				      struct pd_uinfo *pd_uinfo,
- 				      u32 nbytes,
- 				      struct scatterlist *dst)
- {
--	dma_addr_t addr;
--	u32 this_sd;
--	u32 offset;
--	u32 len;
--	u32 i;
--	u32 sg_len;
--	struct scatterlist *sg;
--
--	this_sd = pd_uinfo->first_sd;
--	offset = 0;
--	i = 0;
-+	unsigned int first_sd = pd_uinfo->first_sd;
-+	unsigned int last_sd;
-+	unsigned int overflow = 0;
-+	unsigned int to_copy;
-+	unsigned int dst_start = 0;
-+
-+	/*
-+	 * Because the scatter buffers are all neatly organized in one
-+	 * big continuous ringbuffer; scatterwalk_map_and_copy() can
-+	 * be instructed to copy a range of buffers in one go.
-+	 */
-+
-+	last_sd = (first_sd + pd_uinfo->num_sd);
-+	if (last_sd > PPC4XX_LAST_SD) {
-+		last_sd = PPC4XX_LAST_SD;
-+		overflow = last_sd % PPC4XX_NUM_SD;
-+	}
- 
- 	while (nbytes) {
--		sg = &dst[i];
--		sg_len = sg->length;
--		addr = dma_map_page(dev->core_dev->device, sg_page(sg),
--				sg->offset, sg->length, DMA_TO_DEVICE);
--
--		if (offset == 0) {
--			len = (nbytes <= sg->length) ? nbytes : sg->length;
--			while (crypto4xx_fill_one_page(dev, &addr, &len,
--				&this_sd, &offset, &nbytes))
--				;
--			if (!nbytes)
--				return;
--			i++;
--		} else {
--			len = (nbytes <= (dev->scatter_buffer_size - offset)) ?
--				nbytes : (dev->scatter_buffer_size - offset);
--			len = (sg->length < len) ? sg->length : len;
--			while (crypto4xx_fill_one_page(dev, &addr, &len,
--					       &this_sd, &offset, &nbytes))
--				;
--			if (!nbytes)
--				return;
--			sg_len -= len;
--			if (sg_len) {
--				addr += len;
--				while (crypto4xx_fill_one_page(dev, &addr,
--					&sg_len, &this_sd, &offset, &nbytes))
--					;
--			}
--			i++;
-+		void *buf = dev->scatter_buffer_va +
-+			first_sd * PPC4XX_SD_BUFFER_SIZE;
-+
-+		to_copy = min(nbytes, PPC4XX_SD_BUFFER_SIZE *
-+				      (1 + last_sd - first_sd));
-+		scatterwalk_map_and_copy(buf, dst, dst_start, to_copy, 1);
-+		nbytes -= to_copy;
-+
-+		if (overflow) {
-+			first_sd = 0;
-+			last_sd = overflow;
-+			dst_start += to_copy;
-+			overflow = 0;
- 		}
- 	}
- }
diff --git a/target/linux/apm821xx/patches-4.14/020-0010-crypto-crypto4xx-replace-crypto4xx_dev-s-scatter_buf.patch b/target/linux/apm821xx/patches-4.14/020-0010-crypto-crypto4xx-replace-crypto4xx_dev-s-scatter_buf.patch
deleted file mode 100644
index 1a8f9c59e5a..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0010-crypto-crypto4xx-replace-crypto4xx_dev-s-scatter_buf.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 40e3b847bff70edc28c5290d209e531da6f9e534 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:23 +0200
-Subject: [PATCH 10/25] crypto: crypto4xx - replace crypto4xx_dev's
- scatter_buffer_size with constant
-
-scatter_buffer_size is always set to PPC4XX_SD_BUFFER_SIZE.
-I don't think there's any point in keeping the variable
-around.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 7 +++----
- drivers/crypto/amcc/crypto4xx_core.h | 1 -
- 2 files changed, 3 insertions(+), 5 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -396,10 +396,9 @@ static u32 crypto4xx_build_sdr(struct cr
- 	if (!dev->sdr)
- 		return -ENOMEM;
- 
--	dev->scatter_buffer_size = PPC4XX_SD_BUFFER_SIZE;
- 	dev->scatter_buffer_va =
- 		dma_alloc_coherent(dev->core_dev->device,
--			dev->scatter_buffer_size * PPC4XX_NUM_SD,
-+			PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD,
- 			&dev->scatter_buffer_pa, GFP_ATOMIC);
- 	if (!dev->scatter_buffer_va)
- 		return -ENOMEM;
-@@ -408,7 +407,7 @@ static u32 crypto4xx_build_sdr(struct cr
- 
- 	for (i = 0; i < PPC4XX_NUM_SD; i++) {
- 		sd_array[i].ptr = dev->scatter_buffer_pa +
--				  dev->scatter_buffer_size * i;
-+				  PPC4XX_SD_BUFFER_SIZE * i;
- 	}
- 
- 	return 0;
-@@ -423,7 +422,7 @@ static void crypto4xx_destroy_sdr(struct
- 
- 	if (dev->scatter_buffer_va)
- 		dma_free_coherent(dev->core_dev->device,
--				  dev->scatter_buffer_size * PPC4XX_NUM_SD,
-+				  PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD,
- 				  dev->scatter_buffer_va,
- 				  dev->scatter_buffer_pa);
- }
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -87,7 +87,6 @@ struct crypto4xx_device {
- 					program ce sdr_base_register */
- 	void *scatter_buffer_va;
- 	dma_addr_t scatter_buffer_pa;
--	u32 scatter_buffer_size;
- 
- 	void *shadow_sa_pool;		/* pool of memory for sa in pd_uinfo */
- 	dma_addr_t shadow_sa_pool_pa;
diff --git a/target/linux/apm821xx/patches-4.14/020-0012-crypto-crypto4xx-pointer-arithmetic-overhaul.patch b/target/linux/apm821xx/patches-4.14/020-0012-crypto-crypto4xx-pointer-arithmetic-overhaul.patch
deleted file mode 100644
index ff768c2b746..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0012-crypto-crypto4xx-pointer-arithmetic-overhaul.patch
+++ /dev/null
@@ -1,373 +0,0 @@
-From 9e0a0b3a192af20193f074ed2ad9dd85a2e48d00 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Fri, 25 Aug 2017 15:47:25 +0200
-Subject: [PATCH 12/25] crypto: crypto4xx - pointer arithmetic overhaul
-
-This patch improves the readability of various functions,
-by replacing various void* pointers declarations with
-their respective structs *. This makes it possible to go
-for the eye-friendly array-indexing methods.
-
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 26 ++++++++--------
- drivers/crypto/amcc/crypto4xx_core.c | 60 +++++++++++++++---------------------
- drivers/crypto/amcc/crypto4xx_core.h | 41 +++++++++++++-----------
- 3 files changed, 59 insertions(+), 68 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -134,7 +134,7 @@ static int crypto4xx_setkey_aes(struct c
- 		}
- 	}
- 	/* Setup SA */
--	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
-+	sa = ctx->sa_in;
- 
- 	set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, (cm == CRYPTO_MODE_CBC ?
- 				 SA_SAVE_IV : SA_NOT_SAVE_IV),
-@@ -160,7 +160,7 @@ static int crypto4xx_setkey_aes(struct c
- 	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
- 
- 	memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
--	sa = (struct dynamic_sa_ctl *) ctx->sa_out;
-+	sa = ctx->sa_out;
- 	sa->sa_command_0.bf.dir = DIR_OUTBOUND;
- 
- 	return 0;
-@@ -249,8 +249,7 @@ static int crypto4xx_hash_alg_init(struc
- 	struct crypto_alg *alg = tfm->__crt_alg;
- 	struct crypto4xx_alg *my_alg = crypto_alg_to_crypto4xx_alg(alg);
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
--	struct dynamic_sa_ctl *sa;
--	struct dynamic_sa_hash160 *sa_in;
-+	struct dynamic_sa_hash160 *sa;
- 	int rc;
- 
- 	ctx->dev   = my_alg->dev;
-@@ -274,25 +273,24 @@ static int crypto4xx_hash_alg_init(struc
- 
- 	crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
- 				 sizeof(struct crypto4xx_ctx));
--	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
--	set_dynamic_sa_command_0(sa, SA_SAVE_HASH, SA_NOT_SAVE_IV,
-+	sa = (struct dynamic_sa_hash160 *)ctx->sa_in;
-+	set_dynamic_sa_command_0(&sa->ctrl, SA_SAVE_HASH, SA_NOT_SAVE_IV,
- 				 SA_NOT_LOAD_HASH, SA_LOAD_IV_FROM_SA,
- 				 SA_NO_HEADER_PROC, ha, SA_CIPHER_ALG_NULL,
- 				 SA_PAD_TYPE_ZERO, SA_OP_GROUP_BASIC,
- 				 SA_OPCODE_HASH, DIR_INBOUND);
--	set_dynamic_sa_command_1(sa, 0, SA_HASH_MODE_HASH,
-+	set_dynamic_sa_command_1(&sa->ctrl, 0, SA_HASH_MODE_HASH,
- 				 CRYPTO_FEEDBACK_MODE_NO_FB, SA_EXTENDED_SN_OFF,
- 				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
- 				 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- 				 SA_NOT_COPY_HDR);
- 	ctx->direction = DIR_INBOUND;
--	sa->sa_contents.w = SA_HASH160_CONTENTS;
--	sa_in = (struct dynamic_sa_hash160 *) ctx->sa_in;
- 	/* Need to zero hash digest in SA */
--	memset(sa_in->inner_digest, 0, sizeof(sa_in->inner_digest));
--	memset(sa_in->outer_digest, 0, sizeof(sa_in->outer_digest));
--	sa_in->state_ptr = ctx->state_record_dma_addr;
--	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
-+	memset(sa->inner_digest, 0, sizeof(sa->inner_digest));
-+	memset(sa->outer_digest, 0, sizeof(sa->outer_digest));
-+	sa->state_ptr = ctx->state_record_dma_addr;
-+	ctx->offset_to_sr_ptr =
-+		get_dynamic_sa_offset_state_ptr_field(&sa->ctrl);
- 
- 	return 0;
- }
-@@ -303,7 +301,7 @@ int crypto4xx_hash_init(struct ahash_req
- 	int ds;
- 	struct dynamic_sa_ctl *sa;
- 
--	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
-+	sa = ctx->sa_in;
- 	ds = crypto_ahash_digestsize(
- 			__crypto_ahash_cast(req->base.tfm));
- 	sa->sa_command_0.bf.digest_len = ds >> 2;
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -211,7 +211,7 @@ static u32 crypto4xx_build_pdr(struct cr
- 	}
- 	memset(dev->pdr, 0, sizeof(struct ce_pd) * PPC4XX_NUM_PD);
- 	dev->shadow_sa_pool = dma_alloc_coherent(dev->core_dev->device,
--				   256 * PPC4XX_NUM_PD,
-+				   sizeof(union shadow_sa_buf) * PPC4XX_NUM_PD,
- 				   &dev->shadow_sa_pool_pa,
- 				   GFP_ATOMIC);
- 	if (!dev->shadow_sa_pool)
-@@ -223,16 +223,14 @@ static u32 crypto4xx_build_pdr(struct cr
- 	if (!dev->shadow_sr_pool)
- 		return -ENOMEM;
- 	for (i = 0; i < PPC4XX_NUM_PD; i++) {
--		pd_uinfo = (struct pd_uinfo *) (dev->pdr_uinfo +
--						sizeof(struct pd_uinfo) * i);
-+		pd_uinfo = &dev->pdr_uinfo[i];
- 
- 		/* alloc 256 bytes which is enough for any kind of dynamic sa */
--		pd_uinfo->sa_va = dev->shadow_sa_pool + 256 * i;
-+		pd_uinfo->sa_va = &dev->shadow_sa_pool[i].sa;
- 		pd_uinfo->sa_pa = dev->shadow_sa_pool_pa + 256 * i;
- 
- 		/* alloc state record */
--		pd_uinfo->sr_va = dev->shadow_sr_pool +
--		    sizeof(struct sa_state_record) * i;
-+		pd_uinfo->sr_va = &dev->shadow_sr_pool[i];
- 		pd_uinfo->sr_pa = dev->shadow_sr_pool_pa +
- 		    sizeof(struct sa_state_record) * i;
- 	}
-@@ -248,8 +246,9 @@ static void crypto4xx_destroy_pdr(struct
- 				  dev->pdr, dev->pdr_pa);
- 
- 	if (dev->shadow_sa_pool)
--		dma_free_coherent(dev->core_dev->device, 256 * PPC4XX_NUM_PD,
--				  dev->shadow_sa_pool, dev->shadow_sa_pool_pa);
-+		dma_free_coherent(dev->core_dev->device,
-+			sizeof(union shadow_sa_buf) * PPC4XX_NUM_PD,
-+			dev->shadow_sa_pool, dev->shadow_sa_pool_pa);
- 
- 	if (dev->shadow_sr_pool)
- 		dma_free_coherent(dev->core_dev->device,
-@@ -277,11 +276,9 @@ static u32 crypto4xx_get_pd_from_pdr_nol
- 
- static u32 crypto4xx_put_pd_to_pdr(struct crypto4xx_device *dev, u32 idx)
- {
--	struct pd_uinfo *pd_uinfo;
-+	struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[idx];
- 	unsigned long flags;
- 
--	pd_uinfo = (struct pd_uinfo *)(dev->pdr_uinfo +
--				       sizeof(struct pd_uinfo) * idx);
- 	spin_lock_irqsave(&dev->core_dev->lock, flags);
- 	if (dev->pdr_tail != PPC4XX_LAST_PD)
- 		dev->pdr_tail++;
-@@ -298,7 +295,7 @@ static struct ce_pd *crypto4xx_get_pdp(s
- {
- 	*pd_dma = dev->pdr_pa + sizeof(struct ce_pd) * idx;
- 
--	return dev->pdr + sizeof(struct ce_pd) * idx;
-+	return &dev->pdr[idx];
- }
- 
- /**
-@@ -376,7 +373,7 @@ static inline struct ce_gd *crypto4xx_ge
- {
- 	*gd_dma = dev->gdr_pa + sizeof(struct ce_gd) * idx;
- 
--	return (struct ce_gd *) (dev->gdr + sizeof(struct ce_gd) * idx);
-+	return &dev->gdr[idx];
- }
- 
- /**
-@@ -387,7 +384,6 @@ static inline struct ce_gd *crypto4xx_ge
- static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev)
- {
- 	int i;
--	struct ce_sd *sd_array;
- 
- 	/* alloc memory for scatter descriptor ring */
- 	dev->sdr = dma_alloc_coherent(dev->core_dev->device,
-@@ -403,10 +399,8 @@ static u32 crypto4xx_build_sdr(struct cr
- 	if (!dev->scatter_buffer_va)
- 		return -ENOMEM;
- 
--	sd_array = dev->sdr;
--
- 	for (i = 0; i < PPC4XX_NUM_SD; i++) {
--		sd_array[i].ptr = dev->scatter_buffer_pa +
-+		dev->sdr[i].ptr = dev->scatter_buffer_pa +
- 				  PPC4XX_SD_BUFFER_SIZE * i;
- 	}
- 
-@@ -476,7 +470,7 @@ static inline struct ce_sd *crypto4xx_ge
- {
- 	*sd_dma = dev->sdr_pa + sizeof(struct ce_sd) * idx;
- 
--	return  (struct ce_sd *)(dev->sdr + sizeof(struct ce_sd) * idx);
-+	return &dev->sdr[idx];
- }
- 
- static void crypto4xx_copy_pkt_to_dst(struct crypto4xx_device *dev,
-@@ -525,11 +519,10 @@ static u32 crypto4xx_copy_digest_to_dst(
- 					struct crypto4xx_ctx *ctx)
- {
- 	struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *) ctx->sa_in;
--	struct sa_state_record *state_record =
--				(struct sa_state_record *) pd_uinfo->sr_va;
- 
- 	if (sa->sa_command_0.bf.hash_alg == SA_HASH_ALG_SHA1) {
--		memcpy((void *) pd_uinfo->dest_va, state_record->save_digest,
-+		memcpy((void *) pd_uinfo->dest_va,
-+		       pd_uinfo->sr_va->save_digest,
- 		       SA_HASH_ALG_SHA1_DIGEST_SIZE);
- 	}
- 
-@@ -612,11 +605,9 @@ static u32 crypto4xx_ahash_done(struct c
- 
- static u32 crypto4xx_pd_done(struct crypto4xx_device *dev, u32 idx)
- {
--	struct ce_pd *pd;
--	struct pd_uinfo *pd_uinfo;
-+	struct ce_pd *pd = &dev->pdr[idx];
-+	struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[idx];
- 
--	pd =  dev->pdr + sizeof(struct ce_pd)*idx;
--	pd_uinfo = dev->pdr_uinfo + sizeof(struct pd_uinfo)*idx;
- 	if (crypto_tfm_alg_type(pd_uinfo->async_req->tfm) ==
- 			CRYPTO_ALG_TYPE_ABLKCIPHER)
- 		return crypto4xx_ablkcipher_done(dev, pd_uinfo, pd);
-@@ -717,7 +708,6 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	unsigned long flags;
- 	struct pd_uinfo *pd_uinfo = NULL;
- 	unsigned int nbytes = datalen, idx;
--	unsigned int ivlen = 0;
- 	u32 gd_idx = 0;
- 
- 	/* figure how many gd is needed */
-@@ -776,17 +766,15 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	}
- 	spin_unlock_irqrestore(&dev->core_dev->lock, flags);
- 
--	pd_uinfo = (struct pd_uinfo *)(dev->pdr_uinfo +
--				       sizeof(struct pd_uinfo) * pd_entry);
-+	pd_uinfo = &dev->pdr_uinfo[pd_entry];
- 	pd = crypto4xx_get_pdp(dev, &pd_dma, pd_entry);
- 	pd_uinfo->async_req = req;
- 	pd_uinfo->num_gd = num_gd;
- 	pd_uinfo->num_sd = num_sd;
- 
- 	if (iv_len || ctx->is_hash) {
--		ivlen = iv_len;
- 		pd->sa = pd_uinfo->sa_pa;
--		sa = (struct dynamic_sa_ctl *) pd_uinfo->sa_va;
-+		sa = pd_uinfo->sa_va;
- 		if (ctx->direction == DIR_INBOUND)
- 			memcpy(sa, ctx->sa_in, ctx->sa_len * 4);
- 		else
-@@ -796,14 +784,15 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 			&pd_uinfo->sr_pa, 4);
- 
- 		if (iv_len)
--			crypto4xx_memcpy_le(pd_uinfo->sr_va, iv, iv_len);
-+			crypto4xx_memcpy_le(pd_uinfo->sr_va->save_iv,
-+					    iv, iv_len);
- 	} else {
- 		if (ctx->direction == DIR_INBOUND) {
- 			pd->sa = ctx->sa_in_dma_addr;
--			sa = (struct dynamic_sa_ctl *) ctx->sa_in;
-+			sa = ctx->sa_in;
- 		} else {
- 			pd->sa = ctx->sa_out_dma_addr;
--			sa = (struct dynamic_sa_ctl *) ctx->sa_out;
-+			sa = ctx->sa_out;
- 		}
- 	}
- 	pd->sa_len = ctx->sa_len;
-@@ -1011,9 +1000,8 @@ static void crypto4xx_bh_tasklet_cb(unsi
- 
- 	while (core_dev->dev->pdr_head != core_dev->dev->pdr_tail) {
- 		tail = core_dev->dev->pdr_tail;
--		pd_uinfo = core_dev->dev->pdr_uinfo +
--			sizeof(struct pd_uinfo)*tail;
--		pd =  core_dev->dev->pdr + sizeof(struct ce_pd) * tail;
-+		pd_uinfo = &core_dev->dev->pdr_uinfo[tail];
-+		pd = &core_dev->dev->pdr[tail];
- 		if ((pd_uinfo->state == PD_ENTRY_INUSE) &&
- 				   pd->pd_ctl.bf.pe_done &&
- 				   !pd->pd_ctl.bf.host_ready) {
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -23,6 +23,8 @@
- #define __CRYPTO4XX_CORE_H__
- 
- #include <crypto/internal/hash.h>
-+#include "crypto4xx_reg_def.h"
-+#include "crypto4xx_sa.h"
- 
- #define MODULE_NAME "crypto4xx"
- 
-@@ -48,6 +50,13 @@
- 
- struct crypto4xx_device;
- 
-+union shadow_sa_buf {
-+	struct dynamic_sa_ctl sa;
-+
-+	/* alloc 256 bytes which is enough for any kind of dynamic sa */
-+	u8 buf[256];
-+} __packed;
-+
- struct pd_uinfo {
- 	struct crypto4xx_device *dev;
- 	u32   state;
-@@ -60,9 +69,9 @@ struct pd_uinfo {
- 				used by this packet */
- 	u32 num_sd;		/* number of scatter discriptors
- 				used by this packet */
--	void *sa_va;		/* shadow sa, when using cp from ctx->sa */
-+	struct dynamic_sa_ctl *sa_va;	/* shadow sa */
- 	u32 sa_pa;
--	void *sr_va;		/* state record for shadow sa */
-+	struct sa_state_record *sr_va;	/* state record for shadow sa */
- 	u32 sr_pa;
- 	struct scatterlist *dest_va;
- 	struct crypto_async_request *async_req; 	/* base crypto request
-@@ -75,22 +84,18 @@ struct crypto4xx_device {
- 	void __iomem *ce_base;
- 	void __iomem *trng_base;
- 
--	void *pdr;			/* base address of packet
--					descriptor ring */
--	dma_addr_t pdr_pa;		/* physical address used to
--					program ce pdr_base_register */
--	void *gdr;                      /* gather descriptor ring */
--	dma_addr_t gdr_pa;		/* physical address used to
--					program ce gdr_base_register */
--	void *sdr;			/* scatter descriptor ring */
--	dma_addr_t sdr_pa;		/* physical address used to
--					program ce sdr_base_register */
-+	struct ce_pd *pdr;	/* base address of packet descriptor ring */
-+	dma_addr_t pdr_pa;	/* physical address of pdr_base_register */
-+	struct ce_gd *gdr;	/* gather descriptor ring */
-+	dma_addr_t gdr_pa;	/* physical address of gdr_base_register */
-+	struct ce_sd *sdr;	/* scatter descriptor ring */
-+	dma_addr_t sdr_pa;	/* physical address of sdr_base_register */
- 	void *scatter_buffer_va;
- 	dma_addr_t scatter_buffer_pa;
- 
--	void *shadow_sa_pool;		/* pool of memory for sa in pd_uinfo */
-+	union shadow_sa_buf *shadow_sa_pool;
- 	dma_addr_t shadow_sa_pool_pa;
--	void *shadow_sr_pool;		/* pool of memory for sr in pd_uinfo */
-+	struct sa_state_record *shadow_sr_pool;
- 	dma_addr_t shadow_sr_pool_pa;
- 	u32 pdr_tail;
- 	u32 pdr_head;
-@@ -98,7 +103,7 @@ struct crypto4xx_device {
- 	u32 gdr_head;
- 	u32 sdr_tail;
- 	u32 sdr_head;
--	void *pdr_uinfo;
-+	struct pd_uinfo *pdr_uinfo;
- 	struct list_head alg_list;	/* List of algorithm supported
- 					by this device */
- };
-@@ -116,11 +121,11 @@ struct crypto4xx_core_device {
- 
- struct crypto4xx_ctx {
- 	struct crypto4xx_device *dev;
--	void *sa_in;
-+	struct dynamic_sa_ctl *sa_in;
- 	dma_addr_t sa_in_dma_addr;
--	void *sa_out;
-+	struct dynamic_sa_ctl *sa_out;
- 	dma_addr_t sa_out_dma_addr;
--	void *state_record;
-+	struct sa_state_record *state_record;
- 	dma_addr_t state_record_dma_addr;
- 	u32 sa_len;
- 	u32 offset_to_sr_ptr;           /* offset to state ptr, in dynamic sa */
diff --git a/target/linux/apm821xx/patches-4.14/020-0013-crypto-crypto4xx-wire-up-hmac_mc-to-hmac_muting.patch b/target/linux/apm821xx/patches-4.14/020-0013-crypto-crypto4xx-wire-up-hmac_mc-to-hmac_muting.patch
deleted file mode 100644
index 9ddfcb95f1c..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0013-crypto-crypto4xx-wire-up-hmac_mc-to-hmac_muting.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 5a4326d3a03f03c2518a2c255be33a7114af3230 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:05 +0200
-Subject: [PATCH 13/25] crypto: crypto4xx - wire up hmac_mc to hmac_muting
-
-The hmac_mc parameter of set_dynamic_sa_command_1()
-was defined but not used. On closer inspection it
-turns out, it was never wired up.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -63,6 +63,7 @@ static void set_dynamic_sa_command_1(str
- 	sa->sa_command_1.bf.crypto_mode9_8 = cm & 3;
- 	sa->sa_command_1.bf.feedback_mode = cfb,
- 	sa->sa_command_1.bf.sa_rev = 1;
-+	sa->sa_command_1.bf.hmac_muting = hmac_mc;
- 	sa->sa_command_1.bf.extended_seq_num = esn;
- 	sa->sa_command_1.bf.seq_num_mask = sn_mask;
- 	sa->sa_command_1.bf.mutable_bit_proc = mute;
diff --git a/target/linux/apm821xx/patches-4.14/020-0014-crypto-crypto4xx-fix-off-by-one-AES-OFB.patch b/target/linux/apm821xx/patches-4.14/020-0014-crypto-crypto4xx-fix-off-by-one-AES-OFB.patch
deleted file mode 100644
index 98c584dbc83..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0014-crypto-crypto4xx-fix-off-by-one-AES-OFB.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From e9b8e4e1129d0886094cfe013cdbaafc4ce0de76 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:06 +0200
-Subject: [PATCH 14/25] crypto: crypto4xx - fix off-by-one AES-OFB
-
-I used aes-cbc as a template for ofb. But sadly I forgot
-to update set_key method to crypto4xx_setkey_aes_ofb().
-
-this was caught by the testmgr:
-alg: skcipher: Test 1 failed (invalid result) on encr. for ofb-aes-ppc4xx
-00000000: 76 49 ab ac 81 19 b2 46 ce e9 8e 9b 12 e9 19 7d
-00000010: 50 86 cb 9b 50 72 19 ee 95 db 11 3a 91 76 78 b2
-00000020: 73 be d6 b8 e3 c1 74 3b 71 16 e6 9e 22 22 95 16
-00000030: 3f f1 ca a1 68 1f ac 09 12 0e ca 30 75 86 e1 a7
-
-With the correct set_key method, the aes-ofb cipher passes the test.
-
-name         : ofb(aes)
-driver       : ofb-aes-ppc4xx
-module       : crypto4xx
-priority     : 300
-refcnt       : 1
-selftest     : passed
-internal     : no
-type         : ablkcipher
-async        : yes
-blocksize    : 16
-min keysize  : 16
-max keysize  : 32
-ivsize       : 16
-geniv        : <default>
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1153,7 +1153,7 @@ struct crypto4xx_alg_common crypto4xx_al
- 				.min_keysize	= AES_MIN_KEY_SIZE,
- 				.max_keysize	= AES_MAX_KEY_SIZE,
- 				.ivsize		= AES_IV_SIZE,
--				.setkey		= crypto4xx_setkey_aes_cbc,
-+				.setkey		= crypto4xx_setkey_aes_ofb,
- 				.encrypt	= crypto4xx_encrypt,
- 				.decrypt	= crypto4xx_decrypt,
- 			}
diff --git a/target/linux/apm821xx/patches-4.14/020-0015-crypto-crypto4xx-fix-type-mismatch-compiler-error.patch b/target/linux/apm821xx/patches-4.14/020-0015-crypto-crypto4xx-fix-type-mismatch-compiler-error.patch
deleted file mode 100644
index f0f1d0ea5a3..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0015-crypto-crypto4xx-fix-type-mismatch-compiler-error.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 333eb3edda3842f3e5dbd723cb18bbe47eb0508b Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:07 +0200
-Subject: [PATCH 15/25] crypto: crypto4xx - fix type mismatch compiler error
-
-This patch fixes a type mismatch error that I accidentally
-introduced when I moved and refactored the dynamic_contents
-helpers.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_sa.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -266,9 +266,9 @@ get_dynamic_sa_offset_state_ptr_field(st
- 	return sizeof(struct dynamic_sa_ctl) + offset * 4;
- }
- 
--static inline u8 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
-+static inline u32 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
- {
--	return (u8 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
-+	return (u32 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
- }
- 
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0017-crypto-crypto4xx-add-backlog-queue-support.patch b/target/linux/apm821xx/patches-4.14/020-0017-crypto-crypto4xx-add-backlog-queue-support.patch
deleted file mode 100644
index cc88baecb42..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0017-crypto-crypto4xx-add-backlog-queue-support.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 8ef8d195430ca3542d0434cf25e5115484b9fa32 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:09 +0200
-Subject: [PATCH 17/25] crypto: crypto4xx - add backlog queue support
-
-Previously, If the crypto4xx driver used all available
-security contexts, it would simply refuse new requests
-with -EAGAIN. CRYPTO_TFM_REQ_MAY_BACKLOG was ignored.
-
-in case of dm-crypt.c's crypt_convert() function this was
-causing the following errors to manifest, if the system was
-pushed hard enough:
-
-| EXT4-fs warning (dm-1): ext4_end_bio:314: I/O error -5 writing to ino ..
-| EXT4-fs warning (dm-1): ext4_end_bio:314: I/O error -5 writing to ino ..
-| EXT4-fs warning (dm-1): ext4_end_bio:314: I/O error -5 writing to ino ..
-| JBD2: Detected IO errors while flushing file data on dm-1-8
-| Aborting journal on device dm-1-8.
-| EXT4-fs error : ext4_journal_check_start:56: Detected aborted journal
-| EXT4-fs (dm-1): Remounting filesystem read-only
-| EXT4-fs : ext4_writepages: jbd2_start: 2048 pages, inode 498...; err -30
-
-(This did cause corruptions due to failed writes)
-
-To fix this mess, the crypto4xx driver needs to notifiy the
-user to slow down. This can be achieved by returning -EBUSY
-on requests, once the crypto hardware was falling behind.
-
-Note: -EBUSY has two different meanings. Setting the flag
-CRYPTO_TFM_REQ_MAY_BACKLOG implies that the request was
-successfully queued, by the crypto driver. To achieve this
-requirement, the implementation introduces a threshold check and
-adds logic to the completion routines in much the same way as
-AMD's Cryptographic Coprocessor (CCP) driver do.
-
-Note2: Tests showed that dm-crypt starved ipsec traffic.
-Under load, ipsec links dropped to 0 Kbits/s. This is because
-dm-crypt's callback would instantly queue the next request.
-In order to not starve ipsec, the driver reserves a small
-portion of the available crypto contexts for this purpose.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 47 ++++++++++++++++++++++++++++++------
- drivers/crypto/amcc/crypto4xx_core.h |  3 ++-
- 2 files changed, 41 insertions(+), 9 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -39,6 +39,7 @@
- #include <crypto/ctr.h>
- #include <crypto/sha.h>
- #include <crypto/scatterwalk.h>
-+#include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
- #include "crypto4xx_sa.h"
-@@ -578,8 +579,10 @@ static u32 crypto4xx_ablkcipher_done(str
- 	}
- 
- 	crypto4xx_ret_sg_desc(dev, pd_uinfo);
--	if (ablk_req->base.complete != NULL)
--		ablk_req->base.complete(&ablk_req->base, 0);
-+
-+	if (pd_uinfo->state & PD_ENTRY_BUSY)
-+		ablkcipher_request_complete(ablk_req, -EINPROGRESS);
-+	ablkcipher_request_complete(ablk_req, 0);
- 
- 	return 0;
- }
-@@ -596,9 +599,10 @@ static u32 crypto4xx_ahash_done(struct c
- 	crypto4xx_copy_digest_to_dst(pd_uinfo,
- 				     crypto_tfm_ctx(ahash_req->base.tfm));
- 	crypto4xx_ret_sg_desc(dev, pd_uinfo);
--	/* call user provided callback function x */
--	if (ahash_req->base.complete != NULL)
--		ahash_req->base.complete(&ahash_req->base, 0);
-+
-+	if (pd_uinfo->state & PD_ENTRY_BUSY)
-+		ahash_request_complete(ahash_req, -EINPROGRESS);
-+	ahash_request_complete(ahash_req, 0);
- 
- 	return 0;
- }
-@@ -709,6 +713,7 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	struct pd_uinfo *pd_uinfo = NULL;
- 	unsigned int nbytes = datalen, idx;
- 	u32 gd_idx = 0;
-+	bool is_busy;
- 
- 	/* figure how many gd is needed */
- 	num_gd = sg_nents_for_len(src, datalen);
-@@ -739,6 +744,31 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	 * already got must be return the original place.
- 	 */
- 	spin_lock_irqsave(&dev->core_dev->lock, flags);
-+	/*
-+	 * Let the caller know to slow down, once more than 13/16ths = 81%
-+	 * of the available data contexts are being used simultaneously.
-+	 *
-+	 * With PPC4XX_NUM_PD = 256, this will leave a "backlog queue" for
-+	 * 31 more contexts. Before new requests have to be rejected.
-+	 */
-+	if (req->flags & CRYPTO_TFM_REQ_MAY_BACKLOG) {
-+		is_busy = ((dev->pdr_head - dev->pdr_tail) % PPC4XX_NUM_PD) >=
-+			((PPC4XX_NUM_PD * 13) / 16);
-+	} else {
-+		/*
-+		 * To fix contention issues between ipsec (no blacklog) and
-+		 * dm-crypto (backlog) reserve 32 entries for "no backlog"
-+		 * data contexts.
-+		 */
-+		is_busy = ((dev->pdr_head - dev->pdr_tail) % PPC4XX_NUM_PD) >=
-+			((PPC4XX_NUM_PD * 15) / 16);
-+
-+		if (is_busy) {
-+			spin_unlock_irqrestore(&dev->core_dev->lock, flags);
-+			return -EBUSY;
-+		}
-+	}
-+
- 	if (num_gd) {
- 		fst_gd = crypto4xx_get_n_gd(dev, num_gd);
- 		if (fst_gd == ERING_WAS_FULL) {
-@@ -893,11 +923,12 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	sa->sa_command_1.bf.hash_crypto_offset = 0;
- 	pd->pd_ctl.w = ctx->pd_ctl;
- 	pd->pd_ctl_len.w = 0x00400000 | datalen;
--	pd_uinfo->state = PD_ENTRY_INUSE;
-+	pd_uinfo->state = PD_ENTRY_INUSE | (is_busy ? PD_ENTRY_BUSY : 0);
-+
- 	wmb();
- 	/* write any value to push engine to read a pd */
- 	writel(1, dev->ce_base + CRYPTO4XX_INT_DESCR_RD);
--	return -EINPROGRESS;
-+	return is_busy ? -EBUSY : -EINPROGRESS;
- }
- 
- /**
-@@ -1002,7 +1033,7 @@ static void crypto4xx_bh_tasklet_cb(unsi
- 		tail = core_dev->dev->pdr_tail;
- 		pd_uinfo = &core_dev->dev->pdr_uinfo[tail];
- 		pd = &core_dev->dev->pdr[tail];
--		if ((pd_uinfo->state == PD_ENTRY_INUSE) &&
-+		if ((pd_uinfo->state & PD_ENTRY_INUSE) &&
- 				   pd->pd_ctl.bf.pe_done &&
- 				   !pd->pd_ctl.bf.host_ready) {
- 			pd->pd_ctl.bf.pe_done = 0;
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -44,7 +44,8 @@
- #define PPC4XX_LAST_SD				(PPC4XX_NUM_SD - 1)
- #define PPC4XX_SD_BUFFER_SIZE			2048
- 
--#define PD_ENTRY_INUSE				1
-+#define PD_ENTRY_BUSY				BIT(1)
-+#define PD_ENTRY_INUSE				BIT(0)
- #define PD_ENTRY_FREE				0
- #define ERING_WAS_FULL				0xffffffff
- 
diff --git a/target/linux/apm821xx/patches-4.14/020-0018-crypto-crypto4xx-use-the-correct-LE32-format-for-IV-.patch b/target/linux/apm821xx/patches-4.14/020-0018-crypto-crypto4xx-use-the-correct-LE32-format-for-IV-.patch
deleted file mode 100644
index c3b58f78bd6..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0018-crypto-crypto4xx-use-the-correct-LE32-format-for-IV-.patch
+++ /dev/null
@@ -1,236 +0,0 @@
-From 4865b122d4aff5151c88d2f7442d5a87f7e795ae Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:10 +0200
-Subject: [PATCH 18/25] crypto: crypto4xx - use the correct LE32 format for IV
- and key defs
-
-The hardware expects that the keys, IVs (and inner/outer hashes)
-are in the le32 format.
-
-This patch changes all hardware interface declarations to use
-the correct LE32 data format for each field.
-
-In order to pass __CHECK_ENDIAN__ checks, crypto4xx_memcpy_le
-has to be honest about the endianness of its parameters.
-The function was split and moved to the common crypto4xx_core.h
-header. This allows the compiler to generate better code if the
-sizes/len is a constant (various *_IV_LEN).
-
-Please note that the hardware isn't consistent with the endiannes
-of the save_digest field in the state record struct though.
-The hashes produced by GHASH and CBC (for CCM) will be in LE32.
-Whereas md5 and sha{1/,256,...} do not need any conversion.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  4 +--
- drivers/crypto/amcc/crypto4xx_core.c | 40 ++----------------------------
- drivers/crypto/amcc/crypto4xx_core.h | 47 +++++++++++++++++++++++++++++++++---
- drivers/crypto/amcc/crypto4xx_sa.h   | 29 ++++++++++++----------
- 4 files changed, 64 insertions(+), 56 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -150,8 +150,8 @@ static int crypto4xx_setkey_aes(struct c
- 				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
- 				 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- 				 SA_NOT_COPY_HDR);
--	crypto4xx_memcpy_le(get_dynamic_sa_key_field(sa),
--			    key, keylen);
-+	crypto4xx_memcpy_to_le32(get_dynamic_sa_key_field(sa),
-+				 key, keylen);
- 	sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
- 	sa->sa_command_1.bf.key_len = keylen >> 3;
- 	ctx->is_hash = 0;
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -619,42 +619,6 @@ static u32 crypto4xx_pd_done(struct cryp
- 		return crypto4xx_ahash_done(dev, pd_uinfo);
- }
- 
--/**
-- * Note: Only use this function to copy items that is word aligned.
-- */
--void crypto4xx_memcpy_le(unsigned int *dst,
--			 const unsigned char *buf,
--			 int len)
--{
--	u8 *tmp;
--	for (; len >= 4; buf += 4, len -= 4)
--		*dst++ = cpu_to_le32(*(unsigned int *) buf);
--
--	tmp = (u8 *)dst;
--	switch (len) {
--	case 3:
--		*tmp++ = 0;
--		*tmp++ = *(buf+2);
--		*tmp++ = *(buf+1);
--		*tmp++ = *buf;
--		break;
--	case 2:
--		*tmp++ = 0;
--		*tmp++ = 0;
--		*tmp++ = *(buf+1);
--		*tmp++ = *buf;
--		break;
--	case 1:
--		*tmp++ = 0;
--		*tmp++ = 0;
--		*tmp++ = 0;
--		*tmp++ = *buf;
--		break;
--	default:
--		break;
--	}
--}
--
- static void crypto4xx_stop_all(struct crypto4xx_core_device *core_dev)
- {
- 	crypto4xx_destroy_pdr(core_dev->dev);
-@@ -814,8 +778,8 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 			&pd_uinfo->sr_pa, 4);
- 
- 		if (iv_len)
--			crypto4xx_memcpy_le(pd_uinfo->sr_va->save_iv,
--					    iv, iv_len);
-+			crypto4xx_memcpy_to_le32(pd_uinfo->sr_va->save_iv,
-+						 iv, iv_len);
- 	} else {
- 		if (ctx->direction == DIR_INBOUND) {
- 			pd->sa = ctx->sa_in_dma_addr;
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -166,9 +166,7 @@ int crypto4xx_alloc_sa(struct crypto4xx_
- void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
- void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
- u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
--void crypto4xx_memcpy_le(unsigned int *dst,
--			 const unsigned char *buf, int len);
--u32 crypto4xx_build_pd(struct crypto_async_request *req,
-+int crypto4xx_build_pd(struct crypto_async_request *req,
- 		       struct crypto4xx_ctx *ctx,
- 		       struct scatterlist *src,
- 		       struct scatterlist *dst,
-@@ -193,4 +191,47 @@ int crypto4xx_hash_digest(struct ahash_r
- int crypto4xx_hash_final(struct ahash_request *req);
- int crypto4xx_hash_update(struct ahash_request *req);
- int crypto4xx_hash_init(struct ahash_request *req);
-+
-+/**
-+ * Note: Only use this function to copy items that is word aligned.
-+ */
-+static inline void crypto4xx_memcpy_swab32(u32 *dst, const void *buf,
-+					   size_t len)
-+{
-+	for (; len >= 4; buf += 4, len -= 4)
-+		*dst++ = __swab32p((u32 *) buf);
-+
-+	if (len) {
-+		const u8 *tmp = (u8 *)buf;
-+
-+		switch (len) {
-+		case 3:
-+			*dst = (tmp[2] << 16) |
-+			       (tmp[1] << 8) |
-+			       tmp[0];
-+			break;
-+		case 2:
-+			*dst = (tmp[1] << 8) |
-+			       tmp[0];
-+			break;
-+		case 1:
-+			*dst = tmp[0];
-+			break;
-+		default:
-+			break;
-+		}
-+	}
-+}
-+
-+static inline void crypto4xx_memcpy_from_le32(u32 *dst, const void *buf,
-+					      size_t len)
-+{
-+	crypto4xx_memcpy_swab32(dst, buf, len);
-+}
-+
-+static inline void crypto4xx_memcpy_to_le32(__le32 *dst, const void *buf,
-+					    size_t len)
-+{
-+	crypto4xx_memcpy_swab32((u32 *)dst, buf, len);
-+}
- #endif
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -181,9 +181,12 @@ struct dynamic_sa_ctl {
-  * State Record for Security Association (SA)
-  */
- struct  sa_state_record {
--	u32 save_iv[4];
--	u32 save_hash_byte_cnt[2];
--	u32 save_digest[16];
-+	__le32 save_iv[4];
-+	__le32 save_hash_byte_cnt[2];
-+	union {
-+		u32 save_digest[16]; /* for MD5/SHA */
-+		__le32 save_digest_le32[16]; /* GHASH / CBC */
-+	};
- } __attribute__((packed));
- 
- /**
-@@ -192,8 +195,8 @@ struct  sa_state_record {
-  */
- struct dynamic_sa_aes128 {
- 	struct dynamic_sa_ctl	ctrl;
--	u32 key[4];
--	u32 iv[4]; /* for CBC, OFC, and CFB mode */
-+	__le32 key[4];
-+	__le32 iv[4]; /* for CBC, OFC, and CFB mode */
- 	u32 state_ptr;
- 	u32 reserved;
- } __attribute__((packed));
-@@ -206,8 +209,8 @@ struct dynamic_sa_aes128 {
-  */
- struct dynamic_sa_aes192 {
- 	struct dynamic_sa_ctl ctrl;
--	u32 key[6];
--	u32 iv[4]; /* for CBC, OFC, and CFB mode */
-+	__le32 key[6];
-+	__le32 iv[4]; /* for CBC, OFC, and CFB mode */
- 	u32 state_ptr;
- 	u32 reserved;
- } __attribute__((packed));
-@@ -220,8 +223,8 @@ struct dynamic_sa_aes192 {
-  */
- struct dynamic_sa_aes256 {
- 	struct dynamic_sa_ctl ctrl;
--	u32 key[8];
--	u32 iv[4]; /* for CBC, OFC, and CFB mode */
-+	__le32 key[8];
-+	__le32 iv[4]; /* for CBC, OFC, and CFB mode */
- 	u32 state_ptr;
- 	u32 reserved;
- } __attribute__((packed));
-@@ -235,8 +238,8 @@ struct dynamic_sa_aes256 {
-  */
- struct dynamic_sa_hash160 {
- 	struct dynamic_sa_ctl ctrl;
--	u32 inner_digest[5];
--	u32 outer_digest[5];
-+	__le32 inner_digest[5];
-+	__le32 outer_digest[5];
- 	u32 state_ptr;
- 	u32 reserved;
- } __attribute__((packed));
-@@ -266,9 +269,9 @@ get_dynamic_sa_offset_state_ptr_field(st
- 	return sizeof(struct dynamic_sa_ctl) + offset * 4;
- }
- 
--static inline u32 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
-+static inline __le32 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)
- {
--	return (u32 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
-+	return (__le32 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
- }
- 
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch b/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
deleted file mode 100644
index 7efb0e699f3..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
+++ /dev/null
@@ -1,535 +0,0 @@
-From cd4dcd6da7a2610e0562a6e130bb68cc544a8fb1 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:11 +0200
-Subject: [PATCH 19/25] crypto: crypto4xx - overhaul crypto4xx_build_pd()
-
-This patch overhauls and fixes code related to crypto4xx_build_pd()
-
- * crypto4xx_build_pd() did not handle chained source scatterlist.
-   This is fixed by replacing the buggy indexed-access of &src[idx]
-   with sg_next() in the gather array setup loop.
-
- * The redundant is_hash, direction, save_iv and pd_ctl members
-   in the crypto4xx_ctx struct have been removed.
-    - is_hash can be derived from the crypto_async_request parameter.
-    - direction is already part of the security association's
-      bf.dir bitfield.
-    - save_iv is unused.
-    - pd_ctl always had the host_ready bit enabled anyway.
-      (the hash_final case is rather pointless, since the ahash
-       code has been deactivated).
-
- * make crypto4xx_build_pd()'s caller responsible for converting
-   the IV to the LE32 format.
-
- * change crypto4xx_ahash_update() and crypto4xx_ahash_digest() to
-   initialize a temporary destination scatterlist. This allows the
-   removal of an ugly cast of req->result (which is a pointer to an
-   u8-array) to a scatterlist pointer.
-
- * change crypto4xx_build_pd() return type to int. After all
-   it returns -EINPROGRESS/-EBUSY.
-
- * fix crypto4xx_build_pd() thread-unsafe sa handling.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  87 +++++++++++-------------
- drivers/crypto/amcc/crypto4xx_core.c | 128 ++++++++++++++++-------------------
- drivers/crypto/amcc/crypto4xx_core.h |  12 ++--
- 3 files changed, 103 insertions(+), 124 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -75,27 +75,29 @@ static void set_dynamic_sa_command_1(str
- int crypto4xx_encrypt(struct ablkcipher_request *req)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	unsigned int ivlen = crypto_ablkcipher_ivsize(
-+		crypto_ablkcipher_reqtfm(req));
-+	__le32 iv[ivlen];
- 
--	ctx->direction = DIR_OUTBOUND;
--	ctx->is_hash = 0;
--	ctx->pd_ctl = 0x1;
-+	if (ivlen)
-+		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, req->info,
--		crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
-+		req->nbytes, iv, ivlen, ctx->sa_out, ctx->sa_len);
- }
- 
- int crypto4xx_decrypt(struct ablkcipher_request *req)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	unsigned int ivlen = crypto_ablkcipher_ivsize(
-+		crypto_ablkcipher_reqtfm(req));
-+	__le32 iv[ivlen];
- 
--	ctx->direction = DIR_INBOUND;
--	ctx->is_hash = 0;
--	ctx->pd_ctl = 1;
-+	if (ivlen)
-+		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, req->info,
--		crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
-+		req->nbytes, iv, ivlen, ctx->sa_in, ctx->sa_len);
- }
- 
- /**
-@@ -154,11 +156,6 @@ static int crypto4xx_setkey_aes(struct c
- 				 key, keylen);
- 	sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
- 	sa->sa_command_1.bf.key_len = keylen >> 3;
--	ctx->is_hash = 0;
--	ctx->direction = DIR_INBOUND;
--	memcpy(sa + get_dynamic_sa_offset_state_ptr_field(sa),
--	       (void *)&ctx->state_record_dma_addr, 4);
--	ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
- 
- 	memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
- 	sa = ctx->sa_out;
-@@ -207,7 +204,7 @@ int crypto4xx_setkey_rfc3686(struct cryp
- 	if (rc)
- 		return rc;
- 
--	memcpy(ctx->state_record,
-+	crypto4xx_memcpy_to_le32(ctx->state_record->save_iv,
- 		key + keylen - CTR_RFC3686_NONCE_SIZE, CTR_RFC3686_NONCE_SIZE);
- 
- 	return 0;
-@@ -216,27 +213,29 @@ int crypto4xx_setkey_rfc3686(struct cryp
- int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
--	__be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
--		*(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
--
--	ctx->direction = DIR_OUTBOUND;
--	ctx->pd_ctl = 1;
-+	__le32 iv[AES_IV_SIZE / 4] = {
-+		ctx->state_record->save_iv[0],
-+		cpu_to_le32p((u32 *) req->info),
-+		cpu_to_le32p((u32 *) (req->info + 4)),
-+		cpu_to_le32(1) };
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, iv, AES_IV_SIZE);
-+				  req->nbytes, iv, AES_IV_SIZE,
-+				  ctx->sa_out, ctx->sa_len);
- }
- 
- int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
--	__be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
--		*(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
--
--	ctx->direction = DIR_INBOUND;
--	ctx->pd_ctl = 1;
-+	__le32 iv[AES_IV_SIZE / 4] = {
-+		ctx->state_record->save_iv[0],
-+		cpu_to_le32p((u32 *) req->info),
-+		cpu_to_le32p((u32 *) (req->info + 4)),
-+		cpu_to_le32(1) };
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, iv, AES_IV_SIZE);
-+				  req->nbytes, iv, AES_IV_SIZE,
-+				  ctx->sa_out, ctx->sa_len);
- }
- 
- /**
-@@ -254,7 +253,6 @@ static int crypto4xx_hash_alg_init(struc
- 	int rc;
- 
- 	ctx->dev   = my_alg->dev;
--	ctx->is_hash = 1;
- 
- 	/* Create SA */
- 	if (ctx->sa_in_dma_addr || ctx->sa_out_dma_addr)
-@@ -285,13 +283,9 @@ static int crypto4xx_hash_alg_init(struc
- 				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
- 				 SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- 				 SA_NOT_COPY_HDR);
--	ctx->direction = DIR_INBOUND;
- 	/* Need to zero hash digest in SA */
- 	memset(sa->inner_digest, 0, sizeof(sa->inner_digest));
- 	memset(sa->outer_digest, 0, sizeof(sa->outer_digest));
--	sa->state_ptr = ctx->state_record_dma_addr;
--	ctx->offset_to_sr_ptr =
--		get_dynamic_sa_offset_state_ptr_field(&sa->ctrl);
- 
- 	return 0;
- }
-@@ -307,23 +301,22 @@ int crypto4xx_hash_init(struct ahash_req
- 			__crypto_ahash_cast(req->base.tfm));
- 	sa->sa_command_0.bf.digest_len = ds >> 2;
- 	sa->sa_command_0.bf.load_hash_state = SA_LOAD_HASH_FROM_SA;
--	ctx->is_hash = 1;
--	ctx->direction = DIR_INBOUND;
- 
- 	return 0;
- }
- 
- int crypto4xx_hash_update(struct ahash_request *req)
- {
-+	struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	struct scatterlist dst;
-+	unsigned int ds = crypto_ahash_digestsize(ahash);
-+
-+	sg_init_one(&dst, req->result, ds);
- 
--	ctx->is_hash = 1;
--	ctx->pd_ctl = 0x11;
--	ctx->direction = DIR_INBOUND;
--
--	return crypto4xx_build_pd(&req->base, ctx, req->src,
--				  (struct scatterlist *) req->result,
--				  req->nbytes, NULL, 0);
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
-+				  req->nbytes, NULL, 0, ctx->sa_in,
-+				  ctx->sa_len);
- }
- 
- int crypto4xx_hash_final(struct ahash_request *req)
-@@ -333,14 +326,16 @@ int crypto4xx_hash_final(struct ahash_re
- 
- int crypto4xx_hash_digest(struct ahash_request *req)
- {
-+	struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	struct scatterlist dst;
-+	unsigned int ds = crypto_ahash_digestsize(ahash);
- 
--	ctx->pd_ctl = 0x11;
--	ctx->direction = DIR_INBOUND;
-+	sg_init_one(&dst, req->result, ds);
- 
--	return crypto4xx_build_pd(&req->base, ctx, req->src,
--				  (struct scatterlist *) req->result,
--				  req->nbytes, NULL, 0);
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
-+				  req->nbytes, NULL, 0, ctx->sa_in,
-+				  ctx->sa_len);
- }
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -194,7 +194,6 @@ void crypto4xx_free_state_record(struct
- static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev)
- {
- 	int i;
--	struct pd_uinfo *pd_uinfo;
- 	dev->pdr = dma_alloc_coherent(dev->core_dev->device,
- 				      sizeof(struct ce_pd) * PPC4XX_NUM_PD,
- 				      &dev->pdr_pa, GFP_ATOMIC);
-@@ -224,11 +223,14 @@ static u32 crypto4xx_build_pdr(struct cr
- 	if (!dev->shadow_sr_pool)
- 		return -ENOMEM;
- 	for (i = 0; i < PPC4XX_NUM_PD; i++) {
--		pd_uinfo = &dev->pdr_uinfo[i];
-+		struct ce_pd *pd = &dev->pdr[i];
-+		struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[i];
-+
-+		pd->sa = dev->shadow_sa_pool_pa +
-+			sizeof(union shadow_sa_buf) * i;
- 
- 		/* alloc 256 bytes which is enough for any kind of dynamic sa */
- 		pd_uinfo->sa_va = &dev->shadow_sa_pool[i].sa;
--		pd_uinfo->sa_pa = dev->shadow_sa_pool_pa + 256 * i;
- 
- 		/* alloc state record */
- 		pd_uinfo->sr_va = &dev->shadow_sr_pool[i];
-@@ -291,14 +293,6 @@ static u32 crypto4xx_put_pd_to_pdr(struc
- 	return 0;
- }
- 
--static struct ce_pd *crypto4xx_get_pdp(struct crypto4xx_device *dev,
--				       dma_addr_t *pd_dma, u32 idx)
--{
--	*pd_dma = dev->pdr_pa + sizeof(struct ce_pd) * idx;
--
--	return &dev->pdr[idx];
--}
--
- /**
-  * alloc memory for the gather ring
-  * no need to alloc buf for the ring
-@@ -516,18 +510,16 @@ static void crypto4xx_copy_pkt_to_dst(st
- 	}
- }
- 
--static u32 crypto4xx_copy_digest_to_dst(struct pd_uinfo *pd_uinfo,
-+static void crypto4xx_copy_digest_to_dst(void *dst,
-+					struct pd_uinfo *pd_uinfo,
- 					struct crypto4xx_ctx *ctx)
- {
- 	struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *) ctx->sa_in;
- 
- 	if (sa->sa_command_0.bf.hash_alg == SA_HASH_ALG_SHA1) {
--		memcpy((void *) pd_uinfo->dest_va,
--		       pd_uinfo->sr_va->save_digest,
-+		memcpy(dst, pd_uinfo->sr_va->save_digest,
- 		       SA_HASH_ALG_SHA1_DIGEST_SIZE);
- 	}
--
--	return 0;
- }
- 
- static void crypto4xx_ret_sg_desc(struct crypto4xx_device *dev,
-@@ -596,7 +588,7 @@ static u32 crypto4xx_ahash_done(struct c
- 	ahash_req = ahash_request_cast(pd_uinfo->async_req);
- 	ctx  = crypto_tfm_ctx(ahash_req->base.tfm);
- 
--	crypto4xx_copy_digest_to_dst(pd_uinfo,
-+	crypto4xx_copy_digest_to_dst(ahash_req->result, pd_uinfo,
- 				     crypto_tfm_ctx(ahash_req->base.tfm));
- 	crypto4xx_ret_sg_desc(dev, pd_uinfo);
- 
-@@ -656,17 +648,17 @@ static u32 get_next_sd(u32 current)
- 		return 0;
- }
- 
--u32 crypto4xx_build_pd(struct crypto_async_request *req,
-+int crypto4xx_build_pd(struct crypto_async_request *req,
- 		       struct crypto4xx_ctx *ctx,
- 		       struct scatterlist *src,
- 		       struct scatterlist *dst,
--		       unsigned int datalen,
--		       void *iv, u32 iv_len)
-+		       const unsigned int datalen,
-+		       const __le32 *iv, const u32 iv_len,
-+		       const struct dynamic_sa_ctl *req_sa,
-+		       const unsigned int sa_len)
- {
- 	struct crypto4xx_device *dev = ctx->dev;
--	dma_addr_t addr, pd_dma, sd_dma, gd_dma;
- 	struct dynamic_sa_ctl *sa;
--	struct scatterlist *sg;
- 	struct ce_gd *gd;
- 	struct ce_pd *pd;
- 	u32 num_gd, num_sd;
-@@ -674,8 +666,9 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	u32 fst_sd = 0xffffffff;
- 	u32 pd_entry;
- 	unsigned long flags;
--	struct pd_uinfo *pd_uinfo = NULL;
--	unsigned int nbytes = datalen, idx;
-+	struct pd_uinfo *pd_uinfo;
-+	unsigned int nbytes = datalen;
-+	size_t offset_to_sr_ptr;
- 	u32 gd_idx = 0;
- 	bool is_busy;
- 
-@@ -689,7 +682,7 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 		num_gd = 0;
- 
- 	/* figure how many sd is needed */
--	if (sg_is_last(dst) || ctx->is_hash) {
-+	if (sg_is_last(dst)) {
- 		num_sd = 0;
- 	} else {
- 		if (datalen > PPC4XX_SD_BUFFER_SIZE) {
-@@ -760,37 +753,27 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 	}
- 	spin_unlock_irqrestore(&dev->core_dev->lock, flags);
- 
-+	pd = &dev->pdr[pd_entry];
-+	pd->sa_len = sa_len;
-+
- 	pd_uinfo = &dev->pdr_uinfo[pd_entry];
--	pd = crypto4xx_get_pdp(dev, &pd_dma, pd_entry);
- 	pd_uinfo->async_req = req;
- 	pd_uinfo->num_gd = num_gd;
- 	pd_uinfo->num_sd = num_sd;
- 
--	if (iv_len || ctx->is_hash) {
--		pd->sa = pd_uinfo->sa_pa;
--		sa = pd_uinfo->sa_va;
--		if (ctx->direction == DIR_INBOUND)
--			memcpy(sa, ctx->sa_in, ctx->sa_len * 4);
--		else
--			memcpy(sa, ctx->sa_out, ctx->sa_len * 4);
-+	if (iv_len)
-+		memcpy(pd_uinfo->sr_va->save_iv, iv, iv_len);
- 
--		memcpy((void *) sa + ctx->offset_to_sr_ptr,
--			&pd_uinfo->sr_pa, 4);
-+	sa = pd_uinfo->sa_va;
-+	memcpy(sa, req_sa, sa_len * 4);
-+
-+	offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
-+	*(u32 *)((unsigned long)sa + offset_to_sr_ptr) = pd_uinfo->sr_pa;
- 
--		if (iv_len)
--			crypto4xx_memcpy_to_le32(pd_uinfo->sr_va->save_iv,
--						 iv, iv_len);
--	} else {
--		if (ctx->direction == DIR_INBOUND) {
--			pd->sa = ctx->sa_in_dma_addr;
--			sa = ctx->sa_in;
--		} else {
--			pd->sa = ctx->sa_out_dma_addr;
--			sa = ctx->sa_out;
--		}
--	}
--	pd->sa_len = ctx->sa_len;
- 	if (num_gd) {
-+		dma_addr_t gd_dma;
-+		struct scatterlist *sg;
-+
- 		/* get first gd we are going to use */
- 		gd_idx = fst_gd;
- 		pd_uinfo->first_gd = fst_gd;
-@@ -799,27 +782,30 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 		pd->src = gd_dma;
- 		/* enable gather */
- 		sa->sa_command_0.bf.gather = 1;
--		idx = 0;
--		src = &src[0];
- 		/* walk the sg, and setup gather array */
-+
-+		sg = src;
- 		while (nbytes) {
--			sg = &src[idx];
--			addr = dma_map_page(dev->core_dev->device, sg_page(sg),
--				    sg->offset, sg->length, DMA_TO_DEVICE);
--			gd->ptr = addr;
--			gd->ctl_len.len = sg->length;
-+			size_t len;
-+
-+			len = min(sg->length, nbytes);
-+			gd->ptr = dma_map_page(dev->core_dev->device,
-+				sg_page(sg), sg->offset, len, DMA_TO_DEVICE);
-+			gd->ctl_len.len = len;
- 			gd->ctl_len.done = 0;
- 			gd->ctl_len.ready = 1;
--			if (sg->length >= nbytes)
-+			if (len >= nbytes)
- 				break;
-+
- 			nbytes -= sg->length;
- 			gd_idx = get_next_gd(gd_idx);
- 			gd = crypto4xx_get_gdp(dev, &gd_dma, gd_idx);
--			idx++;
-+			sg = sg_next(sg);
- 		}
- 	} else {
- 		pd->src = (u32)dma_map_page(dev->core_dev->device, sg_page(src),
--				src->offset, src->length, DMA_TO_DEVICE);
-+				src->offset, min(nbytes, src->length),
-+				DMA_TO_DEVICE);
- 		/*
- 		 * Disable gather in sa command
- 		 */
-@@ -830,25 +816,24 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 		pd_uinfo->first_gd = 0xffffffff;
- 		pd_uinfo->num_gd = 0;
- 	}
--	if (ctx->is_hash || sg_is_last(dst)) {
-+	if (sg_is_last(dst)) {
- 		/*
- 		 * we know application give us dst a whole piece of memory
- 		 * no need to use scatter ring.
--		 * In case of is_hash, the icv is always at end of src data.
- 		 */
- 		pd_uinfo->using_sd = 0;
- 		pd_uinfo->first_sd = 0xffffffff;
- 		pd_uinfo->num_sd = 0;
- 		pd_uinfo->dest_va = dst;
- 		sa->sa_command_0.bf.scatter = 0;
--		if (ctx->is_hash)
--			pd->dest = virt_to_phys((void *)dst);
--		else
--			pd->dest = (u32)dma_map_page(dev->core_dev->device,
--					sg_page(dst), dst->offset,
--					dst->length, DMA_TO_DEVICE);
-+		pd->dest = (u32)dma_map_page(dev->core_dev->device,
-+					     sg_page(dst), dst->offset,
-+					     min(datalen, dst->length),
-+					     DMA_TO_DEVICE);
- 	} else {
-+		dma_addr_t sd_dma;
- 		struct ce_sd *sd = NULL;
-+
- 		u32 sd_idx = fst_sd;
- 		nbytes = datalen;
- 		sa->sa_command_0.bf.scatter = 1;
-@@ -862,7 +847,6 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 		sd->ctl.done = 0;
- 		sd->ctl.rdy = 1;
- 		/* sd->ptr should be setup by sd_init routine*/
--		idx = 0;
- 		if (nbytes >= PPC4XX_SD_BUFFER_SIZE)
- 			nbytes -= PPC4XX_SD_BUFFER_SIZE;
- 		else
-@@ -873,19 +857,23 @@ u32 crypto4xx_build_pd(struct crypto_asy
- 			/* setup scatter descriptor */
- 			sd->ctl.done = 0;
- 			sd->ctl.rdy = 1;
--			if (nbytes >= PPC4XX_SD_BUFFER_SIZE)
-+			if (nbytes >= PPC4XX_SD_BUFFER_SIZE) {
- 				nbytes -= PPC4XX_SD_BUFFER_SIZE;
--			else
-+			} else {
- 				/*
- 				 * SD entry can hold PPC4XX_SD_BUFFER_SIZE,
- 				 * which is more than nbytes, so done.
- 				 */
- 				nbytes = 0;
-+			}
- 		}
- 	}
- 
- 	sa->sa_command_1.bf.hash_crypto_offset = 0;
--	pd->pd_ctl.w = ctx->pd_ctl;
-+	pd->pd_ctl.w = 0;
-+	pd->pd_ctl.bf.hash_final =
-+		(crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AHASH);
-+	pd->pd_ctl.bf.host_ready = 1;
- 	pd->pd_ctl_len.w = 0x00400000 | datalen;
- 	pd_uinfo->state = PD_ENTRY_INUSE | (is_busy ? PD_ENTRY_BUSY : 0);
- 
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -71,7 +71,6 @@ struct pd_uinfo {
- 	u32 num_sd;		/* number of scatter discriptors
- 				used by this packet */
- 	struct dynamic_sa_ctl *sa_va;	/* shadow sa */
--	u32 sa_pa;
- 	struct sa_state_record *sr_va;	/* state record for shadow sa */
- 	u32 sr_pa;
- 	struct scatterlist *dest_va;
-@@ -129,11 +128,6 @@ struct crypto4xx_ctx {
- 	struct sa_state_record *state_record;
- 	dma_addr_t state_record_dma_addr;
- 	u32 sa_len;
--	u32 offset_to_sr_ptr;           /* offset to state ptr, in dynamic sa */
--	u32 direction;
--	u32 save_iv;
--	u32 pd_ctl;
--	u32 is_hash;
- };
- 
- struct crypto4xx_alg_common {
-@@ -170,8 +164,10 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       struct crypto4xx_ctx *ctx,
- 		       struct scatterlist *src,
- 		       struct scatterlist *dst,
--		       unsigned int datalen,
--		       void *iv, u32 iv_len);
-+		       const unsigned int datalen,
-+		       const __le32 *iv, const u32 iv_len,
-+		       const struct dynamic_sa_ctl *sa,
-+		       const unsigned int sa_len);
- int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
diff --git a/target/linux/apm821xx/patches-4.14/020-0020-crypto-crypto4xx-fix-various-warnings.patch b/target/linux/apm821xx/patches-4.14/020-0020-crypto-crypto4xx-fix-various-warnings.patch
deleted file mode 100644
index b37438d06cf..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0020-crypto-crypto4xx-fix-various-warnings.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 64e1062b2371cb8d6126d4e970832365a1a84562 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:12 +0200
-Subject: [PATCH 20/25] crypto: crypto4xx - fix various warnings
-
-crypto4xx_core.c:179:6: warning: symbol 'crypto4xx_free_state_record'
-	was not declared. Should it be static?
-crypto4xx_core.c:331:5: warning: symbol 'crypto4xx_get_n_gd'
-	was not declared. Should it be static?
-crypto4xx_core.c:652:6: warning: symbol 'crypto4xx_return_pd'
-	was not declared. Should it be static?
-
-crypto4xx_return_pd() is not used by anything. Therefore it is removed.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 16 +++-------------
- 1 file changed, 3 insertions(+), 13 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -176,7 +176,7 @@ u32 crypto4xx_alloc_state_record(struct
- 	return 0;
- }
- 
--void crypto4xx_free_state_record(struct crypto4xx_ctx *ctx)
-+static void crypto4xx_free_state_record(struct crypto4xx_ctx *ctx)
- {
- 	if (ctx->state_record != NULL)
- 		dma_free_coherent(ctx->dev->core_dev->device,
-@@ -322,10 +322,11 @@ static inline void crypto4xx_destroy_gdr
-  * when this function is called.
-  * preemption or interrupt must be disabled
-  */
--u32 crypto4xx_get_n_gd(struct crypto4xx_device *dev, int n)
-+static u32 crypto4xx_get_n_gd(struct crypto4xx_device *dev, int n)
- {
- 	u32 retval;
- 	u32 tmp;
-+
- 	if (n >= PPC4XX_NUM_GD)
- 		return ERING_WAS_FULL;
- 
-@@ -621,17 +622,6 @@ static void crypto4xx_stop_all(struct cr
- 	kfree(core_dev);
- }
- 
--void crypto4xx_return_pd(struct crypto4xx_device *dev,
--			 u32 pd_entry, struct ce_pd *pd,
--			 struct pd_uinfo *pd_uinfo)
--{
--	/* irq should be already disabled */
--	dev->pdr_head = pd_entry;
--	pd->pd_ctl.w = 0;
--	pd->pd_ctl_len.w = 0;
--	pd_uinfo->state = PD_ENTRY_FREE;
--}
--
- static u32 get_next_gd(u32 current)
- {
- 	if (current != PPC4XX_LAST_GD)
diff --git a/target/linux/apm821xx/patches-4.14/020-0021-crypto-crypto4xx-fix-stalls-under-heavy-load.patch b/target/linux/apm821xx/patches-4.14/020-0021-crypto-crypto4xx-fix-stalls-under-heavy-load.patch
deleted file mode 100644
index a9d6ddced22..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0021-crypto-crypto4xx-fix-stalls-under-heavy-load.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 4b5b79998af61db8b0506fba6c0f33b57ea457bd Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:13 +0200
-Subject: [PATCH 21/25] crypto: crypto4xx - fix stalls under heavy load
-
-If the crypto4xx device is continuously loaded by dm-crypt
-and ipsec work, it will start to work intermittent after a
-few (between 20-30) seconds, hurting throughput and latency.
-
-This patch contains various stability improvements in order
-to fix this issue. So far, the hardware has survived more
-than a day without suffering any stalls under the continuous
-load.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c    | 33 ++++++++++++++++++---------------
- drivers/crypto/amcc/crypto4xx_reg_def.h |  3 +++
- 2 files changed, 21 insertions(+), 15 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -280,17 +280,20 @@ static u32 crypto4xx_get_pd_from_pdr_nol
- static u32 crypto4xx_put_pd_to_pdr(struct crypto4xx_device *dev, u32 idx)
- {
- 	struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[idx];
-+	u32 tail;
- 	unsigned long flags;
- 
- 	spin_lock_irqsave(&dev->core_dev->lock, flags);
-+	pd_uinfo->state = PD_ENTRY_FREE;
-+
- 	if (dev->pdr_tail != PPC4XX_LAST_PD)
- 		dev->pdr_tail++;
- 	else
- 		dev->pdr_tail = 0;
--	pd_uinfo->state = PD_ENTRY_FREE;
-+	tail = dev->pdr_tail;
- 	spin_unlock_irqrestore(&dev->core_dev->lock, flags);
- 
--	return 0;
-+	return tail;
- }
- 
- /**
-@@ -859,16 +862,16 @@ int crypto4xx_build_pd(struct crypto_asy
- 		}
- 	}
- 
--	sa->sa_command_1.bf.hash_crypto_offset = 0;
--	pd->pd_ctl.w = 0;
--	pd->pd_ctl.bf.hash_final =
--		(crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AHASH);
--	pd->pd_ctl.bf.host_ready = 1;
-+	pd->pd_ctl.w = PD_CTL_HOST_READY |
-+		((crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AHASH) |
-+		 (crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AEAD) ?
-+			PD_CTL_HASH_FINAL : 0);
- 	pd->pd_ctl_len.w = 0x00400000 | datalen;
- 	pd_uinfo->state = PD_ENTRY_INUSE | (is_busy ? PD_ENTRY_BUSY : 0);
- 
- 	wmb();
- 	/* write any value to push engine to read a pd */
-+	writel(0, dev->ce_base + CRYPTO4XX_INT_DESCR_RD);
- 	writel(1, dev->ce_base + CRYPTO4XX_INT_DESCR_RD);
- 	return is_busy ? -EBUSY : -EINPROGRESS;
- }
-@@ -969,23 +972,23 @@ static void crypto4xx_bh_tasklet_cb(unsi
- 	struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
- 	struct pd_uinfo *pd_uinfo;
- 	struct ce_pd *pd;
--	u32 tail;
-+	u32 tail = core_dev->dev->pdr_tail;
-+	u32 head = core_dev->dev->pdr_head;
- 
--	while (core_dev->dev->pdr_head != core_dev->dev->pdr_tail) {
--		tail = core_dev->dev->pdr_tail;
-+	do {
- 		pd_uinfo = &core_dev->dev->pdr_uinfo[tail];
- 		pd = &core_dev->dev->pdr[tail];
- 		if ((pd_uinfo->state & PD_ENTRY_INUSE) &&
--				   pd->pd_ctl.bf.pe_done &&
--				   !pd->pd_ctl.bf.host_ready) {
--			pd->pd_ctl.bf.pe_done = 0;
-+		     ((READ_ONCE(pd->pd_ctl.w) &
-+		       (PD_CTL_PE_DONE | PD_CTL_HOST_READY)) ==
-+		       PD_CTL_PE_DONE)) {
- 			crypto4xx_pd_done(core_dev->dev, tail);
--			crypto4xx_put_pd_to_pdr(core_dev->dev, tail);
-+			tail = crypto4xx_put_pd_to_pdr(core_dev->dev, tail);
- 		} else {
- 			/* if tail not done, break */
- 			break;
- 		}
--	}
-+	} while (head != tail);
- }
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_reg_def.h
-+++ b/drivers/crypto/amcc/crypto4xx_reg_def.h
-@@ -261,6 +261,9 @@ union ce_pd_ctl {
- 	} bf;
- 	u32 w;
- } __attribute__((packed));
-+#define PD_CTL_HASH_FINAL	BIT(4)
-+#define PD_CTL_PE_DONE		BIT(1)
-+#define PD_CTL_HOST_READY	BIT(0)
- 
- union ce_pd_ctl_len {
- 	struct {
diff --git a/target/linux/apm821xx/patches-4.14/020-0022-crypto-crypto4xx-simplify-sa-and-state-context-acqui.patch b/target/linux/apm821xx/patches-4.14/020-0022-crypto-crypto4xx-simplify-sa-and-state-context-acqui.patch
deleted file mode 100644
index 2ac1e5a1d65..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0022-crypto-crypto4xx-simplify-sa-and-state-context-acqui.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-From 2f77690dcb96e525bc6b57bce4a0eaecaa2878d1 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:14 +0200
-Subject: [PATCH 22/25] crypto: crypto4xx - simplify sa and state context
- acquisition
-
-Thanks to the big overhaul of crypto4xx_build_pd(), the request-local
-sa_in, sa_out and state_record allocation can be simplified.
-
-There's no need to setup any dma coherent memory anymore and
-much of the support code can be removed.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 27 +++++--------------
- drivers/crypto/amcc/crypto4xx_core.c | 50 ++++++------------------------------
- drivers/crypto/amcc/crypto4xx_core.h |  6 +----
- 3 files changed, 15 insertions(+), 68 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -122,20 +122,13 @@ static int crypto4xx_setkey_aes(struct c
- 	}
- 
- 	/* Create SA */
--	if (ctx->sa_in_dma_addr || ctx->sa_out_dma_addr)
-+	if (ctx->sa_in || ctx->sa_out)
- 		crypto4xx_free_sa(ctx);
- 
- 	rc = crypto4xx_alloc_sa(ctx, SA_AES128_LEN + (keylen-16) / 4);
- 	if (rc)
- 		return rc;
- 
--	if (ctx->state_record_dma_addr == 0) {
--		rc = crypto4xx_alloc_state_record(ctx);
--		if (rc) {
--			crypto4xx_free_sa(ctx);
--			return rc;
--		}
--	}
- 	/* Setup SA */
- 	sa = ctx->sa_in;
- 
-@@ -204,8 +197,8 @@ int crypto4xx_setkey_rfc3686(struct cryp
- 	if (rc)
- 		return rc;
- 
--	crypto4xx_memcpy_to_le32(ctx->state_record->save_iv,
--		key + keylen - CTR_RFC3686_NONCE_SIZE, CTR_RFC3686_NONCE_SIZE);
-+	ctx->iv_nonce = cpu_to_le32p((u32 *)&key[keylen -
-+						 CTR_RFC3686_NONCE_SIZE]);
- 
- 	return 0;
- }
-@@ -214,7 +207,7 @@ int crypto4xx_rfc3686_encrypt(struct abl
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 	__le32 iv[AES_IV_SIZE / 4] = {
--		ctx->state_record->save_iv[0],
-+		ctx->iv_nonce,
- 		cpu_to_le32p((u32 *) req->info),
- 		cpu_to_le32p((u32 *) (req->info + 4)),
- 		cpu_to_le32(1) };
-@@ -228,7 +221,7 @@ int crypto4xx_rfc3686_decrypt(struct abl
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
- 	__le32 iv[AES_IV_SIZE / 4] = {
--		ctx->state_record->save_iv[0],
-+		ctx->iv_nonce,
- 		cpu_to_le32p((u32 *) req->info),
- 		cpu_to_le32p((u32 *) (req->info + 4)),
- 		cpu_to_le32(1) };
-@@ -255,21 +248,13 @@ static int crypto4xx_hash_alg_init(struc
- 	ctx->dev   = my_alg->dev;
- 
- 	/* Create SA */
--	if (ctx->sa_in_dma_addr || ctx->sa_out_dma_addr)
-+	if (ctx->sa_in || ctx->sa_out)
- 		crypto4xx_free_sa(ctx);
- 
- 	rc = crypto4xx_alloc_sa(ctx, sa_len);
- 	if (rc)
- 		return rc;
- 
--	if (ctx->state_record_dma_addr == 0) {
--		crypto4xx_alloc_state_record(ctx);
--		if (!ctx->state_record_dma_addr) {
--			crypto4xx_free_sa(ctx);
--			return -ENOMEM;
--		}
--	}
--
- 	crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
- 				 sizeof(struct crypto4xx_ctx));
- 	sa = (struct dynamic_sa_hash160 *)ctx->sa_in;
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -130,21 +130,17 @@ static void crypto4xx_hw_init(struct cry
- 
- int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size)
- {
--	ctx->sa_in = dma_alloc_coherent(ctx->dev->core_dev->device, size * 4,
--					&ctx->sa_in_dma_addr, GFP_ATOMIC);
-+	ctx->sa_in = kzalloc(size * 4, GFP_ATOMIC);
- 	if (ctx->sa_in == NULL)
- 		return -ENOMEM;
- 
--	ctx->sa_out = dma_alloc_coherent(ctx->dev->core_dev->device, size * 4,
--					 &ctx->sa_out_dma_addr, GFP_ATOMIC);
-+	ctx->sa_out = kzalloc(size * 4, GFP_ATOMIC);
- 	if (ctx->sa_out == NULL) {
--		dma_free_coherent(ctx->dev->core_dev->device, size * 4,
--				  ctx->sa_in, ctx->sa_in_dma_addr);
-+		kfree(ctx->sa_in);
-+		ctx->sa_in = NULL;
- 		return -ENOMEM;
- 	}
- 
--	memset(ctx->sa_in, 0, size * 4);
--	memset(ctx->sa_out, 0, size * 4);
- 	ctx->sa_len = size;
- 
- 	return 0;
-@@ -152,40 +148,13 @@ int crypto4xx_alloc_sa(struct crypto4xx_
- 
- void crypto4xx_free_sa(struct crypto4xx_ctx *ctx)
- {
--	if (ctx->sa_in != NULL)
--		dma_free_coherent(ctx->dev->core_dev->device, ctx->sa_len * 4,
--				  ctx->sa_in, ctx->sa_in_dma_addr);
--	if (ctx->sa_out != NULL)
--		dma_free_coherent(ctx->dev->core_dev->device, ctx->sa_len * 4,
--				  ctx->sa_out, ctx->sa_out_dma_addr);
--
--	ctx->sa_in_dma_addr = 0;
--	ctx->sa_out_dma_addr = 0;
-+	kfree(ctx->sa_in);
-+	ctx->sa_in = NULL;
-+	kfree(ctx->sa_out);
-+	ctx->sa_out = NULL;
- 	ctx->sa_len = 0;
- }
- 
--u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx)
--{
--	ctx->state_record = dma_alloc_coherent(ctx->dev->core_dev->device,
--				sizeof(struct sa_state_record),
--				&ctx->state_record_dma_addr, GFP_ATOMIC);
--	if (!ctx->state_record_dma_addr)
--		return -ENOMEM;
--	memset(ctx->state_record, 0, sizeof(struct sa_state_record));
--
--	return 0;
--}
--
--static void crypto4xx_free_state_record(struct crypto4xx_ctx *ctx)
--{
--	if (ctx->state_record != NULL)
--		dma_free_coherent(ctx->dev->core_dev->device,
--				  sizeof(struct sa_state_record),
--				  ctx->state_record,
--				  ctx->state_record_dma_addr);
--	ctx->state_record_dma_addr = 0;
--}
--
- /**
-  * alloc memory for the gather ring
-  * no need to alloc buf for the ring
-@@ -888,8 +857,6 @@ static int crypto4xx_alg_init(struct cry
- 	ctx->dev = amcc_alg->dev;
- 	ctx->sa_in = NULL;
- 	ctx->sa_out = NULL;
--	ctx->sa_in_dma_addr = 0;
--	ctx->sa_out_dma_addr = 0;
- 	ctx->sa_len = 0;
- 
- 	switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
-@@ -910,7 +877,6 @@ static void crypto4xx_alg_exit(struct cr
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
- 
- 	crypto4xx_free_sa(ctx);
--	crypto4xx_free_state_record(ctx);
- }
- 
- int crypto4xx_register_alg(struct crypto4xx_device *sec_dev,
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -122,11 +122,8 @@ struct crypto4xx_core_device {
- struct crypto4xx_ctx {
- 	struct crypto4xx_device *dev;
- 	struct dynamic_sa_ctl *sa_in;
--	dma_addr_t sa_in_dma_addr;
- 	struct dynamic_sa_ctl *sa_out;
--	dma_addr_t sa_out_dma_addr;
--	struct sa_state_record *state_record;
--	dma_addr_t state_record_dma_addr;
-+	__le32 iv_nonce;
- 	u32 sa_len;
- };
- 
-@@ -159,7 +156,6 @@ static inline struct crypto4xx_alg *cryp
- int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
- void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
- void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
--u32 crypto4xx_alloc_state_record(struct crypto4xx_ctx *ctx);
- int crypto4xx_build_pd(struct crypto_async_request *req,
- 		       struct crypto4xx_ctx *ctx,
- 		       struct scatterlist *src,
diff --git a/target/linux/apm821xx/patches-4.14/020-0023-crypto-crypto4xx-prepare-for-AEAD-support.patch b/target/linux/apm821xx/patches-4.14/020-0023-crypto-crypto4xx-prepare-for-AEAD-support.patch
deleted file mode 100644
index aa99b178012..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0023-crypto-crypto4xx-prepare-for-AEAD-support.patch
+++ /dev/null
@@ -1,617 +0,0 @@
-From a0aae821ba3d35a49d4d0143dfb0c07eee22130e Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:15 +0200
-Subject: [PATCH 23/25] crypto: crypto4xx - prepare for AEAD support
-
-This patch enhances existing interfaces and
-functions to support AEAD ciphers in the next
-patches.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  19 +--
- drivers/crypto/amcc/crypto4xx_core.c | 217 +++++++++++++++++++++++++++--------
- drivers/crypto/amcc/crypto4xx_core.h |  22 ++--
- drivers/crypto/amcc/crypto4xx_sa.h   |  41 +++++++
- 4 files changed, 226 insertions(+), 73 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -26,6 +26,7 @@
- #include <crypto/internal/hash.h>
- #include <linux/dma-mapping.h>
- #include <crypto/algapi.h>
-+#include <crypto/aead.h>
- #include <crypto/aes.h>
- #include <crypto/sha.h>
- #include <crypto/ctr.h>
-@@ -83,7 +84,7 @@ int crypto4xx_encrypt(struct ablkcipher_
- 		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, iv, ivlen, ctx->sa_out, ctx->sa_len);
-+		req->nbytes, iv, ivlen, ctx->sa_out, ctx->sa_len, 0);
- }
- 
- int crypto4xx_decrypt(struct ablkcipher_request *req)
-@@ -97,7 +98,7 @@ int crypto4xx_decrypt(struct ablkcipher_
- 		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, iv, ivlen, ctx->sa_in, ctx->sa_len);
-+		req->nbytes, iv, ivlen, ctx->sa_in, ctx->sa_len, 0);
- }
- 
- /**
-@@ -214,7 +215,7 @@ int crypto4xx_rfc3686_encrypt(struct abl
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  req->nbytes, iv, AES_IV_SIZE,
--				  ctx->sa_out, ctx->sa_len);
-+				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
- int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req)
-@@ -228,7 +229,7 @@ int crypto4xx_rfc3686_decrypt(struct abl
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  req->nbytes, iv, AES_IV_SIZE,
--				  ctx->sa_out, ctx->sa_len);
-+				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
- /**
-@@ -240,11 +241,13 @@ static int crypto4xx_hash_alg_init(struc
- 				   unsigned char hm)
- {
- 	struct crypto_alg *alg = tfm->__crt_alg;
--	struct crypto4xx_alg *my_alg = crypto_alg_to_crypto4xx_alg(alg);
-+	struct crypto4xx_alg *my_alg;
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
- 	struct dynamic_sa_hash160 *sa;
- 	int rc;
- 
-+	my_alg = container_of(__crypto_ahash_alg(alg), struct crypto4xx_alg,
-+			      alg.u.hash);
- 	ctx->dev   = my_alg->dev;
- 
- 	/* Create SA */
-@@ -301,7 +304,7 @@ int crypto4xx_hash_update(struct ahash_r
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
- 				  req->nbytes, NULL, 0, ctx->sa_in,
--				  ctx->sa_len);
-+				  ctx->sa_len, 0);
- }
- 
- int crypto4xx_hash_final(struct ahash_request *req)
-@@ -320,7 +323,7 @@ int crypto4xx_hash_digest(struct ahash_r
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
- 				  req->nbytes, NULL, 0, ctx->sa_in,
--				  ctx->sa_len);
-+				  ctx->sa_len, 0);
- }
- 
- /**
-@@ -331,5 +334,3 @@ int crypto4xx_sha1_alg_init(struct crypt
- 	return crypto4xx_hash_alg_init(tfm, SA_HASH160_LEN, SA_HASH_ALG_SHA1,
- 				       SA_HASH_MODE_HASH);
- }
--
--
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -35,10 +35,12 @@
- #include <asm/dcr.h>
- #include <asm/dcr-regs.h>
- #include <asm/cacheflush.h>
-+#include <crypto/aead.h>
- #include <crypto/aes.h>
- #include <crypto/ctr.h>
- #include <crypto/sha.h>
- #include <crypto/scatterwalk.h>
-+#include <crypto/internal/aead.h>
- #include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
-@@ -514,7 +516,7 @@ static void crypto4xx_ret_sg_desc(struct
- 	}
- }
- 
--static u32 crypto4xx_ablkcipher_done(struct crypto4xx_device *dev,
-+static void crypto4xx_ablkcipher_done(struct crypto4xx_device *dev,
- 				     struct pd_uinfo *pd_uinfo,
- 				     struct ce_pd *pd)
- {
-@@ -548,11 +550,9 @@ static u32 crypto4xx_ablkcipher_done(str
- 	if (pd_uinfo->state & PD_ENTRY_BUSY)
- 		ablkcipher_request_complete(ablk_req, -EINPROGRESS);
- 	ablkcipher_request_complete(ablk_req, 0);
--
--	return 0;
- }
- 
--static u32 crypto4xx_ahash_done(struct crypto4xx_device *dev,
-+static void crypto4xx_ahash_done(struct crypto4xx_device *dev,
- 				struct pd_uinfo *pd_uinfo)
- {
- 	struct crypto4xx_ctx *ctx;
-@@ -568,20 +568,88 @@ static u32 crypto4xx_ahash_done(struct c
- 	if (pd_uinfo->state & PD_ENTRY_BUSY)
- 		ahash_request_complete(ahash_req, -EINPROGRESS);
- 	ahash_request_complete(ahash_req, 0);
-+}
- 
--	return 0;
-+static void crypto4xx_aead_done(struct crypto4xx_device *dev,
-+				struct pd_uinfo *pd_uinfo,
-+				struct ce_pd *pd)
-+{
-+	struct aead_request *aead_req;
-+	struct crypto4xx_ctx *ctx;
-+	struct scatterlist *dst = pd_uinfo->dest_va;
-+	int err = 0;
-+
-+	aead_req = container_of(pd_uinfo->async_req, struct aead_request,
-+				base);
-+	ctx  = crypto_tfm_ctx(aead_req->base.tfm);
-+
-+	if (pd_uinfo->using_sd) {
-+		crypto4xx_copy_pkt_to_dst(dev, pd, pd_uinfo,
-+					  pd->pd_ctl_len.bf.pkt_len,
-+					  dst);
-+	} else {
-+		__dma_sync_page(sg_page(dst), dst->offset, dst->length,
-+				DMA_FROM_DEVICE);
-+	}
-+
-+	if (pd_uinfo->sa_va->sa_command_0.bf.dir == DIR_OUTBOUND) {
-+		/* append icv at the end */
-+		size_t cp_len = crypto_aead_authsize(
-+			crypto_aead_reqtfm(aead_req));
-+		u32 icv[cp_len];
-+
-+		crypto4xx_memcpy_from_le32(icv, pd_uinfo->sr_va->save_digest,
-+					   cp_len);
-+
-+		scatterwalk_map_and_copy(icv, dst, aead_req->cryptlen,
-+					 cp_len, 1);
-+	}
-+
-+	crypto4xx_ret_sg_desc(dev, pd_uinfo);
-+
-+	if (pd->pd_ctl.bf.status & 0xff) {
-+		if (pd->pd_ctl.bf.status & 0x1) {
-+			/* authentication error */
-+			err = -EBADMSG;
-+		} else {
-+			if (!__ratelimit(&dev->aead_ratelimit)) {
-+				if (pd->pd_ctl.bf.status & 2)
-+					pr_err("pad fail error\n");
-+				if (pd->pd_ctl.bf.status & 4)
-+					pr_err("seqnum fail\n");
-+				if (pd->pd_ctl.bf.status & 8)
-+					pr_err("error _notify\n");
-+				pr_err("aead return err status = 0x%02x\n",
-+					pd->pd_ctl.bf.status & 0xff);
-+				pr_err("pd pad_ctl = 0x%08x\n",
-+					pd->pd_ctl.bf.pd_pad_ctl);
-+			}
-+			err = -EINVAL;
-+		}
-+	}
-+
-+	if (pd_uinfo->state & PD_ENTRY_BUSY)
-+		aead_request_complete(aead_req, -EINPROGRESS);
-+
-+	aead_request_complete(aead_req, err);
- }
- 
--static u32 crypto4xx_pd_done(struct crypto4xx_device *dev, u32 idx)
-+static void crypto4xx_pd_done(struct crypto4xx_device *dev, u32 idx)
- {
- 	struct ce_pd *pd = &dev->pdr[idx];
- 	struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[idx];
- 
--	if (crypto_tfm_alg_type(pd_uinfo->async_req->tfm) ==
--			CRYPTO_ALG_TYPE_ABLKCIPHER)
--		return crypto4xx_ablkcipher_done(dev, pd_uinfo, pd);
--	else
--		return crypto4xx_ahash_done(dev, pd_uinfo);
-+	switch (crypto_tfm_alg_type(pd_uinfo->async_req->tfm)) {
-+	case CRYPTO_ALG_TYPE_ABLKCIPHER:
-+		crypto4xx_ablkcipher_done(dev, pd_uinfo, pd);
-+		break;
-+	case CRYPTO_ALG_TYPE_AEAD:
-+		crypto4xx_aead_done(dev, pd_uinfo, pd);
-+		break;
-+	case CRYPTO_ALG_TYPE_AHASH:
-+		crypto4xx_ahash_done(dev, pd_uinfo);
-+		break;
-+	}
- }
- 
- static void crypto4xx_stop_all(struct crypto4xx_core_device *core_dev)
-@@ -617,8 +685,10 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       const unsigned int datalen,
- 		       const __le32 *iv, const u32 iv_len,
- 		       const struct dynamic_sa_ctl *req_sa,
--		       const unsigned int sa_len)
-+		       const unsigned int sa_len,
-+		       const unsigned int assoclen)
- {
-+	struct scatterlist _dst[2];
- 	struct crypto4xx_device *dev = ctx->dev;
- 	struct dynamic_sa_ctl *sa;
- 	struct ce_gd *gd;
-@@ -632,18 +702,25 @@ int crypto4xx_build_pd(struct crypto_asy
- 	unsigned int nbytes = datalen;
- 	size_t offset_to_sr_ptr;
- 	u32 gd_idx = 0;
-+	int tmp;
- 	bool is_busy;
- 
--	/* figure how many gd is needed */
--	num_gd = sg_nents_for_len(src, datalen);
--	if ((int)num_gd < 0) {
-+	/* figure how many gd are needed */
-+	tmp = sg_nents_for_len(src, assoclen + datalen);
-+	if (tmp < 0) {
- 		dev_err(dev->core_dev->device, "Invalid number of src SG.\n");
--		return -EINVAL;
-+		return tmp;
- 	}
--	if (num_gd == 1)
--		num_gd = 0;
-+	if (tmp == 1)
-+		tmp = 0;
-+	num_gd = tmp;
- 
--	/* figure how many sd is needed */
-+	if (assoclen) {
-+		nbytes += assoclen;
-+		dst = scatterwalk_ffwd(_dst, dst, assoclen);
-+	}
-+
-+	/* figure how many sd are needed */
- 	if (sg_is_last(dst)) {
- 		num_sd = 0;
- 	} else {
-@@ -729,6 +806,7 @@ int crypto4xx_build_pd(struct crypto_asy
- 	sa = pd_uinfo->sa_va;
- 	memcpy(sa, req_sa, sa_len * 4);
- 
-+	sa->sa_command_1.bf.hash_crypto_offset = (assoclen >> 2);
- 	offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
- 	*(u32 *)((unsigned long)sa + offset_to_sr_ptr) = pd_uinfo->sr_pa;
- 
-@@ -835,7 +913,7 @@ int crypto4xx_build_pd(struct crypto_asy
- 		((crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AHASH) |
- 		 (crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AEAD) ?
- 			PD_CTL_HASH_FINAL : 0);
--	pd->pd_ctl_len.w = 0x00400000 | datalen;
-+	pd->pd_ctl_len.w = 0x00400000 | (assoclen + datalen);
- 	pd_uinfo->state = PD_ENTRY_INUSE | (is_busy ? PD_ENTRY_BUSY : 0);
- 
- 	wmb();
-@@ -848,40 +926,68 @@ int crypto4xx_build_pd(struct crypto_asy
- /**
-  * Algorithm Registration Functions
-  */
--static int crypto4xx_alg_init(struct crypto_tfm *tfm)
-+static void crypto4xx_ctx_init(struct crypto4xx_alg *amcc_alg,
-+			       struct crypto4xx_ctx *ctx)
- {
--	struct crypto_alg *alg = tfm->__crt_alg;
--	struct crypto4xx_alg *amcc_alg = crypto_alg_to_crypto4xx_alg(alg);
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
--
- 	ctx->dev = amcc_alg->dev;
- 	ctx->sa_in = NULL;
- 	ctx->sa_out = NULL;
- 	ctx->sa_len = 0;
-+}
- 
--	switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
--	default:
--		tfm->crt_ablkcipher.reqsize = sizeof(struct crypto4xx_ctx);
--		break;
--	case CRYPTO_ALG_TYPE_AHASH:
--		crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
--					 sizeof(struct crypto4xx_ctx));
--		break;
--	}
-+static int crypto4xx_ablk_init(struct crypto_tfm *tfm)
-+{
-+	struct crypto_alg *alg = tfm->__crt_alg;
-+	struct crypto4xx_alg *amcc_alg;
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
- 
-+	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.cipher);
-+	crypto4xx_ctx_init(amcc_alg, ctx);
-+	tfm->crt_ablkcipher.reqsize = sizeof(struct crypto4xx_ctx);
- 	return 0;
- }
- 
--static void crypto4xx_alg_exit(struct crypto_tfm *tfm)
-+static void crypto4xx_common_exit(struct crypto4xx_ctx *ctx)
- {
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
--
- 	crypto4xx_free_sa(ctx);
- }
- 
--int crypto4xx_register_alg(struct crypto4xx_device *sec_dev,
--			   struct crypto4xx_alg_common *crypto_alg,
--			   int array_size)
-+static void crypto4xx_ablk_exit(struct crypto_tfm *tfm)
-+{
-+	crypto4xx_common_exit(crypto_tfm_ctx(tfm));
-+}
-+
-+static int crypto4xx_aead_init(struct crypto_aead *tfm)
-+{
-+	struct aead_alg *alg = crypto_aead_alg(tfm);
-+	struct crypto4xx_ctx *ctx = crypto_aead_ctx(tfm);
-+	struct crypto4xx_alg *amcc_alg;
-+
-+	ctx->sw_cipher.aead = crypto_alloc_aead(alg->base.cra_name, 0,
-+						CRYPTO_ALG_NEED_FALLBACK |
-+						CRYPTO_ALG_ASYNC);
-+	if (IS_ERR(ctx->sw_cipher.aead))
-+		return PTR_ERR(ctx->sw_cipher.aead);
-+
-+	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.aead);
-+	crypto4xx_ctx_init(amcc_alg, ctx);
-+	crypto_aead_set_reqsize(tfm, sizeof(struct aead_request) +
-+				max(sizeof(struct crypto4xx_ctx), 32 +
-+				crypto_aead_reqsize(ctx->sw_cipher.aead)));
-+	return 0;
-+}
-+
-+static void crypto4xx_aead_exit(struct crypto_aead *tfm)
-+{
-+	struct crypto4xx_ctx *ctx = crypto_aead_ctx(tfm);
-+
-+	crypto4xx_common_exit(ctx);
-+	crypto_free_aead(ctx->sw_cipher.aead);
-+}
-+
-+static int crypto4xx_register_alg(struct crypto4xx_device *sec_dev,
-+				  struct crypto4xx_alg_common *crypto_alg,
-+				  int array_size)
- {
- 	struct crypto4xx_alg *alg;
- 	int i;
-@@ -896,6 +1002,10 @@ int crypto4xx_register_alg(struct crypto
- 		alg->dev = sec_dev;
- 
- 		switch (alg->alg.type) {
-+		case CRYPTO_ALG_TYPE_AEAD:
-+			rc = crypto_register_aead(&alg->alg.u.aead);
-+			break;
-+
- 		case CRYPTO_ALG_TYPE_AHASH:
- 			rc = crypto_register_ahash(&alg->alg.u.hash);
- 			break;
-@@ -925,6 +1035,10 @@ static void crypto4xx_unregister_alg(str
- 			crypto_unregister_ahash(&alg->alg.u.hash);
- 			break;
- 
-+		case CRYPTO_ALG_TYPE_AEAD:
-+			crypto_unregister_aead(&alg->alg.u.aead);
-+			break;
-+
- 		default:
- 			crypto_unregister_alg(&alg->alg.u.cipher);
- 		}
-@@ -978,7 +1092,7 @@ static irqreturn_t crypto4xx_ce_interrup
- /**
-  * Supported Crypto Algorithms
-  */
--struct crypto4xx_alg_common crypto4xx_alg[] = {
-+static struct crypto4xx_alg_common crypto4xx_alg[] = {
- 	/* Crypto AES modes */
- 	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
- 		.cra_name 	= "cbc(aes)",
-@@ -990,8 +1104,8 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_blocksize 	= AES_BLOCK_SIZE,
- 		.cra_ctxsize 	= sizeof(struct crypto4xx_ctx),
- 		.cra_type 	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_alg_init,
--		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_init	= crypto4xx_ablk_init,
-+		.cra_exit	= crypto4xx_ablk_exit,
- 		.cra_module 	= THIS_MODULE,
- 		.cra_u 		= {
- 			.ablkcipher = {
-@@ -1014,8 +1128,8 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_blocksize	= AES_BLOCK_SIZE,
- 		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
- 		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_alg_init,
--		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_init	= crypto4xx_ablk_init,
-+		.cra_exit	= crypto4xx_ablk_exit,
- 		.cra_module	= THIS_MODULE,
- 		.cra_u		= {
- 			.ablkcipher = {
-@@ -1038,8 +1152,8 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_blocksize	= AES_BLOCK_SIZE,
- 		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
- 		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_alg_init,
--		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_init	= crypto4xx_ablk_init,
-+		.cra_exit	= crypto4xx_ablk_exit,
- 		.cra_module	= THIS_MODULE,
- 		.cra_u		= {
- 			.ablkcipher = {
-@@ -1064,8 +1178,8 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_blocksize	= AES_BLOCK_SIZE,
- 		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
- 		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_alg_init,
--		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_init	= crypto4xx_ablk_init,
-+		.cra_exit	= crypto4xx_ablk_exit,
- 		.cra_module	= THIS_MODULE,
- 		.cra_u		= {
- 			.ablkcipher = {
-@@ -1087,8 +1201,8 @@ struct crypto4xx_alg_common crypto4xx_al
- 		.cra_blocksize	= AES_BLOCK_SIZE,
- 		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
- 		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_alg_init,
--		.cra_exit	= crypto4xx_alg_exit,
-+		.cra_init	= crypto4xx_ablk_init,
-+		.cra_exit	= crypto4xx_ablk_exit,
- 		.cra_module	= THIS_MODULE,
- 		.cra_u		= {
- 			.ablkcipher = {
-@@ -1154,6 +1268,7 @@ static int crypto4xx_probe(struct platfo
- 	core_dev->device = dev;
- 	spin_lock_init(&core_dev->lock);
- 	INIT_LIST_HEAD(&core_dev->dev->alg_list);
-+	ratelimit_default_init(&core_dev->dev->aead_ratelimit);
- 	rc = crypto4xx_build_pdr(core_dev->dev);
- 	if (rc)
- 		goto err_build_pdr;
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -22,7 +22,9 @@
- #ifndef __CRYPTO4XX_CORE_H__
- #define __CRYPTO4XX_CORE_H__
- 
-+#include <linux/ratelimit.h>
- #include <crypto/internal/hash.h>
-+#include <crypto/internal/aead.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_sa.h"
- 
-@@ -106,6 +108,7 @@ struct crypto4xx_device {
- 	struct pd_uinfo *pdr_uinfo;
- 	struct list_head alg_list;	/* List of algorithm supported
- 					by this device */
-+	struct ratelimit_state aead_ratelimit;
- };
- 
- struct crypto4xx_core_device {
-@@ -125,6 +128,9 @@ struct crypto4xx_ctx {
- 	struct dynamic_sa_ctl *sa_out;
- 	__le32 iv_nonce;
- 	u32 sa_len;
-+	union {
-+		struct crypto_aead *aead;
-+	} sw_cipher;
- };
- 
- struct crypto4xx_alg_common {
-@@ -132,6 +138,7 @@ struct crypto4xx_alg_common {
- 	union {
- 		struct crypto_alg cipher;
- 		struct ahash_alg hash;
-+		struct aead_alg aead;
- 	} u;
- };
- 
-@@ -141,18 +148,6 @@ struct crypto4xx_alg {
- 	struct crypto4xx_device *dev;
- };
- 
--static inline struct crypto4xx_alg *crypto_alg_to_crypto4xx_alg(
--	struct crypto_alg *x)
--{
--	switch (x->cra_flags & CRYPTO_ALG_TYPE_MASK) {
--	case CRYPTO_ALG_TYPE_AHASH:
--		return container_of(__crypto_ahash_alg(x),
--				    struct crypto4xx_alg, alg.u.hash);
--	}
--
--	return container_of(x, struct crypto4xx_alg, alg.u.cipher);
--}
--
- int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size);
- void crypto4xx_free_sa(struct crypto4xx_ctx *ctx);
- void crypto4xx_free_ctx(struct crypto4xx_ctx *ctx);
-@@ -163,7 +158,8 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       const unsigned int datalen,
- 		       const __le32 *iv, const u32 iv_len,
- 		       const struct dynamic_sa_ctl *sa,
--		       const unsigned int sa_len);
-+		       const unsigned int sa_len,
-+		       const unsigned int assoclen);
- int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
---- a/drivers/crypto/amcc/crypto4xx_sa.h
-+++ b/drivers/crypto/amcc/crypto4xx_sa.h
-@@ -55,6 +55,8 @@ union dynamic_sa_contents {
- #define SA_OP_GROUP_BASIC			0
- #define SA_OPCODE_ENCRYPT			0
- #define SA_OPCODE_DECRYPT			0
-+#define SA_OPCODE_ENCRYPT_HASH			1
-+#define SA_OPCODE_HASH_DECRYPT			1
- #define SA_OPCODE_HASH				3
- #define SA_CIPHER_ALG_DES			0
- #define SA_CIPHER_ALG_3DES			1
-@@ -65,6 +67,8 @@ union dynamic_sa_contents {
- 
- #define SA_HASH_ALG_MD5				0
- #define SA_HASH_ALG_SHA1			1
-+#define SA_HASH_ALG_GHASH			12
-+#define SA_HASH_ALG_CBC_MAC			14
- #define SA_HASH_ALG_NULL			15
- #define SA_HASH_ALG_SHA1_DIGEST_SIZE		20
- 
-@@ -234,6 +238,36 @@ struct dynamic_sa_aes256 {
- #define SA_AES_CONTENTS		0x3e000002
- 
- /**
-+ * Security Association (SA) for AES128 CCM
-+ */
-+struct dynamic_sa_aes128_ccm {
-+	struct dynamic_sa_ctl ctrl;
-+	__le32 key[4];
-+	__le32 iv[4];
-+	u32 state_ptr;
-+	u32 reserved;
-+} __packed;
-+#define SA_AES128_CCM_LEN	(sizeof(struct dynamic_sa_aes128_ccm)/4)
-+#define SA_AES128_CCM_CONTENTS	0x3e000042
-+#define SA_AES_CCM_CONTENTS	0x3e000002
-+
-+/**
-+ * Security Association (SA) for AES128_GCM
-+ */
-+struct dynamic_sa_aes128_gcm {
-+	struct dynamic_sa_ctl ctrl;
-+	__le32 key[4];
-+	__le32 inner_digest[4];
-+	__le32 iv[4];
-+	u32 state_ptr;
-+	u32 reserved;
-+} __packed;
-+
-+#define SA_AES128_GCM_LEN	(sizeof(struct dynamic_sa_aes128_gcm)/4)
-+#define SA_AES128_GCM_CONTENTS	0x3e000442
-+#define SA_AES_GCM_CONTENTS	0x3e000402
-+
-+/**
-  * Security Association (SA) for HASH160: HMAC-SHA1
-  */
- struct dynamic_sa_hash160 {
-@@ -274,4 +308,11 @@ static inline __le32 *get_dynamic_sa_key
- 	return (__le32 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));
- }
- 
-+static inline __le32 *get_dynamic_sa_inner_digest(struct dynamic_sa_ctl *cts)
-+{
-+	return (__le32 *) ((unsigned long)cts +
-+		sizeof(struct dynamic_sa_ctl) +
-+		cts->sa_contents.bf.key_size * 4);
-+}
-+
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0024-crypto-crypto4xx-add-aes-ccm-support.patch b/target/linux/apm821xx/patches-4.14/020-0024-crypto-crypto4xx-add-aes-ccm-support.patch
deleted file mode 100644
index c3d4a07a803..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0024-crypto-crypto4xx-add-aes-ccm-support.patch
+++ /dev/null
@@ -1,256 +0,0 @@
-From 65ea8b678fcf385ac18864743bae66c0643e6842 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:16 +0200
-Subject: [PATCH 24/25] crypto: crypto4xx - add aes-ccm support
-
-This patch adds aes-ccm support.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 185 +++++++++++++++++++++++++++++++++++
- drivers/crypto/amcc/crypto4xx_core.c |  23 +++++
- drivers/crypto/amcc/crypto4xx_core.h |   8 ++
- 3 files changed, 216 insertions(+)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -232,6 +232,191 @@ int crypto4xx_rfc3686_decrypt(struct abl
- 				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
-+static inline bool crypto4xx_aead_need_fallback(struct aead_request *req,
-+						bool is_ccm, bool decrypt)
-+{
-+	struct crypto_aead *aead = crypto_aead_reqtfm(req);
-+
-+	/* authsize has to be a multiple of 4 */
-+	if (aead->authsize & 3)
-+		return true;
-+
-+	/*
-+	 * hardware does not handle cases where cryptlen
-+	 * is less than a block
-+	 */
-+	if (req->cryptlen < AES_BLOCK_SIZE)
-+		return true;
-+
-+	/* assoc len needs to be a multiple of 4 */
-+	if (req->assoclen & 0x3)
-+		return true;
-+
-+	/* CCM supports only counter field length of 2 and 4 bytes */
-+	if (is_ccm && !(req->iv[0] == 1 || req->iv[0] == 3))
-+		return true;
-+
-+	/* CCM - fix CBC MAC mismatch in special case */
-+	if (is_ccm && decrypt && !req->assoclen)
-+		return true;
-+
-+	return false;
-+}
-+
-+static int crypto4xx_aead_fallback(struct aead_request *req,
-+	struct crypto4xx_ctx *ctx, bool do_decrypt)
-+{
-+	char aead_req_data[sizeof(struct aead_request) +
-+			   crypto_aead_reqsize(ctx->sw_cipher.aead)]
-+		__aligned(__alignof__(struct aead_request));
-+
-+	struct aead_request *subreq = (void *) aead_req_data;
-+
-+	memset(subreq, 0, sizeof(aead_req_data));
-+
-+	aead_request_set_tfm(subreq, ctx->sw_cipher.aead);
-+	aead_request_set_callback(subreq, req->base.flags,
-+				  req->base.complete, req->base.data);
-+	aead_request_set_crypt(subreq, req->src, req->dst, req->cryptlen,
-+			       req->iv);
-+	aead_request_set_ad(subreq, req->assoclen);
-+	return do_decrypt ? crypto_aead_decrypt(subreq) :
-+			    crypto_aead_encrypt(subreq);
-+}
-+
-+static int crypto4xx_setup_fallback(struct crypto4xx_ctx *ctx,
-+				    struct crypto_aead *cipher,
-+				    const u8 *key,
-+				    unsigned int keylen)
-+{
-+	int rc;
-+
-+	crypto_aead_clear_flags(ctx->sw_cipher.aead, CRYPTO_TFM_REQ_MASK);
-+	crypto_aead_set_flags(ctx->sw_cipher.aead,
-+		crypto_aead_get_flags(cipher) & CRYPTO_TFM_REQ_MASK);
-+	rc = crypto_aead_setkey(ctx->sw_cipher.aead, key, keylen);
-+	crypto_aead_clear_flags(cipher, CRYPTO_TFM_RES_MASK);
-+	crypto_aead_set_flags(cipher,
-+		crypto_aead_get_flags(ctx->sw_cipher.aead) &
-+			CRYPTO_TFM_RES_MASK);
-+
-+	return rc;
-+}
-+
-+/**
-+ * AES-CCM Functions
-+ */
-+
-+int crypto4xx_setkey_aes_ccm(struct crypto_aead *cipher, const u8 *key,
-+			     unsigned int keylen)
-+{
-+	struct crypto_tfm *tfm = crypto_aead_tfm(cipher);
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct dynamic_sa_ctl *sa;
-+	int rc = 0;
-+
-+	rc = crypto4xx_setup_fallback(ctx, cipher, key, keylen);
-+	if (rc)
-+		return rc;
-+
-+	if (ctx->sa_in || ctx->sa_out)
-+		crypto4xx_free_sa(ctx);
-+
-+	rc = crypto4xx_alloc_sa(ctx, SA_AES128_CCM_LEN + (keylen - 16) / 4);
-+	if (rc)
-+		return rc;
-+
-+	/* Setup SA */
-+	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
-+	sa->sa_contents.w = SA_AES_CCM_CONTENTS | (keylen << 2);
-+
-+	set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, SA_NOT_SAVE_IV,
-+				 SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
-+				 SA_NO_HEADER_PROC, SA_HASH_ALG_CBC_MAC,
-+				 SA_CIPHER_ALG_AES,
-+				 SA_PAD_TYPE_ZERO, SA_OP_GROUP_BASIC,
-+				 SA_OPCODE_HASH_DECRYPT, DIR_INBOUND);
-+
-+	set_dynamic_sa_command_1(sa, CRYPTO_MODE_CTR, SA_HASH_MODE_HASH,
-+				 CRYPTO_FEEDBACK_MODE_NO_FB, SA_EXTENDED_SN_OFF,
-+				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
-+				 SA_NOT_COPY_PAD, SA_COPY_PAYLOAD,
-+				 SA_NOT_COPY_HDR);
-+
-+	sa->sa_command_1.bf.key_len = keylen >> 3;
-+
-+	crypto4xx_memcpy_to_le32(get_dynamic_sa_key_field(sa), key, keylen);
-+
-+	memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
-+	sa = (struct dynamic_sa_ctl *) ctx->sa_out;
-+
-+	set_dynamic_sa_command_0(sa, SA_SAVE_HASH, SA_NOT_SAVE_IV,
-+				 SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
-+				 SA_NO_HEADER_PROC, SA_HASH_ALG_CBC_MAC,
-+				 SA_CIPHER_ALG_AES,
-+				 SA_PAD_TYPE_ZERO, SA_OP_GROUP_BASIC,
-+				 SA_OPCODE_ENCRYPT_HASH, DIR_OUTBOUND);
-+
-+	set_dynamic_sa_command_1(sa, CRYPTO_MODE_CTR, SA_HASH_MODE_HASH,
-+				 CRYPTO_FEEDBACK_MODE_NO_FB, SA_EXTENDED_SN_OFF,
-+				 SA_SEQ_MASK_OFF, SA_MC_ENABLE,
-+				 SA_COPY_PAD, SA_COPY_PAYLOAD,
-+				 SA_NOT_COPY_HDR);
-+
-+	sa->sa_command_1.bf.key_len = keylen >> 3;
-+	return 0;
-+}
-+
-+static int crypto4xx_crypt_aes_ccm(struct aead_request *req, bool decrypt)
-+{
-+	struct crypto4xx_ctx *ctx  = crypto_tfm_ctx(req->base.tfm);
-+	struct crypto_aead *aead = crypto_aead_reqtfm(req);
-+	unsigned int len = req->cryptlen;
-+	__le32 iv[16];
-+	u32 tmp_sa[ctx->sa_len * 4];
-+	struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *)tmp_sa;
-+
-+	if (crypto4xx_aead_need_fallback(req, true, decrypt))
-+		return crypto4xx_aead_fallback(req, ctx, decrypt);
-+
-+	if (decrypt)
-+		len -= crypto_aead_authsize(aead);
-+
-+	memcpy(tmp_sa, decrypt ? ctx->sa_in : ctx->sa_out, sizeof(tmp_sa));
-+	sa->sa_command_0.bf.digest_len = crypto_aead_authsize(aead) >> 2;
-+
-+	if (req->iv[0] == 1) {
-+		/* CRYPTO_MODE_AES_ICM */
-+		sa->sa_command_1.bf.crypto_mode9_8 = 1;
-+	}
-+
-+	iv[3] = cpu_to_le32(0);
-+	crypto4xx_memcpy_to_le32(iv, req->iv, 16 - (req->iv[0] + 1));
-+
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-+				  len, iv, sizeof(iv),
-+				  sa, ctx->sa_len, req->assoclen);
-+}
-+
-+int crypto4xx_encrypt_aes_ccm(struct aead_request *req)
-+{
-+	return crypto4xx_crypt_aes_ccm(req, false);
-+}
-+
-+int crypto4xx_decrypt_aes_ccm(struct aead_request *req)
-+{
-+	return crypto4xx_crypt_aes_ccm(req, true);
-+}
-+
-+int crypto4xx_setauthsize_aead(struct crypto_aead *cipher,
-+			       unsigned int authsize)
-+{
-+	struct crypto_tfm *tfm = crypto_aead_tfm(cipher);
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+
-+	return crypto_aead_setauthsize(ctx->sw_cipher.aead, authsize);
-+}
-+
- /**
-  * HASH SHA1 Functions
-  */
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1215,6 +1215,29 @@ static struct crypto4xx_alg_common crypt
- 			}
- 		}
- 	} },
-+
-+	/* AEAD */
-+	{ .type = CRYPTO_ALG_TYPE_AEAD, .u.aead = {
-+		.setkey		= crypto4xx_setkey_aes_ccm,
-+		.setauthsize	= crypto4xx_setauthsize_aead,
-+		.encrypt	= crypto4xx_encrypt_aes_ccm,
-+		.decrypt	= crypto4xx_decrypt_aes_ccm,
-+		.init		= crypto4xx_aead_init,
-+		.exit		= crypto4xx_aead_exit,
-+		.ivsize		= AES_BLOCK_SIZE,
-+		.maxauthsize    = 16,
-+		.base = {
-+			.cra_name	= "ccm(aes)",
-+			.cra_driver_name = "ccm-aes-ppc4xx",
-+			.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags	= CRYPTO_ALG_ASYNC |
-+					  CRYPTO_ALG_NEED_FALLBACK |
-+					  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize	= 1,
-+			.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+			.cra_module	= THIS_MODULE,
-+		},
-+	} },
- };
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -222,4 +222,12 @@ static inline void crypto4xx_memcpy_to_l
- {
- 	crypto4xx_memcpy_swab32((u32 *)dst, buf, len);
- }
-+
-+int crypto4xx_setauthsize_aead(struct crypto_aead *ciper,
-+			       unsigned int authsize);
-+int crypto4xx_setkey_aes_ccm(struct crypto_aead *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_encrypt_aes_ccm(struct aead_request *req);
-+int crypto4xx_decrypt_aes_ccm(struct aead_request *req);
-+
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/020-0025-crypto-crypto4xx-add-aes-gcm-support.patch b/target/linux/apm821xx/patches-4.14/020-0025-crypto-crypto4xx-add-aes-gcm-support.patch
deleted file mode 100644
index d56f838262c..00000000000
--- a/target/linux/apm821xx/patches-4.14/020-0025-crypto-crypto4xx-add-aes-gcm-support.patch
+++ /dev/null
@@ -1,220 +0,0 @@
-From 59231368d3a959fc30c5142c406a045f49130daa Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:17 +0200
-Subject: [PATCH 25/25] crypto: crypto4xx - add aes-gcm support
-
-This patch adds aes-gcm support to crypto4xx.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 139 +++++++++++++++++++++++++++++++++++
- drivers/crypto/amcc/crypto4xx_core.c |  22 ++++++
- drivers/crypto/amcc/crypto4xx_core.h |   4 +
- 3 files changed, 165 insertions(+)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -28,6 +28,7 @@
- #include <crypto/algapi.h>
- #include <crypto/aead.h>
- #include <crypto/aes.h>
-+#include <crypto/gcm.h>
- #include <crypto/sha.h>
- #include <crypto/ctr.h>
- #include "crypto4xx_reg_def.h"
-@@ -418,6 +419,144 @@ int crypto4xx_setauthsize_aead(struct cr
- }
- 
- /**
-+ * AES-GCM Functions
-+ */
-+
-+static int crypto4xx_aes_gcm_validate_keylen(unsigned int keylen)
-+{
-+	switch (keylen) {
-+	case 16:
-+	case 24:
-+	case 32:
-+		return 0;
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+static int crypto4xx_compute_gcm_hash_key_sw(__le32 *hash_start, const u8 *key,
-+					     unsigned int keylen)
-+{
-+	struct crypto_cipher *aes_tfm = NULL;
-+	uint8_t src[16] = { 0 };
-+	int rc = 0;
-+
-+	aes_tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC |
-+				      CRYPTO_ALG_NEED_FALLBACK);
-+	if (IS_ERR(aes_tfm)) {
-+		rc = PTR_ERR(aes_tfm);
-+		pr_warn("could not load aes cipher driver: %d\n", rc);
-+		return rc;
-+	}
-+
-+	rc = crypto_cipher_setkey(aes_tfm, key, keylen);
-+	if (rc) {
-+		pr_err("setkey() failed: %d\n", rc);
-+		goto out;
-+	}
-+
-+	crypto_cipher_encrypt_one(aes_tfm, src, src);
-+	crypto4xx_memcpy_to_le32(hash_start, src, 16);
-+out:
-+	crypto_free_cipher(aes_tfm);
-+	return rc;
-+}
-+
-+int crypto4xx_setkey_aes_gcm(struct crypto_aead *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	struct crypto_tfm *tfm = crypto_aead_tfm(cipher);
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct dynamic_sa_ctl *sa;
-+	int    rc = 0;
-+
-+	if (crypto4xx_aes_gcm_validate_keylen(keylen) != 0) {
-+		crypto_aead_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN);
-+		return -EINVAL;
-+	}
-+
-+	rc = crypto4xx_setup_fallback(ctx, cipher, key, keylen);
-+	if (rc)
-+		return rc;
-+
-+	if (ctx->sa_in || ctx->sa_out)
-+		crypto4xx_free_sa(ctx);
-+
-+	rc = crypto4xx_alloc_sa(ctx, SA_AES128_GCM_LEN + (keylen - 16) / 4);
-+	if (rc)
-+		return rc;
-+
-+	sa  = (struct dynamic_sa_ctl *) ctx->sa_in;
-+
-+	sa->sa_contents.w = SA_AES_GCM_CONTENTS | (keylen << 2);
-+	set_dynamic_sa_command_0(sa, SA_SAVE_HASH, SA_NOT_SAVE_IV,
-+				 SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
-+				 SA_NO_HEADER_PROC, SA_HASH_ALG_GHASH,
-+				 SA_CIPHER_ALG_AES, SA_PAD_TYPE_ZERO,
-+				 SA_OP_GROUP_BASIC, SA_OPCODE_HASH_DECRYPT,
-+				 DIR_INBOUND);
-+	set_dynamic_sa_command_1(sa, CRYPTO_MODE_CTR, SA_HASH_MODE_HASH,
-+				 CRYPTO_FEEDBACK_MODE_NO_FB, SA_EXTENDED_SN_OFF,
-+				 SA_SEQ_MASK_ON, SA_MC_DISABLE,
-+				 SA_NOT_COPY_PAD, SA_COPY_PAYLOAD,
-+				 SA_NOT_COPY_HDR);
-+
-+	sa->sa_command_1.bf.key_len = keylen >> 3;
-+
-+	crypto4xx_memcpy_to_le32(get_dynamic_sa_key_field(sa),
-+				 key, keylen);
-+
-+	rc = crypto4xx_compute_gcm_hash_key_sw(get_dynamic_sa_inner_digest(sa),
-+		key, keylen);
-+	if (rc) {
-+		pr_err("GCM hash key setting failed = %d\n", rc);
-+		goto err;
-+	}
-+
-+	memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
-+	sa = (struct dynamic_sa_ctl *) ctx->sa_out;
-+	sa->sa_command_0.bf.dir = DIR_OUTBOUND;
-+	sa->sa_command_0.bf.opcode = SA_OPCODE_ENCRYPT_HASH;
-+
-+	return 0;
-+err:
-+	crypto4xx_free_sa(ctx);
-+	return rc;
-+}
-+
-+static inline int crypto4xx_crypt_aes_gcm(struct aead_request *req,
-+					  bool decrypt)
-+{
-+	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	unsigned int len = req->cryptlen;
-+	__le32 iv[4];
-+
-+	if (crypto4xx_aead_need_fallback(req, false, decrypt))
-+		return crypto4xx_aead_fallback(req, ctx, decrypt);
-+
-+	crypto4xx_memcpy_to_le32(iv, req->iv, GCM_AES_IV_SIZE);
-+	iv[3] = cpu_to_le32(1);
-+
-+	if (decrypt)
-+		len -= crypto_aead_authsize(crypto_aead_reqtfm(req));
-+
-+	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-+				  len, iv, sizeof(iv),
-+				  decrypt ? ctx->sa_in : ctx->sa_out,
-+				  ctx->sa_len, req->assoclen);
-+}
-+
-+int crypto4xx_encrypt_aes_gcm(struct aead_request *req)
-+{
-+	return crypto4xx_crypt_aes_gcm(req, false);
-+}
-+
-+int crypto4xx_decrypt_aes_gcm(struct aead_request *req)
-+{
-+	return crypto4xx_crypt_aes_gcm(req, true);
-+}
-+
-+/**
-  * HASH SHA1 Functions
-  */
- static int crypto4xx_hash_alg_init(struct crypto_tfm *tfm,
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -38,6 +38,7 @@
- #include <crypto/aead.h>
- #include <crypto/aes.h>
- #include <crypto/ctr.h>
-+#include <crypto/gcm.h>
- #include <crypto/sha.h>
- #include <crypto/scatterwalk.h>
- #include <crypto/internal/aead.h>
-@@ -1232,6 +1233,27 @@ static struct crypto4xx_alg_common crypt
- 			.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
- 			.cra_flags	= CRYPTO_ALG_ASYNC |
- 					  CRYPTO_ALG_NEED_FALLBACK |
-+					  CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize	= 1,
-+			.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
-+			.cra_module	= THIS_MODULE,
-+		},
-+	} },
-+	{ .type = CRYPTO_ALG_TYPE_AEAD, .u.aead = {
-+		.setkey		= crypto4xx_setkey_aes_gcm,
-+		.setauthsize	= crypto4xx_setauthsize_aead,
-+		.encrypt	= crypto4xx_encrypt_aes_gcm,
-+		.decrypt	= crypto4xx_decrypt_aes_gcm,
-+		.init		= crypto4xx_aead_init,
-+		.exit		= crypto4xx_aead_exit,
-+		.ivsize		= GCM_AES_IV_SIZE,
-+		.maxauthsize	= 16,
-+		.base = {
-+			.cra_name	= "gcm(aes)",
-+			.cra_driver_name = "gcm-aes-ppc4xx",
-+			.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags	= CRYPTO_ALG_ASYNC |
-+					  CRYPTO_ALG_NEED_FALLBACK |
- 					  CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize	= 1,
- 			.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -229,5 +229,9 @@ int crypto4xx_setkey_aes_ccm(struct cryp
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_encrypt_aes_ccm(struct aead_request *req);
- int crypto4xx_decrypt_aes_ccm(struct aead_request *req);
-+int crypto4xx_setkey_aes_gcm(struct crypto_aead *cipher,
-+			     const u8 *key, unsigned int keylen);
-+int crypto4xx_encrypt_aes_gcm(struct aead_request *req);
-+int crypto4xx_decrypt_aes_gcm(struct aead_request *req);
- 
- #endif
diff --git a/target/linux/apm821xx/patches-4.14/021-0001-crypto-crypto4xx-shuffle-iomap-in-front-of-request_i.patch b/target/linux/apm821xx/patches-4.14/021-0001-crypto-crypto4xx-shuffle-iomap-in-front-of-request_i.patch
deleted file mode 100644
index 9c3b9fe7056..00000000000
--- a/target/linux/apm821xx/patches-4.14/021-0001-crypto-crypto4xx-shuffle-iomap-in-front-of-request_i.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 4baa099377d73ea99c7802a9685815b32e8bf119 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 21 Dec 2017 15:08:18 +0100
-Subject: [PATCH 1/6] crypto: crypto4xx - shuffle iomap in front of request_irq
-
-It is possible to avoid the ce_base null pointer check in the
-drivers' interrupt handler routine "crypto4xx_ce_interrupt_handler()"
-by simply doing the iomap in front of the IRQ registration.
-
-This way, the ce_base will always be valid in the handler and
-a branch in an critical path can be avoided.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/crypto/amcc/crypto4xx_core.c | 21 +++++++++------------
- 1 file changed, 9 insertions(+), 12 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1080,9 +1080,6 @@ static irqreturn_t crypto4xx_ce_interrup
- 	struct device *dev = (struct device *)data;
- 	struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
- 
--	if (!core_dev->dev->ce_base)
--		return 0;
--
- 	writel(PPC4XX_INTERRUPT_CLR,
- 	       core_dev->dev->ce_base + CRYPTO4XX_INT_CLR);
- 	tasklet_schedule(&core_dev->tasklet);
-@@ -1330,13 +1327,6 @@ static int crypto4xx_probe(struct platfo
- 	tasklet_init(&core_dev->tasklet, crypto4xx_bh_tasklet_cb,
- 		     (unsigned long) dev);
- 
--	/* Register for Crypto isr, Crypto Engine IRQ */
--	core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
--	rc = request_irq(core_dev->irq, crypto4xx_ce_interrupt_handler, 0,
--			 core_dev->dev->name, dev);
--	if (rc)
--		goto err_request_irq;
--
- 	core_dev->dev->ce_base = of_iomap(ofdev->dev.of_node, 0);
- 	if (!core_dev->dev->ce_base) {
- 		dev_err(dev, "failed to of_iomap\n");
-@@ -1344,6 +1334,13 @@ static int crypto4xx_probe(struct platfo
- 		goto err_iomap;
- 	}
- 
-+	/* Register for Crypto isr, Crypto Engine IRQ */
-+	core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
-+	rc = request_irq(core_dev->irq, crypto4xx_ce_interrupt_handler, 0,
-+			 core_dev->dev->name, dev);
-+	if (rc)
-+		goto err_request_irq;
-+
- 	/* need to setup pdr, rdr, gdr and sdr before this */
- 	crypto4xx_hw_init(core_dev->dev);
- 
-@@ -1357,11 +1354,11 @@ static int crypto4xx_probe(struct platfo
- 	return 0;
- 
- err_start_dev:
--	iounmap(core_dev->dev->ce_base);
--err_iomap:
- 	free_irq(core_dev->irq, dev);
- err_request_irq:
- 	irq_dispose_mapping(core_dev->irq);
-+	iounmap(core_dev->dev->ce_base);
-+err_iomap:
- 	tasklet_kill(&core_dev->tasklet);
- err_build_sdr:
- 	crypto4xx_destroy_sdr(core_dev->dev);
diff --git a/target/linux/apm821xx/patches-4.14/021-0002-crypto-crypto4xx-support-Revision-B-parts.patch b/target/linux/apm821xx/patches-4.14/021-0002-crypto-crypto4xx-support-Revision-B-parts.patch
deleted file mode 100644
index 1aaf7920b84..00000000000
--- a/target/linux/apm821xx/patches-4.14/021-0002-crypto-crypto4xx-support-Revision-B-parts.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From 1e932b627e79aa2c70e2c7278e4ac930303faa3f Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 21 Dec 2017 15:09:18 +0100
-Subject: [PATCH 2/6] crypto: crypto4xx - support Revision B parts
-
-This patch adds support for the crypto4xx RevB cores
-found in the 460EX, 460SX and later cores (like the APM821xx).
-
-Without this patch, the crypto4xx driver will not be
-able to process any offloaded requests and simply hang
-indefinitely.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/crypto/amcc/crypto4xx_core.c    | 48 +++++++++++++++++++++++++++++----
- drivers/crypto/amcc/crypto4xx_core.h    |  1 +
- drivers/crypto/amcc/crypto4xx_reg_def.h |  4 ++-
- 3 files changed, 47 insertions(+), 6 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -128,7 +128,14 @@ static void crypto4xx_hw_init(struct cry
- 	writel(PPC4XX_INT_DESCR_CNT, dev->ce_base + CRYPTO4XX_INT_DESCR_CNT);
- 	writel(PPC4XX_INT_DESCR_CNT, dev->ce_base + CRYPTO4XX_INT_DESCR_CNT);
- 	writel(PPC4XX_INT_CFG, dev->ce_base + CRYPTO4XX_INT_CFG);
--	writel(PPC4XX_PD_DONE_INT, dev->ce_base + CRYPTO4XX_INT_EN);
-+	if (dev->is_revb) {
-+		writel(PPC4XX_INT_TIMEOUT_CNT_REVB << 10,
-+		       dev->ce_base + CRYPTO4XX_INT_TIMEOUT_CNT);
-+		writel(PPC4XX_PD_DONE_INT | PPC4XX_TMO_ERR_INT,
-+		       dev->ce_base + CRYPTO4XX_INT_EN);
-+	} else {
-+		writel(PPC4XX_PD_DONE_INT, dev->ce_base + CRYPTO4XX_INT_EN);
-+	}
- }
- 
- int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size)
-@@ -1075,18 +1082,29 @@ static void crypto4xx_bh_tasklet_cb(unsi
- /**
-  * Top Half of isr.
-  */
--static irqreturn_t crypto4xx_ce_interrupt_handler(int irq, void *data)
-+static inline irqreturn_t crypto4xx_interrupt_handler(int irq, void *data,
-+						      u32 clr_val)
- {
- 	struct device *dev = (struct device *)data;
- 	struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev);
- 
--	writel(PPC4XX_INTERRUPT_CLR,
--	       core_dev->dev->ce_base + CRYPTO4XX_INT_CLR);
-+	writel(clr_val, core_dev->dev->ce_base + CRYPTO4XX_INT_CLR);
- 	tasklet_schedule(&core_dev->tasklet);
- 
- 	return IRQ_HANDLED;
- }
- 
-+static irqreturn_t crypto4xx_ce_interrupt_handler(int irq, void *data)
-+{
-+	return crypto4xx_interrupt_handler(irq, data, PPC4XX_INTERRUPT_CLR);
-+}
-+
-+static irqreturn_t crypto4xx_ce_interrupt_handler_revb(int irq, void *data)
-+{
-+	return crypto4xx_interrupt_handler(irq, data, PPC4XX_INTERRUPT_CLR |
-+		PPC4XX_TMO_ERR_INT);
-+}
-+
- /**
-  * Supported Crypto Algorithms
-  */
-@@ -1268,6 +1286,8 @@ static int crypto4xx_probe(struct platfo
- 	struct resource res;
- 	struct device *dev = &ofdev->dev;
- 	struct crypto4xx_core_device *core_dev;
-+	u32 pvr;
-+	bool is_revb = true;
- 
- 	rc = of_address_to_resource(ofdev->dev.of_node, 0, &res);
- 	if (rc)
-@@ -1284,6 +1304,7 @@ static int crypto4xx_probe(struct platfo
- 		       mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
- 		mtdcri(SDR0, PPC405EX_SDR0_SRST,
- 		       mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
-+		is_revb = false;
- 	} else if (of_find_compatible_node(NULL, NULL,
- 			"amcc,ppc460sx-crypto")) {
- 		mtdcri(SDR0, PPC460SX_SDR0_SRST,
-@@ -1306,7 +1327,22 @@ static int crypto4xx_probe(struct platfo
- 	if (!core_dev->dev)
- 		goto err_alloc_dev;
- 
-+	/*
-+	 * Older version of 460EX/GT have a hardware bug.
-+	 * Hence they do not support H/W based security intr coalescing
-+	 */
-+	pvr = mfspr(SPRN_PVR);
-+	if (is_revb && ((pvr >> 4) == 0x130218A)) {
-+		u32 min = PVR_MIN(pvr);
-+
-+		if (min < 4) {
-+			dev_info(dev, "RevA detected - disable interrupt coalescing\n");
-+			is_revb = false;
-+		}
-+	}
-+
- 	core_dev->dev->core_dev = core_dev;
-+	core_dev->dev->is_revb = is_revb;
- 	core_dev->device = dev;
- 	spin_lock_init(&core_dev->lock);
- 	INIT_LIST_HEAD(&core_dev->dev->alg_list);
-@@ -1336,7 +1372,9 @@ static int crypto4xx_probe(struct platfo
- 
- 	/* Register for Crypto isr, Crypto Engine IRQ */
- 	core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
--	rc = request_irq(core_dev->irq, crypto4xx_ce_interrupt_handler, 0,
-+	rc = request_irq(core_dev->irq, is_revb ?
-+			 crypto4xx_ce_interrupt_handler_revb :
-+			 crypto4xx_ce_interrupt_handler, 0,
- 			 core_dev->dev->name, dev);
- 	if (rc)
- 		goto err_request_irq;
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -109,6 +109,7 @@ struct crypto4xx_device {
- 	struct list_head alg_list;	/* List of algorithm supported
- 					by this device */
- 	struct ratelimit_state aead_ratelimit;
-+	bool is_revb;
- };
- 
- struct crypto4xx_core_device {
---- a/drivers/crypto/amcc/crypto4xx_reg_def.h
-+++ b/drivers/crypto/amcc/crypto4xx_reg_def.h
-@@ -121,13 +121,15 @@
- #define PPC4XX_PD_SIZE				6
- #define PPC4XX_CTX_DONE_INT			0x2000
- #define PPC4XX_PD_DONE_INT			0x8000
-+#define PPC4XX_TMO_ERR_INT			0x40000
- #define PPC4XX_BYTE_ORDER			0x22222
- #define PPC4XX_INTERRUPT_CLR			0x3ffff
- #define PPC4XX_PRNG_CTRL_AUTO_EN		0x3
- #define PPC4XX_DC_3DES_EN			1
- #define PPC4XX_TRNG_EN				0x00020000
--#define PPC4XX_INT_DESCR_CNT			4
-+#define PPC4XX_INT_DESCR_CNT			7
- #define PPC4XX_INT_TIMEOUT_CNT			0
-+#define PPC4XX_INT_TIMEOUT_CNT_REVB		0x3FF
- #define PPC4XX_INT_CFG				1
- /**
-  * all follow define are ad hoc
diff --git a/target/linux/apm821xx/patches-4.14/021-0003-crypto-crypto4xx-fix-missing-irq-devname.patch b/target/linux/apm821xx/patches-4.14/021-0003-crypto-crypto4xx-fix-missing-irq-devname.patch
deleted file mode 100644
index 0b1652820ba..00000000000
--- a/target/linux/apm821xx/patches-4.14/021-0003-crypto-crypto4xx-fix-missing-irq-devname.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 00179ef6e3c4e5db6258cd6e273e4063b8437d18 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 21 Dec 2017 15:10:18 +0100
-Subject: [PATCH 3/6] crypto: crypto4xx - fix missing irq devname
-
-crypto4xx_device's name variable is not set to anything.
-The common devname for request_irq seems to be the module
-name. This will fix the seemingly anonymous interrupt
-entry in /proc/interrupts for crypto4xx.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/crypto/amcc/crypto4xx_core.c | 2 +-
- drivers/crypto/amcc/crypto4xx_core.h | 1 -
- 2 files changed, 1 insertion(+), 2 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1375,7 +1375,7 @@ static int crypto4xx_probe(struct platfo
- 	rc = request_irq(core_dev->irq, is_revb ?
- 			 crypto4xx_ce_interrupt_handler_revb :
- 			 crypto4xx_ce_interrupt_handler, 0,
--			 core_dev->dev->name, dev);
-+			 KBUILD_MODNAME, dev);
- 	if (rc)
- 		goto err_request_irq;
- 
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -82,7 +82,6 @@ struct pd_uinfo {
- 
- struct crypto4xx_device {
- 	struct crypto4xx_core_device *core_dev;
--	char *name;
- 	void __iomem *ce_base;
- 	void __iomem *trng_base;
- 
diff --git a/target/linux/apm821xx/patches-4.14/021-0004-crypto-crypto4xx-kill-MODULE_NAME.patch b/target/linux/apm821xx/patches-4.14/021-0004-crypto-crypto4xx-kill-MODULE_NAME.patch
deleted file mode 100644
index 3dd35ba9756..00000000000
--- a/target/linux/apm821xx/patches-4.14/021-0004-crypto-crypto4xx-kill-MODULE_NAME.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From c3621f23fed7d6fff33083ae538004ea59c01d8f Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 21 Dec 2017 15:11:18 +0100
-Subject: [PATCH 4/6] crypto: crypto4xx - kill MODULE_NAME
-
-KBUILD_MODNAME provides the same value.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/crypto/amcc/crypto4xx_core.c | 2 +-
- drivers/crypto/amcc/crypto4xx_core.h | 2 --
- drivers/crypto/amcc/crypto4xx_trng.c | 2 +-
- 3 files changed, 2 insertions(+), 4 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1437,7 +1437,7 @@ MODULE_DEVICE_TABLE(of, crypto4xx_match)
- 
- static struct platform_driver crypto4xx_driver = {
- 	.driver = {
--		.name = MODULE_NAME,
-+		.name = KBUILD_MODNAME,
- 		.of_match_table = crypto4xx_match,
- 	},
- 	.probe		= crypto4xx_probe,
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -28,8 +28,6 @@
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_sa.h"
- 
--#define MODULE_NAME "crypto4xx"
--
- #define PPC460SX_SDR0_SRST                      0x201
- #define PPC405EX_SDR0_SRST                      0x200
- #define PPC460EX_SDR0_SRST                      0x201
---- a/drivers/crypto/amcc/crypto4xx_trng.c
-+++ b/drivers/crypto/amcc/crypto4xx_trng.c
-@@ -94,7 +94,7 @@ void ppc4xx_trng_probe(struct crypto4xx_
- 	if (!rng)
- 		goto err_out;
- 
--	rng->name = MODULE_NAME;
-+	rng->name = KBUILD_MODNAME;
- 	rng->data_present = ppc4xx_trng_data_present;
- 	rng->data_read = ppc4xx_trng_data_read;
- 	rng->priv = (unsigned long) dev;
diff --git a/target/linux/apm821xx/patches-4.14/021-0005-crypto-crypto4xx-perform-aead-icv-check-in-the-drive.patch b/target/linux/apm821xx/patches-4.14/021-0005-crypto-crypto4xx-perform-aead-icv-check-in-the-drive.patch
deleted file mode 100644
index 2107f2dc59c..00000000000
--- a/target/linux/apm821xx/patches-4.14/021-0005-crypto-crypto4xx-perform-aead-icv-check-in-the-drive.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 5b3856d1d98e6f6a58b70c1c0d7da3fb5f042e9c Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 21 Dec 2017 16:00:01 +0100
-Subject: [PATCH 5/6] crypto: crypto4xx - perform aead icv check in the driver
-
-The ccm-aes-ppc4xx now fails one of testmgr's expected
-failure test cases as such:
-
-alg: aead: decryption failed on test 10 for ccm-aes-ppc4xx: ret was 0, expected -EBADMSG
-
-Upon closer inspection, it turned out that the hardware's
-crypto flags that would indicate an authentification failure
-are not set by the hardware. The original vendor source from
-which this was ported does not have any special code or notes
-about why this would happen or if there are any WAs.
-
-Hence, this patch converts the aead_done callback handler to
-perform the icv check in the driver. And this fixes the false
-negative and the ccm-aes-ppc4xx passes the selftests once again.
-
-|name         : ccm(aes)
-|driver       : ccm-aes-ppc4xx
-|module       : crypto4xx
-|priority     : 300
-|refcnt       : 1
-|selftest     : passed
-|internal     : no
-|type         : aead
-|async        : yes
-|blocksize    : 1
-|ivsize       : 16
-|maxauthsize  : 16
-|geniv        : <none>
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  6 +---
- drivers/crypto/amcc/crypto4xx_core.c | 54 ++++++++++++++++++------------------
- 2 files changed, 28 insertions(+), 32 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -257,10 +257,6 @@ static inline bool crypto4xx_aead_need_f
- 	if (is_ccm && !(req->iv[0] == 1 || req->iv[0] == 3))
- 		return true;
- 
--	/* CCM - fix CBC MAC mismatch in special case */
--	if (is_ccm && decrypt && !req->assoclen)
--		return true;
--
- 	return false;
- }
- 
-@@ -331,7 +327,7 @@ int crypto4xx_setkey_aes_ccm(struct cryp
- 	sa = (struct dynamic_sa_ctl *) ctx->sa_in;
- 	sa->sa_contents.w = SA_AES_CCM_CONTENTS | (keylen << 2);
- 
--	set_dynamic_sa_command_0(sa, SA_NOT_SAVE_HASH, SA_NOT_SAVE_IV,
-+	set_dynamic_sa_command_0(sa, SA_SAVE_HASH, SA_NOT_SAVE_IV,
- 				 SA_LOAD_HASH_FROM_SA, SA_LOAD_IV_FROM_STATE,
- 				 SA_NO_HEADER_PROC, SA_HASH_ALG_CBC_MAC,
- 				 SA_CIPHER_ALG_AES,
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -582,15 +582,14 @@ static void crypto4xx_aead_done(struct c
- 				struct pd_uinfo *pd_uinfo,
- 				struct ce_pd *pd)
- {
--	struct aead_request *aead_req;
--	struct crypto4xx_ctx *ctx;
-+	struct aead_request *aead_req = container_of(pd_uinfo->async_req,
-+		struct aead_request, base);
- 	struct scatterlist *dst = pd_uinfo->dest_va;
-+	size_t cp_len = crypto_aead_authsize(
-+		crypto_aead_reqtfm(aead_req));
-+	u32 icv[cp_len];
- 	int err = 0;
- 
--	aead_req = container_of(pd_uinfo->async_req, struct aead_request,
--				base);
--	ctx  = crypto_tfm_ctx(aead_req->base.tfm);
--
- 	if (pd_uinfo->using_sd) {
- 		crypto4xx_copy_pkt_to_dst(dev, pd, pd_uinfo,
- 					  pd->pd_ctl_len.bf.pkt_len,
-@@ -602,38 +601,39 @@ static void crypto4xx_aead_done(struct c
- 
- 	if (pd_uinfo->sa_va->sa_command_0.bf.dir == DIR_OUTBOUND) {
- 		/* append icv at the end */
--		size_t cp_len = crypto_aead_authsize(
--			crypto_aead_reqtfm(aead_req));
--		u32 icv[cp_len];
--
- 		crypto4xx_memcpy_from_le32(icv, pd_uinfo->sr_va->save_digest,
- 					   cp_len);
- 
- 		scatterwalk_map_and_copy(icv, dst, aead_req->cryptlen,
- 					 cp_len, 1);
-+	} else {
-+		/* check icv at the end */
-+		scatterwalk_map_and_copy(icv, aead_req->src,
-+			aead_req->assoclen + aead_req->cryptlen -
-+			cp_len, cp_len, 0);
-+
-+		crypto4xx_memcpy_from_le32(icv, icv, cp_len);
-+
-+		if (crypto_memneq(icv, pd_uinfo->sr_va->save_digest, cp_len))
-+			err = -EBADMSG;
- 	}
- 
- 	crypto4xx_ret_sg_desc(dev, pd_uinfo);
- 
- 	if (pd->pd_ctl.bf.status & 0xff) {
--		if (pd->pd_ctl.bf.status & 0x1) {
--			/* authentication error */
--			err = -EBADMSG;
--		} else {
--			if (!__ratelimit(&dev->aead_ratelimit)) {
--				if (pd->pd_ctl.bf.status & 2)
--					pr_err("pad fail error\n");
--				if (pd->pd_ctl.bf.status & 4)
--					pr_err("seqnum fail\n");
--				if (pd->pd_ctl.bf.status & 8)
--					pr_err("error _notify\n");
--				pr_err("aead return err status = 0x%02x\n",
--					pd->pd_ctl.bf.status & 0xff);
--				pr_err("pd pad_ctl = 0x%08x\n",
--					pd->pd_ctl.bf.pd_pad_ctl);
--			}
--			err = -EINVAL;
-+		if (!__ratelimit(&dev->aead_ratelimit)) {
-+			if (pd->pd_ctl.bf.status & 2)
-+				pr_err("pad fail error\n");
-+			if (pd->pd_ctl.bf.status & 4)
-+				pr_err("seqnum fail\n");
-+			if (pd->pd_ctl.bf.status & 8)
-+				pr_err("error _notify\n");
-+			pr_err("aead return err status = 0x%02x\n",
-+				pd->pd_ctl.bf.status & 0xff);
-+			pr_err("pd pad_ctl = 0x%08x\n",
-+				pd->pd_ctl.bf.pd_pad_ctl);
- 		}
-+		err = -EINVAL;
- 	}
- 
- 	if (pd_uinfo->state & PD_ENTRY_BUSY)
diff --git a/target/linux/apm821xx/patches-4.14/022-0001-crypto-Use-zeroing-memory-allocator-instead-of-alloc.patch b/target/linux/apm821xx/patches-4.14/022-0001-crypto-Use-zeroing-memory-allocator-instead-of-alloc.patch
deleted file mode 100644
index 57823fad0ca..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0001-crypto-Use-zeroing-memory-allocator-instead-of-alloc.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 75d68369b544acc5d14c18a827654dfff248d09d Mon Sep 17 00:00:00 2001
-From: Himanshu Jha <himanshujha199640@gmail.com>
-Date: Sun, 31 Dec 2017 17:54:23 +0530
-Subject: [PATCH 1/8] crypto: Use zeroing memory allocator instead of
- allocator/memset
-
-Use dma_zalloc_coherent for allocating zeroed
-memory and remove unnecessary memset function.
-
-Done using Coccinelle.
-Generated-by: scripts/coccinelle/api/alloc/kzalloc-simple.cocci
-0-day tested with no failures.
-
-Signed-off-by: Himanshu Jha <himanshujha199640@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 8 +++-----
- 1 file changed, 3 insertions(+), 5 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -282,14 +282,12 @@ static u32 crypto4xx_put_pd_to_pdr(struc
-  */
- static u32 crypto4xx_build_gdr(struct crypto4xx_device *dev)
- {
--	dev->gdr = dma_alloc_coherent(dev->core_dev->device,
--				      sizeof(struct ce_gd) * PPC4XX_NUM_GD,
--				      &dev->gdr_pa, GFP_ATOMIC);
-+	dev->gdr = dma_zalloc_coherent(dev->core_dev->device,
-+				       sizeof(struct ce_gd) * PPC4XX_NUM_GD,
-+				       &dev->gdr_pa, GFP_ATOMIC);
- 	if (!dev->gdr)
- 		return -ENOMEM;
- 
--	memset(dev->gdr, 0, sizeof(struct ce_gd) * PPC4XX_NUM_GD);
--
- 	return 0;
- }
- 
diff --git a/target/linux/apm821xx/patches-4.14/022-0002-crypto-crypto4xx-performance-optimizations.patch b/target/linux/apm821xx/patches-4.14/022-0002-crypto-crypto4xx-performance-optimizations.patch
deleted file mode 100644
index 4872f44d16d..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0002-crypto-crypto4xx-performance-optimizations.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From a8d79d7bfb14f471914017103ee2329a74e5e89d Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:51 +0200
-Subject: crypto: crypto4xx - performance optimizations
-
-This patch provides a cheap 2MiB/s+ (~ 6%) performance
-improvement over the current code. This is because the
-compiler can now optimize several endian swap memcpy.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 32 +++++++++++++++++++-------------
- drivers/crypto/amcc/crypto4xx_core.c | 22 +++++++++++-----------
- drivers/crypto/amcc/crypto4xx_core.h |  6 ++++--
- 3 files changed, 34 insertions(+), 26 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -74,32 +74,38 @@ static void set_dynamic_sa_command_1(str
- 	sa->sa_command_1.bf.copy_hdr = cp_hdr;
- }
- 
--int crypto4xx_encrypt(struct ablkcipher_request *req)
-+static inline int crypto4xx_crypt(struct ablkcipher_request *req,
-+				  const unsigned int ivlen, bool decrypt)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
--	unsigned int ivlen = crypto_ablkcipher_ivsize(
--		crypto_ablkcipher_reqtfm(req));
- 	__le32 iv[ivlen];
- 
- 	if (ivlen)
- 		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, iv, ivlen, ctx->sa_out, ctx->sa_len, 0);
-+		req->nbytes, iv, ivlen, decrypt ? ctx->sa_in : ctx->sa_out,
-+		ctx->sa_len, 0);
- }
- 
--int crypto4xx_decrypt(struct ablkcipher_request *req)
-+int crypto4xx_encrypt_noiv(struct ablkcipher_request *req)
- {
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
--	unsigned int ivlen = crypto_ablkcipher_ivsize(
--		crypto_ablkcipher_reqtfm(req));
--	__le32 iv[ivlen];
-+	return crypto4xx_crypt(req, 0, false);
-+}
- 
--	if (ivlen)
--		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
-+int crypto4xx_encrypt_iv(struct ablkcipher_request *req)
-+{
-+	return crypto4xx_crypt(req, AES_IV_SIZE, false);
-+}
- 
--	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, iv, ivlen, ctx->sa_in, ctx->sa_len, 0);
-+int crypto4xx_decrypt_noiv(struct ablkcipher_request *req)
-+{
-+	return crypto4xx_crypt(req, 0, true);
-+}
-+
-+int crypto4xx_decrypt_iv(struct ablkcipher_request *req)
-+{
-+	return crypto4xx_crypt(req, AES_IV_SIZE, true);
- }
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -585,7 +585,7 @@ static void crypto4xx_aead_done(struct c
- 	struct scatterlist *dst = pd_uinfo->dest_va;
- 	size_t cp_len = crypto_aead_authsize(
- 		crypto_aead_reqtfm(aead_req));
--	u32 icv[cp_len];
-+	u32 icv[AES_BLOCK_SIZE];
- 	int err = 0;
- 
- 	if (pd_uinfo->using_sd) {
-@@ -600,7 +600,7 @@ static void crypto4xx_aead_done(struct c
- 	if (pd_uinfo->sa_va->sa_command_0.bf.dir == DIR_OUTBOUND) {
- 		/* append icv at the end */
- 		crypto4xx_memcpy_from_le32(icv, pd_uinfo->sr_va->save_digest,
--					   cp_len);
-+					   sizeof(icv));
- 
- 		scatterwalk_map_and_copy(icv, dst, aead_req->cryptlen,
- 					 cp_len, 1);
-@@ -610,7 +610,7 @@ static void crypto4xx_aead_done(struct c
- 			aead_req->assoclen + aead_req->cryptlen -
- 			cp_len, cp_len, 0);
- 
--		crypto4xx_memcpy_from_le32(icv, icv, cp_len);
-+		crypto4xx_memcpy_from_le32(icv, icv, sizeof(icv));
- 
- 		if (crypto_memneq(icv, pd_uinfo->sr_va->save_digest, cp_len))
- 			err = -EBADMSG;
-@@ -1127,8 +1127,8 @@ static struct crypto4xx_alg_common crypt
- 				.max_keysize 	= AES_MAX_KEY_SIZE,
- 				.ivsize		= AES_IV_SIZE,
- 				.setkey 	= crypto4xx_setkey_aes_cbc,
--				.encrypt 	= crypto4xx_encrypt,
--				.decrypt 	= crypto4xx_decrypt,
-+				.encrypt	= crypto4xx_encrypt_iv,
-+				.decrypt	= crypto4xx_decrypt_iv,
- 			}
- 		}
- 	}},
-@@ -1151,8 +1151,8 @@ static struct crypto4xx_alg_common crypt
- 				.max_keysize	= AES_MAX_KEY_SIZE,
- 				.ivsize		= AES_IV_SIZE,
- 				.setkey		= crypto4xx_setkey_aes_cfb,
--				.encrypt	= crypto4xx_encrypt,
--				.decrypt	= crypto4xx_decrypt,
-+				.encrypt	= crypto4xx_encrypt_iv,
-+				.decrypt	= crypto4xx_decrypt_iv,
- 			}
- 		}
- 	} },
-@@ -1200,8 +1200,8 @@ static struct crypto4xx_alg_common crypt
- 				.min_keysize	= AES_MIN_KEY_SIZE,
- 				.max_keysize	= AES_MAX_KEY_SIZE,
- 				.setkey		= crypto4xx_setkey_aes_ecb,
--				.encrypt	= crypto4xx_encrypt,
--				.decrypt	= crypto4xx_decrypt,
-+				.encrypt	= crypto4xx_encrypt_noiv,
-+				.decrypt	= crypto4xx_decrypt_noiv,
- 			}
- 		}
- 	} },
-@@ -1224,8 +1224,8 @@ static struct crypto4xx_alg_common crypt
- 				.max_keysize	= AES_MAX_KEY_SIZE,
- 				.ivsize		= AES_IV_SIZE,
- 				.setkey		= crypto4xx_setkey_aes_ofb,
--				.encrypt	= crypto4xx_encrypt,
--				.decrypt	= crypto4xx_decrypt,
-+				.encrypt	= crypto4xx_encrypt_iv,
-+				.decrypt	= crypto4xx_decrypt_iv,
- 			}
- 		}
- 	} },
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -168,8 +168,10 @@ int crypto4xx_setkey_aes_ofb(struct cryp
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_encrypt(struct ablkcipher_request *req);
--int crypto4xx_decrypt(struct ablkcipher_request *req);
-+int crypto4xx_encrypt_iv(struct ablkcipher_request *req);
-+int crypto4xx_decrypt_iv(struct ablkcipher_request *req);
-+int crypto4xx_encrypt_noiv(struct ablkcipher_request *req);
-+int crypto4xx_decrypt_noiv(struct ablkcipher_request *req);
- int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req);
- int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req);
- int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
diff --git a/target/linux/apm821xx/patches-4.14/022-0003-crypto-crypto4xx-convert-to-skcipher.patch b/target/linux/apm821xx/patches-4.14/022-0003-crypto-crypto4xx-convert-to-skcipher.patch
deleted file mode 100644
index 439f78ae5c3..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0003-crypto-crypto4xx-convert-to-skcipher.patch
+++ /dev/null
@@ -1,578 +0,0 @@
-From ce05ffe10457bda487fa049016a6ba79934bdece Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:52 +0200
-Subject: [PATCH 3/8] crypto: crypto4xx - convert to skcipher
-
-The ablkcipher APIs have been effectively deprecated since [1].
-This patch converts the crypto4xx driver to the new skcipher APIs.
-
-[1] <https://www.spinics.net/lists/linux-crypto/msg18133.html>
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  |  60 ++++---
- drivers/crypto/amcc/crypto4xx_core.c | 255 +++++++++++++--------------
- drivers/crypto/amcc/crypto4xx_core.h |  25 +--
- 3 files changed, 163 insertions(+), 177 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -31,6 +31,7 @@
- #include <crypto/gcm.h>
- #include <crypto/sha.h>
- #include <crypto/ctr.h>
-+#include <crypto/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
- #include "crypto4xx_sa.h"
-@@ -74,36 +75,37 @@ static void set_dynamic_sa_command_1(str
- 	sa->sa_command_1.bf.copy_hdr = cp_hdr;
- }
- 
--static inline int crypto4xx_crypt(struct ablkcipher_request *req,
-+static inline int crypto4xx_crypt(struct skcipher_request *req,
- 				  const unsigned int ivlen, bool decrypt)
- {
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	__le32 iv[ivlen];
- 
- 	if (ivlen)
--		crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
-+		crypto4xx_memcpy_to_le32(iv, req->iv, ivlen);
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--		req->nbytes, iv, ivlen, decrypt ? ctx->sa_in : ctx->sa_out,
-+		req->cryptlen, iv, ivlen, decrypt ? ctx->sa_in : ctx->sa_out,
- 		ctx->sa_len, 0);
- }
- 
--int crypto4xx_encrypt_noiv(struct ablkcipher_request *req)
-+int crypto4xx_encrypt_noiv(struct skcipher_request *req)
- {
- 	return crypto4xx_crypt(req, 0, false);
- }
- 
--int crypto4xx_encrypt_iv(struct ablkcipher_request *req)
-+int crypto4xx_encrypt_iv(struct skcipher_request *req)
- {
- 	return crypto4xx_crypt(req, AES_IV_SIZE, false);
- }
- 
--int crypto4xx_decrypt_noiv(struct ablkcipher_request *req)
-+int crypto4xx_decrypt_noiv(struct skcipher_request *req)
- {
- 	return crypto4xx_crypt(req, 0, true);
- }
- 
--int crypto4xx_decrypt_iv(struct ablkcipher_request *req)
-+int crypto4xx_decrypt_iv(struct skcipher_request *req)
- {
- 	return crypto4xx_crypt(req, AES_IV_SIZE, true);
- }
-@@ -111,20 +113,19 @@ int crypto4xx_decrypt_iv(struct ablkciph
- /**
-  * AES Functions
-  */
--static int crypto4xx_setkey_aes(struct crypto_ablkcipher *cipher,
-+static int crypto4xx_setkey_aes(struct crypto_skcipher *cipher,
- 				const u8 *key,
- 				unsigned int keylen,
- 				unsigned char cm,
- 				u8 fb)
- {
--	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	struct dynamic_sa_ctl *sa;
- 	int    rc;
- 
- 	if (keylen != AES_KEYSIZE_256 &&
- 		keylen != AES_KEYSIZE_192 && keylen != AES_KEYSIZE_128) {
--		crypto_ablkcipher_set_flags(cipher,
-+		crypto_skcipher_set_flags(cipher,
- 				CRYPTO_TFM_RES_BAD_KEY_LEN);
- 		return -EINVAL;
- 	}
-@@ -165,39 +166,38 @@ static int crypto4xx_setkey_aes(struct c
- 	return 0;
- }
- 
--int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_cbc(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen)
- {
- 	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_CBC,
- 				    CRYPTO_FEEDBACK_MODE_NO_FB);
- }
- 
--int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_cfb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen)
- {
- 	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_CFB,
- 				    CRYPTO_FEEDBACK_MODE_128BIT_CFB);
- }
- 
--int crypto4xx_setkey_aes_ecb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_ecb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen)
- {
- 	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_ECB,
- 				    CRYPTO_FEEDBACK_MODE_NO_FB);
- }
- 
--int crypto4xx_setkey_aes_ofb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_ofb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen)
- {
- 	return crypto4xx_setkey_aes(cipher, key, keylen, CRYPTO_MODE_OFB,
- 				    CRYPTO_FEEDBACK_MODE_64BIT_OFB);
- }
- 
--int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_rfc3686(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen)
- {
--	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	int rc;
- 
- 	rc = crypto4xx_setkey_aes(cipher, key, keylen - CTR_RFC3686_NONCE_SIZE,
-@@ -211,31 +211,33 @@ int crypto4xx_setkey_rfc3686(struct cryp
- 	return 0;
- }
- 
--int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req)
-+int crypto4xx_rfc3686_encrypt(struct skcipher_request *req)
- {
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	__le32 iv[AES_IV_SIZE / 4] = {
- 		ctx->iv_nonce,
--		cpu_to_le32p((u32 *) req->info),
--		cpu_to_le32p((u32 *) (req->info + 4)),
-+		cpu_to_le32p((u32 *) req->iv),
-+		cpu_to_le32p((u32 *) (req->iv + 4)),
- 		cpu_to_le32(1) };
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, iv, AES_IV_SIZE,
-+				  req->cryptlen, iv, AES_IV_SIZE,
- 				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
--int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req)
-+int crypto4xx_rfc3686_decrypt(struct skcipher_request *req)
- {
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	__le32 iv[AES_IV_SIZE / 4] = {
- 		ctx->iv_nonce,
--		cpu_to_le32p((u32 *) req->info),
--		cpu_to_le32p((u32 *) (req->info + 4)),
-+		cpu_to_le32p((u32 *) req->iv),
-+		cpu_to_le32p((u32 *) (req->iv + 4)),
- 		cpu_to_le32(1) };
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
--				  req->nbytes, iv, AES_IV_SIZE,
-+				  req->cryptlen, iv, AES_IV_SIZE,
- 				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -41,6 +41,7 @@
- #include <crypto/gcm.h>
- #include <crypto/sha.h>
- #include <crypto/scatterwalk.h>
-+#include <crypto/skcipher.h>
- #include <crypto/internal/aead.h>
- #include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
-@@ -522,21 +523,19 @@ static void crypto4xx_ret_sg_desc(struct
- 	}
- }
- 
--static void crypto4xx_ablkcipher_done(struct crypto4xx_device *dev,
-+static void crypto4xx_cipher_done(struct crypto4xx_device *dev,
- 				     struct pd_uinfo *pd_uinfo,
- 				     struct ce_pd *pd)
- {
--	struct crypto4xx_ctx *ctx;
--	struct ablkcipher_request *ablk_req;
-+	struct skcipher_request *req;
- 	struct scatterlist *dst;
- 	dma_addr_t addr;
- 
--	ablk_req = ablkcipher_request_cast(pd_uinfo->async_req);
--	ctx  = crypto_tfm_ctx(ablk_req->base.tfm);
-+	req = skcipher_request_cast(pd_uinfo->async_req);
- 
- 	if (pd_uinfo->using_sd) {
--		crypto4xx_copy_pkt_to_dst(dev, pd, pd_uinfo, ablk_req->nbytes,
--					  ablk_req->dst);
-+		crypto4xx_copy_pkt_to_dst(dev, pd, pd_uinfo,
-+					  req->cryptlen, req->dst);
- 	} else {
- 		dst = pd_uinfo->dest_va;
- 		addr = dma_map_page(dev->core_dev->device, sg_page(dst),
-@@ -554,8 +553,8 @@ static void crypto4xx_ablkcipher_done(st
- 	crypto4xx_ret_sg_desc(dev, pd_uinfo);
- 
- 	if (pd_uinfo->state & PD_ENTRY_BUSY)
--		ablkcipher_request_complete(ablk_req, -EINPROGRESS);
--	ablkcipher_request_complete(ablk_req, 0);
-+		skcipher_request_complete(req, -EINPROGRESS);
-+	skcipher_request_complete(req, 0);
- }
- 
- static void crypto4xx_ahash_done(struct crypto4xx_device *dev,
-@@ -646,8 +645,8 @@ static void crypto4xx_pd_done(struct cry
- 	struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[idx];
- 
- 	switch (crypto_tfm_alg_type(pd_uinfo->async_req->tfm)) {
--	case CRYPTO_ALG_TYPE_ABLKCIPHER:
--		crypto4xx_ablkcipher_done(dev, pd_uinfo, pd);
-+	case CRYPTO_ALG_TYPE_SKCIPHER:
-+		crypto4xx_cipher_done(dev, pd_uinfo, pd);
- 		break;
- 	case CRYPTO_ALG_TYPE_AEAD:
- 		crypto4xx_aead_done(dev, pd_uinfo, pd);
-@@ -941,15 +940,14 @@ static void crypto4xx_ctx_init(struct cr
- 	ctx->sa_len = 0;
- }
- 
--static int crypto4xx_ablk_init(struct crypto_tfm *tfm)
-+static int crypto4xx_sk_init(struct crypto_skcipher *sk)
- {
--	struct crypto_alg *alg = tfm->__crt_alg;
-+	struct skcipher_alg *alg = crypto_skcipher_alg(sk);
- 	struct crypto4xx_alg *amcc_alg;
--	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm);
-+	struct crypto4xx_ctx *ctx =  crypto_skcipher_ctx(sk);
- 
- 	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.cipher);
- 	crypto4xx_ctx_init(amcc_alg, ctx);
--	tfm->crt_ablkcipher.reqsize = sizeof(struct crypto4xx_ctx);
- 	return 0;
- }
- 
-@@ -958,9 +956,11 @@ static void crypto4xx_common_exit(struct
- 	crypto4xx_free_sa(ctx);
- }
- 
--static void crypto4xx_ablk_exit(struct crypto_tfm *tfm)
-+static void crypto4xx_sk_exit(struct crypto_skcipher *sk)
- {
--	crypto4xx_common_exit(crypto_tfm_ctx(tfm));
-+	struct crypto4xx_ctx *ctx =  crypto_skcipher_ctx(sk);
-+
-+	crypto4xx_common_exit(ctx);
- }
- 
- static int crypto4xx_aead_init(struct crypto_aead *tfm)
-@@ -1017,7 +1017,7 @@ static int crypto4xx_register_alg(struct
- 			break;
- 
- 		default:
--			rc = crypto_register_alg(&alg->alg.u.cipher);
-+			rc = crypto_register_skcipher(&alg->alg.u.cipher);
- 			break;
- 		}
- 
-@@ -1046,7 +1046,7 @@ static void crypto4xx_unregister_alg(str
- 			break;
- 
- 		default:
--			crypto_unregister_alg(&alg->alg.u.cipher);
-+			crypto_unregister_skcipher(&alg->alg.u.cipher);
- 		}
- 		kfree(alg);
- 	}
-@@ -1108,126 +1108,109 @@ static irqreturn_t crypto4xx_ce_interrup
-  */
- static struct crypto4xx_alg_common crypto4xx_alg[] = {
- 	/* Crypto AES modes */
--	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
--		.cra_name 	= "cbc(aes)",
--		.cra_driver_name = "cbc-aes-ppc4xx",
--		.cra_priority 	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
--				  CRYPTO_ALG_ASYNC |
--				  CRYPTO_ALG_KERN_DRIVER_ONLY,
--		.cra_blocksize 	= AES_BLOCK_SIZE,
--		.cra_ctxsize 	= sizeof(struct crypto4xx_ctx),
--		.cra_type 	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_ablk_init,
--		.cra_exit	= crypto4xx_ablk_exit,
--		.cra_module 	= THIS_MODULE,
--		.cra_u 		= {
--			.ablkcipher = {
--				.min_keysize 	= AES_MIN_KEY_SIZE,
--				.max_keysize 	= AES_MAX_KEY_SIZE,
--				.ivsize		= AES_IV_SIZE,
--				.setkey 	= crypto4xx_setkey_aes_cbc,
--				.encrypt	= crypto4xx_encrypt_iv,
--				.decrypt	= crypto4xx_decrypt_iv,
--			}
--		}
--	}},
--	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
--		.cra_name	= "cfb(aes)",
--		.cra_driver_name = "cfb-aes-ppc4xx",
--		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
--				  CRYPTO_ALG_ASYNC |
--				  CRYPTO_ALG_KERN_DRIVER_ONLY,
--		.cra_blocksize	= AES_BLOCK_SIZE,
--		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
--		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_ablk_init,
--		.cra_exit	= crypto4xx_ablk_exit,
--		.cra_module	= THIS_MODULE,
--		.cra_u		= {
--			.ablkcipher = {
--				.min_keysize	= AES_MIN_KEY_SIZE,
--				.max_keysize	= AES_MAX_KEY_SIZE,
--				.ivsize		= AES_IV_SIZE,
--				.setkey		= crypto4xx_setkey_aes_cfb,
--				.encrypt	= crypto4xx_encrypt_iv,
--				.decrypt	= crypto4xx_decrypt_iv,
--			}
--		}
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "cbc(aes)",
-+			.cra_driver_name = "cbc-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE,
-+		.ivsize	= AES_IV_SIZE,
-+		.setkey = crypto4xx_setkey_aes_cbc,
-+		.encrypt = crypto4xx_encrypt_iv,
-+		.decrypt = crypto4xx_decrypt_iv,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
- 	} },
--	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
--		.cra_name	= "rfc3686(ctr(aes))",
--		.cra_driver_name = "rfc3686-ctr-aes-ppc4xx",
--		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
--				  CRYPTO_ALG_ASYNC |
--				  CRYPTO_ALG_KERN_DRIVER_ONLY,
--		.cra_blocksize	= AES_BLOCK_SIZE,
--		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
--		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_ablk_init,
--		.cra_exit	= crypto4xx_ablk_exit,
--		.cra_module	= THIS_MODULE,
--		.cra_u		= {
--			.ablkcipher = {
--				.min_keysize	= AES_MIN_KEY_SIZE +
--						  CTR_RFC3686_NONCE_SIZE,
--				.max_keysize	= AES_MAX_KEY_SIZE +
--						  CTR_RFC3686_NONCE_SIZE,
--				.ivsize		= CTR_RFC3686_IV_SIZE,
--				.setkey		= crypto4xx_setkey_rfc3686,
--				.encrypt	= crypto4xx_rfc3686_encrypt,
--				.decrypt	= crypto4xx_rfc3686_decrypt,
--			}
--		}
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "cfb(aes)",
-+			.cra_driver_name = "cfb-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE,
-+		.ivsize	= AES_IV_SIZE,
-+		.setkey	= crypto4xx_setkey_aes_cfb,
-+		.encrypt = crypto4xx_encrypt_iv,
-+		.decrypt = crypto4xx_decrypt_iv,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
- 	} },
--	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
--		.cra_name	= "ecb(aes)",
--		.cra_driver_name = "ecb-aes-ppc4xx",
--		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
--				  CRYPTO_ALG_ASYNC |
--				  CRYPTO_ALG_KERN_DRIVER_ONLY,
--		.cra_blocksize	= AES_BLOCK_SIZE,
--		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
--		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_ablk_init,
--		.cra_exit	= crypto4xx_ablk_exit,
--		.cra_module	= THIS_MODULE,
--		.cra_u		= {
--			.ablkcipher = {
--				.min_keysize	= AES_MIN_KEY_SIZE,
--				.max_keysize	= AES_MAX_KEY_SIZE,
--				.setkey		= crypto4xx_setkey_aes_ecb,
--				.encrypt	= crypto4xx_encrypt_noiv,
--				.decrypt	= crypto4xx_decrypt_noiv,
--			}
--		}
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "rfc3686(ctr(aes))",
-+			.cra_driver_name = "rfc3686-ctr-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE + CTR_RFC3686_NONCE_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE + CTR_RFC3686_NONCE_SIZE,
-+		.ivsize	= CTR_RFC3686_IV_SIZE,
-+		.setkey = crypto4xx_setkey_rfc3686,
-+		.encrypt = crypto4xx_rfc3686_encrypt,
-+		.decrypt = crypto4xx_rfc3686_decrypt,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
- 	} },
--	{ .type = CRYPTO_ALG_TYPE_ABLKCIPHER, .u.cipher = {
--		.cra_name	= "ofb(aes)",
--		.cra_driver_name = "ofb-aes-ppc4xx",
--		.cra_priority	= CRYPTO4XX_CRYPTO_PRIORITY,
--		.cra_flags	= CRYPTO_ALG_TYPE_ABLKCIPHER |
--				  CRYPTO_ALG_ASYNC |
--				  CRYPTO_ALG_KERN_DRIVER_ONLY,
--		.cra_blocksize	= AES_BLOCK_SIZE,
--		.cra_ctxsize	= sizeof(struct crypto4xx_ctx),
--		.cra_type	= &crypto_ablkcipher_type,
--		.cra_init	= crypto4xx_ablk_init,
--		.cra_exit	= crypto4xx_ablk_exit,
--		.cra_module	= THIS_MODULE,
--		.cra_u		= {
--			.ablkcipher = {
--				.min_keysize	= AES_MIN_KEY_SIZE,
--				.max_keysize	= AES_MAX_KEY_SIZE,
--				.ivsize		= AES_IV_SIZE,
--				.setkey		= crypto4xx_setkey_aes_ofb,
--				.encrypt	= crypto4xx_encrypt_iv,
--				.decrypt	= crypto4xx_decrypt_iv,
--			}
--		}
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "ecb(aes)",
-+			.cra_driver_name = "ecb-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE,
-+		.setkey	= crypto4xx_setkey_aes_ecb,
-+		.encrypt = crypto4xx_encrypt_noiv,
-+		.decrypt = crypto4xx_decrypt_noiv,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
-+	} },
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "ofb(aes)",
-+			.cra_driver_name = "ofb-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE,
-+		.ivsize	= AES_IV_SIZE,
-+		.setkey	= crypto4xx_setkey_aes_ofb,
-+		.encrypt = crypto4xx_encrypt_iv,
-+		.decrypt = crypto4xx_decrypt_iv,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
- 	} },
- 
- 	/* AEAD */
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -25,6 +25,7 @@
- #include <linux/ratelimit.h>
- #include <crypto/internal/hash.h>
- #include <crypto/internal/aead.h>
-+#include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_sa.h"
- 
-@@ -134,7 +135,7 @@ struct crypto4xx_ctx {
- struct crypto4xx_alg_common {
- 	u32 type;
- 	union {
--		struct crypto_alg cipher;
-+		struct skcipher_alg cipher;
- 		struct ahash_alg hash;
- 		struct aead_alg aead;
- 	} u;
-@@ -158,22 +159,22 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       const struct dynamic_sa_ctl *sa,
- 		       const unsigned int sa_len,
- 		       const unsigned int assoclen);
--int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_cbc(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_cfb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_setkey_aes_ecb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_ecb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_setkey_aes_ofb(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_aes_ofb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher,
-+int crypto4xx_setkey_rfc3686(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
--int crypto4xx_encrypt_iv(struct ablkcipher_request *req);
--int crypto4xx_decrypt_iv(struct ablkcipher_request *req);
--int crypto4xx_encrypt_noiv(struct ablkcipher_request *req);
--int crypto4xx_decrypt_noiv(struct ablkcipher_request *req);
--int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req);
--int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req);
-+int crypto4xx_encrypt_iv(struct skcipher_request *req);
-+int crypto4xx_decrypt_iv(struct skcipher_request *req);
-+int crypto4xx_encrypt_noiv(struct skcipher_request *req);
-+int crypto4xx_decrypt_noiv(struct skcipher_request *req);
-+int crypto4xx_rfc3686_encrypt(struct skcipher_request *req);
-+int crypto4xx_rfc3686_decrypt(struct skcipher_request *req);
- int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
- int crypto4xx_hash_digest(struct ahash_request *req);
- int crypto4xx_hash_final(struct ahash_request *req);
diff --git a/target/linux/apm821xx/patches-4.14/022-0004-crypto-crypto4xx-avoid-VLA-use.patch b/target/linux/apm821xx/patches-4.14/022-0004-crypto-crypto4xx-avoid-VLA-use.patch
deleted file mode 100644
index a1e9b4b41a1..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0004-crypto-crypto4xx-avoid-VLA-use.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From c4e90650ff0cbf123ec9cfc32026fa0fb2931658 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:53 +0200
-Subject: [PATCH 4/8] crypto: crypto4xx - avoid VLA use
-
-This patch fixes some of the -Wvla warnings.
-
-crypto4xx_alg.c:83:19: warning: Variable length array is used.
-crypto4xx_alg.c:273:56: warning: Variable length array is used.
-crypto4xx_alg.c:380:32: warning: Variable length array is used.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -80,7 +80,7 @@ static inline int crypto4xx_crypt(struct
- {
- 	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
- 	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
--	__le32 iv[ivlen];
-+	__le32 iv[AES_IV_SIZE];
- 
- 	if (ivlen)
- 		crypto4xx_memcpy_to_le32(iv, req->iv, ivlen);
-@@ -271,13 +271,7 @@ static inline bool crypto4xx_aead_need_f
- static int crypto4xx_aead_fallback(struct aead_request *req,
- 	struct crypto4xx_ctx *ctx, bool do_decrypt)
- {
--	char aead_req_data[sizeof(struct aead_request) +
--			   crypto_aead_reqsize(ctx->sw_cipher.aead)]
--		__aligned(__alignof__(struct aead_request));
--
--	struct aead_request *subreq = (void *) aead_req_data;
--
--	memset(subreq, 0, sizeof(aead_req_data));
-+	struct aead_request *subreq = aead_request_ctx(req);
- 
- 	aead_request_set_tfm(subreq, ctx->sw_cipher.aead);
- 	aead_request_set_callback(subreq, req->base.flags,
-@@ -378,7 +372,7 @@ static int crypto4xx_crypt_aes_ccm(struc
- 	struct crypto_aead *aead = crypto_aead_reqtfm(req);
- 	unsigned int len = req->cryptlen;
- 	__le32 iv[16];
--	u32 tmp_sa[ctx->sa_len * 4];
-+	u32 tmp_sa[SA_AES128_CCM_LEN + 4];
- 	struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *)tmp_sa;
- 
- 	if (crypto4xx_aead_need_fallback(req, true, decrypt))
-@@ -387,7 +381,7 @@ static int crypto4xx_crypt_aes_ccm(struc
- 	if (decrypt)
- 		len -= crypto_aead_authsize(aead);
- 
--	memcpy(tmp_sa, decrypt ? ctx->sa_in : ctx->sa_out, sizeof(tmp_sa));
-+	memcpy(tmp_sa, decrypt ? ctx->sa_in : ctx->sa_out, ctx->sa_len * 4);
- 	sa->sa_command_0.bf.digest_len = crypto_aead_authsize(aead) >> 2;
- 
- 	if (req->iv[0] == 1) {
diff --git a/target/linux/apm821xx/patches-4.14/022-0005-crypto-crypto4xx-add-aes-ctr-support.patch b/target/linux/apm821xx/patches-4.14/022-0005-crypto-crypto4xx-add-aes-ctr-support.patch
deleted file mode 100644
index 7f4220feb3a..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0005-crypto-crypto4xx-add-aes-ctr-support.patch
+++ /dev/null
@@ -1,247 +0,0 @@
-From 98e87e3d933b8e504ea41b8857c038d2cd06cddc Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:54 +0200
-Subject: [PATCH 5/8] crypto: crypto4xx - add aes-ctr support
-
-This patch adds support for the aes-ctr skcipher.
-
-name         : ctr(aes)
-driver       : ctr-aes-ppc4xx
-module       : crypto4xx
-priority     : 300
-refcnt       : 1
-selftest     : passed
-internal     : no
-type         : skcipher
-async        : yes
-blocksize    : 16
-min keysize  : 16
-max keysize  : 32
-ivsize       : 16
-chunksize    : 16
-walksize     : 16
-
-The hardware uses only the last 32-bits as the counter while the
-kernel tests (aes_ctr_enc_tv_template[4] for example) expect that
-the whole IV is a counter. To make this work, the driver will
-fallback if the counter is going to overlow.
-
-The aead's crypto4xx_setup_fallback() function is renamed to
-crypto4xx_aead_setup_fallback.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 91 ++++++++++++++++++++++++++--
- drivers/crypto/amcc/crypto4xx_core.c | 37 +++++++++++
- drivers/crypto/amcc/crypto4xx_core.h |  5 ++
- 3 files changed, 127 insertions(+), 6 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -241,6 +241,85 @@ int crypto4xx_rfc3686_decrypt(struct skc
- 				  ctx->sa_out, ctx->sa_len, 0);
- }
- 
-+static int
-+crypto4xx_ctr_crypt(struct skcipher_request *req, bool encrypt)
-+{
-+	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
-+	size_t iv_len = crypto_skcipher_ivsize(cipher);
-+	unsigned int counter = be32_to_cpup((__be32 *)(req->iv + iv_len - 4));
-+	unsigned int nblks = ALIGN(req->cryptlen, AES_BLOCK_SIZE) /
-+			AES_BLOCK_SIZE;
-+
-+	/*
-+	 * The hardware uses only the last 32-bits as the counter while the
-+	 * kernel tests (aes_ctr_enc_tv_template[4] for example) expect that
-+	 * the whole IV is a counter.  So fallback if the counter is going to
-+	 * overlow.
-+	 */
-+	if (counter + nblks < counter) {
-+		struct skcipher_request *subreq = skcipher_request_ctx(req);
-+		int ret;
-+
-+		skcipher_request_set_tfm(subreq, ctx->sw_cipher.cipher);
-+		skcipher_request_set_callback(subreq, req->base.flags,
-+			NULL, NULL);
-+		skcipher_request_set_crypt(subreq, req->src, req->dst,
-+			req->cryptlen, req->iv);
-+		ret = encrypt ? crypto_skcipher_encrypt(subreq)
-+			: crypto_skcipher_decrypt(subreq);
-+		skcipher_request_zero(subreq);
-+		return ret;
-+	}
-+
-+	return encrypt ? crypto4xx_encrypt_iv(req)
-+		       : crypto4xx_decrypt_iv(req);
-+}
-+
-+static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx,
-+				       struct crypto_skcipher *cipher,
-+				       const u8 *key,
-+				       unsigned int keylen)
-+{
-+	int rc;
-+
-+	crypto_skcipher_clear_flags(ctx->sw_cipher.cipher,
-+				    CRYPTO_TFM_REQ_MASK);
-+	crypto_skcipher_set_flags(ctx->sw_cipher.cipher,
-+		crypto_skcipher_get_flags(cipher) & CRYPTO_TFM_REQ_MASK);
-+	rc = crypto_skcipher_setkey(ctx->sw_cipher.cipher, key, keylen);
-+	crypto_skcipher_clear_flags(cipher, CRYPTO_TFM_RES_MASK);
-+	crypto_skcipher_set_flags(cipher,
-+		crypto_skcipher_get_flags(ctx->sw_cipher.cipher) &
-+			CRYPTO_TFM_RES_MASK);
-+
-+	return rc;
-+}
-+
-+int crypto4xx_setkey_aes_ctr(struct crypto_skcipher *cipher,
-+			     const u8 *key, unsigned int keylen)
-+{
-+	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
-+	int rc;
-+
-+	rc = crypto4xx_sk_setup_fallback(ctx, cipher, key, keylen);
-+	if (rc)
-+		return rc;
-+
-+	return crypto4xx_setkey_aes(cipher, key, keylen,
-+		CRYPTO_MODE_CTR, CRYPTO_FEEDBACK_MODE_NO_FB);
-+}
-+
-+int crypto4xx_encrypt_ctr(struct skcipher_request *req)
-+{
-+	return crypto4xx_ctr_crypt(req, true);
-+}
-+
-+int crypto4xx_decrypt_ctr(struct skcipher_request *req)
-+{
-+	return crypto4xx_ctr_crypt(req, false);
-+}
-+
- static inline bool crypto4xx_aead_need_fallback(struct aead_request *req,
- 						bool is_ccm, bool decrypt)
- {
-@@ -283,10 +362,10 @@ static int crypto4xx_aead_fallback(struc
- 			    crypto_aead_encrypt(subreq);
- }
- 
--static int crypto4xx_setup_fallback(struct crypto4xx_ctx *ctx,
--				    struct crypto_aead *cipher,
--				    const u8 *key,
--				    unsigned int keylen)
-+static int crypto4xx_aead_setup_fallback(struct crypto4xx_ctx *ctx,
-+					 struct crypto_aead *cipher,
-+					 const u8 *key,
-+					 unsigned int keylen)
- {
- 	int rc;
- 
-@@ -314,7 +393,7 @@ int crypto4xx_setkey_aes_ccm(struct cryp
- 	struct dynamic_sa_ctl *sa;
- 	int rc = 0;
- 
--	rc = crypto4xx_setup_fallback(ctx, cipher, key, keylen);
-+	rc = crypto4xx_aead_setup_fallback(ctx, cipher, key, keylen);
- 	if (rc)
- 		return rc;
- 
-@@ -473,7 +552,7 @@ int crypto4xx_setkey_aes_gcm(struct cryp
- 		return -EINVAL;
- 	}
- 
--	rc = crypto4xx_setup_fallback(ctx, cipher, key, keylen);
-+	rc = crypto4xx_aead_setup_fallback(ctx, cipher, key, keylen);
- 	if (rc)
- 		return rc;
- 
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -946,6 +946,19 @@ static int crypto4xx_sk_init(struct cryp
- 	struct crypto4xx_alg *amcc_alg;
- 	struct crypto4xx_ctx *ctx =  crypto_skcipher_ctx(sk);
- 
-+	if (alg->base.cra_flags & CRYPTO_ALG_NEED_FALLBACK) {
-+		ctx->sw_cipher.cipher =
-+			crypto_alloc_skcipher(alg->base.cra_name, 0,
-+					      CRYPTO_ALG_NEED_FALLBACK |
-+					      CRYPTO_ALG_ASYNC);
-+		if (IS_ERR(ctx->sw_cipher.cipher))
-+			return PTR_ERR(ctx->sw_cipher.cipher);
-+
-+		crypto_skcipher_set_reqsize(sk,
-+			sizeof(struct skcipher_request) + 32 +
-+			crypto_skcipher_reqsize(ctx->sw_cipher.cipher));
-+	}
-+
- 	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.cipher);
- 	crypto4xx_ctx_init(amcc_alg, ctx);
- 	return 0;
-@@ -961,6 +974,8 @@ static void crypto4xx_sk_exit(struct cry
- 	struct crypto4xx_ctx *ctx =  crypto_skcipher_ctx(sk);
- 
- 	crypto4xx_common_exit(ctx);
-+	if (ctx->sw_cipher.cipher)
-+		crypto_free_skcipher(ctx->sw_cipher.cipher);
- }
- 
- static int crypto4xx_aead_init(struct crypto_aead *tfm)
-@@ -1150,6 +1165,28 @@ static struct crypto4xx_alg_common crypt
- 		.init = crypto4xx_sk_init,
- 		.exit = crypto4xx_sk_exit,
- 	} },
-+	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
-+		.base = {
-+			.cra_name = "ctr(aes)",
-+			.cra_driver_name = "ctr-aes-ppc4xx",
-+			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
-+			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
-+				CRYPTO_ALG_NEED_FALLBACK |
-+				CRYPTO_ALG_ASYNC |
-+				CRYPTO_ALG_KERN_DRIVER_ONLY,
-+			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-+			.cra_module = THIS_MODULE,
-+		},
-+		.min_keysize = AES_MIN_KEY_SIZE,
-+		.max_keysize = AES_MAX_KEY_SIZE,
-+		.ivsize	= AES_IV_SIZE,
-+		.setkey	= crypto4xx_setkey_aes_ctr,
-+		.encrypt = crypto4xx_encrypt_ctr,
-+		.decrypt = crypto4xx_decrypt_ctr,
-+		.init = crypto4xx_sk_init,
-+		.exit = crypto4xx_sk_exit,
-+	} },
- 	{ .type = CRYPTO_ALG_TYPE_SKCIPHER, .u.cipher = {
- 		.base = {
- 			.cra_name = "rfc3686(ctr(aes))",
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -128,6 +128,7 @@ struct crypto4xx_ctx {
- 	__le32 iv_nonce;
- 	u32 sa_len;
- 	union {
-+		struct crypto_skcipher *cipher;
- 		struct crypto_aead *aead;
- 	} sw_cipher;
- };
-@@ -163,12 +164,16 @@ int crypto4xx_setkey_aes_cbc(struct cryp
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_cfb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
-+int crypto4xx_setkey_aes_ctr(struct crypto_skcipher *cipher,
-+			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_ecb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_ofb(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_rfc3686(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
-+int crypto4xx_encrypt_ctr(struct skcipher_request *req);
-+int crypto4xx_decrypt_ctr(struct skcipher_request *req);
- int crypto4xx_encrypt_iv(struct skcipher_request *req);
- int crypto4xx_decrypt_iv(struct skcipher_request *req);
- int crypto4xx_encrypt_noiv(struct skcipher_request *req);
diff --git a/target/linux/apm821xx/patches-4.14/022-0007-crypto-crypto4xx-extend-aead-fallback-checks.patch b/target/linux/apm821xx/patches-4.14/022-0007-crypto-crypto4xx-extend-aead-fallback-checks.patch
deleted file mode 100644
index 37aefc241cd..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0007-crypto-crypto4xx-extend-aead-fallback-checks.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 584201f1895d915c1aa523bc86afdc126e94beca Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:56 +0200
-Subject: [PATCH 7/8] crypto: crypto4xx - extend aead fallback checks
-
-1020 bytes is the limit for associated data. Any more
-and it will no longer fit into hash_crypto_offset anymore.
-
-The hardware will not process aead requests with plaintext
-that have less than AES_BLOCK_SIZE bytes. When decrypting
-aead requests the authsize has to be taken in account as
-well, as it is part of the cryptlen. Otherwise the hardware
-will think it has been misconfigured and will return:
-
-aead return err status = 0x98
-
-For rtc4543(gcm(aes)), the hardware has a dedicated GMAC
-mode as part of the hash function set.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c | 30 +++++++++++++++--------------
- 1 file changed, 16 insertions(+), 14 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -321,6 +321,7 @@ int crypto4xx_decrypt_ctr(struct skciphe
- }
- 
- static inline bool crypto4xx_aead_need_fallback(struct aead_request *req,
-+						unsigned int len,
- 						bool is_ccm, bool decrypt)
- {
- 	struct crypto_aead *aead = crypto_aead_reqtfm(req);
-@@ -330,14 +331,14 @@ static inline bool crypto4xx_aead_need_f
- 		return true;
- 
- 	/*
--	 * hardware does not handle cases where cryptlen
--	 * is less than a block
-+	 * hardware does not handle cases where plaintext
-+	 * is less than a block.
- 	 */
--	if (req->cryptlen < AES_BLOCK_SIZE)
-+	if (len < AES_BLOCK_SIZE)
- 		return true;
- 
--	/* assoc len needs to be a multiple of 4 */
--	if (req->assoclen & 0x3)
-+	/* assoc len needs to be a multiple of 4 and <= 1020 */
-+	if (req->assoclen & 0x3 || req->assoclen > 1020)
- 		return true;
- 
- 	/* CCM supports only counter field length of 2 and 4 bytes */
-@@ -449,17 +450,17 @@ static int crypto4xx_crypt_aes_ccm(struc
- {
- 	struct crypto4xx_ctx *ctx  = crypto_tfm_ctx(req->base.tfm);
- 	struct crypto_aead *aead = crypto_aead_reqtfm(req);
--	unsigned int len = req->cryptlen;
- 	__le32 iv[16];
- 	u32 tmp_sa[SA_AES128_CCM_LEN + 4];
- 	struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *)tmp_sa;
--
--	if (crypto4xx_aead_need_fallback(req, true, decrypt))
--		return crypto4xx_aead_fallback(req, ctx, decrypt);
-+	unsigned int len = req->cryptlen;
- 
- 	if (decrypt)
- 		len -= crypto_aead_authsize(aead);
- 
-+	if (crypto4xx_aead_need_fallback(req, len, true, decrypt))
-+		return crypto4xx_aead_fallback(req, ctx, decrypt);
-+
- 	memcpy(tmp_sa, decrypt ? ctx->sa_in : ctx->sa_out, ctx->sa_len * 4);
- 	sa->sa_command_0.bf.digest_len = crypto_aead_authsize(aead) >> 2;
- 
-@@ -605,18 +606,19 @@ static inline int crypto4xx_crypt_aes_gc
- 					  bool decrypt)
- {
- 	struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
--	unsigned int len = req->cryptlen;
-+	struct crypto4xx_aead_reqctx *rctx = aead_request_ctx(req);
- 	__le32 iv[4];
-+	unsigned int len = req->cryptlen;
-+
-+	if (decrypt)
-+		len -= crypto_aead_authsize(crypto_aead_reqtfm(req));
- 
--	if (crypto4xx_aead_need_fallback(req, false, decrypt))
-+	if (crypto4xx_aead_need_fallback(req, len, false, decrypt))
- 		return crypto4xx_aead_fallback(req, ctx, decrypt);
- 
- 	crypto4xx_memcpy_to_le32(iv, req->iv, GCM_AES_IV_SIZE);
- 	iv[3] = cpu_to_le32(1);
- 
--	if (decrypt)
--		len -= crypto_aead_authsize(crypto_aead_reqtfm(req));
--
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  len, iv, sizeof(iv),
- 				  decrypt ? ctx->sa_in : ctx->sa_out,
diff --git a/target/linux/apm821xx/patches-4.14/022-0008-crypto-crypto4xx-put-temporary-dst-sg-into-request-c.patch b/target/linux/apm821xx/patches-4.14/022-0008-crypto-crypto4xx-put-temporary-dst-sg-into-request-c.patch
deleted file mode 100644
index 30ff1a3d935..00000000000
--- a/target/linux/apm821xx/patches-4.14/022-0008-crypto-crypto4xx-put-temporary-dst-sg-into-request-c.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-From 658c9d2b9f374c835d0348d852a3f002196628d0 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 19 Apr 2018 18:41:57 +0200
-Subject: [PATCH 8/8] crypto: crypto4xx - put temporary dst sg into request ctx
-
-This patch fixes a crash that happens when testing rfc4543(gcm(aes))
-
-Unable to handle kernel paging request for data at address 0xf59b3420
-Faulting instruction address: 0xc0012994
-Oops: Kernel access of bad area, sig: 11 [#1]
-BE PowerPC 44x Platform
-Modules linked in: tcrypt(+) crypto4xx [...]
-CPU: 0 PID: 0 Comm: swapper Tainted: G           O      4.17.0-rc1+ #23
-NIP:  c0012994 LR: d3077934 CTR: 06026d49
-REGS: cfff7e30 TRAP: 0300   Tainted: G           O       (4.17.0-rc1+)
-MSR:  00029000 <CE,EE,ME>  CR: 44744822  XER: 00000000
-DEAR: f59b3420 ESR: 00000000
-NIP [c0012994] __dma_sync+0x58/0x10c
-LR [d3077934] crypto4xx_bh_tasklet_cb+0x188/0x3c8 [crypto4xx]
-
-__dma_sync was fed the temporary _dst that crypto4xx_build_pd()
-had in it's function stack. This clearly never worked.
-This patch therefore overhauls the code from the original driver
-and puts the temporary dst sg list into aead's request context.
-
-Fixes: a0aae821ba3d3 ("crypto: crypto4xx - prepare for AEAD support")
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 15 ++++++++-------
- drivers/crypto/amcc/crypto4xx_core.c | 10 +++++-----
- drivers/crypto/amcc/crypto4xx_core.h |  7 ++++++-
- 3 files changed, 19 insertions(+), 13 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -87,7 +87,7 @@ static inline int crypto4xx_crypt(struct
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 		req->cryptlen, iv, ivlen, decrypt ? ctx->sa_in : ctx->sa_out,
--		ctx->sa_len, 0);
-+		ctx->sa_len, 0, NULL);
- }
- 
- int crypto4xx_encrypt_noiv(struct skcipher_request *req)
-@@ -223,7 +223,7 @@ int crypto4xx_rfc3686_encrypt(struct skc
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  req->cryptlen, iv, AES_IV_SIZE,
--				  ctx->sa_out, ctx->sa_len, 0);
-+				  ctx->sa_out, ctx->sa_len, 0, NULL);
- }
- 
- int crypto4xx_rfc3686_decrypt(struct skcipher_request *req)
-@@ -238,7 +238,7 @@ int crypto4xx_rfc3686_decrypt(struct skc
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  req->cryptlen, iv, AES_IV_SIZE,
--				  ctx->sa_out, ctx->sa_len, 0);
-+				  ctx->sa_out, ctx->sa_len, 0, NULL);
- }
- 
- static int
-@@ -449,6 +449,7 @@ int crypto4xx_setkey_aes_ccm(struct cryp
- static int crypto4xx_crypt_aes_ccm(struct aead_request *req, bool decrypt)
- {
- 	struct crypto4xx_ctx *ctx  = crypto_tfm_ctx(req->base.tfm);
-+	struct crypto4xx_aead_reqctx *rctx = aead_request_ctx(req);
- 	struct crypto_aead *aead = crypto_aead_reqtfm(req);
- 	__le32 iv[16];
- 	u32 tmp_sa[SA_AES128_CCM_LEN + 4];
-@@ -474,7 +475,7 @@ static int crypto4xx_crypt_aes_ccm(struc
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  len, iv, sizeof(iv),
--				  sa, ctx->sa_len, req->assoclen);
-+				  sa, ctx->sa_len, req->assoclen, rctx->dst);
- }
- 
- int crypto4xx_encrypt_aes_ccm(struct aead_request *req)
-@@ -622,7 +623,7 @@ static inline int crypto4xx_crypt_aes_gc
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
- 				  len, iv, sizeof(iv),
- 				  decrypt ? ctx->sa_in : ctx->sa_out,
--				  ctx->sa_len, req->assoclen);
-+				  ctx->sa_len, req->assoclen, rctx->dst);
- }
- 
- int crypto4xx_encrypt_aes_gcm(struct aead_request *req)
-@@ -707,7 +708,7 @@ int crypto4xx_hash_update(struct ahash_r
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
- 				  req->nbytes, NULL, 0, ctx->sa_in,
--				  ctx->sa_len, 0);
-+				  ctx->sa_len, 0, NULL);
- }
- 
- int crypto4xx_hash_final(struct ahash_request *req)
-@@ -726,7 +727,7 @@ int crypto4xx_hash_digest(struct ahash_r
- 
- 	return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
- 				  req->nbytes, NULL, 0, ctx->sa_in,
--				  ctx->sa_len, 0);
-+				  ctx->sa_len, 0, NULL);
- }
- 
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -691,9 +691,9 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       const __le32 *iv, const u32 iv_len,
- 		       const struct dynamic_sa_ctl *req_sa,
- 		       const unsigned int sa_len,
--		       const unsigned int assoclen)
-+		       const unsigned int assoclen,
-+		       struct scatterlist *_dst)
- {
--	struct scatterlist _dst[2];
- 	struct crypto4xx_device *dev = ctx->dev;
- 	struct dynamic_sa_ctl *sa;
- 	struct ce_gd *gd;
-@@ -992,9 +992,9 @@ static int crypto4xx_aead_init(struct cr
- 
- 	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.aead);
- 	crypto4xx_ctx_init(amcc_alg, ctx);
--	crypto_aead_set_reqsize(tfm, sizeof(struct aead_request) +
--				max(sizeof(struct crypto4xx_ctx), 32 +
--				crypto_aead_reqsize(ctx->sw_cipher.aead)));
-+	crypto_aead_set_reqsize(tfm, max(sizeof(struct aead_request) + 32 +
-+				crypto_aead_reqsize(ctx->sw_cipher.aead),
-+				sizeof(struct crypto4xx_aead_reqctx)));
- 	return 0;
- }
- 
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -133,6 +133,10 @@ struct crypto4xx_ctx {
- 	} sw_cipher;
- };
- 
-+struct crypto4xx_aead_reqctx {
-+	struct scatterlist dst[2];
-+};
-+
- struct crypto4xx_alg_common {
- 	u32 type;
- 	union {
-@@ -159,7 +163,8 @@ int crypto4xx_build_pd(struct crypto_asy
- 		       const __le32 *iv, const u32 iv_len,
- 		       const struct dynamic_sa_ctl *sa,
- 		       const unsigned int sa_len,
--		       const unsigned int assoclen);
-+		       const unsigned int assoclen,
-+		       struct scatterlist *dst_tmp);
- int crypto4xx_setkey_aes_cbc(struct crypto_skcipher *cipher,
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_cfb(struct crypto_skcipher *cipher,
diff --git a/target/linux/apm821xx/patches-4.14/023-0001-treewide-kzalloc-kcalloc.patch b/target/linux/apm821xx/patches-4.14/023-0001-treewide-kzalloc-kcalloc.patch
deleted file mode 100644
index 09206f50507..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0001-treewide-kzalloc-kcalloc.patch
+++ /dev/null
@@ -1,447 +0,0 @@
-From 6396bb221514d2876fd6dc0aa2a1f240d99b37bb Mon Sep 17 00:00:00 2001
-From: Kees Cook <keescook@chromium.org>
-Date: Tue, 12 Jun 2018 14:03:40 -0700
-Subject: [PATCH 01/15] treewide: kzalloc() -> kcalloc()
-
-The kzalloc() function has a 2-factor argument form, kcalloc(). This
-patch replaces cases of:
-
-        kzalloc(a * b, gfp)
-
-with:
-        kcalloc(a * b, gfp)
-
-as well as handling cases of:
-
-        kzalloc(a * b * c, gfp)
-
-with:
-
-        kzalloc(array3_size(a, b, c), gfp)
-
-as it's slightly less ugly than:
-
-        kzalloc_array(array_size(a, b), c, gfp)
-
-This does, however, attempt to ignore constant size factors like:
-
-        kzalloc(4 * 1024, gfp)
-
-though any constants defined via macros get caught up in the conversion.
-
-Any factors with a sizeof() of "unsigned char", "char", and "u8" were
-dropped, since they're redundant.
-
-The Coccinelle script used for this was:
-
-// Fix redundant parens around sizeof().
-@@
-type TYPE;
-expression THING, E;
-@@
-
-(
-  kzalloc(
--	(sizeof(TYPE)) * E
-+	sizeof(TYPE) * E
-  , ...)
-|
-  kzalloc(
--	(sizeof(THING)) * E
-+	sizeof(THING) * E
-  , ...)
-)
-
-// Drop single-byte sizes and redundant parens.
-@@
-expression COUNT;
-typedef u8;
-typedef __u8;
-@@
-
-(
-  kzalloc(
--	sizeof(u8) * (COUNT)
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(__u8) * (COUNT)
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(char) * (COUNT)
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(unsigned char) * (COUNT)
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(u8) * COUNT
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(__u8) * COUNT
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(char) * COUNT
-+	COUNT
-  , ...)
-|
-  kzalloc(
--	sizeof(unsigned char) * COUNT
-+	COUNT
-  , ...)
-)
-
-// 2-factor product with sizeof(type/expression) and identifier or constant.
-@@
-type TYPE;
-expression THING;
-identifier COUNT_ID;
-constant COUNT_CONST;
-@@
-
-(
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * (COUNT_ID)
-+	COUNT_ID, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * COUNT_ID
-+	COUNT_ID, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * (COUNT_CONST)
-+	COUNT_CONST, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * COUNT_CONST
-+	COUNT_CONST, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * (COUNT_ID)
-+	COUNT_ID, sizeof(THING)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * COUNT_ID
-+	COUNT_ID, sizeof(THING)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * (COUNT_CONST)
-+	COUNT_CONST, sizeof(THING)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * COUNT_CONST
-+	COUNT_CONST, sizeof(THING)
-  , ...)
-)
-
-// 2-factor product, only identifiers.
-@@
-identifier SIZE, COUNT;
-@@
-
-- kzalloc
-+ kcalloc
-  (
--	SIZE * COUNT
-+	COUNT, SIZE
-  , ...)
-
-// 3-factor product with 1 sizeof(type) or sizeof(expression), with
-// redundant parens removed.
-@@
-expression THING;
-identifier STRIDE, COUNT;
-type TYPE;
-@@
-
-(
-  kzalloc(
--	sizeof(TYPE) * (COUNT) * (STRIDE)
-+	array3_size(COUNT, STRIDE, sizeof(TYPE))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE) * (COUNT) * STRIDE
-+	array3_size(COUNT, STRIDE, sizeof(TYPE))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE) * COUNT * (STRIDE)
-+	array3_size(COUNT, STRIDE, sizeof(TYPE))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE) * COUNT * STRIDE
-+	array3_size(COUNT, STRIDE, sizeof(TYPE))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING) * (COUNT) * (STRIDE)
-+	array3_size(COUNT, STRIDE, sizeof(THING))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING) * (COUNT) * STRIDE
-+	array3_size(COUNT, STRIDE, sizeof(THING))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING) * COUNT * (STRIDE)
-+	array3_size(COUNT, STRIDE, sizeof(THING))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING) * COUNT * STRIDE
-+	array3_size(COUNT, STRIDE, sizeof(THING))
-  , ...)
-)
-
-// 3-factor product with 2 sizeof(variable), with redundant parens removed.
-@@
-expression THING1, THING2;
-identifier COUNT;
-type TYPE1, TYPE2;
-@@
-
-(
-  kzalloc(
--	sizeof(TYPE1) * sizeof(TYPE2) * COUNT
-+	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
-+	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING1) * sizeof(THING2) * COUNT
-+	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
-  , ...)
-|
-  kzalloc(
--	sizeof(THING1) * sizeof(THING2) * (COUNT)
-+	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE1) * sizeof(THING2) * COUNT
-+	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
-  , ...)
-|
-  kzalloc(
--	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
-+	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
-  , ...)
-)
-
-// 3-factor product, only identifiers, with redundant parens removed.
-@@
-identifier STRIDE, SIZE, COUNT;
-@@
-
-(
-  kzalloc(
--	(COUNT) * STRIDE * SIZE
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	COUNT * (STRIDE) * SIZE
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	COUNT * STRIDE * (SIZE)
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	(COUNT) * (STRIDE) * SIZE
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	COUNT * (STRIDE) * (SIZE)
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	(COUNT) * STRIDE * (SIZE)
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	(COUNT) * (STRIDE) * (SIZE)
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-|
-  kzalloc(
--	COUNT * STRIDE * SIZE
-+	array3_size(COUNT, STRIDE, SIZE)
-  , ...)
-)
-
-// Any remaining multi-factor products, first at least 3-factor products,
-// when they're not all constants...
-@@
-expression E1, E2, E3;
-constant C1, C2, C3;
-@@
-
-(
-  kzalloc(C1 * C2 * C3, ...)
-|
-  kzalloc(
--	(E1) * E2 * E3
-+	array3_size(E1, E2, E3)
-  , ...)
-|
-  kzalloc(
--	(E1) * (E2) * E3
-+	array3_size(E1, E2, E3)
-  , ...)
-|
-  kzalloc(
--	(E1) * (E2) * (E3)
-+	array3_size(E1, E2, E3)
-  , ...)
-|
-  kzalloc(
--	E1 * E2 * E3
-+	array3_size(E1, E2, E3)
-  , ...)
-)
-
-// And then all remaining 2 factors products when they're not all constants,
-// keeping sizeof() as the second factor argument.
-@@
-expression THING, E1, E2;
-type TYPE;
-constant C1, C2, C3;
-@@
-
-(
-  kzalloc(sizeof(THING) * C2, ...)
-|
-  kzalloc(sizeof(TYPE) * C2, ...)
-|
-  kzalloc(C1 * C2 * C3, ...)
-|
-  kzalloc(C1 * C2, ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * (E2)
-+	E2, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(TYPE) * E2
-+	E2, sizeof(TYPE)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * (E2)
-+	E2, sizeof(THING)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	sizeof(THING) * E2
-+	E2, sizeof(THING)
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	(E1) * E2
-+	E1, E2
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	(E1) * (E2)
-+	E1, E2
-  , ...)
-|
-- kzalloc
-+ kcalloc
-  (
--	E1 * E2
-+	E1, E2
-  , ...)
-)
-
-Signed-off-by: Kees Cook <keescook@chromium.org>
----
- drivers/crypto/amcc/crypto4xx_core.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -141,11 +141,11 @@ static void crypto4xx_hw_init(struct cry
- 
- int crypto4xx_alloc_sa(struct crypto4xx_ctx *ctx, u32 size)
- {
--	ctx->sa_in = kzalloc(size * 4, GFP_ATOMIC);
-+	ctx->sa_in = kcalloc(size, 4, GFP_ATOMIC);
- 	if (ctx->sa_in == NULL)
- 		return -ENOMEM;
- 
--	ctx->sa_out = kzalloc(size * 4, GFP_ATOMIC);
-+	ctx->sa_out = kcalloc(size, 4, GFP_ATOMIC);
- 	if (ctx->sa_out == NULL) {
- 		kfree(ctx->sa_in);
- 		ctx->sa_in = NULL;
-@@ -180,8 +180,8 @@ static u32 crypto4xx_build_pdr(struct cr
- 	if (!dev->pdr)
- 		return -ENOMEM;
- 
--	dev->pdr_uinfo = kzalloc(sizeof(struct pd_uinfo) * PPC4XX_NUM_PD,
--				GFP_KERNEL);
-+	dev->pdr_uinfo = kcalloc(PPC4XX_NUM_PD, sizeof(struct pd_uinfo),
-+				 GFP_KERNEL);
- 	if (!dev->pdr_uinfo) {
- 		dma_free_coherent(dev->core_dev->device,
- 				  sizeof(struct ce_pd) * PPC4XX_NUM_PD,
diff --git a/target/linux/apm821xx/patches-4.14/023-0002-crypto-skcipher-remove-useless-setting-of-type-flags.patch b/target/linux/apm821xx/patches-4.14/023-0002-crypto-skcipher-remove-useless-setting-of-type-flags.patch
deleted file mode 100644
index 25542c80bfa..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0002-crypto-skcipher-remove-useless-setting-of-type-flags.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 2c95e6d97892235b5b98cd4805e47fac87c2226f Mon Sep 17 00:00:00 2001
-From: Eric Biggers <ebiggers@google.com>
-Date: Sat, 30 Jun 2018 15:16:15 -0700
-Subject: [PATCH 02/15] crypto: skcipher - remove useless setting of type flags
-
-Some skcipher algorithms set .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER.  But
-this is redundant with the C structure type ('struct skcipher_alg'), and
-crypto_register_skcipher() already sets the type flag automatically,
-clearing any type flag that was already there.  Apparently the useless
-assignment has just been copy+pasted around.
-
-So, remove the useless assignment from all the skcipher algorithms.
-
-This patch shouldn't change any actual behavior.
-
-Signed-off-by: Eric Biggers <ebiggers@google.com>
-Acked-by: Gilad Ben-Yossef <gilad@benyossef.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 18 ++++++------------
- 1 file changed, 6 insertions(+), 12 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1128,8 +1128,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "cbc(aes)",
- 			.cra_driver_name = "cbc-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_ASYNC |
-+			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-@@ -1149,8 +1148,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "cfb(aes)",
- 			.cra_driver_name = "cfb-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_ASYNC |
-+			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-@@ -1170,8 +1168,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "ctr(aes)",
- 			.cra_driver_name = "ctr-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_NEED_FALLBACK |
-+			.cra_flags = CRYPTO_ALG_NEED_FALLBACK |
- 				CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
-@@ -1192,8 +1189,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "rfc3686(ctr(aes))",
- 			.cra_driver_name = "rfc3686-ctr-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_ASYNC |
-+			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-@@ -1213,8 +1209,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "ecb(aes)",
- 			.cra_driver_name = "ecb-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_ASYNC |
-+			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
-@@ -1233,8 +1228,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_name = "ofb(aes)",
- 			.cra_driver_name = "ofb-aes-ppc4xx",
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
--			.cra_flags = CRYPTO_ALG_TYPE_SKCIPHER |
--				CRYPTO_ALG_ASYNC |
-+			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
- 			.cra_blocksize = AES_BLOCK_SIZE,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
diff --git a/target/linux/apm821xx/patches-4.14/023-0003-crypto-drop-mask-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch b/target/linux/apm821xx/patches-4.14/023-0003-crypto-drop-mask-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch
deleted file mode 100644
index 0c2871f3762..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0003-crypto-drop-mask-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 1ad0f1603a6b2afb62a1c065409aaa4e43ca7627 Mon Sep 17 00:00:00 2001
-From: Eric Biggers <ebiggers@google.com>
-Date: Wed, 14 Nov 2018 12:19:39 -0800
-Subject: [PATCH 03/15] crypto: drop mask=CRYPTO_ALG_ASYNC from 'cipher' tfm
- allocations
-
-'cipher' algorithms (single block ciphers) are always synchronous, so
-passing CRYPTO_ALG_ASYNC in the mask to crypto_alloc_cipher() has no
-effect.  Many users therefore already don't pass it, but some still do.
-This inconsistency can cause confusion, especially since the way the
-'mask' argument works is somewhat counterintuitive.
-
-Thus, just remove the unneeded CRYPTO_ALG_ASYNC flags.
-
-This patch shouldn't change any actual behavior.
-
-Signed-off-by: Eric Biggers <ebiggers@google.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -520,8 +520,7 @@ static int crypto4xx_compute_gcm_hash_ke
- 	uint8_t src[16] = { 0 };
- 	int rc = 0;
- 
--	aes_tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC |
--				      CRYPTO_ALG_NEED_FALLBACK);
-+	aes_tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_NEED_FALLBACK);
- 	if (IS_ERR(aes_tfm)) {
- 		rc = PTR_ERR(aes_tfm);
- 		pr_warn("could not load aes cipher driver: %d\n", rc);
diff --git a/target/linux/apm821xx/patches-4.14/023-0004-crypto4xx_core-don-t-abuse-__dma_sync_page.patch b/target/linux/apm821xx/patches-4.14/023-0004-crypto4xx_core-don-t-abuse-__dma_sync_page.patch
deleted file mode 100644
index d1849aefbbf..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0004-crypto4xx_core-don-t-abuse-__dma_sync_page.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 67d8208fba1324fa0198f9fc58a9edbe09596947 Mon Sep 17 00:00:00 2001
-From: Christoph Hellwig <hch@lst.de>
-Date: Sun, 16 Dec 2018 18:19:46 +0100
-Subject: [PATCH 04/15] crypto4xx_core: don't abuse __dma_sync_page
-
-This function is internal to the DMA API implementation. Instead use
-the DMA API to properly unmap. Note that the DMA API usage in this
-driver is a disaster and urgently needs some work - it is missing all
-the unmaps, seems to do a secondary map where it looks like it should
-to a unmap in one place to work around cache coherency and the
-directions passed in seem to be partially wrong.
-
-Signed-off-by: Christoph Hellwig <hch@lst.de>
-Tested-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -592,7 +592,7 @@ static void crypto4xx_aead_done(struct c
- 					  pd->pd_ctl_len.bf.pkt_len,
- 					  dst);
- 	} else {
--		__dma_sync_page(sg_page(dst), dst->offset, dst->length,
-+		dma_unmap_page(dev->core_dev->device, pd->dest, dst->length,
- 				DMA_FROM_DEVICE);
- 	}
- 
diff --git a/target/linux/apm821xx/patches-4.14/023-0005-cross-tree-phase-out-dma_zalloc_coherent.patch b/target/linux/apm821xx/patches-4.14/023-0005-cross-tree-phase-out-dma_zalloc_coherent.patch
deleted file mode 100644
index 857578bb938..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0005-cross-tree-phase-out-dma_zalloc_coherent.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 750afb08ca71310fcf0c4e2cb1565c63b8235b60 Mon Sep 17 00:00:00 2001
-From: Luis Chamberlain <mcgrof@kernel.org>
-Date: Fri, 4 Jan 2019 09:23:09 +0100
-Subject: [PATCH 05/15] cross-tree: phase out dma_zalloc_coherent()
-
-We already need to zero out memory for dma_alloc_coherent(), as such
-using dma_zalloc_coherent() is superflous. Phase it out.
-
-This change was generated with the following Coccinelle SmPL patch:
-
-@ replace_dma_zalloc_coherent @
-expression dev, size, data, handle, flags;
-@@
-
--dma_zalloc_coherent(dev, size, handle, flags)
-+dma_alloc_coherent(dev, size, handle, flags)
-
-Suggested-by: Christoph Hellwig <hch@lst.de>
-Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
-[hch: re-ran the script on the latest tree]
-Signed-off-by: Christoph Hellwig <hch@lst.de>
----
- drivers/crypto/amcc/crypto4xx_core.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -283,9 +283,9 @@ static u32 crypto4xx_put_pd_to_pdr(struc
-  */
- static u32 crypto4xx_build_gdr(struct crypto4xx_device *dev)
- {
--	dev->gdr = dma_zalloc_coherent(dev->core_dev->device,
--				       sizeof(struct ce_gd) * PPC4XX_NUM_GD,
--				       &dev->gdr_pa, GFP_ATOMIC);
-+	dev->gdr = dma_alloc_coherent(dev->core_dev->device,
-+				      sizeof(struct ce_gd) * PPC4XX_NUM_GD,
-+				      &dev->gdr_pa, GFP_ATOMIC);
- 	if (!dev->gdr)
- 		return -ENOMEM;
- 
diff --git a/target/linux/apm821xx/patches-4.14/023-0006-crypto-crypto4xx-add-prng-crypto-support.patch b/target/linux/apm821xx/patches-4.14/023-0006-crypto-crypto4xx-add-prng-crypto-support.patch
deleted file mode 100644
index b06a8f9893a..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0006-crypto-crypto4xx-add-prng-crypto-support.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-From d072bfa4885354fff86aa1fb1dbc4f1533c9e0bf Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sun, 23 Dec 2018 02:16:13 +0100
-Subject: [PATCH 06/15] crypto: crypto4xx - add prng crypto support
-
-This patch adds support for crypto4xx's ANSI X9.17 Annex C compliant
-pseudo random number generator which provides a pseudo random source
-for the purpose of generating  Initialization Vectors (IV's) for AES
-algorithms to the Packet Engine and other pseudo random number
-requirements.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c    | 87 +++++++++++++++++++++++++
- drivers/crypto/amcc/crypto4xx_core.h    |  4 ++
- drivers/crypto/amcc/crypto4xx_reg_def.h |  1 +
- 3 files changed, 92 insertions(+)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -40,9 +40,11 @@
- #include <crypto/ctr.h>
- #include <crypto/gcm.h>
- #include <crypto/sha.h>
-+#include <crypto/rng.h>
- #include <crypto/scatterwalk.h>
- #include <crypto/skcipher.h>
- #include <crypto/internal/aead.h>
-+#include <crypto/internal/rng.h>
- #include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_core.h"
-@@ -1031,6 +1033,10 @@ static int crypto4xx_register_alg(struct
- 			rc = crypto_register_ahash(&alg->alg.u.hash);
- 			break;
- 
-+		case CRYPTO_ALG_TYPE_RNG:
-+			rc = crypto_register_rng(&alg->alg.u.rng);
-+			break;
-+
- 		default:
- 			rc = crypto_register_skcipher(&alg->alg.u.cipher);
- 			break;
-@@ -1060,6 +1066,10 @@ static void crypto4xx_unregister_alg(str
- 			crypto_unregister_aead(&alg->alg.u.aead);
- 			break;
- 
-+		case CRYPTO_ALG_TYPE_RNG:
-+			crypto_unregister_rng(&alg->alg.u.rng);
-+			break;
-+
- 		default:
- 			crypto_unregister_skcipher(&alg->alg.u.cipher);
- 		}
-@@ -1118,6 +1128,69 @@ static irqreturn_t crypto4xx_ce_interrup
- 		PPC4XX_TMO_ERR_INT);
- }
- 
-+static int ppc4xx_prng_data_read(struct crypto4xx_device *dev,
-+				 u8 *data, unsigned int max)
-+{
-+	unsigned int i, curr = 0;
-+	u32 val[2];
-+
-+	do {
-+		/* trigger PRN generation */
-+		writel(PPC4XX_PRNG_CTRL_AUTO_EN,
-+		       dev->ce_base + CRYPTO4XX_PRNG_CTRL);
-+
-+		for (i = 0; i < 1024; i++) {
-+			/* usually 19 iterations are enough */
-+			if ((readl(dev->ce_base + CRYPTO4XX_PRNG_STAT) &
-+			     CRYPTO4XX_PRNG_STAT_BUSY))
-+				continue;
-+
-+			val[0] = readl_be(dev->ce_base + CRYPTO4XX_PRNG_RES_0);
-+			val[1] = readl_be(dev->ce_base + CRYPTO4XX_PRNG_RES_1);
-+			break;
-+		}
-+		if (i == 1024)
-+			return -ETIMEDOUT;
-+
-+		if ((max - curr) >= 8) {
-+			memcpy(data, &val, 8);
-+			data += 8;
-+			curr += 8;
-+		} else {
-+			/* copy only remaining bytes */
-+			memcpy(data, &val, max - curr);
-+			break;
-+		}
-+	} while (curr < max);
-+
-+	return curr;
-+}
-+
-+static int crypto4xx_prng_generate(struct crypto_rng *tfm,
-+				   const u8 *src, unsigned int slen,
-+				   u8 *dstn, unsigned int dlen)
-+{
-+	struct rng_alg *alg = crypto_rng_alg(tfm);
-+	struct crypto4xx_alg *amcc_alg;
-+	struct crypto4xx_device *dev;
-+	int ret;
-+
-+	amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.rng);
-+	dev = amcc_alg->dev;
-+
-+	mutex_lock(&dev->core_dev->rng_lock);
-+	ret = ppc4xx_prng_data_read(dev, dstn, dlen);
-+	mutex_unlock(&dev->core_dev->rng_lock);
-+	return ret;
-+}
-+
-+
-+static int crypto4xx_prng_seed(struct crypto_rng *tfm, const u8 *seed,
-+			unsigned int slen)
-+{
-+	return 0;
-+}
-+
- /**
-  * Supported Crypto Algorithms
-  */
-@@ -1287,6 +1360,18 @@ static struct crypto4xx_alg_common crypt
- 			.cra_module	= THIS_MODULE,
- 		},
- 	} },
-+	{ .type = CRYPTO_ALG_TYPE_RNG, .u.rng = {
-+		.base = {
-+			.cra_name		= "stdrng",
-+			.cra_driver_name        = "crypto4xx_rng",
-+			.cra_priority		= 300,
-+			.cra_ctxsize		= 0,
-+			.cra_module		= THIS_MODULE,
-+		},
-+		.generate               = crypto4xx_prng_generate,
-+		.seed                   = crypto4xx_prng_seed,
-+		.seedsize               = 0,
-+	} },
- };
- 
- /**
-@@ -1356,6 +1441,7 @@ static int crypto4xx_probe(struct platfo
- 	core_dev->dev->core_dev = core_dev;
- 	core_dev->dev->is_revb = is_revb;
- 	core_dev->device = dev;
-+	mutex_init(&core_dev->rng_lock);
- 	spin_lock_init(&core_dev->lock);
- 	INIT_LIST_HEAD(&core_dev->dev->alg_list);
- 	ratelimit_default_init(&core_dev->dev->aead_ratelimit);
-@@ -1435,6 +1521,7 @@ static int crypto4xx_remove(struct platf
- 	tasklet_kill(&core_dev->tasklet);
- 	/* Un-register with Linux CryptoAPI */
- 	crypto4xx_unregister_alg(core_dev->dev);
-+	mutex_destroy(&core_dev->rng_lock);
- 	/* Free all allocated memory */
- 	crypto4xx_stop_all(core_dev);
- 
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -23,8 +23,10 @@
- #define __CRYPTO4XX_CORE_H__
- 
- #include <linux/ratelimit.h>
-+#include <linux/mutex.h>
- #include <crypto/internal/hash.h>
- #include <crypto/internal/aead.h>
-+#include <crypto/internal/rng.h>
- #include <crypto/internal/skcipher.h>
- #include "crypto4xx_reg_def.h"
- #include "crypto4xx_sa.h"
-@@ -119,6 +121,7 @@ struct crypto4xx_core_device {
- 	u32 irq;
- 	struct tasklet_struct tasklet;
- 	spinlock_t lock;
-+	struct mutex rng_lock;
- };
- 
- struct crypto4xx_ctx {
-@@ -143,6 +146,7 @@ struct crypto4xx_alg_common {
- 		struct skcipher_alg cipher;
- 		struct ahash_alg hash;
- 		struct aead_alg aead;
-+		struct rng_alg rng;
- 	} u;
- };
- 
---- a/drivers/crypto/amcc/crypto4xx_reg_def.h
-+++ b/drivers/crypto/amcc/crypto4xx_reg_def.h
-@@ -100,6 +100,7 @@
- #define CRYPTO4XX_ENDIAN_CFG			0x000600d8
- 
- #define CRYPTO4XX_PRNG_STAT			0x00070000
-+#define CRYPTO4XX_PRNG_STAT_BUSY		0x1
- #define CRYPTO4XX_PRNG_CTRL			0x00070004
- #define CRYPTO4XX_PRNG_SEED_L			0x00070008
- #define CRYPTO4XX_PRNG_SEED_H			0x0007000c
diff --git a/target/linux/apm821xx/patches-4.14/023-0013-crypto-crypto4xx-fix-AES-CTR-blocksize-value.patch b/target/linux/apm821xx/patches-4.14/023-0013-crypto-crypto4xx-fix-AES-CTR-blocksize-value.patch
deleted file mode 100644
index 9c78fd06037..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0013-crypto-crypto4xx-fix-AES-CTR-blocksize-value.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From bfa2ba7d9e6b20aca82b99e6842fe18842ae3a0f Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Fri, 17 May 2019 23:15:57 +0200
-Subject: [PATCH 13/15] crypto: crypto4xx - fix AES CTR blocksize value
-
-This patch fixes a issue with crypto4xx's ctr(aes) that was
-discovered by libcapi's kcapi-enc-test.sh test.
-
-The some of the ctr(aes) encryptions test were failing on the
-non-power-of-two test:
-
-kcapi-enc - Error: encryption failed with error 0
-kcapi-enc - Error: decryption failed with error 0
-[FAILED: 32-bit - 5.1.0-rc1+] 15 bytes: STDIN / STDOUT enc test (128 bits):
-original file (1d100e..cc96184c) and generated file (e3b0c442..1b7852b855)
-[FAILED: 32-bit - 5.1.0-rc1+] 15 bytes: STDIN / STDOUT enc test (128 bits)
-(openssl generated CT): original file (e3b0..5) and generated file (3..8e)
-[PASSED: 32-bit - 5.1.0-rc1+] 15 bytes: STDIN / STDOUT enc test (128 bits)
-(openssl generated PT)
-[FAILED: 32-bit - 5.1.0-rc1+] 15 bytes: STDIN / STDOUT enc test (password):
-original file (1d1..84c) and generated file (e3b..852b855)
-
-But the 16, 32, 512, 65536 tests always worked.
-
-Thankfully, this isn't a hidden hardware problem like previously,
-instead this turned out to be a copy and paste issue.
-
-With this patch, all the tests are passing with and
-kcapi-enc-test.sh gives crypto4xx's a clean bill of health:
- "Number of failures: 0" :).
-
-Cc: stable@vger.kernel.org
-Fixes: 98e87e3d933b ("crypto: crypto4xx - add aes-ctr support")
-Fixes: f2a13e7cba9e ("crypto: crypto4xx - enable AES RFC3686, ECB, CFB and OFB offloads")
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1244,7 +1244,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_flags = CRYPTO_ALG_NEED_FALLBACK |
- 				CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
--			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_blocksize = 1,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
- 			.cra_module = THIS_MODULE,
- 		},
-@@ -1264,7 +1264,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
- 			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
--			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_blocksize = 1,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
- 			.cra_module = THIS_MODULE,
- 		},
diff --git a/target/linux/apm821xx/patches-4.14/023-0014-crypto-crypto4xx-fix-blocksize-for-cfb-and-ofb.patch b/target/linux/apm821xx/patches-4.14/023-0014-crypto-crypto4xx-fix-blocksize-for-cfb-and-ofb.patch
deleted file mode 100644
index ac280b90b3c..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0014-crypto-crypto4xx-fix-blocksize-for-cfb-and-ofb.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 70c4997f34b6c6888b3ac157adec49e01d0df2d5 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sat, 18 May 2019 23:28:11 +0200
-Subject: [PATCH 14/15] crypto: crypto4xx - fix blocksize for cfb and ofb
-
-While the hardware consider them to be blockciphers, the
-reference implementation defines them as streamciphers.
-
-Do the right thing and set the blocksize to 1. This
-was found by CONFIG_CRYPTO_MANAGER_EXTRA_TESTS.
-
-This fixes the following issues:
-skcipher: blocksize for ofb-aes-ppc4xx (16) doesn't match generic impl (1)
-skcipher: blocksize for cfb-aes-ppc4xx (16) doesn't match generic impl (1)
-
-Cc: Eric Biggers <ebiggers@kernel.org>
-Cc: stable@vger.kernel.org
-Fixes: f2a13e7cba9e ("crypto: crypto4xx - enable AES RFC3686, ECB, CFB and OFB offloads")
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_core.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1223,7 +1223,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
- 			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
--			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_blocksize = 1,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
- 			.cra_module = THIS_MODULE,
- 		},
-@@ -1303,7 +1303,7 @@ static struct crypto4xx_alg_common crypt
- 			.cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
- 			.cra_flags = CRYPTO_ALG_ASYNC |
- 				CRYPTO_ALG_KERN_DRIVER_ONLY,
--			.cra_blocksize = AES_BLOCK_SIZE,
-+			.cra_blocksize = 1,
- 			.cra_ctxsize = sizeof(struct crypto4xx_ctx),
- 			.cra_module = THIS_MODULE,
- 		},
diff --git a/target/linux/apm821xx/patches-4.14/023-0015-crypto-crypto4xx-block-ciphers-should-only-accept-co.patch b/target/linux/apm821xx/patches-4.14/023-0015-crypto-crypto4xx-block-ciphers-should-only-accept-co.patch
deleted file mode 100644
index 324a7406b01..00000000000
--- a/target/linux/apm821xx/patches-4.14/023-0015-crypto-crypto4xx-block-ciphers-should-only-accept-co.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From 0f7a81374060828280fcfdfbaa162cb559017f9f Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sat, 18 May 2019 23:28:12 +0200
-Subject: [PATCH 15/15] crypto: crypto4xx - block ciphers should only accept
- complete blocks
-
-The hardware automatically zero pads incomplete block ciphers
-blocks without raising any errors. This is a screw-up. This
-was noticed by CONFIG_CRYPTO_MANAGER_EXTRA_TESTS tests that
-sent a incomplete blocks and expect them to fail.
-
-This fixes:
-cbc-aes-ppc4xx encryption unexpectedly succeeded on test vector
-"random: len=2409 klen=32"; expected_error=-22, cfg="random:
-may_sleep use_digest src_divs=[96.90%@+2295, 2.34%@+4066,
-0.32%@alignmask+12, 0.34%@+4087, 0.9%@alignmask+1787, 0.1%@+3767]
-iv_offset=6"
-
-ecb-aes-ppc4xx encryption unexpectedly succeeded on test vector
-"random: len=1011 klen=32"; expected_error=-22, cfg="random:
-may_sleep use_digest src_divs=[100.0%@alignmask+20]
-dst_divs=[3.12%@+3001, 96.88%@+4070]"
-
-Cc: Eric Biggers <ebiggers@kernel.org>
-Cc: stable@vger.kernel.org [4.19, 5.0 and 5.1]
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c  | 36 +++++++++++++++++++---------
- drivers/crypto/amcc/crypto4xx_core.c | 16 ++++++-------
- drivers/crypto/amcc/crypto4xx_core.h | 10 ++++----
- 3 files changed, 39 insertions(+), 23 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -76,12 +76,16 @@ static void set_dynamic_sa_command_1(str
- }
- 
- static inline int crypto4xx_crypt(struct skcipher_request *req,
--				  const unsigned int ivlen, bool decrypt)
-+				  const unsigned int ivlen, bool decrypt,
-+				  bool check_blocksize)
- {
- 	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
- 	struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
- 	__le32 iv[AES_IV_SIZE];
- 
-+	if (check_blocksize && !IS_ALIGNED(req->cryptlen, AES_BLOCK_SIZE))
-+		return -EINVAL;
-+
- 	if (ivlen)
- 		crypto4xx_memcpy_to_le32(iv, req->iv, ivlen);
- 
-@@ -90,24 +94,34 @@ static inline int crypto4xx_crypt(struct
- 		ctx->sa_len, 0, NULL);
- }
- 
--int crypto4xx_encrypt_noiv(struct skcipher_request *req)
-+int crypto4xx_encrypt_noiv_block(struct skcipher_request *req)
-+{
-+	return crypto4xx_crypt(req, 0, false, true);
-+}
-+
-+int crypto4xx_encrypt_iv_stream(struct skcipher_request *req)
-+{
-+	return crypto4xx_crypt(req, AES_IV_SIZE, false, false);
-+}
-+
-+int crypto4xx_decrypt_noiv_block(struct skcipher_request *req)
- {
--	return crypto4xx_crypt(req, 0, false);
-+	return crypto4xx_crypt(req, 0, true, true);
- }
- 
--int crypto4xx_encrypt_iv(struct skcipher_request *req)
-+int crypto4xx_decrypt_iv_stream(struct skcipher_request *req)
- {
--	return crypto4xx_crypt(req, AES_IV_SIZE, false);
-+	return crypto4xx_crypt(req, AES_IV_SIZE, true, false);
- }
- 
--int crypto4xx_decrypt_noiv(struct skcipher_request *req)
-+int crypto4xx_encrypt_iv_block(struct skcipher_request *req)
- {
--	return crypto4xx_crypt(req, 0, true);
-+	return crypto4xx_crypt(req, AES_IV_SIZE, false, true);
- }
- 
--int crypto4xx_decrypt_iv(struct skcipher_request *req)
-+int crypto4xx_decrypt_iv_block(struct skcipher_request *req)
- {
--	return crypto4xx_crypt(req, AES_IV_SIZE, true);
-+	return crypto4xx_crypt(req, AES_IV_SIZE, true, true);
- }
- 
- /**
-@@ -272,8 +286,8 @@ crypto4xx_ctr_crypt(struct skcipher_requ
- 		return ret;
- 	}
- 
--	return encrypt ? crypto4xx_encrypt_iv(req)
--		       : crypto4xx_decrypt_iv(req);
-+	return encrypt ? crypto4xx_encrypt_iv_stream(req)
-+		       : crypto4xx_decrypt_iv_stream(req);
- }
- 
- static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx,
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -1211,8 +1211,8 @@ static struct crypto4xx_alg_common crypt
- 		.max_keysize = AES_MAX_KEY_SIZE,
- 		.ivsize	= AES_IV_SIZE,
- 		.setkey = crypto4xx_setkey_aes_cbc,
--		.encrypt = crypto4xx_encrypt_iv,
--		.decrypt = crypto4xx_decrypt_iv,
-+		.encrypt = crypto4xx_encrypt_iv_block,
-+		.decrypt = crypto4xx_decrypt_iv_block,
- 		.init = crypto4xx_sk_init,
- 		.exit = crypto4xx_sk_exit,
- 	} },
-@@ -1231,8 +1231,8 @@ static struct crypto4xx_alg_common crypt
- 		.max_keysize = AES_MAX_KEY_SIZE,
- 		.ivsize	= AES_IV_SIZE,
- 		.setkey	= crypto4xx_setkey_aes_cfb,
--		.encrypt = crypto4xx_encrypt_iv,
--		.decrypt = crypto4xx_decrypt_iv,
-+		.encrypt = crypto4xx_encrypt_iv_stream,
-+		.decrypt = crypto4xx_decrypt_iv_stream,
- 		.init = crypto4xx_sk_init,
- 		.exit = crypto4xx_sk_exit,
- 	} },
-@@ -1291,8 +1291,8 @@ static struct crypto4xx_alg_common crypt
- 		.min_keysize = AES_MIN_KEY_SIZE,
- 		.max_keysize = AES_MAX_KEY_SIZE,
- 		.setkey	= crypto4xx_setkey_aes_ecb,
--		.encrypt = crypto4xx_encrypt_noiv,
--		.decrypt = crypto4xx_decrypt_noiv,
-+		.encrypt = crypto4xx_encrypt_noiv_block,
-+		.decrypt = crypto4xx_decrypt_noiv_block,
- 		.init = crypto4xx_sk_init,
- 		.exit = crypto4xx_sk_exit,
- 	} },
-@@ -1311,8 +1311,8 @@ static struct crypto4xx_alg_common crypt
- 		.max_keysize = AES_MAX_KEY_SIZE,
- 		.ivsize	= AES_IV_SIZE,
- 		.setkey	= crypto4xx_setkey_aes_ofb,
--		.encrypt = crypto4xx_encrypt_iv,
--		.decrypt = crypto4xx_decrypt_iv,
-+		.encrypt = crypto4xx_encrypt_iv_stream,
-+		.decrypt = crypto4xx_decrypt_iv_stream,
- 		.init = crypto4xx_sk_init,
- 		.exit = crypto4xx_sk_exit,
- 	} },
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -183,10 +183,12 @@ int crypto4xx_setkey_rfc3686(struct cryp
- 			     const u8 *key, unsigned int keylen);
- int crypto4xx_encrypt_ctr(struct skcipher_request *req);
- int crypto4xx_decrypt_ctr(struct skcipher_request *req);
--int crypto4xx_encrypt_iv(struct skcipher_request *req);
--int crypto4xx_decrypt_iv(struct skcipher_request *req);
--int crypto4xx_encrypt_noiv(struct skcipher_request *req);
--int crypto4xx_decrypt_noiv(struct skcipher_request *req);
-+int crypto4xx_encrypt_iv_stream(struct skcipher_request *req);
-+int crypto4xx_decrypt_iv_stream(struct skcipher_request *req);
-+int crypto4xx_encrypt_iv_block(struct skcipher_request *req);
-+int crypto4xx_decrypt_iv_block(struct skcipher_request *req);
-+int crypto4xx_encrypt_noiv_block(struct skcipher_request *req);
-+int crypto4xx_decrypt_noiv_block(struct skcipher_request *req);
- int crypto4xx_rfc3686_encrypt(struct skcipher_request *req);
- int crypto4xx_rfc3686_decrypt(struct skcipher_request *req);
- int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
diff --git a/target/linux/apm821xx/patches-4.14/030-0001-net-ibm-emac-replace-custom-rgmii_mode_name-with-phy.patch b/target/linux/apm821xx/patches-4.14/030-0001-net-ibm-emac-replace-custom-rgmii_mode_name-with-phy.patch
deleted file mode 100644
index 28969a7b4a7..00000000000
--- a/target/linux/apm821xx/patches-4.14/030-0001-net-ibm-emac-replace-custom-rgmii_mode_name-with-phy.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 54e1b3004eb85f9317f6c4ceff2e097231c7f52a Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 20 Dec 2017 22:11:22 +0100
-Subject: [PATCH 1/3] net: ibm: emac: replace custom rgmii_mode_name with
- phy_modes
-
-The common phylib defines the same names (in lower-case).
-Since rgmii_mode_name() is used only in one place and
-for a "notice-level" printk, I think it can be replaced.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/net/ethernet/ibm/emac/rgmii.c | 20 +-------------------
- 1 file changed, 1 insertion(+), 19 deletions(-)
-
---- a/drivers/net/ethernet/ibm/emac/rgmii.c
-+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
-@@ -59,24 +59,6 @@ static inline int rgmii_valid_mode(int p
- 		phy_mode == PHY_MODE_RTBI;
- }
- 
--static inline const char *rgmii_mode_name(int mode)
--{
--	switch (mode) {
--	case PHY_MODE_RGMII:
--		return "RGMII";
--	case PHY_MODE_TBI:
--		return "TBI";
--	case PHY_MODE_GMII:
--		return "GMII";
--	case PHY_MODE_MII:
--		return "MII";
--	case PHY_MODE_RTBI:
--		return "RTBI";
--	default:
--		BUG();
--	}
--}
--
- static inline u32 rgmii_mode_mask(int mode, int input)
- {
- 	switch (mode) {
-@@ -115,7 +97,7 @@ int rgmii_attach(struct platform_device
- 	out_be32(&p->fer, in_be32(&p->fer) | rgmii_mode_mask(mode, input));
- 
- 	printk(KERN_NOTICE "%pOF: input %d in %s mode\n",
--	       ofdev->dev.of_node, input, rgmii_mode_name(mode));
-+	       ofdev->dev.of_node, input, phy_modes(mode));
- 
- 	++dev->users;
- 
diff --git a/target/linux/apm821xx/patches-4.14/030-0002-net-ibm-emac-replace-custom-PHY_MODE_-macros.patch b/target/linux/apm821xx/patches-4.14/030-0002-net-ibm-emac-replace-custom-PHY_MODE_-macros.patch
deleted file mode 100644
index ba4fb5f7175..00000000000
--- a/target/linux/apm821xx/patches-4.14/030-0002-net-ibm-emac-replace-custom-PHY_MODE_-macros.patch
+++ /dev/null
@@ -1,246 +0,0 @@
-From 1477bea9e6931f6be96f45b9d277690a26d0cd97 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 20 Dec 2017 22:19:24 +0100
-Subject: [PATCH 2/3] net: ibm: emac: replace custom PHY_MODE_* macros
-
-The ibm_emac driver predates the shared PHY_INTERFACE_MODE_
-enums provided by include/linux/phy.h by a few years.
-
-And while the driver has been retrofitted to use the PHYLIB,
-the old definitions have stuck around to this day.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/net/ethernet/ibm/emac/core.c  | 20 ++++++++++----------
- drivers/net/ethernet/ibm/emac/emac.h  | 13 -------------
- drivers/net/ethernet/ibm/emac/phy.c   | 10 +++++-----
- drivers/net/ethernet/ibm/emac/rgmii.c | 20 ++++++++++----------
- drivers/net/ethernet/ibm/emac/zmii.c  | 34 +++++++++++++++++-----------------
- 5 files changed, 42 insertions(+), 55 deletions(-)
-
---- a/drivers/net/ethernet/ibm/emac/core.c
-+++ b/drivers/net/ethernet/ibm/emac/core.c
-@@ -199,18 +199,18 @@ static void __emac_set_multicast_list(st
- 
- static inline int emac_phy_supports_gige(int phy_mode)
- {
--	return  phy_mode == PHY_MODE_GMII ||
--		phy_mode == PHY_MODE_RGMII ||
--		phy_mode == PHY_MODE_SGMII ||
--		phy_mode == PHY_MODE_TBI ||
--		phy_mode == PHY_MODE_RTBI;
-+	return  phy_mode == PHY_INTERFACE_MODE_GMII ||
-+		phy_mode == PHY_INTERFACE_MODE_RGMII ||
-+		phy_mode == PHY_INTERFACE_MODE_SGMII ||
-+		phy_mode == PHY_INTERFACE_MODE_TBI ||
-+		phy_mode == PHY_INTERFACE_MODE_RTBI;
- }
- 
- static inline int emac_phy_gpcs(int phy_mode)
- {
--	return  phy_mode == PHY_MODE_SGMII ||
--		phy_mode == PHY_MODE_TBI ||
--		phy_mode == PHY_MODE_RTBI;
-+	return  phy_mode == PHY_INTERFACE_MODE_SGMII ||
-+		phy_mode == PHY_INTERFACE_MODE_TBI ||
-+		phy_mode == PHY_INTERFACE_MODE_RTBI;
- }
- 
- static inline void emac_tx_enable(struct emac_instance *dev)
-@@ -2870,7 +2870,7 @@ static int emac_init_config(struct emac_
- 	/* PHY mode needs some decoding */
- 	dev->phy_mode = of_get_phy_mode(np);
- 	if (dev->phy_mode < 0)
--		dev->phy_mode = PHY_MODE_NA;
-+		dev->phy_mode = PHY_INTERFACE_MODE_NA;
- 
- 	/* Check EMAC version */
- 	if (of_device_is_compatible(np, "ibm,emac4sync")) {
-@@ -3173,7 +3173,7 @@ static int emac_probe(struct platform_de
- 	printk(KERN_INFO "%s: EMAC-%d %pOF, MAC %pM\n",
- 	       ndev->name, dev->cell_index, np, ndev->dev_addr);
- 
--	if (dev->phy_mode == PHY_MODE_SGMII)
-+	if (dev->phy_mode == PHY_INTERFACE_MODE_SGMII)
- 		printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
- 
- 	if (dev->phy.address >= 0)
---- a/drivers/net/ethernet/ibm/emac/emac.h
-+++ b/drivers/net/ethernet/ibm/emac/emac.h
-@@ -104,19 +104,6 @@ struct emac_regs {
- 	} u1;
- };
- 
--/*
-- * PHY mode settings (EMAC <-> ZMII/RGMII bridge <-> PHY)
-- */
--#define PHY_MODE_NA	PHY_INTERFACE_MODE_NA
--#define PHY_MODE_MII	PHY_INTERFACE_MODE_MII
--#define PHY_MODE_RMII	PHY_INTERFACE_MODE_RMII
--#define PHY_MODE_SMII	PHY_INTERFACE_MODE_SMII
--#define PHY_MODE_RGMII	PHY_INTERFACE_MODE_RGMII
--#define PHY_MODE_TBI	PHY_INTERFACE_MODE_TBI
--#define PHY_MODE_GMII	PHY_INTERFACE_MODE_GMII
--#define PHY_MODE_RTBI	PHY_INTERFACE_MODE_RTBI
--#define PHY_MODE_SGMII	PHY_INTERFACE_MODE_SGMII
--
- /* EMACx_MR0 */
- #define EMAC_MR0_RXI			0x80000000
- #define EMAC_MR0_TXI			0x40000000
---- a/drivers/net/ethernet/ibm/emac/phy.c
-+++ b/drivers/net/ethernet/ibm/emac/phy.c
-@@ -96,7 +96,7 @@ int emac_mii_reset_gpcs(struct mii_phy *
- 	if ((val & BMCR_ISOLATE) && limit > 0)
- 		gpcs_phy_write(phy, MII_BMCR, val & ~BMCR_ISOLATE);
- 
--	if (limit > 0 && phy->mode == PHY_MODE_SGMII) {
-+	if (limit > 0 && phy->mode == PHY_INTERFACE_MODE_SGMII) {
- 		/* Configure GPCS interface to recommended setting for SGMII */
- 		gpcs_phy_write(phy, 0x04, 0x8120); /* AsymPause, FDX */
- 		gpcs_phy_write(phy, 0x07, 0x2801); /* msg_pg, toggle */
-@@ -313,16 +313,16 @@ static int cis8201_init(struct mii_phy *
- 	epcr &= ~EPCR_MODE_MASK;
- 
- 	switch (phy->mode) {
--	case PHY_MODE_TBI:
-+	case PHY_INTERFACE_MODE_TBI:
- 		epcr |= EPCR_TBI_MODE;
- 		break;
--	case PHY_MODE_RTBI:
-+	case PHY_INTERFACE_MODE_RTBI:
- 		epcr |= EPCR_RTBI_MODE;
- 		break;
--	case PHY_MODE_GMII:
-+	case PHY_INTERFACE_MODE_GMII:
- 		epcr |= EPCR_GMII_MODE;
- 		break;
--	case PHY_MODE_RGMII:
-+	case PHY_INTERFACE_MODE_RGMII:
- 	default:
- 		epcr |= EPCR_RGMII_MODE;
- 	}
---- a/drivers/net/ethernet/ibm/emac/rgmii.c
-+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
-@@ -52,25 +52,25 @@
- /* RGMII bridge supports only GMII/TBI and RGMII/RTBI PHYs */
- static inline int rgmii_valid_mode(int phy_mode)
- {
--	return  phy_mode == PHY_MODE_GMII ||
--		phy_mode == PHY_MODE_MII ||
--		phy_mode == PHY_MODE_RGMII ||
--		phy_mode == PHY_MODE_TBI ||
--		phy_mode == PHY_MODE_RTBI;
-+	return  phy_mode == PHY_INTERFACE_MODE_GMII ||
-+		phy_mode == PHY_INTERFACE_MODE_MII ||
-+		phy_mode == PHY_INTERFACE_MODE_RGMII ||
-+		phy_mode == PHY_INTERFACE_MODE_TBI ||
-+		phy_mode == PHY_INTERFACE_MODE_RTBI;
- }
- 
- static inline u32 rgmii_mode_mask(int mode, int input)
- {
- 	switch (mode) {
--	case PHY_MODE_RGMII:
-+	case PHY_INTERFACE_MODE_RGMII:
- 		return RGMII_FER_RGMII(input);
--	case PHY_MODE_TBI:
-+	case PHY_INTERFACE_MODE_TBI:
- 		return RGMII_FER_TBI(input);
--	case PHY_MODE_GMII:
-+	case PHY_INTERFACE_MODE_GMII:
- 		return RGMII_FER_GMII(input);
--	case PHY_MODE_MII:
-+	case PHY_INTERFACE_MODE_MII:
- 		return RGMII_FER_MII(input);
--	case PHY_MODE_RTBI:
-+	case PHY_INTERFACE_MODE_RTBI:
- 		return RGMII_FER_RTBI(input);
- 	default:
- 		BUG();
---- a/drivers/net/ethernet/ibm/emac/zmii.c
-+++ b/drivers/net/ethernet/ibm/emac/zmii.c
-@@ -49,20 +49,20 @@
-  */
- static inline int zmii_valid_mode(int mode)
- {
--	return  mode == PHY_MODE_MII ||
--		mode == PHY_MODE_RMII ||
--		mode == PHY_MODE_SMII ||
--		mode == PHY_MODE_NA;
-+	return  mode == PHY_INTERFACE_MODE_MII ||
-+		mode == PHY_INTERFACE_MODE_RMII ||
-+		mode == PHY_INTERFACE_MODE_SMII ||
-+		mode == PHY_INTERFACE_MODE_NA;
- }
- 
- static inline const char *zmii_mode_name(int mode)
- {
- 	switch (mode) {
--	case PHY_MODE_MII:
-+	case PHY_INTERFACE_MODE_MII:
- 		return "MII";
--	case PHY_MODE_RMII:
-+	case PHY_INTERFACE_MODE_RMII:
- 		return "RMII";
--	case PHY_MODE_SMII:
-+	case PHY_INTERFACE_MODE_SMII:
- 		return "SMII";
- 	default:
- 		BUG();
-@@ -72,11 +72,11 @@ static inline const char *zmii_mode_name
- static inline u32 zmii_mode_mask(int mode, int input)
- {
- 	switch (mode) {
--	case PHY_MODE_MII:
-+	case PHY_INTERFACE_MODE_MII:
- 		return ZMII_FER_MII(input);
--	case PHY_MODE_RMII:
-+	case PHY_INTERFACE_MODE_RMII:
- 		return ZMII_FER_RMII(input);
--	case PHY_MODE_SMII:
-+	case PHY_INTERFACE_MODE_SMII:
- 		return ZMII_FER_SMII(input);
- 	default:
- 		return 0;
-@@ -106,18 +106,18 @@ int zmii_attach(struct platform_device *
- 	 * Please, always specify PHY mode in your board port to avoid
- 	 * any surprises.
- 	 */
--	if (dev->mode == PHY_MODE_NA) {
--		if (*mode == PHY_MODE_NA) {
-+	if (dev->mode == PHY_INTERFACE_MODE_NA) {
-+		if (*mode == PHY_INTERFACE_MODE_NA) {
- 			u32 r = dev->fer_save;
- 
- 			ZMII_DBG(dev, "autodetecting mode, FER = 0x%08x" NL, r);
- 
- 			if (r & (ZMII_FER_MII(0) | ZMII_FER_MII(1)))
--				dev->mode = PHY_MODE_MII;
-+				dev->mode = PHY_INTERFACE_MODE_MII;
- 			else if (r & (ZMII_FER_RMII(0) | ZMII_FER_RMII(1)))
--				dev->mode = PHY_MODE_RMII;
-+				dev->mode = PHY_INTERFACE_MODE_RMII;
- 			else
--				dev->mode = PHY_MODE_SMII;
-+				dev->mode = PHY_INTERFACE_MODE_SMII;
- 		} else
- 			dev->mode = *mode;
- 
-@@ -126,7 +126,7 @@ int zmii_attach(struct platform_device *
- 		       zmii_mode_name(dev->mode));
- 	} else {
- 		/* All inputs must use the same mode */
--		if (*mode != PHY_MODE_NA && *mode != dev->mode) {
-+		if (*mode != PHY_INTERFACE_MODE_NA && *mode != dev->mode) {
- 			printk(KERN_ERR
- 			       "%pOF: invalid mode %d specified for input %d\n",
- 			       ofdev->dev.of_node, *mode, input);
-@@ -246,7 +246,7 @@ static int zmii_probe(struct platform_de
- 
- 	mutex_init(&dev->lock);
- 	dev->ofdev = ofdev;
--	dev->mode = PHY_MODE_NA;
-+	dev->mode = PHY_INTERFACE_MODE_NA;
- 
- 	rc = -ENXIO;
- 	if (of_address_to_resource(np, 0, &regs)) {
diff --git a/target/linux/apm821xx/patches-4.14/030-0003-net-ibm-emac-support-RGMII-RX-TX-ID-phymode.patch b/target/linux/apm821xx/patches-4.14/030-0003-net-ibm-emac-support-RGMII-RX-TX-ID-phymode.patch
deleted file mode 100644
index 16074c7ee6d..00000000000
--- a/target/linux/apm821xx/patches-4.14/030-0003-net-ibm-emac-support-RGMII-RX-TX-ID-phymode.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 0a49f0d1958440f7928047433c983eece05a3723 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 14 Dec 2017 19:51:50 +0100
-Subject: [PATCH 3/3] net: ibm: emac: support RGMII-[RX|TX]ID phymode
-
-The RGMII spec allows compliance for devices that implement an internal
-delay on TXC and/or RXC inside the transmitter. This patch adds the
-necessary RGMII_[RX|TX]ID mode code to handle such PHYs with the
-emac driver.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-
----
-v3: - replace PHY_MODE_* with PHY_INTERFACE_MODE_*
-    - replace rgmii_mode_name() with phy_modes[]
-
-v2: - utilize phy_interface_mode_is_rgmii()
----
- drivers/net/ethernet/ibm/emac/core.c  | 4 ++--
- drivers/net/ethernet/ibm/emac/rgmii.c | 7 +++++--
- 2 files changed, 7 insertions(+), 4 deletions(-)
-
---- a/drivers/net/ethernet/ibm/emac/core.c
-+++ b/drivers/net/ethernet/ibm/emac/core.c
-@@ -199,8 +199,8 @@ static void __emac_set_multicast_list(st
- 
- static inline int emac_phy_supports_gige(int phy_mode)
- {
--	return  phy_mode == PHY_INTERFACE_MODE_GMII ||
--		phy_mode == PHY_INTERFACE_MODE_RGMII ||
-+	return  phy_interface_mode_is_rgmii(phy_mode) ||
-+		phy_mode == PHY_INTERFACE_MODE_GMII ||
- 		phy_mode == PHY_INTERFACE_MODE_SGMII ||
- 		phy_mode == PHY_INTERFACE_MODE_TBI ||
- 		phy_mode == PHY_INTERFACE_MODE_RTBI;
---- a/drivers/net/ethernet/ibm/emac/rgmii.c
-+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
-@@ -52,9 +52,9 @@
- /* RGMII bridge supports only GMII/TBI and RGMII/RTBI PHYs */
- static inline int rgmii_valid_mode(int phy_mode)
- {
--	return  phy_mode == PHY_INTERFACE_MODE_GMII ||
-+	return  phy_interface_mode_is_rgmii(phy_mode) ||
-+		phy_mode == PHY_INTERFACE_MODE_GMII ||
- 		phy_mode == PHY_INTERFACE_MODE_MII ||
--		phy_mode == PHY_INTERFACE_MODE_RGMII ||
- 		phy_mode == PHY_INTERFACE_MODE_TBI ||
- 		phy_mode == PHY_INTERFACE_MODE_RTBI;
- }
-@@ -63,6 +63,9 @@ static inline u32 rgmii_mode_mask(int mo
- {
- 	switch (mode) {
- 	case PHY_INTERFACE_MODE_RGMII:
-+	case PHY_INTERFACE_MODE_RGMII_ID:
-+	case PHY_INTERFACE_MODE_RGMII_RXID:
-+	case PHY_INTERFACE_MODE_RGMII_TXID:
- 		return RGMII_FER_RGMII(input);
- 	case PHY_INTERFACE_MODE_TBI:
- 		return RGMII_FER_TBI(input);
diff --git a/target/linux/apm821xx/patches-4.14/140-GPIO-add-named-gpio-exports.patch b/target/linux/apm821xx/patches-4.14/140-GPIO-add-named-gpio-exports.patch
deleted file mode 100644
index 8f0ac8d0f88..00000000000
--- a/target/linux/apm821xx/patches-4.14/140-GPIO-add-named-gpio-exports.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From cc809a441d8f2924f785eb863dfa6aef47a25b0b Mon Sep 17 00:00:00 2001
-From: John Crispin <blogic@openwrt.org>
-Date: Tue, 12 Aug 2014 20:49:27 +0200
-Subject: [PATCH 30/36] GPIO: add named gpio exports
-
-Signed-off-by: John Crispin <blogic@openwrt.org>
----
- drivers/gpio/gpiolib-of.c     |   68 +++++++++++++++++++++++++++++++++++++++++
- drivers/gpio/gpiolib.c        |   11 +++++--
- include/asm-generic/gpio.h    |    5 +++
- include/linux/gpio/consumer.h |    8 +++++
- 4 files changed, 90 insertions(+), 2 deletions(-)
-
---- a/drivers/gpio/gpiolib-of.c
-+++ b/drivers/gpio/gpiolib-of.c
-@@ -23,6 +23,8 @@
- #include <linux/pinctrl/pinctrl.h>
- #include <linux/slab.h>
- #include <linux/gpio/machine.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
- 
- #include "gpiolib.h"
- 
-@@ -513,3 +515,72 @@ void of_gpiochip_remove(struct gpio_chip
- 	gpiochip_remove_pin_ranges(chip);
- 	of_node_put(chip->of_node);
- }
-+
-+#ifdef CONFIG_GPIO_SYSFS
-+
-+static struct of_device_id gpio_export_ids[] = {
-+	{ .compatible = "gpio-export" },
-+	{ /* sentinel */ }
-+};
-+
-+static int of_gpio_export_probe(struct platform_device *pdev)
-+{
-+	struct device_node *np = pdev->dev.of_node;
-+	struct device_node *cnp;
-+	u32 val;
-+	int nb = 0;
-+
-+	for_each_child_of_node(np, cnp) {
-+		const char *name = NULL;
-+		int gpio;
-+		bool dmc;
-+		int max_gpio = 1;
-+		int i;
-+
-+		of_property_read_string(cnp, "gpio-export,name", &name);
-+
-+		if (!name)
-+			max_gpio = of_gpio_count(cnp);
-+
-+		for (i = 0; i < max_gpio; i++) {
-+			unsigned flags = 0;
-+			enum of_gpio_flags of_flags;
-+
-+			gpio = of_get_gpio_flags(cnp, i, &of_flags);
-+			if (!gpio_is_valid(gpio))
-+				return gpio;
-+
-+			if (of_flags == OF_GPIO_ACTIVE_LOW)
-+				flags |= GPIOF_ACTIVE_LOW;
-+
-+			if (!of_property_read_u32(cnp, "gpio-export,output", &val))
-+				flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
-+			else
-+				flags |= GPIOF_IN;
-+
-+			if (devm_gpio_request_one(&pdev->dev, gpio, flags, name ? name : of_node_full_name(np)))
-+				continue;
-+
-+			dmc = of_property_read_bool(cnp, "gpio-export,direction_may_change");
-+			gpio_export_with_name(gpio, dmc, name);
-+			nb++;
-+		}
-+	}
-+
-+	dev_info(&pdev->dev, "%d gpio(s) exported\n", nb);
-+
-+	return 0;
-+}
-+
-+static struct platform_driver gpio_export_driver = {
-+	.driver		= {
-+		.name		= "gpio-export",
-+		.owner	= THIS_MODULE,
-+		.of_match_table	= of_match_ptr(gpio_export_ids),
-+	},
-+	.probe		= of_gpio_export_probe,
-+};
-+
-+module_platform_driver(gpio_export_driver);
-+
-+#endif
---- a/include/asm-generic/gpio.h
-+++ b/include/asm-generic/gpio.h
-@@ -127,6 +127,12 @@ static inline int gpio_export(unsigned g
- 	return gpiod_export(gpio_to_desc(gpio), direction_may_change);
- }
- 
-+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
-+static inline int gpio_export_with_name(unsigned gpio, bool direction_may_change, const char *name)
-+{
-+	return __gpiod_export(gpio_to_desc(gpio), direction_may_change, name);
-+}
-+
- static inline int gpio_export_link(struct device *dev, const char *name,
- 				   unsigned gpio)
- {
---- a/include/linux/gpio/consumer.h
-+++ b/include/linux/gpio/consumer.h
-@@ -451,6 +451,7 @@ struct gpio_desc *devm_fwnode_get_gpiod_
- 
- #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
- 
-+int _gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name);
- int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
- int gpiod_export_link(struct device *dev, const char *name,
- 		      struct gpio_desc *desc);
-@@ -458,6 +459,13 @@ void gpiod_unexport(struct gpio_desc *de
- 
- #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
- 
-+static inline int _gpiod_export(struct gpio_desc *desc,
-+			       bool direction_may_change,
-+			       const char *name)
-+{
-+	return -ENOSYS;
-+}
-+
- static inline int gpiod_export(struct gpio_desc *desc,
- 			       bool direction_may_change)
- {
---- a/drivers/gpio/gpiolib-sysfs.c
-+++ b/drivers/gpio/gpiolib-sysfs.c
-@@ -553,7 +553,7 @@ static struct class gpio_class = {
-  *
-  * Returns zero on success, else an error.
-  */
--int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
-+int __gpiod_export(struct gpio_desc *desc, bool direction_may_change, const char *name)
- {
- 	struct gpio_chip	*chip;
- 	struct gpio_device	*gdev;
-@@ -615,6 +615,8 @@ int gpiod_export(struct gpio_desc *desc,
- 	offset = gpio_chip_hwgpio(desc);
- 	if (chip->names && chip->names[offset])
- 		ioname = chip->names[offset];
-+	if (name)
-+		ioname = name;
- 
- 	dev = device_create_with_groups(&gpio_class, &gdev->dev,
- 					MKDEV(0, 0), data, gpio_groups,
-@@ -636,6 +638,12 @@ err_unlock:
- 	gpiod_dbg(desc, "%s: status %d\n", __func__, status);
- 	return status;
- }
-+EXPORT_SYMBOL_GPL(__gpiod_export);
-+
-+int gpiod_export(struct gpio_desc *desc, bool direction_may_change)
-+{
-+	return __gpiod_export(desc, direction_may_change, NULL);
-+}
- EXPORT_SYMBOL_GPL(gpiod_export);
- 
- static int match_export(struct device *dev, const void *desc)
diff --git a/target/linux/apm821xx/patches-4.14/200-add-meraki-mr24-ikarem-support.patch b/target/linux/apm821xx/patches-4.14/200-add-meraki-mr24-ikarem-support.patch
deleted file mode 100644
index e9f6c5cfc55..00000000000
--- a/target/linux/apm821xx/patches-4.14/200-add-meraki-mr24-ikarem-support.patch
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/arch/powerpc/platforms/44x/Kconfig
-+++ b/arch/powerpc/platforms/44x/Kconfig
-@@ -41,6 +41,19 @@ config EBONY
- 	help
- 	  This option enables support for the IBM PPC440GP evaluation board.
- 
-+config IKAREM
-+	bool "Ikarem"
-+	depends on 44x
-+	default n
-+	select PPC44x_SIMPLE
-+	select APM821xx
-+	select PCI_MSI
-+	select PPC4xx_MSI
-+	select PPC4xx_PCI_EXPRESS
-+	select IBM_EMAC_RGMII
-+	help
-+	  This option enables support for the Cisco Meraki MR24 (Ikarem) Access Point.
-+
- config SAM440EP
-         bool "Sam440ep"
- 	depends on 44x
---- a/arch/powerpc/platforms/44x/ppc44x_simple.c
-+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
-@@ -62,6 +62,7 @@ static char *board[] __initdata = {
- 	"amcc,sequoia",
- 	"amcc,taishan",
- 	"amcc,yosemite",
-+	"meraki,ikarem",
- 	"mosaixtech,icon"
- };
- 
diff --git a/target/linux/apm821xx/patches-4.14/201-add-amcc-apollo3g-support.patch b/target/linux/apm821xx/patches-4.14/201-add-amcc-apollo3g-support.patch
deleted file mode 100644
index 18982392d43..00000000000
--- a/target/linux/apm821xx/patches-4.14/201-add-amcc-apollo3g-support.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/arch/powerpc/platforms/44x/Kconfig
-+++ b/arch/powerpc/platforms/44x/Kconfig
-@@ -144,6 +144,17 @@ config CANYONLANDS
- 	help
- 	  This option enables support for the AMCC PPC460EX evaluation board.
- 
-+config APOLLO3G
-+	bool "Apollo3G"
-+	depends on 44x
-+	default n
-+	select PPC44x_SIMPLE
-+	select APM821xx
-+	select IBM_EMAC_RGMII
-+	select 460EX
-+	help
-+	  This option enables support for the AMCC Apollo 3G board.
-+
- config GLACIER
- 	bool "Glacier"
- 	depends on 44x
---- a/arch/powerpc/platforms/44x/ppc44x_simple.c
-+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
-@@ -50,6 +50,7 @@ machine_device_initcall(ppc44x_simple, p
-  * board.c file for it rather than adding it to this list.
-  */
- static char *board[] __initdata = {
-+	"amcc,apollo3g",
- 	"amcc,arches",
- 	"amcc,bamboo",
- 	"apm,bluestone",
diff --git a/target/linux/apm821xx/patches-4.14/202-add-netgear-wndr4700-support.patch b/target/linux/apm821xx/patches-4.14/202-add-netgear-wndr4700-support.patch
deleted file mode 100644
index 77294a8cbdc..00000000000
--- a/target/linux/apm821xx/patches-4.14/202-add-netgear-wndr4700-support.patch
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/arch/powerpc/platforms/44x/Makefile
-+++ b/arch/powerpc/platforms/44x/Makefile
-@@ -4,6 +4,7 @@ ifneq ($(CONFIG_PPC4xx_CPM),y)
- obj-y	+= idle.o
- endif
- obj-$(CONFIG_PPC44x_SIMPLE) += ppc44x_simple.o
-+obj-$(CONFIG_WNDR4700) += wndr4700.o
- obj-$(CONFIG_EBONY)	+= ebony.o
- obj-$(CONFIG_SAM440EP) 	+= sam440ep.o
- obj-$(CONFIG_WARP)	+= warp.o
---- a/arch/powerpc/platforms/44x/Kconfig
-+++ b/arch/powerpc/platforms/44x/Kconfig
-@@ -273,6 +273,19 @@ config ICON
- 	help
- 	  This option enables support for the AMCC PPC440SPe evaluation board.
- 
-+config WNDR4700
-+	bool "WNDR4700"
-+	depends on 44x
-+	default n
-+	select APM821xx
-+	select PCI_MSI
-+	select PPC4xx_MSI
-+	select PPC4xx_PCI_EXPRESS
-+	select IBM_EMAC_RGMII
-+	select 460EX
-+	help
-+	  This option enables support for the Netgear WNDR4700/WNDR4720 board.
-+
- config XILINX_VIRTEX440_GENERIC_BOARD
- 	bool "Generic Xilinx Virtex 5 FXT board support"
- 	depends on 44x
diff --git a/target/linux/apm821xx/patches-4.14/203-add-meraki-mx60-buckminster-support.patch b/target/linux/apm821xx/patches-4.14/203-add-meraki-mx60-buckminster-support.patch
deleted file mode 100644
index c3931c98099..00000000000
--- a/target/linux/apm821xx/patches-4.14/203-add-meraki-mx60-buckminster-support.patch
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/arch/powerpc/platforms/44x/Kconfig
-+++ b/arch/powerpc/platforms/44x/Kconfig
-@@ -31,6 +31,19 @@ config BLUESTONE
- 	help
- 	  This option enables support for the APM APM821xx Evaluation board.
- 
-+config BUCKMINSTER
-+	bool "Buckminster"
-+	depends on 44x
-+	default n
-+	select APM821xx
-+	select PCI_MSI
-+	select PPC4xx_MSI
-+	select PPC4xx_PCI_EXPRESS
-+	select IBM_EMAC_RGMII
-+	select 460EX
-+	help
-+	  This option enables support for the Cisco Meraki MX60/MX60W (Buckminster) Security Appliance
-+
- config EBONY
- 	bool "Ebony"
- 	depends on 44x
---- a/arch/powerpc/platforms/44x/ppc44x_simple.c
-+++ b/arch/powerpc/platforms/44x/ppc44x_simple.c
-@@ -63,6 +63,7 @@ static char *board[] __initdata = {
- 	"amcc,sequoia",
- 	"amcc,taishan",
- 	"amcc,yosemite",
-+	"meraki,buckminster",
- 	"meraki,ikarem",
- 	"mosaixtech,icon"
- };
diff --git a/target/linux/apm821xx/patches-4.14/300-fix-atheros-nics-on-apm82181.patch b/target/linux/apm821xx/patches-4.14/300-fix-atheros-nics-on-apm82181.patch
deleted file mode 100644
index 110726d258a..00000000000
--- a/target/linux/apm821xx/patches-4.14/300-fix-atheros-nics-on-apm82181.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- a/arch/powerpc/platforms/4xx/pci.c
-+++ b/arch/powerpc/platforms/4xx/pci.c
-@@ -1060,15 +1060,24 @@ static int __init apm821xx_pciex_init_po
- 	u32 val;
- 
- 	/*
--	 * Do a software reset on PCIe ports.
--	 * This code is to fix the issue that pci drivers doesn't re-assign
--	 * bus number for PCIE devices after Uboot
--	 * scanned and configured all the buses (eg. PCIE NIC IntelPro/1000
--	 * PT quad port, SAS LSI 1064E)
-+	 * Only reset the PHY when no link is currently established.
-+	 * This is for the Atheros PCIe board which has problems to establish
-+	 * the link (again) after this PHY reset. All other currently tested
-+	 * PCIe boards don't show this problem.
- 	 */
--
--	mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x0);
--	mdelay(10);
-+	val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
-+	if (!(val & 0x00001000)) {
-+		/*
-+		 * Do a software reset on PCIe ports.
-+		 * This code is to fix the issue that pci drivers doesn't re-assign
-+		 * bus number for PCIE devices after Uboot
-+		 * scanned and configured all the buses (eg. PCIE NIC IntelPro/1000
-+		 * PT quad port, SAS LSI 1064E)
-+		 */
-+
-+		mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x0);
-+		mdelay(10);
-+	}
- 
- 	if (port->endpoint)
- 		val = PTYPE_LEGACY_ENDPOINT << 20;
-@@ -1085,9 +1094,12 @@ static int __init apm821xx_pciex_init_po
- 	mtdcri(SDR0, PESDR0_460EX_L0DRV, 0x00000130);
- 	mtdcri(SDR0, PESDR0_460EX_L0CLK, 0x00000006);
- 
--	mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x10000000);
--	mdelay(50);
--	mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x30000000);
-+	val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
-+	if (!(val & 0x00001000)) {
-+		mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x10000000);
-+		mdelay(50);
-+		mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST, 0x30000000);
-+	}
- 
- 	mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
- 		mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) |
diff --git a/target/linux/apm821xx/patches-4.14/301-fix-memory-map-wndr4700.patch b/target/linux/apm821xx/patches-4.14/301-fix-memory-map-wndr4700.patch
deleted file mode 100644
index 6eb04b2c251..00000000000
--- a/target/linux/apm821xx/patches-4.14/301-fix-memory-map-wndr4700.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/arch/powerpc/platforms/4xx/pci.c
-+++ b/arch/powerpc/platforms/4xx/pci.c
-@@ -1905,9 +1905,9 @@ static void __init ppc4xx_configure_pcie
- 		 * if it works
- 		 */
- 		out_le32(mbase + PECFG_PIM0LAL, 0x00000000);
--		out_le32(mbase + PECFG_PIM0LAH, 0x00000000);
-+		out_le32(mbase + PECFG_PIM0LAH, 0x00000008);
- 		out_le32(mbase + PECFG_PIM1LAL, 0x00000000);
--		out_le32(mbase + PECFG_PIM1LAH, 0x00000000);
-+		out_le32(mbase + PECFG_PIM1LAH, 0x0000000c);
- 		out_le32(mbase + PECFG_PIM01SAH, 0xffff0000);
- 		out_le32(mbase + PECFG_PIM01SAL, 0x00000000);
- 
diff --git a/target/linux/apm821xx/patches-4.14/302-0001-dt-bindings-add-protection-control-property.patch b/target/linux/apm821xx/patches-4.14/302-0001-dt-bindings-add-protection-control-property.patch
deleted file mode 100644
index 72297bc6556..00000000000
--- a/target/linux/apm821xx/patches-4.14/302-0001-dt-bindings-add-protection-control-property.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From bc183b1da77d6e2fbc801327a1811d446d34f54f Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 31 Oct 2018 22:20:46 +0100
-Subject: [PATCH 1/2] dt-bindings: add protection control property
-
-This patch adds the protection control property and
-dt-binding definitions for the DesignWare AHB Central
-Direct Memory Access Controller.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- include/dt-bindings/dma/dw-dmac.h             | 20 +++++++++++++++++++
- 1 files changed, 20 insertions(+), 0 deletion(-)
- create mode 100644 include/dt-bindings/dma/dw-dmac.h
-
---- /dev/null
-+++ b/include/dt-bindings/dma/dw-dmac.h
-@@ -0,0 +1,20 @@
-+/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
-+
-+#ifndef __DT_BINDINGS_DMA_DW_DMAC_H__
-+#define __DT_BINDINGS_DMA_DW_DMAC_H__
-+
-+#define DW_DMAC_CHAN_ALLOCATION_ASCENDING       0       /* zero to seven */
-+#define DW_DMAC_CHAN_ALLOCATION_DESCENDING      1       /* seven to zero */
-+#define DW_DMAC_CHAN_PRIORITY_ASCENDING         0       /* chan0 highest */
-+#define DW_DMAC_CHAN_PRIORITY_DESCENDING        1       /* chan7 highest */
-+
-+/*
-+ * Protection Control bits provide protection against illegal transactions.
-+ * The protection bits[0:2] are one-to-one mapped to AHB HPROT[3:1] signals.
-+ * The AHB HPROT[0] bit is hardwired to 1: Data Access.
-+ */
-+#define DW_DMAC_HPROT1_PRIVILEGED_MODE	(1 << 0)	/* Privileged Mode */
-+#define DW_DMAC_HPROT2_BUFFERABLE	(1 << 1)	/* DMA is bufferable */
-+#define DW_DMAC_HPROT3_CACHEABLE	(1 << 2)	/* DMA is cacheable */
-+
-+#endif /* __DT_BINDINGS_DMA_DW_DMAC_H__ */
diff --git a/target/linux/apm821xx/patches-4.14/701-powerpc_ibm_apm82181_phyclk_fix.patch b/target/linux/apm821xx/patches-4.14/701-powerpc_ibm_apm82181_phyclk_fix.patch
deleted file mode 100644
index ced284ee3b2..00000000000
--- a/target/linux/apm821xx/patches-4.14/701-powerpc_ibm_apm82181_phyclk_fix.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- a/drivers/net/ethernet/ibm/emac/core.c
-+++ b/drivers/net/ethernet/ibm/emac/core.c
-@@ -130,6 +130,7 @@ static inline void emac_report_timeout_e
- {
- 	if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX |
- 				  EMAC_FTR_460EX_PHY_CLK_FIX |
-+				  EMAC_FTR_APM821XX_PHY_CLK_FIX |
- 				  EMAC_FTR_440EP_PHY_CLK_FIX))
- 		DBG(dev, "%s" NL, error);
- 	else if (net_ratelimit())
-@@ -146,6 +147,10 @@ static inline void emac_rx_clk_tx(struct
- 	if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
- 		dcri_clrset(SDR0, SDR0_MFR,
- 			    0, SDR0_MFR_ECS >> dev->cell_index);
-+
-+	if (emac_has_feature(dev, EMAC_FTR_APM821XX_PHY_CLK_FIX))
-+                dcri_clrset(SDR0, SDR0_ETH_CFG,
-+                        0, 0x00000100 >> dev->cell_index);
- #endif
- }
- 
-@@ -155,6 +160,10 @@ static inline void emac_rx_clk_default(s
- 	if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
- 		dcri_clrset(SDR0, SDR0_MFR,
- 			    SDR0_MFR_ECS >> dev->cell_index, 0);
-+
-+	if (emac_has_feature(dev, EMAC_FTR_APM821XX_PHY_CLK_FIX))
-+		dcri_clrset(SDR0, SDR0_ETH_CFG,
-+			    0x00000100 >> dev->cell_index, 0);
- #endif
- }
- 
-@@ -2884,6 +2893,7 @@ static int emac_init_config(struct emac_
- 		if (of_device_is_compatible(np, "ibm,emac-apm821xx")) {
- 			dev->features |= (EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE |
- 					  EMAC_FTR_APM821XX_NO_HALF_DUPLEX |
-+					  EMAC_FTR_APM821XX_PHY_CLK_FIX |
- 					  EMAC_FTR_460EX_PHY_CLK_FIX);
- 		}
- 	} else if (of_device_is_compatible(np, "ibm,emac4")) {
---- a/drivers/net/ethernet/ibm/emac/core.h
-+++ b/drivers/net/ethernet/ibm/emac/core.h
-@@ -335,6 +335,8 @@ struct emac_instance {
-  */
- #define EMAC_FTR_APM821XX_NO_HALF_DUPLEX	0x00001000
- 
-+#define EMAC_FTR_APM821XX_PHY_CLK_FIX	0x000002000
-+
- /* Right now, we don't quite handle the always/possible masks on the
-  * most optimal way as we don't have a way to say something like
-  * always EMAC4. Patches welcome.
diff --git a/target/linux/apm821xx/patches-4.14/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch b/target/linux/apm821xx/patches-4.14/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch
deleted file mode 100644
index 892cdaef338..00000000000
--- a/target/linux/apm821xx/patches-4.14/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch
+++ /dev/null
@@ -1,545 +0,0 @@
-From 419992bae5aaa4e06402e0b7c79fcf7bcb6b4764 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@googlemail.com>
-Date: Thu, 2 Jun 2016 00:48:46 +0200
-Subject: [PATCH] usb: xhci: add firmware loader for uPD720201 and uPD720202
- w/o ROM
-
-This patch adds a firmware loader for the uPD720201K8-711-BAC-A
-and uPD720202K8-711-BAA-A variant. Both of these chips are listed
-in Renesas' R19UH0078EJ0500 Rev.5.00 "User's Manual: Hardware" as
-devices which need the firmware loader on page 2 in order to
-work as they "do not support the External ROM".
-
-The "Firmware Download Sequence" is describe in chapter
-"7.1 FW Download Interface" R19UH0078EJ0500 Rev.5.00 page 131.
-
-The firmware "K2013080.mem" is available from a USB3.0 Host to
-PCIe Adapter (PP2U-E card) "Firmware download" archive. An
-alternative version can be sourced from Netgear's WNDR4700 GPL
-archives.
-
-The release notes of the PP2U-E's "Firmware Download" ver 2.0.1.3
-(2012-06-15) state that the firmware is for the following devices:
- - uPD720201 ES 2.0 sample whose revision ID is 2.
- - uPD720201 ES 2.1 sample & CS sample & Mass product, ID is 3.
- - uPD720202 ES 2.0 sample & CS sample & Mass product, ID is 2.
-
-If someone from Renesas is listening: It would be great, if these
-firmwares could be added to linux-firmware.git.
-
-Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
-Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
----
- drivers/usb/host/xhci-pci.c | 492 ++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 492 insertions(+)
-
---- a/drivers/usb/host/xhci-pci.c
-+++ b/drivers/usb/host/xhci-pci.c
-@@ -24,6 +24,8 @@
- #include <linux/slab.h>
- #include <linux/module.h>
- #include <linux/acpi.h>
-+#include <linux/firmware.h>
-+#include <asm/unaligned.h>
- 
- #include "xhci.h"
- #include "xhci-trace.h"
-@@ -268,6 +270,458 @@ static void xhci_pme_acpi_rtd3_enable(st
- static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
- #endif /* CONFIG_ACPI */
- 
-+static const struct renesas_fw_entry {
-+	const char *firmware_name;
-+	u16 device;
-+	u8 revision;
-+	u16 expected_version;
-+} renesas_fw_table[] = {
-+	/*
-+	 * Only the uPD720201K8-711-BAC-A or uPD720202K8-711-BAA-A
-+	 * are listed in R19UH0078EJ0500 Rev.5.00 as devices which
-+	 * need the software loader.
-+	 *
-+	 * PP2U/ReleaseNote_USB3-201-202-FW.txt:
-+	 *
-+	 * Note: This firmware is for the following devices.
-+	 *  - uPD720201 ES 2.0 sample whose revision ID is 2.
-+	 *  - uPD720201 ES 2.1 sample & CS sample & Mass product, ID is 3.
-+	 *  - uPD720202 ES 2.0 sample & CS sample & Mass product, ID is 2.
-+	 */
-+	{ "K2013080.mem", 0x0014, 0x02, 0x2013 },
-+	{ "K2013080.mem", 0x0014, 0x03, 0x2013 },
-+	{ "K2013080.mem", 0x0015, 0x02, 0x2013 },
-+};
-+
-+static const struct renesas_fw_entry *renesas_needs_fw_dl(struct pci_dev *dev)
-+{
-+	const struct renesas_fw_entry *entry;
-+	size_t i;
-+
-+	/* This loader will only work with a RENESAS device. */
-+	if (!(dev->vendor == PCI_VENDOR_ID_RENESAS))
-+		return NULL;
-+
-+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
-+		entry = &renesas_fw_table[i];
-+		if (entry->device == dev->device &&
-+		    entry->revision == dev->revision)
-+			return entry;
-+	}
-+
-+	return NULL;
-+}
-+
-+static int renesas_fw_download_image(struct pci_dev *dev,
-+				     const u32 *fw,
-+				     size_t step)
-+{
-+	size_t i;
-+	int err;
-+	u8 fw_status;
-+	bool data0_or_data1;
-+
-+	/*
-+	 * The hardware does alternate between two 32-bit pages.
-+	 * (This is because each row of the firmware is 8 bytes).
-+	 *
-+	 * for even steps we use DATA0, for odd steps DATA1.
-+	 */
-+	data0_or_data1 = (step & 1) == 1;
-+
-+	/* step+1. Read "Set DATAX" and confirm it is cleared. */
-+	for (i = 0; i < 10000; i++) {
-+		err = pci_read_config_byte(dev, 0xF5, &fw_status);
-+		if (err)
-+			return pcibios_err_to_errno(err);
-+		if (!(fw_status & BIT(data0_or_data1)))
-+			break;
-+
-+		udelay(1);
-+	}
-+	if (i == 10000)
-+		return -ETIMEDOUT;
-+
-+	/*
-+	 * step+2. Write FW data to "DATAX".
-+	 * "LSB is left" => force little endian
-+	 */
-+	err = pci_write_config_dword(dev, data0_or_data1 ? 0xFC : 0xF8,
-+				     (__force u32) cpu_to_le32(fw[step]));
-+	if (err)
-+		return pcibios_err_to_errno(err);
-+
-+	udelay(100);
-+
-+	/* step+3. Set "Set DATAX". */
-+	err = pci_write_config_byte(dev, 0xF5, BIT(data0_or_data1));
-+	if (err)
-+		return pcibios_err_to_errno(err);
-+
-+	return 0;
-+}
-+
-+static int renesas_fw_verify(struct pci_dev *dev,
-+			     const void *fw_data,
-+			     size_t length)
-+{
-+	const struct renesas_fw_entry *entry = renesas_needs_fw_dl(dev);
-+	u16 fw_version_pointer;
-+	u16 fw_version;
-+
-+	if (!entry)
-+		return -EINVAL;
-+
-+	/*
-+	 * The Firmware's Data Format is describe in
-+	 * "6.3 Data Format" R19UH0078EJ0500 Rev.5.00 page 124
-+	 */
-+
-+	/* "Each row is 8 bytes". => firmware size must be a multiple of 8. */
-+	if (length % 8 != 0) {
-+		dev_err(&dev->dev, "firmware size is not a multipe of 8.");
-+		return -EINVAL;
-+	}
-+
-+	/*
-+	 * The bootrom chips of the big brother have sizes up to 64k, let's
-+	 * assume that's the biggest the firmware can get.
-+	 */
-+	if (length < 0x1000 || length >= 0x10000) {
-+		dev_err(&dev->dev, "firmware is size %zd is not (4k - 64k).",
-+			length);
-+		return -EINVAL;
-+	}
-+
-+	/* The First 2 bytes are fixed value (55aa). "LSB on Left" */
-+	if (get_unaligned_le16(fw_data) != 0x55aa) {
-+		dev_err(&dev->dev, "no valid firmware header found.");
-+		return -EINVAL;
-+	}
-+
-+	/* verify the firmware version position and print it. */
-+	fw_version_pointer = get_unaligned_le16(fw_data + 4);
-+	if (fw_version_pointer + 2 >= length) {
-+		dev_err(&dev->dev, "firmware version pointer is outside of the firmware image.");
-+		return -EINVAL;
-+	}
-+
-+	fw_version = get_unaligned_le16(fw_data + fw_version_pointer);
-+	dev_dbg(&dev->dev, "got firmware version: %02x.", fw_version);
-+
-+	if (fw_version != entry->expected_version) {
-+		dev_err(&dev->dev, "firmware version mismatch, expected version: %02x.",
-+			 entry->expected_version);
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+static int renesas_fw_check_running(struct pci_dev *pdev)
-+{
-+	int err;
-+	u8 fw_state;
-+
-+	/*
-+	 * Test if the device is actually needing the firmware. As most
-+	 * BIOSes will initialize the device for us. If the device is
-+	 * initialized.
-+	 */
-+	err = pci_read_config_byte(pdev, 0xF4, &fw_state);
-+	if (err)
-+		return pcibios_err_to_errno(err);
-+
-+	/*
-+	 * Check if "FW Download Lock" is locked. If it is and the FW is
-+	 * ready we can simply continue. If the FW is not ready, we have
-+	 * to give up.
-+	 */
-+	if (fw_state & BIT(1)) {
-+		dev_dbg(&pdev->dev, "FW Download Lock is engaged.");
-+
-+		if (fw_state & BIT(4))
-+			return 0;
-+
-+		dev_err(&pdev->dev, "FW Download Lock is set and FW is not ready. Giving Up.");
-+		return -EIO;
-+	}
-+
-+	/*
-+	 * Check if "FW Download Enable" is set. If someone (us?) tampered
-+	 * with it and it can't be resetted, we have to give up too... and
-+	 * ask for a forgiveness and a reboot.
-+	 */
-+	if (fw_state & BIT(0)) {
-+		dev_err(&pdev->dev, "FW Download Enable is stale. Giving Up (poweroff/reboot needed).");
-+		return -EIO;
-+	}
-+
-+	/* Otherwise, Check the "Result Code" Bits (6:4) and act accordingly */
-+	switch ((fw_state & 0x70)) {
-+	case 0: /* No result yet */
-+		dev_dbg(&pdev->dev, "FW is not ready/loaded yet.");
-+
-+		/* tell the caller, that this device needs the firmware. */
-+		return 1;
-+
-+	case BIT(4): /* Success, device should be working. */
-+		dev_dbg(&pdev->dev, "FW is ready.");
-+		return 0;
-+
-+	case BIT(5): /* Error State */
-+		dev_err(&pdev->dev, "hardware is in an error state. Giving up (poweroff/reboot needed).");
-+		return -ENODEV;
-+
-+	default: /* All other states are marked as "Reserved states" */
-+		dev_err(&pdev->dev, "hardware is in an invalid state %x. Giving up (poweroff/reboot needed).",
-+			(fw_state & 0x70) >> 4);
-+		return -EINVAL;
-+	}
-+}
-+
-+static int renesas_hw_check_run_stop_busy(struct pci_dev *pdev)
-+{
-+#if 0
-+	u32 val;
-+
-+	/*
-+	 * 7.1.3 Note 3: "... must not set 'FW Download Enable' when
-+	 * 'RUN/STOP' of USBCMD Register is set"
-+	 */
-+	val = readl(hcd->regs + 0x20);
-+	if (val & BIT(0)) {
-+		dev_err(&pdev->dev, "hardware is busy and can't receive a FW.");
-+		return -EBUSY;
-+	}
-+#endif
-+	return 0;
-+}
-+
-+static int renesas_fw_download(struct pci_dev *pdev,
-+	const struct firmware *fw, unsigned int retry_counter)
-+{
-+	const u32 *fw_data = (const u32 *) fw->data;
-+	size_t i;
-+	int err;
-+	u8 fw_status;
-+
-+	/*
-+	 * For more information and the big picture: please look at the
-+	 * "Firmware Download Sequence" in "7.1 FW Download Interface"
-+	 * of R19UH0078EJ0500 Rev.5.00 page 131
-+	 */
-+	err = renesas_hw_check_run_stop_busy(pdev);
-+	if (err)
-+		return err;
-+
-+	/*
-+	 * 0. Set "FW Download Enable" bit in the
-+	 * "FW Download Control & Status Register" at 0xF4
-+	 */
-+	err = pci_write_config_byte(pdev, 0xF4, BIT(0));
-+	if (err)
-+		return pcibios_err_to_errno(err);
-+
-+	/* 1 - 10 follow one step after the other. */
-+	for (i = 0; i < fw->size / 4; i++) {
-+		err = renesas_fw_download_image(pdev, fw_data, i);
-+		if (err) {
-+			dev_err(&pdev->dev, "Firmware Download Step %zd failed at position %zd bytes with (%d).",
-+				 i, i * 4, err);
-+			return err;
-+		}
-+	}
-+
-+	/*
-+	 * This sequence continues until the last data is written to
-+	 * "DATA0" or "DATA1". Naturally, we wait until "SET DATA0/1"
-+	 * is cleared by the hardware beforehand.
-+	 */
-+	for (i = 0; i < 10000; i++) {
-+		err = pci_read_config_byte(pdev, 0xF5, &fw_status);
-+		if (err)
-+			return pcibios_err_to_errno(err);
-+		if (!(fw_status & (BIT(0) | BIT(1))))
-+			break;
-+
-+		udelay(1);
-+	}
-+	if (i == 10000)
-+		dev_warn(&pdev->dev, "Final Firmware Download step timed out.");
-+
-+	/*
-+	 * 11. After finishing writing the last data of FW, the
-+	 * System Software must clear "FW Download Enable"
-+	 */
-+	err = pci_write_config_byte(pdev, 0xF4, 0);
-+	if (err)
-+		return pcibios_err_to_errno(err);
-+
-+	/* 12. Read "Result Code" and confirm it is good. */
-+	for (i = 0; i < 10000; i++) {
-+		err = pci_read_config_byte(pdev, 0xF4, &fw_status);
-+		if (err)
-+			return pcibios_err_to_errno(err);
-+		if (fw_status & BIT(4))
-+			break;
-+
-+		udelay(1);
-+	}
-+	if (i == 10000) {
-+		/* Timed out / Error - let's see if we can fix this */
-+		err = renesas_fw_check_running(pdev);
-+		switch (err) {
-+		case 0: /*
-+			 * we shouldn't end up here.
-+			 * maybe it took a little bit longer.
-+			 * But all should be well?
-+			 */
-+			break;
-+
-+		case 1: /* (No result yet? - we can try to retry) */
-+			if (retry_counter < 10) {
-+				retry_counter++;
-+				dev_warn(&pdev->dev, "Retry Firmware download: %d try.",
-+					  retry_counter);
-+				return renesas_fw_download(pdev, fw,
-+							   retry_counter);
-+			}
-+			return -ETIMEDOUT;
-+
-+		default:
-+			return err;
-+		}
-+	}
-+	/*
-+	 * Optional last step: Engage Firmware Lock
-+	 *
-+	 * err = pci_write_config_byte(pdev, 0xF4, BIT(2));
-+	 * if (err)
-+	 *	return pcibios_err_to_errno(err);
-+	 */
-+
-+	return 0;
-+}
-+
-+struct renesas_fw_ctx {
-+	struct pci_dev *pdev;
-+	const struct pci_device_id *id;
-+	bool resume;
-+};
-+
-+static int xhci_pci_probe(struct pci_dev *pdev,
-+			  const struct pci_device_id *id);
-+
-+static void renesas_fw_callback(const struct firmware *fw,
-+				void *context)
-+{
-+	struct renesas_fw_ctx *ctx = context;
-+	struct pci_dev *pdev = ctx->pdev;
-+	struct device *parent = pdev->dev.parent;
-+	int err = -ENOENT;
-+
-+	if (fw) {
-+		err = renesas_fw_verify(pdev, fw->data, fw->size);
-+		if (!err) {
-+			err = renesas_fw_download(pdev, fw, 0);
-+			release_firmware(fw);
-+			if (!err) {
-+				if (ctx->resume)
-+					return;
-+
-+				err = xhci_pci_probe(pdev, ctx->id);
-+				if (!err) {
-+					/* everything worked */
-+					devm_kfree(&pdev->dev, ctx);
-+					return;
-+				}
-+
-+				/* in case of an error - fall through */
-+			} else {
-+				dev_err(&pdev->dev, "firmware failed to download (%d).",
-+					err);
-+			}
-+		}
-+	} else {
-+		dev_err(&pdev->dev, "firmware failed to load (%d).", err);
-+	}
-+
-+	dev_info(&pdev->dev, "Unloading driver");
-+
-+	if (parent)
-+		device_lock(parent);
-+
-+	device_release_driver(&pdev->dev);
-+
-+	if (parent)
-+		device_unlock(parent);
-+
-+	pci_dev_put(pdev);
-+}
-+
-+static int renesas_fw_alive_check(struct pci_dev *pdev)
-+{
-+	const struct renesas_fw_entry *entry;
-+	int err;
-+
-+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
-+	entry = renesas_needs_fw_dl(pdev);
-+	if (!entry)
-+		return 0;
-+
-+	err = renesas_fw_check_running(pdev);
-+	/* Also go ahead, if the firmware is running */
-+	if (err == 0)
-+		return 0;
-+
-+	/* At this point, we can be sure that the FW isn't ready. */
-+	return err;
-+}
-+
-+static int renesas_fw_download_to_hw(struct pci_dev *pdev,
-+				     const struct pci_device_id *id,
-+				     bool do_resume)
-+{
-+	const struct renesas_fw_entry *entry;
-+	struct renesas_fw_ctx *ctx;
-+	int err;
-+
-+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
-+	entry = renesas_needs_fw_dl(pdev);
-+	if (!entry)
-+		return 0;
-+
-+	err = renesas_fw_check_running(pdev);
-+	/* Continue ahead, if the firmware is already running. */
-+	if (err == 0)
-+		return 0;
-+
-+	if (err != 1)
-+		return err;
-+
-+	ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
-+	if (!ctx)
-+		return -ENOMEM;
-+	ctx->pdev = pdev;
-+	ctx->resume = do_resume;
-+	ctx->id = id;
-+
-+	pci_dev_get(pdev);
-+	err = request_firmware_nowait(THIS_MODULE, 1, entry->firmware_name,
-+		&pdev->dev, GFP_KERNEL, ctx, renesas_fw_callback);
-+	if (err) {
-+		pci_dev_put(pdev);
-+		return err;
-+	}
-+
-+	/*
-+	 * The renesas_fw_callback() callback will continue the probe
-+	 * process, once it aquires the firmware.
-+	 */
-+	return 1;
-+}
-+
- /* called during probe() after chip reset completes */
- static int xhci_pci_setup(struct usb_hcd *hcd)
- {
-@@ -306,6 +760,22 @@ static int xhci_pci_probe(struct pci_dev
- 	struct hc_driver *driver;
- 	struct usb_hcd *hcd;
- 
-+	/*
-+	 * Check if this device is a RENESAS uPD720201/2 device.
-+	 * Otherwise, we can continue with xhci_pci_probe as usual.
-+	 */
-+	retval = renesas_fw_download_to_hw(dev, id, false);
-+	switch (retval) {
-+	case 0:
-+		break;
-+
-+	case 1: /* let it load the firmware and recontinue the probe. */
-+		return 0;
-+
-+	default:
-+		return retval;
-+	}
-+
- 	driver = (struct hc_driver *)id->driver_data;
- 
- 	/* For some HW implementation, a XHCI reset is just not enough... */
-@@ -367,6 +837,16 @@ static void xhci_pci_remove(struct pci_d
- {
- 	struct xhci_hcd *xhci;
- 
-+	if (renesas_fw_alive_check(dev)) {
-+		/*
-+		 * bail out early, if this was a renesas device w/o FW.
-+		 * Else we might hit the NMI watchdog in xhci_handsake
-+		 * during xhci_reset as part of the driver's unloading.
-+		 * which we forced in the renesas_fw_callback().
-+		 */
-+		return;
-+	}
-+
- 	xhci = hcd_to_xhci(pci_get_drvdata(dev));
- 	xhci->xhc_state |= XHCI_STATE_REMOVING;
- 	if (xhci->shared_hcd) {
diff --git a/target/linux/apm821xx/patches-4.14/802-usb-xhci-force-msi-renesas-xhci.patch b/target/linux/apm821xx/patches-4.14/802-usb-xhci-force-msi-renesas-xhci.patch
deleted file mode 100644
index c7315f9b8ba..00000000000
--- a/target/linux/apm821xx/patches-4.14/802-usb-xhci-force-msi-renesas-xhci.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From a0dc613140bab907a3d5787a7ae7b0638bf674d0 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Thu, 23 Jun 2016 20:28:20 +0200
-Subject: [PATCH] usb: xhci: force MSI for uPD720201 and
- uPD720202
-
-The APM82181 does not support MSI-X. When probed, it will
-produce a noisy warning.
-
----
- drivers/usb/host/pci-quirks.c | 362 ++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 362 insertions(+)
-
---- a/drivers/usb/host/xhci-pci.c
-+++ b/drivers/usb/host/xhci-pci.c
-@@ -221,7 +221,7 @@ static void xhci_pci_quirks(struct devic
- 		xhci->quirks |= XHCI_TRUST_TX_LENGTH;
- 	if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
- 			pdev->device == 0x0015)
--		xhci->quirks |= XHCI_RESET_ON_RESUME;
-+		xhci->quirks |= XHCI_RESET_ON_RESUME | XHCI_FORCE_MSI;
- 	if (pdev->vendor == PCI_VENDOR_ID_VIA)
- 		xhci->quirks |= XHCI_RESET_ON_RESUME;
- 
---- a/drivers/usb/host/xhci.c
-+++ b/drivers/usb/host/xhci.c
-@@ -370,10 +370,14 @@ static int xhci_try_enable_msi(struct us
- 		free_irq(hcd->irq, hcd);
- 	hcd->irq = 0;
- 
--	ret = xhci_setup_msix(xhci);
--	if (ret)
--		/* fall back to msi*/
-+	if (xhci->quirks & XHCI_FORCE_MSI) {
- 		ret = xhci_setup_msi(xhci);
-+	} else {
-+		ret = xhci_setup_msix(xhci);
-+		if (ret)
-+			/* fall back to msi*/
-+			ret = xhci_setup_msi(xhci);
-+	}
- 
- 	if (!ret) {
- 		hcd->msi_enabled = 1;
---- a/drivers/usb/host/xhci.h
-+++ b/drivers/usb/host/xhci.h
-@@ -1858,6 +1858,7 @@ struct xhci_hcd {
- 	/* support xHCI 0.96 spec USB2 software LPM */
- 	unsigned		sw_lpm_support:1;
- 	/* support xHCI 1.0 spec USB2 hardware LPM */
-+#define XHCI_FORCE_MSI		(1 << 24)
- 	unsigned		hw_lpm_support:1;
- 	/* Broken Suspend flag for SNPS Suspend resume issue */
- 	unsigned		broken_suspend:1;
diff --git a/target/linux/apm821xx/patches-4.14/803-hwmon-tc654-add-detection-routine.patch b/target/linux/apm821xx/patches-4.14/803-hwmon-tc654-add-detection-routine.patch
deleted file mode 100644
index f8b30ae1b33..00000000000
--- a/target/linux/apm821xx/patches-4.14/803-hwmon-tc654-add-detection-routine.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 694f9bfb8efaef8a33e8992015ff9d0866faf4a2 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sun, 17 Dec 2017 17:27:15 +0100
-Subject: [PATCH 1/2] hwmon: tc654 add detection routine
-
-This patch adds a detection routine for the TC654/TC655
-chips.  Both IDs are listed in the Datasheet.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/hwmon/tc654.c | 29 +++++++++++++++++++++++++++++
- 1 file changed, 29 insertions(+)
-
---- a/drivers/hwmon/tc654.c
-+++ b/drivers/hwmon/tc654.c
-@@ -64,6 +64,11 @@ enum tc654_regs {
- /* Register data is read (and cached) at most once per second. */
- #define TC654_UPDATE_INTERVAL		HZ
- 
-+/* Manufacturer and Version Identification Register Values */
-+#define TC654_MFR_ID_MICROCHIP		0x84
-+#define TC654_VER_ID			0x00
-+#define TC655_VER_ID			0x01
-+
- struct tc654_data {
- 	struct i2c_client *client;
- 
-@@ -497,6 +502,29 @@ static const struct i2c_device_id tc654_
- 	{}
- };
- 
-+static int
-+tc654_detect(struct i2c_client *new_client, struct i2c_board_info *info)
-+{
-+	struct i2c_adapter *adapter = new_client->adapter;
-+	int manufacturer, product;
-+
-+	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
-+		return -ENODEV;
-+
-+	manufacturer = i2c_smbus_read_byte_data(new_client, TC654_REG_MFR_ID);
-+	if (manufacturer != TC654_MFR_ID_MICROCHIP)
-+		return -ENODEV;
-+
-+	product = i2c_smbus_read_byte_data(new_client, TC654_REG_VER_ID);
-+	if (!((product == TC654_VER_ID) || (product == TC655_VER_ID)))
-+		return -ENODEV;
-+
-+	strlcpy(info->type, product == TC654_VER_ID ? "tc654" : "tc655",
-+		I2C_NAME_SIZE);
-+	return 0;
-+}
-+
-+
- MODULE_DEVICE_TABLE(i2c, tc654_id);
- 
- static struct i2c_driver tc654_driver = {
-@@ -505,6 +533,7 @@ static struct i2c_driver tc654_driver =
- 		   },
- 	.probe = tc654_probe,
- 	.id_table = tc654_id,
-+	.detect = tc654_detect,
- };
- 
- module_i2c_driver(tc654_driver);
diff --git a/target/linux/apm821xx/patches-4.14/804-hwmon-tc654-add-thermal_cooling-device.patch b/target/linux/apm821xx/patches-4.14/804-hwmon-tc654-add-thermal_cooling-device.patch
deleted file mode 100644
index 18ed8aecce4..00000000000
--- a/target/linux/apm821xx/patches-4.14/804-hwmon-tc654-add-thermal_cooling-device.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From 15ae701189744d321d3a1264ff46f8871e8765ee Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sun, 17 Dec 2017 17:29:13 +0100
-Subject: [PATCH] hwmon: tc654: add thermal_cooling device
-
-This patch adds a thermaL_cooling device to the tc654 driver.
-This allows the chip to be used for DT-based cooling.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
- drivers/hwmon/tc654.c | 103 +++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 86 insertions(+), 17 deletions(-)
-
---- a/drivers/hwmon/tc654.c
-+++ b/drivers/hwmon/tc654.c
-@@ -24,6 +24,7 @@
- #include <linux/module.h>
- #include <linux/mutex.h>
- #include <linux/slab.h>
-+#include <linux/thermal.h>
- #include <linux/util_macros.h>
- 
- enum tc654_regs {
-@@ -141,6 +142,9 @@ struct tc654_data {
- 			 * writable register used to control the duty
- 			 * cycle of the V OUT output.
- 			 */
-+
-+	/* optional cooling device */
-+	struct thermal_cooling_device *cdev;
- };
- 
- /* helper to grab and cache data, at most one time per second */
-@@ -376,36 +380,30 @@ static ssize_t set_pwm_mode(struct devic
- static const int tc654_pwm_map[16] = { 77,  88, 102, 112, 124, 136, 148, 160,
- 				      172, 184, 196, 207, 219, 231, 243, 255};
- 
-+static int get_pwm(struct tc654_data *data)
-+{
-+	if (data->config & TC654_REG_CONFIG_SDM)
-+		return 0;
-+	else
-+		return tc654_pwm_map[data->duty_cycle];
-+}
-+
- static ssize_t show_pwm(struct device *dev, struct device_attribute *da,
- 			char *buf)
- {
- 	struct tc654_data *data = tc654_update_client(dev);
--	int pwm;
- 
- 	if (IS_ERR(data))
- 		return PTR_ERR(data);
- 
--	if (data->config & TC654_REG_CONFIG_SDM)
--		pwm = 0;
--	else
--		pwm = tc654_pwm_map[data->duty_cycle];
--
--	return sprintf(buf, "%d\n", pwm);
-+	return sprintf(buf, "%d\n", get_pwm(data));
- }
- 
--static ssize_t set_pwm(struct device *dev, struct device_attribute *da,
--		       const char *buf, size_t count)
-+static int _set_pwm(struct tc654_data *data, unsigned long val)
- {
--	struct tc654_data *data = dev_get_drvdata(dev);
- 	struct i2c_client *client = data->client;
--	unsigned long val;
- 	int ret;
- 
--	if (kstrtoul(buf, 10, &val))
--		return -EINVAL;
--	if (val > 255)
--		return -EINVAL;
--
- 	mutex_lock(&data->update_lock);
- 
- 	if (val == 0)
-@@ -425,6 +423,22 @@ static ssize_t set_pwm(struct device *de
- 
- out:
- 	mutex_unlock(&data->update_lock);
-+	return ret;
-+}
-+
-+static ssize_t set_pwm(struct device *dev, struct device_attribute *da,
-+		       const char *buf, size_t count)
-+{
-+	struct tc654_data *data = dev_get_drvdata(dev);
-+	unsigned long val;
-+	int ret;
-+
-+	if (kstrtoul(buf, 10, &val))
-+		return -EINVAL;
-+	if (val > 255)
-+		return -EINVAL;
-+
-+	ret = _set_pwm(data, val);
- 	return ret < 0 ? ret : count;
- }
- 
-@@ -462,6 +476,47 @@ static struct attribute *tc654_attrs[] =
- 
- ATTRIBUTE_GROUPS(tc654);
- 
-+/* cooling device */
-+
-+static int tc654_get_max_state(struct thermal_cooling_device *cdev,
-+			       unsigned long *state)
-+{
-+	*state = 255;
-+	return 0;
-+}
-+
-+static int tc654_get_cur_state(struct thermal_cooling_device *cdev,
-+                              unsigned long *state)
-+{
-+	struct tc654_data *data = tc654_update_client(cdev->devdata);
-+
-+	if (IS_ERR(data))
-+		return PTR_ERR(data);
-+
-+	*state = get_pwm(data);
-+	return 0;
-+}
-+
-+static int tc654_set_cur_state(struct thermal_cooling_device *cdev,
-+			       unsigned long state)
-+{
-+	struct tc654_data *data = tc654_update_client(cdev->devdata);
-+
-+	if (IS_ERR(data))
-+		return PTR_ERR(data);
-+
-+	if (state > 255)
-+		return -EINVAL;
-+
-+	return _set_pwm(data, state);
-+}
-+
-+static const struct thermal_cooling_device_ops tc654_fan_cool_ops = {
-+	.get_max_state = tc654_get_max_state,
-+	.get_cur_state = tc654_get_cur_state,
-+	.set_cur_state = tc654_set_cur_state,
-+};
-+
- /*
-  * device probe and removal
-  */
-@@ -493,7 +548,21 @@ static int tc654_probe(struct i2c_client
- 	hwmon_dev =
- 	    devm_hwmon_device_register_with_groups(dev, client->name, data,
- 						   tc654_groups);
--	return PTR_ERR_OR_ZERO(hwmon_dev);
-+	if (IS_ERR(hwmon_dev))
-+		return PTR_ERR(hwmon_dev);
-+
-+#if IS_ENABLED(CONFIG_OF)
-+	/* Optional cooling device register for Device tree platforms */
-+	data->cdev = thermal_of_cooling_device_register(client->dev.of_node,
-+							"tc654", hwmon_dev,
-+							&tc654_fan_cool_ops);
-+#else /* CONFIG_OF */
-+	/* Optional cooling device register for non Device tree platforms */
-+	data->cdev = thermal_cooling_device_register("tc654", hwmon_dev,
-+						     &tc654_fan_cool_ops);
-+#endif /* CONFIG_OF */
-+
-+	return PTR_ERR_OR_ZERO(data->cdev);
- }
- 
- static const struct i2c_device_id tc654_id[] = {
-- 
GitLab