apm821xx: 4.14: remove kernel config and patches
authorChristian Lamparter <chunkeey@gmail.com>
Sat, 7 Mar 2020 15:58:32 +0000 (16:58 +0100)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 14 Mar 2020 14:17:32 +0000 (15:17 +0100)
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>
60 files changed:
target/linux/apm821xx/config-4.14 [deleted file]
target/linux/apm821xx/patches-4.14/020-0002-crypto-crypto4xx-remove-unused-definitions-and-write.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0003-crypto-crypto4xx-set-CRYPTO_ALG_KERN_DRIVER_ONLY-fla.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0004-crypto-crypto4xx-remove-extern-statement-before-func.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0005-crypto-crypto4xx-remove-double-assignment-of-pd_uinf.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0006-crypto-crypto4xx-fix-dynamic_sa_ctl-s-sa_contents-de.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0007-crypto-crypto4xx-move-and-refactor-dynamic_contents-.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0008-crypto-crypto4xx-enable-AES-RFC3686-ECB-CFB-and-OFB-.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0009-crypto-crypto4xx-refactor-crypto4xx_copy_pkt_to_dst.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0010-crypto-crypto4xx-replace-crypto4xx_dev-s-scatter_buf.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0012-crypto-crypto4xx-pointer-arithmetic-overhaul.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0013-crypto-crypto4xx-wire-up-hmac_mc-to-hmac_muting.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0014-crypto-crypto4xx-fix-off-by-one-AES-OFB.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0015-crypto-crypto4xx-fix-type-mismatch-compiler-error.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0017-crypto-crypto4xx-add-backlog-queue-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0018-crypto-crypto4xx-use-the-correct-LE32-format-for-IV-.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0020-crypto-crypto4xx-fix-various-warnings.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0021-crypto-crypto4xx-fix-stalls-under-heavy-load.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0022-crypto-crypto4xx-simplify-sa-and-state-context-acqui.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0023-crypto-crypto4xx-prepare-for-AEAD-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0024-crypto-crypto4xx-add-aes-ccm-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/020-0025-crypto-crypto4xx-add-aes-gcm-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/021-0001-crypto-crypto4xx-shuffle-iomap-in-front-of-request_i.patch [deleted file]
target/linux/apm821xx/patches-4.14/021-0002-crypto-crypto4xx-support-Revision-B-parts.patch [deleted file]
target/linux/apm821xx/patches-4.14/021-0003-crypto-crypto4xx-fix-missing-irq-devname.patch [deleted file]
target/linux/apm821xx/patches-4.14/021-0004-crypto-crypto4xx-kill-MODULE_NAME.patch [deleted file]
target/linux/apm821xx/patches-4.14/021-0005-crypto-crypto4xx-perform-aead-icv-check-in-the-drive.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0001-crypto-Use-zeroing-memory-allocator-instead-of-alloc.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0002-crypto-crypto4xx-performance-optimizations.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0003-crypto-crypto4xx-convert-to-skcipher.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0004-crypto-crypto4xx-avoid-VLA-use.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0005-crypto-crypto4xx-add-aes-ctr-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0007-crypto-crypto4xx-extend-aead-fallback-checks.patch [deleted file]
target/linux/apm821xx/patches-4.14/022-0008-crypto-crypto4xx-put-temporary-dst-sg-into-request-c.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0001-treewide-kzalloc-kcalloc.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0002-crypto-skcipher-remove-useless-setting-of-type-flags.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0003-crypto-drop-mask-CRYPTO_ALG_ASYNC-from-cipher-tfm-al.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0004-crypto4xx_core-don-t-abuse-__dma_sync_page.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0005-cross-tree-phase-out-dma_zalloc_coherent.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0006-crypto-crypto4xx-add-prng-crypto-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0013-crypto-crypto4xx-fix-AES-CTR-blocksize-value.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0014-crypto-crypto4xx-fix-blocksize-for-cfb-and-ofb.patch [deleted file]
target/linux/apm821xx/patches-4.14/023-0015-crypto-crypto4xx-block-ciphers-should-only-accept-co.patch [deleted file]
target/linux/apm821xx/patches-4.14/030-0001-net-ibm-emac-replace-custom-rgmii_mode_name-with-phy.patch [deleted file]
target/linux/apm821xx/patches-4.14/030-0002-net-ibm-emac-replace-custom-PHY_MODE_-macros.patch [deleted file]
target/linux/apm821xx/patches-4.14/030-0003-net-ibm-emac-support-RGMII-RX-TX-ID-phymode.patch [deleted file]
target/linux/apm821xx/patches-4.14/140-GPIO-add-named-gpio-exports.patch [deleted file]
target/linux/apm821xx/patches-4.14/200-add-meraki-mr24-ikarem-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/201-add-amcc-apollo3g-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/202-add-netgear-wndr4700-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/203-add-meraki-mx60-buckminster-support.patch [deleted file]
target/linux/apm821xx/patches-4.14/300-fix-atheros-nics-on-apm82181.patch [deleted file]
target/linux/apm821xx/patches-4.14/301-fix-memory-map-wndr4700.patch [deleted file]
target/linux/apm821xx/patches-4.14/302-0001-dt-bindings-add-protection-control-property.patch [deleted file]
target/linux/apm821xx/patches-4.14/701-powerpc_ibm_apm82181_phyclk_fix.patch [deleted file]
target/linux/apm821xx/patches-4.14/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch [deleted file]
target/linux/apm821xx/patches-4.14/802-usb-xhci-force-msi-renesas-xhci.patch [deleted file]
target/linux/apm821xx/patches-4.14/803-hwmon-tc654-add-detection-routine.patch [deleted file]
target/linux/apm821xx/patches-4.14/804-hwmon-tc654-add-thermal_cooling-device.patch [deleted file]

