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, &params);
++}
++
++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, &params);
++}
++
++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, &params.curve_id);
++	if (err)
++		return err;
++
++	err = kpp_ecdh_set_secret(tfm, &params);
++	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, &params) < 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, &params->p_size, sizeof(params->p_size));
+ 	ptr = dh_pack_data(ptr, end, &params->q_size, sizeof(params->q_size));
+ 	ptr = dh_pack_data(ptr, end, &params->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