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