diff --git a/target/linux/apm821xx/config-4.14 b/target/linux/apm821xx/config-4.14
deleted file mode 100644 (file)
index ccc59b2..0000000
+++ /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 (file)
index 6cae1ea..0000000
+++ /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 (file)
index 5b0a5df..0000000
+++ /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 (file)
index cd61ac7..0000000
+++ /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 (file)
index 802bef7..0000000
+++ /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 (file)
index db57f7b..0000000
+++ /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 (file)
index 20de0d1..0000000
+++ /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 (file)
index 0a8da95..0000000
+++ /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 (file)
index 829c560..0000000
+++ /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 (file)
index 1a8f9c5..0000000
+++ /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 (file)
index ff768c2..0000000
+++ /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 (file)
index 9ddfcb9..0000000
+++ /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 (file)
index 98c584d..0000000
+++ /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 (file)
index f0f1d0e..0000000
+++ /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 (file)
index cc88bae..0000000
+++ /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 (file)
index c3b58f7..0000000
+++ /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 (file)
index 7efb0e6..0000000
+++ /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 (file)
index b37438d..0000000
+++ /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 (file)
index a9d6ddc..0000000
+++ /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 (file)
index 2ac1e5a..0000000
+++ /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 (file)
index aa99b17..0000000
+++ /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 (file)
index c3d4a07..0000000
+++ /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 (file)
index d56f838..0000000
+++ /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 (file)
index 9c3b9fe..0000000
+++ /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 (file)
index 1aaf792..0000000
+++ /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 (file)
index 0b16528..0000000
+++ /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 (file)
index 3dd35ba..0000000
+++ /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 (file)
index 2107f2d..0000000
+++ /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 (file)
index 57823fa..0000000
+++ /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 (file)
index 4872f44..0000000
+++ /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 (file)
index 439f78a..0000000
+++ /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 (file)
index a1e9b4b..0000000
+++ /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 (file)
index 7f4220f..0000000
+++ /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 (file)
index 37aefc2..0000000
+++ /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 (file)
index 30ff1a3..0000000
+++ /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 (file)
index 09206f5..0000000
+++ /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 (file)
index 25542c8..0000000
+++ /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 (file)
index 0c2871f..0000000
+++ /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 (file)
index d1849ae..0000000
+++ /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 (file)
index 857578b..0000000
+++ /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 (file)
index b06a8f9..0000000
+++ /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 (file)
index 9c78fd0..0000000
+++ /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 (file)
index ac280b9..0000000
+++ /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 (file)
index 324a740..0000000
+++ /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 (file)
index 28969a7..0000000
+++ /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 (file)
index ba4fb5f..0000000
+++ /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 (file)
index 16074c7..0000000
+++ /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 (file)
index 8f0ac8d..0000000
+++ /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 (file)
index e9f6c5c..0000000
+++ /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 (file)
index 1898239..0000000
+++ /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 (file)
index 77294a8..0000000
+++ /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 (file)
index c3931c9..0000000
+++ /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 (file)
index 110726d..0000000
+++ /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 (file)
index 6eb04b2..0000000
+++ /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 (file)
index 72297bc..0000000
+++ /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 (file)
index ced284e..0000000
+++ /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 (file)
index 892cdae..0000000
+++ /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 (file)
index c7315f9..0000000
+++ /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 (file)
index f8b30ae..0000000
+++ /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 (file)
index 18ed8ae..0000000
+++ /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[] = {