From 912f9e0ee8303384e42bbe9626cf5a2684143696 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Mon, 26 Aug 2019 01:29:37 +0800
Subject: [PATCH] update linux kernel to 4.19.56-linux4sam-6.1, which support Kernel crypto userspace API and NXP PN5180 BAL driver, update rootfs to compatible with it, update ReadMe files
---
linux-bsp/patches/linux-at91-sama5d4.patch | 3856 ++++++++++++++++++++++++++++++++++++++++++++++++----------
linux-bsp/tarballs/rootfs.tar.xz | 0
linux-bsp/tarballs/linux-at91.tar.xz | 0
linux-bsp/tarballs/rootfs.changelog | 4
linux-bsp/build.sh | 2
README.md | 33
6 files changed, 3,180 insertions(+), 715 deletions(-)
diff --git a/README.md b/README.md
index 4132329..dda90a9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,35 @@
## sama5d4
-SAMA5D4 Xplained Ultra Board BSP
+SAMA5D4 Xplained Ultra Board and BSP Official Reference:
+ https://www.at91.com/linux4sam/bin/view/Linux4SAM/Sama5d4XplainedMainPage
+
+Linux4SAM Home:
+ https://www.at91.com/linux4sam/bin/view/Linux4SAM/WebHome
+
+Linux4SAM Github Repositories:
+ https://github.com/linux4sam/
+
+Linux4SAM Linux Kernel ChangeLog:
+ https://www.at91.com/linux4sam/bin/view/Linux4SAM/LinuxKernel
+
+Linux4SAM BBS:
+ http://www.at91.com/
+
+
+Linux BSP Features:
+1, Linux kernel builtin driver support MT7601/RT5370 and stand-alone driver support RTL8188EU
+ both RT5370 and RTL8188EU can support AP/Station mode, but MT7601 only support Station mode;
+
+2, Linux Kernel add patches from libkcapi library v1.1.5 to support UserSpace to allow user space
+ to utilize the kernel crypto API.
+
+ Linux Kernel Crypto API:
+ https://www.kernel.org/doc/html/latest/crypto/index.html
+ https://www.kernel.org/doc/html/latest/crypto/userspace-if.html
+
+ libkcapi github:
+ https://github.com/smuellerDD/libkcapi
+
+3, Linux Kernel add NXP PN5180 NFC chipset bal driver support, source code from:
+ https://github.com/NXPNFCLinux/nxprdlib-kernel-bal
diff --git a/linux-bsp/build.sh b/linux-bsp/build.sh
index e505f78..ed31d90 100755
--- a/linux-bsp/build.sh
+++ b/linux-bsp/build.sh
@@ -82,7 +82,7 @@
SRC_DIR=$1
if [ ! -d ${SRC_DIR} ] ; then
- show_banner "| start decmpress $SRC_DIR packet |"
+ show_banner "| start decompress $SRC_DIR packet |"
tar -xJf ${PACK_PATH}/${SRC_DIR}.tar.xz
cd ${SRC_DIR}
diff --git a/linux-bsp/patches/linux-at91-sama5d4.patch b/linux-bsp/patches/linux-at91-sama5d4.patch
index e1d12c5..0c857f9 100644
--- a/linux-bsp/patches/linux-at91-sama5d4.patch
+++ b/linux-bsp/patches/linux-at91-sama5d4.patch
@@ -1,77 +1,95 @@
diff -Nuar linux-at91/arch/arm/boot/dts/at91-sama5d4_xplained.dts linux-at91-sama5d4/arch/arm/boot/dts/at91-sama5d4_xplained.dts
---- linux-at91/arch/arm/boot/dts/at91-sama5d4_xplained.dts 2019-08-18 17:24:46.000000000 +0800
-+++ linux-at91-sama5d4/arch/arm/boot/dts/at91-sama5d4_xplained.dts 2019-08-22 23:05:47.351524760 +0800
-@@ -128,6 +128,12 @@
+--- linux-at91/arch/arm/boot/dts/at91-sama5d4_xplained.dts 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/arch/arm/boot/dts/at91-sama5d4_xplained.dts 2019-08-26 01:03:57.000632839 +0800
+@@ -91,7 +91,23 @@
+
spi1: spi@fc018000 {
cs-gpios = <&pioB 21 0>;
- status = "okay";
+- status = "okay";
++ status = "okay";
+
-+ spidev@0 {
++ /* add spidev by guowenxue, 2019.8.25 */
++ /*
++ spidev@0 {
+ compatible = "linux,spidev";
+ spi-max-frequency = <24000000>;
+ reg = <0>;
+ };
++ */
++ bal: nxprdlib-bal@0 {
++ compatible = "nxp,bal";
++ reg = <0>;
++ busy-pin-gpio = <&pioD 9 0>;
++ spi-max-frequency = <6000000>;
++ status = "okay";
++ };
};
- adc0: adc@fc034000 {
-@@ -201,35 +207,25 @@
- atmel,has-pmecc;
- status = "okay";
+ tcb2: timer@fc024000 {
+@@ -193,40 +209,26 @@
+ #address-cells = <1>;
+ #size-cells = <1>;
-- at91bootstrap@0 {
-- label = "at91bootstrap";
-- reg = <0x0 0x40000>;
-- };
+- at91bootstrap@0 {
+- label = "at91bootstrap";
+- reg = <0x0 0x40000>;
+- };
-
-- bootloader@40000 {
-- label = "bootloader";
-- reg = <0x40000 0x80000>;
-- };
+- bootloader@40000 {
+- label = "bootloader";
+- reg = <0x40000 0xc0000>;
+- };
-
-- bootloaderenv@c0000 {
-- label = "bootloader env";
-- reg = <0xc0000 0xc0000>;
-- };
+- bootloaderenvred@100000 {
+- label = "bootloader env redundant";
+- reg = <0x100000 0x40000>;
+- };
-
-- dtb@180000 {
-- label = "device tree";
-- reg = <0x180000 0x80000>;
-- };
+- bootloaderenv@140000 {
+- label = "bootloader env";
+- reg = <0x140000 0x40000>;
+- };
-
-- kernel@200000 {
-- label = "kernel";
-- reg = <0x200000 0x600000>;
-- };
+- dtb@180000 {
+- label = "device tree";
+- reg = <0x180000 0x80000>;
+- };
-
-- rootfs@800000 {
-- label = "rootfs";
-- reg = <0x800000 0x0f800000>;
-- };
-+ bootloader@0 { /* 1MB: 0~40000(bootstrap) 40000~C0000(u-boot.bin) C0000~100000(u-boot.env) */
-+ label = "bootloader";
-+ reg = <0x0 0x100000>;
-+ };
+- kernel@200000 {
+- label = "kernel";
+- reg = <0x200000 0x600000>;
+- };
+-
+- rootfs@800000 {
+- label = "rootfs";
+- reg = <0x800000 0x1f800000>;
+- };
++ /* modify nandflash partition by guowenxue, 2019.08.25 */
++ bootloader@0 { /* 1MB: 0~40000(bootstrap) 40000~C0000(u-boot.bin) C0000~100000(u-boot.env) */
++ label = "bootloader";
++ reg = <0x0 0x100000>;
++ };
+
-+ linux@100000 { /* 7MB */
-+ label = "linux";
-+ reg = <0x100000 0x700000>;
-+ };
++ linux@100000 { /* 7MB */
++ label = "linux";
++ reg = <0x100000 0x700000>;
++ };
+
-+ rootfs@800000 { /* 200MB */
-+ label = "rootfs";
-+ reg = <0x800000 0xc800000>;
-+ };
++ rootfs@800000 { /* 200MB */
++ label = "rootfs";
++ reg = <0x800000 0xc800000>;
++ };
+
-+ apps@800000 { /* 48MB */
-+ label = "apps";
-+ reg = <0xD000000 0x3000000>;
-+ };
- };
- };
-
++ apps@800000 { /* 48MB */
++ label = "apps";
++ reg = <0xD000000 0x3000000>;
++ };
+ };
+ };
+ };
diff -Nuar linux-at91/build.sh linux-at91-sama5d4/build.sh
--- linux-at91/build.sh 1970-01-01 08:00:00.000000000 +0800
-+++ linux-at91-sama5d4/build.sh 2019-08-22 23:15:52.059536360 +0800
++++ linux-at91-sama5d4/build.sh 2019-08-26 00:44:57.984610990 +0800
@@ -0,0 +1,85 @@
+#!/bin/bash
+
@@ -160,31 +178,20 @@
+
diff -Nuar linux-at91/.cfg-sama5d4 linux-at91-sama5d4/.cfg-sama5d4
--- linux-at91/.cfg-sama5d4 1970-01-01 08:00:00.000000000 +0800
-+++ linux-at91-sama5d4/.cfg-sama5d4 2019-08-23 00:02:44.587590311 +0800
-@@ -0,0 +1,4073 @@
++++ linux-at91-sama5d4/.cfg-sama5d4 2019-08-26 01:08:24.548637971 +0800
+@@ -0,0 +1,4387 @@
+#
+# Automatically generated file; DO NOT EDIT.
-+# Linux/arm 4.9.151-linux4sam_5.8+ Kernel Configuration
++# Linux/arm 4.19.56-linux4sam-6.1 Kernel Configuration
+#
-+CONFIG_ARM=y
-+CONFIG_ARM_HAS_SG_CHAIN=y
-+CONFIG_MIGHT_HAVE_PCI=y
-+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-+CONFIG_HAVE_PROC_CPU=y
-+CONFIG_STACKTRACE_SUPPORT=y
-+CONFIG_LOCKDEP_SUPPORT=y
-+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_FIX_EARLYCON_MEM=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_NEED_DMA_MAP_STATE=y
-+CONFIG_ARCH_SUPPORTS_UPROBES=y
-+CONFIG_VECTORS_BASE=0xffff0000
-+CONFIG_ARM_PATCH_PHYS_VIRT=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_PGTABLE_LEVELS=2
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Compiler: arm-linux-gcc.br_real (Buildroot 2019.02.4) 7.4.0
++#
++CONFIG_CC_IS_GCC=y
++CONFIG_GCC_VERSION=70400
++CONFIG_CLANG_VERSION=0
++CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_IRQ_WORK=y
+CONFIG_BUILDTIME_EXTABLE_SORT=y
+
@@ -193,10 +200,10 @@
+#
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_BUILD_SALT=""
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_XZ=y
@@ -213,7 +220,6 @@
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
-+CONFIG_FHANDLE=y
+CONFIG_USELIB=y
+# CONFIG_AUDIT is not set
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
@@ -228,9 +234,10 @@
+CONFIG_GENERIC_IRQ_CHIP=y
+CONFIG_IRQ_DOMAIN=y
+CONFIG_HANDLE_DOMAIN_IRQ=y
-+CONFIG_IRQ_DOMAIN_DEBUG=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_SPARSE_IRQ=y
++# CONFIG_GENERIC_IRQ_DEBUGFS is not set
++CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
+CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+
@@ -241,6 +248,9 @@
+# CONFIG_NO_HZ_IDLE is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
++# CONFIG_PREEMPT is not set
+
+#
+# CPU/Task time and stats accounting
@@ -257,27 +267,24 @@
+CONFIG_TINY_RCU=y
+# CONFIG_RCU_EXPERT is not set
+CONFIG_SRCU=y
-+# CONFIG_TASKS_RCU is not set
-+# CONFIG_RCU_STALL_COMMON is not set
-+# CONFIG_TREE_RCU_TRACE is not set
-+# CONFIG_RCU_EXPEDITE_BOOT is not set
-+# CONFIG_BUILD_BIN2C is not set
++CONFIG_TINY_SRCU=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=16
-+CONFIG_NMI_LOG_BUF_SHIFT=13
++CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+CONFIG_GENERIC_SCHED_CLOCK=y
+CONFIG_CGROUPS=y
+# CONFIG_MEMCG is not set
+# CONFIG_BLK_CGROUP is not set
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUP_PIDS is not set
++# CONFIG_CGROUP_RDMA is not set
+# CONFIG_CGROUP_FREEZER is not set
-+# CONFIG_CPUSETS is not set
+# CONFIG_CGROUP_DEVICE is not set
+# CONFIG_CGROUP_CPUACCT is not set
+# CONFIG_CGROUP_DEBUG is not set
-+# CONFIG_CHECKPOINT_RESTORE is not set
++CONFIG_SOCK_CGROUP_DATA=y
+# CONFIG_NAMESPACES is not set
++# CONFIG_CHECKPOINT_RESTORE is not set
+# CONFIG_SCHED_AUTOGROUP is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
@@ -294,29 +301,35 @@
+# CONFIG_SGETMASK_SYSCALL is not set
+CONFIG_SYSFS_SYSCALL=y
+# CONFIG_SYSCTL_SYSCALL is not set
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set
-+CONFIG_KALLSYMS_BASE_RELATIVE=y
++CONFIG_FHANDLE=y
++CONFIG_POSIX_TIMERS=y
+CONFIG_PRINTK=y
+CONFIG_PRINTK_NMI=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
++CONFIG_FUTEX_PI=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
-+# CONFIG_BPF_SYSCALL is not set
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_ADVISE_SYSCALLS=y
-+# CONFIG_USERFAULTFD is not set
+CONFIG_MEMBARRIER=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++CONFIG_KALLSYMS_BASE_RELATIVE=y
++# CONFIG_BPF_SYSCALL is not set
++# CONFIG_USERFAULTFD is not set
++CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
++CONFIG_RSEQ=y
++# CONFIG_DEBUG_RSEQ is not set
+CONFIG_EMBEDDED=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
++# CONFIG_PC104 is not set
+
+#
+# Kernel Performance Events And Counters
@@ -327,113 +340,34 @@
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
++CONFIG_SLAB_MERGE_DEFAULT=y
+# CONFIG_SLAB_FREELIST_RANDOM is not set
-+# CONFIG_SYSTEM_DATA_VERIFICATION is not set
++CONFIG_SYSTEM_DATA_VERIFICATION=y
+# CONFIG_PROFILING is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_JUMP_LABEL=y
-+# CONFIG_STATIC_KEYS_SELFTEST is not set
-+# CONFIG_UPROBES is not set
-+# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
-+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_HAVE_OPTPROBES=y
-+CONFIG_HAVE_NMI=y
-+CONFIG_HAVE_ARCH_TRACEHOOK=y
-+CONFIG_HAVE_DMA_CONTIGUOUS=y
-+CONFIG_GENERIC_SMP_IDLE_THREAD=y
-+CONFIG_GENERIC_IDLE_POLL_SETUP=y
-+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
-+CONFIG_HAVE_CLK=y
-+CONFIG_HAVE_DMA_API_DEBUG=y
-+CONFIG_HAVE_PERF_REGS=y
-+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
-+CONFIG_HAVE_ARCH_JUMP_LABEL=y
-+CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
-+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
-+CONFIG_HAVE_GCC_PLUGINS=y
-+# CONFIG_GCC_PLUGINS is not set
-+CONFIG_HAVE_CC_STACKPROTECTOR=y
-+# CONFIG_CC_STACKPROTECTOR is not set
-+CONFIG_CC_STACKPROTECTOR_NONE=y
-+# CONFIG_CC_STACKPROTECTOR_REGULAR is not set
-+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
-+CONFIG_HAVE_CONTEXT_TRACKING=y
-+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
-+CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
-+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
-+CONFIG_MODULES_USE_ELF_REL=y
-+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
-+CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
-+CONFIG_HAVE_EXIT_THREAD=y
-+CONFIG_ARCH_MMAP_RND_BITS_MIN=8
-+CONFIG_ARCH_MMAP_RND_BITS_MAX=16
-+CONFIG_ARCH_MMAP_RND_BITS=8
-+# CONFIG_HAVE_ARCH_HASH is not set
-+# CONFIG_ISA_BUS_API is not set
-+CONFIG_CLONE_BACKWARDS=y
-+CONFIG_OLD_SIGSUSPEND3=y
-+CONFIG_OLD_SIGACTION=y
-+# CONFIG_CPU_NO_EFFICIENT_FFS is not set
-+# CONFIG_HAVE_ARCH_VMAP_STACK is not set
-+
-+#
-+# GCOV-based kernel profiling
-+#
-+# CONFIG_GCOV_KERNEL is not set
-+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
-+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_FORCE_LOAD=y
-+CONFIG_MODULE_UNLOAD=y
-+CONFIG_MODULE_FORCE_UNLOAD=y
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_MODULE_SIG is not set
-+# CONFIG_MODULE_COMPRESS is not set
-+# CONFIG_TRIM_UNUSED_KSYMS is not set
-+CONFIG_BLOCK=y
-+CONFIG_LBDAF=y
-+# CONFIG_BLK_DEV_BSG is not set
-+# CONFIG_BLK_DEV_BSGLIB is not set
-+# CONFIG_BLK_DEV_INTEGRITY is not set
-+# CONFIG_BLK_CMDLINE_PARSER is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+CONFIG_EFI_PARTITION=y
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+# CONFIG_IOSCHED_DEADLINE is not set
-+# CONFIG_IOSCHED_CFQ is not set
-+CONFIG_DEFAULT_NOOP=y
-+CONFIG_DEFAULT_IOSCHED="noop"
-+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-+CONFIG_INLINE_READ_UNLOCK=y
-+CONFIG_INLINE_READ_UNLOCK_IRQ=y
-+CONFIG_INLINE_WRITE_UNLOCK=y
-+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
-+CONFIG_FREEZER=y
++CONFIG_ARM=y
++CONFIG_ARM_HAS_SG_CHAIN=y
++CONFIG_MIGHT_HAVE_PCI=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_HAVE_PROC_CPU=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_RWSEM_XCHGADD_ALGORITHM=y
++CONFIG_FIX_EARLYCON_MEM=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ARCH_SUPPORTS_UPROBES=y
++CONFIG_ARM_PATCH_PHYS_VIRT=y
++CONFIG_GENERIC_BUG=y
++CONFIG_PGTABLE_LEVELS=2
+
+#
+# System Type
+#
+CONFIG_MMU=y
++CONFIG_ARCH_MMAP_RND_BITS_MIN=8
++CONFIG_ARCH_MMAP_RND_BITS_MAX=16
+CONFIG_ARCH_MULTIPLATFORM=y
-+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
@@ -463,34 +397,36 @@
+# CONFIG_ARCH_MULTI_V6 is not set
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_MULTI_V6_V7=y
-+# CONFIG_ARCH_MULTI_CPU_AUTO is not set
+# CONFIG_ARCH_VIRT is not set
-+# CONFIG_ARCH_MVEBU is not set
++# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_ALPINE is not set
+# CONFIG_ARCH_ARTPEC is not set
+CONFIG_ARCH_AT91=y
-+CONFIG_SOC_SAMA5D2=y
-+CONFIG_SOC_SAMA5D3=y
++# CONFIG_SOC_SAMA5D2 is not set
++# CONFIG_SOC_SAMA5D3 is not set
+CONFIG_SOC_SAMA5D4=y
-+# CONFIG_AT91_VDEC_G1 is not set
++CONFIG_AT91_VDEC_G1=y
+CONFIG_HAVE_AT91_UTMI=y
+CONFIG_HAVE_AT91_USB_CLK=y
+CONFIG_COMMON_CLK_AT91=y
+CONFIG_HAVE_AT91_SMD=y
+CONFIG_HAVE_AT91_H32MX=y
-+CONFIG_HAVE_AT91_GENERATED_CLK=y
-+CONFIG_HAVE_AT91_AUDIO_PLL=y
+CONFIG_SOC_SAM_V7=y
+CONFIG_SOC_SAMA5=y
++CONFIG_ATMEL_PM=y
+# CONFIG_ARCH_BCM is not set
+# CONFIG_ARCH_BERLIN is not set
+# CONFIG_ARCH_DIGICOLOR is not set
++# CONFIG_ARCH_EXYNOS is not set
+# CONFIG_ARCH_HIGHBANK is not set
+# CONFIG_ARCH_HISI is not set
-+# CONFIG_ARCH_KEYSTONE is not set
-+# CONFIG_ARCH_MESON is not set
+# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_KEYSTONE is not set
+# CONFIG_ARCH_MEDIATEK is not set
++# CONFIG_ARCH_MESON is not set
++# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_MVEBU is not set
++# CONFIG_ARCH_NPCM is not set
+
+#
+# TI OMAP/AM/DM/DRA Family
@@ -501,18 +437,17 @@
+# CONFIG_SOC_AM33XX is not set
+# CONFIG_SOC_AM43XX is not set
+# CONFIG_SOC_DRA7XX is not set
-+# CONFIG_ARCH_MMP is not set
++# CONFIG_ARCH_SIRF is not set
+# CONFIG_ARCH_QCOM is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_ROCKCHIP is not set
++# CONFIG_ARCH_S5PV210 is not set
++# CONFIG_ARCH_RENESAS is not set
+# CONFIG_ARCH_SOCFPGA is not set
+# CONFIG_PLAT_SPEAR is not set
+# CONFIG_ARCH_STI is not set
-+# CONFIG_ARCH_S5PV210 is not set
-+# CONFIG_ARCH_EXYNOS is not set
-+# CONFIG_ARCH_RENESAS is not set
++# CONFIG_ARCH_STM32 is not set
+# CONFIG_ARCH_SUNXI is not set
-+# CONFIG_ARCH_SIRF is not set
+# CONFIG_ARCH_TANGO is not set
+# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_UNIPHIER is not set
@@ -526,6 +461,7 @@
+# Processor Type
+#
+CONFIG_CPU_V7=y
++CONFIG_CPU_THUMB_CAPABLE=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
@@ -542,7 +478,6 @@
+# Processor Features
+#
+# CONFIG_ARM_LPAE is not set
-+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+CONFIG_ARM_VIRT_EXT=y
@@ -566,9 +501,7 @@
+CONFIG_ARM_L1_CACHE_SHIFT=6
+CONFIG_ARM_DMA_MEM_BUFFERABLE=y
+CONFIG_ARM_HEAVY_MB=y
-+CONFIG_DEBUG_RODATA=y
+CONFIG_DEBUG_ALIGN_RODATA=y
-+CONFIG_MULTI_IRQ_HANDLER=y
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_720789 is not set
+# CONFIG_ARM_ERRATA_754322 is not set
@@ -584,8 +517,11 @@
+# Bus support
+#
+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS_GENERIC is not set
-+# CONFIG_PCI_SYSCALL is not set
++
++#
++# PCI Endpoint
++#
++# CONFIG_PCI_ENDPOINT is not set
+# CONFIG_PCCARD is not set
+
+#
@@ -601,9 +537,6 @@
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_ARM_PSCI is not set
+CONFIG_ARCH_NR_GPIO=0
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
+CONFIG_HZ_FIXED=0
+CONFIG_HZ_100=y
+# CONFIG_HZ_200 is not set
@@ -612,48 +545,19 @@
+# CONFIG_HZ_500 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
-+# CONFIG_SCHED_HRTICK is not set
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_ARM_PATCH_IDIV=y
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
-+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_HAVE_ARCH_PFN_VALID=y
+# CONFIG_HIGHMEM is not set
+CONFIG_CPU_SW_DOMAIN_PAN=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
+# CONFIG_ARM_MODULE_PLTS is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+CONFIG_HAVE_MEMBLOCK=y
-+CONFIG_NO_BOOTMEM=y
-+CONFIG_MEMORY_ISOLATION=y
-+# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_COMPACTION=y
-+CONFIG_MIGRATION=y
-+# CONFIG_PHYS_ADDR_T_64BIT is not set
-+# CONFIG_KSM is not set
-+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-+CONFIG_NEED_PER_CPU_KM=y
-+# CONFIG_CLEANCACHE is not set
-+CONFIG_CMA=y
-+# CONFIG_CMA_DEBUG is not set
-+CONFIG_CMA_DEBUGFS=y
-+CONFIG_CMA_AREAS=7
-+# CONFIG_ZPOOL is not set
-+# CONFIG_ZBUD is not set
-+# CONFIG_ZSMALLOC is not set
-+CONFIG_GENERIC_EARLY_IOREMAP=y
-+# CONFIG_IDLE_PAGE_TRACKING is not set
-+CONFIG_FRAME_VECTOR=y
+CONFIG_FORCE_MAX_ZONEORDER=15
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_UACCESS_WITH_MEMCPY=y
+# CONFIG_SECCOMP is not set
-+CONFIG_SWIOTLB=y
-+CONFIG_IOMMU_HELPER=y
+# CONFIG_PARAVIRT is not set
+# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+# CONFIG_XEN is not set
@@ -693,7 +597,6 @@
+#
+# CONFIG_ARM_CPUIDLE is not set
+CONFIG_ARM_AT91_CPUIDLE=y
-+# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
+
+#
+# Floating point emulation
@@ -706,18 +609,6 @@
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+CONFIG_KERNEL_MODE_NEON=y
-+
-+#
-+# Userspace binary formats
-+#
-+CONFIG_BINFMT_ELF=y
-+CONFIG_ELFCORE=y
-+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-+CONFIG_BINFMT_SCRIPT=y
-+# CONFIG_BINFMT_FLAT is not set
-+# CONFIG_HAVE_AOUT is not set
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_COREDUMP=y
+
+#
+# Power management options
@@ -740,6 +631,170 @@
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARM_CPU_SUSPEND=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
++
++#
++# Firmware Drivers
++#
++# CONFIG_FIRMWARE_MEMMAP is not set
++# CONFIG_FW_CFG_SYSFS is not set
++CONFIG_HAVE_ARM_SMCCC=y
++# CONFIG_GOOGLE_FIRMWARE is not set
++
++#
++# Tegra firmware driver
++#
++# CONFIG_ARM_CRYPTO is not set
++# CONFIG_VIRTUALIZATION is not set
++
++#
++# General architecture-dependent options
++#
++CONFIG_HAVE_OPROFILE=y
++# CONFIG_KPROBES is not set
++CONFIG_JUMP_LABEL=y
++# CONFIG_STATIC_KEYS_SELFTEST is not set
++CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
++CONFIG_ARCH_USE_BUILTIN_BSWAP=y
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_OPTPROBES=y
++CONFIG_HAVE_NMI=y
++CONFIG_HAVE_ARCH_TRACEHOOK=y
++CONFIG_HAVE_DMA_CONTIGUOUS=y
++CONFIG_GENERIC_SMP_IDLE_THREAD=y
++CONFIG_GENERIC_IDLE_POLL_SETUP=y
++CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
++CONFIG_ARCH_HAS_SET_MEMORY=y
++CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
++CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
++CONFIG_HAVE_RSEQ=y
++CONFIG_HAVE_CLK=y
++CONFIG_HAVE_PERF_REGS=y
++CONFIG_HAVE_PERF_USER_STACK_DUMP=y
++CONFIG_HAVE_ARCH_JUMP_LABEL=y
++CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
++CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
++CONFIG_HAVE_STACKPROTECTOR=y
++CONFIG_CC_HAS_STACKPROTECTOR_NONE=y
++CONFIG_STACKPROTECTOR=y
++CONFIG_STACKPROTECTOR_STRONG=y
++CONFIG_HAVE_CONTEXT_TRACKING=y
++CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
++CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
++CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
++CONFIG_MODULES_USE_ELF_REL=y
++CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
++CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
++CONFIG_HAVE_EXIT_THREAD=y
++CONFIG_ARCH_MMAP_RND_BITS=8
++CONFIG_CLONE_BACKWARDS=y
++CONFIG_OLD_SIGSUSPEND3=y
++CONFIG_OLD_SIGACTION=y
++CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
++CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
++CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
++CONFIG_STRICT_KERNEL_RWX=y
++CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
++CONFIG_STRICT_MODULE_RWX=y
++CONFIG_ARCH_HAS_PHYS_TO_DMA=y
++CONFIG_REFCOUNT_FULL=y
++
++#
++# GCOV-based kernel profiling
++#
++# CONFIG_GCOV_KERNEL is not set
++CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
++CONFIG_PLUGIN_HOSTCC=""
++CONFIG_HAVE_GCC_PLUGINS=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_FORCE_LOAD=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_MODULE_SIG is not set
++# CONFIG_MODULE_COMPRESS is not set
++# CONFIG_TRIM_UNUSED_KSYMS is not set
++CONFIG_BLOCK=y
++CONFIG_LBDAF=y
++CONFIG_BLK_SCSI_REQUEST=y
++# CONFIG_BLK_DEV_BSG is not set
++# CONFIG_BLK_DEV_BSGLIB is not set
++# CONFIG_BLK_DEV_INTEGRITY is not set
++# CONFIG_BLK_DEV_ZONED is not set
++# CONFIG_BLK_CMDLINE_PARSER is not set
++# CONFIG_BLK_WBT is not set
++CONFIG_BLK_DEBUG_FS=y
++# CONFIG_BLK_SED_OPAL is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_EFI_PARTITION=y
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_DEADLINE is not set
++# CONFIG_IOSCHED_CFQ is not set
++CONFIG_DEFAULT_NOOP=y
++CONFIG_DEFAULT_IOSCHED="noop"
++CONFIG_MQ_IOSCHED_DEADLINE=y
++CONFIG_MQ_IOSCHED_KYBER=y
++# CONFIG_IOSCHED_BFQ is not set
++CONFIG_ASN1=y
++CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
++CONFIG_INLINE_READ_UNLOCK=y
++CONFIG_INLINE_READ_UNLOCK_IRQ=y
++CONFIG_INLINE_WRITE_UNLOCK=y
++CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
++CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
++CONFIG_FREEZER=y
++
++#
++# Executable file formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_ELF_FDPIC is not set
++CONFIG_ELFCORE=y
++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
++CONFIG_BINFMT_SCRIPT=y
++# CONFIG_BINFMT_FLAT is not set
++# CONFIG_BINFMT_MISC is not set
++CONFIG_COREDUMP=y
++
++#
++# Memory Management options
++#
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_HAVE_MEMBLOCK=y
++CONFIG_NO_BOOTMEM=y
++CONFIG_MEMORY_ISOLATION=y
++CONFIG_SPLIT_PTLOCK_CPUS=4
++CONFIG_COMPACTION=y
++CONFIG_MIGRATION=y
++# CONFIG_KSM is not set
++CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
++CONFIG_NEED_PER_CPU_KM=y
++# CONFIG_CLEANCACHE is not set
++CONFIG_CMA=y
++# CONFIG_CMA_DEBUG is not set
++CONFIG_CMA_DEBUGFS=y
++CONFIG_CMA_AREAS=7
++# CONFIG_ZPOOL is not set
++# CONFIG_ZBUD is not set
++# CONFIG_ZSMALLOC is not set
++CONFIG_GENERIC_EARLY_IOREMAP=y
++# CONFIG_IDLE_PAGE_TRACKING is not set
++CONFIG_FRAME_VECTOR=y
++# CONFIG_PERCPU_STATS is not set
++# CONFIG_GUP_BENCHMARK is not set
+CONFIG_NET=y
+CONFIG_NET_INGRESS=y
+
@@ -750,6 +805,7 @@
+# CONFIG_PACKET_DIAG is not set
+CONFIG_UNIX=y
+# CONFIG_UNIX_DIAG is not set
++# CONFIG_TLS is not set
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
@@ -763,19 +819,16 @@
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE_DEMUX is not set
-+# CONFIG_NET_IP_TUNNEL is not set
++CONFIG_IP_MROUTE_COMMON=y
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
+# CONFIG_IP_PIMSM_V1 is not set
+# CONFIG_IP_PIMSM_V2 is not set
+CONFIG_SYN_COOKIES=y
-+# CONFIG_NET_UDP_TUNNEL is not set
+# CONFIG_NET_FOU is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
@@ -786,10 +839,8 @@
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NET_PTP_CLASSIFY is not set
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+CONFIG_NETFILTER=y
-+CONFIG_NETFILTER_DEBUG=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
@@ -798,11 +849,16 @@
+#
+CONFIG_NETFILTER_INGRESS=y
+CONFIG_NETFILTER_NETLINK=y
++CONFIG_NETFILTER_FAMILY_BRIDGE=y
++CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_ACCT=y
+CONFIG_NETFILTER_NETLINK_QUEUE=y
+CONFIG_NETFILTER_NETLINK_LOG=y
++CONFIG_NETFILTER_NETLINK_OSF=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_LOG_COMMON=y
++# CONFIG_NF_LOG_NETDEV is not set
++CONFIG_NETFILTER_CONNCOUNT=y
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_ZONES is not set
+CONFIG_NF_CONNTRACK_PROCFS=y
@@ -826,7 +882,6 @@
+CONFIG_NF_CONNTRACK_SIP=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
-+CONFIG_NF_CT_NETLINK_TIMEOUT=y
+# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set
+CONFIG_NF_NAT=y
+CONFIG_NF_NAT_NEEDED=y
@@ -841,24 +896,28 @@
+CONFIG_NF_NAT_REDIRECT=y
+CONFIG_NETFILTER_SYNPROXY=y
+CONFIG_NF_TABLES=y
++# CONFIG_NF_TABLES_SET is not set
+# CONFIG_NF_TABLES_NETDEV is not set
-+CONFIG_NFT_EXTHDR=y
-+CONFIG_NFT_META=y
+# CONFIG_NFT_NUMGEN is not set
+CONFIG_NFT_CT=y
-+# CONFIG_NFT_SET_RBTREE is not set
-+# CONFIG_NFT_SET_HASH is not set
+CONFIG_NFT_COUNTER=y
++# CONFIG_NFT_CONNLIMIT is not set
+CONFIG_NFT_LOG=y
+CONFIG_NFT_LIMIT=y
+CONFIG_NFT_MASQ=y
+CONFIG_NFT_REDIR=y
+CONFIG_NFT_NAT=y
++# CONFIG_NFT_TUNNEL is not set
++# CONFIG_NFT_OBJREF is not set
+CONFIG_NFT_QUEUE=y
+# CONFIG_NFT_QUOTA is not set
+CONFIG_NFT_REJECT=y
+CONFIG_NFT_COMPAT=y
+CONFIG_NFT_HASH=y
++# CONFIG_NFT_SOCKET is not set
++# CONFIG_NFT_OSF is not set
++# CONFIG_NFT_TPROXY is not set
++# CONFIG_NF_FLOW_TABLE is not set
+CONFIG_NETFILTER_XTABLES=y
+
+#
@@ -936,7 +995,7 @@
+CONFIG_NETFILTER_XT_MATCH_REALM=y
+CONFIG_NETFILTER_XT_MATCH_RECENT=y
+CONFIG_NETFILTER_XT_MATCH_SCTP=y
-+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
++# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
@@ -953,6 +1012,7 @@
+CONFIG_IP_SET_HASH_IPPORT=y
+CONFIG_IP_SET_HASH_IPPORTIP=y
+CONFIG_IP_SET_HASH_IPPORTNET=y
++# CONFIG_IP_SET_HASH_IPMAC is not set
+CONFIG_IP_SET_HASH_MAC=y
+CONFIG_IP_SET_HASH_NETPORTNET=y
+CONFIG_IP_SET_HASH_NET=y
@@ -987,6 +1047,7 @@
+CONFIG_IP_VS_LBLCR=y
+CONFIG_IP_VS_DH=y
+CONFIG_IP_VS_SH=y
++# CONFIG_IP_VS_MH is not set
+CONFIG_IP_VS_SED=y
+CONFIG_IP_VS_NQ=y
+
@@ -994,6 +1055,11 @@
+# IPVS SH scheduler
+#
+CONFIG_IP_VS_SH_TAB_BITS=8
++
++#
++# IPVS MH scheduler
++#
++CONFIG_IP_VS_MH_TAB_INDEX=12
+
+#
+# IPVS application helper
@@ -1006,19 +1072,21 @@
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=y
-+CONFIG_NF_CONNTRACK_IPV4=y
++# CONFIG_NF_SOCKET_IPV4 is not set
++CONFIG_NF_TPROXY_IPV4=y
+CONFIG_NF_TABLES_IPV4=y
+CONFIG_NFT_CHAIN_ROUTE_IPV4=y
+CONFIG_NFT_REJECT_IPV4=y
+# CONFIG_NFT_DUP_IPV4 is not set
++# CONFIG_NFT_FIB_IPV4 is not set
+CONFIG_NF_TABLES_ARP=y
+CONFIG_NF_DUP_IPV4=y
+CONFIG_NF_LOG_ARP=y
+CONFIG_NF_LOG_IPV4=y
+CONFIG_NF_REJECT_IPV4=y
+CONFIG_NF_NAT_IPV4=y
-+CONFIG_NFT_CHAIN_NAT_IPV4=y
+CONFIG_NF_NAT_MASQUERADE_IPV4=y
++CONFIG_NFT_CHAIN_NAT_IPV4=y
+CONFIG_NFT_MASQ_IPV4=y
+CONFIG_NFT_REDIR_IPV4=y
+CONFIG_NF_NAT_SNMP_BASIC=y
@@ -1046,7 +1114,6 @@
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_NF_TABLES_BRIDGE=y
-+CONFIG_NFT_BRIDGE_META=y
+CONFIG_NF_LOG_BRIDGE=y
+CONFIG_BRIDGE_NF_EBTABLES=y
+CONFIG_BRIDGE_EBT_BROUTE=y
@@ -1068,6 +1135,7 @@
+CONFIG_BRIDGE_EBT_SNAT=y
+CONFIG_BRIDGE_EBT_LOG=y
+CONFIG_BRIDGE_EBT_NFLOG=y
++# CONFIG_BPFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
@@ -1083,7 +1151,6 @@
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
@@ -1097,11 +1164,11 @@
+# CONFIG_VSOCKETS is not set
+# CONFIG_NETLINK_DIAG is not set
+# CONFIG_MPLS is not set
++# CONFIG_NET_NSH is not set
+# CONFIG_HSR is not set
+# CONFIG_NET_SWITCHDEV is not set
+# CONFIG_NET_L3_MASTER_DEV is not set
+# CONFIG_NET_NCSI is not set
-+CONFIG_SOCK_CGROUP_DATA=y
+# CONFIG_CGROUP_NET_PRIO is not set
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
@@ -1114,11 +1181,9 @@
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_AF_KCM is not set
-+# CONFIG_STREAM_PARSER is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+CONFIG_WEXT_CORE=y
@@ -1127,12 +1192,12 @@
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
++CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
++CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
-+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_CRDA_SUPPORT=y
+CONFIG_CFG80211_WEXT=y
-+# CONFIG_LIB80211 is not set
+CONFIG_MAC80211=y
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_MINSTREL=y
@@ -1150,17 +1215,28 @@
+CONFIG_RFKILL=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
-+# CONFIG_RFKILL_REGULATOR is not set
+# CONFIG_RFKILL_GPIO is not set
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
-+# CONFIG_NFC is not set
++CONFIG_NFC=y
++# CONFIG_NFC_DIGITAL is not set
++# CONFIG_NFC_NCI is not set
++# CONFIG_NFC_HCI is not set
++
++#
++# Near Field Communication (NFC) devices
++#
++CONFIG_NXPRDLIB_BAL=y
++# CONFIG_NFC_PN533_USB is not set
++# CONFIG_NFC_PN533_I2C is not set
++# CONFIG_PSAMPLE is not set
++# CONFIG_NET_IFE is not set
+# CONFIG_LWTUNNEL is not set
-+# CONFIG_DST_CACHE is not set
+# CONFIG_NET_DEVLINK is not set
+CONFIG_MAY_USE_DEVLINK=y
-+CONFIG_HAVE_CBPF_JIT=y
++# CONFIG_FAILOVER is not set
++CONFIG_HAVE_EBPF_JIT=y
+
+#
+# Device Drivers
@@ -1175,23 +1251,26 @@
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++
++#
++# Firmware loader
++#
+CONFIG_FW_LOADER=y
-+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
-+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
++# CONFIG_FW_LOADER_USER_HELPER is not set
+CONFIG_ALLOW_DEV_COREDUMP=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_GENERIC_CPU_DEVICES is not set
++# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
++CONFIG_GENERIC_CPU_AUTOPROBE=y
+CONFIG_SOC_BUS=y
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_SPI=y
+CONFIG_REGMAP_MMIO=y
+CONFIG_DMA_SHARED_BUFFER=y
-+# CONFIG_FENCE_TRACE is not set
++# CONFIG_DMA_FENCE_TRACE is not set
+CONFIG_DMA_CMA=y
+
+#
@@ -1208,8 +1287,10 @@
+# Bus devices
+#
+# CONFIG_BRCMSTB_GISB_ARB is not set
++# CONFIG_SIMPLE_PM_BUS is not set
+# CONFIG_VEXPRESS_CONFIG is not set
+# CONFIG_CONNECTOR is not set
++# CONFIG_GNSS is not set
+CONFIG_MTD=y
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
@@ -1217,6 +1298,10 @@
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_OF_PARTS=y
+# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# Partition parsers
++#
+
+#
+# User Modules And Translation Layers
@@ -1242,13 +1327,8 @@
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
-+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
-+# CONFIG_MTD_CFI_I4 is not set
-+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
@@ -1270,6 +1350,7 @@
+#
+# CONFIG_MTD_DATAFLASH is not set
+CONFIG_MTD_M25P80=y
++# CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
@@ -1280,24 +1361,20 @@
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOCG3 is not set
++# CONFIG_MTD_ONENAND is not set
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_ECC_BCH is not set
-+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_DENALI_DT is not set
+# CONFIG_MTD_NAND_GPIO is not set
-+# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set
-+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_DOCG4 is not set
+CONFIG_MTD_NAND_ATMEL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_BRCMNAND is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
-+# CONFIG_MTD_NAND_HISI504 is not set
-+# CONFIG_MTD_NAND_MTK is not set
-+# CONFIG_MTD_ONENAND is not set
++# CONFIG_MTD_SPI_NAND is not set
+
+#
+# LPDDR & LPDDR2 PCM memory drivers
@@ -1307,7 +1384,6 @@
+CONFIG_MTD_SPI_NOR=y
+# CONFIG_MTD_MT81xx_NOR is not set
+# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
-+CONFIG_SPI_ATMEL_QUADSPI=y
+# CONFIG_SPI_CADENCE_QUADSPI is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
@@ -1320,6 +1396,7 @@
+# CONFIG_OF_UNITTEST is not set
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_EARLY_FLATTREE=y
++CONFIG_OF_KOBJ=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_NET=y
@@ -1330,9 +1407,8 @@
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
-+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
++CONFIG_BLK_DEV_LOOP_MIN_COUNT=4
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
@@ -1341,14 +1417,17 @@
+CONFIG_BLK_DEV_RAM_SIZE=8192
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_MG_DISK is not set
+# CONFIG_BLK_DEV_RBD is not set
++
++#
++# NVME Support
++#
++# CONFIG_NVME_FC is not set
+# CONFIG_NVME_TARGET is not set
+
+#
+# Misc devices
+#
-+# CONFIG_SENSORS_LIS3LV02D is not set
+# CONFIG_AD525X_DPOT is not set
+CONFIG_ATMEL_TCLIB=y
+CONFIG_ATMEL_TCB_CLKSRC=y
@@ -1365,10 +1444,10 @@
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+# CONFIG_DS1682 is not set
-+# CONFIG_TI_DAC7512 is not set
+# CONFIG_USB_SWITCH_FSA9480 is not set
+# CONFIG_LATTICE_ECP3_CONFIG is not set
+CONFIG_SRAM=y
++CONFIG_SRAM_EXEC=y
+# CONFIG_C2PORT is not set
+
+#
@@ -1380,6 +1459,7 @@
+# CONFIG_EEPROM_MAX6875 is not set
+CONFIG_EEPROM_93CX6=y
+# CONFIG_EEPROM_93XX46 is not set
++# CONFIG_EEPROM_IDT_89HPESX is not set
+
+#
+# Texas Instruments shared transport line discipline
@@ -1387,11 +1467,11 @@
+# CONFIG_TI_ST is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
++# CONFIG_ALTERA_STAPL is not set
+
+#
-+# Altera FPGA firmware download module
++# Intel MIC & related support
+#
-+# CONFIG_ALTERA_STAPL is not set
+
+#
+# Intel MIC Bus Driver
@@ -1425,8 +1505,7 @@
+# VOP Driver
+#
+# CONFIG_ECHO is not set
-+# CONFIG_CXL_BASE is not set
-+# CONFIG_CXL_AFU_DRIVER_OPS is not set
++# CONFIG_MISC_RTSX_USB is not set
+
+#
+# SCSI device support
@@ -1435,7 +1514,6 @@
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_MQ_DEFAULT is not set
+CONFIG_SCSI_PROC_FS=y
+
@@ -1479,11 +1557,11 @@
+# CONFIG_EQUALIZER is not set
+# CONFIG_NET_TEAM is not set
+# CONFIG_MACVLAN is not set
++# CONFIG_IPVLAN is not set
+# CONFIG_VXLAN is not set
++# CONFIG_GTP is not set
+# CONFIG_MACSEC is not set
+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_TUN is not set
+# CONFIG_TUN_VNET_CROSS_LE is not set
+# CONFIG_VETH is not set
@@ -1497,59 +1575,74 @@
+# Distributed Switch Architecture drivers
+#
+CONFIG_ETHERNET=y
++# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_ALTERA_TSE is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
++# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_AURORA is not set
-+CONFIG_NET_CADENCE=y
-+CONFIG_MACB=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
++CONFIG_NET_VENDOR_CADENCE=y
++CONFIG_MACB=y
++CONFIG_MACB_USE_HWSTAMP=y
++# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CIRRUS is not set
++# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_DM9000 is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
++# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
++# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
++# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
++# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_ETHOC is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
++# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SMSC is not set
++# CONFIG_NET_VENDOR_SOCIONEXT is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
-+CONFIG_PHYLIB=y
-+CONFIG_SWPHY=y
-+
-+#
-+# MDIO bus device drivers
-+#
++CONFIG_MDIO_DEVICE=y
++CONFIG_MDIO_BUS=y
+# CONFIG_MDIO_BCM_UNIMAC is not set
+# CONFIG_MDIO_BITBANG is not set
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+# CONFIG_MDIO_HISI_FEMAC is not set
++# CONFIG_MDIO_MSCC_MIIM is not set
++CONFIG_PHYLIB=y
++CONFIG_SWPHY=y
++# CONFIG_LED_TRIGGER_PHY is not set
+
+#
+# MII PHY device drivers
+#
+# CONFIG_AMD_PHY is not set
+# CONFIG_AQUANTIA_PHY is not set
++# CONFIG_ASIX_PHY is not set
+# CONFIG_AT803X_PHY is not set
+# CONFIG_BCM7XXX_PHY is not set
+# CONFIG_BCM87XX_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_CICADA_PHY is not set
++# CONFIG_CORTINA_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
++# CONFIG_DP83822_PHY is not set
++# CONFIG_DP83TC811_PHY is not set
+# CONFIG_DP83848_PHY is not set
+# CONFIG_DP83867_PHY is not set
+CONFIG_FIXED_PHY=y
@@ -1558,12 +1651,16 @@
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_MARVELL_PHY is not set
++# CONFIG_MARVELL_10G_PHY is not set
+CONFIG_MICREL_PHY=y
+# CONFIG_MICROCHIP_PHY is not set
++# CONFIG_MICROCHIP_T1_PHY is not set
+# CONFIG_MICROSEMI_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_REALTEK_PHY is not set
++# CONFIG_RENESAS_PHY is not set
++# CONFIG_ROCKCHIP_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_TERANETICS_PHY is not set
@@ -1585,13 +1682,14 @@
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
-+CONFIG_USB_RTL8150=y
++# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_RTL8152=y
+# CONFIG_USB_LAN78XX is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_HSO is not set
+# CONFIG_USB_IPHETH is not set
+CONFIG_WLAN=y
++# CONFIG_WIRELESS_WDS is not set
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+# CONFIG_WLAN_VENDOR_ATH is not set
+# CONFIG_WLAN_VENDOR_ATMEL is not set
@@ -1602,6 +1700,12 @@
+# CONFIG_WLAN_VENDOR_MARVELL is not set
+CONFIG_WLAN_VENDOR_MEDIATEK=y
+CONFIG_MT7601U=y
++CONFIG_MT76_CORE=y
++CONFIG_MT76_LEDS=y
++CONFIG_MT76_USB=y
++CONFIG_MT76x2_COMMON=y
++CONFIG_MT76x0U=y
++CONFIG_MT76x2U=y
+CONFIG_WLAN_VENDOR_RALINK=y
+CONFIG_RT2X00=y
+# CONFIG_RT2500USB is not set
@@ -1634,6 +1738,7 @@
+# CONFIG_WLAN_VENDOR_ST is not set
+# CONFIG_WLAN_VENDOR_TI is not set
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
++# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+
@@ -1641,8 +1746,9 @@
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+# CONFIG_WAN is not set
++# CONFIG_NETDEVSIM is not set
++# CONFIG_NET_FAILOVER is not set
+# CONFIG_ISDN is not set
-+# CONFIG_NVM is not set
+
+#
+# Input device support
@@ -1657,10 +1763,7 @@
+#
+# Userland interfaces
+#
-+CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV_PSAUX=y
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
++# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
@@ -1675,6 +1778,7 @@
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_QT1070 is not set
+# CONFIG_KEYBOARD_QT2160 is not set
++# CONFIG_KEYBOARD_DLINK_DIR685 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_GPIO_POLLED=y
@@ -1692,6 +1796,7 @@
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_OMAP4 is not set
++# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
+# CONFIG_KEYBOARD_BCM is not set
@@ -1724,6 +1829,7 @@
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+# CONFIG_TRACE_SINK is not set
++CONFIG_LDISC_AUTOLOAD=y
+CONFIG_DEVMEM=y
+CONFIG_DEVKMEM=y
+
@@ -1756,15 +1862,14 @@
+# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
+# CONFIG_SERIAL_ST_ASC is not set
-+# CONFIG_SERIAL_STM32 is not set
+CONFIG_SERIAL_MCTRL_GPIO=y
++# CONFIG_SERIAL_DEV_BUS is not set
+# CONFIG_TTY_PRINTK is not set
+# CONFIG_HVC_DCC is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+CONFIG_HW_RANDOM_ATMEL=y
-+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_XILLYBUS is not set
@@ -1783,11 +1888,14 @@
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+# CONFIG_I2C_MUX_GPIO is not set
++# CONFIG_I2C_MUX_GPMUX is not set
++# CONFIG_I2C_MUX_LTC4306 is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+# CONFIG_I2C_MUX_PINCTRL is not set
+# CONFIG_I2C_MUX_REG is not set
+# CONFIG_I2C_DEMUX_PINCTRL is not set
++# CONFIG_I2C_MUX_MLXCPLD is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
@@ -1803,9 +1911,9 @@
+# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
+# CONFIG_I2C_EMEV2 is not set
+CONFIG_I2C_GPIO=y
++# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
-+# CONFIG_I2C_PXA_PCI is not set
+# CONFIG_I2C_RK3X is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
@@ -1830,6 +1938,7 @@
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
++CONFIG_SPI_MEM=y
+
+#
+# SPI Master Controller Drivers
@@ -1837,6 +1946,7 @@
+# CONFIG_SPI_ALTERA is not set
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_AT91_USART is not set
++CONFIG_SPI_ATMEL_QUADSPI=y
+# CONFIG_SPI_AXI_SPI_ENGINE is not set
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_CADENCE is not set
@@ -1844,7 +1954,6 @@
+CONFIG_SPI_GPIO=y
+# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_OC_TINY is not set
-+# CONFIG_SPI_PXA2XX_PCI is not set
+# CONFIG_SPI_ROCKCHIP is not set
+# CONFIG_SPI_SC18IS602 is not set
+# CONFIG_SPI_XCOMM is not set
@@ -1857,17 +1966,10 @@
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_LOOPBACK_TEST is not set
+# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_SPI_SLAVE is not set
+# CONFIG_SPMI is not set
+# CONFIG_HSI is not set
-+
-+#
-+# PPS support
-+#
+# CONFIG_PPS is not set
-+
-+#
-+# PPS generators support
-+#
+
+#
+# PTP clock support
@@ -1878,10 +1980,6 @@
+# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
+#
+CONFIG_PINCTRL=y
-+
-+#
-+# Pin controllers
-+#
+CONFIG_PINMUX=y
+CONFIG_PINCONF=y
+CONFIG_GENERIC_PINCONF=y
@@ -1889,9 +1987,12 @@
+CONFIG_PINCTRL_AT91=y
+CONFIG_PINCTRL_AT91PIO4=y
+# CONFIG_PINCTRL_AMD is not set
++# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_SINGLE is not set
++# CONFIG_PINCTRL_SX150X is not set
+CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
+CONFIG_GPIOLIB=y
++CONFIG_GPIOLIB_FASTPATH_LIMIT=512
+CONFIG_OF_GPIO=y
+CONFIG_GPIOLIB_IRQCHIP=y
+# CONFIG_DEBUG_GPIO is not set
@@ -1903,15 +2004,17 @@
+# CONFIG_GPIO_74XX_MMIO is not set
+# CONFIG_GPIO_ALTERA is not set
+# CONFIG_GPIO_DWAPB is not set
-+# CONFIG_GPIO_EM is not set
++# CONFIG_GPIO_FTGPIO010 is not set
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRGPIO is not set
++# CONFIG_GPIO_HLWD is not set
++# CONFIG_GPIO_MB86S7X is not set
+# CONFIG_GPIO_MOCKUP is not set
+# CONFIG_GPIO_MPC8XXX is not set
++# CONFIG_GPIO_SAMA5D2_PIOBU is not set
+CONFIG_GPIO_SYSCON=y
+# CONFIG_GPIO_XILINX is not set
+# CONFIG_GPIO_ZEVIO is not set
-+# CONFIG_GPIO_ZX is not set
+
+#
+# I2C GPIO expanders
@@ -1922,9 +2025,7 @@
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
-+# CONFIG_GPIO_SX150X is not set
+# CONFIG_GPIO_TPIC2810 is not set
-+# CONFIG_GPIO_TS4900 is not set
+
+#
+# MFD GPIO expanders
@@ -1935,14 +2036,11 @@
+# SPI GPIO expanders
+#
+# CONFIG_GPIO_74X164 is not set
++# CONFIG_GPIO_MAX3191X is not set
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_PISOSR is not set
-+
-+#
-+# SPI or I2C GPIO expanders
-+#
-+# CONFIG_GPIO_MCP23S08 is not set
++# CONFIG_GPIO_XRA1403 is not set
+
+#
+# USB GPIO expanders
@@ -1968,11 +2066,15 @@
+# CONFIG_PDA_POWER is not set
+# CONFIG_GENERIC_ADC_BATTERY is not set
+# CONFIG_TEST_POWER is not set
++# CONFIG_CHARGER_ADP5061 is not set
+CONFIG_BATTERY_ACT8945A=y
+# CONFIG_BATTERY_DS2780 is not set
+# CONFIG_BATTERY_DS2781 is not set
+# CONFIG_BATTERY_DS2782 is not set
++# CONFIG_BATTERY_LEGO_EV3 is not set
+# CONFIG_BATTERY_SBS is not set
++# CONFIG_CHARGER_SBS is not set
++# CONFIG_MANAGER_SBS is not set
+# CONFIG_BATTERY_BQ27XXX is not set
+# CONFIG_BATTERY_MAX17040 is not set
+# CONFIG_BATTERY_MAX17042 is not set
@@ -1980,8 +2082,9 @@
+# CONFIG_CHARGER_LP8727 is not set
+# CONFIG_CHARGER_GPIO is not set
+# CONFIG_CHARGER_MANAGER is not set
++# CONFIG_CHARGER_LTC3651 is not set
++# CONFIG_CHARGER_DETECTOR_MAX14656 is not set
+# CONFIG_CHARGER_BQ2415X is not set
-+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24257 is not set
+# CONFIG_CHARGER_BQ24735 is not set
+# CONFIG_CHARGER_BQ25890 is not set
@@ -1993,6 +2096,7 @@
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
++CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
+# CONFIG_WATCHDOG_SYSFS is not set
+
+#
@@ -2005,6 +2109,7 @@
+CONFIG_AT91SAM9X_WATCHDOG=y
+CONFIG_SAMA5D4_WATCHDOG=y
+# CONFIG_CADENCE_WATCHDOG is not set
++# CONFIG_FTWDT010_WATCHDOG is not set
+# CONFIG_DW_WATCHDOG is not set
+# CONFIG_MAX63XX_WATCHDOG is not set
+# CONFIG_MEN_A21_WDT is not set
@@ -2019,16 +2124,8 @@
+#
+# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
+CONFIG_SSB_POSSIBLE=y
-+
-+#
-+# Sonics Silicon Backplane
-+#
+# CONFIG_SSB is not set
+CONFIG_BCMA_POSSIBLE=y
-+
-+#
-+# Broadcom specific AMBA
-+#
+# CONFIG_BCMA is not set
+
+#
@@ -2043,9 +2140,12 @@
+CONFIG_MFD_AT91_USART=y
+CONFIG_MFD_ATMEL_FLEXCOM=y
+CONFIG_MFD_ATMEL_HLCDC=y
++CONFIG_MFD_ATMEL_SMC=y
+# CONFIG_MFD_BCM590XX is not set
++# CONFIG_MFD_BD9571MWV is not set
+# CONFIG_MFD_AXP20X_I2C is not set
+# CONFIG_MFD_CROS_EC is not set
++# CONFIG_MFD_MADERA is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_DA9052_SPI is not set
@@ -2055,13 +2155,11 @@
+# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_DA9150 is not set
+# CONFIG_MFD_DLN2 is not set
-+# CONFIG_MFD_EXYNOS_LPASS is not set
+# CONFIG_MFD_MC13XXX_SPI is not set
+# CONFIG_MFD_MC13XXX_I2C is not set
+# CONFIG_MFD_HI6421_PMIC is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
-+# CONFIG_INTEL_SOC_PMIC is not set
+# CONFIG_MFD_KEMPLD is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
@@ -2078,12 +2176,12 @@
+# CONFIG_MFD_MT6397 is not set
+# CONFIG_MFD_MENF21BMC is not set
+# CONFIG_EZX_PCAP is not set
++# CONFIG_MFD_CPCAP is not set
+# CONFIG_MFD_VIPERBOARD is not set
+# CONFIG_MFD_RETU is not set
+# CONFIG_MFD_PCF50633 is not set
-+# CONFIG_MFD_PM8921_CORE is not set
++# CONFIG_MFD_PM8XXX is not set
+# CONFIG_MFD_RT5033 is not set
-+# CONFIG_MFD_RTSX_USB is not set
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_RK808 is not set
+# CONFIG_MFD_RN5T618 is not set
@@ -2098,6 +2196,7 @@
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_LP8788 is not set
++# CONFIG_MFD_TI_LMU is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
@@ -2106,6 +2205,7 @@
+# CONFIG_MFD_TPS65090 is not set
+# CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TI_LP873X is not set
++# CONFIG_MFD_TI_LP87565 is not set
+# CONFIG_MFD_TPS65218 is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TPS65910 is not set
@@ -2117,7 +2217,6 @@
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_LM3533 is not set
+# CONFIG_MFD_TC3589X is not set
-+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
@@ -2128,11 +2227,13 @@
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
++# CONFIG_MFD_ROHM_BD718XX is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
++# CONFIG_REGULATOR_88PG86X is not set
+CONFIG_REGULATOR_ACT8865=y
+CONFIG_REGULATOR_ACT8945A=y
+# CONFIG_REGULATOR_AD5398 is not set
@@ -2153,17 +2254,36 @@
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
++# CONFIG_REGULATOR_MCP16502 is not set
+# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_PFUZE100 is not set
+# CONFIG_REGULATOR_PV88060 is not set
+# CONFIG_REGULATOR_PV88080 is not set
+# CONFIG_REGULATOR_PV88090 is not set
+# CONFIG_REGULATOR_PWM is not set
++# CONFIG_REGULATOR_SY8106A is not set
+# CONFIG_REGULATOR_TPS51632 is not set
+# CONFIG_REGULATOR_TPS62360 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
++# CONFIG_REGULATOR_TPS65132 is not set
+# CONFIG_REGULATOR_TPS6524X is not set
++# CONFIG_REGULATOR_VCTRL is not set
++CONFIG_RC_CORE=y
++CONFIG_RC_MAP=y
++# CONFIG_LIRC is not set
++CONFIG_RC_DECODERS=y
++CONFIG_IR_NEC_DECODER=y
++CONFIG_IR_RC5_DECODER=y
++CONFIG_IR_RC6_DECODER=y
++CONFIG_IR_JVC_DECODER=y
++CONFIG_IR_SONY_DECODER=y
++CONFIG_IR_SANYO_DECODER=y
++CONFIG_IR_SHARP_DECODER=y
++CONFIG_IR_MCE_KBD_DECODER=y
++CONFIG_IR_XMP_DECODER=y
++# CONFIG_IR_IMON_DECODER is not set
++# CONFIG_RC_DEVICES is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
@@ -2174,20 +2294,14 @@
+# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set
+# CONFIG_MEDIA_RADIO_SUPPORT is not set
+# CONFIG_MEDIA_SDR_SUPPORT is not set
-+# CONFIG_MEDIA_RC_SUPPORT is not set
++# CONFIG_MEDIA_CEC_SUPPORT is not set
+CONFIG_MEDIA_CONTROLLER=y
-+# CONFIG_MEDIA_CONTROLLER_DVB is not set
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_V4L2=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-+CONFIG_VIDEOBUF_GEN=y
-+CONFIG_VIDEOBUF2_CORE=y
-+CONFIG_VIDEOBUF2_MEMOPS=y
-+CONFIG_VIDEOBUF2_DMA_CONTIG=y
-+CONFIG_VIDEOBUF2_VMALLOC=y
-+# CONFIG_TTPCI_EEPROM is not set
++CONFIG_V4L2_FWNODE=y
+
+#
+# Media drivers
@@ -2212,6 +2326,8 @@
+#
+# CONFIG_VIDEO_EM28XX is not set
+CONFIG_V4L_PLATFORM_DRIVERS=y
++# CONFIG_VIDEO_CADENCE is not set
++# CONFIG_VIDEO_MUX is not set
+CONFIG_SOC_CAMERA=y
+# CONFIG_SOC_CAMERA_PLATFORM is not set
+# CONFIG_VIDEO_XILINX is not set
@@ -2224,11 +2340,17 @@
+# Supported MMC/SDIO adapters
+#
+# CONFIG_CYPRESS_FIRMWARE is not set
++CONFIG_VIDEOBUF2_CORE=y
++CONFIG_VIDEOBUF2_V4L2=y
++CONFIG_VIDEOBUF2_MEMOPS=y
++CONFIG_VIDEOBUF2_DMA_CONTIG=y
++CONFIG_VIDEOBUF2_VMALLOC=y
+
+#
+# Media ancillary drivers (tuners, sensors, i2c, spi, frontends)
+#
+CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
++CONFIG_VIDEO_IR_I2C=y
+
+#
+# Audio decoders, processors and mixers
@@ -2267,6 +2389,10 @@
+#
+
+#
++# SDR tuner chips
++#
++
++#
+# Miscellaneous helper chips
+#
+
@@ -2277,14 +2403,11 @@
+#
+# soc_camera sensor drivers
+#
-+# CONFIG_SOC_CAMERA_IMX074 is not set
+# CONFIG_SOC_CAMERA_MT9M001 is not set
+# CONFIG_SOC_CAMERA_MT9M111 is not set
-+# CONFIG_SOC_CAMERA_MT9T031 is not set
+# CONFIG_SOC_CAMERA_MT9T112 is not set
+# CONFIG_SOC_CAMERA_MT9V022 is not set
+# CONFIG_SOC_CAMERA_OV5642 is not set
-+# CONFIG_SOC_CAMERA_OV6650 is not set
+# CONFIG_SOC_CAMERA_OV772X is not set
+# CONFIG_SOC_CAMERA_OV9640 is not set
+# CONFIG_SOC_CAMERA_OV9740 is not set
@@ -2292,9 +2415,12 @@
+# CONFIG_SOC_CAMERA_TW9910 is not set
+
+#
++# Media SPI Adapters
++#
++
++#
+# Tools to develop new frontends
+#
-+# CONFIG_DVB_DUMMY_FE is not set
+
+#
+# Graphics support
@@ -2303,10 +2429,15 @@
+# CONFIG_IMX_IPUV3_CORE is not set
+CONFIG_DRM=y
+# CONFIG_DRM_DP_AUX_CHARDEV is not set
++# CONFIG_DRM_DEBUG_MM is not set
++# CONFIG_DRM_DEBUG_SELFTEST is not set
+CONFIG_DRM_KMS_HELPER=y
+CONFIG_DRM_KMS_FB_HELPER=y
+CONFIG_DRM_FBDEV_EMULATION=y
++CONFIG_DRM_FBDEV_OVERALLOC=100
++# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set
+# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
++# CONFIG_DRM_DP_CEC is not set
+CONFIG_DRM_GEM_CMA_HELPER=y
+CONFIG_DRM_KMS_CMA_HELPER=y
+
@@ -2316,44 +2447,71 @@
+# CONFIG_DRM_I2C_CH7006 is not set
+# CONFIG_DRM_I2C_SIL164 is not set
+# CONFIG_DRM_I2C_NXP_TDA998X is not set
++# CONFIG_DRM_I2C_NXP_TDA9950 is not set
+# CONFIG_DRM_HDLCD is not set
+# CONFIG_DRM_MALI_DISPLAY is not set
+
+#
+# ACP (Audio CoProcessor) Configuration
+#
++
++#
++# AMD Library routines
++#
+# CONFIG_DRM_VGEM is not set
++# CONFIG_DRM_VKMS is not set
+# CONFIG_DRM_EXYNOS is not set
+# CONFIG_DRM_UDL is not set
+# CONFIG_DRM_ARMADA is not set
+CONFIG_DRM_ATMEL_HLCDC=y
++# CONFIG_DRM_RCAR_DW_HDMI is not set
++# CONFIG_DRM_RCAR_LVDS is not set
+# CONFIG_DRM_OMAP is not set
+# CONFIG_DRM_TILCDC is not set
+# CONFIG_DRM_FSL_DCU is not set
++# CONFIG_DRM_STM is not set
+CONFIG_DRM_PANEL=y
+
+#
+# Display Panels
+#
++# CONFIG_DRM_PANEL_ARM_VERSATILE is not set
++# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_SIMPLE=y
++# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
+# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
++# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set
++# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set
+CONFIG_DRM_BRIDGE=y
++CONFIG_DRM_PANEL_BRIDGE=y
+
+#
+# Display Interface Bridges
+#
+# CONFIG_DRM_ANALOGIX_ANX78XX is not set
++# CONFIG_DRM_CDNS_DSI is not set
+# CONFIG_DRM_DUMB_VGA_DAC is not set
++# CONFIG_DRM_LVDS_ENCODER is not set
++# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
+# CONFIG_DRM_NXP_PTN3460 is not set
+# CONFIG_DRM_PARADE_PS8622 is not set
++# CONFIG_DRM_SIL_SII8620 is not set
+# CONFIG_DRM_SII902X is not set
++# CONFIG_DRM_SII9234 is not set
++# CONFIG_DRM_THINE_THC63LVD1024 is not set
+# CONFIG_DRM_TOSHIBA_TC358767 is not set
++# CONFIG_DRM_TI_TFP410 is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
+# CONFIG_DRM_STI is not set
+# CONFIG_DRM_ARCPGU is not set
++# CONFIG_DRM_MXSFB is not set
++# CONFIG_DRM_TINYDRM is not set
++# CONFIG_DRM_PL111 is not set
++# CONFIG_DRM_TVE200 is not set
+# CONFIG_DRM_LEGACY is not set
++CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
+
+#
+# Frame buffer Devices
@@ -2362,21 +2520,15 @@
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB_CMDLINE=y
+CONFIG_FB_NOTIFY=y
-+# CONFIG_FB_DDC is not set
-+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
-+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=y
+CONFIG_FB_SYS_COPYAREA=y
+CONFIG_FB_SYS_IMAGEBLIT=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=y
+CONFIG_FB_DEFERRED_IO=y
-+# CONFIG_FB_SVGALIB is not set
-+# CONFIG_FB_MACMODES is not set
-+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
@@ -2392,7 +2544,6 @@
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_BROADSHEET is not set
-+# CONFIG_FB_AUO_K190X is not set
+# CONFIG_FB_SIMPLE is not set
+# CONFIG_FB_SSD1307 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
@@ -2410,6 +2561,7 @@
+# CONFIG_LCD_AMS369FG06 is not set
+# CONFIG_LCD_LMS501KF03 is not set
+# CONFIG_LCD_HX8357 is not set
++# CONFIG_LCD_OTM3225A is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_PWM=y
@@ -2422,7 +2574,7 @@
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
-+# CONFIG_VGASTATE is not set
++# CONFIG_BACKLIGHT_ARCXCNN is not set
+CONFIG_VIDEOMODE_HELPERS=y
+CONFIG_HDMI=y
+
@@ -2433,16 +2585,13 @@
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+# CONFIG_LOGO is not set
+CONFIG_SOUND=y
-+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_DMAENGINE_PCM=y
+CONFIG_SND_JACK=y
+CONFIG_SND_JACK_INPUT_DEV=y
-+# CONFIG_SND_SEQUENCER is not set
-+# CONFIG_SND_MIXER_OSS is not set
-+# CONFIG_SND_PCM_OSS is not set
++# CONFIG_SND_OSSEMUL is not set
+CONFIG_SND_PCM_TIMER=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
@@ -2450,11 +2599,7 @@
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
-+# CONFIG_SND_RAWMIDI_SEQ is not set
-+# CONFIG_SND_OPL3_LIB_SEQ is not set
-+# CONFIG_SND_OPL4_LIB_SEQ is not set
-+# CONFIG_SND_SBAWE_SEQ is not set
-+# CONFIG_SND_EMU10K1_SEQ is not set
++# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_ALOOP is not set
@@ -2469,7 +2614,7 @@
+CONFIG_SND_ARM=y
+
+#
-+# Atmel devices (AVR32 and AT91)
++# Atmel devices (AT91)
+#
+# CONFIG_SND_ATMEL_AC97C is not set
+CONFIG_SND_SPI=y
@@ -2497,7 +2642,9 @@
+# CONFIG_SND_AT91_SOC_SAM9X5_WM8731 is not set
+CONFIG_SND_ATMEL_SOC_CLASSD=y
+CONFIG_SND_ATMEL_SOC_PDMIC=y
++# CONFIG_SND_ATMEL_SOC_TSE850_PCM5142 is not set
+CONFIG_SND_ATMEL_SOC_I2S=y
++# CONFIG_SND_SOC_MIKROE_PROTO is not set
+# CONFIG_SND_DESIGNWARE_I2S is not set
+
+#
@@ -2513,8 +2660,14 @@
+# CONFIG_SND_SOC_FSL_SPDIF is not set
+# CONFIG_SND_SOC_FSL_ESAI is not set
+# CONFIG_SND_SOC_IMX_AUDMUX is not set
++# CONFIG_SND_I2S_HI6210_I2S is not set
+# CONFIG_SND_SOC_IMG is not set
++
++#
++# STMicroelectronics STM32 SOC audio support
++#
+# CONFIG_SND_SOC_XTFPGA_I2S is not set
++# CONFIG_ZX_TDM is not set
+CONFIG_SND_SOC_I2C_AND_SPI=y
+
+#
@@ -2522,16 +2675,24 @@
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_ADAU1701 is not set
++# CONFIG_SND_SOC_ADAU1761_I2C is not set
++# CONFIG_SND_SOC_ADAU1761_SPI is not set
+# CONFIG_SND_SOC_ADAU7002 is not set
+# CONFIG_SND_SOC_AK4104 is not set
++# CONFIG_SND_SOC_AK4458 is not set
+# CONFIG_SND_SOC_AK4554 is not set
+# CONFIG_SND_SOC_AK4613 is not set
+# CONFIG_SND_SOC_AK4642 is not set
+# CONFIG_SND_SOC_AK5386 is not set
++# CONFIG_SND_SOC_AK5558 is not set
+# CONFIG_SND_SOC_ALC5623 is not set
++# CONFIG_SND_SOC_BD28623 is not set
+# CONFIG_SND_SOC_BT_SCO is not set
+# CONFIG_SND_SOC_CS35L32 is not set
+# CONFIG_SND_SOC_CS35L33 is not set
++# CONFIG_SND_SOC_CS35L34 is not set
++# CONFIG_SND_SOC_CS35L35 is not set
++# CONFIG_SND_SOC_CS42L42 is not set
+# CONFIG_SND_SOC_CS42L51_I2C is not set
+# CONFIG_SND_SOC_CS42L52 is not set
+# CONFIG_SND_SOC_CS42L56 is not set
@@ -2541,26 +2702,39 @@
+# CONFIG_SND_SOC_CS4271_I2C is not set
+# CONFIG_SND_SOC_CS4271_SPI is not set
+# CONFIG_SND_SOC_CS42XX8_I2C is not set
++# CONFIG_SND_SOC_CS43130 is not set
+# CONFIG_SND_SOC_CS4349 is not set
+# CONFIG_SND_SOC_CS53L30 is not set
-+# CONFIG_SND_SOC_ES8328 is not set
++# CONFIG_SND_SOC_ES7134 is not set
++# CONFIG_SND_SOC_ES7241 is not set
++# CONFIG_SND_SOC_ES8316 is not set
++# CONFIG_SND_SOC_ES8328_I2C is not set
++# CONFIG_SND_SOC_ES8328_SPI is not set
+# CONFIG_SND_SOC_GTM601 is not set
+# CONFIG_SND_SOC_INNO_RK3036 is not set
+# CONFIG_SND_SOC_MAX98504 is not set
++# CONFIG_SND_SOC_MAX9867 is not set
++# CONFIG_SND_SOC_MAX98927 is not set
++# CONFIG_SND_SOC_MAX98373 is not set
+# CONFIG_SND_SOC_MAX9860 is not set
++# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
+# CONFIG_SND_SOC_PCM1681 is not set
++# CONFIG_SND_SOC_PCM1789_I2C is not set
+# CONFIG_SND_SOC_PCM179X_I2C is not set
+# CONFIG_SND_SOC_PCM179X_SPI is not set
++# CONFIG_SND_SOC_PCM186X_I2C is not set
++# CONFIG_SND_SOC_PCM186X_SPI is not set
+# CONFIG_SND_SOC_PCM3168A_I2C is not set
+# CONFIG_SND_SOC_PCM3168A_SPI is not set
+# CONFIG_SND_SOC_PCM512x_I2C is not set
+# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_RT5616 is not set
+# CONFIG_SND_SOC_RT5631 is not set
-+# CONFIG_SND_SOC_RT5677_SPI is not set
+# CONFIG_SND_SOC_SGTL5000 is not set
++# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set
+# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
+# CONFIG_SND_SOC_SPDIF is not set
++# CONFIG_SND_SOC_SSM2305 is not set
+# CONFIG_SND_SOC_SSM2602_SPI is not set
+# CONFIG_SND_SOC_SSM2602_I2C is not set
+# CONFIG_SND_SOC_SSM4567 is not set
@@ -2571,14 +2745,21 @@
+# CONFIG_SND_SOC_TAS5086 is not set
+# CONFIG_SND_SOC_TAS571X is not set
+# CONFIG_SND_SOC_TAS5720 is not set
++# CONFIG_SND_SOC_TAS6424 is not set
++# CONFIG_SND_SOC_TDA7419 is not set
+# CONFIG_SND_SOC_TFA9879 is not set
+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
+# CONFIG_SND_SOC_TLV320AIC31XX is not set
++# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set
++# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set
+# CONFIG_SND_SOC_TLV320AIC3X is not set
+# CONFIG_SND_SOC_TS3A227E is not set
++# CONFIG_SND_SOC_TSCS42XX is not set
++# CONFIG_SND_SOC_TSCS454 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8523 is not set
++# CONFIG_SND_SOC_WM8524 is not set
+# CONFIG_SND_SOC_WM8580 is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8728 is not set
@@ -2589,6 +2770,7 @@
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8770 is not set
+# CONFIG_SND_SOC_WM8776 is not set
++# CONFIG_SND_SOC_WM8782 is not set
+# CONFIG_SND_SOC_WM8804_I2C is not set
+# CONFIG_SND_SOC_WM8804_SPI is not set
+# CONFIG_SND_SOC_WM8903 is not set
@@ -2598,11 +2780,17 @@
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8978 is not set
+# CONFIG_SND_SOC_WM8985 is not set
++# CONFIG_SND_SOC_ZX_AUD96P22 is not set
++# CONFIG_SND_SOC_MAX9759 is not set
++# CONFIG_SND_SOC_MT6351 is not set
++# CONFIG_SND_SOC_NAU8540 is not set
+# CONFIG_SND_SOC_NAU8810 is not set
++# CONFIG_SND_SOC_NAU8824 is not set
+# CONFIG_SND_SOC_TPA6130A2 is not set
+# CONFIG_SND_SIMPLE_CARD is not set
+# CONFIG_SND_SIMPLE_SCU_CARD is not set
-+# CONFIG_SOUND_PRIME is not set
++# CONFIG_SND_AUDIO_GRAPH_CARD is not set
++# CONFIG_SND_AUDIO_GRAPH_SCU_CARD is not set
+
+#
+# HID support
@@ -2617,27 +2805,31 @@
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
++# CONFIG_HID_ACCUTOUCH is not set
+# CONFIG_HID_ACRUX is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_APPLEIR is not set
++# CONFIG_HID_ASUS is not set
+# CONFIG_HID_AUREAL is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_BETOP_FF is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CORSAIR is not set
++# CONFIG_HID_COUGAR is not set
+# CONFIG_HID_PRODIKEYS is not set
+# CONFIG_HID_CMEDIA is not set
-+# CONFIG_HID_CP2112 is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EMS_FF is not set
++# CONFIG_HID_ELAN is not set
+# CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_GEMBIRD is not set
+# CONFIG_HID_GFRM is not set
+# CONFIG_HID_HOLTEK is not set
++# CONFIG_HID_GOOGLE_HAMMER is not set
+# CONFIG_HID_GT683R is not set
+# CONFIG_HID_KEYTOUCH is not set
+# CONFIG_HID_KYE is not set
@@ -2645,6 +2837,8 @@
+# CONFIG_HID_WALTOP is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_ICADE is not set
++# CONFIG_HID_ITE is not set
++# CONFIG_HID_JABRA is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LCPOWER is not set
@@ -2652,9 +2846,12 @@
+# CONFIG_HID_LENOVO is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MAGICMOUSE is not set
++# CONFIG_HID_MAYFLASH is not set
++# CONFIG_HID_REDRAGON is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_MULTITOUCH is not set
++# CONFIG_HID_NTI is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_ORTEK is not set
+# CONFIG_HID_PANTHERLORD is not set
@@ -2663,11 +2860,13 @@
+# CONFIG_HID_PICOLCD is not set
+# CONFIG_HID_PLANTRONICS is not set
+# CONFIG_HID_PRIMAX is not set
++# CONFIG_HID_RETRODE is not set
+# CONFIG_HID_ROCCAT is not set
+# CONFIG_HID_SAITEK is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SPEEDLINK is not set
++# CONFIG_HID_STEAM is not set
+# CONFIG_HID_STEELSERIES is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_RMI is not set
@@ -2677,6 +2876,7 @@
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THINGM is not set
+# CONFIG_HID_THRUSTMASTER is not set
++# CONFIG_HID_UDRAW_PS3 is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_WIIMOTE is not set
+# CONFIG_HID_XINMO is not set
@@ -2727,7 +2927,6 @@
+# CONFIG_USB_EHCI_HCD_PLATFORM is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
-+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
+# CONFIG_USB_MAX3421_HCD is not set
+CONFIG_USB_OHCI_HCD=y
@@ -2804,6 +3003,7 @@
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_F81232 is not set
++# CONFIG_USB_SERIAL_F8153X is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
@@ -2836,6 +3036,7 @@
+# CONFIG_USB_SERIAL_WISHBONE is not set
+# CONFIG_USB_SERIAL_SSU100 is not set
+# CONFIG_USB_SERIAL_QT2 is not set
++# CONFIG_USB_SERIAL_UPD78F0730 is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
@@ -2862,6 +3063,7 @@
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_YUREX is not set
+# CONFIG_USB_EZUSB_FX2 is not set
++# CONFIG_USB_HUB_USB251XB is not set
+# CONFIG_USB_HSIC_USB3503 is not set
+# CONFIG_USB_HSIC_USB4604 is not set
+# CONFIG_USB_LINK_LAYER_TEST is not set
@@ -2870,7 +3072,6 @@
+#
+# USB Physical Layer drivers
+#
-+# CONFIG_USB_PHY is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
@@ -2895,6 +3096,7 @@
+# CONFIG_USB_PXA27X is not set
+# CONFIG_USB_MV_UDC is not set
+# CONFIG_USB_MV_U3D is not set
++# CONFIG_USB_SNP_UDC_PLAT is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_BDC_UDC is not set
+# CONFIG_USB_NET2272 is not set
@@ -2931,31 +3133,29 @@
+CONFIG_USB_G_HID=m
+# CONFIG_USB_G_DBGP is not set
+CONFIG_USB_G_WEBCAM=m
++# CONFIG_TYPEC is not set
++# CONFIG_USB_ROLE_SWITCH is not set
+# CONFIG_USB_LED_TRIG is not set
+# CONFIG_USB_ULPI_BUS is not set
+# CONFIG_UWB is not set
+CONFIG_MMC=y
-+# CONFIG_MMC_DEBUG is not set
+CONFIG_PWRSEQ_EMMC=y
+CONFIG_PWRSEQ_SIMPLE=y
-+
-+#
-+# MMC/SD/SDIO Card Drivers
-+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=8
-+# CONFIG_MMC_BLOCK_BOUNCE is not set
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
++# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_SDHCI=y
-+CONFIG_MMC_SDHCI_IO_ACCESSORS=y
+CONFIG_MMC_SDHCI_PLTFM=y
+# CONFIG_MMC_SDHCI_OF_ARASAN is not set
+CONFIG_MMC_SDHCI_OF_AT91=y
++# CONFIG_MMC_SDHCI_OF_DWCMSHC is not set
++# CONFIG_MMC_SDHCI_CADENCE is not set
+# CONFIG_MMC_SDHCI_F_SDH30 is not set
+CONFIG_MMC_ATMELMCI=y
+# CONFIG_MMC_SPI is not set
@@ -2963,22 +3163,29 @@
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MMC_USDHI6ROL0 is not set
++# CONFIG_MMC_CQHCI is not set
+# CONFIG_MMC_MTK is not set
++# CONFIG_MMC_SDHCI_XENON is not set
++# CONFIG_MMC_SDHCI_OMAP is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+# CONFIG_LEDS_CLASS_FLASH is not set
++# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_BCM6328 is not set
+# CONFIG_LEDS_BCM6358 is not set
++# CONFIG_LEDS_CR0014114 is not set
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_LM3642 is not set
++# CONFIG_LEDS_LM3692X is not set
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_LP3944 is not set
++# CONFIG_LEDS_LP3952 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
@@ -3002,6 +3209,8 @@
+#
+# CONFIG_LEDS_BLINKM is not set
+# CONFIG_LEDS_SYSCON is not set
++# CONFIG_LEDS_MLXREG is not set
++# CONFIG_LEDS_USER is not set
+
+#
+# LED Triggers
@@ -3013,6 +3222,7 @@
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+CONFIG_LEDS_TRIGGER_CPU=y
++# CONFIG_LEDS_TRIGGER_ACTIVITY is not set
+CONFIG_LEDS_TRIGGER_GPIO=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
@@ -3022,10 +3232,11 @@
+# CONFIG_LEDS_TRIGGER_TRANSIENT is not set
+# CONFIG_LEDS_TRIGGER_CAMERA is not set
+# CONFIG_LEDS_TRIGGER_PANIC is not set
++# CONFIG_LEDS_TRIGGER_NETDEV is not set
+# CONFIG_ACCESSIBILITY is not set
++# CONFIG_INFINIBAND is not set
+CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_EDAC_SUPPORT=y
-+# CONFIG_EDAC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
@@ -3033,6 +3244,7 @@
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
++CONFIG_RTC_NVMEM=y
+
+#
+# RTC interfaces
@@ -3056,9 +3268,11 @@
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
++# CONFIG_RTC_DRV_ISL12026 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8523 is not set
+# CONFIG_RTC_DRV_PCF85063 is not set
++# CONFIG_RTC_DRV_PCF85363 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
@@ -3123,7 +3337,9 @@
+#
+CONFIG_RTC_DRV_AT91RM9200=y
+# CONFIG_RTC_DRV_AT91SAM9 is not set
++# CONFIG_RTC_DRV_FTRTC010 is not set
+# CONFIG_RTC_DRV_SNVS is not set
++# CONFIG_RTC_DRV_R7301 is not set
+
+#
+# HID Sensor RTC drivers
@@ -3137,8 +3353,10 @@
+#
+CONFIG_DMA_ENGINE=y
+CONFIG_DMA_OF=y
++# CONFIG_ALTERA_MSGDMA is not set
+CONFIG_AT_HDMAC=y
+CONFIG_AT_XDMAC=y
++# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_FSL_EDMA is not set
+# CONFIG_INTEL_IDMA64 is not set
+# CONFIG_NBPFAXI_DMA is not set
@@ -3155,14 +3373,12 @@
+#
+# DMABUF options
+#
-+# CONFIG_SYNC_FILE is not set
++CONFIG_SYNC_FILE=y
++# CONFIG_SW_SYNC is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+# CONFIG_VIRT_DRIVERS is not set
-+
-+#
-+# Virtio drivers
-+#
++CONFIG_VIRTIO_MENU=y
+# CONFIG_VIRTIO_MMIO is not set
+
+#
@@ -3172,6 +3388,7 @@
+# CONFIG_PRISM2_USB is not set
+# CONFIG_COMEDI is not set
+# CONFIG_RTLLIB is not set
++# CONFIG_RTL8723BS is not set
+# CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_VT6656 is not set
@@ -3183,11 +3400,8 @@
+#
+# Accelerometers
+#
-+# CONFIG_ADIS16201 is not set
+# CONFIG_ADIS16203 is not set
-+# CONFIG_ADIS16209 is not set
+# CONFIG_ADIS16240 is not set
-+# CONFIG_SCA3000 is not set
+
+#
+# Analog to digital converters
@@ -3217,42 +3431,20 @@
+# CONFIG_AD9834 is not set
+
+#
-+# Digital gyroscope sensors
-+#
-+# CONFIG_ADIS16060 is not set
-+
-+#
+# Network Analyzer, Impedance Converters
+#
+# CONFIG_AD5933 is not set
+
+#
-+# Light sensors
-+#
-+# CONFIG_SENSORS_ISL29018 is not set
-+# CONFIG_SENSORS_ISL29028 is not set
-+# CONFIG_TSL2583 is not set
-+# CONFIG_TSL2x7x is not set
-+
-+#
+# Active energy metering IC
+#
-+# CONFIG_ADE7753 is not set
-+# CONFIG_ADE7754 is not set
-+# CONFIG_ADE7758 is not set
-+# CONFIG_ADE7759 is not set
+# CONFIG_ADE7854 is not set
+
+#
+# Resolver to digital converters
+#
+# CONFIG_AD2S90 is not set
-+# CONFIG_AD2S1200 is not set
+# CONFIG_AD2S1210 is not set
-+
-+#
-+# Triggers - standalone
-+#
+
+#
+# Speakup console speech
@@ -3266,15 +3458,27 @@
+# CONFIG_STAGING_BOARD is not set
+# CONFIG_LTE_GDM724X is not set
+# CONFIG_MTD_SPINAND_MT29F is not set
-+# CONFIG_LNET is not set
+# CONFIG_GS_FPGABOOT is not set
++# CONFIG_UNISYSSPAR is not set
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
+# CONFIG_FB_TFT is not set
++CONFIG_WLAN_VENDOR_MCHP=y
++# CONFIG_WILC_SDIO is not set
++# CONFIG_WILC_SPI is not set
+# CONFIG_MOST is not set
+# CONFIG_KS7010 is not set
+# CONFIG_GREYBUS is not set
++# CONFIG_PI433 is not set
++# CONFIG_MTK_MMC is not set
++
++#
++# Gasket devices
++#
++# CONFIG_XIL_AXIS_FIFO is not set
++# CONFIG_EROFS_FS is not set
+# CONFIG_GOLDFISH is not set
+# CONFIG_CHROME_PLATFORMS is not set
++# CONFIG_MELLANOX_PLATFORM is not set
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_COMMON_CLK=y
@@ -3282,47 +3486,47 @@
+#
+# Common Clock Framework
+#
++# CONFIG_CLK_HSDK is not set
++# CONFIG_COMMON_CLK_MAX9485 is not set
+# CONFIG_COMMON_CLK_SI5351 is not set
+# CONFIG_COMMON_CLK_SI514 is not set
++# CONFIG_COMMON_CLK_SI544 is not set
+# CONFIG_COMMON_CLK_SI570 is not set
+# CONFIG_COMMON_CLK_CDCE706 is not set
+# CONFIG_COMMON_CLK_CDCE925 is not set
+# CONFIG_COMMON_CLK_CS2000_CP is not set
+# CONFIG_CLK_QORIQ is not set
-+# CONFIG_COMMON_CLK_NXP is not set
+# CONFIG_COMMON_CLK_PWM is not set
-+# CONFIG_COMMON_CLK_PXA is not set
-+# CONFIG_COMMON_CLK_PIC32 is not set
-+
-+#
-+# Hardware Spinlock drivers
-+#
++# CONFIG_COMMON_CLK_VC5 is not set
++# CONFIG_HWSPINLOCK is not set
+
+#
+# Clock Source drivers
+#
-+CONFIG_CLKSRC_OF=y
-+CONFIG_CLKSRC_PROBE=y
++CONFIG_TIMER_OF=y
++CONFIG_TIMER_PROBE=y
+# CONFIG_ARM_TIMER_SP804 is not set
+CONFIG_ATMEL_PIT=y
-+# CONFIG_SH_TIMER_CMT is not set
-+# CONFIG_SH_TIMER_MTU2 is not set
-+# CONFIG_SH_TIMER_TMU is not set
-+# CONFIG_EM_TIMER_STI is not set
+# CONFIG_MAILBOX is not set
+# CONFIG_IOMMU_SUPPORT is not set
+
+#
+# Remoteproc drivers
+#
-+# CONFIG_STE_MODEM_RPROC is not set
++# CONFIG_REMOTEPROC is not set
+
+#
+# Rpmsg drivers
+#
++# CONFIG_RPMSG_VIRTIO is not set
++# CONFIG_SOUNDWIRE is not set
+
+#
+# SOC (System On Chip) specific Drivers
++#
++
++#
++# Amlogic SoC drivers
+#
+CONFIG_AT91_SOC_ID=y
+
@@ -3330,8 +3534,24 @@
+# Broadcom SoC drivers
+#
+# CONFIG_SOC_BRCMSTB is not set
-+# CONFIG_SUNXI_SRAM is not set
++
++#
++# NXP/Freescale QorIQ SoC drivers
++#
++
++#
++# i.MX SoC drivers
++#
++
++#
++# Qualcomm SoC drivers
++#
+# CONFIG_SOC_TI is not set
++
++#
++# Xilinx SoC drivers
++#
++# CONFIG_XILINX_VCU is not set
+# CONFIG_PM_DEVFREQ is not set
+# CONFIG_EXTCON is not set
+CONFIG_MEMORY=y
@@ -3340,6 +3560,7 @@
+CONFIG_IIO=y
+CONFIG_IIO_BUFFER=y
+# CONFIG_IIO_BUFFER_CB is not set
++# CONFIG_IIO_BUFFER_HW_CONSUMER is not set
+CONFIG_IIO_KFIFO_BUF=y
+CONFIG_IIO_TRIGGERED_BUFFER=y
+# CONFIG_IIO_CONFIGFS is not set
@@ -3351,11 +3572,19 @@
+#
+# Accelerometers
+#
++# CONFIG_ADIS16201 is not set
++# CONFIG_ADIS16209 is not set
++# CONFIG_ADXL345_I2C is not set
++# CONFIG_ADXL345_SPI is not set
+# CONFIG_BMA180 is not set
+# CONFIG_BMA220 is not set
+# CONFIG_BMC150_ACCEL is not set
++# CONFIG_DA280 is not set
++# CONFIG_DA311 is not set
+# CONFIG_DMARD06 is not set
+# CONFIG_DMARD09 is not set
++# CONFIG_DMARD10 is not set
++# CONFIG_IIO_CROS_EC_ACCEL_LEGACY is not set
+# CONFIG_IIO_ST_ACCEL_3AXIS is not set
+# CONFIG_KXSD9 is not set
+# CONFIG_KXCJK1013 is not set
@@ -3368,6 +3597,7 @@
+# CONFIG_MMA9553 is not set
+# CONFIG_MXC4005 is not set
+# CONFIG_MXC6255 is not set
++# CONFIG_SCA3000 is not set
+# CONFIG_STK8312 is not set
+# CONFIG_STK8BA50 is not set
+
@@ -3378,6 +3608,7 @@
+# CONFIG_AD7291 is not set
+# CONFIG_AD7298 is not set
+# CONFIG_AD7476 is not set
++# CONFIG_AD7766 is not set
+# CONFIG_AD7791 is not set
+# CONFIG_AD7793 is not set
+# CONFIG_AD7887 is not set
@@ -3386,22 +3617,39 @@
+CONFIG_AT91_ADC=y
+CONFIG_AT91_SAMA5D2_ADC=y
+# CONFIG_CC10001_ADC is not set
++# CONFIG_ENVELOPE_DETECTOR is not set
+# CONFIG_HI8435 is not set
++# CONFIG_HX711 is not set
+# CONFIG_INA2XX_ADC is not set
++# CONFIG_LTC2471 is not set
+# CONFIG_LTC2485 is not set
++# CONFIG_LTC2497 is not set
+# CONFIG_MAX1027 is not set
++# CONFIG_MAX11100 is not set
++# CONFIG_MAX1118 is not set
+# CONFIG_MAX1363 is not set
++# CONFIG_MAX9611 is not set
+# CONFIG_MCP320X is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
++# CONFIG_SD_ADC_MODULATOR is not set
+# CONFIG_TI_ADC081C is not set
+# CONFIG_TI_ADC0832 is not set
++# CONFIG_TI_ADC084S021 is not set
+# CONFIG_TI_ADC12138 is not set
++# CONFIG_TI_ADC108S102 is not set
+# CONFIG_TI_ADC128S052 is not set
+# CONFIG_TI_ADC161S626 is not set
+# CONFIG_TI_ADS1015 is not set
++# CONFIG_TI_ADS7950 is not set
+# CONFIG_TI_ADS8688 is not set
++# CONFIG_TI_TLC4541 is not set
+# CONFIG_VF610_ADC is not set
++
++#
++# Analog Front Ends
++#
++# CONFIG_IIO_RESCALE is not set
+
+#
+# Amplifiers
@@ -3412,6 +3660,8 @@
+# Chemical Sensors
+#
+# CONFIG_ATLAS_PH_SENSOR is not set
++# CONFIG_BME680 is not set
++# CONFIG_CCS811 is not set
+# CONFIG_IAQCORE is not set
+# CONFIG_VZ89X is not set
+
@@ -3423,6 +3673,10 @@
+# SSP Sensor Common
+#
+# CONFIG_IIO_SSP_SENSORHUB is not set
++
++#
++# Counters
++#
+
+#
+# Digital to analog converters
@@ -3437,18 +3691,25 @@
+# CONFIG_AD5593R is not set
+# CONFIG_AD5504 is not set
+# CONFIG_AD5624R_SPI is not set
-+# CONFIG_AD5686 is not set
++# CONFIG_LTC2632 is not set
++# CONFIG_AD5686_SPI is not set
++# CONFIG_AD5696_I2C is not set
+# CONFIG_AD5755 is not set
++# CONFIG_AD5758 is not set
+# CONFIG_AD5761 is not set
+# CONFIG_AD5764 is not set
+# CONFIG_AD5791 is not set
+# CONFIG_AD7303 is not set
+# CONFIG_AD8801 is not set
++# CONFIG_DPOT_DAC is not set
++# CONFIG_DS4424 is not set
+# CONFIG_M62332 is not set
+# CONFIG_MAX517 is not set
+# CONFIG_MAX5821 is not set
+# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
++# CONFIG_TI_DAC082S085 is not set
++# CONFIG_TI_DAC5571 is not set
+# CONFIG_VF610_DAC is not set
+
+#
@@ -3478,6 +3739,7 @@
+# CONFIG_ADIS16260 is not set
+# CONFIG_ADXRS450 is not set
+# CONFIG_BMG160 is not set
++# CONFIG_MPU3050_I2C is not set
+# CONFIG_IIO_ST_GYRO_3AXIS is not set
+# CONFIG_ITG3200 is not set
+
@@ -3491,6 +3753,7 @@
+# CONFIG_AFE4403 is not set
+# CONFIG_AFE4404 is not set
+# CONFIG_MAX30100 is not set
++# CONFIG_MAX30102 is not set
+
+#
+# Humidity sensors
@@ -3498,6 +3761,7 @@
+# CONFIG_AM2315 is not set
+# CONFIG_DHT11 is not set
+# CONFIG_HDC100X is not set
++# CONFIG_HTS221 is not set
+# CONFIG_HTU21 is not set
+# CONFIG_SI7005 is not set
+# CONFIG_SI7020 is not set
@@ -3512,6 +3776,7 @@
+# CONFIG_KMX61 is not set
+# CONFIG_INV_MPU6050_I2C is not set
+# CONFIG_INV_MPU6050_SPI is not set
++# CONFIG_IIO_ST_LSM6DSX is not set
+
+#
+# Light sensors
@@ -3525,24 +3790,34 @@
+# CONFIG_CM32181 is not set
+# CONFIG_CM3232 is not set
+# CONFIG_CM3323 is not set
++# CONFIG_CM3605 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
++# CONFIG_SENSORS_ISL29018 is not set
++# CONFIG_SENSORS_ISL29028 is not set
+# CONFIG_ISL29125 is not set
+# CONFIG_JSA1212 is not set
+# CONFIG_RPR0521 is not set
+# CONFIG_LTR501 is not set
++# CONFIG_LV0104CS is not set
+# CONFIG_MAX44000 is not set
+# CONFIG_OPT3001 is not set
+# CONFIG_PA12203001 is not set
++# CONFIG_SI1133 is not set
+# CONFIG_SI1145 is not set
+# CONFIG_STK3310 is not set
++# CONFIG_ST_UVIS25 is not set
+# CONFIG_TCS3414 is not set
+# CONFIG_TCS3472 is not set
+# CONFIG_SENSORS_TSL2563 is not set
++# CONFIG_TSL2583 is not set
++# CONFIG_TSL2772 is not set
+# CONFIG_TSL4531 is not set
+# CONFIG_US5182D is not set
+# CONFIG_VCNL4000 is not set
+# CONFIG_VEML6070 is not set
++# CONFIG_VL6180 is not set
++# CONFIG_ZOPT2201 is not set
+
+#
+# Magnetometer sensors
@@ -3559,6 +3834,11 @@
+# CONFIG_SENSORS_HMC5843_SPI is not set
+
+#
++# Multiplexers
++#
++# CONFIG_IIO_MUX is not set
++
++#
+# Inclinometer sensors
+#
+
@@ -3571,15 +3851,24 @@
+#
+# Digital potentiometers
+#
++# CONFIG_AD5272 is not set
+# CONFIG_DS1803 is not set
++# CONFIG_MAX5481 is not set
+# CONFIG_MAX5487 is not set
++# CONFIG_MCP4018 is not set
+# CONFIG_MCP4131 is not set
+# CONFIG_MCP4531 is not set
+# CONFIG_TPL0102 is not set
+
+#
++# Digital potentiostats
++#
++# CONFIG_LMP91000 is not set
++
++#
+# Pressure sensors
+#
++# CONFIG_ABP060MG is not set
+# CONFIG_BMP280 is not set
+# CONFIG_HP03 is not set
+# CONFIG_MPL115_I2C is not set
@@ -3598,17 +3887,28 @@
+# CONFIG_AS3935 is not set
+
+#
-+# Proximity sensors
++# Proximity and distance sensors
+#
++# CONFIG_ISL29501 is not set
+# CONFIG_LIDAR_LITE_V2 is not set
++# CONFIG_RFD77402 is not set
++# CONFIG_SRF04 is not set
+# CONFIG_SX9500 is not set
++# CONFIG_SRF08 is not set
++
++#
++# Resolver to digital converters
++#
++# CONFIG_AD2S1200 is not set
+
+#
+# Temperature sensors
+#
+# CONFIG_MAXIM_THERMOCOUPLE is not set
+# CONFIG_MLX90614 is not set
++# CONFIG_MLX90632 is not set
+# CONFIG_TMP006 is not set
++# CONFIG_TMP007 is not set
+# CONFIG_TSYS01 is not set
+# CONFIG_TSYS02D is not set
+CONFIG_PWM=y
@@ -3618,62 +3918,54 @@
+CONFIG_PWM_ATMEL_TCB=y
+# CONFIG_PWM_FSL_FTM is not set
+# CONFIG_PWM_PCA9685 is not set
++
++#
++# IRQ chip support
++#
+CONFIG_IRQCHIP=y
+CONFIG_ARM_GIC_MAX_NR=1
+CONFIG_ATMEL_AIC5_IRQ=y
+# CONFIG_IPACK_BUS is not set
+CONFIG_RESET_CONTROLLER=y
-+# CONFIG_RESET_ATH79 is not set
-+# CONFIG_RESET_BERLIN is not set
-+# CONFIG_RESET_LPC18XX is not set
-+# CONFIG_RESET_MESON is not set
-+# CONFIG_RESET_PISTACHIO is not set
-+# CONFIG_RESET_SOCFPGA is not set
-+# CONFIG_RESET_STM32 is not set
-+# CONFIG_RESET_SUNXI is not set
-+# CONFIG_TI_SYSCON_RESET is not set
-+# CONFIG_RESET_ZYNQ is not set
++# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+# CONFIG_GENERIC_PHY is not set
++# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_PHY_PXA_28NM_HSIC is not set
+# CONFIG_PHY_PXA_28NM_USB2 is not set
-+# CONFIG_BCM_KONA_USB2_PHY is not set
++# CONFIG_PHY_CPCAP_USB is not set
++# CONFIG_PHY_MAPPHONE_MDM6600 is not set
+# CONFIG_POWERCAP is not set
+# CONFIG_MCB is not set
-+
-+#
-+# Performance monitor support
-+#
+# CONFIG_RAS is not set
+
+#
+# Android
+#
+# CONFIG_ANDROID is not set
++# CONFIG_DAX is not set
+CONFIG_NVMEM=y
++
++#
++# HW tracing support
++#
+# CONFIG_STM is not set
+# CONFIG_INTEL_TH is not set
-+
-+#
-+# FPGA Configuration Support
-+#
+# CONFIG_FPGA is not set
-+
-+#
-+# Firmware Drivers
-+#
-+# CONFIG_FIRMWARE_MEMMAP is not set
-+# CONFIG_FW_CFG_SYSFS is not set
-+CONFIG_HAVE_ARM_SMCCC=y
++# CONFIG_FSI is not set
++# CONFIG_TEE is not set
++# CONFIG_SIOX is not set
++# CONFIG_SLIMBUS is not set
+
+#
+# File systems
+#
+CONFIG_DCACHE_WORD_ACCESS=y
++CONFIG_FS_IOMAP=y
+# CONFIG_EXT2_FS is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
@@ -3695,7 +3987,6 @@
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_F2FS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_EXPORTFS=y
+# CONFIG_EXPORTFS_BLOCK_OPS is not set
+CONFIG_FILE_LOCKING=y
@@ -3706,8 +3997,8 @@
+CONFIG_INOTIFY_USER=y
+CONFIG_FANOTIFY=y
+# CONFIG_QUOTA is not set
-+# CONFIG_QUOTACTL is not set
+# CONFIG_AUTOFS4_FS is not set
++# CONFIG_AUTOFS_FS is not set
+# CONFIG_FUSE_FS is not set
+# CONFIG_OVERLAY_FS is not set
+
@@ -3747,7 +4038,7 @@
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_TMPFS_XATTR is not set
-+# CONFIG_HUGETLB_PAGE is not set
++CONFIG_MEMFD_CREATE=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ORANGEFS_FS is not set
@@ -3767,15 +4058,15 @@
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_ATIME_SUPPORT is not set
-+# CONFIG_LOGFS is not set
++CONFIG_UBIFS_FS_XATTR=y
++# CONFIG_UBIFS_FS_ENCRYPTION is not set
++CONFIG_UBIFS_FS_SECURITY=y
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
@@ -3808,7 +4099,6 @@
+# CONFIG_SUNRPC_DEBUG is not set
+# CONFIG_CEPH_FS is not set
+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_NLS=y
@@ -3865,158 +4155,6 @@
+# CONFIG_DLM is not set
+
+#
-+# Kernel hacking
-+#
-+
-+#
-+# printk and dmesg options
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_DYNAMIC_DEBUG is not set
-+
-+#
-+# Compile-time checks and compiler options
-+#
-+# CONFIG_DEBUG_INFO is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_FRAME_WARN=1024
-+CONFIG_STRIP_ASM_SYMS=y
-+# CONFIG_READABLE_ASM is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_PAGE_OWNER is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_SECTION_MISMATCH is not set
-+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
-+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-+# CONFIG_MAGIC_SYSRQ is not set
-+CONFIG_DEBUG_KERNEL=y
-+
-+#
-+# Memory Debugging
-+#
-+# CONFIG_PAGE_EXTENSION is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_PAGE_POISONING is not set
-+# CONFIG_DEBUG_OBJECTS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+CONFIG_HAVE_DEBUG_KMEMLEAK=y
-+# CONFIG_DEBUG_KMEMLEAK is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_VM is not set
-+CONFIG_DEBUG_MEMORY_INIT=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+
-+#
-+# Debug Lockups and Hangs
-+#
-+# CONFIG_LOCKUP_DETECTOR is not set
-+# CONFIG_DETECT_HUNG_TASK is not set
-+# CONFIG_WQ_WATCHDOG is not set
-+# CONFIG_PANIC_ON_OOPS is not set
-+CONFIG_PANIC_ON_OOPS_VALUE=0
-+CONFIG_PANIC_TIMEOUT=0
-+# CONFIG_SCHED_DEBUG is not set
-+# CONFIG_SCHED_INFO is not set
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_SCHED_STACK_END_CHECK is not set
-+# CONFIG_DEBUG_TIMEKEEPING is not set
-+# CONFIG_TIMER_STATS is not set
-+
-+#
-+# Lock Debugging (spinlocks, mutexes, etc...)
-+#
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+# CONFIG_DEBUG_MUTEXES is not set
-+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
-+# CONFIG_DEBUG_LOCK_ALLOC is not set
-+# CONFIG_PROVE_LOCKING is not set
-+# CONFIG_LOCK_STAT is not set
-+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_LOCK_TORTURE_TEST is not set
-+# CONFIG_STACKTRACE is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+CONFIG_DEBUG_BUGVERBOSE=y
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_PI_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_DEBUG_NOTIFIERS is not set
-+# CONFIG_DEBUG_CREDENTIALS is not set
-+
-+#
-+# RCU Debugging
-+#
-+# CONFIG_PROVE_RCU is not set
-+# CONFIG_SPARSE_RCU_POINTER is not set
-+# CONFIG_TORTURE_TEST is not set
-+# CONFIG_RCU_PERF_TEST is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_RCU_TRACE is not set
-+# CONFIG_RCU_EQS_DEBUG is not set
-+# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
-+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-+# CONFIG_NOTIFIER_ERROR_INJECTION is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_LATENCYTOP is not set
-+CONFIG_HAVE_FUNCTION_TRACER=y
-+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-+CONFIG_HAVE_DYNAMIC_FTRACE=y
-+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
-+CONFIG_HAVE_C_RECORDMCOUNT=y
-+CONFIG_TRACING_SUPPORT=y
-+# CONFIG_FTRACE is not set
-+
-+#
-+# Runtime Testing
-+#
-+# CONFIG_LKDTM is not set
-+# CONFIG_TEST_LIST_SORT is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_RBTREE_TEST is not set
-+# CONFIG_INTERVAL_TREE_TEST is not set
-+# CONFIG_PERCPU_TEST is not set
-+# CONFIG_ATOMIC64_SELFTEST is not set
-+# CONFIG_TEST_HEXDUMP is not set
-+# CONFIG_TEST_STRING_HELPERS is not set
-+# CONFIG_TEST_KSTRTOX is not set
-+# CONFIG_TEST_PRINTF is not set
-+# CONFIG_TEST_BITMAP is not set
-+# CONFIG_TEST_UUID is not set
-+# CONFIG_TEST_RHASHTABLE is not set
-+# CONFIG_TEST_HASH is not set
-+# CONFIG_DMA_API_DEBUG is not set
-+# CONFIG_TEST_LKM is not set
-+# CONFIG_TEST_USER_COPY is not set
-+# CONFIG_TEST_BPF is not set
-+# CONFIG_TEST_FIRMWARE is not set
-+# CONFIG_TEST_UDELAY is not set
-+# CONFIG_MEMTEST is not set
-+# CONFIG_TEST_STATIC_KEYS is not set
-+# CONFIG_SAMPLES is not set
-+CONFIG_HAVE_ARCH_KGDB=y
-+# CONFIG_KGDB is not set
-+# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set
-+# CONFIG_UBSAN is not set
-+CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
-+# CONFIG_STRICT_DEVMEM is not set
-+# CONFIG_ARM_PTDUMP is not set
-+CONFIG_ARM_UNWIND=y
-+# CONFIG_DEBUG_USER is not set
-+# CONFIG_DEBUG_LL is not set
-+CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
-+# CONFIG_DEBUG_UART_8250 is not set
-+CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
-+# CONFIG_PID_IN_CONTEXTIDR is not set
-+# CONFIG_DEBUG_SET_MODULE_RONX is not set
-+# CONFIG_CORESIGHT is not set
-+
-+#
+# Security options
+#
+CONFIG_KEYS=y
@@ -4028,8 +4166,9 @@
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
-+CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY is not set
++# CONFIG_FORTIFY_SOURCE is not set
++# CONFIG_STATIC_USERMODEHELPER is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
@@ -4049,13 +4188,16 @@
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_RNG_DEFAULT=y
+CONFIG_CRYPTO_AKCIPHER2=y
++CONFIG_CRYPTO_AKCIPHER=y
+CONFIG_CRYPTO_KPP2=y
-+# CONFIG_CRYPTO_RSA is not set
++CONFIG_CRYPTO_KPP=y
++CONFIG_CRYPTO_ACOMP2=y
++CONFIG_CRYPTO_RSA=y
+# CONFIG_CRYPTO_DH is not set
-+# CONFIG_CRYPTO_ECDH is not set
++CONFIG_CRYPTO_ECDH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
-+# CONFIG_CRYPTO_USER is not set
++CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+CONFIG_CRYPTO_GF128MUL=y
+CONFIG_CRYPTO_NULL=y
@@ -4072,25 +4214,31 @@
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+# CONFIG_CRYPTO_CHACHA20POLY1305 is not set
++# CONFIG_CRYPTO_AEGIS128 is not set
++# CONFIG_CRYPTO_AEGIS128L is not set
++# CONFIG_CRYPTO_AEGIS256 is not set
++# CONFIG_CRYPTO_MORUS640 is not set
++# CONFIG_CRYPTO_MORUS1280 is not set
+CONFIG_CRYPTO_SEQIV=y
-+CONFIG_CRYPTO_ECHAINIV=m
++CONFIG_CRYPTO_ECHAINIV=y
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
++# CONFIG_CRYPTO_CFB is not set
+CONFIG_CRYPTO_CTR=y
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_XTS is not set
++CONFIG_CRYPTO_XTS=y
+# CONFIG_CRYPTO_KEYWRAP is not set
+
+#
+# Hash modes
+#
-+# CONFIG_CRYPTO_CMAC is not set
++CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
@@ -4104,7 +4252,7 @@
+CONFIG_CRYPTO_GHASH=y
+# CONFIG_CRYPTO_POLY1305 is not set
+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
++CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
@@ -4114,6 +4262,7 @@
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+# CONFIG_CRYPTO_SHA3 is not set
++# CONFIG_CRYPTO_SM3 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
@@ -4121,6 +4270,7 @@
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_AES_TI is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
@@ -4134,6 +4284,7 @@
+# CONFIG_CRYPTO_CHACHA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_SM4 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
@@ -4145,6 +4296,7 @@
+# CONFIG_CRYPTO_842 is not set
+# CONFIG_CRYPTO_LZ4 is not set
+# CONFIG_CRYPTO_LZ4HC is not set
++# CONFIG_CRYPTO_ZSTD is not set
+
+#
+# Random Number Generation
@@ -4160,19 +4312,32 @@
+CONFIG_CRYPTO_USER_API_HASH=y
+CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_USER_API_RNG=y
-+# CONFIG_CRYPTO_USER_API_AEAD is not set
++CONFIG_CRYPTO_USER_API_AEAD=y
++CONFIG_CRYPTO_USER_API_AKCIPHER=y
++# CONFIG_CRYPTO_USER_API_KPP is not set
++CONFIG_CRYPTO_HASH_INFO=y
+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_ATMEL_AUTHENC is not set
++CONFIG_CRYPTO_DEV_ATMEL_AUTHENC=y
+CONFIG_CRYPTO_DEV_ATMEL_AES=y
+CONFIG_CRYPTO_DEV_ATMEL_TDES=y
+CONFIG_CRYPTO_DEV_ATMEL_SHA=y
-+# CONFIG_ASYMMETRIC_KEY_TYPE is not set
++CONFIG_CRYPTO_DEV_ATMEL_ECC=y
++CONFIG_CRYPTO_DEV_CCREE=y
++CONFIG_ASYMMETRIC_KEY_TYPE=y
++CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
++CONFIG_X509_CERTIFICATE_PARSER=y
++CONFIG_PKCS7_MESSAGE_PARSER=y
++# CONFIG_PKCS7_TEST_KEY is not set
++# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
+
+#
+# Certificates for signature checking
+#
-+# CONFIG_ARM_CRYPTO is not set
-+# CONFIG_BINARY_PRINTF is not set
++CONFIG_SYSTEM_TRUSTED_KEYRING=y
++CONFIG_SYSTEM_TRUSTED_KEYS=""
++# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
++# CONFIG_SECONDARY_TRUSTED_KEYRING is not set
++# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
+
+#
+# Library routines
@@ -4184,7 +4349,6 @@
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
+CONFIG_GENERIC_PCI_IOMAP=y
-+CONFIG_GENERIC_IO=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
@@ -4196,10 +4360,11 @@
+# CONFIG_CRC32_SLICEBY4 is not set
+# CONFIG_CRC32_SARWATE is not set
+# CONFIG_CRC32_BIT is not set
++# CONFIG_CRC64 is not set
++# CONFIG_CRC4 is not set
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+# CONFIG_CRC8 is not set
-+# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
+# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
@@ -4223,70 +4388,2332 @@
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT_MAP=y
+CONFIG_HAS_DMA=y
++CONFIG_NEED_DMA_MAP_STATE=y
++CONFIG_HAVE_GENERIC_DMA_COHERENT=y
++CONFIG_SGL_ALLOC=y
+CONFIG_DQL=y
++CONFIG_GLOB=y
++# CONFIG_GLOB_SELFTEST is not set
+CONFIG_NLATTR=y
++CONFIG_CLZ_TAB=y
+# CONFIG_CORDIC is not set
+# CONFIG_DDR is not set
+# CONFIG_IRQ_POLL is not set
++CONFIG_MPILIB=y
+CONFIG_LIBFDT=y
+CONFIG_OID_REGISTRY=y
-+# CONFIG_SG_SPLIT is not set
+CONFIG_SG_POOL=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
+CONFIG_SBITMAP=y
-+# CONFIG_VIRTUALIZATION is not set
-diff -Nuar linux-at91/drivers/net/wireless/ralink/rt2x00/rt2800usb.c linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
---- linux-at91/drivers/net/wireless/ralink/rt2x00/rt2800usb.c 2019-08-18 17:24:53.000000000 +0800
-+++ linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2800usb.c 2019-08-22 23:05:23.819524309 +0800
-@@ -123,7 +123,8 @@
- if (!test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))
- return false;
-
-- tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(100));
-+ /* modify from 100 by guowenxue 2019.08.18 */
-+ tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(500));
- if (unlikely(tout))
- rt2x00_dbg(entry->queue->rt2x00dev,
- "TX status timeout for entry %d in queue %d\n",
-diff -Nuar linux-at91/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
---- linux-at91/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h 2019-08-18 17:24:53.000000000 +0800
-+++ linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h 2019-08-22 23:05:23.819524309 +0800
-@@ -632,7 +632,8 @@
- {
- if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
- return false;
-- return time_after(jiffies, entry->last_action + msecs_to_jiffies(100));
-+ /*modify from by guowenxue 2019.08.18*/
-+ return time_after(jiffies, entry->last_action + msecs_to_jiffies(500));
++# CONFIG_STRING_SELFTEST is not set
++
++#
++# Kernel hacking
++#
++
++#
++# printk and dmesg options
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
++CONFIG_CONSOLE_LOGLEVEL_QUIET=4
++CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++
++#
++# Compile-time checks and compiler options
++#
++# CONFIG_DEBUG_INFO is not set
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++CONFIG_STRIP_ASM_SYMS=y
++# CONFIG_READABLE_ASM is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_PAGE_OWNER is not set
++CONFIG_DEBUG_FS=y
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_DEBUG_SECTION_MISMATCH is not set
++CONFIG_SECTION_MISMATCH_WARN_ONLY=y
++# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
++# CONFIG_MAGIC_SYSRQ is not set
++CONFIG_DEBUG_KERNEL=y
++
++#
++# Memory Debugging
++#
++# CONFIG_PAGE_EXTENSION is not set
++# CONFIG_DEBUG_PAGEALLOC is not set
++# CONFIG_PAGE_POISONING is not set
++# CONFIG_DEBUG_RODATA_TEST is not set
++# CONFIG_DEBUG_OBJECTS is not set
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_HAVE_DEBUG_KMEMLEAK=y
++# CONFIG_DEBUG_KMEMLEAK is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
++# CONFIG_DEBUG_VIRTUAL is not set
++CONFIG_DEBUG_MEMORY_INIT=y
++CONFIG_ARCH_HAS_KCOV=y
++CONFIG_CC_HAS_SANCOV_TRACE_PC=y
++# CONFIG_KCOV is not set
++# CONFIG_DEBUG_SHIRQ is not set
++
++#
++# Debug Lockups and Hangs
++#
++# CONFIG_SOFTLOCKUP_DETECTOR is not set
++# CONFIG_DETECT_HUNG_TASK is not set
++# CONFIG_WQ_WATCHDOG is not set
++# CONFIG_PANIC_ON_OOPS is not set
++CONFIG_PANIC_ON_OOPS_VALUE=0
++CONFIG_PANIC_TIMEOUT=0
++# CONFIG_SCHED_DEBUG is not set
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_SCHED_STACK_END_CHECK is not set
++# CONFIG_DEBUG_TIMEKEEPING is not set
++
++#
++# Lock Debugging (spinlocks, mutexes, etc...)
++#
++CONFIG_LOCK_DEBUGGING_SUPPORT=y
++# CONFIG_PROVE_LOCKING is not set
++# CONFIG_LOCK_STAT is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_DEBUG_ATOMIC_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_LOCK_TORTURE_TEST is not set
++# CONFIG_WW_MUTEX_SELFTEST is not set
++# CONFIG_STACKTRACE is not set
++# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_PI_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_DEBUG_NOTIFIERS is not set
++# CONFIG_DEBUG_CREDENTIALS is not set
++
++#
++# RCU Debugging
++#
++# CONFIG_RCU_PERF_TEST is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_RCU_TRACE is not set
++# CONFIG_RCU_EQS_DEBUG is not set
++# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
++# CONFIG_NOTIFIER_ERROR_INJECTION is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_LATENCYTOP is not set
++CONFIG_HAVE_FUNCTION_TRACER=y
++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
++CONFIG_HAVE_DYNAMIC_FTRACE=y
++CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
++CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
++CONFIG_HAVE_C_RECORDMCOUNT=y
++CONFIG_TRACING_SUPPORT=y
++# CONFIG_FTRACE is not set
++# CONFIG_DMA_API_DEBUG is not set
++CONFIG_RUNTIME_TESTING_MENU=y
++# CONFIG_LKDTM is not set
++# CONFIG_TEST_LIST_SORT is not set
++# CONFIG_TEST_SORT is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_RBTREE_TEST is not set
++# CONFIG_INTERVAL_TREE_TEST is not set
++# CONFIG_PERCPU_TEST is not set
++# CONFIG_ATOMIC64_SELFTEST is not set
++# CONFIG_TEST_HEXDUMP is not set
++# CONFIG_TEST_STRING_HELPERS is not set
++# CONFIG_TEST_KSTRTOX is not set
++# CONFIG_TEST_PRINTF is not set
++# CONFIG_TEST_BITMAP is not set
++# CONFIG_TEST_BITFIELD is not set
++# CONFIG_TEST_UUID is not set
++# CONFIG_TEST_OVERFLOW is not set
++# CONFIG_TEST_RHASHTABLE is not set
++# CONFIG_TEST_HASH is not set
++# CONFIG_TEST_IDA is not set
++# CONFIG_TEST_LKM is not set
++# CONFIG_TEST_USER_COPY is not set
++# CONFIG_TEST_BPF is not set
++# CONFIG_FIND_BIT_BENCHMARK is not set
++# CONFIG_TEST_FIRMWARE is not set
++# CONFIG_TEST_SYSCTL is not set
++# CONFIG_TEST_UDELAY is not set
++# CONFIG_TEST_STATIC_KEYS is not set
++# CONFIG_TEST_KMOD is not set
++# CONFIG_MEMTEST is not set
++# CONFIG_BUG_ON_DATA_CORRUPTION is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++# CONFIG_KGDB is not set
++# CONFIG_UBSAN is not set
++CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
++# CONFIG_STRICT_DEVMEM is not set
++# CONFIG_ARM_PTDUMP_DEBUGFS is not set
++# CONFIG_DEBUG_WX is not set
++CONFIG_ARM_UNWIND=y
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_LL is not set
++CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
++CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
++# CONFIG_PID_IN_CONTEXTIDR is not set
++# CONFIG_CORESIGHT is not set
+diff -Nuar linux-at91/crypto/af_alg.c linux-at91-sama5d4/crypto/af_alg.c
+--- linux-at91/crypto/af_alg.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/af_alg.c 2019-08-26 00:44:57.988610990 +0800
+@@ -207,13 +207,17 @@
}
- /**
-diff -Nuar linux-at91/drivers/net/wireless/ralink/rt2x00/rt2x00usb.h linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2x00usb.h
---- linux-at91/drivers/net/wireless/ralink/rt2x00/rt2x00usb.h 2019-08-18 17:24:53.000000000 +0800
-+++ linux-at91-sama5d4/drivers/net/wireless/ralink/rt2x00/rt2x00usb.h 2019-08-22 23:05:23.823524309 +0800
-@@ -38,7 +38,7 @@
- * a higher value is required. In that case we use the REGISTER_TIMEOUT_FIRMWARE
- * and EEPROM_TIMEOUT.
- */
--#define REGISTER_TIMEOUT 100
-+#define REGISTER_TIMEOUT 300 /* modify from 100 by guowenxue 2019.08.18 */
- #define REGISTER_TIMEOUT_FIRMWARE 1000
- #define EEPROM_TIMEOUT 2000
+ static int alg_setkey(struct sock *sk, char __user *ukey,
+- unsigned int keylen)
++ unsigned int keylen,
++ int (*setkey)(void *private, const u8 *key,
++ unsigned int keylen))
+ {
+ struct alg_sock *ask = alg_sk(sk);
+- const struct af_alg_type *type = ask->type;
+ u8 *key;
+ int err;
++ if (!setkey)
++ return -ENOPROTOOPT;
++
+ key = sock_kmalloc(sk, keylen, GFP_KERNEL);
+ if (!key)
+ return -ENOMEM;
+@@ -222,7 +226,7 @@
+ if (copy_from_user(key, ukey, keylen))
+ goto out;
+
+- err = type->setkey(ask->private, key, keylen);
++ err = setkey(ask->private, key, keylen);
+
+ out:
+ sock_kzfree_s(sk, key, keylen);
+@@ -248,18 +252,23 @@
+ if (level != SOL_ALG || !type)
+ goto unlock;
+
++ if (sock->state == SS_CONNECTED)
++ goto unlock;
++
+ switch (optname) {
+ case ALG_SET_KEY:
+- if (sock->state == SS_CONNECTED)
+- goto unlock;
+- if (!type->setkey)
+- goto unlock;
+-
+- err = alg_setkey(sk, optval, optlen);
++ err = alg_setkey(sk, optval, optlen, type->setkey);
++ break;
++ case ALG_SET_PUBKEY:
++ err = alg_setkey(sk, optval, optlen, type->setpubkey);
++ break;
++ case ALG_SET_DH_PARAMETERS:
++ err = alg_setkey(sk, optval, optlen, type->dhparams);
++ break;
++ case ALG_SET_ECDH_CURVE:
++ err = alg_setkey(sk, optval, optlen, type->ecdhcurve);
+ break;
+ case ALG_SET_AEAD_AUTHSIZE:
+- if (sock->state == SS_CONNECTED)
+- goto unlock;
+ if (!type->setauthsize)
+ goto unlock;
+ err = type->setauthsize(ask->private, optlen);
+@@ -834,7 +843,7 @@
+ struct af_alg_tsgl *sgl;
+ struct af_alg_control con = {};
+ long copied = 0;
+- bool enc = 0;
++ int op = 0;
+ bool init = 0;
+ int err = 0;
+
+@@ -845,11 +854,13 @@
+
+ init = 1;
+ switch (con.op) {
++ case ALG_OP_VERIFY:
++ case ALG_OP_SIGN:
+ case ALG_OP_ENCRYPT:
+- enc = 1;
+- break;
+ case ALG_OP_DECRYPT:
+- enc = 0;
++ case ALG_OP_KEYGEN:
++ case ALG_OP_SSGEN:
++ op = con.op;
+ break;
+ default:
+ return -EINVAL;
+@@ -866,7 +877,7 @@
+ }
+
+ if (init) {
+- ctx->enc = enc;
++ ctx->op = op;
+ if (con.iv)
+ memcpy(ctx->iv, con.iv->iv, ivsize);
+
+diff -Nuar linux-at91/crypto/algif_aead.c linux-at91-sama5d4/crypto/algif_aead.c
+--- linux-at91/crypto/algif_aead.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/algif_aead.c 2019-08-26 00:44:57.988610990 +0800
+@@ -59,7 +59,7 @@
+ * The minimum amount of memory needed for an AEAD cipher is
+ * the AAD and in case of decryption the tag.
+ */
+- return ctx->used >= ctx->aead_assoclen + (ctx->enc ? 0 : as);
++ return ctx->used >= ctx->aead_assoclen + (ctx->op ? 0 : as);
+ }
+
+ static int aead_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
+@@ -75,6 +75,19 @@
+ return af_alg_sendmsg(sock, msg, size, ivsize);
+ }
+
++static inline int aead_cipher_op(struct af_alg_ctx *ctx,
++ struct af_alg_async_req *areq)
++{
++ switch (ctx->op) {
++ case ALG_OP_ENCRYPT:
++ return crypto_aead_encrypt(&areq->cra_u.aead_req);
++ case ALG_OP_DECRYPT:
++ return crypto_aead_decrypt(&areq->cra_u.aead_req);
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
+ static int crypto_aead_copy_sgl(struct crypto_skcipher *null_tfm,
+ struct scatterlist *src,
+ struct scatterlist *dst, unsigned int len)
+@@ -142,7 +155,7 @@
+ * buffer provides the tag which is consumed resulting in only the
+ * plaintext without a buffer for the tag returned to the caller.
+ */
+- if (ctx->enc)
++ if (ctx->op)
+ outlen = used + as;
+ else
+ outlen = used - as;
+@@ -216,7 +229,7 @@
+ /* Use the RX SGL as source (and destination) for crypto op. */
+ rsgl_src = areq->first_rsgl.sgl.sg;
+
+- if (ctx->enc) {
++ if (ctx->op == ALG_OP_ENCRYPT) {
+ /*
+ * Encryption operation - The in-place cipher operation is
+ * achieved by the following operation:
+@@ -232,7 +245,7 @@
+ if (err)
+ goto free;
+ af_alg_pull_tsgl(sk, processed, NULL, 0);
+- } else {
++ } else if (ctx->op == ALG_OP_DECRYPT) {
+ /*
+ * Decryption operation - To achieve an in-place cipher
+ * operation, the following SGL structure is used:
+@@ -297,8 +310,7 @@
+ aead_request_set_callback(&areq->cra_u.aead_req,
+ CRYPTO_TFM_REQ_MAY_BACKLOG,
+ af_alg_async_cb, areq);
+- err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
+- crypto_aead_decrypt(&areq->cra_u.aead_req);
++ err = aead_cipher_op(ctx, areq);
+
+ /* AIO operation in progress */
+ if (err == -EINPROGRESS || err == -EBUSY)
+@@ -310,10 +322,7 @@
+ aead_request_set_callback(&areq->cra_u.aead_req,
+ CRYPTO_TFM_REQ_MAY_BACKLOG,
+ crypto_req_done, &ctx->wait);
+- err = crypto_wait_req(ctx->enc ?
+- crypto_aead_encrypt(&areq->cra_u.aead_req) :
+- crypto_aead_decrypt(&areq->cra_u.aead_req),
+- &ctx->wait);
++ err = crypto_wait_req(aead_cipher_op(ctx, areq), &ctx->wait);
+ }
+
+
+@@ -569,7 +578,7 @@
+ atomic_set(&ctx->rcvused, 0);
+ ctx->more = 0;
+ ctx->merge = 0;
+- ctx->enc = 0;
++ ctx->op = 0;
+ ctx->aead_assoclen = 0;
+ crypto_init_wait(&ctx->wait);
+
+diff -Nuar linux-at91/crypto/algif_akcipher.c linux-at91-sama5d4/crypto/algif_akcipher.c
+--- linux-at91/crypto/algif_akcipher.c 1970-01-01 08:00:00.000000000 +0800
++++ linux-at91-sama5d4/crypto/algif_akcipher.c 2019-08-26 00:44:57.988610990 +0800
+@@ -0,0 +1,474 @@
++/*
++ * algif_akcipher: User-space interface for asymmetric cipher algorithms
++ *
++ * Copyright (C) 2018 - 2019, Stephan Mueller <smueller@chronox.de>
++ *
++ * This file provides the user-space API for asymmetric ciphers.
++ *
++ * 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.
++ *
++ * The following concept of the memory management is used:
++ *
++ * The kernel maintains two SGLs, the TX SGL and the RX SGL. The TX SGL is
++ * filled by user space with the data submitted via sendpage/sendmsg. Filling
++ * up the TX SGL does not cause a crypto operation -- the data will only be
++ * tracked by the kernel. Upon receipt of one recvmsg call, the caller must
++ * provide a buffer which is tracked with the RX SGL.
++ *
++ * During the processing of the recvmsg operation, the cipher request is
++ * allocated and prepared. As part of the recvmsg operation, the processed
++ * TX buffers are extracted from the TX SGL into a separate SGL.
++ *
++ * After the completion of the crypto operation, the RX SGL and the cipher
++ * request is released. The extracted TX SGL parts are released together with
++ * the RX SGL release.
++ */
++
++#include <crypto/akcipher.h>
++#include <crypto/if_alg.h>
++#include <crypto/scatterwalk.h>
++#include <linux/init.h>
++#include <linux/list.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/net.h>
++#include <net/sock.h>
++
++struct akcipher_tfm {
++ struct crypto_akcipher *akcipher;
++ bool has_key;
++};
++
++static int akcipher_sendmsg(struct socket *sock, struct msghdr *msg,
++ size_t size)
++{
++ return af_alg_sendmsg(sock, msg, size, 0);
++}
++
++static inline int akcipher_cipher_op(struct af_alg_ctx *ctx,
++ struct af_alg_async_req *areq)
++{
++ switch (ctx->op) {
++ case ALG_OP_ENCRYPT:
++ return crypto_akcipher_encrypt(&areq->cra_u.akcipher_req);
++ case ALG_OP_DECRYPT:
++ return crypto_akcipher_decrypt(&areq->cra_u.akcipher_req);
++ case ALG_OP_SIGN:
++ return crypto_akcipher_sign(&areq->cra_u.akcipher_req);
++ case ALG_OP_VERIFY:
++ return crypto_akcipher_verify(&areq->cra_u.akcipher_req);
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
++static int _akcipher_recvmsg(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ struct sock *psk = ask->parent;
++ struct alg_sock *pask = alg_sk(psk);
++ struct af_alg_ctx *ctx = ask->private;
++ struct akcipher_tfm *akc = pask->private;
++ struct crypto_akcipher *tfm = akc->akcipher;
++ struct af_alg_async_req *areq;
++ size_t len;
++ size_t used;
++ int err;
++ int maxsize;
++
++ if (!ctx->used) {
++ err = af_alg_wait_for_data(sk, flags);
++ if (err)
++ return err;
++ }
++
++ maxsize = crypto_akcipher_maxsize(tfm);
++ if (maxsize < 0)
++ return maxsize;
++
++ /* Allocate cipher request for current operation. */
++ areq = af_alg_alloc_areq(sk, sizeof(struct af_alg_async_req) +
++ crypto_akcipher_reqsize(tfm));
++ if (IS_ERR(areq))
++ return PTR_ERR(areq);
++
++ /* convert iovecs of output buffers into RX SGL */
++ err = af_alg_get_rsgl(sk, msg, flags, areq, maxsize, &len);
++ if (err)
++ goto free;
++
++ /* ensure output buffer is sufficiently large */
++ if (len < maxsize) {
++ err = -EMSGSIZE;
++ goto free;
++ }
++
++ /*
++ * Create a per request TX SGL for this request which tracks the
++ * SG entries from the global TX SGL.
++ */
++ used = ctx->used;
++ areq->tsgl_entries = af_alg_count_tsgl(sk, used, 0);
++ if (!areq->tsgl_entries)
++ areq->tsgl_entries = 1;
++ areq->tsgl = sock_kmalloc(sk, sizeof(*areq->tsgl) * areq->tsgl_entries,
++ GFP_KERNEL);
++ if (!areq->tsgl) {
++ err = -ENOMEM;
++ goto free;
++ }
++ sg_init_table(areq->tsgl, areq->tsgl_entries);
++ af_alg_pull_tsgl(sk, used, areq->tsgl, 0);
++
++ /* Initialize the crypto operation */
++ akcipher_request_set_tfm(&areq->cra_u.akcipher_req, tfm);
++ akcipher_request_set_crypt(&areq->cra_u.akcipher_req, areq->tsgl,
++ areq->first_rsgl.sgl.sg, used, len);
++
++ if (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) {
++ /* AIO operation */
++ sock_hold(sk);
++ areq->iocb = msg->msg_iocb;
++
++ /* Remember output size that will be generated. */
++ areq->outlen = areq->cra_u.akcipher_req.dst_len ?
++ areq->cra_u.akcipher_req.dst_len : len;
++
++ akcipher_request_set_callback(&areq->cra_u.akcipher_req,
++ CRYPTO_TFM_REQ_MAY_SLEEP,
++ af_alg_async_cb, areq);
++ err = akcipher_cipher_op(ctx, areq);
++
++ /* AIO operation in progress */
++ if (err == -EINPROGRESS || err == -EBUSY)
++ return -EIOCBQUEUED;
++
++ sock_put(sk);
++ } else {
++ /* Synchronous operation */
++ akcipher_request_set_callback(&areq->cra_u.akcipher_req,
++ CRYPTO_TFM_REQ_MAY_SLEEP |
++ CRYPTO_TFM_REQ_MAY_BACKLOG,
++ crypto_req_done,
++ &ctx->wait);
++ err = crypto_wait_req(akcipher_cipher_op(ctx, areq),
++ &ctx->wait);
++ }
++
++free:
++ af_alg_free_resources(areq);
++
++ return err ? err : areq->cra_u.akcipher_req.dst_len;
++}
++
++static int akcipher_recvmsg(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ struct sock *psk = ask->parent;
++ struct alg_sock *pask = alg_sk(psk);
++ struct akcipher_tfm *akc = pask->private;
++ struct crypto_akcipher *tfm = akc->akcipher;
++ int ret = 0;
++ int err;
++
++ lock_sock(sk);
++
++ while (msg_data_left(msg)) {
++ err = _akcipher_recvmsg(sock, msg, ignored, flags);
++
++ /*
++ * This error covers -EIOCBQUEUED which implies that we can
++ * only handle one AIO request. If the caller wants to have
++ * multiple AIO requests in parallel, he must make multiple
++ * separate AIO calls.
++ */
++ if (err <= 0) {
++ if (err == -EIOCBQUEUED || err == -EBADMSG || !ret)
++ ret = err;
++ goto out;
++ }
++
++ ret += err;
++
++ /*
++ * The caller must provide crypto_akcipher_maxsize per request.
++ * If he provides more, we conclude that multiple akcipher
++ * operations are requested.
++ */
++ iov_iter_advance(&msg->msg_iter,
++ crypto_akcipher_maxsize(tfm) - err);
++ }
++
++out:
++ af_alg_wmem_wakeup(sk);
++ release_sock(sk);
++ return ret;
++}
++
++static struct proto_ops algif_akcipher_ops = {
++ .family = PF_ALG,
++
++ .connect = sock_no_connect,
++ .socketpair = sock_no_socketpair,
++ .getname = sock_no_getname,
++ .ioctl = sock_no_ioctl,
++ .listen = sock_no_listen,
++ .shutdown = sock_no_shutdown,
++ .getsockopt = sock_no_getsockopt,
++ .mmap = sock_no_mmap,
++ .bind = sock_no_bind,
++ .accept = sock_no_accept,
++ .setsockopt = sock_no_setsockopt,
++
++ .release = af_alg_release,
++ .sendmsg = akcipher_sendmsg,
++ .sendpage = af_alg_sendpage,
++ .recvmsg = akcipher_recvmsg,
++ .poll = af_alg_poll,
++};
++
++static int akcipher_check_key(struct socket *sock)
++{
++ struct sock *psk;
++ struct alg_sock *pask;
++ struct akcipher_tfm *tfm;
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ int err = 0;
++
++ lock_sock(sk);
++ if (ask->refcnt)
++ goto unlock_child;
++
++ psk = ask->parent;
++ pask = alg_sk(ask->parent);
++ tfm = pask->private;
++
++ lock_sock_nested(psk, SINGLE_DEPTH_NESTING);
++ if (!tfm->has_key) {
++ err = -ENOKEY;
++ goto unlock;
++ }
++
++ if (!pask->refcnt++)
++ sock_hold(psk);
++
++ ask->refcnt = 1;
++ sock_put(psk);
++
++ err = 0;
++
++unlock:
++ release_sock(psk);
++unlock_child:
++ release_sock(sk);
++
++ return err;
++}
++
++static int akcipher_sendmsg_nokey(struct socket *sock, struct msghdr *msg,
++ size_t size)
++{
++ int err;
++
++ err = akcipher_check_key(sock);
++ if (err)
++ return err;
++
++ return akcipher_sendmsg(sock, msg, size);
++}
++
++static ssize_t akcipher_sendpage_nokey(struct socket *sock, struct page *page,
++ int offset, size_t size, int flags)
++{
++ int err;
++
++ err = akcipher_check_key(sock);
++ if (err)
++ return err;
++
++ return af_alg_sendpage(sock, page, offset, size, flags);
++}
++
++static int akcipher_recvmsg_nokey(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ int err;
++
++ err = akcipher_check_key(sock);
++ if (err)
++ return err;
++
++ return akcipher_recvmsg(sock, msg, ignored, flags);
++}
++
++static struct proto_ops algif_akcipher_ops_nokey = {
++ .family = PF_ALG,
++
++ .connect = sock_no_connect,
++ .socketpair = sock_no_socketpair,
++ .getname = sock_no_getname,
++ .ioctl = sock_no_ioctl,
++ .listen = sock_no_listen,
++ .shutdown = sock_no_shutdown,
++ .getsockopt = sock_no_getsockopt,
++ .mmap = sock_no_mmap,
++ .bind = sock_no_bind,
++ .accept = sock_no_accept,
++ .setsockopt = sock_no_setsockopt,
++
++ .release = af_alg_release,
++ .sendmsg = akcipher_sendmsg_nokey,
++ .sendpage = akcipher_sendpage_nokey,
++ .recvmsg = akcipher_recvmsg_nokey,
++ .poll = af_alg_poll,
++};
++
++static void *akcipher_bind(const char *name, u32 type, u32 mask)
++{
++ struct akcipher_tfm *tfm;
++ struct crypto_akcipher *akcipher;
++
++ tfm = kmalloc(sizeof(*tfm), GFP_KERNEL);
++ if (!tfm)
++ return ERR_PTR(-ENOMEM);
++
++ akcipher = crypto_alloc_akcipher(name, type, mask);
++ if (IS_ERR(akcipher)) {
++ kfree(tfm);
++ return ERR_CAST(akcipher);
++ }
++
++ tfm->akcipher = akcipher;
++ tfm->has_key = false;
++
++ return tfm;
++}
++
++static void akcipher_release(void *private)
++{
++ struct akcipher_tfm *tfm = private;
++ struct crypto_akcipher *akcipher = tfm->akcipher;
++
++ crypto_free_akcipher(akcipher);
++ kfree(tfm);
++}
++
++static int akcipher_setprivkey(void *private, const u8 *key,
++ unsigned int keylen)
++{
++ struct akcipher_tfm *tfm = private;
++ struct crypto_akcipher *akcipher = tfm->akcipher;
++ int err;
++
++ err = crypto_akcipher_set_priv_key(akcipher, key, keylen);
++ tfm->has_key = !err;
++
++ /* Return the maximum size of the akcipher operation. */
++ if (!err)
++ err = crypto_akcipher_maxsize(akcipher);
++
++ return err;
++}
++
++static int akcipher_setpubkey(void *private, const u8 *key, unsigned int keylen)
++{
++ struct akcipher_tfm *tfm = private;
++ struct crypto_akcipher *akcipher = tfm->akcipher;
++ int err;
++
++ err = crypto_akcipher_set_pub_key(akcipher, key, keylen);
++ tfm->has_key = !err;
++
++ /* Return the maximum size of the akcipher operation. */
++ if (!err)
++ err = crypto_akcipher_maxsize(akcipher);
++
++ return err;
++}
++
++static void akcipher_sock_destruct(struct sock *sk)
++{
++ struct alg_sock *ask = alg_sk(sk);
++ struct af_alg_ctx *ctx = ask->private;
++
++ af_alg_pull_tsgl(sk, ctx->used, NULL, 0);
++ sock_kfree_s(sk, ctx, ctx->len);
++ af_alg_release_parent(sk);
++}
++
++static int akcipher_accept_parent_nokey(void *private, struct sock *sk)
++{
++ struct af_alg_ctx *ctx;
++ struct alg_sock *ask = alg_sk(sk);
++ unsigned int len = sizeof(*ctx);
++
++ ctx = sock_kmalloc(sk, len, GFP_KERNEL);
++ if (!ctx)
++ return -ENOMEM;
++
++ INIT_LIST_HEAD(&ctx->tsgl_list);
++ ctx->len = len;
++ ctx->used = 0;
++ atomic_set(&ctx->rcvused, 0);
++ ctx->more = 0;
++ ctx->merge = 0;
++ ctx->op = 0;
++ crypto_init_wait(&ctx->wait);
++
++ ask->private = ctx;
++
++ sk->sk_destruct = akcipher_sock_destruct;
++
++ return 0;
++}
++
++static int akcipher_accept_parent(void *private, struct sock *sk)
++{
++ struct akcipher_tfm *tfm = private;
++
++ if (!tfm->has_key)
++ return -ENOKEY;
++
++ return akcipher_accept_parent_nokey(private, sk);
++}
++
++static const struct af_alg_type algif_type_akcipher = {
++ .bind = akcipher_bind,
++ .release = akcipher_release,
++ .setkey = akcipher_setprivkey,
++ .setpubkey = akcipher_setpubkey,
++ .setauthsize = NULL,
++ .accept = akcipher_accept_parent,
++ .accept_nokey = akcipher_accept_parent_nokey,
++ .ops = &algif_akcipher_ops,
++ .ops_nokey = &algif_akcipher_ops_nokey,
++ .name = "akcipher",
++ .owner = THIS_MODULE
++};
++
++static int __init algif_akcipher_init(void)
++{
++ return af_alg_register_type(&algif_type_akcipher);
++}
++
++static void __exit algif_akcipher_exit(void)
++{
++ int err = af_alg_unregister_type(&algif_type_akcipher);
++
++ BUG_ON(err);
++}
++
++module_init(algif_akcipher_init);
++module_exit(algif_akcipher_exit);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
++MODULE_DESCRIPTION("Asymmetric kernel crypto API user space interface");
+diff -Nuar linux-at91/crypto/algif_kpp.c linux-at91-sama5d4/crypto/algif_kpp.c
+--- linux-at91/crypto/algif_kpp.c 1970-01-01 08:00:00.000000000 +0800
++++ linux-at91-sama5d4/crypto/algif_kpp.c 2019-08-26 00:44:57.988610990 +0800
+@@ -0,0 +1,612 @@
++/*
++ * algif_kpp: User-space interface for key protocol primitives algorithms
++ *
++ * Copyright (C) 2018 - 2019, Stephan Mueller <smueller@chronox.de>
++ *
++ * This file provides the user-space API for key protocol primitives.
++ *
++ * 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.
++ *
++ * The following concept of the memory management is used:
++ *
++ * The kernel maintains two SGLs, the TX SGL and the RX SGL. The TX SGL is
++ * filled by user space with the data submitted via sendpage/sendmsg. Filling
++ * up the TX SGL does not cause a crypto operation -- the data will only be
++ * tracked by the kernel. Upon receipt of one recvmsg call, the caller must
++ * provide a buffer which is tracked with the RX SGL.
++ *
++ * During the processing of the recvmsg operation, the cipher request is
++ * allocated and prepared. As part of the recvmsg operation, the processed
++ * TX buffers are extracted from the TX SGL into a separate SGL.
++ *
++ * After the completion of the crypto operation, the RX SGL and the cipher
++ * request is released. The extracted TX SGL parts are released together with
++ * the RX SGL release.
++ */
++
++#include <crypto/dh.h>
++#include <crypto/ecdh.h>
++#include <crypto/kpp.h>
++#include <crypto/rng.h>
++#include <crypto/if_alg.h>
++#include <crypto/scatterwalk.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/list.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/net.h>
++#include <net/sock.h>
++
++struct kpp_tfm {
++ struct crypto_kpp *kpp;
++ bool has_key;
++
++#define KPP_NO_PARAMS 0
++#define KPP_DH_PARAMS 1
++#define KPP_ECDH_PARAMS 2
++ int has_params; /* Type of KPP mechanism */
++};
++
++static int kpp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
++{
++ return af_alg_sendmsg(sock, msg, size, 0);
++}
++
++static inline int kpp_cipher_op(struct af_alg_ctx *ctx,
++ struct af_alg_async_req *areq)
++{
++ switch (ctx->op) {
++ case ALG_OP_KEYGEN:
++ return crypto_kpp_generate_public_key(&areq->cra_u.kpp_req);
++ case ALG_OP_SSGEN:
++ return crypto_kpp_compute_shared_secret(&areq->cra_u.kpp_req);
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
++static int _kpp_recvmsg(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ struct sock *psk = ask->parent;
++ struct alg_sock *pask = alg_sk(psk);
++ struct af_alg_ctx *ctx = ask->private;
++ struct kpp_tfm *kpp = pask->private;
++ struct crypto_kpp *tfm = kpp->kpp;
++ struct af_alg_async_req *areq;
++ size_t len;
++ size_t used = 0;
++ int err;
++ int maxsize;
++
++ if (!ctx->used) {
++ err = af_alg_wait_for_data(sk, flags);
++ if (err)
++ return err;
++ }
++
++ maxsize = crypto_kpp_maxsize(tfm);
++ if (maxsize < 0)
++ return maxsize;
++
++ /* Allocate cipher request for current operation. */
++ areq = af_alg_alloc_areq(sk, sizeof(struct af_alg_async_req) +
++ crypto_kpp_reqsize(tfm));
++ if (IS_ERR(areq))
++ return PTR_ERR(areq);
++
++ /* convert iovecs of output buffers into RX SGL */
++ err = af_alg_get_rsgl(sk, msg, flags, areq, maxsize, &len);
++ if (err)
++ goto free;
++
++ /* ensure output buffer is sufficiently large */
++ if (len < maxsize) {
++ err = -EMSGSIZE;
++ goto free;
++ }
++
++ /*
++ * Create a per request TX SGL for this request which tracks the
++ * SG entries from the global TX SGL.
++ */
++ if (ctx->op == ALG_OP_SSGEN) {
++ used = ctx->used;
++
++ areq->tsgl_entries = af_alg_count_tsgl(sk, used, 0);
++ if (!areq->tsgl_entries)
++ areq->tsgl_entries = 1;
++ areq->tsgl = sock_kmalloc(
++ sk, sizeof(*areq->tsgl) * areq->tsgl_entries,
++ GFP_KERNEL);
++ if (!areq->tsgl) {
++ err = -ENOMEM;
++ goto free;
++ }
++ sg_init_table(areq->tsgl, areq->tsgl_entries);
++ af_alg_pull_tsgl(sk, used, areq->tsgl, 0);
++ }
++
++ /* Initialize the crypto operation */
++ kpp_request_set_input(&areq->cra_u.kpp_req, areq->tsgl, used);
++ kpp_request_set_output(&areq->cra_u.kpp_req, areq->first_rsgl.sgl.sg,
++ len);
++ kpp_request_set_tfm(&areq->cra_u.kpp_req, tfm);
++
++ if (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) {
++ /* AIO operation */
++ sock_hold(sk);
++ areq->iocb = msg->msg_iocb;
++
++ /* Remember output size that will be generated. */
++ areq->outlen = len;
++
++ kpp_request_set_callback(&areq->cra_u.kpp_req,
++ CRYPTO_TFM_REQ_MAY_SLEEP,
++ af_alg_async_cb, areq);
++ err = kpp_cipher_op(ctx, areq);
++
++ /* AIO operation in progress */
++ if (err == -EINPROGRESS || err == -EBUSY)
++ return -EIOCBQUEUED;
++
++ sock_put(sk);
++ } else {
++ /* Synchronous operation */
++ kpp_request_set_callback(&areq->cra_u.kpp_req,
++ CRYPTO_TFM_REQ_MAY_SLEEP |
++ CRYPTO_TFM_REQ_MAY_BACKLOG,
++ crypto_req_done,
++ &ctx->wait);
++ err = crypto_wait_req(kpp_cipher_op(ctx, areq), &ctx->wait);
++ }
++
++free:
++ af_alg_free_resources(areq);
++
++ return err ? err : len;
++}
++
++static int kpp_recvmsg(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ struct sock *psk = ask->parent;
++ struct alg_sock *pask = alg_sk(psk);
++ struct kpp_tfm *kpp = pask->private;
++ struct crypto_kpp *tfm = kpp->kpp;
++ int ret = 0;
++ int err;
++
++ lock_sock(sk);
++
++ while (msg_data_left(msg)) {
++ err = _kpp_recvmsg(sock, msg, ignored, flags);
++
++ /*
++ * This error covers -EIOCBQUEUED which implies that we can
++ * only handle one AIO request. If the caller wants to have
++ * multiple AIO requests in parallel, he must make multiple
++ * separate AIO calls.
++ */
++ if (err <= 0) {
++ if (err == -EIOCBQUEUED || err == -EBADMSG || !ret)
++ ret = err;
++ goto out;
++ }
++
++ ret += err;
++
++ /*
++ * The caller must provide crypto_kpp_maxsize per request.
++ * If he provides more, we conclude that multiple kpp
++ * operations are requested.
++ */
++ iov_iter_advance(&msg->msg_iter,
++ crypto_kpp_maxsize(tfm) - err);
++ }
++
++out:
++
++ af_alg_wmem_wakeup(sk);
++ release_sock(sk);
++ return ret;
++}
++
++static struct proto_ops algif_kpp_ops = {
++ .family = PF_ALG,
++
++ .connect = sock_no_connect,
++ .socketpair = sock_no_socketpair,
++ .getname = sock_no_getname,
++ .ioctl = sock_no_ioctl,
++ .listen = sock_no_listen,
++ .shutdown = sock_no_shutdown,
++ .getsockopt = sock_no_getsockopt,
++ .mmap = sock_no_mmap,
++ .bind = sock_no_bind,
++ .accept = sock_no_accept,
++ .setsockopt = sock_no_setsockopt,
++
++ .release = af_alg_release,
++ .sendmsg = kpp_sendmsg,
++ .sendpage = af_alg_sendpage,
++ .recvmsg = kpp_recvmsg,
++ .poll = af_alg_poll,
++};
++
++static int kpp_check_key(struct socket *sock)
++{
++ struct sock *psk;
++ struct alg_sock *pask;
++ struct kpp_tfm *tfm;
++ struct sock *sk = sock->sk;
++ struct alg_sock *ask = alg_sk(sk);
++ int err = 0;
++
++ lock_sock(sk);
++ if (ask->refcnt)
++ goto unlock_child;
++
++ psk = ask->parent;
++ pask = alg_sk(ask->parent);
++ tfm = pask->private;
++
++ lock_sock_nested(psk, SINGLE_DEPTH_NESTING);
++ if (!tfm->has_key || (tfm->has_params == KPP_NO_PARAMS)) {
++ err = -ENOKEY;
++ goto unlock;
++ }
++
++ if (!pask->refcnt++)
++ sock_hold(psk);
++
++ ask->refcnt = 1;
++ sock_put(psk);
++
++ err = 0;
++
++unlock:
++ release_sock(psk);
++unlock_child:
++ release_sock(sk);
++
++ return err;
++}
++
++static int kpp_sendmsg_nokey(struct socket *sock, struct msghdr *msg,
++ size_t size)
++{
++ int err;
++
++ err = kpp_check_key(sock);
++ if (err)
++ return err;
++
++ return kpp_sendmsg(sock, msg, size);
++}
++
++static ssize_t kpp_sendpage_nokey(struct socket *sock, struct page *page,
++ int offset, size_t size, int flags)
++{
++ int err;
++
++ err = kpp_check_key(sock);
++ if (err)
++ return err;
++
++ return af_alg_sendpage(sock, page, offset, size, flags);
++}
++
++static int kpp_recvmsg_nokey(struct socket *sock, struct msghdr *msg,
++ size_t ignored, int flags)
++{
++ int err;
++
++ err = kpp_check_key(sock);
++ if (err)
++ return err;
++
++ return kpp_recvmsg(sock, msg, ignored, flags);
++}
++
++static struct proto_ops algif_kpp_ops_nokey = {
++ .family = PF_ALG,
++
++ .connect = sock_no_connect,
++ .socketpair = sock_no_socketpair,
++ .getname = sock_no_getname,
++ .ioctl = sock_no_ioctl,
++ .listen = sock_no_listen,
++ .shutdown = sock_no_shutdown,
++ .getsockopt = sock_no_getsockopt,
++ .mmap = sock_no_mmap,
++ .bind = sock_no_bind,
++ .accept = sock_no_accept,
++ .setsockopt = sock_no_setsockopt,
++
++ .release = af_alg_release,
++ .sendmsg = kpp_sendmsg_nokey,
++ .sendpage = kpp_sendpage_nokey,
++ .recvmsg = kpp_recvmsg_nokey,
++ .poll = af_alg_poll,
++};
++
++static void *kpp_bind(const char *name, u32 type, u32 mask)
++{
++ struct kpp_tfm *tfm;
++ struct crypto_kpp *kpp;
++
++ tfm = kmalloc(sizeof(*tfm), GFP_KERNEL);
++ if (!tfm)
++ return ERR_PTR(-ENOMEM);
++
++ kpp = crypto_alloc_kpp(name, type, mask);
++ if (IS_ERR(kpp)) {
++ kfree(tfm);
++ return ERR_CAST(kpp);
++ }
++
++ tfm->kpp = kpp;
++ tfm->has_key = false;
++ tfm->has_params = KPP_NO_PARAMS;
++
++ return tfm;
++}
++
++static void kpp_release(void *private)
++{
++ struct kpp_tfm *tfm = private;
++ struct crypto_kpp *kpp = tfm->kpp;
++
++ crypto_free_kpp(kpp);
++ kfree(tfm);
++}
++
++static int kpp_dh_set_secret(struct crypto_kpp *tfm, struct dh *params)
++{
++ char *packed_key = NULL;
++ unsigned int packed_key_len;
++ int ret;
++
++ packed_key_len = crypto_dh_key_len(params);
++ packed_key = kmalloc(packed_key_len, GFP_KERNEL);
++ if (!packed_key)
++ return -ENOMEM;
++
++ ret = crypto_dh_encode_key(packed_key, packed_key_len, params);
++ if (ret)
++ goto out;
++
++ ret = crypto_kpp_set_secret(tfm, packed_key, packed_key_len);
++
++out:
++ kfree(packed_key);
++ return ret;
++}
++
++static int kpp_dh_set_privkey(struct crypto_kpp *tfm, const u8 *key,
++ unsigned int keylen)
++{
++ struct dh params = {
++ .key = key,
++ .key_size = keylen,
++ .p = NULL,
++ .p_size = 0,
++ .g = NULL,
++ .g_size = 0,
++ };
++
++ return kpp_dh_set_secret(tfm, ¶ms);
++}
++
++static int kpp_ecdh_set_secret(struct crypto_kpp *tfm, struct ecdh *params)
++{
++ char *packed_key = NULL;
++ unsigned int packed_key_len;
++ int ret;
++
++ packed_key_len = crypto_ecdh_key_len(params);
++ packed_key = kmalloc(packed_key_len, GFP_KERNEL);
++ if (!packed_key)
++ return -ENOMEM;
++
++ ret = crypto_ecdh_encode_key(packed_key, packed_key_len, params);
++ if (ret)
++ goto out;
++
++ ret = crypto_kpp_set_secret(tfm, packed_key, packed_key_len);
++
++out:
++ kfree(packed_key);
++ return ret;
++}
++
++static int kpp_ecdh_set_privkey(struct crypto_kpp *tfm, const u8 *key,
++ unsigned int keylen)
++{
++ struct ecdh params = {
++ .curve_id = 0,
++ .key = key,
++ .key_size = keylen,
++ };
++
++ return kpp_ecdh_set_secret(tfm, ¶ms);
++}
++
++static int kpp_setprivkey(void *private, const u8 *key, unsigned int keylen)
++{
++ struct kpp_tfm *kpp = private;
++ struct crypto_kpp *tfm = kpp->kpp;
++ int err;
++
++ if (kpp->has_params == KPP_NO_PARAMS)
++ return -ENOKEY;
++
++ /* The DH code cannot generate private keys. ECDH can do that */
++ if ((!key || !keylen) && (kpp->has_params == KPP_DH_PARAMS)) {
++ kpp->has_key = false;
++ return -EOPNOTSUPP;
++ }
++
++ switch (kpp->has_params) {
++ case KPP_DH_PARAMS:
++ err = kpp_dh_set_privkey(tfm, key, keylen);
++ break;
++ case KPP_ECDH_PARAMS:
++ err = kpp_ecdh_set_privkey(tfm, key, keylen);
++ break;
++ default:
++ err = -EFAULT;
++ }
++
++ kpp->has_key = !err;
++
++ /* Return the maximum size of the kpp operation. */
++ if (!err)
++ err = crypto_kpp_maxsize(tfm);
++
++ return err;
++}
++
++static int kpp_dh_setparams_pkcs3(void *private, const u8 *params,
++ unsigned int paramslen)
++{
++ struct kpp_tfm *kpp = private;
++ struct crypto_kpp *tfm = kpp->kpp;
++ int err;
++
++ /* If parameters were already set, disallow setting them again. */
++ if (kpp->has_params != KPP_NO_PARAMS)
++ return -EINVAL;
++
++ err = crypto_kpp_set_params(tfm, params, paramslen);
++ if (!err) {
++ kpp->has_params = KPP_DH_PARAMS;
++ /* Return the maximum size of the kpp operation. */
++ err = crypto_kpp_maxsize(tfm);
++ } else
++ kpp->has_params = KPP_NO_PARAMS;
++
++ return err;
++}
++
++static int kpp_ecdh_setcurve(void *private, const u8 *curveid,
++ unsigned int curveidlen)
++{
++ struct kpp_tfm *kpp = private;
++ struct crypto_kpp *tfm = kpp->kpp;
++ int err;
++ struct ecdh params = {
++ .key = NULL,
++ .key_size = 0,
++ };
++
++ /* If parameters were already set, disallow setting them again. */
++ if (kpp->has_params != KPP_NO_PARAMS)
++ return -EINVAL;
++
++ if (curveidlen != sizeof(unsigned long))
++ return -EINVAL;
++
++ err = kstrtou16(curveid, 10, ¶ms.curve_id);
++ if (err)
++ return err;
++
++ err = kpp_ecdh_set_secret(tfm, ¶ms);
++ if (!err) {
++ kpp->has_params = KPP_ECDH_PARAMS;
++ /* Return the maximum size of the kpp operation. */
++ err = crypto_kpp_maxsize(tfm);
++ } else
++ kpp->has_params = KPP_NO_PARAMS;
++
++ return err;
++}
++
++static void kpp_sock_destruct(struct sock *sk)
++{
++ struct alg_sock *ask = alg_sk(sk);
++ struct af_alg_ctx *ctx = ask->private;
++
++ af_alg_pull_tsgl(sk, ctx->used, NULL, 0);
++ sock_kfree_s(sk, ctx, ctx->len);
++ af_alg_release_parent(sk);
++}
++
++static int kpp_accept_parent_nokey(void *private, struct sock *sk)
++{
++ struct af_alg_ctx *ctx;
++ struct alg_sock *ask = alg_sk(sk);
++ unsigned int len = sizeof(*ctx);
++
++ ctx = sock_kmalloc(sk, len, GFP_KERNEL);
++ if (!ctx)
++ return -ENOMEM;
++
++ INIT_LIST_HEAD(&ctx->tsgl_list);
++ ctx->len = len;
++ ctx->used = 0;
++ atomic_set(&ctx->rcvused, 0);
++ ctx->more = 0;
++ ctx->merge = 0;
++ ctx->op = 0;
++ crypto_init_wait(&ctx->wait);
++
++ ask->private = ctx;
++
++ sk->sk_destruct = kpp_sock_destruct;
++
++ return 0;
++}
++
++static int kpp_accept_parent(void *private, struct sock *sk)
++{
++ struct kpp_tfm *tfm = private;
++
++ if (!tfm->has_key || (tfm->has_params == KPP_NO_PARAMS))
++ return -ENOKEY;
++
++ return kpp_accept_parent_nokey(private, sk);
++}
++
++static const struct af_alg_type algif_type_kpp = {
++ .bind = kpp_bind,
++ .release = kpp_release,
++ .setkey = kpp_setprivkey,
++ .setpubkey = NULL,
++ .dhparams = kpp_dh_setparams_pkcs3,
++ .ecdhcurve = kpp_ecdh_setcurve,
++ .setauthsize = NULL,
++ .accept = kpp_accept_parent,
++ .accept_nokey = kpp_accept_parent_nokey,
++ .ops = &algif_kpp_ops,
++ .ops_nokey = &algif_kpp_ops_nokey,
++ .name = "kpp",
++ .owner = THIS_MODULE
++};
++
++static int __init algif_kpp_init(void)
++{
++ return af_alg_register_type(&algif_type_kpp);
++}
++
++static void __exit algif_kpp_exit(void)
++{
++ int err = af_alg_unregister_type(&algif_type_kpp);
++
++ BUG_ON(err);
++}
++
++module_init(algif_kpp_init);
++module_exit(algif_kpp_exit);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>");
++MODULE_DESCRIPTION("Key protocol primitives kernel crypto API user space interface");
+diff -Nuar linux-at91/crypto/algif_skcipher.c linux-at91-sama5d4/crypto/algif_skcipher.c
+--- linux-at91/crypto/algif_skcipher.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/algif_skcipher.c 2019-08-26 00:44:57.988610990 +0800
+@@ -51,6 +51,19 @@
+ return af_alg_sendmsg(sock, msg, size, ivsize);
+ }
+
++static inline int skcipher_cipher_op(struct af_alg_ctx *ctx,
++ struct af_alg_async_req *areq)
++{
++ switch (ctx->op) {
++ case ALG_OP_ENCRYPT:
++ return crypto_skcipher_encrypt(&areq->cra_u.skcipher_req);
++ case ALG_OP_DECRYPT:
++ return crypto_skcipher_decrypt(&areq->cra_u.skcipher_req);
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
+ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
+ size_t ignored, int flags)
+ {
+@@ -126,9 +139,7 @@
+ skcipher_request_set_callback(&areq->cra_u.skcipher_req,
+ CRYPTO_TFM_REQ_MAY_SLEEP,
+ af_alg_async_cb, areq);
+- err = ctx->enc ?
+- crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) :
+- crypto_skcipher_decrypt(&areq->cra_u.skcipher_req);
++ err = skcipher_cipher_op(ctx, areq);
+
+ /* AIO operation in progress */
+ if (err == -EINPROGRESS || err == -EBUSY)
+@@ -141,10 +152,8 @@
+ CRYPTO_TFM_REQ_MAY_SLEEP |
+ CRYPTO_TFM_REQ_MAY_BACKLOG,
+ crypto_req_done, &ctx->wait);
+- err = crypto_wait_req(ctx->enc ?
+- crypto_skcipher_encrypt(&areq->cra_u.skcipher_req) :
+- crypto_skcipher_decrypt(&areq->cra_u.skcipher_req),
+- &ctx->wait);
++ err = crypto_wait_req(skcipher_cipher_op(ctx, areq),
++ &ctx->wait);
+ }
+
+
+@@ -360,7 +369,7 @@
+ atomic_set(&ctx->rcvused, 0);
+ ctx->more = 0;
+ ctx->merge = 0;
+- ctx->enc = 0;
++ ctx->op = 0;
+ crypto_init_wait(&ctx->wait);
+
+ ask->private = ctx;
+diff -Nuar linux-at91/crypto/dh.c linux-at91-sama5d4/crypto/dh.c
+--- linux-at91/crypto/dh.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/dh.c 2019-08-26 00:44:57.988610990 +0800
+@@ -22,15 +22,25 @@
+ MPI xa; /* Value is guaranteed to be set. */
+ };
+
+-static void dh_clear_ctx(struct dh_ctx *ctx)
++static inline void dh_clear_params(struct dh_ctx *ctx)
+ {
+ mpi_free(ctx->p);
+ mpi_free(ctx->q);
++}
++
++static inline void dh_clear_key(struct dh_ctx *ctx)
++{
+ mpi_free(ctx->g);
+ mpi_free(ctx->xa);
+ memset(ctx, 0, sizeof(*ctx));
+ }
+
++static void dh_clear_ctx(struct dh_ctx *ctx)
++{
++ dh_clear_params(ctx);
++ dh_clear_key(ctx);
++}
++
+ /*
+ * If base is g we compute the public key
+ * ya = g^xa mod p; [RFC2631 sec 2.1.1]
+@@ -55,6 +65,10 @@
+
+ static int dh_set_params(struct dh_ctx *ctx, struct dh *params)
+ {
++ /* If DH parameters are not given, do not check them. */
++ if (!params->p_size && !params->g_size)
++ return 0;
++
+ if (dh_check_params_length(params->p_size << 3))
+ return -EINVAL;
+
+@@ -75,6 +89,23 @@
+ return 0;
+ }
+
++static int dh_set_params_pkcs3(struct crypto_kpp *tfm, const void *param,
++ unsigned int param_len)
++{
++ struct dh_ctx *ctx = dh_get_ctx(tfm);
++ struct dh parsed_params;
++ int ret;
++
++ /* Free the old parameter if any */
++ dh_clear_params(ctx);
++
++ ret = dh_parse_params_pkcs3(&parsed_params, param, param_len);
++ if (ret)
++ return ret;
++
++ return dh_set_params(ctx, &parsed_params);
++}
++
+ static int dh_set_secret(struct crypto_kpp *tfm, const void *buf,
+ unsigned int len)
+ {
+@@ -82,7 +113,7 @@
+ struct dh params;
+
+ /* Free the old MPI key if any */
+- dh_clear_ctx(ctx);
++ dh_clear_key(ctx);
+
+ if (crypto_dh_decode_key(buf, len, ¶ms) < 0)
+ goto err_clear_ctx;
+@@ -157,11 +188,10 @@
+ MPI base, val = mpi_alloc(0);
+ int ret = 0;
+ int sign;
+-
+ if (!val)
+ return -ENOMEM;
+
+- if (unlikely(!ctx->xa)) {
++ if (unlikely(!ctx->xa || !ctx->p || !ctx->g)) {
+ ret = -EINVAL;
+ goto err_free_val;
+ }
+@@ -212,6 +242,7 @@
+ }
+
+ static struct kpp_alg dh = {
++ .set_params = dh_set_params_pkcs3,
+ .set_secret = dh_set_secret,
+ .generate_public_key = dh_compute_value,
+ .compute_shared_secret = dh_compute_value,
+diff -Nuar linux-at91/crypto/dh_helper.c linux-at91-sama5d4/crypto/dh_helper.c
+--- linux-at91/crypto/dh_helper.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/dh_helper.c 2019-08-26 00:44:57.988610990 +0800
+@@ -13,6 +13,7 @@
+ #include <linux/string.h>
+ #include <crypto/dh.h>
+ #include <crypto/kpp.h>
++#include "dhparameter-asn1.h"
+
+ #define DH_KPP_SECRET_MIN_SIZE (sizeof(struct kpp_secret) + 4 * sizeof(int))
+
+@@ -59,10 +60,13 @@
+ ptr = dh_pack_data(ptr, end, ¶ms->p_size, sizeof(params->p_size));
+ ptr = dh_pack_data(ptr, end, ¶ms->q_size, sizeof(params->q_size));
+ ptr = dh_pack_data(ptr, end, ¶ms->g_size, sizeof(params->g_size));
+- ptr = dh_pack_data(ptr, end, params->key, params->key_size);
+- ptr = dh_pack_data(ptr, end, params->p, params->p_size);
+- ptr = dh_pack_data(ptr, end, params->q, params->q_size);
+- ptr = dh_pack_data(ptr, end, params->g, params->g_size);
++ if (params->key)
++ ptr = dh_pack_data(ptr, end, params->key, params->key_size);
++ if (params->p)
++ ptr = dh_pack_data(ptr, end, params->p, params->p_size);
++ ptr = dh_pack_data(ptr, end, params->q, params->q_size);
++ if (params->g)
++ ptr = dh_pack_data(ptr, end, params->g, params->g_size);
+ if (ptr != end)
+ return -EINVAL;
+ return 0;
+@@ -96,6 +100,10 @@
+ params->g_size > params->p_size || params->q_size > params->p_size)
+ return -EINVAL;
+
++ /* Prevention of out-of-bounds access in decode code path */
++ if ((!params->key && params->key_size) || (!params->p && params->p_size) || (!params->g && params->g_size))
++ return -EINVAL;
++
+ /* Don't allocate memory. Set pointers to data within
+ * the given buffer
+ */
+@@ -120,3 +128,40 @@
+ return 0;
+ }
+ EXPORT_SYMBOL_GPL(crypto_dh_decode_key);
++
++int dh_get_p(void *context, size_t hdrlen, unsigned char tag, const void *value,
++ size_t vlen)
++{
++ struct dh *dh = context;
++
++ /* invalid key provided */
++ if (!value || !vlen)
++ return -EINVAL;
++
++ dh->p = value;
++ dh->p_size = vlen;
++
++ return 0;
++}
++
++int dh_get_g(void *context, size_t hdrlen, unsigned char tag,
++ const void *value, size_t vlen)
++{
++ struct dh *dh = context;
++
++ /* invalid base provided */
++ if (!value || !dh->p_size || !vlen || vlen > dh->p_size)
++ return -EINVAL;
++
++ dh->g = value;
++ dh->g_size = vlen;
++
++ return 0;
++}
++
++int dh_parse_params_pkcs3(struct dh *dh, const void *param,
++ unsigned int param_len)
++{
++ return asn1_ber_decoder(&dhparameter_decoder, dh, param, param_len);
++}
++EXPORT_SYMBOL_GPL(dh_parse_params_pkcs3);
+diff -Nuar linux-at91/crypto/dhparameter.asn1 linux-at91-sama5d4/crypto/dhparameter.asn1
+--- linux-at91/crypto/dhparameter.asn1 1970-01-01 08:00:00.000000000 +0800
++++ linux-at91-sama5d4/crypto/dhparameter.asn1 2019-08-26 00:44:57.988610990 +0800
+@@ -0,0 +1,4 @@
++DHParameter ::= SEQUENCE {
++ prime INTEGER ({ dh_get_p }),
++ base INTEGER ({ dh_get_g })
++}
+diff -Nuar linux-at91/crypto/Kconfig linux-at91-sama5d4/crypto/Kconfig
+--- linux-at91/crypto/Kconfig 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/Kconfig 2019-08-26 00:44:57.988610990 +0800
+@@ -1862,6 +1862,25 @@
+ This option enables the user-spaces interface for AEAD
+ cipher algorithms.
+
++config CRYPTO_USER_API_AKCIPHER
++ tristate "User-space interface for asymmetric key cipher algorithms"
++ depends on NET
++ select CRYPTO_AKCIPHER2
++ select CRYPTO_USER_API
++ help
++ This option enables the user-space interface for asymmetric
++ key cipher algorithms.
++
++config CRYPTO_USER_API_KPP
++ tristate "User-space interface for key protocol primitives algorithms"
++ depends on NET
++ select CRYPTO_KPP2
++ select CRYPTO_USER_API
++ help
++ This option enables the user-spaces interface for key protocol
++ primitives algorithms. This covers Diffie-Hellman and EC
++ Diffie-Hellman.
++
+ config CRYPTO_HASH_INFO
+ bool
+
+diff -Nuar linux-at91/crypto/Makefile linux-at91-sama5d4/crypto/Makefile
+--- linux-at91/crypto/Makefile 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/crypto/Makefile 2019-08-26 00:44:57.988610990 +0800
+@@ -31,7 +31,12 @@
+ obj-$(CONFIG_CRYPTO_AKCIPHER2) += akcipher.o
+ obj-$(CONFIG_CRYPTO_KPP2) += kpp.o
+
+-dh_generic-y := dh.o
++$(obj)/dhparameter-asn1.o: $(obj)/dhparameter-asn1.c $(obj)/dhparameter-asn1.h
++$(obj)/dh_helper.o: $(obj)/dhparameter-asn1.h
++clean-files += dhparameter-asn1.c dhparameter-asn1.h
++
++dh_generic-y := dhparameter-asn1.o
++dh_generic-y += dh.o
+ dh_generic-y += dh_helper.o
+ obj-$(CONFIG_CRYPTO_DH) += dh_generic.o
+
+@@ -141,6 +146,8 @@
+ obj-$(CONFIG_CRYPTO_USER_API_SKCIPHER) += algif_skcipher.o
+ obj-$(CONFIG_CRYPTO_USER_API_RNG) += algif_rng.o
+ obj-$(CONFIG_CRYPTO_USER_API_AEAD) += algif_aead.o
++obj-$(CONFIG_CRYPTO_USER_API_AKCIPHER) += algif_akcipher.o
++obj-$(CONFIG_CRYPTO_USER_API_KPP) += algif_kpp.o
+ obj-$(CONFIG_CRYPTO_ZSTD) += zstd.o
+
+ ecdh_generic-y := ecc.o
+diff -Nuar linux-at91/Documentation/crypto/api-kpp.rst linux-at91-sama5d4/Documentation/crypto/api-kpp.rst
+--- linux-at91/Documentation/crypto/api-kpp.rst 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/Documentation/crypto/api-kpp.rst 2019-08-26 00:44:57.988610990 +0800
+@@ -11,7 +11,7 @@
+ :doc: Generic Key-agreement Protocol Primitives API
+
+ .. kernel-doc:: include/crypto/kpp.h
+- :functions: crypto_alloc_kpp crypto_free_kpp crypto_kpp_set_secret crypto_kpp_generate_public_key crypto_kpp_compute_shared_secret crypto_kpp_maxsize
++ :functions: crypto_alloc_kpp crypto_free_kpp crypto_kpp_set_params crypto_kpp_set_secret crypto_kpp_generate_public_key crypto_kpp_compute_shared_secret crypto_kpp_maxsize
+
+ Key-agreement Protocol Primitives (KPP) Cipher Request Handle
+ -------------------------------------------------------------
+diff -Nuar linux-at91/drivers/nfc/Kconfig linux-at91-sama5d4/drivers/nfc/Kconfig
+--- linux-at91/drivers/nfc/Kconfig 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/drivers/nfc/Kconfig 2019-08-26 00:57:27.196625361 +0800
+@@ -48,6 +48,17 @@
+
+ If unsure, say N.
+
++config NXPRDLIB_BAL
++ tristate "NXP NFCRdLib BAL(Bus Abstraction Layer) driver"
++ depends on SPI
++ help
++ It allows having the BAL within the Kernel while the NFCRdLib runs in
++ user space. This may be required in order to reduce the latency introduced
++ by unnecessary context switches when BAL also runs in user space.
++
++ If unsure, say N.
++
++
+ source "drivers/nfc/fdp/Kconfig"
+ source "drivers/nfc/pn544/Kconfig"
+ source "drivers/nfc/pn533/Kconfig"
+diff -Nuar linux-at91/drivers/nfc/Makefile linux-at91-sama5d4/drivers/nfc/Makefile
+--- linux-at91/drivers/nfc/Makefile 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/drivers/nfc/Makefile 2019-08-26 00:55:27.780623071 +0800
+@@ -14,6 +14,7 @@
+ obj-$(CONFIG_NFC_TRF7970A) += trf7970a.o
+ obj-$(CONFIG_NFC_ST21NFCA) += st21nfca/
+ obj-$(CONFIG_NFC_ST_NCI) += st-nci/
++obj-$(CONFIG_NXPRDLIB_BAL) += nxprdlib_bal.o
+ obj-$(CONFIG_NFC_NXP_NCI) += nxp-nci/
+ obj-$(CONFIG_NFC_S3FWRN5) += s3fwrn5/
+ obj-$(CONFIG_NFC_ST95HF) += st95hf/
+diff -Nuar linux-at91/drivers/nfc/nxprdlib_bal.c linux-at91-sama5d4/drivers/nfc/nxprdlib_bal.c
+--- linux-at91/drivers/nfc/nxprdlib_bal.c 1970-01-01 08:00:00.000000000 +0800
++++ linux-at91-sama5d4/drivers/nfc/nxprdlib_bal.c 2019-08-26 01:04:45.272633765 +0800
+@@ -0,0 +1,328 @@
++/*
++ * 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.
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/ioctl.h>
++#include <linux/fs.h>
++#include <linux/device.h>
++#include <linux/err.h>
++#include <linux/list.h>
++#include <linux/errno.h>
++#include <linux/mutex.h>
++#include <linux/slab.h>
++#include <linux/compat.h>
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_gpio.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/spidev.h>
++#include <linux/uaccess.h>
++#include <linux/interrupt.h>
++#include "nxprdlib_bal.h"
++
++#define BALDEV_NAME "bal"
++#define BALDEV_MAJOR 100
++#define BALDEV_MINOR 0
++
++#define BAL_IOCTL_MODE (0x0U)
++
++#define BAL_MAX_BUF_SIZE 1024
++#define BAL_BUSY_TIMEOUT_SECS 3
++
++#define BAL_MODE_NORMAL (0x0U)
++#define BAL_MODE_DWL (0x1U)
++
++#define BAL_DWL_DIRECTION_BYTE_WR (0x7fU)
++#define BAL_DWL_DIRECTION_BYTE_RD (0xffU)
++
++struct bal_data {
++ dev_t devt;
++ spinlock_t spi_lock;
++ struct spi_device *spi;
++ struct list_head device_entry;
++
++ struct mutex use_lock;
++ bool in_use;
++ unsigned int busy_pin;
++ int busy_irq;
++ struct completion busy_done;
++ bool first_xfer;
++ u8 *buffer;
++ u8 mode;
++};
++
++
++static struct bal_data bal;
++static struct class *baldev_class;
++
++static irqreturn_t
++bal_busy_isr(int irq, void *dev_id)
++{
++ complete(&bal.busy_done);
++ return IRQ_HANDLED;
++}
++
++static int
++bal_spi_sync_xfer(size_t count)
++{
++ struct spi_transfer t = {
++ .rx_buf = bal.buffer,
++ .tx_buf = bal.buffer,
++ .len = count,
++ };
++
++ return spi_sync_transfer(bal.spi, &t, 1);
++}
++
++static ssize_t
++baldev_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
++{
++ ssize_t status = 0;
++
++ if (count > BAL_MAX_BUF_SIZE)
++ return -EMSGSIZE;
++
++ status = wait_for_completion_timeout(
++ &bal.busy_done, (BAL_BUSY_TIMEOUT_SECS * HZ));
++ if (status < 0) {
++ dev_err(&bal.spi->dev, "Timeout waiting for BUSY\n");
++ return status;
++ }
++ if (bal.mode == BAL_MODE_DWL)
++ bal.buffer[0] = BAL_DWL_DIRECTION_BYTE_RD;
++ status = bal_spi_sync_xfer(count);
++ if (status < 0)
++ return status;
++
++ if (copy_to_user(buf, bal.buffer, count))
++ return -EFAULT;
++ return count;
++}
++
++
++static ssize_t
++baldev_write(struct file *filp, const char __user *buf,
++ size_t count, loff_t *f_pos)
++{
++ ssize_t status = 0;
++
++ if (count > BAL_MAX_BUF_SIZE)
++ return -ENOMEM;
++ if (copy_from_user(bal.buffer, buf, count))
++ return -EFAULT;
++ if ((bal.mode == BAL_MODE_NORMAL) &&
++ !bal.first_xfer) {
++ status = wait_for_completion_timeout(
++ &bal.busy_done, (BAL_BUSY_TIMEOUT_SECS * HZ));
++ if (status < 0) {
++ dev_err(&bal.spi->dev, "Timeout waiting for BUSY\n");
++ return status;
++ }
++ }
++ bal.first_xfer = false;
++ status = bal_spi_sync_xfer(count);
++ if (status < 0)
++ return status;
++
++ return count;
++}
++
++
++static int baldev_open(struct inode *inode, struct file *filp)
++{
++ int status;
++
++ mutex_lock(&bal.use_lock);
++ if (bal.in_use) {
++ dev_err(&bal.spi->dev, "Can only be opened once!\n");
++ status = -EBUSY;
++ goto err;
++ }
++ bal.buffer = kmalloc(BAL_MAX_BUF_SIZE, GFP_KERNEL | GFP_DMA);
++ if (bal.buffer == NULL) {
++ status = -ENOMEM;
++ goto err;
++ }
++ bal.mode = BAL_MODE_NORMAL;
++ status = request_threaded_irq(bal.busy_irq, bal_busy_isr,
++ NULL,
++ IRQF_TRIGGER_FALLING,
++ "bal", &bal);
++ if (status < 0) {
++ dev_err(&bal.spi->dev, "Can't request IRQ %d!\n", bal.busy_irq);
++ goto err;
++ }
++ bal.in_use = true;
++ reinit_completion(&bal.busy_done);
++ bal.first_xfer = true;
++ mutex_unlock(&bal.use_lock);
++
++ nonseekable_open(inode, filp);
++ try_module_get(THIS_MODULE);
++
++ return 0;
++err:
++ mutex_unlock(&bal.use_lock);
++ return status;
++}
++
++static int baldev_release(struct inode *inode, struct file *filp)
++{
++ int status = 0;
++
++ free_irq(bal.busy_irq, &bal);
++ module_put(THIS_MODULE);
++ kfree(bal.buffer);
++ bal.in_use = false;
++ return status;
++}
++
++static long
++baldev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ int status = 0;
++ int flag;
++
++ if (cmd == BAL_IOCTL_MODE) {
++ bal.mode = (u8)arg;
++ if (bal.mode == BAL_MODE_NORMAL)
++ flag = IRQF_TRIGGER_FALLING;
++ else
++ flag = IRQF_TRIGGER_RISING;
++ free_irq(bal.busy_irq, &bal);
++ status = request_threaded_irq(bal.busy_irq, bal_busy_isr,
++ NULL, flag, "bal", &bal);
++ if (status < 0)
++ dev_err(&bal.spi->dev,
++ "Can't request IRQ %d!\n", bal.busy_irq);
++ } else
++ status = -EINVAL;
++
++ return status;
++}
++
++static const struct file_operations baldev_fops = {
++ .owner = THIS_MODULE,
++ .write = baldev_write,
++ .read = baldev_read,
++ .open = baldev_open,
++ .unlocked_ioctl = baldev_ioctl,
++ .release = baldev_release,
++ .llseek = no_llseek,
++};
++
++
++#ifdef CONFIG_OF
++static const struct of_device_id baldev_dt_ids[] = {
++ { .compatible = "nxp,bal" },
++ {},
++};
++MODULE_DEVICE_TABLE(of, baldev_dt_ids);
++#endif
++
++
++static int bal_spi_remove(struct spi_device *spi)
++{
++ dev_info(&spi->dev, "Removing SPI driver\n");
++ device_destroy(baldev_class, bal.devt);
++ return 0;
++}
++
++static int bal_spi_probe(struct spi_device *spi)
++{
++ struct device *dev;
++
++ dev_info(&spi->dev, "Probing BAL driver\n");
++ mutex_init(&bal.use_lock);
++ if (spi->dev.of_node) {
++ bal.busy_pin =
++ of_get_named_gpio(spi->dev.of_node, "busy-pin-gpio", 0);
++ } else {
++ struct bal_spi_platform_data *platform_data =
++ spi->dev.platform_data;
++
++ if (!platform_data) {
++ dev_err(&spi->dev, "Platform data for BAL not specified!\n");
++ return -ENODEV;
++ }
++ bal.busy_pin = platform_data->busy_pin;
++ }
++ if (!gpio_is_valid(bal.busy_pin)) {
++ dev_err(&spi->dev, "BUSY pin mapped to an invalid GPIO!\n");
++ return -ENODEV;
++ }
++ bal.busy_irq = gpio_to_irq(bal.busy_pin);
++ if (bal.busy_irq < 0) {
++ dev_err(&spi->dev, "BUSY pin GPIO can't be used as IRQ!\n");
++ return bal.busy_irq;
++ }
++ bal.spi = spi;
++ bal.devt = MKDEV(BALDEV_MAJOR, BALDEV_MINOR);
++ init_completion(&bal.busy_done);
++
++ dev = device_create(baldev_class, &spi->dev, bal.devt, &bal, "bal");
++ if (IS_ERR(dev)) {
++ dev_err(&spi->dev, "Error creating device!\n");
++ return PTR_ERR(dev);
++ }
++
++ gpio_direction_input(bal.busy_pin);
++ spi_set_drvdata(spi, &bal);
++ return 0;
++}
++
++static struct spi_driver bal_spi_driver = {
++ .driver = {
++ .name = "BAL_SPI_DRIVER",
++ .owner = THIS_MODULE,
++ .of_match_table = of_match_ptr(baldev_dt_ids),
++ },
++
++ .probe = bal_spi_probe,
++ .remove = bal_spi_remove,
++ };
++
++static int __init baldev_init(void)
++{
++ int status;
++
++ baldev_class = class_create(THIS_MODULE, "bal");
++ if (IS_ERR(baldev_class))
++ return PTR_ERR(baldev_class);
++ status = register_chrdev(BALDEV_MAJOR, "bal", &baldev_fops);
++ if (status < 0)
++ goto err_reg_dev;
++ status = spi_register_driver(&bal_spi_driver);
++ if (status < 0)
++ goto err_reg_drv;
++ return 0;
++
++err_reg_drv:
++ unregister_chrdev(BALDEV_MAJOR, BALDEV_NAME);
++err_reg_dev:
++ class_destroy(baldev_class);
++ return status;
++}
++module_init(baldev_init);
++
++static void __exit baldev_exit(void)
++{
++ spi_unregister_driver(&bal_spi_driver);
++ class_destroy(baldev_class);
++ unregister_chrdev(BALDEV_MAJOR, BALDEV_NAME);
++}
++module_exit(baldev_exit);
++
++MODULE_AUTHOR("Christian Eisendle, <christian@eisendle.net>");
++MODULE_DESCRIPTION("NXP RdLib BAL Kernel Module");
++MODULE_LICENSE("GPL");
+diff -Nuar linux-at91/drivers/nfc/nxprdlib_bal.h linux-at91-sama5d4/drivers/nfc/nxprdlib_bal.h
+--- linux-at91/drivers/nfc/nxprdlib_bal.h 1970-01-01 08:00:00.000000000 +0800
++++ linux-at91-sama5d4/drivers/nfc/nxprdlib_bal.h 2019-08-26 00:50:21.772617201 +0800
+@@ -0,0 +1,5 @@
++/* nxprdlib_bal.h */
++
++struct bal_spi_platform_data {
++ int busy_pin;
++};
diff -Nuar linux-at91/drivers/spi/spidev.c linux-at91-sama5d4/drivers/spi/spidev.c
---- linux-at91/drivers/spi/spidev.c 2019-08-18 17:24:57.000000000 +0800
-+++ linux-at91-sama5d4/drivers/spi/spidev.c 2019-08-22 23:05:23.823524309 +0800
-@@ -696,6 +696,7 @@
- static const struct of_device_id spidev_dt_ids[] = {
- { .compatible = "rohm,dh2228fv" },
+--- linux-at91/drivers/spi/spidev.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/drivers/spi/spidev.c 2019-08-26 00:44:57.992610990 +0800
+@@ -669,6 +669,7 @@
{ .compatible = "lineartechnology,ltc2488" },
-+ { .compatible = "linux,spidev" },
+ { .compatible = "ge,achc" },
+ { .compatible = "semtech,sx1301" },
++ { .compatible = "linux,spidev" }, /* add by guowenxue, 2019.08.25 */
{},
};
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
+diff -Nuar linux-at91/include/crypto/dh.h linux-at91-sama5d4/include/crypto/dh.h
+--- linux-at91/include/crypto/dh.h 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/include/crypto/dh.h 2019-08-26 00:44:57.992610990 +0800
+@@ -37,10 +37,10 @@
+ * @g_size: Size of DH generator G
+ */
+ struct dh {
+- void *key;
+- void *p;
++ const void *key;
++ const void *p;
+ void *q;
+- void *g;
++ const void *g;
+ unsigned int key_size;
+ unsigned int p_size;
+ unsigned int q_size;
+@@ -88,4 +88,19 @@
+ */
+ int crypto_dh_decode_key(const char *buf, unsigned int len, struct dh *params);
+
++/**
++ * dh_parse_params_pkcs3() - decodes the PKCS#3 BER encoded buffer of the DH
++ * parameters and stores in the provided struct dh,
++ * pointers to the raw p and g parameters as is, so
++ * that the caller can copy it or MPI parse it, etc.
++ *
++ * @dh: struct dh representation
++ * @param: DH parameters in BER format following PKCS#3
++ * @param_len: length of parameter buffer
++ *
++ * Return: 0 on success or error code in case of error
++ */
++int dh_parse_params_pkcs3(struct dh *dh, const void *param,
++ unsigned int param_len);
++
+ #endif
+diff -Nuar linux-at91/include/crypto/ecdh.h linux-at91-sama5d4/include/crypto/ecdh.h
+--- linux-at91/include/crypto/ecdh.h 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/include/crypto/ecdh.h 2019-08-26 00:44:57.992610990 +0800
+@@ -40,7 +40,7 @@
+ */
+ struct ecdh {
+ unsigned short curve_id;
+- char *key;
++ const char *key;
+ unsigned short key_size;
+ };
+
+diff -Nuar linux-at91/include/crypto/if_alg.h linux-at91-sama5d4/include/crypto/if_alg.h
+--- linux-at91/include/crypto/if_alg.h 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/include/crypto/if_alg.h 2019-08-26 00:44:57.992610990 +0800
+@@ -23,6 +23,8 @@
+
+ #include <crypto/aead.h>
+ #include <crypto/skcipher.h>
++#include <crypto/akcipher.h>
++#include <crypto/kpp.h>
+
+ #define ALG_MAX_PAGES 16
+
+@@ -51,6 +53,9 @@
+ void *(*bind)(const char *name, u32 type, u32 mask);
+ void (*release)(void *private);
+ int (*setkey)(void *private, const u8 *key, unsigned int keylen);
++ int (*setpubkey)(void *private, const u8 *key, unsigned int keylen);
++ int (*dhparams)(void *private, const u8 *param, unsigned int paramlen);
++ int (*ecdhcurve)(void *private, const u8 *param, unsigned int paramlen);
+ int (*accept)(void *private, struct sock *sk);
+ int (*accept_nokey)(void *private, struct sock *sk);
+ int (*setauthsize)(void *private, unsigned int authsize);
+@@ -114,6 +119,8 @@
+ union {
+ struct aead_request aead_req;
+ struct skcipher_request skcipher_req;
++ struct akcipher_request akcipher_req;
++ struct kpp_request kpp_req;
+ } cra_u;
+
+ /* req ctx trails this struct */
+@@ -138,7 +145,7 @@
+ * @more: More data to be expected from user space?
+ * @merge: Shall new data from user space be merged into existing
+ * SG?
+- * @enc: Cryptographic operation to be performed when
++ * @op: Cryptographic operation to be performed when
+ * recvmsg is invoked.
+ * @len: Length of memory allocated for this data structure.
+ */
+@@ -155,7 +162,7 @@
+
+ bool more;
+ bool merge;
+- bool enc;
++ int op;
+
+ unsigned int len;
+ };
+diff -Nuar linux-at91/include/crypto/kpp.h linux-at91-sama5d4/include/crypto/kpp.h
+--- linux-at91/include/crypto/kpp.h 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/include/crypto/kpp.h 2019-08-26 00:44:57.992610990 +0800
+@@ -51,6 +51,9 @@
+ /**
+ * struct kpp_alg - generic key-agreement protocol primitives
+ *
++ * @set_params: Function allows the caller to set the parameters
++ * separately from the key. The format of the parameters
++ * is protocol specific.
+ * @set_secret: Function invokes the protocol specific function to
+ * store the secret private key along with parameters.
+ * The implementation knows how to decode the buffer
+@@ -74,6 +77,8 @@
+ * @base: Common crypto API algorithm data structure
+ */
+ struct kpp_alg {
++ int (*set_params)(struct crypto_kpp *tfm, const void *buffer,
++ unsigned int len);
+ int (*set_secret)(struct crypto_kpp *tfm, const void *buffer,
+ unsigned int len);
+ int (*generate_public_key)(struct kpp_request *req);
+@@ -269,6 +274,29 @@
+ };
+
+ /**
++ * crypto_kpp_set_params() - Set parameters needed for kpp operation
++ *
++ * Function invokes the specific kpp operation for a given alg.
++ *
++ * @tfm: tfm handle
++ * @buffer: Buffer holding the protocol specific representation of the
++ * parameters (e.g. PKCS#3 DER for DH)
++ * @len: Length of the parameter buffer.
++ *
++ * Return: zero on success; error code in case of error
++ */
++static inline int crypto_kpp_set_params(struct crypto_kpp *tfm,
++ const void *buffer, unsigned int len)
++{
++ struct kpp_alg *alg = crypto_kpp_alg(tfm);
++
++ if (alg->set_params)
++ return alg->set_params(tfm, buffer, len);
++ else
++ return -EOPNOTSUPP;
++}
++
++/**
+ * crypto_kpp_set_secret() - Invoke kpp operation
+ *
+ * Function invokes the specific kpp operation for a given alg.
+diff -Nuar linux-at91/include/uapi/linux/if_alg.h linux-at91-sama5d4/include/uapi/linux/if_alg.h
+--- linux-at91/include/uapi/linux/if_alg.h 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/include/uapi/linux/if_alg.h 2019-08-26 00:44:57.992610990 +0800
+@@ -35,9 +35,16 @@
+ #define ALG_SET_OP 3
+ #define ALG_SET_AEAD_ASSOCLEN 4
+ #define ALG_SET_AEAD_AUTHSIZE 5
++#define ALG_SET_PUBKEY 6
++#define ALG_SET_DH_PARAMETERS 7
++#define ALG_SET_ECDH_CURVE 8
+
+ /* Operations */
+ #define ALG_OP_DECRYPT 0
+ #define ALG_OP_ENCRYPT 1
++#define ALG_OP_SIGN 2
++#define ALG_OP_VERIFY 3
++#define ALG_OP_KEYGEN 4
++#define ALG_OP_SSGEN 5
+
+ #endif /* _LINUX_IF_ALG_H */
diff -Nuar linux-at91/linuxrom-sama5d4.its linux-at91-sama5d4/linuxrom-sama5d4.its
--- linux-at91/linuxrom-sama5d4.its 1970-01-01 08:00:00.000000000 +0800
-+++ linux-at91-sama5d4/linuxrom-sama5d4.its 2019-08-22 22:54:12.063511423 +0800
++++ linux-at91-sama5d4/linuxrom-sama5d4.its 2019-08-26 00:44:57.992610990 +0800
@@ -0,0 +1,37 @@
+/* U-Boot uImage source file for "sama5d4_xplained" */
+
@@ -4326,25 +6753,28 @@
+ };
+};
diff -Nuar linux-at91/Makefile linux-at91-sama5d4/Makefile
---- linux-at91/Makefile 2019-08-18 17:24:45.000000000 +0800
-+++ linux-at91-sama5d4/Makefile 2019-08-22 23:16:11.343536730 +0800
-@@ -1,7 +1,7 @@
- VERSION = 4
- PATCHLEVEL = 9
- SUBLEVEL = 151
--EXTRAVERSION = -linux4sam_5.8+
-+EXTRAVERSION = -linux4sam_5.8
- NAME = Roaring Lionus
-
- # *DOCUMENTATION*
-@@ -254,8 +254,8 @@
- # "make" in the configured kernel build directory always uses that.
+--- linux-at91/Makefile 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/Makefile 2019-08-26 01:05:15.808634350 +0800
+@@ -319,7 +319,9 @@
+ # Alternatively CROSS_COMPILE can be set in the environment.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
-ARCH ?= $(SUBARCH)
--CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
+ARCH ?= arm
+CROSS_COMPILE ?= /opt/buildroot/cortex-a5/bin/arm-linux-
++
# Architecture as present in compile.h
UTS_MACHINE := $(ARCH)
+diff -Nuar linux-at91/security/keys/dh.c linux-at91-sama5d4/security/keys/dh.c
+--- linux-at91/security/keys/dh.c 2019-07-10 18:07:41.000000000 +0800
++++ linux-at91-sama5d4/security/keys/dh.c 2019-08-26 00:44:57.992610990 +0800
+@@ -18,7 +18,7 @@
+ #include <keys/user-type.h>
+ #include "internal.h"
+
+-static ssize_t dh_data_from_key(key_serial_t keyid, void **data)
++static ssize_t dh_data_from_key(key_serial_t keyid, const void **data)
+ {
+ struct key *key;
+ key_ref_t key_ref;
diff --git a/linux-bsp/tarballs/linux-at91.tar.xz b/linux-bsp/tarballs/linux-at91.tar.xz
index 5b8d83d..c42ec61 100644
--- a/linux-bsp/tarballs/linux-at91.tar.xz
+++ b/linux-bsp/tarballs/linux-at91.tar.xz
Binary files differ
diff --git a/linux-bsp/tarballs/rootfs.changelog b/linux-bsp/tarballs/rootfs.changelog
index d411891..3bedc42 100644
--- a/linux-bsp/tarballs/rootfs.changelog
+++ b/linux-bsp/tarballs/rootfs.changelog
@@ -1,3 +1,7 @@
+2019.08.26 v0.2.0 GuoWenxue
+------------------------------
+1, Update and add RTL8188 driver in lib/modules/4.19.56-linux4sam-6.1
+
2019.08.22 v0.1.1 GuoWenxue
------------------------------
diff --git a/linux-bsp/tarballs/rootfs.tar.xz b/linux-bsp/tarballs/rootfs.tar.xz
index d1ee74f..e675d3d 100644
--- a/linux-bsp/tarballs/rootfs.tar.xz
+++ b/linux-bsp/tarballs/rootfs.tar.xz
Binary files differ
--
Gitblit v1.9.1