From 784ab04d40b0e1c8c5a69db8c79e6b2c86e4b6ea Mon Sep 17 00:00:00 2001
From: bill-auger <mr.j.spam.me@gmail.com>
Date: Oct 08 2021 05:24:00 +0000
Subject: [PATCH 1/23] [iceweasel]: update branding checksum


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index e09263d..9d13a0a 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -87,7 +87,7 @@ sha256sums=('299a472373021cc9194449c9f4bb962d5f74ef05e8af0448c589761ea34fbc84'
             'SKIP'
             'd7c7a65c4b7ec9ea40df129724ffb369d3f775b0514e3c267c52eec6d284b5e6'
             '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58')
-sha256sums+=('b3cf2d984a979a1daf997efaa46358c601a7b3e957cbc21f4155ea0a72def8e5'
+sha256sums+=('5552a56e40aef9fa174676f2b303208d905f519d2bb868d9cefe0950a2f65373'
              'SKIP'
              '6ebbf18792cb57067f500fd4575c341d4708c5c0a232d676471f87dfa590621b'
              'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887'

From e69e247f97e6a193677b81277b0639bec066808f Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Oct 08 2021 05:26:52 +0000
Subject: [PATCH 2/23] libre/iceweasel: Update to 93.0 according to upstreams


Arch Linux ARM has removed the patch and webrtc disable flag

---

diff --git a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
index 6060c34..c1feb3f 100644
--- a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
+++ b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
@@ -9,10 +9,10 @@ Subject: [PATCH] Use remoting name for GDK application names
  2 files changed, 6 insertions(+), 12 deletions(-)
 
 diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
-index 055be3e7a3554..f660bd26e331c 100644
+index bb14d84338334..f5c0222987fb0 100644
 --- a/toolkit/xre/nsAppRunner.cpp
 +++ b/toolkit/xre/nsAppRunner.cpp
-@@ -4304,11 +4304,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
+@@ -4299,11 +4299,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
    // consistently.
  
    // Set program name to the one defined in application.ini.
diff --git a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
index de515a4..9fcaef7 100644
--- a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
@@ -318,10 +318,12 @@ index ef91781ac6..8736951968 100644
      const params = {
        ...filters,
        _expected: expectedTimestamp ?? 0,
-@@ -166,6 +166,9 @@ var Utils = {
+@@ -273,7 +264,10 @@ var Utils = {
+           .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
            .join("&");
      }
-     const response = await fetch(url);
+-    const response = await Utils.fetch(url);
++    const response = await fetch(url);
 +    const responseDate = new Date().toUTCString()
 +    response.headers.set("Date", responseDate);
 +    response.headers.set("Last-Modified", responseDate);
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 9d13a0a..a418503 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -47,10 +47,10 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=92.0
+pkgver=93.0
 pkgrel=1
 pkgrel+=.parabola1
-_brandingver=91.0-1
+_brandingver=93.0-1
 pkgdesc="Standalone web browser derived from Mozilla Firefox"
 arch=(x86_64)
 arch+=(i686 armv7h)
@@ -79,25 +79,23 @@ source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.bra
          9003-FSDG-misc.patch
          process-json-files.py
          vendor.js.in)
-source_armv7h=(arm.patch
-               build-arm-libopus.patch)
+source_armv7h=(build-arm-libopus.patch)
 source_i686=('avoid-libxul-OOM-python-check.patch'
              'rust-static-disable-network-test-on-static-libraries.patch')
-sha256sums=('299a472373021cc9194449c9f4bb962d5f74ef05e8af0448c589761ea34fbc84'
+sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102'
             'SKIP'
-            'd7c7a65c4b7ec9ea40df129724ffb369d3f775b0514e3c267c52eec6d284b5e6'
+            'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb'
             '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58')
-sha256sums+=('5552a56e40aef9fa174676f2b303208d905f519d2bb868d9cefe0950a2f65373'
+sha256sums+=('d0f9afefbaaf838bbdd4067df0bbcd03e0e0a60a3e3addecdcc62ffb9c432015'
              'SKIP'
-             '6ebbf18792cb57067f500fd4575c341d4708c5c0a232d676471f87dfa590621b'
+             '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d'
              'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887'
              '39e3a5e1ad137e21f842a44d7e3bd24050292d2b41fe59b4e7c7dfed52a195dd'
              '9386f1c50506cd20ab6d212335d5e4417faeb2aea371dd46f2d107d171e80b83'
              'c93ce98e1cb64033079343ff1f3037fab6a3bc6d3eb5bc14c5edb70e2d45965d')
 sha256sums_i686=('2f0c81a38c4578f68f5456b618fe84a78974072821488173eb55e0e72287e353'
                  '10c5276eab2e87f400a6ec15d7ffbef3b0407ee888dea36f1128927ca55b9041')
-sha256sums_armv7h=('bc00516032330760444939c516a60c78f868631e1b37f075f0fe71a53737b966'
-                   '2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
+sha256sums_armv7h=('2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
 validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release@mozilla.com>
 validpgpkeys+=('BFA8008A8265677063B11BF47171986E4B745536') # Andreas Grapentin
 validpgpkeys+=('3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger
@@ -198,7 +196,6 @@ END
       cat >>../mozconfig <<END
 export CC=clang
 export CXX=clang++
-ac_add_options --disable-webrtc
 ac_add_options --disable-elf-hack
 
 # https://bugzilla.redhat.com/show_bug.cgi?id=1641623
@@ -211,8 +208,6 @@ END
       # EME is disabled anyway in the built package, but better check if it exists for ARM each new release.
       sed -i 's|ac_add_options --disable-eme||' ../mozconfig
 
-      echo "applying arm.patch"
-      patch -p1 -i ../arm.patch
       echo "applying build-arm-libopus.patch"
       patch -p1 -i ../build-arm-libopus.patch
     ;;
diff --git a/libre/iceweasel/arm.patch b/libre/iceweasel/arm.patch
deleted file mode 100644
index 9e2ed15..0000000
--- a/libre/iceweasel/arm.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-https://bugzilla.mozilla.org/show_bug.cgi?id=1526653
-
-diff --git a/js/src/wasm/WasmSignalHandlers.cpp.orig b/js/src/wasm/WasmSignalHandlers.cpp
-index 636537f..0f3461a 100644
---- a/js/src/wasm/WasmSignalHandlers.cpp.orig
-+++ b/js/src/wasm/WasmSignalHandlers.cpp
-@@ -244,7 +244,7 @@ using mozilla::DebugOnly;
- // emulation here.
- 
- #if defined(__linux__) && defined(__arm__)
--#  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
-+//#  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
- #endif
- 
- #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS

From 9c84d11c6687690e1690f14be87feff0a5f0a262 Mon Sep 17 00:00:00 2001
From: bill-auger <mr.j.spam.me@gmail.com>
Date: Oct 08 2021 05:28:29 +0000
Subject: [PATCH 3/23] [iceweasel]: update branding checksum


---

diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index a418503..96b248a 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -86,7 +86,7 @@ sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102'
             'SKIP'
             'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb'
             '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58')
-sha256sums+=('d0f9afefbaaf838bbdd4067df0bbcd03e0e0a60a3e3addecdcc62ffb9c432015'
+sha256sums+=('2b2dcb5f15dba7f4ce8bc19de260dbc75219a93b107931bb0f6aff705c579fe5'
              'SKIP'
              '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d'
              'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887'

From d9fe50a454470a940fd1e95a723fd27e0b253264 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 11 2021 22:27:51 +0000
Subject: [PATCH 4/23] updpkg: libre/linux-libre 5.14.11-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
index c5e5b05..46cfcfa 100644
--- a/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+++ b/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
@@ -1,7 +1,7 @@
-From 90de407f12e8ed9cb361678882c2af236b06107e Mon Sep 17 00:00:00 2001
+From f76db6fc04fadf872a138740592b4e8ec9ba9149 Mon Sep 17 00:00:00 2001
 From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
 Date: Mon, 16 Sep 2019 04:53:20 +0200
-Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged
+Subject: [PATCH 1/6] ZEN: Add sysctl and CONFIG to disallow unprivileged
  CLONE_NEWUSER
 
 Our default behavior continues to match the vanilla kernel.
@@ -14,10 +14,10 @@ Our default behavior continues to match the vanilla kernel.
  5 files changed, 53 insertions(+)
 
 diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index bfa6463f8a95..27aa2bd5e50a 100644
+index eb70cabe6e7f..dda54e3bc47c 100644
 --- a/include/linux/user_namespace.h
 +++ b/include/linux/user_namespace.h
-@@ -116,6 +116,8 @@ void put_ucounts(struct ucounts *ucounts);
+@@ -137,6 +137,8 @@ static inline void set_rlimit_ucount_max(struct user_namespace *ns,
  
  #ifdef CONFIG_USER_NS
  
@@ -26,7 +26,7 @@ index bfa6463f8a95..27aa2bd5e50a 100644
  static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
  {
  	if (ns)
-@@ -149,6 +151,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
+@@ -170,6 +172,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
  struct ns_common *ns_get_owner(struct ns_common *ns);
  #else
  
@@ -36,10 +36,10 @@ index bfa6463f8a95..27aa2bd5e50a 100644
  {
  	return &init_user_ns;
 diff --git a/init/Kconfig b/init/Kconfig
-index a61c92066c2e..6a2920f2e2ad 100644
+index 55f9f7738ebb..33c6a820ac08 100644
 --- a/init/Kconfig
 +++ b/init/Kconfig
-@@ -1195,6 +1195,22 @@ config USER_NS
+@@ -1198,6 +1198,22 @@ config USER_NS
  
  	  If unsure, say N.
  
@@ -63,7 +63,7 @@ index a61c92066c2e..6a2920f2e2ad 100644
  	bool "PID Namespaces"
  	default y
 diff --git a/kernel/fork.c b/kernel/fork.c
-index 567fee340500..f8ad32116152 100644
+index cbba21e3a58d..7267d46c29ea 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -98,6 +98,10 @@
@@ -77,7 +77,7 @@ index 567fee340500..f8ad32116152 100644
  #include <asm/pgalloc.h>
  #include <linux/uaccess.h>
  #include <asm/mmu_context.h>
-@@ -1871,6 +1875,10 @@ static __latent_entropy struct task_struct *copy_process(
+@@ -1877,6 +1881,10 @@ static __latent_entropy struct task_struct *copy_process(
  	if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
  		return ERR_PTR(-EINVAL);
  
@@ -88,7 +88,7 @@ index 567fee340500..f8ad32116152 100644
  	/*
  	 * Thread groups must share signals as well, and detached threads
  	 * can only be started up within the thread group.
-@@ -2973,6 +2981,12 @@ int ksys_unshare(unsigned long unshare_flags)
+@@ -2981,6 +2989,12 @@ int ksys_unshare(unsigned long unshare_flags)
  	if (unshare_flags & CLONE_NEWNS)
  		unshare_flags |= CLONE_FS;
  
@@ -102,10 +102,10 @@ index 567fee340500..f8ad32116152 100644
  	if (err)
  		goto bad_unshare_out;
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index d4a78e08f6d8..0260dfe2daff 100644
+index 272f4a272f8c..760e8a2d815d 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -103,6 +103,9 @@
+@@ -105,6 +105,9 @@
  #ifdef CONFIG_LOCKUP_DETECTOR
  #include <linux/nmi.h>
  #endif
@@ -115,7 +115,7 @@ index d4a78e08f6d8..0260dfe2daff 100644
  
  #if defined(CONFIG_SYSCTL)
  
-@@ -1896,6 +1899,15 @@ static struct ctl_table kern_table[] = {
+@@ -1908,6 +1911,15 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= proc_dointvec,
  	},
  #endif
@@ -132,7 +132,7 @@ index d4a78e08f6d8..0260dfe2daff 100644
  	{
  		.procname	= "tainted",
 diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 27670ab7a4ed..300c72d2a381 100644
+index ef82d401dde8..5a6c2e07174b 100644
 --- a/kernel/user_namespace.c
 +++ b/kernel/user_namespace.c
 @@ -21,6 +21,13 @@
@@ -150,5 +150,5 @@ index 27670ab7a4ed..300c72d2a381 100644
  static DEFINE_MUTEX(userns_state_mutex);
  
 -- 
-2.32.0
+2.33.0
 
diff --git a/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch b/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
new file mode 100644
index 0000000..09a894e
--- /dev/null
+++ b/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
@@ -0,0 +1,79 @@
+From 810821eb3b1894f2cfcc29cffd42d193b8fe54a6 Mon Sep 17 00:00:00 2001
+From: Wai Paulo Valerio Wang <waicool20@gmail.com>
+Date: Thu, 8 Jul 2021 04:00:59 +0800
+Subject: [PATCH 2/6] Bluetooth: btusb: Add support for IMC Networks Mediatek
+ Chip
+
+This add supports for IMC Networks Wireless_Device Media Chip
+which contains the MT7921 chipset.
+
+$ lsusb
+
+Bus 001 Device 004: ID 13d3:3563 IMC Networks Wireless_Device
+
+$ cat /sys/kernel/debug/usb/devices
+
+T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
+D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=13d3 ProdID=3563 Rev= 1.00
+S:  Manufacturer=MediaTek Inc.
+S:  Product=Wireless_Device
+S:  SerialNumber=000000000
+C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
+A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
+E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
+I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
+
+Signed-off-by: Wai Paulo Valerio Wang <waicool20@gmail.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+For: https://bugs.archlinux.org/task/72138
+---
+ drivers/bluetooth/btusb.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index bd37d6fb88c2..e13a510e1698 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -414,6 +414,9 @@ static const struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK |
+ 						     BTUSB_WIDEBAND_SPEECH |
+ 						     BTUSB_VALID_LE_STATES },
++	{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
++						     BTUSB_WIDEBAND_SPEECH |
++						     BTUSB_VALID_LE_STATES },
+ 
+ 	/* Additional Realtek 8723AE Bluetooth devices */
+ 	{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
+-- 
+2.33.0
+
diff --git a/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch b/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
deleted file mode 100644
index 574623c..0000000
--- a/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From bdb12383a58d6989a0b1c2f925890948146bbc90 Mon Sep 17 00:00:00 2001
-From: Pauli Virtanen <pav@iki.fi>
-Date: Mon, 26 Jul 2021 21:02:06 +0300
-Subject: [PATCH 2/2] Bluetooth: btusb: check conditions before enabling USB
- ALT 3 for WBS
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some USB BT adapters don't satisfy the MTU requirement mentioned in
-commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS")
-and have ALT 3 setting that produces no/garbled audio. Some adapters
-with larger MTU were also reported to have problems with ALT 3.
-
-Add a flag and check it and MTU before selecting ALT 3, falling back to
-ALT 1. Enable the flag for Realtek, restoring the previous behavior for
-non-Realtek devices.
-
-Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1
-works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3
-works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling
-ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad
-audio) Intel 8087:0a2b.
-
-Signed-off-by: Pauli Virtanen <pav@iki.fi>
-Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS")
-Tested-by: Michał Kępień <kernel@kempniu.pl>
-
-Fixes: https://bugs.archlinux.org/task/71567
----
- drivers/bluetooth/btusb.c | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index 6d23308119d1..e8062d0b7d4d 100644
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -516,6 +516,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
- #define BTUSB_HW_RESET_ACTIVE	12
- #define BTUSB_TX_WAIT_VND_EVT	13
- #define BTUSB_WAKEUP_DISABLE	14
-+#define BTUSB_USE_ALT3_FOR_WBS	15
- 
- struct btusb_data {
- 	struct hci_dev       *hdev;
-@@ -1748,16 +1749,20 @@ static void btusb_work(struct work_struct *work)
- 			/* Bluetooth USB spec recommends alt 6 (63 bytes), but
- 			 * many adapters do not support it.  Alt 1 appears to
- 			 * work for all adapters that do not have alt 6, and
--			 * which work with WBS at all.
-+			 * which work with WBS at all.  Some devices prefer
-+			 * alt 3 (HCI payload >= 60 Bytes let air packet
-+			 * data satisfy 60 bytes), requiring
-+			 * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72
-+			 * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1.
- 			 */
--			new_alts = btusb_find_altsetting(data, 6) ? 6 : 1;
--			/* Because mSBC frames do not need to be aligned to the
--			 * SCO packet boundary. If support the Alt 3, use the
--			 * Alt 3 for HCI payload >= 60 Bytes let air packet
--			 * data satisfy 60 bytes.
--			 */
--			if (new_alts == 1 && btusb_find_altsetting(data, 3))
-+			if (btusb_find_altsetting(data, 6))
-+				new_alts = 6;
-+			else if (test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags) &&
-+					hdev->sco_mtu >= 72 &&
-+					btusb_find_altsetting(data, 3))
- 				new_alts = 3;
-+			else
-+				new_alts = 1;
- 		}
- 
- 		if (btusb_switch_alt_setting(hdev, new_alts) < 0)
-@@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf,
- 		 * (DEVICE_REMOTE_WAKEUP)
- 		 */
- 		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
-+		set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags);
- 	}
- 
- 	if (!reset)
--- 
-2.32.0
-
diff --git a/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch b/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
new file mode 100644
index 0000000..4af5a53
--- /dev/null
+++ b/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
@@ -0,0 +1,71 @@
+From 38c2ca84b97f9d6021c2607e214f99acd84dac2d Mon Sep 17 00:00:00 2001
+From: Aaron Ma <aaron.ma@canonical.com>
+Date: Fri, 23 Jul 2021 01:17:18 +0800
+Subject: [PATCH 3/6] Bluetooth: btusb: Add support for Foxconn Mediatek Chip
+
+Add support for another Foxconn / Hon Hai device with MT7921 chip.
+
+T:  Bus=05 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#=  3 Spd=480  MxCh= 0
+D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0489 ProdID=e0cd Rev= 1.00
+S:  Manufacturer=MediaTek Inc.
+S:  Product=Wireless_Device
+S:  SerialNumber=000000000
+C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
+A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
+E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
+I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
+
+Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+For: https://bugs.archlinux.org/task/72138
+---
+ drivers/bluetooth/btusb.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index e13a510e1698..aac732cc9612 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -417,6 +417,9 @@ static const struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
+ 						     BTUSB_WIDEBAND_SPEECH |
+ 						     BTUSB_VALID_LE_STATES },
++	{ USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK |
++						     BTUSB_WIDEBAND_SPEECH |
++						     BTUSB_VALID_LE_STATES },
+ 
+ 	/* Additional Realtek 8723AE Bluetooth devices */
+ 	{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
+-- 
+2.33.0
+
diff --git a/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch b/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
new file mode 100644
index 0000000..64b8717
--- /dev/null
+++ b/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
@@ -0,0 +1,64 @@
+From ab60c2d0242fc428a436c25c1144f6acd9d6f419 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:27 +0200
+Subject: [PATCH 4/6] ALSA: pcm: Check mmap capability of runtime dma buffer at
+ first
+
+Currently we check only the substream->dma_buffer as the preset of the
+buffer configuration for verifying the availability of mmap.  But a
+few drivers rather set up the buffer in the own way without the
+standard buffer preallocation using substream->dma_buffer, and they
+miss the proper checks.  (Now it's working more or less fine as most
+of them are running only on x86).
+
+Actually, they may set up the runtime dma_buffer (referred via
+snd_pcm_get_dma_buf()) at the open callback, though.  That is, this
+could have been used as the primary source.
+
+This patch changes the hw_support_mmap() function to check the runtime
+dma buffer at first.  It's usually NULL with the standard buffer
+preallocation, and in that case, we continue checking
+substream->dma_buffer as fallback.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/core/pcm_native.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
+index 71323d807dbf..dc9fa312fadd 100644
+--- a/sound/core/pcm_native.c
++++ b/sound/core/pcm_native.c
+@@ -243,13 +243,18 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream,
+ 
+ static bool hw_support_mmap(struct snd_pcm_substream *substream)
+ {
++	struct snd_dma_buffer *dmabuf;
++
+ 	if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP))
+ 		return false;
+ 
+ 	if (substream->ops->mmap || substream->ops->page)
+ 		return true;
+ 
+-	switch (substream->dma_buffer.dev.type) {
++	dmabuf = snd_pcm_get_dma_buf(substream);
++	if (!dmabuf)
++		dmabuf = &substream->dma_buffer;
++	switch (dmabuf->dev.type) {
+ 	case SNDRV_DMA_TYPE_UNKNOWN:
+ 		/* we can't know the device, so just assume that the driver does
+ 		 * everything right
+@@ -259,7 +264,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
+ 	case SNDRV_DMA_TYPE_VMALLOC:
+ 		return true;
+ 	default:
+-		return dma_can_mmap(substream->dma_buffer.dev.dev);
++		return dma_can_mmap(dmabuf->dev.dev);
+ 	}
+ }
+ 
+-- 
+2.33.0
+
diff --git a/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch b/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
new file mode 100644
index 0000000..f1d7db9
--- /dev/null
+++ b/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
@@ -0,0 +1,75 @@
+From 7b0c23ec626e579ffa7ef239cac20dc7fa1797e9 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:28 +0200
+Subject: [PATCH 5/6] ALSA: pci: rme: Set up buffer type properly
+
+Although the regression of the mmap was fixed in the recent commit
+dc0dc8a73e8e ("ALSA: pcm: Fix mmap breakage without explicit buffer
+setup"), RME9652 and HDSP drivers have still potential issues with
+their mmap handling.  Namely, they use the default mmap handler
+without the standard buffer preallocation, and PCM core wouldn't use
+the coherent DMA mapping.  It's practically OK on x86, but on some
+exotic architectures, it wouldn't work.
+
+This patch addresses the potential breakage by replacing the buffer
+setup with the proper macro.  It also simplifies the source code,
+too.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/pci/rme9652/hdsp.c    | 6 ++----
+ sound/pci/rme9652/rme9652.c | 6 ++----
+ 2 files changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
+index 8457a4bbc3df..22b8b3357918 100644
+--- a/sound/pci/rme9652/hdsp.c
++++ b/sound/pci/rme9652/hdsp.c
+@@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+         runtime->hw = snd_hdsp_playback_subinfo;
+-	runtime->dma_area = hdsp->playback_buffer;
+-	runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf);
+ 
+ 	hdsp->playback_pid = current->pid;
+ 	hdsp->playback_substream = substream;
+@@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+ 	runtime->hw = snd_hdsp_capture_subinfo;
+-	runtime->dma_area = hdsp->capture_buffer;
+-	runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf);
+ 
+ 	hdsp->capture_pid = current->pid;
+ 	hdsp->capture_substream = substream;
+diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
+index f1aad38760d6..9ad2533925c4 100644
+--- a/sound/pci/rme9652/rme9652.c
++++ b/sound/pci/rme9652/rme9652.c
+@@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+         runtime->hw = snd_rme9652_playback_subinfo;
+-	runtime->dma_area = rme9652->playback_buffer;
+-	runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &rme9652->playback_dma_buf);
+ 
+ 	if (rme9652->capture_substream == NULL) {
+ 		rme9652_stop(rme9652);
+@@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+ 	runtime->hw = snd_rme9652_capture_subinfo;
+-	runtime->dma_area = rme9652->capture_buffer;
+-	runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &rme9652->capture_dma_buf);
+ 
+ 	if (rme9652->playback_substream == NULL) {
+ 		rme9652_stop(rme9652);
+-- 
+2.33.0
+
diff --git a/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch b/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
new file mode 100644
index 0000000..0305e70
--- /dev/null
+++ b/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
@@ -0,0 +1,95 @@
+From b5ed7b38f5551c5dfca87ab29d679f3d6d327557 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:29 +0200
+Subject: [PATCH 6/6] ALSA: pci: cs46xx: Fix set up buffer type properly
+
+CS46xx driver switches the buffer depending on the number of periods,
+and in some cases it switches to the own buffer without updating the
+buffer type properly.  This may cause a problem with the mmap on
+exotic architectures that require the own mmap call for the coherent
+DMA buffer.
+
+This patch addresses the potential breakage by replacing the buffer
+setup with the proper macro.  It also simplifies the source code,
+too.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/pci/cs46xx/cs46xx_lib.c | 30 ++++++++----------------------
+ 1 file changed, 8 insertions(+), 22 deletions(-)
+
+diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
+index 1e1eb17f8e07..d43927dcd61e 100644
+--- a/sound/pci/cs46xx/cs46xx_lib.c
++++ b/sound/pci/cs46xx/cs46xx_lib.c
+@@ -1121,9 +1121,7 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream,
+ 	if (params_periods(hw_params) == CS46XX_FRAGS) {
+ 		if (runtime->dma_area != cpcm->hw_buf.area)
+ 			snd_pcm_lib_free_pages(substream);
+-		runtime->dma_area = cpcm->hw_buf.area;
+-		runtime->dma_addr = cpcm->hw_buf.addr;
+-		runtime->dma_bytes = cpcm->hw_buf.bytes;
++		snd_pcm_set_runtime_buffer(substream, &cpcm->hw_buf);
+ 
+ 
+ #ifdef CONFIG_SND_CS46XX_NEW_DSP
+@@ -1143,11 +1141,8 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream,
+ #endif
+ 
+ 	} else {
+-		if (runtime->dma_area == cpcm->hw_buf.area) {
+-			runtime->dma_area = NULL;
+-			runtime->dma_addr = 0;
+-			runtime->dma_bytes = 0;
+-		}
++		if (runtime->dma_area == cpcm->hw_buf.area)
++			snd_pcm_set_runtime_buffer(substream, NULL);
+ 		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+ 		if (err < 0) {
+ #ifdef CONFIG_SND_CS46XX_NEW_DSP
+@@ -1196,9 +1191,7 @@ static int snd_cs46xx_playback_hw_free(struct snd_pcm_substream *substream)
+ 	if (runtime->dma_area != cpcm->hw_buf.area)
+ 		snd_pcm_lib_free_pages(substream);
+     
+-	runtime->dma_area = NULL;
+-	runtime->dma_addr = 0;
+-	runtime->dma_bytes = 0;
++	snd_pcm_set_runtime_buffer(substream, NULL);
+ 
+ 	return 0;
+ }
+@@ -1287,16 +1280,11 @@ static int snd_cs46xx_capture_hw_params(struct snd_pcm_substream *substream,
+ 	if (runtime->periods == CS46XX_FRAGS) {
+ 		if (runtime->dma_area != chip->capt.hw_buf.area)
+ 			snd_pcm_lib_free_pages(substream);
+-		runtime->dma_area = chip->capt.hw_buf.area;
+-		runtime->dma_addr = chip->capt.hw_buf.addr;
+-		runtime->dma_bytes = chip->capt.hw_buf.bytes;
++		snd_pcm_set_runtime_buffer(substream, &chip->capt.hw_buf);
+ 		substream->ops = &snd_cs46xx_capture_ops;
+ 	} else {
+-		if (runtime->dma_area == chip->capt.hw_buf.area) {
+-			runtime->dma_area = NULL;
+-			runtime->dma_addr = 0;
+-			runtime->dma_bytes = 0;
+-		}
++		if (runtime->dma_area == chip->capt.hw_buf.area)
++			snd_pcm_set_runtime_buffer(substream, NULL);
+ 		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+ 		if (err < 0)
+ 			return err;
+@@ -1313,9 +1301,7 @@ static int snd_cs46xx_capture_hw_free(struct snd_pcm_substream *substream)
+ 
+ 	if (runtime->dma_area != chip->capt.hw_buf.area)
+ 		snd_pcm_lib_free_pages(substream);
+-	runtime->dma_area = NULL;
+-	runtime->dma_addr = 0;
+-	runtime->dma_bytes = 0;
++	snd_pcm_set_runtime_buffer(substream, NULL);
+ 
+ 	return 0;
+ }
+-- 
+2.33.0
+
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index a1fbb70..fabfb34 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -14,7 +14,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix
 _replacesoldmodules=() # '%' gets replaced with kernel suffix
 
 pkgbase=linux-libre
-pkgver=5.13.8
+pkgver=5.14.11
 pkgrel=1
 pkgdesc='Linux-libre'
 rcnver=5.11.11
@@ -28,7 +28,7 @@ makedepends=(
 )
 makedepends_armv7h=(uboot-tools vboot-utils dtc) # required by linux-libre-chromebook
 options=('!strip')
-_srcname=linux-5.13
+_srcname=linux-5.14
 source=(
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign}
@@ -46,7 +46,11 @@ source=(
   0002-fix-Atmel-maXTouch-touchscreen-support.patch
   # Arch Linux patches
   0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
-  0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
+  0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
+  0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
+  0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
+  0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
+  0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
 )
 source_i686=(
   # avoid using zstd compression in ultra mode (exhausts virtual memory)
@@ -72,9 +76,9 @@ validpgpkeys=(
   '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
   '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
 )
-sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121'
+sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c'
             'SKIP'
-            '53a9a1abfb8ae6e73337986ed780034d5ecf4d89bf1bbf7d4c2b5b04b527b00296c7c427045c8ab454a175db1ab272c76ef115edd4b88f4f530cbd884e604bb5'
+            '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1'
             'SKIP'
             '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
             'SKIP'
@@ -82,8 +86,8 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c
             'SKIP'
             '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
             'SKIP'
-            '929fd5c34b07a63b5e50296523a6b3686ac9014a74ed5e41b0b1f0b169306ee2dace9e9259b4222c84fb1edb9a96e09bcd3d7f0e5611bef93f5c8754a67a3367'
-            'e78d10fe5d709e714dfc2e56a487de7d03e0fcaca17d48cd279659ab930f44ef903683d3f6f10b1330f59f15e80c7571f6bd3d47d75fdaed7d93999346b8af57'
+            '4e9ac0b6d4dd3a8074259e71dab9db90b44bc0231d134c4dce798fee13b15bfdda2bf0926d3a1f98e596ab633f2ba3640d92ccab5ae6defffad9dd352fd35112'
+            '6032a527651f9e8053728cec73afa50aa056264b402372899927848a287ad27291335afe00848f0d41a7adb7d662c3a26def7c5c91777bed3ed325c4ec41a035'
             '51e8b4da770067e8257d292622d865cb16ac57fdfd8967bdfb74efec197dae9eab958e5637a728640ae60885bdde41c06c8076227a4f83db0b752215f91f3a87'
             '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b'
             '167bc73c6c1c63931806238905dc44c7d87c5a5c0f6293159f2133dfe717fb44081018d810675716d1605ec7dff5e8333b87b19e09e2de21d0448e447437873b'
@@ -91,8 +95,12 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c
             '143dea30c6da00e504c99984a98a0eb2411f558fcdd9dfa7f607d6c14e9e7dffff9cb00121d9317044b07e3e210808286598c785ee854084b993ec9cb14d8232'
             '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
             'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168'
-            'fac53c8ce68e9f56c8930a9392c89377c909f6a43a318010194949def91a104f34f46c2b32457e571435a8b326c47a48737ceb6255644bb6d42c59b27b07449a'
-            '722d92b750f0a5af39b850c18ff0c57dac0165e3c0219415843ec5207945971448790fec3fca570b62c8726c89b0ca6b7a5b16fd503e4581b3a63b3adfcf2c50')
+            'dba36283b9ea3db5fcc9a72051a8e9cf4d409ec59769e6da9db4d321b72972242670210ad961a37f62aba68f7262e9f2f6308cfe62cda9fa050c72363a0c404a'
+            '693ac0e0e32cd0ab6c485deb43d6408dc9fc31234e4113206cf901a302eddf1a965f97f82ed7186f6426c085176ce95c48e116e9824d92bfd1f6656447da18dc'
+            'c4a19ccec8b7636f1b5b1cf8e135e46d3aa4d233af4a1e72c2aaa83536505013f0c83602fe05ce08212b4327bebfb4f8a84b57c0d81509f0b48df5dfcc334254'
+            '4d81c2995e7cc5fc36929eb5bf9cc68ec02cb24147f18a88da79facd3e25182b156ca4430bf2765ff1e4c6be237d3a3e527498cd49d75217a5e16b62a478be6d'
+            '12c0da7fbd4e4e6ffc473ecd6dffee1dd61c201dad854347400c8f551adc35c033d6fa623cc5c1b2fe7930cdab868a8c99c6874ee171c9143e0f370398759c96'
+            '7f6fd402d8c29ee4f6c98ed2236318ab3f57f3dd47a92911e1b556df251b67fc83f7256223f06d1fefa849a3ceb5e40d247d2d5664ddd7cd9749bab4bc1ecb36')
 sha512sums_i686=('3a346ff5e0fdefafd28bc3dd0e4b6cd68e3f0014e59d1611d99f2edb8d074fd32649eeb0894a7e340e4f907b5cfc0e08e0753e0427a68dc113bb22835a892968')
 sha512sums_armv7h=('a4aa00ca3f03d524d3fb6379116c4e4e7908e7c30f6347f55be256c44d806d8db5f04c96369d5a725e45b7390e9fde842f388cdc5d5699d80ec5d1519f7367f4'
                    'SKIP'
@@ -171,6 +179,7 @@ prepare() {
   echo "Setting config..."
   cp ../config.$CARCH .config
   make olddefconfig
+  diff -u ../config .config || :
 
   make -s kernelrelease > version
   echo "Prepared $pkgbase version $(<version)"
diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686
index aaad580..dabea36 100644
--- a/libre/linux-libre/config.i686
+++ b/libre/linux-libre/config.i686
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.13.8-gnu Kernel Configuration
+# Linux/x86 5.14.11-gnu Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -16,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -120,6 +121,7 @@ CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
 
 #
 # CPU/Task time and stats accounting
@@ -324,7 +326,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_MPPARSE=y
@@ -449,7 +450,6 @@ CONFIG_ILLEGAL_POINTER_VALUE=0
 # CONFIG_HIGHPTE is not set
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -572,6 +572,7 @@ CONFIG_XPOWER_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
 CONFIG_TPS68470_PMIC_OPREGION=y
+CONFIG_ACPI_VIOT=y
 CONFIG_X86_PM_TIMER=y
 CONFIG_X86_APM_BOOT=y
 CONFIG_APM=y
@@ -745,6 +746,7 @@ CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -789,6 +791,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_ARCH_32BIT_OFF_T=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
@@ -819,6 +822,8 @@ CONFIG_HAVE_ARCH_STACKLEAK=y
 CONFIG_HAVE_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
 CONFIG_LTO_NONE=y
 CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -839,7 +844,7 @@ CONFIG_OLD_SIGSUSPEND3=y
 CONFIG_OLD_SIGACTION=y
 CONFIG_COMPAT_32BIT_TIME=y
 CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
-# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
+CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
 CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 CONFIG_STRICT_KERNEL_RWX=y
 CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
@@ -905,9 +910,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_FC_APPID=y
 CONFIG_BLK_CGROUP_IOCOST=y
-CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_CGROUP_IOPRIO=y
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -989,7 +996,6 @@ CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_SPARSEMEM_MANUAL is not set
 CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_SPARSEMEM_STATIC=y
 CONFIG_HAVE_FAST_GUP=y
 CONFIG_MEMORY_ISOLATION=y
@@ -1040,6 +1046,7 @@ CONFIG_ZSMALLOC=y
 CONFIG_GENERIC_EARLY_IOREMAP=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ZONE_DMA=y
 CONFIG_HMM_MIRROR=y
 CONFIG_VMAP_PFN=y
 # CONFIG_PERCPU_STATS is not set
@@ -1048,6 +1055,7 @@ CONFIG_READ_ONLY_THP_FOR_FS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_KMAP_LOCAL=y
+CONFIG_SECRETMEM=y
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1189,6 +1197,7 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_HOOK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -1570,7 +1579,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 # CONFIG_BRIDGE_MRP is not set
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1764,6 +1772,7 @@ CONFIG_QRTR=m
 CONFIG_QRTR_MHI=m
 CONFIG_NET_NCSI=y
 CONFIG_NCSI_OEM_CMD_GET_MAC=y
+CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
 CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
@@ -2146,6 +2155,7 @@ CONFIG_PCI_SW_SWITCHTEC=m
 CONFIG_CXL_BUS=m
 CONFIG_CXL_MEM=m
 # CONFIG_CXL_MEM_RAW_COMMANDS is not set
+CONFIG_CXL_ACPI=m
 CONFIG_PCCARD=m
 CONFIG_PCMCIA=m
 CONFIG_PCMCIA_LOAD_CIS=y
@@ -2288,6 +2298,7 @@ CONFIG_MTD_PLATRAM=m
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_DATAFLASH is not set
 # CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
 # CONFIG_MTD_SST25L is not set
 # CONFIG_MTD_SLRAM is not set
 CONFIG_MTD_PHRAM=m
@@ -2522,9 +2533,6 @@ CONFIG_PVPANIC_MMIO=m
 CONFIG_PVPANIC_PCI=m
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2608,6 +2616,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPI3MR=m
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2661,6 +2670,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+CONFIG_SCSI_EFCT=m
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_NSP32=m
@@ -3158,6 +3168,7 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_CT=y
 CONFIG_MLX5_TC_SAMPLE=y
@@ -3174,8 +3185,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3290,6 +3299,7 @@ CONFIG_STMMAC_PLATFORM=m
 CONFIG_DWMAC_GENERIC=m
 # CONFIG_DWMAC_INTEL_PLAT is not set
 CONFIG_DWMAC_INTEL=m
+CONFIG_DWMAC_LOONGSON=m
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3356,10 +3366,12 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 # CONFIG_MICROCHIP_T1_PHY is not set
 CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
 CONFIG_NATIONAL_PHY=m
 CONFIG_NXP_C45_TJA11XX_PHY=m
 CONFIG_NXP_TJA11XX_PHY=m
@@ -3381,7 +3393,9 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
 CONFIG_OF_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -3788,7 +3802,10 @@ CONFIG_IEEE802154_HWSIM=m
 # Wireless WAN
 #
 CONFIG_WWAN=y
+CONFIG_WWAN_HWSIM=m
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_RPMSG_WWAN_CTRL=m
+CONFIG_IOSM=m
 # end of Wireless WAN
 
 CONFIG_VMXNET3=m
@@ -3949,6 +3966,7 @@ CONFIG_JOYSTICK_XPAD_LEDS=y
 CONFIG_JOYSTICK_WALKERA0701=m
 # CONFIG_JOYSTICK_PSXPAD_SPI is not set
 CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -4311,8 +4329,6 @@ CONFIG_PC8736x_GPIO=m
 CONFIG_NSC_GPIO=m
 CONFIG_DEVMEM=y
 CONFIG_NVRAM=y
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=8192
 CONFIG_DEVPORT=y
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
@@ -4336,9 +4352,11 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
 # CONFIG_XILLYBUS_OF is not set
+CONFIG_XILLYUSB=m
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -4982,6 +5000,7 @@ CONFIG_SENSORS_BEL_PFE=m
 CONFIG_SENSORS_BPA_RS600=m
 CONFIG_SENSORS_FSP_3Y=m
 CONFIG_SENSORS_IBM_CFFPS=m
+CONFIG_SENSORS_DPS920AB=m
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
 CONFIG_SENSORS_IR36021=m
@@ -5000,7 +5019,9 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_MP2888=m
 CONFIG_SENSORS_MP2975=m
+CONFIG_SENSORS_PIM4328=m
 CONFIG_SENSORS_PM6764TR=m
 CONFIG_SENSORS_PXE1610=m
 CONFIG_SENSORS_Q54SJ108A2=m
@@ -5016,6 +5037,7 @@ CONFIG_SENSORS_SBTSI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -5120,6 +5142,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5322,11 +5345,12 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+CONFIG_MFD_RT4831=m
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
 # CONFIG_MFD_RK808 is not set
 # CONFIG_MFD_RN5T618 is not set
-CONFIG_MFD_SEC_CORE=y
+# CONFIG_MFD_SEC_CORE is not set
 CONFIG_MFD_SI476X_CORE=m
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
@@ -5344,7 +5368,6 @@ CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
 # CONFIG_MFD_TPS65217 is not set
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 # CONFIG_MFD_TI_LP87565 is not set
 # CONFIG_MFD_TPS65218 is not set
@@ -5364,7 +5387,7 @@ CONFIG_MFD_LM3533=m
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
 # CONFIG_MFD_LOCHNAGAR is not set
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5388,6 +5411,7 @@ CONFIG_MFD_WM8994=m
 CONFIG_MFD_WCD934X=m
 CONFIG_MFD_ATC260X=m
 CONFIG_MFD_ATC260X_I2C=m
+# CONFIG_MFD_QCOM_PM8008 is not set
 CONFIG_RAVE_SP_CORE=m
 CONFIG_MFD_INTEL_M10_BMC=m
 # end of Multifunction device drivers
@@ -5437,6 +5461,7 @@ CONFIG_REGULATOR_MAX14577=m
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+CONFIG_REGULATOR_MAX8893=m
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5456,6 +5481,7 @@ CONFIG_REGULATOR_MP8859=m
 CONFIG_REGULATOR_MT6311=m
 CONFIG_REGULATOR_MT6323=m
 # CONFIG_REGULATOR_MT6358 is not set
+CONFIG_REGULATOR_MT6359=m
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PCA9450=m
@@ -5470,11 +5496,11 @@ CONFIG_REGULATOR_PWM=m
 CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
+CONFIG_REGULATOR_RT6160=m
+CONFIG_REGULATOR_RT6245=m
 CONFIG_REGULATOR_RTMV20=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 # CONFIG_REGULATOR_SY8106A is not set
@@ -5585,6 +5611,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5619,7 +5646,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 #
 # Drivers filtered as selected at 'Filter media drivers'
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5790,7 +5816,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5827,14 +5852,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -5882,6 +5903,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -5981,6 +6003,7 @@ CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_APTINA_PLL=m
 CONFIG_VIDEO_CCS_PLL=m
 CONFIG_VIDEO_HI556=m
+CONFIG_VIDEO_IMX208=m
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -6169,7 +6192,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6298,7 +6320,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -6456,10 +6477,12 @@ CONFIG_DRM_PANEL_BRIDGE=y
 # CONFIG_DRM_CDNS_DSI is not set
 # CONFIG_DRM_CHIPONE_ICN6211 is not set
 # CONFIG_DRM_CHRONTEL_CH7033 is not set
+# CONFIG_DRM_CROS_EC_ANX7688 is not set
 # CONFIG_DRM_DISPLAY_CONNECTOR is not set
 # CONFIG_DRM_LONTIUM_LT8912B is not set
 # CONFIG_DRM_LONTIUM_LT9611 is not set
 # CONFIG_DRM_LONTIUM_LT9611UXC is not set
+# CONFIG_DRM_ITE_IT66121 is not set
 # CONFIG_DRM_LVDS_CODEC is not set
 # CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
 # CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -6477,6 +6500,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
 # CONFIG_DRM_TOSHIBA_TC358768 is not set
 # CONFIG_DRM_TOSHIBA_TC358775 is not set
 # CONFIG_DRM_TI_TFP410 is not set
+# CONFIG_DRM_TI_SN65DSI83 is not set
 # CONFIG_DRM_TI_SN65DSI86 is not set
 # CONFIG_DRM_TI_TPD12S015 is not set
 # CONFIG_DRM_ANALOGIX_ANX6345 is not set
@@ -6492,6 +6516,7 @@ CONFIG_DRM_ANALOGIX_DP=m
 # CONFIG_DRM_ARCPGU is not set
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+CONFIG_DRM_SIMPLEDRM=m
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6502,6 +6527,7 @@ CONFIG_TINYDRM_ST7586=m
 CONFIG_TINYDRM_ST7735R=m
 CONFIG_DRM_VBOXVIDEO=m
 CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
 
@@ -6577,7 +6603,7 @@ CONFIG_FB_UDL=m
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
-CONFIG_FB_HYPERV=m
+# CONFIG_FB_HYPERV is not set
 CONFIG_FB_SIMPLE=y
 # CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
@@ -6608,6 +6634,7 @@ CONFIG_BACKLIGHT_DA9052=m
 CONFIG_BACKLIGHT_MAX8925=m
 CONFIG_BACKLIGHT_APPLE=m
 CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_RT4831=m
 CONFIG_BACKLIGHT_SAHARA=m
 CONFIG_BACKLIGHT_WM831X=m
 CONFIG_BACKLIGHT_ADP5520=m
@@ -6866,7 +6893,7 @@ CONFIG_SND_HDA_PREALLOC_SIZE=0
 CONFIG_SND_INTEL_NHLT=y
 CONFIG_SND_INTEL_DSP_CONFIG=m
 CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
-CONFIG_SND_INTEL_BYT_PREFER_SOF=y
+# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -6968,6 +6995,8 @@ CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m
 CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
 CONFIG_SND_SOC_INTEL_MACH=y
 CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
+CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m
 CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
@@ -7000,6 +7029,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
 CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
@@ -7202,6 +7232,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 CONFIG_SND_SOC_SIMPLE_MUX=m
 CONFIG_SND_SOC_SPDIF=m
 # CONFIG_SND_SOC_SSM2305 is not set
+CONFIG_SND_SOC_SSM2518=m
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -7219,6 +7250,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -7235,7 +7267,10 @@ CONFIG_SND_SOC_TSCS42XX=m
 # CONFIG_SND_SOC_TSCS454 is not set
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
@@ -7263,7 +7298,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 # CONFIG_SND_SOC_ZL38060 is not set
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 # CONFIG_SND_SOC_MT6351 is not set
 CONFIG_SND_SOC_MT6358=m
@@ -7968,7 +8002,7 @@ CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
-# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
@@ -8065,7 +8099,7 @@ CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
 CONFIG_INFINIBAND_MTHCA=m
 CONFIG_INFINIBAND_MTHCA_DEBUG=y
 CONFIG_INFINIBAND_CXGB4=m
-CONFIG_INFINIBAND_I40IW=m
+CONFIG_INFINIBAND_IRDMA=m
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -8172,7 +8206,6 @@ CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3028=m
 CONFIG_RTC_DRV_RV3032=m
 CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
 CONFIG_RTC_DRV_SD3078=m
 
 #
@@ -8342,7 +8375,6 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
@@ -8469,6 +8501,11 @@ CONFIG_STAGING_MEDIA=y
 # CONFIG_INTEL_ATOMISP is not set
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -8482,6 +8519,7 @@ CONFIG_FWTTY_MAX_TOTAL_PORTS=64
 CONFIG_FWTTY_MAX_CARD_PORTS=32
 CONFIG_GS_FPGABOOT=m
 CONFIG_UNISYSSPAR=y
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
 # CONFIG_FB_TFT is not set
 CONFIG_MOST_COMPONENTS=m
 CONFIG_MOST_NET=m
@@ -8493,11 +8531,6 @@ CONFIG_PI433=m
 # CONFIG_XIL_AXIS_FIFO is not set
 CONFIG_FIELDBUS_DEV=m
 # CONFIG_HMS_ANYBUSS_BUS is not set
-CONFIG_KPC2000=y
-CONFIG_KPC2000_CORE=m
-CONFIG_KPC2000_SPI=m
-CONFIG_KPC2000_I2C=m
-CONFIG_KPC2000_DMA=m
 CONFIG_QLGE=m
 CONFIG_WFX=m
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -8533,6 +8566,7 @@ CONFIG_DELL_SMBIOS_WMI=y
 CONFIG_DELL_SMBIOS_SMM=y
 CONFIG_DELL_SMO8800=m
 CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_WMI_DESCRIPTOR=m
 CONFIG_DELL_WMI_LED=m
@@ -8542,7 +8576,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+CONFIG_WIRELESS_HOTKEY=m
 CONFIG_HP_WMI=m
 CONFIG_TC1100_WMI=m
 CONFIG_IBM_RTL=m
@@ -8555,9 +8589,12 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_THINKPAD_LMI=m
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
+CONFIG_INTEL_CHT_INT33FE=m
+CONFIG_INTEL_SKL_INT3472=m
 CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_ATOMISP2_PM=m
-CONFIG_INTEL_CHT_INT33FE=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8585,6 +8622,7 @@ CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_MLX_PLATFORM=m
 CONFIG_TOUCHSCREEN_DMI=y
+CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
@@ -8641,10 +8679,18 @@ CONFIG_SURFACE_AGGREGATOR=m
 CONFIG_SURFACE_AGGREGATOR_BUS=y
 # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+CONFIG_LMK04832=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_SI5341=m
 CONFIG_COMMON_CLK_SI5351=m
@@ -8654,7 +8700,6 @@ CONFIG_COMMON_CLK_SI544=m
 CONFIG_COMMON_CLK_CDCE706=m
 # CONFIG_COMMON_CLK_CDCE925 is not set
 CONFIG_COMMON_CLK_CS2000_CP=m
-CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 # CONFIG_COMMON_CLK_AXI_CLKGEN is not set
 CONFIG_COMMON_CLK_PALMAS=m
@@ -8700,6 +8745,7 @@ CONFIG_INTEL_IOMMU=y
 CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
 CONFIG_HYPERV_IOMMU=y
+CONFIG_VIRTIO_IOMMU=m
 
 #
 # Remoteproc drivers
@@ -8850,6 +8896,9 @@ CONFIG_DA311=m
 # CONFIG_DMARD06 is not set
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+CONFIG_FXLS8962AF=m
+CONFIG_FXLS8962AF_I2C=m
+CONFIG_FXLS8962AF_SPI=m
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -8871,6 +8920,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+CONFIG_SCA3300=m
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -8942,6 +8992,7 @@ CONFIG_TI_ADS7950=m
 CONFIG_TI_ADS131E08=m
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+CONFIG_TI_TSC2046=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 # CONFIG_VF610_ADC is not set
@@ -8984,6 +9035,8 @@ CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
 CONFIG_SPS30=m
+CONFIG_SPS30_I2C=m
+CONFIG_SPS30_SERIAL=m
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -9158,6 +9211,9 @@ CONFIG_INV_MPU6050_SPI=m
 CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
+CONFIG_IIO_ST_LSM9DS0=m
+CONFIG_IIO_ST_LSM9DS0_I2C=m
+CONFIG_IIO_ST_LSM9DS0_SPI=m
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -9210,6 +9266,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+CONFIG_TSL2591=m
 # CONFIG_TSL2772 is not set
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -9367,6 +9424,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+CONFIG_TMP117=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -9420,6 +9478,7 @@ CONFIG_RESET_TI_SYSCON=m
 #
 CONFIG_GENERIC_PHY=y
 CONFIG_USB_LGM_PHY=m
+CONFIG_PHY_CAN_TRANSCEIVER=m
 CONFIG_BCM_KONA_USB2_PHY=m
 # CONFIG_PHY_CADENCE_TORRENT is not set
 # CONFIG_PHY_CADENCE_DPHY is not set
@@ -9545,6 +9604,7 @@ CONFIG_COUNTER=m
 CONFIG_INTERRUPT_CNT=m
 # CONFIG_FTM_QUADDEC is not set
 # CONFIG_MICROCHIP_TCB_CAPTURE is not set
+CONFIG_INTEL_QEP=m
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
@@ -10394,7 +10454,6 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
@@ -10409,6 +10468,7 @@ CONFIG_ASN1_ENCODER=m
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+CONFIG_STACKTRACE_BUILD_ID=y
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=1
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -10502,7 +10562,7 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
 CONFIG_KFENCE_STATIC_KEYS=y
-CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_KFENCE_SAMPLE_INTERVAL=100
 CONFIG_KFENCE_NUM_OBJECTS=255
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
@@ -10587,7 +10647,6 @@ CONFIG_DEBUG_LIST=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10626,6 +10685,8 @@ CONFIG_STACK_TRACER=y
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+CONFIG_OSNOISE_TRACER=y
+CONFIG_TIMERLAT_TRACER=y
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -10701,7 +10762,6 @@ CONFIG_FUNCTION_ERROR_INJECTION=y
 CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_MIN_HEAP is not set
 # CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
@@ -10714,10 +10774,12 @@ CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 # CONFIG_TEST_STRSCPY is not set
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 # CONFIG_TEST_XARRAY is not set
@@ -10744,6 +10806,7 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_MEMINIT is not set
 # CONFIG_TEST_FREE_PAGES is not set
 # CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set
diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64
index 8affd87..7b045ec 100644
--- a/libre/linux-libre/config.x86_64
+++ b/libre/linux-libre/config.x86_64
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.13.8-gnu Kernel Configuration
+# Linux/x86 5.14.11-gnu Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -16,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -127,6 +128,7 @@ CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
 
 #
 # CPU/Task time and stats accounting
@@ -330,7 +332,6 @@ CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
-CONFIG_ZONE_DMA32=y
 CONFIG_AUDIT_ARCH=y
 CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_64_SMP=y
@@ -343,7 +344,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_X2APIC=y
@@ -463,7 +463,6 @@ CONFIG_X86_PMEM_LEGACY_DEVICE=y
 CONFIG_X86_PMEM_LEGACY=m
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -611,7 +610,9 @@ CONFIG_BXT_WC_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
 CONFIG_TPS68470_PMIC_OPREGION=y
+CONFIG_ACPI_VIOT=y
 CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_PRMT=y
 
 #
 # CPU Frequency scaling
@@ -757,6 +758,7 @@ CONFIG_KVM_COMPAT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -803,6 +805,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_RSEQ=y
@@ -868,7 +871,7 @@ CONFIG_COMPAT_32BIT_TIME=y
 CONFIG_HAVE_ARCH_VMAP_STACK=y
 CONFIG_VMAP_STACK=y
 CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
-# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
+CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
 CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 CONFIG_STRICT_KERNEL_RWX=y
 CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
@@ -935,9 +938,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_FC_APPID=y
 CONFIG_BLK_CGROUP_IOCOST=y
-CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_CGROUP_IOPRIO=y
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -1021,7 +1026,6 @@ CONFIG_COREDUMP=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
-CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPARSEMEM_VMEMMAP=y
@@ -1090,6 +1094,8 @@ CONFIG_GENERIC_EARLY_IOREMAP=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_PTE_DEVMAP=y
+CONFIG_ZONE_DMA=y
+CONFIG_ZONE_DMA32=y
 CONFIG_ZONE_DEVICE=y
 CONFIG_DEV_PAGEMAP_OPS=y
 CONFIG_HMM_MIRROR=y
@@ -1102,6 +1108,7 @@ CONFIG_ARCH_HAS_PKEYS=y
 CONFIG_READ_ONLY_THP_FOR_FS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
+CONFIG_SECRETMEM=y
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1246,6 +1253,7 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_HOOK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -1628,7 +1636,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1820,6 +1827,7 @@ CONFIG_QRTR_TUN=m
 CONFIG_QRTR_MHI=m
 CONFIG_NET_NCSI=y
 CONFIG_NCSI_OEM_CMD_GET_MAC=y
+CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
 CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
@@ -2193,6 +2201,8 @@ CONFIG_PCI_SW_SWITCHTEC=m
 CONFIG_CXL_BUS=m
 CONFIG_CXL_MEM=m
 # CONFIG_CXL_MEM_RAW_COMMANDS is not set
+CONFIG_CXL_ACPI=m
+CONFIG_CXL_PMEM=m
 CONFIG_PCCARD=m
 CONFIG_PCMCIA=m
 CONFIG_PCMCIA_LOAD_CIS=y
@@ -2331,6 +2341,7 @@ CONFIG_MTD_PLATRAM=m
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_DATAFLASH is not set
 # CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
 # CONFIG_MTD_SST25L is not set
 # CONFIG_MTD_SLRAM is not set
 CONFIG_MTD_PHRAM=m
@@ -2554,9 +2565,6 @@ CONFIG_PVPANIC_MMIO=m
 CONFIG_PVPANIC_PCI=m
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2638,6 +2646,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPI3MR=m
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2690,6 +2699,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+CONFIG_SCSI_EFCT=m
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_WD719X=m
@@ -3177,6 +3187,7 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_CT=y
 CONFIG_MLX5_TC_SAMPLE=y
@@ -3196,8 +3207,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3305,6 +3314,7 @@ CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=m
 CONFIG_DWMAC_GENERIC=m
 CONFIG_DWMAC_INTEL=m
+CONFIG_DWMAC_LOONGSON=m
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3371,10 +3381,12 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 CONFIG_MICROCHIP_T1_PHY=m
 CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
 CONFIG_NATIONAL_PHY=m
 CONFIG_NXP_C45_TJA11XX_PHY=m
 CONFIG_NXP_TJA11XX_PHY=m
@@ -3396,6 +3408,8 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -3798,7 +3812,10 @@ CONFIG_IEEE802154_HWSIM=m
 # Wireless WAN
 #
 CONFIG_WWAN=y
+CONFIG_WWAN_HWSIM=m
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_RPMSG_WWAN_CTRL=m
+CONFIG_IOSM=m
 # end of Wireless WAN
 
 CONFIG_XEN_NETDEV_FRONTEND=m
@@ -3954,6 +3971,7 @@ CONFIG_JOYSTICK_WALKERA0701=m
 CONFIG_JOYSTICK_PSXPAD_SPI=m
 CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
 CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -4294,8 +4312,6 @@ CONFIG_IPWIRELESS=m
 CONFIG_MWAVE=m
 CONFIG_DEVMEM=y
 CONFIG_NVRAM=y
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=8192
 CONFIG_DEVPORT=y
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
@@ -4320,8 +4336,10 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
+CONFIG_XILLYUSB=m
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -4917,6 +4935,7 @@ CONFIG_SENSORS_BEL_PFE=m
 CONFIG_SENSORS_BPA_RS600=m
 CONFIG_SENSORS_FSP_3Y=m
 CONFIG_SENSORS_IBM_CFFPS=m
+CONFIG_SENSORS_DPS920AB=m
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
 CONFIG_SENSORS_IR36021=m
@@ -4935,7 +4954,9 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_MP2888=m
 CONFIG_SENSORS_MP2975=m
+CONFIG_SENSORS_PIM4328=m
 CONFIG_SENSORS_PM6764TR=m
 CONFIG_SENSORS_PXE1610=m
 CONFIG_SENSORS_Q54SJ108A2=m
@@ -4950,6 +4971,7 @@ CONFIG_SENSORS_SBTSI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -5052,6 +5074,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5234,9 +5257,9 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+CONFIG_MFD_RT4831=m
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
 CONFIG_MFD_SI476X_CORE=m
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
@@ -5252,7 +5275,6 @@ CONFIG_TPS65010=m
 CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 CONFIG_MFD_TPS6586X=y
 CONFIG_MFD_TPS65910=y
@@ -5267,7 +5289,7 @@ CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_LM3533=m
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5329,6 +5351,7 @@ CONFIG_REGULATOR_MAX14577=m
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+CONFIG_REGULATOR_MAX8893=m
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5343,6 +5366,7 @@ CONFIG_REGULATOR_MP8859=m
 CONFIG_REGULATOR_MT6311=m
 CONFIG_REGULATOR_MT6323=m
 CONFIG_REGULATOR_MT6358=m
+CONFIG_REGULATOR_MT6359=m
 CONFIG_REGULATOR_MT6360=m
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
@@ -5356,11 +5380,11 @@ CONFIG_REGULATOR_PWM=m
 CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
+CONFIG_REGULATOR_RT6160=m
+CONFIG_REGULATOR_RT6245=m
 CONFIG_REGULATOR_RTMV20=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_TPS51632=m
@@ -5463,6 +5487,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5497,7 +5522,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 #
 # Drivers filtered as selected at 'Filter media drivers'
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5668,7 +5692,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5705,14 +5728,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -5759,6 +5778,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -5858,6 +5878,7 @@ CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_APTINA_PLL=m
 CONFIG_VIDEO_CCS_PLL=m
 CONFIG_VIDEO_HI556=m
+CONFIG_VIDEO_IMX208=m
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -6043,7 +6064,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6166,7 +6186,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -6217,6 +6236,7 @@ CONFIG_DRM_AMD_SECURE_DISPLAY=y
 # end of Display Engine Configuration
 
 CONFIG_HSA_AMD=y
+CONFIG_HSA_AMD_SVM=y
 CONFIG_DRM_NOUVEAU=m
 # CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
 CONFIG_NOUVEAU_DEBUG=5
@@ -6272,6 +6292,7 @@ CONFIG_DRM_ANALOGIX_DP=m
 # CONFIG_DRM_ETNAVIV is not set
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+CONFIG_DRM_SIMPLEDRM=m
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6284,6 +6305,7 @@ CONFIG_DRM_XEN=y
 CONFIG_DRM_XEN_FRONTEND=m
 CONFIG_DRM_VBOXVIDEO=m
 CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
 
@@ -6353,8 +6375,9 @@ CONFIG_FB_EFI=y
 CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
-CONFIG_FB_HYPERV=m
+# CONFIG_FB_HYPERV is not set
 CONFIG_FB_SIMPLE=y
+# CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
 # end of Frame buffer Devices
 
@@ -6383,6 +6406,7 @@ CONFIG_BACKLIGHT_DA9052=m
 CONFIG_BACKLIGHT_MAX8925=m
 CONFIG_BACKLIGHT_APPLE=m
 CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_RT4831=m
 CONFIG_BACKLIGHT_SAHARA=m
 CONFIG_BACKLIGHT_WM831X=m
 CONFIG_BACKLIGHT_ADP5520=m
@@ -6596,7 +6620,7 @@ CONFIG_SND_HDA_PREALLOC_SIZE=0
 CONFIG_SND_INTEL_NHLT=y
 CONFIG_SND_INTEL_DSP_CONFIG=m
 CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
-CONFIG_SND_INTEL_BYT_PREFER_SOF=y
+# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -6698,6 +6722,8 @@ CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m
 CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
 CONFIG_SND_SOC_INTEL_MACH=y
 CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
+CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m
 CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
@@ -6730,6 +6756,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
 CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
@@ -6931,6 +6958,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 CONFIG_SND_SOC_SIMPLE_MUX=m
 CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_SSM2305=m
+CONFIG_SND_SOC_SSM2518=m
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -6948,6 +6976,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -6964,7 +6993,10 @@ CONFIG_SND_SOC_TSCS42XX=m
 CONFIG_SND_SOC_TSCS454=m
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
@@ -6992,7 +7024,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 CONFIG_SND_SOC_ZL38060=m
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 CONFIG_SND_SOC_MT6351=m
 CONFIG_SND_SOC_MT6358=m
@@ -7685,6 +7716,7 @@ CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
+CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
@@ -7770,7 +7802,7 @@ CONFIG_INFINIBAND_QIB=m
 CONFIG_INFINIBAND_QIB_DCA=y
 CONFIG_INFINIBAND_CXGB4=m
 CONFIG_INFINIBAND_EFA=m
-CONFIG_INFINIBAND_I40IW=m
+CONFIG_INFINIBAND_IRDMA=m
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -7819,7 +7851,7 @@ CONFIG_EDAC_SBRIDGE=m
 CONFIG_EDAC_SKX=m
 CONFIG_EDAC_I10NM=m
 CONFIG_EDAC_PND2=m
-# CONFIG_EDAC_IGEN6 is not set
+CONFIG_EDAC_IGEN6=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_MC146818_LIB=y
 CONFIG_RTC_CLASS=y
@@ -7884,7 +7916,6 @@ CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3028=m
 CONFIG_RTC_DRV_RV3032=m
 CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
 CONFIG_RTC_DRV_SD3078=m
 
 #
@@ -8051,7 +8082,6 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
@@ -8226,6 +8256,11 @@ CONFIG_VIDEO_ATOMISP_OV5693=m
 CONFIG_VIDEO_ATOMISP_LM3554=m
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -8249,11 +8284,6 @@ CONFIG_MOST_I2C=m
 CONFIG_KS7010=m
 CONFIG_PI433=m
 CONFIG_FIELDBUS_DEV=m
-CONFIG_KPC2000=y
-CONFIG_KPC2000_CORE=m
-CONFIG_KPC2000_SPI=m
-CONFIG_KPC2000_I2C=m
-CONFIG_KPC2000_DMA=m
 CONFIG_QLGE=m
 CONFIG_WFX=m
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -8289,6 +8319,7 @@ CONFIG_DELL_SMBIOS_WMI=y
 CONFIG_DELL_SMBIOS_SMM=y
 CONFIG_DELL_SMO8800=m
 CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_WMI_DESCRIPTOR=m
 CONFIG_DELL_WMI_LED=m
@@ -8298,7 +8329,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+CONFIG_WIRELESS_HOTKEY=m
 CONFIG_HP_WMI=m
 CONFIG_IBM_RTL=m
 CONFIG_IDEAPAD_LAPTOP=m
@@ -8310,8 +8341,11 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_THINKPAD_LMI=m
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
 CONFIG_INTEL_CHT_INT33FE=m
+CONFIG_INTEL_SKL_INT3472=m
+CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8337,6 +8371,7 @@ CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_MLX_PLATFORM=m
 CONFIG_TOUCHSCREEN_DMI=y
+CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
@@ -8406,17 +8441,24 @@ CONFIG_SURFACE_AGGREGATOR=m
 CONFIG_SURFACE_AGGREGATOR_BUS=y
 # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+CONFIG_LMK04832=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_SI5341=m
 CONFIG_COMMON_CLK_SI5351=m
 CONFIG_COMMON_CLK_SI544=m
 CONFIG_COMMON_CLK_CDCE706=m
 CONFIG_COMMON_CLK_CS2000_CP=m
-CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_PWM=m
@@ -8448,6 +8490,7 @@ CONFIG_IOMMU_IO_PGTABLE=y
 # CONFIG_IOMMU_DEBUGFS is not set
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_IOMMU_DMA=y
+CONFIG_IOMMU_SVA_LIB=y
 CONFIG_AMD_IOMMU=y
 CONFIG_AMD_IOMMU_V2=y
 CONFIG_DMAR_TABLE=y
@@ -8458,6 +8501,7 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
 CONFIG_IRQ_REMAP=y
 CONFIG_HYPERV_IOMMU=y
+CONFIG_VIRTIO_IOMMU=m
 
 #
 # Remoteproc drivers
@@ -8607,6 +8651,9 @@ CONFIG_DA280=m
 CONFIG_DA311=m
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+CONFIG_FXLS8962AF=m
+CONFIG_FXLS8962AF_I2C=m
+CONFIG_FXLS8962AF_SPI=m
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -8628,6 +8675,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+CONFIG_SCA3300=m
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -8696,6 +8744,7 @@ CONFIG_TI_ADS7950=m
 CONFIG_TI_ADS131E08=m
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+CONFIG_TI_TSC2046=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VIPERBOARD_ADC=m
@@ -8736,6 +8785,8 @@ CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
 CONFIG_SPS30=m
+CONFIG_SPS30_I2C=m
+CONFIG_SPS30_SERIAL=m
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -8908,6 +8959,9 @@ CONFIG_INV_MPU6050_SPI=m
 CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
+CONFIG_IIO_ST_LSM9DS0=m
+CONFIG_IIO_ST_LSM9DS0_I2C=m
+CONFIG_IIO_ST_LSM9DS0_SPI=m
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -8959,6 +9013,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+CONFIG_TSL2591=m
 CONFIG_TSL2772=m
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -9114,6 +9169,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+CONFIG_TMP117=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -9164,6 +9220,7 @@ CONFIG_RESET_TI_SYSCON=m
 #
 CONFIG_GENERIC_PHY=y
 CONFIG_USB_LGM_PHY=m
+CONFIG_PHY_CAN_TRANSCEIVER=m
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_PXA_28NM_HSIC=m
 CONFIG_PHY_PXA_28NM_USB2=m
@@ -9290,6 +9347,7 @@ CONFIG_SLIM_QCOM_CTRL=m
 CONFIG_INTERCONNECT=y
 CONFIG_COUNTER=m
 CONFIG_INTERRUPT_CNT=m
+CONFIG_INTEL_QEP=m
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
@@ -9459,6 +9517,8 @@ CONFIG_TMPFS_XATTR=y
 CONFIG_TMPFS_INODE64=y
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON=y
 CONFIG_MEMFD_CREATE=y
 CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
 CONFIG_CONFIGFS_FS=y
@@ -10179,7 +10239,6 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
@@ -10194,6 +10253,7 @@ CONFIG_ASN1_ENCODER=m
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+CONFIG_STACKTRACE_BUILD_ID=y
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=1
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -10288,7 +10348,7 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
 CONFIG_KFENCE_STATIC_KEYS=y
-CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_KFENCE_SAMPLE_INTERVAL=100
 CONFIG_KFENCE_NUM_OBJECTS=255
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
@@ -10375,7 +10435,6 @@ CONFIG_DEBUG_LIST=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10410,12 +10469,15 @@ CONFIG_FUNCTION_GRAPH_TRACER=y
 CONFIG_DYNAMIC_FTRACE=y
 CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
 CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_STACK_TRACER=y
 # CONFIG_IRQSOFF_TRACER is not set
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+CONFIG_OSNOISE_TRACER=y
+CONFIG_TIMERLAT_TRACER=y
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -10494,7 +10556,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 # CONFIG_KCOV is not set
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_MIN_HEAP is not set
 # CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
@@ -10507,10 +10568,12 @@ CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 # CONFIG_TEST_STRSCPY is not set
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 # CONFIG_TEST_XARRAY is not set
@@ -10538,6 +10601,7 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HMM is not set
 # CONFIG_TEST_FREE_PAGES is not set
 # CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set

From c545fd91fdbb554b0d4490c5f764146fad9b14e3 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 12 2021 00:44:56 +0000
Subject: [PATCH 5/23] updpkg: libre/linux-libre-lts 5.10.72-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch b/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch
new file mode 100644
index 0000000..8e6cee0
--- /dev/null
+++ b/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch
@@ -0,0 +1,76 @@
+From 50b29ce228d0622eae2b9854c5e4b9334c540a7a Mon Sep 17 00:00:00 2001
+From: Levente Polyak <levente@leventepolyak.net>
+Date: Thu, 1 Sep 2021 22:19:19 +0200
+Subject: [PATCH] gcc-plugins: modern gcc plugin infrastructure requres c++11
+ std
+
+Bump the used std to c++11 to avoid detection failure. This fixes the
+support check on modern gcc plugin infrastructure that requires a
+minimum standard of c++11 to compile.
+
+This effectively requires GCC 4.8.1.
+
+Signed-off-by: Levente Polyak <levente@leventepolyak.net>
+---
+ scripts/gcc-plugin.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/gcc-plugin.sh b/scripts/gcc-plugin.sh
+index b79fd0bea838..7abc00f60a8b 100755
+--- a/scripts/gcc-plugin.sh
++++ b/scripts/gcc-plugin.sh
+@@ -8,7 +8,7 @@ srctree=$(dirname "$0")
+ gccplugins_dir=$($* -print-file-name=plugin)
+ 
+ # we need a c++ compiler that supports the designated initializer GNU extension
+-$HOSTCC -c -x c++ -std=gnu++98 - -fsyntax-only -I $srctree/gcc-plugins -I $gccplugins_dir/include 2>/dev/null <<EOF
++$HOSTCC -c -x c++ -std=gnu++11 - -fsyntax-only -I $srctree/gcc-plugins -I $gccplugins_dir/include 2>/dev/null <<EOF
+ #include "gcc-common.h"
+ class test {
+ public:
+-- 
+2.33.0
+
+commit 67a5a68013056cbcf0a647e36cb6f4622fb6a470
+Author: Valdis Kletnieks <valdis.kletnieks@vt.edu>
+Date:   Sat Dec 26 13:21:58 2020 -0500
+
+    gcc-plugins: fix gcc 11 indigestion with plugins...
+    
+    Fedora Rawhide has started including gcc 11,and the g++ compiler
+    throws a wobbly when it hits scripts/gcc-plugins:
+    
+      HOSTCXX scripts/gcc-plugins/latent_entropy_plugin.so
+    In file included from /usr/include/c++/11/type_traits:35,
+                     from /usr/lib/gcc/x86_64-redhat-linux/11/plugin/include/system.h:244,
+                     from /usr/lib/gcc/x86_64-redhat-linux/11/plugin/include/gcc-plugin.h:28,
+                     from scripts/gcc-plugins/gcc-common.h:7,
+                     from scripts/gcc-plugins/latent_entropy_plugin.c:78:
+    /usr/include/c++/11/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO
+     C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
+       32 | #error This file requires compiler and library support \
+    
+    In fact, it works just fine with c++11, which has been in gcc since 4.8,
+    and we now require 4.9 as a minimum.
+    
+    Signed-off-by: Valdis Kletnieks <valdis.kletnieks@vt.edu>
+    Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
+    Signed-off-by: Kees Cook <keescook@chromium.org>
+    Link: https://lore.kernel.org/r/82487.1609006918@turing-police
+
+diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile
+index d66949bfeba4..b5487cce69e8 100644
+--- a/scripts/gcc-plugins/Makefile
++++ b/scripts/gcc-plugins/Makefile
+@@ -22,9 +22,9 @@ always-y += $(GCC_PLUGIN)
+ GCC_PLUGINS_DIR = $(shell $(CC) -print-file-name=plugin)
+ 
+ plugin_cxxflags	= -Wp,-MMD,$(depfile) $(KBUILD_HOSTCXXFLAGS) -fPIC \
+-		   -I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++98 \
++		   -I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++11 \
+ 		   -fno-rtti -fno-exceptions -fasynchronous-unwind-tables \
+-		   -ggdb -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat \
++		   -ggdb -Wno-narrowing -Wno-unused-variable \
+ 		   -Wno-format-diag
+ 
+ plugin_ldflags	= -shared
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 31f8eed..55a4c7d 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -9,18 +9,16 @@
 
 # Based on linux-lts package
 
-# NOTE: Don't build htmldocs due to an error in sphinx (armv7h only)
-
 _replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix
 _replacesoldkernels=() # '%' gets replaced with kernel suffix
 _replacesoldmodules=() # '%' gets replaced with kernel suffix
 
 pkgbase=linux-libre-lts
-pkgver=5.10.56
+pkgver=5.10.72
 pkgrel=1
 pkgdesc='LTS Linux-libre'
-rcnver=5.10.56
-rcnrel=armv7-x45
+rcnver=5.10.72
+rcnrel=armv7-x53
 url='https://linux-libre.fsfla.org/'
 arch=(i686 x86_64 armv7h)
 license=(GPL2)
@@ -31,8 +29,8 @@ makedepends=(
 options=('!strip')
 _srcname=linux-5.10
 source=(
-  "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
-  "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign}
+  "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu1/linux-libre-${_srcname##*-}-gnu1.tar.xz"{,.sign}
+  "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu1/patch-${_srcname##*-}-gnu1-$pkgver-gnu1.xz"{,.sign}
   "https://repo.parabola.nu/other/linux-libre/logos/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm}{,.sig}
   config.i686 config.x86_64 config.armv7h    # the main kernel config files
   linux-armv7h.preset                        # armv7h preset file for mkinitcpio ramdisk
@@ -46,6 +44,7 @@ source=(
   0002-fix-Atmel-maXTouch-touchscreen-support.patch
   # Arch Linux patches
   0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+  0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch
 )
 source_i686=(
   # avoid using zstd compression in ultra mode (exhausts virtual memory)
@@ -59,9 +58,9 @@ validpgpkeys=(
   '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
   '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
 )
-sha512sums=('ccc52db049a66ff146d9fc84fb00e783f2d04211156233a382f87589fec7631b8fbb3e76bfd94279607b883d25f9745e6c7d2bd62b13311dc6b425002bd42ec0'
+sha512sums=('4bf48611e8a217931c2347f1aa3257da5ba210f263fb35edef43e935fd3fcab5333fc884198fe6ab180cc11ed11dd48b71dff4071b85f18830a6bf9e1c2cf97f'
             'SKIP'
-            '44f57270e8c973d03515ff8526865e5cecd7e7ae29c4c10468a2ee33b98baa20cdca07fe64910740a3b38c4a08eeb5727fb26d415cfd719403b976685d0e2b86'
+            'a25bf1a32e8dba38a910eae4d6436f2a6716807e810655f0170f8ea90d136aa353057fd8cc5d05281ca8a684efef7ef4036ac96039f8d122f62d5b1f362229c3'
             'SKIP'
             '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
             'SKIP'
@@ -70,14 +69,15 @@ sha512sums=('ccc52db049a66ff146d9fc84fb00e783f2d04211156233a382f87589fec7631b8fb
             '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
             'SKIP'
             '42e5e4913993650bb9bb22accbc1c272e8e0be4891e5bb82fb7c0f140d56bdc6f5282f353d53d49e4aa3a010d464c64001fb6d14d615c6778c10bec204435ea3'
-            'f7397cfec791ba8df9e342a850f4794acc5e69707a5c4e5f9c03b14c75f975317055a2be59ee51c3fd22bb8c534639454931bac79d9f3761453a62fc085d8801'
+            'd6e61670635d717e84c2c3caca17fcc284d23cab85768246fece85b274e8668933392fe66c2d2f0d742fe5b4fab2e799a18389b32c21c075f8c54c68ea224950'
             '6012fa7b97c15ada82f0c205ea983bebac8b672ca498e22f524d219bdd8715784b24ce7d457803e8221a945c3daff95c4e467f70a420b9c2aa95d627f2d160a9'
             '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b'
             '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
             'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168'
-            'aed7844c51ec705ef1ef5d9f1adf27939073c99d4fcc97051bed2fba1ec161fdde4c57cbe039209fb86c72918493bea55ed26189c1dda3dbea3a3a7019363818')
+            'aed7844c51ec705ef1ef5d9f1adf27939073c99d4fcc97051bed2fba1ec161fdde4c57cbe039209fb86c72918493bea55ed26189c1dda3dbea3a3a7019363818'
+            'd1db702f9e3a09288ad591361b89ec35b991e421494553e61cc3998037cb6c60627d77d7b7e41f7e7fdab90245a4ee2e4844d68ce96eeaa021dde8548f2673f7')
 sha512sums_i686=('3a346ff5e0fdefafd28bc3dd0e4b6cd68e3f0014e59d1611d99f2edb8d074fd32649eeb0894a7e340e4f907b5cfc0e08e0753e0427a68dc113bb22835a892968')
-sha512sums_armv7h=('8105ecb83dd3afa8b20f1a0846ff63ae5e6368a46e3e2f5a270d94e1ef5886b2b48eb9a8ff6ce9be2d0474abcc793c760984cd9df37b53914d0a8f68e010f20e'
+sha512sums_armv7h=('cf29c386ccfaa33a14bb9028bbc8d783b2e872b420e96174e6040faf93d0a1d73d4df75a7d4fb0b8a0dbaae32593b698d16da47436aa29b8b483bdf4c91bb515'
                    'SKIP')
 
 _replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}")
@@ -98,7 +98,7 @@ prepare() {
 
   if [ "${_srcname##*-}" != "$pkgver" ]; then
     echo "Applying upstream patch..."
-    patch -Np1 < "../patch-${_srcname##*-}-gnu-$pkgver-gnu"
+    patch -Np1 < "../patch-${_srcname##*-}-gnu1-$pkgver-gnu1"
   fi
 
   echo "Adding freedo as boot logo..."
@@ -144,7 +144,7 @@ prepare() {
   echo "Setting config..."
   cp ../config.$CARCH .config
   make olddefconfig
-
+#return 1
   make -s kernelrelease > version
   echo "Prepared $pkgbase version $(<version)"
 }
@@ -152,9 +152,7 @@ prepare() {
 build() {
   cd $_srcname
   make all
-  if ! [ "$CARCH" = armv7h ]; then
-    make htmldocs
-  fi
+  make htmldocs
 }
 
 _package() {
@@ -318,8 +316,7 @@ _package-docs() {
   ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase"
 }
 
-pkgname=("$pkgbase" "$pkgbase-headers")
-[[ $CARCH = armv7h ]] || pkgname+=("$pkgbase-docs")
+pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
 for _p in "${pkgname[@]}"; do
   eval "package_$_p() {
     $(declare -f "_package${_p#$pkgbase}")
diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64
index f0c0366..994646e 100644
--- a/libre/linux-libre-lts/config.x86_64
+++ b/libre/linux-libre-lts/config.x86_64
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.10.56-gnu Kernel Configuration
+# Linux/x86 5.10.72-gnu1 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -864,6 +864,9 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
 # end of GCOV-based kernel profiling
 
 CONFIG_HAVE_GCC_PLUGINS=y
+CONFIG_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
+# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
 # end of General architecture-dependent options
 
 CONFIG_RT_MUTEXES=y
@@ -9541,11 +9544,17 @@ CONFIG_LSM="lockdown,yama"
 #
 # Kernel hardening options
 #
+CONFIG_GCC_PLUGIN_STRUCTLEAK=y
 
 #
 # Memory initialization
 #
-CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
+CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y
+# CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE is not set
+# CONFIG_GCC_PLUGIN_STACKLEAK is not set
 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
 # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
 # end of Memory initialization
@@ -9813,7 +9822,8 @@ CONFIG_SYSTEM_TRUSTED_KEYS=""
 CONFIG_SECONDARY_TRUSTED_KEYRING=y
 CONFIG_SYSTEM_BLACKLIST_KEYRING=y
 CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
-# CONFIG_SYSTEM_REVOCATION_LIST is not set
+CONFIG_SYSTEM_REVOCATION_LIST=y
+CONFIG_SYSTEM_REVOCATION_KEYS=""
 # end of Certificates for signature checking
 
 CONFIG_BINARY_PRINTF=y

From dc3324452d8fd166d0ce81989032388b1146a788 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 01:30:48 +0000
Subject: [PATCH 6/23] updpkg: libre/linux-libre-hardened 5.14.11.hardened1-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-hardened/PKGBUILD b/libre/linux-libre-hardened/PKGBUILD
index 84ce20d..ed3fc5c 100644
--- a/libre/linux-libre-hardened/PKGBUILD
+++ b/libre/linux-libre-hardened/PKGBUILD
@@ -9,7 +9,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix
 _replacesoldmodules=() # '%' gets replaced with kernel suffix
 
 pkgbase=linux-libre-hardened
-pkgver=5.12.19.hardened1
+pkgver=5.14.11.hardened1
 pkgrel=1
 pkgdesc='Security-Hardened Linux-libre'
 url='https://linux-libre.fsfla.org/'
@@ -20,7 +20,7 @@ makedepends=(
   xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick
 )
 options=('!strip')
-_srcname=linux-5.12
+_srcname=linux-5.14
 _srctag=${pkgver%.*}-${pkgver##*.}
 source=(
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
@@ -36,7 +36,6 @@ source=(
   # https://labs.parabola.nu/issues/877
   # http://www.fsfla.org/pipermail/linux-libre/2015-November/003202.html
   0002-fix-Atmel-maXTouch-touchscreen-support.patch
-  # Arch Linux patches
 )
 validpgpkeys=(
   '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
@@ -44,11 +43,11 @@ validpgpkeys=(
   '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
   'E240B57E2C4630BA768E2F26FC1B547C8D8172C8' # Levente Polyak
 )
-sha512sums=('07730c51e4030dc9c1d01367098eabafd5665c40a69f8b102b2fa0aaae4f2124c32f60560b30a55fab18a76eb782650fac04a4aa2aaa558e96bfd13faaea328c'
+sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c'
             'SKIP'
-            '9857f7c8e88f9a59faaea695245d668d7c73347bcf43feb60d61fa94dfc9c7bfdfcbca6a6afa32839991924644bd990a7fff2b60b68d4f14da74b343ede5ff15'
+            '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1'
             'SKIP'
-            'e5e427702841d941c605a9fe27ba051c7e947dc7c2ab5906cd19a40b9fe99863e41b9e860e8f00fad2f11922403d9ee042a94b9e7fefc85e89f333192b2bda85'
+            'ae0fb696bcea16040ffae245e874957aa797d977b73c8c84cb2c130ad858b03f7bf0848c374e33e521b5db30c77ade08230b9446f1700b1e32ac65d9463f7b90'
             'SKIP'
             '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
             'SKIP'
@@ -56,7 +55,7 @@ sha512sums=('07730c51e4030dc9c1d01367098eabafd5665c40a69f8b102b2fa0aaae4f2124c32
             'SKIP'
             '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
             'SKIP'
-            '17e5fead55a8bbffaaa4a37ed09bd38309b2dbcbebbd44fdd2f382732da8a0e41dded9ab78fbcb154788e8e0f7ddd5bf02a5f3dede630731bdd6e72773effcc7'
+            '71c0705f03b2c3937fb30ef07f81d6bc48f43e7433eec2dd52b94bb55d91123d200e9fa74f522fb6b66495e0ec8b56b2949dd2974d777e265471186ea6a0a033'
             '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
             'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168')
   
diff --git a/libre/linux-libre-hardened/config b/libre/linux-libre-hardened/config
index e836681..389c065 100644
--- a/libre/linux-libre-hardened/config
+++ b/libre/linux-libre-hardened/config
@@ -1,11 +1,13 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.12.19-gnu-hardened1 Kernel Configuration
+# Linux/x86 5.14.11-gnu-hardened1 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
 CONFIG_GCC_VERSION=110100
 CONFIG_CLANG_VERSION=0
+CONFIG_AS_IS_GNU=y
+CONFIG_AS_VERSION=23601
 CONFIG_LD_IS_BFD=y
 CONFIG_LD_VERSION=23601
 CONFIG_LLD_VERSION=0
@@ -14,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -100,12 +103,29 @@ CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 # end of Timers subsystem
 
+CONFIG_BPF=y
+CONFIG_HAVE_EBPF_JIT=y
+CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
+
+#
+# BPF subsystem
+#
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_BPF_JIT_ALWAYS_ON=y
+CONFIG_BPF_JIT_DEFAULT_ON=y
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
+# CONFIG_BPF_PRELOAD is not set
+CONFIG_BPF_LSM=y
+# end of BPF subsystem
+
 # CONFIG_PREEMPT_NONE is not set
 # CONFIG_PREEMPT_VOLUNTARY is not set
 CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
 
 #
 # CPU/Task time and stats accounting
@@ -193,6 +213,7 @@ CONFIG_CGROUP_DEVICE=y
 CONFIG_CGROUP_CPUACCT=y
 CONFIG_CGROUP_PERF=y
 CONFIG_CGROUP_BPF=y
+CONFIG_CGROUP_MISC=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_SOCK_CGROUP_DATA=y
 CONFIG_NAMESPACES=y
@@ -224,7 +245,6 @@ CONFIG_SYSCTL=y
 CONFIG_HAVE_UID16=y
 CONFIG_SYSCTL_EXCEPTION_TRACE=y
 CONFIG_HAVE_PCSPKR_PLATFORM=y
-CONFIG_BPF=y
 # CONFIG_EXPERT is not set
 # CONFIG_UID16 is not set
 CONFIG_MULTIUSER=y
@@ -253,12 +273,6 @@ CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y
 CONFIG_KALLSYMS_BASE_RELATIVE=y
-CONFIG_BPF_LSM=y
-CONFIG_BPF_SYSCALL=y
-CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
-CONFIG_BPF_JIT_ALWAYS_ON=y
-CONFIG_BPF_JIT_DEFAULT_ON=y
-# CONFIG_BPF_PRELOAD is not set
 # CONFIG_USERFAULTFD is not set
 CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
 CONFIG_KCMP=y
@@ -307,7 +321,6 @@ CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_ARCH_HAS_CPU_RELAX=y
-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_FILTER_PGPROT=y
 CONFIG_HAVE_SETUP_PER_CPU_AREA=y
 CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
@@ -315,7 +328,6 @@ CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
-CONFIG_ZONE_DMA32=y
 CONFIG_AUDIT_ARCH=y
 CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_64_SMP=y
@@ -328,7 +340,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_X2APIC=y
@@ -445,7 +456,6 @@ CONFIG_X86_PMEM_LEGACY_DEVICE=y
 CONFIG_X86_PMEM_LEGACY=m
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -496,12 +506,8 @@ CONFIG_HAVE_LIVEPATCH=y
 # end of Processor type and features
 
 CONFIG_ARCH_HAS_ADD_PAGES=y
-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
 CONFIG_USE_PERCPU_NUMA_NODE_ID=y
-CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
-CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
-CONFIG_ARCH_ENABLE_THP_MIGRATION=y
 
 #
 # Power management and ACPI options
@@ -593,7 +599,9 @@ CONFIG_BXT_WC_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
 CONFIG_TPS68470_PMIC_OPREGION=y
+CONFIG_ACPI_VIOT=y
 CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_PRMT=y
 
 #
 # CPU Frequency scaling
@@ -738,9 +746,11 @@ CONFIG_KVM_COMPAT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
+CONFIG_X86_SGX_KVM=y
 CONFIG_KVM_AMD=m
 CONFIG_KVM_AMD_SEV=y
 CONFIG_KVM_XEN=y
@@ -781,6 +791,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_RSEQ=y
@@ -845,6 +856,8 @@ CONFIG_COMPAT_OLD_SIGACTION=y
 CONFIG_COMPAT_32BIT_TIME=y
 CONFIG_HAVE_ARCH_VMAP_STACK=y
 CONFIG_VMAP_STACK=y
+CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
+CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
 CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 CONFIG_STRICT_KERNEL_RWX=y
 CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
@@ -891,10 +904,12 @@ CONFIG_MODULE_SIG_ALL=y
 # CONFIG_MODULE_SIG_SHA384 is not set
 CONFIG_MODULE_SIG_SHA512=y
 CONFIG_MODULE_SIG_HASH="sha512"
-CONFIG_MODULE_COMPRESS=y
+# CONFIG_MODULE_COMPRESS_NONE is not set
 # CONFIG_MODULE_COMPRESS_GZIP is not set
-CONFIG_MODULE_COMPRESS_XZ=y
+# CONFIG_MODULE_COMPRESS_XZ is not set
+CONFIG_MODULE_COMPRESS_ZSTD=y
 # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
+CONFIG_MODPROBE_PATH="/sbin/modprobe"
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_BLK_RQ_ALLOC_TIME=y
@@ -909,9 +924,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_FC_APPID=y
 CONFIG_BLK_CGROUP_IOCOST=y
-CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_CGROUP_IOPRIO=y
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -995,7 +1012,6 @@ CONFIG_COREDUMP=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
-CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPARSEMEM_VMEMMAP=y
@@ -1003,19 +1019,24 @@ CONFIG_HAVE_FAST_GUP=y
 CONFIG_NUMA_KEEP_MEMINFO=y
 CONFIG_MEMORY_ISOLATION=y
 CONFIG_HAVE_BOOTMEM_INFO_NODE=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTPLUG_SPARSE=y
 CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
 CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_MHP_MEMMAP_ON_MEMORY=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
 CONFIG_MEMORY_BALLOON=y
 CONFIG_BALLOON_COMPACTION=y
 CONFIG_COMPACTION=y
 CONFIG_PAGE_REPORTING=y
 CONFIG_MIGRATION=y
+CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
+CONFIG_ARCH_ENABLE_THP_MIGRATION=y
 CONFIG_CONTIG_ALLOC=y
 CONFIG_PHYS_ADDR_T_64BIT=y
-CONFIG_BOUNCE=y
 CONFIG_VIRT_TO_BUS=y
 CONFIG_MMU_NOTIFIER=y
 CONFIG_KSM=y
@@ -1033,6 +1054,7 @@ CONFIG_FRONTSWAP=y
 CONFIG_CMA=y
 # CONFIG_CMA_DEBUG is not set
 # CONFIG_CMA_DEBUGFS is not set
+CONFIG_CMA_SYSFS=y
 CONFIG_CMA_AREAS=7
 CONFIG_ZSWAP=y
 # CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
@@ -1055,7 +1077,10 @@ CONFIG_ZSMALLOC=y
 CONFIG_GENERIC_EARLY_IOREMAP=y
 # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
 CONFIG_IDLE_PAGE_TRACKING=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_PTE_DEVMAP=y
+CONFIG_ZONE_DMA=y
+CONFIG_ZONE_DMA32=y
 CONFIG_ZONE_DEVICE=y
 CONFIG_DEV_PAGEMAP_OPS=y
 CONFIG_HMM_MIRROR=y
@@ -1068,6 +1093,7 @@ CONFIG_ARCH_HAS_PKEYS=y
 CONFIG_READ_ONLY_THP_FOR_FS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
+CONFIG_SECRETMEM=y
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1213,13 +1239,13 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_HOOK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
 CONFIG_NETFILTER_NETLINK_OSF=m
 CONFIG_NF_CONNTRACK=m
-CONFIG_NF_LOG_COMMON=m
-CONFIG_NF_LOG_NETDEV=m
+CONFIG_NF_LOG_SYSLOG=m
 CONFIG_NETFILTER_CONNCOUNT=m
 CONFIG_NF_CONNTRACK_MARK=y
 CONFIG_NF_CONNTRACK_SECMARK=y
@@ -1293,6 +1319,7 @@ CONFIG_NFT_REJECT_NETDEV=m
 CONFIG_NF_FLOW_TABLE_INET=m
 CONFIG_NF_FLOW_TABLE=m
 CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XTABLES_COMPAT=y
 
 #
 # Xtables combined modules
@@ -1533,7 +1560,6 @@ CONFIG_NF_DEFRAG_IPV6=m
 CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_NFT_BRIDGE_META=m
 CONFIG_NFT_BRIDGE_REJECT=m
-CONFIG_NF_LOG_BRIDGE=m
 CONFIG_NF_CONNTRACK_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
@@ -1588,12 +1614,11 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
-CONFIG_HAVE_NET_DSA=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
+CONFIG_NET_DSA_TAG_BRCM_LEGACY=m
 CONFIG_NET_DSA_TAG_BRCM_PREPEND=m
 CONFIG_NET_DSA_TAG_HELLCREEK=m
 CONFIG_NET_DSA_TAG_GSWIP=m
@@ -1778,6 +1803,8 @@ CONFIG_QRTR_TUN=m
 CONFIG_QRTR_MHI=m
 CONFIG_NET_NCSI=y
 CONFIG_NCSI_OEM_CMD_GET_MAC=y
+CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
+CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
 CONFIG_SOCK_RX_QUEUE_MAPPING=y
@@ -1786,7 +1813,6 @@ CONFIG_CGROUP_NET_PRIO=y
 CONFIG_CGROUP_NET_CLASSID=y
 CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
-CONFIG_BPF_JIT=y
 CONFIG_BPF_STREAM_PARSER=y
 CONFIG_NET_FLOW_LIMIT=y
 
@@ -1878,6 +1904,7 @@ CONFIG_CAN_MCP251XFD=m
 CONFIG_CAN_8DEV_USB=m
 CONFIG_CAN_EMS_USB=m
 CONFIG_CAN_ESD_USB2=m
+CONFIG_CAN_ETAS_ES58X=m
 CONFIG_CAN_GS_USB=m
 CONFIG_CAN_KVASER_USB=m
 CONFIG_CAN_MCBA_USB=m
@@ -1902,6 +1929,7 @@ CONFIG_BT_LE=y
 CONFIG_BT_6LOWPAN=m
 CONFIG_BT_LEDS=y
 CONFIG_BT_MSFTEXT=y
+CONFIG_BT_AOSPEXT=y
 # CONFIG_BT_DEBUGFS is not set
 # CONFIG_BT_SELFTEST is not set
 
@@ -1945,6 +1973,7 @@ CONFIG_BT_ATH3K=m
 CONFIG_BT_MTKSDIO=m
 CONFIG_BT_MTKUART=m
 CONFIG_BT_HCIRSI=m
+CONFIG_BT_VIRTIO=m
 # end of Bluetooth device drivers
 
 CONFIG_AF_RXRPC=m
@@ -2053,12 +2082,12 @@ CONFIG_LWTUNNEL_BPF=y
 CONFIG_DST_CACHE=y
 CONFIG_GRO_CELLS=y
 CONFIG_SOCK_VALIDATE_XMIT=y
+CONFIG_NET_SELFTESTS=m
 CONFIG_NET_SOCK_MSG=y
 CONFIG_NET_DEVLINK=y
 CONFIG_PAGE_POOL=y
 CONFIG_FAILOVER=m
 CONFIG_ETHTOOL_NETLINK=y
-CONFIG_HAVE_EBPF_JIT=y
 
 #
 # Device Drivers
@@ -2148,6 +2177,8 @@ CONFIG_PCI_SW_SWITCHTEC=m
 CONFIG_CXL_BUS=m
 CONFIG_CXL_MEM=m
 # CONFIG_CXL_MEM_RAW_COMMANDS is not set
+CONFIG_CXL_ACPI=m
+CONFIG_CXL_PMEM=m
 CONFIG_PCCARD=m
 CONFIG_PCMCIA=m
 CONFIG_PCMCIA_LOAD_CIS=y
@@ -2207,6 +2238,7 @@ CONFIG_REGMAP_W1=m
 CONFIG_REGMAP_MMIO=y
 CONFIG_REGMAP_IRQ=y
 CONFIG_REGMAP_SOUNDWIRE=m
+CONFIG_REGMAP_SOUNDWIRE_MBQ=m
 CONFIG_REGMAP_SCCB=m
 CONFIG_REGMAP_SPI_AVMM=m
 CONFIG_DMA_SHARED_BUFFER=y
@@ -2285,6 +2317,7 @@ CONFIG_MTD_PLATRAM=m
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_DATAFLASH is not set
 # CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
 # CONFIG_MTD_SST25L is not set
 # CONFIG_MTD_SLRAM is not set
 # CONFIG_MTD_PHRAM is not set
@@ -2387,7 +2420,6 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y
 CONFIG_ZRAM_DEF_COMP="lzo-rle"
 CONFIG_ZRAM_WRITEBACK=y
 # CONFIG_ZRAM_MEMORY_TRACKING is not set
-CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_LOOP=m
 CONFIG_BLK_DEV_LOOP_MIN_COUNT=0
 CONFIG_BLK_DEV_CRYPTOLOOP=m
@@ -2457,10 +2489,10 @@ CONFIG_DS1682=m
 CONFIG_VMWARE_BALLOON=m
 CONFIG_LATTICE_ECP3_CONFIG=m
 # CONFIG_SRAM is not set
+CONFIG_DW_XDATA_PCIE=m
 CONFIG_PCI_ENDPOINT_TEST=m
 CONFIG_XILINX_SDFEC=m
 CONFIG_MISC_RTSX=m
-CONFIG_PVPANIC=m
 CONFIG_C2PORT=m
 CONFIG_C2PORT_DURAMAR_2150=m
 
@@ -2504,11 +2536,11 @@ CONFIG_MISC_RTSX_PCI=m
 CONFIG_MISC_RTSX_USB=m
 CONFIG_HABANA_AI=m
 CONFIG_UACCE=m
+CONFIG_PVPANIC=y
+CONFIG_PVPANIC_MMIO=m
+CONFIG_PVPANIC_PCI=m
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2590,6 +2622,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPI3MR=m
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2642,6 +2675,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+CONFIG_SCSI_EFCT=m
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_WD719X=m
@@ -2939,6 +2973,7 @@ CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m
 CONFIG_NET_DSA_MICROCHIP_KSZ9477_SPI=m
 CONFIG_NET_DSA_MICROCHIP_KSZ8795=m
 CONFIG_NET_DSA_MICROCHIP_KSZ8795_SPI=m
+CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=m
 CONFIG_NET_DSA_MV88E6XXX=m
 CONFIG_NET_DSA_MV88E6XXX_PTP=y
 CONFIG_NET_DSA_MSCC_SEVILLE=m
@@ -3101,6 +3136,8 @@ CONFIG_I40EVF=m
 CONFIG_ICE=m
 CONFIG_FM10K=m
 CONFIG_IGC=m
+CONFIG_NET_VENDOR_MICROSOFT=y
+CONFIG_MICROSOFT_MANA=m
 CONFIG_JME=m
 CONFIG_NET_VENDOR_MARVELL=y
 CONFIG_MVMDIO=m
@@ -3125,8 +3162,10 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_CT=y
+CONFIG_MLX5_TC_SAMPLE=y
 CONFIG_MLX5_CORE_EN_DCB=y
 CONFIG_MLX5_CORE_IPOIB=y
 CONFIG_MLX5_FPGA_IPSEC=y
@@ -3143,8 +3182,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3252,6 +3289,7 @@ CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=m
 CONFIG_DWMAC_GENERIC=m
 CONFIG_DWMAC_INTEL=m
+CONFIG_DWMAC_LOONGSON=m
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3285,7 +3323,6 @@ CONFIG_NET_VENDOR_XIRCOM=y
 CONFIG_PCMCIA_XIRC2PS=m
 CONFIG_FDDI=m
 CONFIG_DEFXX=m
-CONFIG_DEFXX_MMIO=y
 CONFIG_SKFP=m
 # CONFIG_HIPPI is not set
 CONFIG_NET_SB1000=m
@@ -3318,11 +3355,15 @@ CONFIG_INTEL_XWAY_PHY=m
 CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
+CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 CONFIG_MICROCHIP_T1_PHY=m
 CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
 CONFIG_NATIONAL_PHY=m
+CONFIG_NXP_C45_TJA11XX_PHY=m
 CONFIG_NXP_TJA11XX_PHY=m
 CONFIG_AT803X_PHY=m
 CONFIG_QSEMI_PHY=m
@@ -3342,6 +3383,8 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -3730,6 +3773,17 @@ CONFIG_IEEE802154_CA8210=m
 # CONFIG_IEEE802154_CA8210_DEBUGFS is not set
 CONFIG_IEEE802154_MCR20A=m
 CONFIG_IEEE802154_HWSIM=m
+
+#
+# Wireless WAN
+#
+CONFIG_WWAN=y
+CONFIG_WWAN_HWSIM=m
+CONFIG_MHI_WWAN_CTRL=m
+CONFIG_RPMSG_WWAN_CTRL=m
+CONFIG_IOSM=m
+# end of Wireless WAN
+
 CONFIG_XEN_NETDEV_FRONTEND=m
 CONFIG_XEN_NETDEV_BACKEND=m
 CONFIG_VMXNET3=m
@@ -3883,6 +3937,7 @@ CONFIG_JOYSTICK_WALKERA0701=m
 CONFIG_JOYSTICK_PSXPAD_SPI=m
 CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
 CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -3892,7 +3947,6 @@ CONFIG_TABLET_USB_KBTAB=m
 CONFIG_TABLET_USB_PEGASUS=m
 CONFIG_TABLET_SERIAL_WACOM4=m
 CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_PROPERTIES=y
 CONFIG_TOUCHSCREEN_88PM860X=m
 CONFIG_TOUCHSCREEN_ADS7846=m
 CONFIG_TOUCHSCREEN_AD7877=m
@@ -3924,7 +3978,9 @@ CONFIG_TOUCHSCREEN_EXC3000=m
 CONFIG_TOUCHSCREEN_FUJITSU=m
 CONFIG_TOUCHSCREEN_GOODIX=m
 CONFIG_TOUCHSCREEN_HIDEEP=m
+CONFIG_TOUCHSCREEN_HYCON_HY46XX=m
 CONFIG_TOUCHSCREEN_ILI210X=m
+CONFIG_TOUCHSCREEN_ILITEK=m
 CONFIG_TOUCHSCREEN_S6SY761=m
 CONFIG_TOUCHSCREEN_GUNZE=m
 CONFIG_TOUCHSCREEN_EKTF2127=m
@@ -3936,6 +3992,7 @@ CONFIG_TOUCHSCREEN_MAX11801=m
 CONFIG_TOUCHSCREEN_MCS5000=m
 CONFIG_TOUCHSCREEN_MMS114=m
 CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
+CONFIG_TOUCHSCREEN_MSG2638=m
 CONFIG_TOUCHSCREEN_MTOUCH=m
 CONFIG_TOUCHSCREEN_INEXIO=m
 CONFIG_TOUCHSCREEN_MK712=m
@@ -4001,6 +4058,7 @@ CONFIG_INPUT_AD714X=m
 CONFIG_INPUT_AD714X_I2C=m
 CONFIG_INPUT_AD714X_SPI=m
 CONFIG_INPUT_ARIZONA_HAPTICS=m
+CONFIG_INPUT_ATC260X_ONKEY=m
 CONFIG_INPUT_BMA150=m
 CONFIG_INPUT_E3X0_BUTTON=m
 CONFIG_INPUT_PCSPKR=m
@@ -4044,6 +4102,7 @@ CONFIG_INPUT_ADXL34X_I2C=m
 CONFIG_INPUT_ADXL34X_SPI=m
 CONFIG_INPUT_IMS_PCU=m
 CONFIG_INPUT_IQS269A=m
+CONFIG_INPUT_IQS626A=m
 CONFIG_INPUT_CMA3000=m
 CONFIG_INPUT_CMA3000_I2C=m
 CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
@@ -4169,19 +4228,13 @@ CONFIG_SERIAL_SPRD=m
 
 CONFIG_SERIAL_MCTRL_GPIO=y
 CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_ROCKETPORT=m
-CONFIG_CYCLADES=m
-CONFIG_CYZ_INTR=y
 CONFIG_MOXA_INTELLIO=m
 CONFIG_MOXA_SMARTIO=m
 CONFIG_SYNCLINK_GT=m
-CONFIG_ISI=m
 CONFIG_N_HDLC=m
 CONFIG_N_GSM=m
 CONFIG_NOZOMI=m
 CONFIG_NULL_TTY=m
-CONFIG_TRACE_ROUTER=m
-CONFIG_TRACE_SINK=m
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_IRQ=y
 CONFIG_HVC_XEN=y
@@ -4224,10 +4277,7 @@ CONFIG_IPWIRELESS=m
 
 CONFIG_MWAVE=m
 # CONFIG_DEVMEM is not set
-# CONFIG_DEVKMEM is not set
 CONFIG_NVRAM=m
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=8192
 # CONFIG_DEVPORT is not set
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
@@ -4252,8 +4302,10 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
+CONFIG_XILLYUSB=m
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -4341,6 +4393,7 @@ CONFIG_I2C_XILINX=m
 #
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_DLN2=m
+CONFIG_I2C_CP2615=m
 CONFIG_I2C_PARPORT=m
 CONFIG_I2C_ROBOTFUZZ_OSIF=m
 CONFIG_I2C_TAOS_EVM=m
@@ -4373,6 +4426,8 @@ CONFIG_SPI_MEM=y
 # SPI Master Controller Drivers
 #
 CONFIG_SPI_ALTERA=m
+CONFIG_SPI_ALTERA_CORE=m
+CONFIG_SPI_ALTERA_DFL=m
 CONFIG_SPI_AXI_SPI_ENGINE=m
 CONFIG_SPI_BITBANG=m
 CONFIG_SPI_BUTTERFLY=m
@@ -4637,6 +4692,7 @@ CONFIG_W1_SLAVE_DS28E17=m
 # end of 1-wire Slaves
 
 CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_ATC260X=m
 CONFIG_POWER_RESET_MT6323=y
 CONFIG_POWER_RESET_RESTART=y
 CONFIG_POWER_SUPPLY=y
@@ -4704,11 +4760,14 @@ CONFIG_CHARGER_BQ256XX=m
 CONFIG_CHARGER_SMB347=m
 CONFIG_CHARGER_TPS65090=m
 CONFIG_BATTERY_GAUGE_LTC2941=m
+CONFIG_BATTERY_GOLDFISH=m
 CONFIG_BATTERY_RT5033=m
 CONFIG_CHARGER_RT9455=m
 CONFIG_CHARGER_CROS_USBPD=m
 CONFIG_CHARGER_BD99954=m
 CONFIG_CHARGER_WILCO=m
+CONFIG_BATTERY_SURFACE=m
+CONFIG_CHARGER_SURFACE=m
 CONFIG_HWMON=y
 CONFIG_HWMON_VID=m
 # CONFIG_HWMON_DEBUG_CHIP is not set
@@ -4742,7 +4801,6 @@ CONFIG_SENSORS_AXI_FAN_CONTROL=m
 CONFIG_SENSORS_K8TEMP=m
 CONFIG_SENSORS_K10TEMP=m
 CONFIG_SENSORS_FAM15H_POWER=m
-CONFIG_SENSORS_AMD_ENERGY=m
 CONFIG_SENSORS_APPLESMC=m
 CONFIG_SENSORS_ASB100=m
 CONFIG_SENSORS_ASPEED=m
@@ -4833,15 +4891,20 @@ CONFIG_SENSORS_NCT6775=m
 CONFIG_SENSORS_NCT7802=m
 CONFIG_SENSORS_NCT7904=m
 CONFIG_SENSORS_NPCM7XX=m
+CONFIG_SENSORS_NZXT_KRAKEN2=m
 CONFIG_SENSORS_PCF8591=m
 CONFIG_PMBUS=m
 CONFIG_SENSORS_PMBUS=m
 CONFIG_SENSORS_ADM1266=m
 CONFIG_SENSORS_ADM1275=m
 CONFIG_SENSORS_BEL_PFE=m
+CONFIG_SENSORS_BPA_RS600=m
+CONFIG_SENSORS_FSP_3Y=m
 CONFIG_SENSORS_IBM_CFFPS=m
+CONFIG_SENSORS_DPS920AB=m
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
+CONFIG_SENSORS_IR36021=m
 CONFIG_SENSORS_IR38064=m
 CONFIG_SENSORS_IRPS5401=m
 CONFIG_SENSORS_ISL68137=m
@@ -4849,6 +4912,7 @@ CONFIG_SENSORS_LM25066=m
 CONFIG_SENSORS_LTC2978=m
 # CONFIG_SENSORS_LTC2978_REGULATOR is not set
 CONFIG_SENSORS_LTC3815=m
+CONFIG_SENSORS_MAX15301=m
 CONFIG_SENSORS_MAX16064=m
 CONFIG_SENSORS_MAX16601=m
 CONFIG_SENSORS_MAX20730=m
@@ -4856,10 +4920,13 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_MP2888=m
 CONFIG_SENSORS_MP2975=m
+CONFIG_SENSORS_PIM4328=m
 CONFIG_SENSORS_PM6764TR=m
 CONFIG_SENSORS_PXE1610=m
 CONFIG_SENSORS_Q54SJ108A2=m
+CONFIG_SENSORS_STPDDC60=m
 CONFIG_SENSORS_TPS40422=m
 CONFIG_SENSORS_TPS53679=m
 CONFIG_SENSORS_UCD9000=m
@@ -4870,6 +4937,7 @@ CONFIG_SENSORS_SBTSI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -4962,6 +5030,7 @@ CONFIG_PROC_THERMAL_MMIO_RAPL=m
 
 CONFIG_INTEL_BXT_PMIC_THERMAL=m
 CONFIG_INTEL_PCH_THERMAL=m
+CONFIG_INTEL_TCC_COOLING=m
 # end of Intel thermal drivers
 
 CONFIG_GENERIC_ADC_THERMAL=m
@@ -4971,6 +5040,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5153,16 +5223,13 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+CONFIG_MFD_RT4831=m
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
 CONFIG_MFD_SI476X_CORE=m
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
 CONFIG_MFD_SKY81452=m
-CONFIG_ABX500_CORE=y
-CONFIG_AB3100_CORE=y
-CONFIG_AB3100_OTP=y
 CONFIG_MFD_SYSCON=y
 CONFIG_MFD_TI_AM335X_TSCADC=m
 CONFIG_MFD_LP3943=m
@@ -5174,7 +5241,6 @@ CONFIG_TPS65010=m
 CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 CONFIG_MFD_TPS6586X=y
 CONFIG_MFD_TPS65910=y
@@ -5189,7 +5255,7 @@ CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_LM3533=m
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5205,6 +5271,8 @@ CONFIG_MFD_WM8350=y
 CONFIG_MFD_WM8350_I2C=y
 CONFIG_MFD_WM8994=m
 CONFIG_MFD_WCD934X=m
+CONFIG_MFD_ATC260X=m
+CONFIG_MFD_ATC260X_I2C=m
 CONFIG_RAVE_SP_CORE=m
 CONFIG_MFD_INTEL_M10_BMC=m
 # end of Multifunction device drivers
@@ -5223,6 +5291,7 @@ CONFIG_REGULATOR_AAT2870=m
 CONFIG_REGULATOR_ARIZONA_LDO1=m
 CONFIG_REGULATOR_ARIZONA_MICSUPP=m
 CONFIG_REGULATOR_AS3711=m
+CONFIG_REGULATOR_ATC260X=m
 CONFIG_REGULATOR_AXP20X=m
 CONFIG_REGULATOR_BCM590XX=m
 CONFIG_REGULATOR_BD9571MWV=m
@@ -5248,6 +5317,7 @@ CONFIG_REGULATOR_MAX14577=m
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+CONFIG_REGULATOR_MAX8893=m
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5262,6 +5332,7 @@ CONFIG_REGULATOR_MP8859=m
 CONFIG_REGULATOR_MT6311=m
 CONFIG_REGULATOR_MT6323=m
 CONFIG_REGULATOR_MT6358=m
+CONFIG_REGULATOR_MT6359=m
 CONFIG_REGULATOR_MT6360=m
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
@@ -5275,11 +5346,11 @@ CONFIG_REGULATOR_PWM=m
 CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
+CONFIG_REGULATOR_RT6160=m
+CONFIG_REGULATOR_RT6245=m
 CONFIG_REGULATOR_RTMV20=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_TPS51632=m
@@ -5381,6 +5452,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5410,7 +5482,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 #
 # Drivers filtered as selected at 'Filter media drivers'
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5581,7 +5652,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5618,14 +5688,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -5672,6 +5738,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -5761,6 +5828,7 @@ CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_APTINA_PLL=m
 CONFIG_VIDEO_CCS_PLL=m
 CONFIG_VIDEO_HI556=m
+CONFIG_VIDEO_IMX208=m
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -5946,7 +6014,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6064,7 +6131,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -6097,7 +6163,6 @@ CONFIG_DRM_AMDGPU=m
 CONFIG_DRM_AMDGPU_SI=y
 CONFIG_DRM_AMDGPU_CIK=y
 CONFIG_DRM_AMDGPU_USERPTR=y
-# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
 
 #
 # ACP (Audio CoProcessor) Configuration
@@ -6112,9 +6177,11 @@ CONFIG_DRM_AMD_DC=y
 CONFIG_DRM_AMD_DC_DCN=y
 CONFIG_DRM_AMD_DC_HDCP=y
 CONFIG_DRM_AMD_DC_SI=y
+CONFIG_DRM_AMD_SECURE_DISPLAY=y
 # end of Display Engine Configuration
 
 CONFIG_HSA_AMD=y
+CONFIG_HSA_AMD_SVM=y
 CONFIG_DRM_NOUVEAU=m
 # CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
 CONFIG_NOUVEAU_DEBUG=5
@@ -6130,6 +6197,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y
 CONFIG_DRM_I915_USERPTR=y
 CONFIG_DRM_I915_GVT=y
 CONFIG_DRM_I915_GVT_KVMGT=m
+CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
 CONFIG_DRM_I915_FENCE_TIMEOUT=10000
 CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
 CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
@@ -6142,7 +6210,6 @@ CONFIG_DRM_VKMS=m
 CONFIG_DRM_VMWGFX=m
 CONFIG_DRM_VMWGFX_FBCON=y
 CONFIG_DRM_GMA500=m
-CONFIG_DRM_GMA600=y
 CONFIG_DRM_UDL=m
 CONFIG_DRM_AST=m
 CONFIG_DRM_MGAG200=m
@@ -6170,6 +6237,7 @@ CONFIG_DRM_ANALOGIX_DP=m
 # CONFIG_DRM_ETNAVIV is not set
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+CONFIG_DRM_SIMPLEDRM=m
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6181,6 +6249,8 @@ CONFIG_TINYDRM_ST7735R=m
 CONFIG_DRM_XEN=y
 CONFIG_DRM_XEN_FRONTEND=m
 CONFIG_DRM_VBOXVIDEO=m
+CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
 
@@ -6252,6 +6322,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_MB862XX is not set
 CONFIG_FB_HYPERV=m
 CONFIG_FB_SIMPLE=y
+# CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
 # end of Frame buffer Devices
 
@@ -6280,6 +6351,7 @@ CONFIG_BACKLIGHT_DA9052=m
 CONFIG_BACKLIGHT_MAX8925=m
 CONFIG_BACKLIGHT_APPLE=m
 CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_RT4831=m
 CONFIG_BACKLIGHT_SAHARA=m
 CONFIG_BACKLIGHT_WM831X=m
 CONFIG_BACKLIGHT_ADP5520=m
@@ -6355,6 +6427,7 @@ CONFIG_SND_DEBUG=y
 # CONFIG_SND_JACK_INJECTION_DEBUG is not set
 CONFIG_SND_VMASTER=y
 CONFIG_SND_DMA_SGBUF=y
+CONFIG_SND_CTL_LED=m
 CONFIG_SND_SEQUENCER=m
 CONFIG_SND_SEQ_DUMMY=m
 CONFIG_SND_SEQUENCER_OSS=m
@@ -6560,6 +6633,7 @@ CONFIG_SND_DESIGNWARE_PCM=y
 # CONFIG_SND_SOC_FSL_ESAI is not set
 # CONFIG_SND_SOC_FSL_MICFIL is not set
 CONFIG_SND_SOC_FSL_XCVR=m
+CONFIG_SND_SOC_FSL_RPMSG=m
 # CONFIG_SND_SOC_IMX_AUDMUX is not set
 # end of SoC Audio for Freescale CPUs
 
@@ -6593,6 +6667,8 @@ CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m
 CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
 CONFIG_SND_SOC_INTEL_MACH=y
 CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
+CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m
 CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m
 CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
@@ -6625,6 +6701,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
 CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
@@ -6789,8 +6866,10 @@ CONFIG_SND_SOC_RT286=m
 CONFIG_SND_SOC_RT298=m
 CONFIG_SND_SOC_RT1011=m
 CONFIG_SND_SOC_RT1015=m
+CONFIG_SND_SOC_RT1015P=m
 CONFIG_SND_SOC_RT1308=m
 CONFIG_SND_SOC_RT1308_SDW=m
+CONFIG_SND_SOC_RT1316_SDW=m
 CONFIG_SND_SOC_RT5514=m
 CONFIG_SND_SOC_RT5514_SPI=m
 CONFIG_SND_SOC_RT5616=m
@@ -6811,8 +6890,10 @@ CONFIG_SND_SOC_RT700=m
 CONFIG_SND_SOC_RT700_SDW=m
 CONFIG_SND_SOC_RT711=m
 CONFIG_SND_SOC_RT711_SDW=m
+CONFIG_SND_SOC_RT711_SDCA_SDW=m
 CONFIG_SND_SOC_RT715=m
 CONFIG_SND_SOC_RT715_SDW=m
+CONFIG_SND_SOC_RT715_SDCA_SDW=m
 CONFIG_SND_SOC_SGTL5000=m
 CONFIG_SND_SOC_SI476X=m
 CONFIG_SND_SOC_SIGMADSP=m
@@ -6822,6 +6903,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 CONFIG_SND_SOC_SIMPLE_MUX=m
 CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_SSM2305=m
+CONFIG_SND_SOC_SSM2518=m
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -6839,6 +6921,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -6847,13 +6930,18 @@ CONFIG_SND_SOC_TLV320AIC32X4=m
 CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
 CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
 CONFIG_SND_SOC_TLV320AIC3X=m
+CONFIG_SND_SOC_TLV320AIC3X_I2C=m
+CONFIG_SND_SOC_TLV320AIC3X_SPI=m
 CONFIG_SND_SOC_TLV320ADCX140=m
 CONFIG_SND_SOC_TS3A227E=m
 CONFIG_SND_SOC_TSCS42XX=m
 CONFIG_SND_SOC_TSCS454=m
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
@@ -6881,7 +6969,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 CONFIG_SND_SOC_ZL38060=m
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 CONFIG_SND_SOC_MT6351=m
 CONFIG_SND_SOC_MT6358=m
@@ -6905,6 +6992,7 @@ CONFIG_SND_X86=y
 CONFIG_HDMI_LPE_AUDIO=m
 CONFIG_SND_SYNTH_EMUX=m
 CONFIG_SND_XEN_FRONTEND=m
+CONFIG_SND_VIRTIO=m
 CONFIG_AC97_BUS=m
 
 #
@@ -6947,6 +7035,7 @@ CONFIG_HID_ELAN=m
 CONFIG_HID_ELECOM=m
 CONFIG_HID_ELO=m
 CONFIG_HID_EZKEY=m
+CONFIG_HID_FT260=m
 CONFIG_HID_GEMBIRD=m
 CONFIG_HID_GFRM=m
 CONFIG_HID_GLORIOUS=m
@@ -7004,6 +7093,7 @@ CONFIG_HID_RETRODE=m
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_SAITEK=m
 CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SEMITEK=m
 CONFIG_HID_SONY=m
 CONFIG_SONY_FF=y
 CONFIG_HID_SPEEDLINK=m
@@ -7063,6 +7153,15 @@ CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
 #
 CONFIG_AMD_SFH_HID=m
 # end of AMD SFH HID Support
+
+#
+# Surface System Aggregator Module HID support
+#
+CONFIG_SURFACE_HID=m
+CONFIG_SURFACE_KBD=m
+# end of Surface System Aggregator Module HID support
+
+CONFIG_SURFACE_HID_CORE=m
 # end of HID support
 
 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
@@ -7296,8 +7395,8 @@ CONFIG_TYPEC_WCOVE=m
 CONFIG_TYPEC_UCSI=m
 CONFIG_UCSI_CCG=m
 CONFIG_UCSI_ACPI=m
-CONFIG_TYPEC_HD3SS3220=m
 CONFIG_TYPEC_TPS6598X=m
+CONFIG_TYPEC_HD3SS3220=m
 CONFIG_TYPEC_STUSB160X=m
 
 #
@@ -7407,6 +7506,7 @@ CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
+CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
@@ -7458,11 +7558,6 @@ CONFIG_LEDS_TRIGGER_NETDEV=m
 CONFIG_LEDS_TRIGGER_PATTERN=m
 CONFIG_LEDS_TRIGGER_AUDIO=m
 CONFIG_LEDS_TRIGGER_TTY=m
-
-#
-# LED Blink
-#
-CONFIG_LEDS_BLINK=y
 CONFIG_ACCESSIBILITY=y
 CONFIG_A11Y_BRAILLE_CONSOLE=y
 
@@ -7497,7 +7592,7 @@ CONFIG_INFINIBAND_QIB=m
 CONFIG_INFINIBAND_QIB_DCA=y
 CONFIG_INFINIBAND_CXGB4=m
 CONFIG_INFINIBAND_EFA=m
-CONFIG_INFINIBAND_I40IW=m
+CONFIG_INFINIBAND_IRDMA=m
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -7546,6 +7641,7 @@ CONFIG_EDAC_SBRIDGE=m
 CONFIG_EDAC_SKX=m
 CONFIG_EDAC_I10NM=m
 CONFIG_EDAC_PND2=m
+CONFIG_EDAC_IGEN6=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_MC146818_LIB=y
 CONFIG_RTC_CLASS=y
@@ -7610,7 +7706,6 @@ CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3028=m
 CONFIG_RTC_DRV_RV3032=m
 CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
 CONFIG_RTC_DRV_SD3078=m
 
 #
@@ -7685,6 +7780,7 @@ CONFIG_RTC_DRV_MT6397=m
 # HID Sensor RTC drivers
 #
 CONFIG_RTC_DRV_HID_SENSOR_TIME=m
+CONFIG_RTC_DRV_GOLDFISH=m
 CONFIG_RTC_DRV_WILCO_EC=m
 CONFIG_DMADEVICES=y
 # CONFIG_DMADEVICES_DEBUG is not set
@@ -7699,6 +7795,7 @@ CONFIG_ALTERA_MSGDMA=m
 CONFIG_INTEL_IDMA64=m
 CONFIG_INTEL_IDXD=m
 CONFIG_INTEL_IDXD_SVM=y
+CONFIG_INTEL_IDXD_PERFMON=y
 CONFIG_INTEL_IOATDMA=m
 CONFIG_PLX_DMA=m
 CONFIG_QCOM_HIDMA_MGMT=m
@@ -7764,6 +7861,7 @@ CONFIG_UIO_NETX=m
 CONFIG_UIO_PRUSS=m
 CONFIG_UIO_MF624=m
 CONFIG_UIO_HV_GENERIC=m
+CONFIG_UIO_DFL=m
 CONFIG_VFIO_IOMMU_TYPE1=m
 CONFIG_VFIO_VIRQFD=m
 CONFIG_VFIO=m
@@ -7774,13 +7872,13 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
 CONFIG_NITRO_ENCLAVES=m
 CONFIG_ACRN_HSM=m
 CONFIG_VIRTIO=y
+CONFIG_ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS=y
 CONFIG_VIRTIO_PCI_LIB=m
 CONFIG_VIRTIO_MENU=y
 CONFIG_VIRTIO_PCI=m
@@ -7796,9 +7894,11 @@ CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
 CONFIG_VDPA=m
 CONFIG_VDPA_SIM=m
 CONFIG_VDPA_SIM_NET=m
+CONFIG_VDPA_SIM_BLOCK=m
 CONFIG_IFCVF=m
 CONFIG_MLX5_VDPA=y
 CONFIG_MLX5_VDPA_NET=m
+CONFIG_VP_VDPA=m
 CONFIG_VHOST_IOTLB=m
 CONFIG_VHOST_RING=m
 CONFIG_VHOST=m
@@ -7854,9 +7954,9 @@ CONFIG_XEN_UNPOPULATED_ALLOC=y
 # end of Xen driver support
 
 # CONFIG_GREYBUS is not set
+# CONFIG_COMEDI is not set
 CONFIG_STAGING=y
 CONFIG_PRISM2_USB=m
-# CONFIG_COMEDI is not set
 CONFIG_RTL8192U=m
 CONFIG_RTLLIB=m
 CONFIG_RTLLIB_CRYPTO_CCMP=m
@@ -7900,7 +8000,6 @@ CONFIG_ADT7316_I2C=m
 #
 # Capacitance to digital converters
 #
-CONFIG_AD7150=m
 CONFIG_AD7746=m
 # end of Capacitance to digital converters
 
@@ -7947,6 +8046,11 @@ CONFIG_VIDEO_ATOMISP_OV5693=m
 CONFIG_VIDEO_ATOMISP_LM3554=m
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -7965,31 +8069,12 @@ CONFIG_UNISYS_VISORHBA=m
 # CONFIG_FB_TFT is not set
 CONFIG_MOST_COMPONENTS=m
 CONFIG_MOST_NET=m
-CONFIG_MOST_SOUND=m
 CONFIG_MOST_VIDEO=m
 CONFIG_MOST_I2C=m
 CONFIG_KS7010=m
 CONFIG_PI433=m
-
-#
-# Gasket devices
-#
-CONFIG_STAGING_GASKET_FRAMEWORK=m
-CONFIG_STAGING_APEX_DRIVER=m
-# end of Gasket devices
-
 CONFIG_FIELDBUS_DEV=m
-CONFIG_KPC2000=y
-CONFIG_KPC2000_CORE=m
-CONFIG_KPC2000_SPI=m
-CONFIG_KPC2000_I2C=m
-CONFIG_KPC2000_DMA=m
 CONFIG_QLGE=m
-CONFIG_WIMAX=m
-CONFIG_WIMAX_DEBUG_LEVEL=8
-CONFIG_WIMAX_I2400M=m
-CONFIG_WIMAX_I2400M_USB=m
-CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
 CONFIG_WFX=m
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACPI_WMI=m
@@ -8000,10 +8085,12 @@ CONFIG_INTEL_WMI_THUNDERBOLT=m
 CONFIG_MXM_WMI=m
 CONFIG_PEAQ_WMI=m
 CONFIG_XIAOMI_WMI=m
+CONFIG_GIGABYTE_WMI=m
 CONFIG_ACERHDF=m
 CONFIG_ACER_WIRELESS=m
 CONFIG_ACER_WMI=m
 CONFIG_AMD_PMC=m
+CONFIG_ADV_SWBUTTON=m
 CONFIG_APPLE_GMUX=m
 CONFIG_ASUS_LAPTOP=m
 CONFIG_ASUS_WIRELESS=m
@@ -8022,6 +8109,7 @@ CONFIG_DELL_SMBIOS_WMI=y
 CONFIG_DELL_SMBIOS_SMM=y
 CONFIG_DELL_SMO8800=m
 CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_WMI_DESCRIPTOR=m
 CONFIG_DELL_WMI_LED=m
@@ -8031,7 +8119,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+CONFIG_WIRELESS_HOTKEY=m
 CONFIG_HP_WMI=m
 CONFIG_IBM_RTL=m
 CONFIG_IDEAPAD_LAPTOP=m
@@ -8043,8 +8131,11 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_THINKPAD_LMI=m
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
 CONFIG_INTEL_CHT_INT33FE=m
+CONFIG_INTEL_SKL_INT3472=m
+CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8070,6 +8161,7 @@ CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_MLX_PLATFORM=m
 CONFIG_TOUCHSCREEN_DMI=y
+CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
@@ -8129,24 +8221,34 @@ CONFIG_SURFACE_3_BUTTON=m
 CONFIG_SURFACE_3_POWER_OPREGION=m
 CONFIG_SURFACE_ACPI_NOTIFY=m
 CONFIG_SURFACE_AGGREGATOR_CDEV=m
+CONFIG_SURFACE_AGGREGATOR_REGISTRY=m
+CONFIG_SURFACE_DTX=m
 CONFIG_SURFACE_GPE=m
 CONFIG_SURFACE_HOTPLUG=m
+CONFIG_SURFACE_PLATFORM_PROFILE=m
 CONFIG_SURFACE_PRO3_BUTTON=m
 CONFIG_SURFACE_AGGREGATOR=m
 CONFIG_SURFACE_AGGREGATOR_BUS=y
 # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+CONFIG_LMK04832=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_SI5341=m
 CONFIG_COMMON_CLK_SI5351=m
 CONFIG_COMMON_CLK_SI544=m
 CONFIG_COMMON_CLK_CDCE706=m
 CONFIG_COMMON_CLK_CS2000_CP=m
-CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_PWM=m
@@ -8178,6 +8280,7 @@ CONFIG_IOMMU_IO_PGTABLE=y
 # CONFIG_IOMMU_DEBUGFS is not set
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_IOMMU_DMA=y
+CONFIG_IOMMU_SVA_LIB=y
 CONFIG_AMD_IOMMU=y
 CONFIG_AMD_IOMMU_V2=y
 CONFIG_DMAR_TABLE=y
@@ -8188,6 +8291,7 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
 CONFIG_IRQ_REMAP=y
 CONFIG_HYPERV_IOMMU=y
+CONFIG_VIRTIO_IOMMU=m
 
 #
 # Remoteproc drivers
@@ -8281,7 +8385,6 @@ CONFIG_EXTCON=y
 # Extcon Device Drivers
 #
 CONFIG_EXTCON_ADC_JACK=m
-CONFIG_EXTCON_ARIZONA=m
 CONFIG_EXTCON_AXP288=m
 CONFIG_EXTCON_FSA9480=m
 CONFIG_EXTCON_GPIO=m
@@ -8332,10 +8435,15 @@ CONFIG_BMA400_SPI=m
 CONFIG_BMC150_ACCEL=m
 CONFIG_BMC150_ACCEL_I2C=m
 CONFIG_BMC150_ACCEL_SPI=m
+CONFIG_BMI088_ACCEL=m
+CONFIG_BMI088_ACCEL_SPI=m
 CONFIG_DA280=m
 CONFIG_DA311=m
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+CONFIG_FXLS8962AF=m
+CONFIG_FXLS8962AF_I2C=m
+CONFIG_FXLS8962AF_SPI=m
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -8357,6 +8465,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+CONFIG_SCA3300=m
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -8422,8 +8531,10 @@ CONFIG_TI_ADC128S052=m
 CONFIG_TI_ADC161S626=m
 CONFIG_TI_ADS1015=m
 CONFIG_TI_ADS7950=m
+CONFIG_TI_ADS131E08=m
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+CONFIG_TI_TSC2046=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VIPERBOARD_ADC=m
@@ -8443,6 +8554,12 @@ CONFIG_HMC425=m
 # end of Amplifiers
 
 #
+# Capacitance to digital converters
+#
+CONFIG_AD7150=m
+# end of Capacitance to digital converters
+
+#
 # Chemical Sensors
 #
 CONFIG_ATLAS_PH_SENSOR=m
@@ -8458,6 +8575,8 @@ CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
 CONFIG_SPS30=m
+CONFIG_SPS30_I2C=m
+CONFIG_SPS30_SERIAL=m
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -8475,6 +8594,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 CONFIG_IIO_MS_SENSORS_I2C=m
 
 #
+# IIO SCMI Sensors
+#
+# end of IIO SCMI Sensors
+
+#
 # SSP Sensor Common
 #
 CONFIG_IIO_SSP_SENSORS_COMMONS=m
@@ -8625,6 +8749,9 @@ CONFIG_INV_MPU6050_SPI=m
 CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
+CONFIG_IIO_ST_LSM9DS0=m
+CONFIG_IIO_ST_LSM9DS0_I2C=m
+CONFIG_IIO_ST_LSM9DS0_SPI=m
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -8676,6 +8803,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+CONFIG_TSL2591=m
 CONFIG_TSL2772=m
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -8799,6 +8927,7 @@ CONFIG_AS3935=m
 #
 # Proximity and distance sensors
 #
+CONFIG_CROS_EC_MKBP_PROXIMITY=m
 CONFIG_ISL29501=m
 CONFIG_LIDAR_LITE_V2=m
 CONFIG_MB1232=m
@@ -8830,6 +8959,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+CONFIG_TMP117=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -8873,7 +9003,6 @@ CONFIG_IPACK_BUS=m
 CONFIG_BOARD_TPCI200=m
 CONFIG_SERIAL_IPOCTAL=m
 CONFIG_RESET_CONTROLLER=y
-CONFIG_RESET_BRCMSTB_RESCAL=y
 CONFIG_RESET_TI_SYSCON=m
 
 #
@@ -8881,6 +9010,7 @@ CONFIG_RESET_TI_SYSCON=m
 #
 CONFIG_GENERIC_PHY=y
 CONFIG_USB_LGM_PHY=m
+CONFIG_PHY_CAN_TRANSCEIVER=m
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_PXA_28NM_HSIC=m
 CONFIG_PHY_PXA_28NM_USB2=m
@@ -9005,9 +9135,12 @@ CONFIG_SLIMBUS=m
 CONFIG_SLIM_QCOM_CTRL=m
 CONFIG_INTERCONNECT=y
 CONFIG_COUNTER=m
+CONFIG_INTERRUPT_CNT=m
+CONFIG_INTEL_QEP=m
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
+CONFIG_MOST_SND=m
 # end of Device Drivers
 
 #
@@ -9117,6 +9250,8 @@ CONFIG_OVERLAY_FS_METACOPY=y
 #
 # Caches
 #
+CONFIG_NETFS_SUPPORT=m
+CONFIG_NETFS_STATS=y
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
 # CONFIG_FSCACHE_HISTOGRAM is not set
@@ -9169,6 +9304,8 @@ CONFIG_TMPFS_XATTR=y
 CONFIG_TMPFS_INODE64=y
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y
+# CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON is not set
 CONFIG_MEMFD_CREATE=y
 CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
 CONFIG_CONFIGFS_FS=y
@@ -9265,7 +9402,6 @@ CONFIG_EROFS_FS_XATTR=y
 CONFIG_EROFS_FS_POSIX_ACL=y
 CONFIG_EROFS_FS_SECURITY=y
 CONFIG_EROFS_FS_ZIP=y
-CONFIG_EROFS_FS_CLUSTER_PAGE_LIMIT=2
 CONFIG_VBOXSF_FS=m
 CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=m
@@ -9303,7 +9439,7 @@ CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
 CONFIG_NFS_ACL_SUPPORT=m
 CONFIG_NFS_COMMON=y
-CONFIG_NFS_V4_2_SSC_HELPER=m
+CONFIG_NFS_V4_2_SSC_HELPER=y
 CONFIG_SUNRPC=m
 CONFIG_SUNRPC_GSS=m
 CONFIG_SUNRPC_BACKCHANNEL=y
@@ -9452,6 +9588,7 @@ CONFIG_SECURITY_LOCKDOWN_LSM=y
 CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
 # CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set
 # CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set
+CONFIG_SECURITY_LANDLOCK=y
 # CONFIG_INTEGRITY is not set
 # CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
 # CONFIG_DEFAULT_SECURITY_SELINUX is not set
@@ -9459,7 +9596,7 @@ CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y
 # CONFIG_DEFAULT_SECURITY_TOMOYO is not set
 # CONFIG_DEFAULT_SECURITY_APPARMOR is not set
 CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_LSM="lockdown,yama,bpf"
+CONFIG_LSM="landlock,lockdown,yama,bpf"
 
 #
 # Kernel hardening options
@@ -9534,6 +9671,7 @@ CONFIG_CRYPTO_RSA=y
 CONFIG_CRYPTO_DH=y
 CONFIG_CRYPTO_ECC=m
 CONFIG_CRYPTO_ECDH=m
+CONFIG_CRYPTO_ECDSA=m
 CONFIG_CRYPTO_ECRDSA=m
 CONFIG_CRYPTO_SM2=m
 CONFIG_CRYPTO_CURVE25519=m
@@ -9789,10 +9927,10 @@ CONFIG_842_COMPRESS=m
 CONFIG_842_DECOMPRESS=m
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_COMPRESS=m
 CONFIG_LZO_DECOMPRESS=y
 CONFIG_LZ4_COMPRESS=y
-CONFIG_LZ4HC_COMPRESS=y
+CONFIG_LZ4HC_COMPRESS=m
 CONFIG_LZ4_DECOMPRESS=y
 CONFIG_ZSTD_COMPRESS=y
 CONFIG_ZSTD_DECOMPRESS=y
@@ -9890,10 +10028,10 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
+CONFIG_ASN1_ENCODER=m
 
 #
 # Kernel hacking
@@ -9904,6 +10042,7 @@ CONFIG_PLDMFW=y
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+# CONFIG_STACKTRACE_BUILD_ID is not set
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=1
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -9993,9 +10132,10 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
 CONFIG_KFENCE_STATIC_KEYS=y
-CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_KFENCE_SAMPLE_INTERVAL=100
 CONFIG_KFENCE_NUM_OBJECTS=255
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
+CONFIG_KFENCE_BUG_ON_DATA_CORRUPTION=y
 # end of Memory Debugging
 
 CONFIG_DEBUG_SHIRQ=y
@@ -10080,7 +10220,6 @@ CONFIG_DEBUG_CREDENTIALS=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10115,12 +10254,15 @@ CONFIG_FUNCTION_GRAPH_TRACER=y
 CONFIG_DYNAMIC_FTRACE=y
 CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
 CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_STACK_TRACER=y
 # CONFIG_IRQSOFF_TRACER is not set
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+CONFIG_OSNOISE_TRACER=y
+CONFIG_TIMERLAT_TRACER=y
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -10195,9 +10337,9 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 # CONFIG_KCOV is not set
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_MIN_HEAP is not set
 # CONFIG_TEST_SORT is not set
+# CONFIG_TEST_DIV64 is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_RBTREE_TEST is not set
@@ -10207,10 +10349,12 @@ CONFIG_RUNTIME_TESTING_MENU=y
 CONFIG_ATOMIC64_SELFTEST=y
 CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 # CONFIG_TEST_STRSCPY is not set
 CONFIG_TEST_KSTRTOX=y
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 # CONFIG_TEST_XARRAY is not set
@@ -10239,6 +10383,8 @@ CONFIG_TEST_KSTRTOX=y
 # CONFIG_TEST_HMM is not set
 # CONFIG_TEST_FREE_PAGES is not set
 # CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
+CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set
 # end of Kernel Testing and Coverage

From 9754fd489449d9df05eeeecf6bff7bcd720a4b86 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 01:31:44 +0000
Subject: [PATCH 7/23] updpkg: libre/linux-libre-pae 5.14.11-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
index c5e5b05..46cfcfa 100644
--- a/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+++ b/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
@@ -1,7 +1,7 @@
-From 90de407f12e8ed9cb361678882c2af236b06107e Mon Sep 17 00:00:00 2001
+From f76db6fc04fadf872a138740592b4e8ec9ba9149 Mon Sep 17 00:00:00 2001
 From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
 Date: Mon, 16 Sep 2019 04:53:20 +0200
-Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged
+Subject: [PATCH 1/6] ZEN: Add sysctl and CONFIG to disallow unprivileged
  CLONE_NEWUSER
 
 Our default behavior continues to match the vanilla kernel.
@@ -14,10 +14,10 @@ Our default behavior continues to match the vanilla kernel.
  5 files changed, 53 insertions(+)
 
 diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index bfa6463f8a95..27aa2bd5e50a 100644
+index eb70cabe6e7f..dda54e3bc47c 100644
 --- a/include/linux/user_namespace.h
 +++ b/include/linux/user_namespace.h
-@@ -116,6 +116,8 @@ void put_ucounts(struct ucounts *ucounts);
+@@ -137,6 +137,8 @@ static inline void set_rlimit_ucount_max(struct user_namespace *ns,
  
  #ifdef CONFIG_USER_NS
  
@@ -26,7 +26,7 @@ index bfa6463f8a95..27aa2bd5e50a 100644
  static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
  {
  	if (ns)
-@@ -149,6 +151,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
+@@ -170,6 +172,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
  struct ns_common *ns_get_owner(struct ns_common *ns);
  #else
  
@@ -36,10 +36,10 @@ index bfa6463f8a95..27aa2bd5e50a 100644
  {
  	return &init_user_ns;
 diff --git a/init/Kconfig b/init/Kconfig
-index a61c92066c2e..6a2920f2e2ad 100644
+index 55f9f7738ebb..33c6a820ac08 100644
 --- a/init/Kconfig
 +++ b/init/Kconfig
-@@ -1195,6 +1195,22 @@ config USER_NS
+@@ -1198,6 +1198,22 @@ config USER_NS
  
  	  If unsure, say N.
  
@@ -63,7 +63,7 @@ index a61c92066c2e..6a2920f2e2ad 100644
  	bool "PID Namespaces"
  	default y
 diff --git a/kernel/fork.c b/kernel/fork.c
-index 567fee340500..f8ad32116152 100644
+index cbba21e3a58d..7267d46c29ea 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -98,6 +98,10 @@
@@ -77,7 +77,7 @@ index 567fee340500..f8ad32116152 100644
  #include <asm/pgalloc.h>
  #include <linux/uaccess.h>
  #include <asm/mmu_context.h>
-@@ -1871,6 +1875,10 @@ static __latent_entropy struct task_struct *copy_process(
+@@ -1877,6 +1881,10 @@ static __latent_entropy struct task_struct *copy_process(
  	if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
  		return ERR_PTR(-EINVAL);
  
@@ -88,7 +88,7 @@ index 567fee340500..f8ad32116152 100644
  	/*
  	 * Thread groups must share signals as well, and detached threads
  	 * can only be started up within the thread group.
-@@ -2973,6 +2981,12 @@ int ksys_unshare(unsigned long unshare_flags)
+@@ -2981,6 +2989,12 @@ int ksys_unshare(unsigned long unshare_flags)
  	if (unshare_flags & CLONE_NEWNS)
  		unshare_flags |= CLONE_FS;
  
@@ -102,10 +102,10 @@ index 567fee340500..f8ad32116152 100644
  	if (err)
  		goto bad_unshare_out;
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index d4a78e08f6d8..0260dfe2daff 100644
+index 272f4a272f8c..760e8a2d815d 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -103,6 +103,9 @@
+@@ -105,6 +105,9 @@
  #ifdef CONFIG_LOCKUP_DETECTOR
  #include <linux/nmi.h>
  #endif
@@ -115,7 +115,7 @@ index d4a78e08f6d8..0260dfe2daff 100644
  
  #if defined(CONFIG_SYSCTL)
  
-@@ -1896,6 +1899,15 @@ static struct ctl_table kern_table[] = {
+@@ -1908,6 +1911,15 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= proc_dointvec,
  	},
  #endif
@@ -132,7 +132,7 @@ index d4a78e08f6d8..0260dfe2daff 100644
  	{
  		.procname	= "tainted",
 diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 27670ab7a4ed..300c72d2a381 100644
+index ef82d401dde8..5a6c2e07174b 100644
 --- a/kernel/user_namespace.c
 +++ b/kernel/user_namespace.c
 @@ -21,6 +21,13 @@
@@ -150,5 +150,5 @@ index 27670ab7a4ed..300c72d2a381 100644
  static DEFINE_MUTEX(userns_state_mutex);
  
 -- 
-2.32.0
+2.33.0
 
diff --git a/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch b/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
new file mode 100644
index 0000000..09a894e
--- /dev/null
+++ b/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
@@ -0,0 +1,79 @@
+From 810821eb3b1894f2cfcc29cffd42d193b8fe54a6 Mon Sep 17 00:00:00 2001
+From: Wai Paulo Valerio Wang <waicool20@gmail.com>
+Date: Thu, 8 Jul 2021 04:00:59 +0800
+Subject: [PATCH 2/6] Bluetooth: btusb: Add support for IMC Networks Mediatek
+ Chip
+
+This add supports for IMC Networks Wireless_Device Media Chip
+which contains the MT7921 chipset.
+
+$ lsusb
+
+Bus 001 Device 004: ID 13d3:3563 IMC Networks Wireless_Device
+
+$ cat /sys/kernel/debug/usb/devices
+
+T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
+D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=13d3 ProdID=3563 Rev= 1.00
+S:  Manufacturer=MediaTek Inc.
+S:  Product=Wireless_Device
+S:  SerialNumber=000000000
+C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
+A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
+E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
+I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
+
+Signed-off-by: Wai Paulo Valerio Wang <waicool20@gmail.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+For: https://bugs.archlinux.org/task/72138
+---
+ drivers/bluetooth/btusb.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index bd37d6fb88c2..e13a510e1698 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -414,6 +414,9 @@ static const struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK |
+ 						     BTUSB_WIDEBAND_SPEECH |
+ 						     BTUSB_VALID_LE_STATES },
++	{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
++						     BTUSB_WIDEBAND_SPEECH |
++						     BTUSB_VALID_LE_STATES },
+ 
+ 	/* Additional Realtek 8723AE Bluetooth devices */
+ 	{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
+-- 
+2.33.0
+
diff --git a/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch b/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
deleted file mode 100644
index 574623c..0000000
--- a/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From bdb12383a58d6989a0b1c2f925890948146bbc90 Mon Sep 17 00:00:00 2001
-From: Pauli Virtanen <pav@iki.fi>
-Date: Mon, 26 Jul 2021 21:02:06 +0300
-Subject: [PATCH 2/2] Bluetooth: btusb: check conditions before enabling USB
- ALT 3 for WBS
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some USB BT adapters don't satisfy the MTU requirement mentioned in
-commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS")
-and have ALT 3 setting that produces no/garbled audio. Some adapters
-with larger MTU were also reported to have problems with ALT 3.
-
-Add a flag and check it and MTU before selecting ALT 3, falling back to
-ALT 1. Enable the flag for Realtek, restoring the previous behavior for
-non-Realtek devices.
-
-Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1
-works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3
-works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling
-ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad
-audio) Intel 8087:0a2b.
-
-Signed-off-by: Pauli Virtanen <pav@iki.fi>
-Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS")
-Tested-by: Michał Kępień <kernel@kempniu.pl>
-
-Fixes: https://bugs.archlinux.org/task/71567
----
- drivers/bluetooth/btusb.c | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index 6d23308119d1..e8062d0b7d4d 100644
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -516,6 +516,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
- #define BTUSB_HW_RESET_ACTIVE	12
- #define BTUSB_TX_WAIT_VND_EVT	13
- #define BTUSB_WAKEUP_DISABLE	14
-+#define BTUSB_USE_ALT3_FOR_WBS	15
- 
- struct btusb_data {
- 	struct hci_dev       *hdev;
-@@ -1748,16 +1749,20 @@ static void btusb_work(struct work_struct *work)
- 			/* Bluetooth USB spec recommends alt 6 (63 bytes), but
- 			 * many adapters do not support it.  Alt 1 appears to
- 			 * work for all adapters that do not have alt 6, and
--			 * which work with WBS at all.
-+			 * which work with WBS at all.  Some devices prefer
-+			 * alt 3 (HCI payload >= 60 Bytes let air packet
-+			 * data satisfy 60 bytes), requiring
-+			 * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72
-+			 * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1.
- 			 */
--			new_alts = btusb_find_altsetting(data, 6) ? 6 : 1;
--			/* Because mSBC frames do not need to be aligned to the
--			 * SCO packet boundary. If support the Alt 3, use the
--			 * Alt 3 for HCI payload >= 60 Bytes let air packet
--			 * data satisfy 60 bytes.
--			 */
--			if (new_alts == 1 && btusb_find_altsetting(data, 3))
-+			if (btusb_find_altsetting(data, 6))
-+				new_alts = 6;
-+			else if (test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags) &&
-+					hdev->sco_mtu >= 72 &&
-+					btusb_find_altsetting(data, 3))
- 				new_alts = 3;
-+			else
-+				new_alts = 1;
- 		}
- 
- 		if (btusb_switch_alt_setting(hdev, new_alts) < 0)
-@@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf,
- 		 * (DEVICE_REMOTE_WAKEUP)
- 		 */
- 		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
-+		set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags);
- 	}
- 
- 	if (!reset)
--- 
-2.32.0
-
diff --git a/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch b/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
new file mode 100644
index 0000000..4af5a53
--- /dev/null
+++ b/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
@@ -0,0 +1,71 @@
+From 38c2ca84b97f9d6021c2607e214f99acd84dac2d Mon Sep 17 00:00:00 2001
+From: Aaron Ma <aaron.ma@canonical.com>
+Date: Fri, 23 Jul 2021 01:17:18 +0800
+Subject: [PATCH 3/6] Bluetooth: btusb: Add support for Foxconn Mediatek Chip
+
+Add support for another Foxconn / Hon Hai device with MT7921 chip.
+
+T:  Bus=05 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#=  3 Spd=480  MxCh= 0
+D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0489 ProdID=e0cd Rev= 1.00
+S:  Manufacturer=MediaTek Inc.
+S:  Product=Wireless_Device
+S:  SerialNumber=000000000
+C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
+A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
+E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
+I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
+E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
+
+Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+For: https://bugs.archlinux.org/task/72138
+---
+ drivers/bluetooth/btusb.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index e13a510e1698..aac732cc9612 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -417,6 +417,9 @@ static const struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
+ 						     BTUSB_WIDEBAND_SPEECH |
+ 						     BTUSB_VALID_LE_STATES },
++	{ USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK |
++						     BTUSB_WIDEBAND_SPEECH |
++						     BTUSB_VALID_LE_STATES },
+ 
+ 	/* Additional Realtek 8723AE Bluetooth devices */
+ 	{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
+-- 
+2.33.0
+
diff --git a/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch b/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
new file mode 100644
index 0000000..64b8717
--- /dev/null
+++ b/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
@@ -0,0 +1,64 @@
+From ab60c2d0242fc428a436c25c1144f6acd9d6f419 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:27 +0200
+Subject: [PATCH 4/6] ALSA: pcm: Check mmap capability of runtime dma buffer at
+ first
+
+Currently we check only the substream->dma_buffer as the preset of the
+buffer configuration for verifying the availability of mmap.  But a
+few drivers rather set up the buffer in the own way without the
+standard buffer preallocation using substream->dma_buffer, and they
+miss the proper checks.  (Now it's working more or less fine as most
+of them are running only on x86).
+
+Actually, they may set up the runtime dma_buffer (referred via
+snd_pcm_get_dma_buf()) at the open callback, though.  That is, this
+could have been used as the primary source.
+
+This patch changes the hw_support_mmap() function to check the runtime
+dma buffer at first.  It's usually NULL with the standard buffer
+preallocation, and in that case, we continue checking
+substream->dma_buffer as fallback.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/core/pcm_native.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
+index 71323d807dbf..dc9fa312fadd 100644
+--- a/sound/core/pcm_native.c
++++ b/sound/core/pcm_native.c
+@@ -243,13 +243,18 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream,
+ 
+ static bool hw_support_mmap(struct snd_pcm_substream *substream)
+ {
++	struct snd_dma_buffer *dmabuf;
++
+ 	if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP))
+ 		return false;
+ 
+ 	if (substream->ops->mmap || substream->ops->page)
+ 		return true;
+ 
+-	switch (substream->dma_buffer.dev.type) {
++	dmabuf = snd_pcm_get_dma_buf(substream);
++	if (!dmabuf)
++		dmabuf = &substream->dma_buffer;
++	switch (dmabuf->dev.type) {
+ 	case SNDRV_DMA_TYPE_UNKNOWN:
+ 		/* we can't know the device, so just assume that the driver does
+ 		 * everything right
+@@ -259,7 +264,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
+ 	case SNDRV_DMA_TYPE_VMALLOC:
+ 		return true;
+ 	default:
+-		return dma_can_mmap(substream->dma_buffer.dev.dev);
++		return dma_can_mmap(dmabuf->dev.dev);
+ 	}
+ }
+ 
+-- 
+2.33.0
+
diff --git a/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch b/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
new file mode 100644
index 0000000..f1d7db9
--- /dev/null
+++ b/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
@@ -0,0 +1,75 @@
+From 7b0c23ec626e579ffa7ef239cac20dc7fa1797e9 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:28 +0200
+Subject: [PATCH 5/6] ALSA: pci: rme: Set up buffer type properly
+
+Although the regression of the mmap was fixed in the recent commit
+dc0dc8a73e8e ("ALSA: pcm: Fix mmap breakage without explicit buffer
+setup"), RME9652 and HDSP drivers have still potential issues with
+their mmap handling.  Namely, they use the default mmap handler
+without the standard buffer preallocation, and PCM core wouldn't use
+the coherent DMA mapping.  It's practically OK on x86, but on some
+exotic architectures, it wouldn't work.
+
+This patch addresses the potential breakage by replacing the buffer
+setup with the proper macro.  It also simplifies the source code,
+too.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/pci/rme9652/hdsp.c    | 6 ++----
+ sound/pci/rme9652/rme9652.c | 6 ++----
+ 2 files changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
+index 8457a4bbc3df..22b8b3357918 100644
+--- a/sound/pci/rme9652/hdsp.c
++++ b/sound/pci/rme9652/hdsp.c
+@@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+         runtime->hw = snd_hdsp_playback_subinfo;
+-	runtime->dma_area = hdsp->playback_buffer;
+-	runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf);
+ 
+ 	hdsp->playback_pid = current->pid;
+ 	hdsp->playback_substream = substream;
+@@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+ 	runtime->hw = snd_hdsp_capture_subinfo;
+-	runtime->dma_area = hdsp->capture_buffer;
+-	runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf);
+ 
+ 	hdsp->capture_pid = current->pid;
+ 	hdsp->capture_substream = substream;
+diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
+index f1aad38760d6..9ad2533925c4 100644
+--- a/sound/pci/rme9652/rme9652.c
++++ b/sound/pci/rme9652/rme9652.c
+@@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+         runtime->hw = snd_rme9652_playback_subinfo;
+-	runtime->dma_area = rme9652->playback_buffer;
+-	runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &rme9652->playback_dma_buf);
+ 
+ 	if (rme9652->capture_substream == NULL) {
+ 		rme9652_stop(rme9652);
+@@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream)
+ 	snd_pcm_set_sync(substream);
+ 
+ 	runtime->hw = snd_rme9652_capture_subinfo;
+-	runtime->dma_area = rme9652->capture_buffer;
+-	runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
++	snd_pcm_set_runtime_buffer(substream, &rme9652->capture_dma_buf);
+ 
+ 	if (rme9652->playback_substream == NULL) {
+ 		rme9652_stop(rme9652);
+-- 
+2.33.0
+
diff --git a/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch b/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
new file mode 100644
index 0000000..0305e70
--- /dev/null
+++ b/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
@@ -0,0 +1,95 @@
+From b5ed7b38f5551c5dfca87ab29d679f3d6d327557 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 9 Aug 2021 09:18:29 +0200
+Subject: [PATCH 6/6] ALSA: pci: cs46xx: Fix set up buffer type properly
+
+CS46xx driver switches the buffer depending on the number of periods,
+and in some cases it switches to the own buffer without updating the
+buffer type properly.  This may cause a problem with the mmap on
+exotic architectures that require the own mmap call for the coherent
+DMA buffer.
+
+This patch addresses the potential breakage by replacing the buffer
+setup with the proper macro.  It also simplifies the source code,
+too.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Fixes: https://bugs.archlinux.org/task/72059
+---
+ sound/pci/cs46xx/cs46xx_lib.c | 30 ++++++++----------------------
+ 1 file changed, 8 insertions(+), 22 deletions(-)
+
+diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
+index 1e1eb17f8e07..d43927dcd61e 100644
+--- a/sound/pci/cs46xx/cs46xx_lib.c
++++ b/sound/pci/cs46xx/cs46xx_lib.c
+@@ -1121,9 +1121,7 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream,
+ 	if (params_periods(hw_params) == CS46XX_FRAGS) {
+ 		if (runtime->dma_area != cpcm->hw_buf.area)
+ 			snd_pcm_lib_free_pages(substream);
+-		runtime->dma_area = cpcm->hw_buf.area;
+-		runtime->dma_addr = cpcm->hw_buf.addr;
+-		runtime->dma_bytes = cpcm->hw_buf.bytes;
++		snd_pcm_set_runtime_buffer(substream, &cpcm->hw_buf);
+ 
+ 
+ #ifdef CONFIG_SND_CS46XX_NEW_DSP
+@@ -1143,11 +1141,8 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream,
+ #endif
+ 
+ 	} else {
+-		if (runtime->dma_area == cpcm->hw_buf.area) {
+-			runtime->dma_area = NULL;
+-			runtime->dma_addr = 0;
+-			runtime->dma_bytes = 0;
+-		}
++		if (runtime->dma_area == cpcm->hw_buf.area)
++			snd_pcm_set_runtime_buffer(substream, NULL);
+ 		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+ 		if (err < 0) {
+ #ifdef CONFIG_SND_CS46XX_NEW_DSP
+@@ -1196,9 +1191,7 @@ static int snd_cs46xx_playback_hw_free(struct snd_pcm_substream *substream)
+ 	if (runtime->dma_area != cpcm->hw_buf.area)
+ 		snd_pcm_lib_free_pages(substream);
+     
+-	runtime->dma_area = NULL;
+-	runtime->dma_addr = 0;
+-	runtime->dma_bytes = 0;
++	snd_pcm_set_runtime_buffer(substream, NULL);
+ 
+ 	return 0;
+ }
+@@ -1287,16 +1280,11 @@ static int snd_cs46xx_capture_hw_params(struct snd_pcm_substream *substream,
+ 	if (runtime->periods == CS46XX_FRAGS) {
+ 		if (runtime->dma_area != chip->capt.hw_buf.area)
+ 			snd_pcm_lib_free_pages(substream);
+-		runtime->dma_area = chip->capt.hw_buf.area;
+-		runtime->dma_addr = chip->capt.hw_buf.addr;
+-		runtime->dma_bytes = chip->capt.hw_buf.bytes;
++		snd_pcm_set_runtime_buffer(substream, &chip->capt.hw_buf);
+ 		substream->ops = &snd_cs46xx_capture_ops;
+ 	} else {
+-		if (runtime->dma_area == chip->capt.hw_buf.area) {
+-			runtime->dma_area = NULL;
+-			runtime->dma_addr = 0;
+-			runtime->dma_bytes = 0;
+-		}
++		if (runtime->dma_area == chip->capt.hw_buf.area)
++			snd_pcm_set_runtime_buffer(substream, NULL);
+ 		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+ 		if (err < 0)
+ 			return err;
+@@ -1313,9 +1301,7 @@ static int snd_cs46xx_capture_hw_free(struct snd_pcm_substream *substream)
+ 
+ 	if (runtime->dma_area != chip->capt.hw_buf.area)
+ 		snd_pcm_lib_free_pages(substream);
+-	runtime->dma_area = NULL;
+-	runtime->dma_addr = 0;
+-	runtime->dma_bytes = 0;
++	snd_pcm_set_runtime_buffer(substream, NULL);
+ 
+ 	return 0;
+ }
+-- 
+2.33.0
+
diff --git a/libre/linux-libre-pae/PKGBUILD b/libre/linux-libre-pae/PKGBUILD
index 912bfad..42e4b06 100644
--- a/libre/linux-libre-pae/PKGBUILD
+++ b/libre/linux-libre-pae/PKGBUILD
@@ -9,7 +9,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix
 _replacesoldmodules=() # '%' gets replaced with kernel suffix
 
 pkgbase=linux-libre-pae
-pkgver=5.13.9
+pkgver=5.14.11
 pkgrel=1
 pkgdesc='Linux-libre PAE (physical address extension)'
 url='https://linux-libre.fsfla.org/'
@@ -20,7 +20,7 @@ makedepends=(
   xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick
 )
 options=('!strip')
-_srcname=linux-5.13
+_srcname=linux-5.14
 source=(
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign}
@@ -36,15 +36,19 @@ source=(
   0002-fix-Atmel-maXTouch-touchscreen-support.patch
   # Arch Linux patches
   0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
-  0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch
+  0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch
+  0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch
+  0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch
+  0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch
+  0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch
 )
 validpgpkeys=(
   '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
   '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
 )
-sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121'
+sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c'
             'SKIP'
-            '8f1b7cb25e22f241567f3b78c66a2203d6c3746e464be7f7ddfcc42198fb41f7a4a179820ca2aa751c53098652b14789c204d9057bdfe6b6927dec68c1d26eec'
+            '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1'
             'SKIP'
             '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
             'SKIP'
@@ -52,11 +56,15 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c
             'SKIP'
             '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
             'SKIP'
-            '2f35c40ecff2de26048122dac3b60639012a8aaaa887f2de20c4865c6607e6f8caad540bfcec21cb3d7f38cdba94c975f0867a13b69116723ce6683403ccea32'
+            '176fe512658e8a958214225c7873aa1df597c5d69c515ab20f7495fa922b2b3e9b6715be96d5b7eb2438476db4a70992e4caa946b0f85401923ab402d6e41c63'
             '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
             'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168'
-            'fac53c8ce68e9f56c8930a9392c89377c909f6a43a318010194949def91a104f34f46c2b32457e571435a8b326c47a48737ceb6255644bb6d42c59b27b07449a'
-            '722d92b750f0a5af39b850c18ff0c57dac0165e3c0219415843ec5207945971448790fec3fca570b62c8726c89b0ca6b7a5b16fd503e4581b3a63b3adfcf2c50')
+            'dba36283b9ea3db5fcc9a72051a8e9cf4d409ec59769e6da9db4d321b72972242670210ad961a37f62aba68f7262e9f2f6308cfe62cda9fa050c72363a0c404a'
+            '693ac0e0e32cd0ab6c485deb43d6408dc9fc31234e4113206cf901a302eddf1a965f97f82ed7186f6426c085176ce95c48e116e9824d92bfd1f6656447da18dc'
+            'c4a19ccec8b7636f1b5b1cf8e135e46d3aa4d233af4a1e72c2aaa83536505013f0c83602fe05ce08212b4327bebfb4f8a84b57c0d81509f0b48df5dfcc334254'
+            '4d81c2995e7cc5fc36929eb5bf9cc68ec02cb24147f18a88da79facd3e25182b156ca4430bf2765ff1e4c6be237d3a3e527498cd49d75217a5e16b62a478be6d'
+            '12c0da7fbd4e4e6ffc473ecd6dffee1dd61c201dad854347400c8f551adc35c033d6fa623cc5c1b2fe7930cdab868a8c99c6874ee171c9143e0f370398759c96'
+            '7f6fd402d8c29ee4f6c98ed2236318ab3f57f3dd47a92911e1b556df251b67fc83f7256223f06d1fefa849a3ceb5e40d247d2d5664ddd7cd9749bab4bc1ecb36')
 
 _replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}")
 _replacesoldkernels=("${_replacesoldkernels[@]/\%/${pkgbase#linux-libre}}")
@@ -95,6 +103,7 @@ prepare() {
   echo "Setting config..."
   cp ../config .config
   make olddefconfig
+  diff -u ../config .config || :
 
   make -s kernelrelease > version
   echo "Prepared $pkgbase version $(<version)"
diff --git a/libre/linux-libre-pae/config b/libre/linux-libre-pae/config
index a17c94c..8b8d56a 100644
--- a/libre/linux-libre-pae/config
+++ b/libre/linux-libre-pae/config
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.13.9-gnu Kernel Configuration
+# Linux/x86 5.14.11-gnu Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -16,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -118,6 +119,7 @@ CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+# CONFIG_SCHED_CORE is not set
 
 #
 # CPU/Task time and stats accounting
@@ -321,7 +323,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_MPPARSE=y
@@ -455,7 +456,6 @@ CONFIG_ILLEGAL_POINTER_VALUE=0
 # CONFIG_HIGHPTE is not set
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -581,7 +581,6 @@ CONFIG_PMIC_OPREGION=y
 CONFIG_XPOWER_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
-CONFIG_TPS68470_PMIC_OPREGION=y
 CONFIG_X86_PM_TIMER=y
 CONFIG_X86_APM_BOOT=y
 CONFIG_APM=y
@@ -747,6 +746,7 @@ CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 # CONFIG_KVM_WERROR is not set
@@ -792,6 +792,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_ARCH_32BIT_OFF_T=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
@@ -822,6 +823,8 @@ CONFIG_HAVE_ARCH_STACKLEAK=y
 CONFIG_HAVE_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
 CONFIG_LTO_NONE=y
 CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -902,9 +905,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+# CONFIG_BLK_CGROUP_FC_APPID is not set
 # CONFIG_BLK_CGROUP_IOCOST is not set
-CONFIG_BLK_WBT_MQ=y
+# CONFIG_BLK_CGROUP_IOPRIO is not set
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -985,7 +990,6 @@ CONFIG_COREDUMP=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
-CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_SPARSEMEM_STATIC=y
 CONFIG_HAVE_FAST_GUP=y
 CONFIG_MEMORY_ISOLATION=y
@@ -1035,6 +1039,8 @@ CONFIG_ZSMALLOC=y
 CONFIG_GENERIC_EARLY_IOREMAP=y
 # CONFIG_IDLE_PAGE_TRACKING is not set
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ARCH_HAS_ZONE_DMA_SET=y
+CONFIG_ZONE_DMA=y
 CONFIG_HMM_MIRROR=y
 CONFIG_VMAP_PFN=y
 # CONFIG_PERCPU_STATS is not set
@@ -1044,6 +1050,7 @@ CONFIG_GUP_GET_PTE_LOW_HIGH=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_KMAP_LOCAL=y
+CONFIG_SECRETMEM=y
 # end of Memory Management options
 
 CONFIG_NET=y
@@ -1185,6 +1192,7 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+# CONFIG_NETFILTER_NETLINK_HOOK is not set
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -1581,7 +1589,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 # CONFIG_BRIDGE_MRP is not set
 # CONFIG_BRIDGE_CFM is not set
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1767,6 +1774,7 @@ CONFIG_NET_L3_MASTER_DEV=y
 # CONFIG_QRTR is not set
 CONFIG_NET_NCSI=y
 # CONFIG_NCSI_OEM_CMD_GET_MAC is not set
+# CONFIG_NCSI_OEM_CMD_KEEP_PHY is not set
 CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
@@ -2351,6 +2359,7 @@ CONFIG_MTD_DATAFLASH=m
 # CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
 CONFIG_MTD_DATAFLASH_OTP=y
 CONFIG_MTD_MCHP23K256=m
+# CONFIG_MTD_MCHP48L640 is not set
 CONFIG_MTD_SST25L=m
 CONFIG_MTD_SLRAM=m
 CONFIG_MTD_PHRAM=m
@@ -2599,9 +2608,6 @@ CONFIG_HABANA_AI=m
 # CONFIG_PVPANIC is not set
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2685,6 +2691,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+# CONFIG_SCSI_MPI3MR is not set
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2738,6 +2745,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+# CONFIG_SCSI_EFCT is not set
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_NSP32=m
@@ -3233,6 +3241,7 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_SAMPLE=y
 CONFIG_MLX5_CORE_EN_DCB=y
@@ -3246,8 +3255,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3363,6 +3370,7 @@ CONFIG_DWMAC_DWC_QOS_ETH=m
 CONFIG_DWMAC_GENERIC=m
 # CONFIG_DWMAC_INTEL_PLAT is not set
 # CONFIG_DWMAC_INTEL is not set
+# CONFIG_DWMAC_LOONGSON is not set
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3429,10 +3437,12 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 # CONFIG_MARVELL_88X2222_PHY is not set
+# CONFIG_MEDIATEK_GE_PHY is not set
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 CONFIG_MICROCHIP_T1_PHY=m
 CONFIG_MICROSEMI_PHY=m
+# CONFIG_MOTORCOMM_PHY is not set
 CONFIG_NATIONAL_PHY=m
 # CONFIG_NXP_C45_TJA11XX_PHY is not set
 CONFIG_NXP_TJA11XX_PHY=m
@@ -3454,7 +3464,9 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
 CONFIG_OF_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -4017,6 +4029,7 @@ CONFIG_JOYSTICK_XPAD_LEDS=y
 CONFIG_JOYSTICK_WALKERA0701=m
 # CONFIG_JOYSTICK_PSXPAD_SPI is not set
 CONFIG_JOYSTICK_PXRC=m
+# CONFIG_JOYSTICK_QWIIC is not set
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -4386,8 +4399,6 @@ CONFIG_PC8736x_GPIO=m
 CONFIG_NSC_GPIO=m
 CONFIG_DEVMEM=y
 CONFIG_NVRAM=m
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=256
 CONFIG_DEVPORT=y
 CONFIG_HPET=y
 CONFIG_HPET_MMAP=y
@@ -4412,9 +4423,11 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
 CONFIG_XILLYBUS_OF=m
+# CONFIG_XILLYUSB is not set
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -4596,6 +4609,7 @@ CONFIG_SPI_SLAVE_TIME=m
 CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m
 CONFIG_SPI_DYNAMIC=y
 CONFIG_SPMI=m
+# CONFIG_SPMI_HISI3670 is not set
 CONFIG_HSI=m
 CONFIG_HSI_BOARDINFO=y
 
@@ -4783,7 +4797,6 @@ CONFIG_GPIO_TPS65218=m
 CONFIG_GPIO_TPS6586X=y
 CONFIG_GPIO_TPS65910=y
 CONFIG_GPIO_TPS65912=m
-CONFIG_GPIO_TPS68470=y
 CONFIG_GPIO_TQMX86=m
 CONFIG_GPIO_TWL4030=m
 CONFIG_GPIO_TWL6040=m
@@ -4955,7 +4968,6 @@ CONFIG_BATTERY_RT5033=m
 CONFIG_CHARGER_RT9455=m
 CONFIG_CHARGER_CROS_USBPD=m
 CONFIG_CHARGER_UCS1002=m
-CONFIG_CHARGER_BD70528=m
 # CONFIG_CHARGER_BD99954 is not set
 CONFIG_CHARGER_WILCO=m
 # CONFIG_RN5T618_POWER is not set
@@ -5092,6 +5104,7 @@ CONFIG_SENSORS_ADM1275=m
 # CONFIG_SENSORS_BPA_RS600 is not set
 # CONFIG_SENSORS_FSP_3Y is not set
 CONFIG_SENSORS_IBM_CFFPS=m
+# CONFIG_SENSORS_DPS920AB is not set
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
 # CONFIG_SENSORS_IR36021 is not set
@@ -5110,7 +5123,9 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+# CONFIG_SENSORS_MP2888 is not set
 # CONFIG_SENSORS_MP2975 is not set
+# CONFIG_SENSORS_PIM4328 is not set
 # CONFIG_SENSORS_PM6764TR is not set
 CONFIG_SENSORS_PXE1610=m
 # CONFIG_SENSORS_Q54SJ108A2 is not set
@@ -5126,6 +5141,7 @@ CONFIG_SENSORS_PWM_FAN=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+# CONFIG_SENSORS_SHT4x is not set
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -5233,6 +5249,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5439,6 +5456,7 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+# CONFIG_MFD_RT4831 is not set
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
 CONFIG_MFD_RK808=m
@@ -5469,7 +5487,6 @@ CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
 CONFIG_MFD_TPS65217=m
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 CONFIG_MFD_TI_LP87565=m
 CONFIG_MFD_TPS65218=m
@@ -5489,7 +5506,7 @@ CONFIG_MFD_TC3589X=y
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
 # CONFIG_MFD_LOCHNAGAR is not set
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5512,6 +5529,7 @@ CONFIG_MFD_STPMIC1=m
 CONFIG_MFD_STMFX=m
 CONFIG_MFD_WCD934X=m
 # CONFIG_MFD_ATC260X_I2C is not set
+# CONFIG_MFD_QCOM_PM8008 is not set
 CONFIG_RAVE_SP_CORE=m
 # CONFIG_MFD_INTEL_M10_BMC is not set
 # end of Multifunction device drivers
@@ -5534,7 +5552,6 @@ CONFIG_REGULATOR_AS3711=m
 CONFIG_REGULATOR_AS3722=m
 CONFIG_REGULATOR_AXP20X=m
 CONFIG_REGULATOR_BCM590XX=m
-CONFIG_REGULATOR_BD70528=m
 # CONFIG_REGULATOR_BD71815 is not set
 CONFIG_REGULATOR_BD71828=m
 CONFIG_REGULATOR_BD718XX=m
@@ -5572,6 +5589,7 @@ CONFIG_REGULATOR_MAX77620=m
 CONFIG_REGULATOR_MAX77650=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+# CONFIG_REGULATOR_MAX8893 is not set
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5594,6 +5612,7 @@ CONFIG_REGULATOR_MT6311=m
 # CONFIG_REGULATOR_MT6315 is not set
 CONFIG_REGULATOR_MT6323=m
 # CONFIG_REGULATOR_MT6358 is not set
+# CONFIG_REGULATOR_MT6359 is not set
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PCA9450=m
@@ -5614,6 +5633,8 @@ CONFIG_REGULATOR_RN5T618=m
 CONFIG_REGULATOR_ROHM=m
 # CONFIG_REGULATOR_RT4801 is not set
 CONFIG_REGULATOR_RT5033=m
+# CONFIG_REGULATOR_RT6160 is not set
+# CONFIG_REGULATOR_RT6245 is not set
 # CONFIG_REGULATOR_RTMV20 is not set
 CONFIG_REGULATOR_S2MPA01=m
 CONFIG_REGULATOR_S2MPS11=m
@@ -5735,6 +5756,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5765,7 +5787,6 @@ CONFIG_DVB_MAX_ADAPTERS=16
 #
 # Media drivers
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5943,7 +5964,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5980,14 +6000,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -6035,6 +6051,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -6204,6 +6221,7 @@ CONFIG_VIDEO_ST_MIPID02=m
 #
 CONFIG_VIDEO_APTINA_PLL=m
 # CONFIG_VIDEO_HI556 is not set
+# CONFIG_VIDEO_IMX208 is not set
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -6396,7 +6414,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6533,7 +6550,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 CONFIG_DRM_DEBUG_SELFTEST=m
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
@@ -6716,10 +6732,12 @@ CONFIG_DRM_PANEL_BRIDGE=y
 CONFIG_DRM_CDNS_DSI=m
 # CONFIG_DRM_CHIPONE_ICN6211 is not set
 # CONFIG_DRM_CHRONTEL_CH7033 is not set
+# CONFIG_DRM_CROS_EC_ANX7688 is not set
 CONFIG_DRM_DISPLAY_CONNECTOR=m
 # CONFIG_DRM_LONTIUM_LT8912B is not set
 # CONFIG_DRM_LONTIUM_LT9611 is not set
 # CONFIG_DRM_LONTIUM_LT9611UXC is not set
+# CONFIG_DRM_ITE_IT66121 is not set
 CONFIG_DRM_LVDS_CODEC=m
 CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m
 # CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -6737,6 +6755,7 @@ CONFIG_DRM_TOSHIBA_TC358767=m
 CONFIG_DRM_TOSHIBA_TC358768=m
 # CONFIG_DRM_TOSHIBA_TC358775 is not set
 CONFIG_DRM_TI_TFP410=m
+# CONFIG_DRM_TI_SN65DSI83 is not set
 CONFIG_DRM_TI_SN65DSI86=m
 CONFIG_DRM_TI_TPD12S015=m
 CONFIG_DRM_ANALOGIX_ANX6345=m
@@ -6760,6 +6779,7 @@ CONFIG_DRM_MXSFB=m
 CONFIG_DRM_ARCPGU=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+# CONFIG_DRM_SIMPLEDRM is not set
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6770,6 +6790,7 @@ CONFIG_TINYDRM_ST7586=m
 CONFIG_TINYDRM_ST7735R=m
 CONFIG_DRM_VBOXVIDEO=m
 # CONFIG_DRM_GUD is not set
+# CONFIG_DRM_HYPERV is not set
 CONFIG_DRM_LEGACY=y
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
@@ -7386,6 +7407,7 @@ CONFIG_SND_SOC_PCM512x=m
 CONFIG_SND_SOC_PCM512x_I2C=m
 CONFIG_SND_SOC_PCM512x_SPI=m
 CONFIG_SND_SOC_RK3328=m
+# CONFIG_SND_SOC_RK817 is not set
 CONFIG_SND_SOC_RL6231=m
 CONFIG_SND_SOC_RL6347A=m
 CONFIG_SND_SOC_RT286=m
@@ -7425,6 +7447,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 # CONFIG_SND_SOC_SIMPLE_MUX is not set
 CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_SSM2305=m
+# CONFIG_SND_SOC_SSM2518 is not set
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -7442,6 +7465,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+# CONFIG_SND_SOC_TFA989X is not set
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -7457,7 +7481,9 @@ CONFIG_SND_SOC_TSCS42XX=m
 CONFIG_SND_SOC_TSCS454=m
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+# CONFIG_SND_SOC_WCD938X_SDW is not set
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
 CONFIG_SND_SOC_WM8524=m
@@ -7484,7 +7510,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 # CONFIG_SND_SOC_ZL38060 is not set
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 CONFIG_SND_SOC_MT6351=m
 CONFIG_SND_SOC_MT6358=m
@@ -8279,7 +8304,7 @@ CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
 CONFIG_INFINIBAND_MTHCA=m
 CONFIG_INFINIBAND_MTHCA_DEBUG=y
 CONFIG_INFINIBAND_CXGB4=m
-CONFIG_INFINIBAND_I40IW=m
+# CONFIG_INFINIBAND_IRDMA is not set
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -8560,7 +8585,6 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
@@ -8825,6 +8849,11 @@ CONFIG_STAGING_MEDIA=y
 # CONFIG_INTEL_ATOMISP is not set
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -8838,6 +8867,7 @@ CONFIG_FWTTY_MAX_TOTAL_PORTS=64
 CONFIG_FWTTY_MAX_CARD_PORTS=32
 CONFIG_GS_FPGABOOT=m
 CONFIG_UNISYSSPAR=y
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
 # CONFIG_FB_TFT is not set
 CONFIG_MOST_COMPONENTS=m
 CONFIG_MOST_NET=m
@@ -8851,10 +8881,8 @@ CONFIG_FIELDBUS_DEV=m
 CONFIG_HMS_ANYBUSS_BUS=m
 CONFIG_ARCX_ANYBUS_CONTROLLER=m
 CONFIG_HMS_PROFINET=m
-# CONFIG_KPC2000 is not set
 CONFIG_QLGE=m
 # CONFIG_WFX is not set
-# CONFIG_SPMI_HISI3670 is not set
 # CONFIG_MFD_HI6421_SPMI is not set
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACPI_WMI=m
@@ -8884,7 +8912,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+# CONFIG_WIRELESS_HOTKEY is not set
 CONFIG_HP_WMI=m
 CONFIG_TC1100_WMI=m
 CONFIG_IBM_RTL=m
@@ -8897,9 +8925,12 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+# CONFIG_THINKPAD_LMI is not set
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
+CONFIG_INTEL_CHT_INT33FE=m
+# CONFIG_INTEL_SKL_INT3472 is not set
 CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_ATOMISP2_PM=m
-CONFIG_INTEL_CHT_INT33FE=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8970,10 +9001,18 @@ CONFIG_SURFACE_3_POWER_OPREGION=m
 CONFIG_SURFACE_PRO3_BUTTON=m
 # CONFIG_SURFACE_AGGREGATOR is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+# CONFIG_LMK04832 is not set
 CONFIG_COMMON_CLK_MAX77686=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_RK808=m
@@ -9032,6 +9071,7 @@ CONFIG_INTEL_IOMMU=y
 CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 # CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON is not set
 CONFIG_HYPERV_IOMMU=y
+# CONFIG_VIRTIO_IOMMU is not set
 
 #
 # Remoteproc drivers
@@ -9179,6 +9219,8 @@ CONFIG_DA311=m
 CONFIG_DMARD06=m
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+# CONFIG_FXLS8962AF_I2C is not set
+# CONFIG_FXLS8962AF_SPI is not set
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -9200,6 +9242,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+# CONFIG_SCA3300 is not set
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -9278,6 +9321,7 @@ CONFIG_TI_ADS124S08=m
 # CONFIG_TI_ADS131E08 is not set
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+# CONFIG_TI_TSC2046 is not set
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VF610_ADC=m
@@ -9319,7 +9363,8 @@ CONFIG_SCD30_CORE=m
 CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
-CONFIG_SPS30=m
+# CONFIG_SPS30_I2C is not set
+# CONFIG_SPS30_SERIAL is not set
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -9495,6 +9540,7 @@ CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
 CONFIG_IIO_ST_LSM6DSX_I3C=m
+# CONFIG_IIO_ST_LSM9DS0 is not set
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -9547,6 +9593,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+# CONFIG_TSL2591 is not set
 CONFIG_TSL2772=m
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -9704,6 +9751,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+# CONFIG_TMP117 is not set
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -9776,6 +9824,7 @@ CONFIG_RESET_TI_SYSCON=m
 CONFIG_GENERIC_PHY=y
 CONFIG_GENERIC_PHY_MIPI_DPHY=y
 # CONFIG_USB_LGM_PHY is not set
+# CONFIG_PHY_CAN_TRANSCEIVER is not set
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_CADENCE_TORRENT=m
 CONFIG_PHY_CADENCE_DPHY=m
@@ -9907,6 +9956,7 @@ CONFIG_COUNTER=m
 # CONFIG_INTERRUPT_CNT is not set
 CONFIG_FTM_QUADDEC=m
 CONFIG_MICROCHIP_TCB_CAPTURE=m
+# CONFIG_INTEL_QEP is not set
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
@@ -10721,7 +10771,6 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
@@ -10736,6 +10785,7 @@ CONFIG_ASN1_ENCODER=m
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+# CONFIG_STACKTRACE_BUILD_ID is not set
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=4
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -10756,7 +10806,7 @@ CONFIG_STRIP_ASM_SYMS=y
 # CONFIG_HEADERS_INSTALL is not set
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
 CONFIG_SECTION_MISMATCH_WARN_ONLY=y
-# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set
+# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set
 CONFIG_FRAME_POINTER=y
 # CONFIG_VMLINUX_MAP is not set
 # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
@@ -10901,7 +10951,6 @@ CONFIG_RCU_REF_SCALE_TEST=m
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10940,6 +10989,8 @@ CONFIG_STACK_TRACER=y
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+# CONFIG_OSNOISE_TRACER is not set
+# CONFIG_TIMERLAT_TRACER is not set
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -11015,7 +11066,6 @@ CONFIG_FUNCTION_ERROR_INJECTION=y
 CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 CONFIG_LKDTM=m
-# CONFIG_TEST_LIST_SORT is not set
 CONFIG_TEST_MIN_HEAP=m
 # CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
@@ -11028,10 +11078,12 @@ CONFIG_REED_SOLOMON_TEST=m
 # CONFIG_ATOMIC64_SELFTEST is not set
 # CONFIG_ASYNC_RAID6_TEST is not set
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 CONFIG_TEST_STRSCPY=m
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 CONFIG_TEST_XARRAY=m
@@ -11058,6 +11110,7 @@ CONFIG_TEST_STACKINIT=m
 CONFIG_TEST_MEMINIT=m
 CONFIG_TEST_FREE_PAGES=m
 CONFIG_TEST_FPU=m
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set

From 40552dfe215ebdc75c54836d13df0a84b92cf105 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 21:08:45 +0000
Subject: [PATCH 8/23] updpkg: libre/linux-libre-pck 5.14.11.pck2-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-pck/PKGBUILD b/libre/linux-libre-pck/PKGBUILD
index a57cfca..ed91294 100644
--- a/libre/linux-libre-pck/PKGBUILD
+++ b/libre/linux-libre-pck/PKGBUILD
@@ -13,7 +13,7 @@ _replacesoldkernels=()
 _replacesoldmodules=()
 
 pkgbase=linux-libre-pck
-pkgver=5.13.9.pck1
+pkgver=5.14.11.pck2
 pkgrel=1
 pkgdesc='Linux-libre PCK'
 url='https://wiki.parabola.nu/PCK'
@@ -21,10 +21,10 @@ arch=(i686 x86_64 armv7h)
 license=(GPL2)
 makedepends=(
   bc kmod libelf pahole cpio perl tar xz
-#  xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick
+  xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick
 )
 options=('!strip')
-_srcname=linux-5.13
+_srcname=linux-5.14
 source=(
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
   "https://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver%.*}-gnu/patch-${_srcname##*-}-gnu-${pkgver%.*}-gnu.xz"{,.sign}
@@ -36,14 +36,14 @@ validpgpkeys=(
   '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
   '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
 )
-sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121'
+sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c'
             'SKIP'
-            '8f1b7cb25e22f241567f3b78c66a2203d6c3746e464be7f7ddfcc42198fb41f7a4a179820ca2aa751c53098652b14789c204d9057bdfe6b6927dec68c1d26eec'
+            '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1'
             'SKIP'
-            '07173b3bf2f0bd9b11f803d0946ce42f981c7f4ec57078efc349386d5dda8c0db37692ffeccb1d2dbb7fe6e243645baafd57c547c1dd0386e4becf257df8510e'
+            'a2ea7c7d8cb863d9e9d41f3cb3cab26f2f86940ee0dacd2fc56689304fe309d0f6b7ed8d4ddf5e4ec05445c3ad4a5fff03e33f9e82a32f4bad338af3168947aa'
             'SKIP'
-            '1e7c176717e3295ce96c7b4d5d8f9efe28a3fd51095368d4ca985661f0b8ae38d92312598b14a1b37ffb29d97a5fe09b9ee75db3f461e4af3b7b5ff8913030cb'
-            'd92eb8d42a3d87c6ced2ef54536141f55ebe5a101d71f7a90b853fe890954388a5460917d2f1c51c73208a8e727c3c1c203525b83554f67d8512e533ba25f832'
+            '443f93a4086bbfe096be06ad084185c0c9ec9ba7913969ffeb426f75052fa6a5fb28d3f61f39f0086720633bc33ffd6f4985d1db53395e0bd43309469cd0ae64'
+            'e5fd36b0ae7b91d0d9590ddcf1dbcd23c0fe772366a6088fb35c09cfd85486913edb65c45a42c1a590cc144c5d092b5925d824146837f42ba326f8b3fefeec7e'
             '6728253ca04a603ef35ceb06b284c509d8ffda6a8c6403fe687afe5d956425588ebbd62bfc5dd1d7fd9a03071a30c7cd86ac72a1fd67cbbf1ebdac85ee703caf'
             '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b')
 
@@ -85,6 +85,7 @@ prepare() {
   echo "Setting config..."
   cp ../config.$CARCH .config
   make olddefconfig
+  diff -u ../config .config || :
 
   make -s kernelrelease > version
   echo "Prepared $pkgbase version $(<version)"
@@ -93,7 +94,7 @@ prepare() {
 build() {
   cd $_srcname
   make all
-#  make htmldocs
+  make htmldocs
 }
 
 _package() {
@@ -260,7 +261,7 @@ _package-docs() {
   ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase"
 }
 
-pkgname=("$pkgbase" "$pkgbase-headers") # "$pkgbase-docs"
+pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
 for _p in "${pkgname[@]}"; do
   eval "package_$_p() {
     $(declare -f "_package${_p#$pkgbase}")
diff --git a/libre/linux-libre-pck/config.i686 b/libre/linux-libre-pck/config.i686
index dc50bfc..ed8470f 100644
--- a/libre/linux-libre-pck/config.i686
+++ b/libre/linux-libre-pck/config.i686
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.13.9-gnu-pck1 Kernel Configuration
+# Linux/x86 5.14.11-gnu-pck1 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -16,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -23,7 +24,6 @@ CONFIG_THREAD_INFO_IN_TASK=y
 #
 # General setup
 #
-# CONFIG_SCHED_MUQSS is not set
 CONFIG_PCK_INTERACTIVE=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
@@ -123,6 +123,7 @@ CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
 
 #
 # CPU/Task time and stats accounting
@@ -177,6 +178,7 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 #
 # Scheduler features
 #
+# CONFIG_SCHED_ALT is not set
 CONFIG_UCLAMP_TASK=y
 CONFIG_UCLAMP_BUCKETS_COUNT=5
 # end of Scheduler features
@@ -329,7 +331,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_MPPARSE=y
@@ -441,8 +442,6 @@ CONFIG_NR_CPUS=8
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_MC=y
 CONFIG_SCHED_MC_PRIO=y
-CONFIG_RQ_NONE=y
-CONFIG_SHARERQ=0
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_IO_APIC=y
 CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -489,7 +488,6 @@ CONFIG_ILLEGAL_POINTER_VALUE=0
 # CONFIG_HIGHPTE is not set
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -612,6 +610,7 @@ CONFIG_XPOWER_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
 CONFIG_TPS68470_PMIC_OPREGION=y
+CONFIG_ACPI_VIOT=y
 CONFIG_X86_PM_TIMER=y
 CONFIG_X86_APM_BOOT=y
 CONFIG_APM=y
@@ -785,6 +784,7 @@ CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -829,6 +829,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_ARCH_32BIT_OFF_T=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
@@ -859,6 +860,8 @@ CONFIG_HAVE_ARCH_STACKLEAK=y
 CONFIG_HAVE_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR=y
 CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
 CONFIG_LTO_NONE=y
 CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -879,7 +882,7 @@ CONFIG_OLD_SIGSUSPEND3=y
 CONFIG_OLD_SIGACTION=y
 CONFIG_COMPAT_32BIT_TIME=y
 CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
-# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
+CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
 CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 CONFIG_STRICT_KERNEL_RWX=y
 CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
@@ -945,9 +948,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_FC_APPID=y
 CONFIG_BLK_CGROUP_IOCOST=y
-CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_CGROUP_IOPRIO=y
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -1030,8 +1035,8 @@ CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_SPARSEMEM_MANUAL is not set
 CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_SPARSEMEM_STATIC=y
+CONFIG_ANON_MIN_KBYTES=0
 CONFIG_CLEAN_LOW_KBYTES=262144
 CONFIG_CLEAN_MIN_KBYTES=0
 CONFIG_HAVE_FAST_GUP=y
@@ -1085,6 +1090,7 @@ CONFIG_ZSMALLOC=y
 CONFIG_GENERIC_EARLY_IOREMAP=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ZONE_DMA=y
 CONFIG_HMM_MIRROR=y
 CONFIG_VMAP_PFN=y
 # CONFIG_PERCPU_STATS is not set
@@ -1093,6 +1099,7 @@ CONFIG_READ_ONLY_THP_FOR_FS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
 CONFIG_KMAP_LOCAL=y
+CONFIG_SECRETMEM=y
 CONFIG_LRU_GEN=y
 CONFIG_LRU_GEN_ENABLED=y
 # CONFIG_LRU_GEN_STATS is not set
@@ -1240,6 +1247,7 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_HOOK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -1621,7 +1629,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 # CONFIG_BRIDGE_MRP is not set
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1815,6 +1822,7 @@ CONFIG_QRTR=m
 CONFIG_QRTR_MHI=m
 CONFIG_NET_NCSI=y
 CONFIG_NCSI_OEM_CMD_GET_MAC=y
+CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
 CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
@@ -2198,6 +2206,7 @@ CONFIG_PCI_SW_SWITCHTEC=m
 CONFIG_CXL_BUS=m
 CONFIG_CXL_MEM=m
 # CONFIG_CXL_MEM_RAW_COMMANDS is not set
+CONFIG_CXL_ACPI=m
 CONFIG_PCCARD=m
 CONFIG_PCMCIA=m
 CONFIG_PCMCIA_LOAD_CIS=y
@@ -2340,6 +2349,7 @@ CONFIG_MTD_PLATRAM=m
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_DATAFLASH is not set
 # CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
 # CONFIG_MTD_SST25L is not set
 # CONFIG_MTD_SLRAM is not set
 CONFIG_MTD_PHRAM=m
@@ -2574,9 +2584,6 @@ CONFIG_PVPANIC_MMIO=m
 CONFIG_PVPANIC_PCI=m
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2660,6 +2667,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPI3MR=m
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2713,6 +2721,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+CONFIG_SCSI_EFCT=m
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_NSP32=m
@@ -3211,6 +3220,7 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_CT=y
 CONFIG_MLX5_TC_SAMPLE=y
@@ -3227,8 +3237,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3343,6 +3351,7 @@ CONFIG_STMMAC_PLATFORM=m
 CONFIG_DWMAC_GENERIC=m
 # CONFIG_DWMAC_INTEL_PLAT is not set
 CONFIG_DWMAC_INTEL=m
+CONFIG_DWMAC_LOONGSON=m
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3409,10 +3418,12 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 # CONFIG_MICROCHIP_T1_PHY is not set
 CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
 CONFIG_NATIONAL_PHY=m
 CONFIG_NXP_C45_TJA11XX_PHY=m
 CONFIG_NXP_TJA11XX_PHY=m
@@ -3434,7 +3445,9 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
 CONFIG_OF_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -3841,7 +3854,10 @@ CONFIG_IEEE802154_HWSIM=m
 # Wireless WAN
 #
 CONFIG_WWAN=y
+CONFIG_WWAN_HWSIM=m
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_RPMSG_WWAN_CTRL=m
+CONFIG_IOSM=m
 # end of Wireless WAN
 
 CONFIG_VMXNET3=m
@@ -4002,6 +4018,7 @@ CONFIG_JOYSTICK_XPAD_LEDS=y
 CONFIG_JOYSTICK_WALKERA0701=m
 # CONFIG_JOYSTICK_PSXPAD_SPI is not set
 CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -4364,8 +4381,6 @@ CONFIG_PC8736x_GPIO=m
 CONFIG_NSC_GPIO=m
 CONFIG_DEVMEM=y
 CONFIG_NVRAM=y
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=8192
 CONFIG_DEVPORT=y
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
@@ -4389,9 +4404,11 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
 # CONFIG_XILLYBUS_OF is not set
+CONFIG_XILLYUSB=m
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -5036,6 +5053,7 @@ CONFIG_SENSORS_BEL_PFE=m
 CONFIG_SENSORS_BPA_RS600=m
 CONFIG_SENSORS_FSP_3Y=m
 CONFIG_SENSORS_IBM_CFFPS=m
+CONFIG_SENSORS_DPS920AB=m
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
 CONFIG_SENSORS_IR36021=m
@@ -5054,7 +5072,9 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_MP2888=m
 CONFIG_SENSORS_MP2975=m
+CONFIG_SENSORS_PIM4328=m
 CONFIG_SENSORS_PM6764TR=m
 CONFIG_SENSORS_PXE1610=m
 CONFIG_SENSORS_Q54SJ108A2=m
@@ -5070,6 +5090,7 @@ CONFIG_SENSORS_SBTSI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -5174,6 +5195,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5376,11 +5398,12 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+CONFIG_MFD_RT4831=m
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
 # CONFIG_MFD_RK808 is not set
 # CONFIG_MFD_RN5T618 is not set
-CONFIG_MFD_SEC_CORE=y
+# CONFIG_MFD_SEC_CORE is not set
 CONFIG_MFD_SI476X_CORE=m
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
@@ -5398,7 +5421,6 @@ CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
 # CONFIG_MFD_TPS65217 is not set
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 # CONFIG_MFD_TI_LP87565 is not set
 # CONFIG_MFD_TPS65218 is not set
@@ -5418,7 +5440,7 @@ CONFIG_MFD_LM3533=m
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
 # CONFIG_MFD_LOCHNAGAR is not set
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5442,6 +5464,7 @@ CONFIG_MFD_WM8994=m
 CONFIG_MFD_WCD934X=m
 CONFIG_MFD_ATC260X=m
 CONFIG_MFD_ATC260X_I2C=m
+# CONFIG_MFD_QCOM_PM8008 is not set
 CONFIG_RAVE_SP_CORE=m
 CONFIG_MFD_INTEL_M10_BMC=m
 # end of Multifunction device drivers
@@ -5491,6 +5514,7 @@ CONFIG_REGULATOR_MAX14577=m
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+CONFIG_REGULATOR_MAX8893=m
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5510,6 +5534,7 @@ CONFIG_REGULATOR_MP8859=m
 CONFIG_REGULATOR_MT6311=m
 CONFIG_REGULATOR_MT6323=m
 # CONFIG_REGULATOR_MT6358 is not set
+CONFIG_REGULATOR_MT6359=m
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PCA9450=m
@@ -5524,11 +5549,11 @@ CONFIG_REGULATOR_PWM=m
 CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
+CONFIG_REGULATOR_RT6160=m
+CONFIG_REGULATOR_RT6245=m
 CONFIG_REGULATOR_RTMV20=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 # CONFIG_REGULATOR_SY8106A is not set
@@ -5639,6 +5664,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5673,7 +5699,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 #
 # Drivers filtered as selected at 'Filter media drivers'
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5844,7 +5869,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5881,14 +5905,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -5936,6 +5956,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -6035,6 +6056,7 @@ CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_APTINA_PLL=m
 CONFIG_VIDEO_CCS_PLL=m
 CONFIG_VIDEO_HI556=m
+CONFIG_VIDEO_IMX208=m
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -6223,7 +6245,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6352,7 +6373,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -6510,10 +6530,12 @@ CONFIG_DRM_PANEL_BRIDGE=y
 # CONFIG_DRM_CDNS_DSI is not set
 # CONFIG_DRM_CHIPONE_ICN6211 is not set
 # CONFIG_DRM_CHRONTEL_CH7033 is not set
+# CONFIG_DRM_CROS_EC_ANX7688 is not set
 # CONFIG_DRM_DISPLAY_CONNECTOR is not set
 # CONFIG_DRM_LONTIUM_LT8912B is not set
 # CONFIG_DRM_LONTIUM_LT9611 is not set
 # CONFIG_DRM_LONTIUM_LT9611UXC is not set
+# CONFIG_DRM_ITE_IT66121 is not set
 # CONFIG_DRM_LVDS_CODEC is not set
 # CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
 # CONFIG_DRM_NWL_MIPI_DSI is not set
@@ -6531,6 +6553,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
 # CONFIG_DRM_TOSHIBA_TC358768 is not set
 # CONFIG_DRM_TOSHIBA_TC358775 is not set
 # CONFIG_DRM_TI_TFP410 is not set
+# CONFIG_DRM_TI_SN65DSI83 is not set
 # CONFIG_DRM_TI_SN65DSI86 is not set
 # CONFIG_DRM_TI_TPD12S015 is not set
 # CONFIG_DRM_ANALOGIX_ANX6345 is not set
@@ -6546,6 +6569,7 @@ CONFIG_DRM_ANALOGIX_DP=m
 # CONFIG_DRM_ARCPGU is not set
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+CONFIG_DRM_SIMPLEDRM=m
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6556,6 +6580,7 @@ CONFIG_TINYDRM_ST7586=m
 CONFIG_TINYDRM_ST7735R=m
 CONFIG_DRM_VBOXVIDEO=m
 CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
 
@@ -6629,7 +6654,7 @@ CONFIG_FB_UDL=m
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
-CONFIG_FB_HYPERV=m
+# CONFIG_FB_HYPERV is not set
 CONFIG_FB_SIMPLE=y
 # CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
@@ -6660,6 +6685,7 @@ CONFIG_BACKLIGHT_DA9052=m
 CONFIG_BACKLIGHT_MAX8925=m
 CONFIG_BACKLIGHT_APPLE=m
 CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_RT4831=m
 CONFIG_BACKLIGHT_SAHARA=m
 CONFIG_BACKLIGHT_WM831X=m
 CONFIG_BACKLIGHT_ADP5520=m
@@ -6918,7 +6944,7 @@ CONFIG_SND_HDA_PREALLOC_SIZE=0
 CONFIG_SND_INTEL_NHLT=y
 CONFIG_SND_INTEL_DSP_CONFIG=m
 CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
-CONFIG_SND_INTEL_BYT_PREFER_SOF=y
+# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -7054,6 +7080,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
 CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
@@ -7256,6 +7283,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 CONFIG_SND_SOC_SIMPLE_MUX=m
 CONFIG_SND_SOC_SPDIF=m
 # CONFIG_SND_SOC_SSM2305 is not set
+CONFIG_SND_SOC_SSM2518=m
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -7273,6 +7301,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -7289,7 +7318,10 @@ CONFIG_SND_SOC_TSCS42XX=m
 # CONFIG_SND_SOC_TSCS454 is not set
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
@@ -7317,7 +7349,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 # CONFIG_SND_SOC_ZL38060 is not set
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 # CONFIG_SND_SOC_MT6351 is not set
 CONFIG_SND_SOC_MT6358=m
@@ -8022,7 +8053,7 @@ CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
-# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
@@ -8119,7 +8150,7 @@ CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
 CONFIG_INFINIBAND_MTHCA=m
 CONFIG_INFINIBAND_MTHCA_DEBUG=y
 CONFIG_INFINIBAND_CXGB4=m
-CONFIG_INFINIBAND_I40IW=m
+CONFIG_INFINIBAND_IRDMA=m
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -8226,7 +8257,6 @@ CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3028=m
 CONFIG_RTC_DRV_RV3032=m
 CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
 CONFIG_RTC_DRV_SD3078=m
 
 #
@@ -8396,7 +8426,6 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
@@ -8523,6 +8552,11 @@ CONFIG_STAGING_MEDIA=y
 # CONFIG_INTEL_ATOMISP is not set
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -8537,6 +8571,7 @@ CONFIG_FWTTY_MAX_TOTAL_PORTS=64
 CONFIG_FWTTY_MAX_CARD_PORTS=32
 CONFIG_GS_FPGABOOT=m
 CONFIG_UNISYSSPAR=y
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
 # CONFIG_FB_TFT is not set
 CONFIG_MOST_COMPONENTS=m
 CONFIG_MOST_NET=m
@@ -8548,11 +8583,6 @@ CONFIG_PI433=m
 # CONFIG_XIL_AXIS_FIFO is not set
 CONFIG_FIELDBUS_DEV=m
 # CONFIG_HMS_ANYBUSS_BUS is not set
-CONFIG_KPC2000=y
-CONFIG_KPC2000_CORE=m
-CONFIG_KPC2000_SPI=m
-CONFIG_KPC2000_I2C=m
-CONFIG_KPC2000_DMA=m
 CONFIG_QLGE=m
 CONFIG_WFX=m
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -8588,6 +8618,7 @@ CONFIG_DELL_SMBIOS_WMI=y
 CONFIG_DELL_SMBIOS_SMM=y
 CONFIG_DELL_SMO8800=m
 CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_WMI_DESCRIPTOR=m
 CONFIG_DELL_WMI_LED=m
@@ -8597,7 +8628,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+CONFIG_WIRELESS_HOTKEY=m
 CONFIG_HP_WMI=m
 CONFIG_TC1100_WMI=m
 CONFIG_IBM_RTL=m
@@ -8610,9 +8641,12 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_THINKPAD_LMI=m
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
+CONFIG_INTEL_CHT_INT33FE=m
+CONFIG_INTEL_SKL_INT3472=m
 CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_ATOMISP2_PM=m
-CONFIG_INTEL_CHT_INT33FE=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8640,6 +8674,7 @@ CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_MLX_PLATFORM=m
 CONFIG_TOUCHSCREEN_DMI=y
+CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
@@ -8696,10 +8731,18 @@ CONFIG_SURFACE_AGGREGATOR=m
 CONFIG_SURFACE_AGGREGATOR_BUS=y
 # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+CONFIG_LMK04832=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_SI5341=m
 CONFIG_COMMON_CLK_SI5351=m
@@ -8709,7 +8752,6 @@ CONFIG_COMMON_CLK_SI544=m
 CONFIG_COMMON_CLK_CDCE706=m
 # CONFIG_COMMON_CLK_CDCE925 is not set
 CONFIG_COMMON_CLK_CS2000_CP=m
-CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 # CONFIG_COMMON_CLK_AXI_CLKGEN is not set
 CONFIG_COMMON_CLK_PALMAS=m
@@ -8755,6 +8797,7 @@ CONFIG_INTEL_IOMMU=y
 CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
 CONFIG_HYPERV_IOMMU=y
+CONFIG_VIRTIO_IOMMU=m
 
 #
 # Remoteproc drivers
@@ -8905,6 +8948,9 @@ CONFIG_DA311=m
 # CONFIG_DMARD06 is not set
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+CONFIG_FXLS8962AF=m
+CONFIG_FXLS8962AF_I2C=m
+CONFIG_FXLS8962AF_SPI=m
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -8926,6 +8972,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+CONFIG_SCA3300=m
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -8997,6 +9044,7 @@ CONFIG_TI_ADS7950=m
 CONFIG_TI_ADS131E08=m
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+CONFIG_TI_TSC2046=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 # CONFIG_VF610_ADC is not set
@@ -9039,6 +9087,8 @@ CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
 CONFIG_SPS30=m
+CONFIG_SPS30_I2C=m
+CONFIG_SPS30_SERIAL=m
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -9213,6 +9263,9 @@ CONFIG_INV_MPU6050_SPI=m
 CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
+CONFIG_IIO_ST_LSM9DS0=m
+CONFIG_IIO_ST_LSM9DS0_I2C=m
+CONFIG_IIO_ST_LSM9DS0_SPI=m
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -9265,6 +9318,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+CONFIG_TSL2591=m
 # CONFIG_TSL2772 is not set
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -9422,6 +9476,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+CONFIG_TMP117=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -9475,6 +9530,7 @@ CONFIG_RESET_TI_SYSCON=m
 #
 CONFIG_GENERIC_PHY=y
 CONFIG_USB_LGM_PHY=m
+CONFIG_PHY_CAN_TRANSCEIVER=m
 CONFIG_BCM_KONA_USB2_PHY=m
 # CONFIG_PHY_CADENCE_TORRENT is not set
 # CONFIG_PHY_CADENCE_DPHY is not set
@@ -9604,6 +9660,7 @@ CONFIG_COUNTER=m
 CONFIG_INTERRUPT_CNT=m
 # CONFIG_FTM_QUADDEC is not set
 # CONFIG_MICROCHIP_TCB_CAPTURE is not set
+CONFIG_INTEL_QEP=m
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
@@ -10471,7 +10528,6 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
@@ -10486,6 +10542,7 @@ CONFIG_ASN1_ENCODER=m
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+CONFIG_STACKTRACE_BUILD_ID=y
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=1
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -10579,7 +10636,7 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
 CONFIG_KFENCE_STATIC_KEYS=y
-CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_KFENCE_SAMPLE_INTERVAL=100
 CONFIG_KFENCE_NUM_OBJECTS=255
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
@@ -10664,7 +10721,6 @@ CONFIG_DEBUG_LIST=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10703,6 +10759,8 @@ CONFIG_STACK_TRACER=y
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+CONFIG_OSNOISE_TRACER=y
+CONFIG_TIMERLAT_TRACER=y
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -10778,7 +10836,6 @@ CONFIG_FUNCTION_ERROR_INJECTION=y
 CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_MIN_HEAP is not set
 # CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
@@ -10791,10 +10848,12 @@ CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 # CONFIG_TEST_STRSCPY is not set
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 # CONFIG_TEST_XARRAY is not set
@@ -10821,6 +10880,7 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_MEMINIT is not set
 # CONFIG_TEST_FREE_PAGES is not set
 # CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set
diff --git a/libre/linux-libre-pck/config.x86_64 b/libre/linux-libre-pck/config.x86_64
index 6004a32..9240b5d 100644
--- a/libre/linux-libre-pck/config.x86_64
+++ b/libre/linux-libre-pck/config.x86_64
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.13.9-gnu-pck1 Kernel Configuration
+# Linux/x86 5.14.11-gnu-pck1 Kernel Configuration
 #
 CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0"
 CONFIG_CC_IS_GCC=y
@@ -16,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y
 CONFIG_CC_HAS_ASM_GOTO=y
 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
 CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
 CONFIG_IRQ_WORK=y
 CONFIG_BUILDTIME_TABLE_SORT=y
 CONFIG_THREAD_INFO_IN_TASK=y
@@ -23,7 +24,6 @@ CONFIG_THREAD_INFO_IN_TASK=y
 #
 # General setup
 #
-# CONFIG_SCHED_MUQSS is not set
 CONFIG_PCK_INTERACTIVE=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 # CONFIG_COMPILE_TEST is not set
@@ -130,6 +130,7 @@ CONFIG_PREEMPT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
 CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
 
 #
 # CPU/Task time and stats accounting
@@ -185,6 +186,7 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 #
 # Scheduler features
 #
+# CONFIG_SCHED_ALT is not set
 CONFIG_UCLAMP_TASK=y
 CONFIG_UCLAMP_BUCKETS_COUNT=5
 # end of Scheduler features
@@ -335,7 +337,6 @@ CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
-CONFIG_ZONE_DMA32=y
 CONFIG_AUDIT_ARCH=y
 CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_64_SMP=y
@@ -348,7 +349,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
 #
 # Processor type and features
 #
-CONFIG_ZONE_DMA=y
 CONFIG_SMP=y
 CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_X2APIC=y
@@ -454,8 +454,6 @@ CONFIG_NR_CPUS=320
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_MC=y
 CONFIG_SCHED_MC_PRIO=y
-CONFIG_RQ_NONE=y
-CONFIG_SHARERQ=0
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_IO_APIC=y
 CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -506,7 +504,6 @@ CONFIG_X86_PMEM_LEGACY_DEVICE=y
 CONFIG_X86_PMEM_LEGACY=m
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
-CONFIG_X86_RESERVE_LOW=64
 CONFIG_MTRR=y
 CONFIG_MTRR_SANITIZER=y
 CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
@@ -654,7 +651,9 @@ CONFIG_BXT_WC_PMIC_OPREGION=y
 CONFIG_CHT_WC_PMIC_OPREGION=y
 CONFIG_CHT_DC_TI_PMIC_OPREGION=y
 CONFIG_TPS68470_PMIC_OPREGION=y
+CONFIG_ACPI_VIOT=y
 CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_PRMT=y
 
 #
 # CPU Frequency scaling
@@ -800,6 +799,7 @@ CONFIG_KVM_COMPAT=y
 CONFIG_HAVE_KVM_IRQ_BYPASS=y
 CONFIG_HAVE_KVM_NO_POLL=y
 CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -846,6 +846,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
 CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
 CONFIG_HAVE_ASM_MODVERSIONS=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_RSEQ=y
@@ -888,7 +889,6 @@ CONFIG_HAVE_MOVE_PUD=y
 CONFIG_HAVE_MOVE_PMD=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
-CONFIG_HAVE_ARCH_PARENT_PMD_YOUNG=y
 CONFIG_HAVE_ARCH_HUGE_VMAP=y
 CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
 CONFIG_HAVE_ARCH_SOFT_DIRTY=y
@@ -912,7 +912,7 @@ CONFIG_COMPAT_32BIT_TIME=y
 CONFIG_HAVE_ARCH_VMAP_STACK=y
 CONFIG_VMAP_STACK=y
 CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
-# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
+CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y
 CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
 CONFIG_STRICT_KERNEL_RWX=y
 CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
@@ -927,6 +927,7 @@ CONFIG_HAVE_PREEMPT_DYNAMIC=y
 CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
 CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
 CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
+CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y
 
 #
 # GCOV-based kernel profiling
@@ -979,9 +980,11 @@ CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLK_DEV_THROTTLING_LOW=y
 # CONFIG_BLK_CMDLINE_PARSER is not set
 CONFIG_BLK_WBT=y
+CONFIG_BLK_WBT_MQ=y
 CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_FC_APPID=y
 CONFIG_BLK_CGROUP_IOCOST=y
-CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_CGROUP_IOPRIO=y
 CONFIG_BLK_DEBUG_FS=y
 CONFIG_BLK_DEBUG_FS_ZONED=y
 CONFIG_BLK_SED_OPAL=y
@@ -1066,10 +1069,10 @@ CONFIG_COREDUMP=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
-CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_ANON_MIN_KBYTES=0
 CONFIG_CLEAN_LOW_KBYTES=262144
 CONFIG_CLEAN_MIN_KBYTES=0
 CONFIG_HAVE_FAST_GUP=y
@@ -1139,6 +1142,8 @@ CONFIG_GENERIC_EARLY_IOREMAP=y
 CONFIG_IDLE_PAGE_TRACKING=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
 CONFIG_ARCH_HAS_PTE_DEVMAP=y
+CONFIG_ZONE_DMA=y
+CONFIG_ZONE_DMA32=y
 CONFIG_ZONE_DEVICE=y
 CONFIG_DEV_PAGEMAP_OPS=y
 CONFIG_HMM_MIRROR=y
@@ -1151,6 +1156,7 @@ CONFIG_ARCH_HAS_PKEYS=y
 CONFIG_READ_ONLY_THP_FOR_FS=y
 CONFIG_ARCH_HAS_PTE_SPECIAL=y
 CONFIG_MAPPING_DIRTY_HELPERS=y
+CONFIG_SECRETMEM=y
 CONFIG_LRU_GEN=y
 CONFIG_LRU_GEN_ENABLED=y
 # CONFIG_LRU_GEN_STATS is not set
@@ -1301,6 +1307,7 @@ CONFIG_NETFILTER_INGRESS=y
 CONFIG_NETFILTER_NETLINK=m
 CONFIG_NETFILTER_FAMILY_BRIDGE=y
 CONFIG_NETFILTER_FAMILY_ARP=y
+CONFIG_NETFILTER_NETLINK_HOOK=m
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -1683,7 +1690,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_BRIDGE_MRP=y
 CONFIG_BRIDGE_CFM=y
 CONFIG_NET_DSA=m
-CONFIG_NET_DSA_TAG_8021Q=m
 CONFIG_NET_DSA_TAG_AR9331=m
 CONFIG_NET_DSA_TAG_BRCM_COMMON=m
 CONFIG_NET_DSA_TAG_BRCM=m
@@ -1875,6 +1881,7 @@ CONFIG_QRTR_TUN=m
 CONFIG_QRTR_MHI=m
 CONFIG_NET_NCSI=y
 CONFIG_NCSI_OEM_CMD_GET_MAC=y
+CONFIG_NCSI_OEM_CMD_KEEP_PHY=y
 CONFIG_PCPU_DEV_REFCNT=y
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
@@ -2248,6 +2255,8 @@ CONFIG_PCI_SW_SWITCHTEC=m
 CONFIG_CXL_BUS=m
 CONFIG_CXL_MEM=m
 # CONFIG_CXL_MEM_RAW_COMMANDS is not set
+CONFIG_CXL_ACPI=m
+CONFIG_CXL_PMEM=m
 CONFIG_PCCARD=m
 CONFIG_PCMCIA=m
 CONFIG_PCMCIA_LOAD_CIS=y
@@ -2386,6 +2395,7 @@ CONFIG_MTD_PLATRAM=m
 # CONFIG_MTD_PMC551 is not set
 # CONFIG_MTD_DATAFLASH is not set
 # CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
 # CONFIG_MTD_SST25L is not set
 # CONFIG_MTD_SLRAM is not set
 CONFIG_MTD_PHRAM=m
@@ -2609,9 +2619,6 @@ CONFIG_PVPANIC_MMIO=m
 CONFIG_PVPANIC_PCI=m
 # end of Misc devices
 
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
 #
 # SCSI device support
 #
@@ -2693,6 +2700,7 @@ CONFIG_SCSI_MPT3SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT3SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPI3MR=m
 CONFIG_SCSI_SMARTPQI=m
 CONFIG_SCSI_UFSHCD=m
 CONFIG_SCSI_UFSHCD_PCI=m
@@ -2745,6 +2753,7 @@ CONFIG_QEDI=m
 CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
+CONFIG_SCSI_EFCT=m
 CONFIG_SCSI_DC395x=m
 CONFIG_SCSI_AM53C974=m
 CONFIG_SCSI_WD719X=m
@@ -3233,6 +3242,7 @@ CONFIG_MLX5_EN_ARFS=y
 CONFIG_MLX5_EN_RXNFC=y
 CONFIG_MLX5_MPFS=y
 CONFIG_MLX5_ESWITCH=y
+CONFIG_MLX5_BRIDGE=y
 CONFIG_MLX5_CLS_ACT=y
 CONFIG_MLX5_TC_CT=y
 CONFIG_MLX5_TC_SAMPLE=y
@@ -3252,8 +3262,6 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
-CONFIG_MLXSW_SWITCHIB=m
-CONFIG_MLXSW_SWITCHX2=m
 CONFIG_MLXSW_SPECTRUM=m
 CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
@@ -3361,6 +3369,7 @@ CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=m
 CONFIG_DWMAC_GENERIC=m
 CONFIG_DWMAC_INTEL=m
+CONFIG_DWMAC_LOONGSON=m
 CONFIG_STMMAC_PCI=m
 CONFIG_NET_VENDOR_SUN=y
 CONFIG_HAPPYMEAL=m
@@ -3427,10 +3436,12 @@ CONFIG_LSI_ET1011C_PHY=m
 CONFIG_MARVELL_PHY=m
 CONFIG_MARVELL_10G_PHY=m
 CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MEDIATEK_GE_PHY=m
 CONFIG_MICREL_PHY=m
 CONFIG_MICROCHIP_PHY=m
 CONFIG_MICROCHIP_T1_PHY=m
 CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
 CONFIG_NATIONAL_PHY=m
 CONFIG_NXP_C45_TJA11XX_PHY=m
 CONFIG_NXP_TJA11XX_PHY=m
@@ -3452,6 +3463,8 @@ CONFIG_XILINX_GMII2RGMII=m
 CONFIG_MICREL_KS8995MA=m
 CONFIG_MDIO_DEVICE=m
 CONFIG_MDIO_BUS=m
+CONFIG_FWNODE_MDIO=m
+CONFIG_ACPI_MDIO=m
 CONFIG_MDIO_DEVRES=m
 CONFIG_MDIO_BITBANG=m
 CONFIG_MDIO_BCM_UNIMAC=m
@@ -3854,7 +3867,10 @@ CONFIG_IEEE802154_HWSIM=m
 # Wireless WAN
 #
 CONFIG_WWAN=y
+CONFIG_WWAN_HWSIM=m
 CONFIG_MHI_WWAN_CTRL=m
+CONFIG_RPMSG_WWAN_CTRL=m
+CONFIG_IOSM=m
 # end of Wireless WAN
 
 CONFIG_XEN_NETDEV_FRONTEND=m
@@ -4010,6 +4026,7 @@ CONFIG_JOYSTICK_WALKERA0701=m
 CONFIG_JOYSTICK_PSXPAD_SPI=m
 CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
 CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
 CONFIG_JOYSTICK_FSIA6B=m
 CONFIG_INPUT_TABLET=y
 CONFIG_TABLET_USB_ACECAD=m
@@ -4350,8 +4367,6 @@ CONFIG_IPWIRELESS=m
 CONFIG_MWAVE=m
 CONFIG_DEVMEM=y
 CONFIG_NVRAM=y
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=8192
 CONFIG_DEVPORT=y
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
@@ -4376,8 +4391,10 @@ CONFIG_TCG_TIS_ST33ZP24=m
 CONFIG_TCG_TIS_ST33ZP24_I2C=m
 CONFIG_TCG_TIS_ST33ZP24_SPI=m
 CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
 CONFIG_XILLYBUS=m
 CONFIG_XILLYBUS_PCIE=m
+CONFIG_XILLYUSB=m
 # end of Character devices
 
 # CONFIG_RANDOM_TRUST_CPU is not set
@@ -4974,6 +4991,7 @@ CONFIG_SENSORS_BEL_PFE=m
 CONFIG_SENSORS_BPA_RS600=m
 CONFIG_SENSORS_FSP_3Y=m
 CONFIG_SENSORS_IBM_CFFPS=m
+CONFIG_SENSORS_DPS920AB=m
 CONFIG_SENSORS_INSPUR_IPSPS=m
 CONFIG_SENSORS_IR35221=m
 CONFIG_SENSORS_IR36021=m
@@ -4992,7 +5010,9 @@ CONFIG_SENSORS_MAX20751=m
 CONFIG_SENSORS_MAX31785=m
 CONFIG_SENSORS_MAX34440=m
 CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_MP2888=m
 CONFIG_SENSORS_MP2975=m
+CONFIG_SENSORS_PIM4328=m
 CONFIG_SENSORS_PM6764TR=m
 CONFIG_SENSORS_PXE1610=m
 CONFIG_SENSORS_Q54SJ108A2=m
@@ -5007,6 +5027,7 @@ CONFIG_SENSORS_SBTSI=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
 CONFIG_SENSORS_SHTC1=m
 CONFIG_SENSORS_SIS5595=m
 CONFIG_SENSORS_DME1737=m
@@ -5109,6 +5130,7 @@ CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
 CONFIG_WATCHDOG_OPEN_TIMEOUT=0
 CONFIG_WATCHDOG_SYSFS=y
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
 
 #
 # Watchdog Pretimeout Governors
@@ -5291,9 +5313,9 @@ CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
 CONFIG_UCB1400_CORE=m
 CONFIG_MFD_RDC321X=m
+CONFIG_MFD_RT4831=m
 CONFIG_MFD_RT5033=m
 CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
 CONFIG_MFD_SI476X_CORE=m
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
@@ -5309,7 +5331,6 @@ CONFIG_TPS65010=m
 CONFIG_TPS6507X=m
 CONFIG_MFD_TPS65086=m
 CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS68470=y
 CONFIG_MFD_TI_LP873X=m
 CONFIG_MFD_TPS6586X=y
 CONFIG_MFD_TPS65910=y
@@ -5324,7 +5345,7 @@ CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_LM3533=m
 CONFIG_MFD_TQMX86=m
 CONFIG_MFD_VX855=m
-CONFIG_MFD_ARIZONA=y
+CONFIG_MFD_ARIZONA=m
 CONFIG_MFD_ARIZONA_I2C=m
 CONFIG_MFD_ARIZONA_SPI=m
 CONFIG_MFD_CS47L24=y
@@ -5386,6 +5407,7 @@ CONFIG_REGULATOR_MAX14577=m
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
+CONFIG_REGULATOR_MAX8893=m
 CONFIG_REGULATOR_MAX8907=m
 CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
@@ -5400,6 +5422,7 @@ CONFIG_REGULATOR_MP8859=m
 CONFIG_REGULATOR_MT6311=m
 CONFIG_REGULATOR_MT6323=m
 CONFIG_REGULATOR_MT6358=m
+CONFIG_REGULATOR_MT6359=m
 CONFIG_REGULATOR_MT6360=m
 CONFIG_REGULATOR_MT6397=m
 CONFIG_REGULATOR_PALMAS=m
@@ -5413,11 +5436,11 @@ CONFIG_REGULATOR_PWM=m
 CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_RT4831=m
 CONFIG_REGULATOR_RT5033=m
+CONFIG_REGULATOR_RT6160=m
+CONFIG_REGULATOR_RT6245=m
 CONFIG_REGULATOR_RTMV20=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_SKY81452=m
 CONFIG_REGULATOR_SLG51000=m
 CONFIG_REGULATOR_TPS51632=m
@@ -5520,6 +5543,7 @@ CONFIG_VIDEO_TUNER=m
 CONFIG_V4L2_MEM2MEM_DEV=m
 CONFIG_V4L2_FLASH_LED_CLASS=m
 CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
 CONFIG_VIDEOBUF_GEN=m
 CONFIG_VIDEOBUF_DMA_SG=m
 CONFIG_VIDEOBUF_VMALLOC=m
@@ -5554,7 +5578,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 #
 # Drivers filtered as selected at 'Filter media drivers'
 #
-CONFIG_TTPCI_EEPROM=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -5725,7 +5748,6 @@ CONFIG_VIDEO_TW686X=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
-# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set
@@ -5762,14 +5784,10 @@ CONFIG_VIDEO_SAA7164=m
 #
 # Media digital TV PCI Adapters
 #
-CONFIG_DVB_AV7110_IR=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_BUDGET=m
 CONFIG_DVB_BUDGET_CI=m
 CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
 CONFIG_DVB_PLUTO2=m
@@ -5816,6 +5834,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y
 #
 CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_TTPCI_EEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_V4L2=m
@@ -5915,6 +5934,7 @@ CONFIG_VIDEO_M52790=m
 CONFIG_VIDEO_APTINA_PLL=m
 CONFIG_VIDEO_CCS_PLL=m
 CONFIG_VIDEO_HI556=m
+CONFIG_VIDEO_IMX208=m
 CONFIG_VIDEO_IMX214=m
 CONFIG_VIDEO_IMX219=m
 CONFIG_VIDEO_IMX258=m
@@ -6100,7 +6120,6 @@ CONFIG_DVB_TDA10071=m
 #
 # DVB-T (terrestrial) frontends
 #
-CONFIG_DVB_SP8870=m
 CONFIG_DVB_SP887X=m
 CONFIG_DVB_CX22700=m
 CONFIG_DVB_CX22702=m
@@ -6223,7 +6242,6 @@ CONFIG_DRM_MIPI_DSI=y
 CONFIG_DRM_DP_AUX_CHARDEV=y
 # CONFIG_DRM_DEBUG_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
-CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
@@ -6274,6 +6292,7 @@ CONFIG_DRM_AMD_SECURE_DISPLAY=y
 # end of Display Engine Configuration
 
 CONFIG_HSA_AMD=y
+CONFIG_HSA_AMD_SVM=y
 CONFIG_DRM_NOUVEAU=m
 # CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set
 CONFIG_NOUVEAU_DEBUG=5
@@ -6329,6 +6348,7 @@ CONFIG_DRM_ANALOGIX_DP=m
 # CONFIG_DRM_ETNAVIV is not set
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_GM12U320=m
+CONFIG_DRM_SIMPLEDRM=m
 CONFIG_TINYDRM_HX8357D=m
 CONFIG_TINYDRM_ILI9225=m
 CONFIG_TINYDRM_ILI9341=m
@@ -6341,6 +6361,7 @@ CONFIG_DRM_XEN=y
 CONFIG_DRM_XEN_FRONTEND=m
 CONFIG_DRM_VBOXVIDEO=m
 CONFIG_DRM_GUD=m
+CONFIG_DRM_HYPERV=m
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
 
@@ -6410,8 +6431,9 @@ CONFIG_FB_EFI=y
 CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
-CONFIG_FB_HYPERV=m
+# CONFIG_FB_HYPERV is not set
 CONFIG_FB_SIMPLE=y
+# CONFIG_FB_SSD1307 is not set
 # CONFIG_FB_SM712 is not set
 # end of Frame buffer Devices
 
@@ -6440,6 +6462,7 @@ CONFIG_BACKLIGHT_DA9052=m
 CONFIG_BACKLIGHT_MAX8925=m
 CONFIG_BACKLIGHT_APPLE=m
 CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_RT4831=m
 CONFIG_BACKLIGHT_SAHARA=m
 CONFIG_BACKLIGHT_WM831X=m
 CONFIG_BACKLIGHT_ADP5520=m
@@ -6653,7 +6676,7 @@ CONFIG_SND_HDA_PREALLOC_SIZE=0
 CONFIG_SND_INTEL_NHLT=y
 CONFIG_SND_INTEL_DSP_CONFIG=m
 CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
-CONFIG_SND_INTEL_BYT_PREFER_SOF=y
+# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=m
@@ -6789,6 +6812,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
 CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
@@ -6990,6 +7014,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
 CONFIG_SND_SOC_SIMPLE_MUX=m
 CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_SSM2305=m
+CONFIG_SND_SOC_SSM2518=m
 CONFIG_SND_SOC_SSM2602=m
 CONFIG_SND_SOC_SSM2602_SPI=m
 CONFIG_SND_SOC_SSM2602_I2C=m
@@ -7007,6 +7032,7 @@ CONFIG_SND_SOC_TAS5720=m
 CONFIG_SND_SOC_TAS6424=m
 CONFIG_SND_SOC_TDA7419=m
 CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC23_I2C=m
 CONFIG_SND_SOC_TLV320AIC23_SPI=m
@@ -7023,7 +7049,10 @@ CONFIG_SND_SOC_TSCS42XX=m
 CONFIG_SND_SOC_TSCS454=m
 CONFIG_SND_SOC_UDA1334=m
 CONFIG_SND_SOC_WCD9335=m
+CONFIG_SND_SOC_WCD_MBHC=m
 CONFIG_SND_SOC_WCD934X=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
 CONFIG_SND_SOC_WM5102=m
 CONFIG_SND_SOC_WM8510=m
 CONFIG_SND_SOC_WM8523=m
@@ -7051,7 +7080,6 @@ CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
 CONFIG_SND_SOC_WSA881X=m
 CONFIG_SND_SOC_ZL38060=m
-CONFIG_SND_SOC_ZX_AUD96P22=m
 CONFIG_SND_SOC_MAX9759=m
 CONFIG_SND_SOC_MT6351=m
 CONFIG_SND_SOC_MT6358=m
@@ -7744,6 +7772,7 @@ CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
+CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_MC13783=m
 CONFIG_LEDS_TCA6507=m
@@ -7829,7 +7858,7 @@ CONFIG_INFINIBAND_QIB=m
 CONFIG_INFINIBAND_QIB_DCA=y
 CONFIG_INFINIBAND_CXGB4=m
 CONFIG_INFINIBAND_EFA=m
-CONFIG_INFINIBAND_I40IW=m
+CONFIG_INFINIBAND_IRDMA=m
 CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_INFINIBAND_OCRDMA=m
@@ -7943,7 +7972,6 @@ CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3028=m
 CONFIG_RTC_DRV_RV3032=m
 CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
 CONFIG_RTC_DRV_SD3078=m
 
 #
@@ -8110,7 +8138,6 @@ CONFIG_VFIO_PCI_MMAP=y
 CONFIG_VFIO_PCI_INTX=y
 CONFIG_VFIO_PCI_IGD=y
 CONFIG_VFIO_MDEV=m
-CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_IRQ_BYPASS_MANAGER=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VBOXGUEST=m
@@ -8285,6 +8312,11 @@ CONFIG_VIDEO_ATOMISP_OV5693=m
 CONFIG_VIDEO_ATOMISP_LM3554=m
 # CONFIG_VIDEO_ZORAN is not set
 CONFIG_VIDEO_IPU3_IMGU=m
+CONFIG_DVB_AV7110_IR=y
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET_PATCH=m
+CONFIG_DVB_SP8870=m
 
 #
 # Android
@@ -8309,11 +8341,6 @@ CONFIG_MOST_I2C=m
 CONFIG_KS7010=m
 CONFIG_PI433=m
 CONFIG_FIELDBUS_DEV=m
-CONFIG_KPC2000=y
-CONFIG_KPC2000_CORE=m
-CONFIG_KPC2000_SPI=m
-CONFIG_KPC2000_I2C=m
-CONFIG_KPC2000_DMA=m
 CONFIG_QLGE=m
 CONFIG_WFX=m
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -8349,6 +8376,7 @@ CONFIG_DELL_SMBIOS_WMI=y
 CONFIG_DELL_SMBIOS_SMM=y
 CONFIG_DELL_SMO8800=m
 CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
 CONFIG_DELL_WMI_AIO=m
 CONFIG_DELL_WMI_DESCRIPTOR=m
 CONFIG_DELL_WMI_LED=m
@@ -8358,7 +8386,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_FUJITSU_TABLET=m
 CONFIG_GPD_POCKET_FAN=m
 CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
+CONFIG_WIRELESS_HOTKEY=m
 CONFIG_HP_WMI=m
 CONFIG_IBM_RTL=m
 CONFIG_IDEAPAD_LAPTOP=m
@@ -8370,8 +8398,11 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_INTEL_ATOMISP2_LED=m
+CONFIG_THINKPAD_LMI=m
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
 CONFIG_INTEL_CHT_INT33FE=m
+CONFIG_INTEL_SKL_INT3472=m
+CONFIG_INTEL_ATOMISP2_LED=m
 CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_INT0002_VGPIO=m
 CONFIG_INTEL_MENLOW=m
@@ -8397,6 +8428,7 @@ CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_I2C_MULTI_INSTANTIATE=m
 CONFIG_MLX_PLATFORM=m
 CONFIG_TOUCHSCREEN_DMI=y
+CONFIG_FW_ATTR_CLASS=m
 CONFIG_INTEL_IPS=m
 CONFIG_INTEL_RST=m
 CONFIG_INTEL_SMARTCONNECT=m
@@ -8466,17 +8498,24 @@ CONFIG_SURFACE_AGGREGATOR=m
 CONFIG_SURFACE_AGGREGATOR_BUS=y
 # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set
 CONFIG_HAVE_CLK=y
-CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_COMMON_CLK_WM831X=m
+
+#
+# Clock driver for ARM Reference designs
+#
+# CONFIG_ICST is not set
+# CONFIG_CLK_SP810 is not set
+# end of Clock driver for ARM Reference designs
+
+CONFIG_LMK04832=m
 CONFIG_COMMON_CLK_MAX9485=m
 CONFIG_COMMON_CLK_SI5341=m
 CONFIG_COMMON_CLK_SI5351=m
 CONFIG_COMMON_CLK_SI544=m
 CONFIG_COMMON_CLK_CDCE706=m
 CONFIG_COMMON_CLK_CS2000_CP=m
-CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_PWM=m
@@ -8508,6 +8547,7 @@ CONFIG_IOMMU_IO_PGTABLE=y
 # CONFIG_IOMMU_DEBUGFS is not set
 # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
 CONFIG_IOMMU_DMA=y
+CONFIG_IOMMU_SVA_LIB=y
 CONFIG_AMD_IOMMU=y
 CONFIG_AMD_IOMMU_V2=y
 CONFIG_DMAR_TABLE=y
@@ -8518,6 +8558,7 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
 CONFIG_IRQ_REMAP=y
 CONFIG_HYPERV_IOMMU=y
+CONFIG_VIRTIO_IOMMU=m
 
 #
 # Remoteproc drivers
@@ -8667,6 +8708,9 @@ CONFIG_DA280=m
 CONFIG_DA311=m
 CONFIG_DMARD09=m
 CONFIG_DMARD10=m
+CONFIG_FXLS8962AF=m
+CONFIG_FXLS8962AF_I2C=m
+CONFIG_FXLS8962AF_SPI=m
 CONFIG_HID_SENSOR_ACCEL_3D=m
 CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
 CONFIG_IIO_ST_ACCEL_3AXIS=m
@@ -8688,6 +8732,7 @@ CONFIG_MMA9553=m
 CONFIG_MXC4005=m
 CONFIG_MXC6255=m
 CONFIG_SCA3000=m
+CONFIG_SCA3300=m
 CONFIG_STK8312=m
 CONFIG_STK8BA50=m
 # end of Accelerometers
@@ -8756,6 +8801,7 @@ CONFIG_TI_ADS7950=m
 CONFIG_TI_ADS131E08=m
 CONFIG_TI_AM335X_ADC=m
 CONFIG_TI_TLC4541=m
+CONFIG_TI_TSC2046=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VIPERBOARD_ADC=m
@@ -8796,6 +8842,8 @@ CONFIG_SCD30_I2C=m
 CONFIG_SCD30_SERIAL=m
 CONFIG_SENSIRION_SGP30=m
 CONFIG_SPS30=m
+CONFIG_SPS30_I2C=m
+CONFIG_SPS30_SERIAL=m
 CONFIG_VZ89X=m
 # end of Chemical Sensors
 
@@ -8968,6 +9016,9 @@ CONFIG_INV_MPU6050_SPI=m
 CONFIG_IIO_ST_LSM6DSX=m
 CONFIG_IIO_ST_LSM6DSX_I2C=m
 CONFIG_IIO_ST_LSM6DSX_SPI=m
+CONFIG_IIO_ST_LSM9DS0=m
+CONFIG_IIO_ST_LSM9DS0_I2C=m
+CONFIG_IIO_ST_LSM9DS0_SPI=m
 # end of Inertial measurement units
 
 CONFIG_IIO_ADIS_LIB=m
@@ -9019,6 +9070,7 @@ CONFIG_TCS3414=m
 CONFIG_TCS3472=m
 CONFIG_SENSORS_TSL2563=m
 CONFIG_TSL2583=m
+CONFIG_TSL2591=m
 CONFIG_TSL2772=m
 CONFIG_TSL4531=m
 CONFIG_US5182D=m
@@ -9174,6 +9226,7 @@ CONFIG_MLX90614=m
 CONFIG_MLX90632=m
 CONFIG_TMP006=m
 CONFIG_TMP007=m
+CONFIG_TMP117=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_MAX31856=m
@@ -9224,6 +9277,7 @@ CONFIG_RESET_TI_SYSCON=m
 #
 CONFIG_GENERIC_PHY=y
 CONFIG_USB_LGM_PHY=m
+CONFIG_PHY_CAN_TRANSCEIVER=m
 CONFIG_BCM_KONA_USB2_PHY=m
 CONFIG_PHY_PXA_28NM_HSIC=m
 CONFIG_PHY_PXA_28NM_USB2=m
@@ -9354,6 +9408,7 @@ CONFIG_SLIM_QCOM_CTRL=m
 CONFIG_INTERCONNECT=y
 CONFIG_COUNTER=m
 CONFIG_INTERRUPT_CNT=m
+CONFIG_INTEL_QEP=m
 CONFIG_MOST=m
 CONFIG_MOST_USB_HDM=m
 CONFIG_MOST_CDEV=m
@@ -9523,6 +9578,8 @@ CONFIG_TMPFS_XATTR=y
 CONFIG_TMPFS_INODE64=y
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON=y
 CONFIG_MEMFD_CREATE=y
 CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
 CONFIG_CONFIGFS_FS=y
@@ -10261,7 +10318,6 @@ CONFIG_ARCH_STACKWALK=y
 CONFIG_SBITMAP=y
 CONFIG_PARMAN=m
 CONFIG_OBJAGG=m
-# CONFIG_STRING_SELFTEST is not set
 # end of Library routines
 
 CONFIG_PLDMFW=y
@@ -10276,6 +10332,7 @@ CONFIG_ASN1_ENCODER=m
 #
 CONFIG_PRINTK_TIME=y
 # CONFIG_PRINTK_CALLER is not set
+CONFIG_STACKTRACE_BUILD_ID=y
 CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
 CONFIG_CONSOLE_LOGLEVEL_QUIET=1
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
@@ -10370,7 +10427,7 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
 CONFIG_HAVE_ARCH_KFENCE=y
 CONFIG_KFENCE=y
 CONFIG_KFENCE_STATIC_KEYS=y
-CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_KFENCE_SAMPLE_INTERVAL=100
 CONFIG_KFENCE_NUM_OBJECTS=255
 CONFIG_KFENCE_STRESS_TEST_FAULTS=0
 # end of Memory Debugging
@@ -10457,7 +10514,6 @@ CONFIG_DEBUG_LIST=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_TRACE is not set
 # CONFIG_RCU_EQS_DEBUG is not set
-# CONFIG_RCU_STRICT_GRACE_PERIOD is not set
 # end of RCU Debugging
 
 # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
@@ -10492,12 +10548,15 @@ CONFIG_FUNCTION_GRAPH_TRACER=y
 CONFIG_DYNAMIC_FTRACE=y
 CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
 CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_STACK_TRACER=y
 # CONFIG_IRQSOFF_TRACER is not set
 # CONFIG_PREEMPT_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_HWLAT_TRACER=y
+CONFIG_OSNOISE_TRACER=y
+CONFIG_TIMERLAT_TRACER=y
 CONFIG_MMIOTRACE=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -10576,7 +10635,6 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y
 # CONFIG_KCOV is not set
 CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_LKDTM is not set
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_MIN_HEAP is not set
 # CONFIG_TEST_SORT is not set
 # CONFIG_TEST_DIV64 is not set
@@ -10589,10 +10647,12 @@ CONFIG_RUNTIME_TESTING_MENU=y
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HEXDUMP is not set
+# CONFIG_STRING_SELFTEST is not set
 # CONFIG_TEST_STRING_HELPERS is not set
 # CONFIG_TEST_STRSCPY is not set
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_SCANF is not set
 # CONFIG_TEST_BITMAP is not set
 # CONFIG_TEST_UUID is not set
 # CONFIG_TEST_XARRAY is not set
@@ -10620,6 +10680,7 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_HMM is not set
 # CONFIG_TEST_FREE_PAGES is not set
 # CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
 CONFIG_ARCH_USE_MEMTEST=y
 # CONFIG_MEMTEST is not set
 # CONFIG_HYPERV_TESTING is not set

From b794b2eebcdd09c8912538f569118cb237182275 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 23:08:33 +0000
Subject: [PATCH 9/23] updpkg: libre/arm-linux-gnueabi-binutils 2.37-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/arm-linux-gnueabi-binutils/PKGBUILD b/libre/arm-linux-gnueabi-binutils/PKGBUILD
index ff4ff4c..145ee20 100644
--- a/libre/arm-linux-gnueabi-binutils/PKGBUILD
+++ b/libre/arm-linux-gnueabi-binutils/PKGBUILD
@@ -2,7 +2,7 @@
 
 _target=arm-linux-gnueabi
 pkgname=$_target-binutils
-pkgver=2.36.1
+pkgver=2.37
 pkgrel=1
 pkgdesc='A set of programs to assemble and manipulate binary and object files for the ARM GNU EABI little-endian target'
 arch=('x86_64' 'i686' 'armv7h')
@@ -10,7 +10,7 @@ url='https://www.gnu.org/software/binutils/'
 license=(GPL)
 depends=(zlib)
 source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig})
-sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201'
+sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6'
             'SKIP')
 validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93'  # Tristan Gingold <gingold@adacore.com>
               '3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F') # Nick Clifton (Chief Binutils Maintainer) <nickc@redhat.com>

From 1c8f7bc7de23d07829986b7e4009e842a3b758b5 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 23:26:25 +0000
Subject: [PATCH 10/23] updpkg: libre/sh-elf-binutils 2.37-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/sh-elf-binutils/PKGBUILD b/libre/sh-elf-binutils/PKGBUILD
index 20c3e21..fa4de58 100644
--- a/libre/sh-elf-binutils/PKGBUILD
+++ b/libre/sh-elf-binutils/PKGBUILD
@@ -2,7 +2,7 @@
 
 _target=sh-elf
 pkgname=$_target-binutils
-pkgver=2.36.1
+pkgver=2.37
 pkgrel=1
 pkgdesc='A set of programs to assemble and manipulate binary and object files for the SuperH (bare-metal) target'
 arch=('x86_64' 'i686' 'armv7h')
@@ -10,7 +10,7 @@ url='http://www.gnu.org/software/binutils/'
 license=(GPL)
 depends=(zlib)
 source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig})
-sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201'
+sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6'
             'SKIP')
 validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93'  # Tristan Gingold <gingold@adacore.com>
               '3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F') # Nick Clifton (Chief Binutils Maintainer) <nickc@redhat.com>

From 6a5dc7a9fc37ffe0a73de3f68c8dc9e8b2440c26 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 13 2021 23:42:07 +0000
Subject: [PATCH 11/23] updpkg: libre/xtensa-elf-binutils 2.37-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/xtensa-elf-binutils/PKGBUILD b/libre/xtensa-elf-binutils/PKGBUILD
index e5aa96e..3d70a0f 100644
--- a/libre/xtensa-elf-binutils/PKGBUILD
+++ b/libre/xtensa-elf-binutils/PKGBUILD
@@ -2,7 +2,7 @@
 
 _target=xtensa-elf
 pkgname=$_target-binutils
-pkgver=2.36.1
+pkgver=2.37
 pkgrel=1
 pkgdesc='A set of programs to assemble and manipulate binary and object files for the Xtensa (bare-metal) target'
 arch=('x86_64' 'i686' 'armv7h')
@@ -11,7 +11,7 @@ license=('GPL')
 depends=('zlib')
 source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}
         binutils-2.36_fixup.patch binutils-2.34_fixup.patch binutils.patch)
-sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201'
+sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6'
             'SKIP'
             'fa1e3e1b30d625eae4e59f1396079cc3fa4d77ec4f119ad20c52db1e1ff1819989ff16dc583d7c719caeb7c0ece48d76fe7c08a85b960c7bc924fe780ffa4ac2'
             '4e5bbba907eec565f5c3ea00fa5a19c146ec19b1f2db38c6581f80a524475ad9b066839ca671da05c6fab9af402f2bb76e01d227e7456b3ef48c6d685605c8d1'

From c1bfed0516d229efd29fc80732a72ce115dc7b34 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 14 2021 02:11:09 +0000
Subject: [PATCH 12/23] updpkg: libre/arm-linux-gnueabi-gcc 11.2.0-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/arm-linux-gnueabi-gcc/PKGBUILD b/libre/arm-linux-gnueabi-gcc/PKGBUILD
index 5694131..8b9b4e4 100644
--- a/libre/arm-linux-gnueabi-gcc/PKGBUILD
+++ b/libre/arm-linux-gnueabi-gcc/PKGBUILD
@@ -2,10 +2,10 @@
 
 _target=arm-linux-gnueabi
 pkgname=$_target-gcc
-_pkgver=10.2.0
-pkgver=$_pkgver
-_islver=0.22
+pkgver=11.2.0
+_islver=0.24
 pkgrel=1
+#_snapshot=8-20210107
 pkgdesc='The GNU Compiler Collection - cross compiler for ARM GNU EABI little-endian target'
 arch=(x86_64 i686 armv7h)
 url='http://gcc.gnu.org/'
@@ -13,18 +13,19 @@ license=(GPL LGPL FDL)
 depends=($_target-binutils libmpc zlib)
 makedepends=(gmp mpfr)
 options=(!emptydirs !strip)
-source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig}
-        http://isl.gforge.inria.fr/isl-$_islver.tar.bz2)
-sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e'
+source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig}
+        #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz
+        https://libisl.sourceforge.io/isl-$_islver.tar.bz2)
+sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf'
             'SKIP'
-            'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668')
+            'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95')
 validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06  # Jakub Jelinek <jakub@redhat.com>
               13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther <richard.guenther@gmail.com>
 
 if [ -n "$_snapshot" ]; then
   _basedir=gcc-$_snapshot
 else
-  _basedir=gcc-$_pkgver
+  _basedir=gcc-$pkgver
 fi
 
 prepare() {
@@ -33,7 +34,7 @@ prepare() {
   # link isl for in-tree builds
   ln -sf ../isl-$_islver isl
 
-  echo $_pkgver > gcc/BASE-VER
+  echo $pkgver > gcc/BASE-VER
 
   # hack! - some configure tests for header files using "$CPP $CPPFLAGS"
   sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure
@@ -49,6 +50,11 @@ build() {
   CFLAGS=${CFLAGS/-pipe/}
   CXXFLAGS=${CXXFLAGS/-pipe/}
 
+  if [ "$CARCH" = i686 ]; then
+    # using -Werror=format-security causes i686 build to fail
+    CXXFLAGS+=' -Wno-error=format-security'
+  fi
+
   $srcdir/$_basedir/configure \
     --target=$_target \
     --prefix=/usr \

From 0c3eae2ec3e5263d3b6680f687e7cf10192f2a67 Mon Sep 17 00:00:00 2001
From: Megver83 <megver83@parabola.nu>
Date: Oct 14 2021 16:15:01 +0000
Subject: [PATCH 13/23] updpkg: libre/sh-elf-gcc 11.2.0-1


Signed-off-by: Megver83 <megver83@parabola.nu>

---

diff --git a/libre/sh-elf-gcc/PKGBUILD b/libre/sh-elf-gcc/PKGBUILD
index 7ef0bcb..ef40f7b 100644
--- a/libre/sh-elf-gcc/PKGBUILD
+++ b/libre/sh-elf-gcc/PKGBUILD
@@ -2,10 +2,10 @@
 
 _target=sh-elf
 pkgname=$_target-gcc
-_pkgver=10.2.0
-pkgver=$_pkgver
-_islver=0.22
+pkgver=11.2.0
+_islver=0.24
 pkgrel=1
+#_snapshot=8-20210107
 pkgdesc='The GNU Compiler Collection - cross compiler for SuperH (bare-metal) target'
 arch=(x86_64 i686 armv7h)
 url='http://gcc.gnu.org/'
@@ -14,17 +14,18 @@ depends=($_target-binutils libmpc zlib)
 makedepends=(gmp mpfr $_target-newlib)
 optdepends=("$_target-newlib: Standard C library ($_target target)")
 options=(!emptydirs !strip)
-source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig}
-        http://isl.gforge.inria.fr/isl-$_islver.tar.bz2)
-sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e'
+source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig}
+        #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz
+        https://libisl.sourceforge.io/isl-$_islver.tar.bz2)
+sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf'
             'SKIP'
-            'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668')
+            'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95')
 validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06  # Jakub Jelinek <jakub@redhat.com>
               13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther <richard.guenther@gmail.com>
 if [ -n "$_snapshot" ]; then
   _basedir=gcc-$_snapshot
 else
-  _basedir=gcc-$_pkgver
+  _basedir=gcc-$pkgver
 fi
 
 prepare() {
@@ -33,7 +34,7 @@ prepare() {
   # link isl for in-tree builds
   ln -sf ../isl-$_islver isl
 
-  echo $_pkgver > gcc/BASE-VER
+  echo $pkgver > gcc/BASE-VER
 
   # hack! - some configure tests for header files using "$CPP $CPPFLAGS"
   sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure
@@ -48,7 +49,12 @@ build() {
   # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565
   CFLAGS=${CFLAGS/-pipe/}
   CXXFLAGS=${CXXFLAGS/-pipe/}
-  
+
+  if [ "$CARCH" = i686 ]; then
+    # using -Werror=format-security causes i686 build to fail
+    CXXFLAGS+=' -Wno-error=format-security'
+  fi
+
   $srcdir/$_basedir/configure \
     --target=$_target \
     --prefix=/usr \

From b3fd4d33c63367821a8d80c05f00e5edab5a4ad4 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 14 2021 16:17:12 +0000
Subject: [PATCH 14/23] updpkg: libre/xtensa-elf-gcc 11.2.0-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/xtensa-elf-gcc/PKGBUILD b/libre/xtensa-elf-gcc/PKGBUILD
index adb789f..b9db258 100644
--- a/libre/xtensa-elf-gcc/PKGBUILD
+++ b/libre/xtensa-elf-gcc/PKGBUILD
@@ -2,10 +2,10 @@
 
 _target=xtensa-elf
 pkgname=$_target-gcc
-_pkgver=10.2.0
-pkgver=$_pkgver
-_islver=0.22
+pkgver=11.2.0
+_islver=0.24
 pkgrel=1
+#_snapshot=8-20210107
 pkgdesc='The GNU Compiler Collection - cross compiler for Xtensa (bare-metal) target'
 arch=(x86_64 i686 armv7h)
 url='http://gcc.gnu.org/'
@@ -13,30 +13,32 @@ license=(GPL LGPL FDL)
 depends=($_target-binutils libmpc zlib)
 makedepends=(gmp mpfr)
 options=(!emptydirs !strip)
-source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig}
-        http://isl.gforge.inria.fr/isl-$_islver.tar.bz2
+source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig}
+        #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz
+        https://libisl.sourceforge.io/isl-$_islver.tar.bz2
         gcc.patch)
-sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e'
+sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf'
             'SKIP'
-            'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668'
+            'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95'
             '7637408259cef4b14a2f41690bbc769ad0dc6cf4d1c782405526aeb58f68193269af6882b23fb57c3521174e45709ed2d54f0af1f835646e70a3bfd9f626aad9')
 validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06  # Jakub Jelinek <jakub@redhat.com>
               13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther <richard.guenther@gmail.com>
 if [ -n "$_snapshot" ]; then
   _basedir=gcc-$_snapshot
 else
-  _basedir=gcc-$_pkgver
+  _basedir=gcc-$pkgver
 fi
 
 prepare() {
   cd $_basedir
 
+  # https://github.com/qca/open-ath9k-htc-firmware/tree/master/local/patches
   patch -Np1 -i ../gcc.patch
 
   # link isl for in-tree builds
   ln -sf ../isl-$_islver isl
 
-  echo $_pkgver > gcc/BASE-VER
+  echo $pkgver > gcc/BASE-VER
 
   # hack! - some configure tests for header files using "$CPP $CPPFLAGS"
   sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure
@@ -52,6 +54,11 @@ build() {
   CFLAGS=${CFLAGS/-pipe/}
   CXXFLAGS=${CXXFLAGS/-pipe/}
 
+  if [ "$CARCH" = i686 ]; then
+    # using -Werror=format-security causes i686 build to fail
+    CXXFLAGS+=' -Wno-error=format-security'
+  fi
+
   $srcdir/$_basedir/configure \
     --target=$_target \
     --prefix=/usr \

From a2e05211157ba21d35acb27a72a0a56a2f93c6d9 Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 14 2021 23:14:23 +0000
Subject: [PATCH 15/23] updpkg: libre/linux-libre-firmware 1:1.4-1


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch b/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch
deleted file mode 100644
index e56707e..0000000
--- a/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch
+++ /dev/null
@@ -1,4982 +0,0 @@
-From c164bf7f87f9081fee7e1a186dd7a87a9a020b9e Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 15:12:33 -0700
-Subject: [PATCH 1/8] Update carl9170 to latest upstream
-
-Based on commit 001384147050b9cd9daadb4d3115cc0f13f5b319
-Dated May 5 2019.
----
- WHENCE                               |   4 +-
- carl9170fw/carlfw/include/wl.h       |   2 +-
- carl9170fw/carlfw/src/hostif.c       |   8 +-
- carl9170fw/carlfw/src/printf.c       |   0
- carl9170fw/carlfw/src/wlantx.c       |   5 +-
- carl9170fw/config/CMakeLists.txt     |   6 +-
- carl9170fw/config/conf.c             | 210 ++++++----
- carl9170fw/config/confdata.c         | 329 +++++++++------
- carl9170fw/config/expr.c             | 206 +++++++---
- carl9170fw/config/expr.h             | 105 ++++-
- carl9170fw/config/kconf_id.c         |  54 ---
- carl9170fw/config/lkc.h              |  50 +--
- carl9170fw/config/lkc_proto.h        |  19 +-
- carl9170fw/config/menu.c             | 259 +++++++++---
- carl9170fw/config/preprocess.c       | 573 +++++++++++++++++++++++++++
- carl9170fw/config/symbol.c           | 255 ++++--------
- carl9170fw/config/util.c             |  86 ++--
- carl9170fw/config/zconf.l            | 336 ++++++++++------
- carl9170fw/config/zconf.y            | 403 +++++++++----------
- carl9170fw/include/linux/ieee80211.h |  24 +-
- carl9170fw/include/shared/wlan.h     |   2 +-
- carl9170fw/toolchain/Makefile        |   8 +-
- carl9170fw/toolchain/SHA256SUMS      |  18 +-
- 23 files changed, 1942 insertions(+), 1020 deletions(-)
- mode change 100755 => 100644 carl9170fw/carlfw/src/printf.c
- delete mode 100644 carl9170fw/config/kconf_id.c
- create mode 100644 carl9170fw/config/preprocess.c
-
-diff --git a/WHENCE b/WHENCE
-index dd8ec20..2932155 100644
---- a/WHENCE
-+++ b/WHENCE
-@@ -142,8 +142,8 @@ From https://git.kernel.org/pub/scm/utils/cis-tools/cis-tools.git
- 
- Driver: carl9170 -- Atheros AR9170 802.11 draft-n USB driver
- 
--Version: Based on commit 370b7919114a02149088c482c8709cafb9bf7478
--dated May 2 2018.
-+Version: Based on commit 001384147050b9cd9daadb4d3115cc0f13f5b319
-+dated May 5 2019.
- 
- Licence: GPLv2 or later.
- 
-diff --git a/carl9170fw/carlfw/include/wl.h b/carl9170fw/carlfw/include/wl.h
-index 8499ca2..5566be4 100644
---- a/carl9170fw/carlfw/include/wl.h
-+++ b/carl9170fw/carlfw/include/wl.h
-@@ -237,7 +237,7 @@ static inline __inline void unhide_super(struct dma_desc *desc)
- 	desc->totalLen += sizeof(struct carl9170_tx_superdesc);
- }
- 
--static inline __inline __hot void read_tsf(uint32_t *tsf)
-+static inline __inline __hot void read_tsf(uint32_t tsf[static 2])
- {
- 	/*
- 	 * "According to the [hardware] documentation:
-diff --git a/carl9170fw/carlfw/src/hostif.c b/carl9170fw/carlfw/src/hostif.c
-index 73e89c7..06726db 100644
---- a/carl9170fw/carlfw/src/hostif.c
-+++ b/carl9170fw/carlfw/src/hostif.c
-@@ -213,10 +213,14 @@ void handle_cmd(struct carl9170_rsp *resp)
- 		fw.reboot = 1;
- 		break;
- 
--	case CARL9170_CMD_READ_TSF:
-+	case CARL9170_CMD_READ_TSF: {
-+		uint32_t tmptsf[2];
-+
-+		read_tsf(tmptsf);
- 		resp->hdr.len = 8;
--		read_tsf((uint32_t *)resp->tsf.tsf);
-+		memcpy(resp->tsf.tsf, tmptsf, sizeof(tmptsf));
- 		break;
-+		}
- 
- 	case CARL9170_CMD_RX_FILTER:
- 		resp->hdr.len = 0;
-diff --git a/carl9170fw/carlfw/src/printf.c b/carl9170fw/carlfw/src/printf.c
-old mode 100755
-new mode 100644
-diff --git a/carl9170fw/carlfw/src/wlantx.c b/carl9170fw/carlfw/src/wlantx.c
-index 474c040..a8d0952 100644
---- a/carl9170fw/carlfw/src/wlantx.c
-+++ b/carl9170fw/carlfw/src/wlantx.c
-@@ -260,7 +260,7 @@ static void __wlan_tx(struct dma_desc *desc)
- 
- 	if (unlikely(super->s.fill_in_tsf)) {
- 		struct ieee80211_mgmt *mgmt = (void *) &super->f.data.i3e;
--		uint32_t *tsf = (uint32_t *) &mgmt->u.probe_resp.timestamp;
-+		uint32_t tmptsf[2];
- 
- 		/*
- 		 * Truth be told: this is a hack.
-@@ -272,7 +272,8 @@ static void __wlan_tx(struct dma_desc *desc)
- 		 * (even, if it's got an accurate atomic clock source).
- 		 */
- 
--		read_tsf(tsf);
-+		read_tsf(tmptsf);
-+		memcpy(&mgmt->u.probe_resp.timestamp, tmptsf, sizeof(tmptsf));
- 	}
- 
- 	wlan_tx_ampdu(super);
-diff --git a/carl9170fw/config/CMakeLists.txt b/carl9170fw/config/CMakeLists.txt
-index 0a96a82..23e7218 100644
---- a/carl9170fw/config/CMakeLists.txt
-+++ b/carl9170fw/config/CMakeLists.txt
-@@ -11,13 +11,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
- 
- file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../include/generated")
- 
--BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p zconf -t")
--FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pzconf -L")
-+BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p yy -t")
-+FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pyy -L")
- 
- SET(zconf_deps ${FLEX_zconfscan_OUTPUTS})
- SET_SOURCE_FILES_PROPERTIES(${BISON_zconf_OUTPUTS}
-       PROPERTIES OBJECT_DEPENDS "${zconf_deps}")
- 
--set(conf_src conf.c ${BISON_zconf_OUTPUTS})
-+set(conf_src conf.c symbol.c confdata.c expr.c preprocess.c ${BISON_zconf_OUTPUTS} ${FLEX_zconfscan_OUTPUTS})
- 
- add_executable(conf ${conf_src})
-diff --git a/carl9170fw/config/conf.c b/carl9170fw/config/conf.c
-index 6be6143..2949b7d 100644
---- a/carl9170fw/config/conf.c
-+++ b/carl9170fw/config/conf.c
-@@ -1,9 +1,8 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
--#include <locale.h>
- #include <ctype.h>
- #include <limits.h>
- #include <stdio.h>
-@@ -20,10 +19,10 @@
- 
- static void conf(struct menu *menu);
- static void check_conf(struct menu *menu);
--static void xfgets(char *str, int size, FILE *in);
- 
- enum input_mode {
- 	oldaskconfig,
-+	syncconfig,
- 	oldconfig,
- 	allnoconfig,
- 	allyesconfig,
-@@ -33,12 +32,13 @@ enum input_mode {
- 	defconfig,
- 	savedefconfig,
- 	listnewconfig,
--	oldnoconfig,
--} input_mode = oldaskconfig;
-+	olddefconfig,
-+};
-+static enum input_mode input_mode = oldaskconfig;
- 
- static int indent = 1;
- static int tty_stdio;
--static int valid_stdin = 1;
-+static int sync_kconfig;
- static int conf_cnt;
- static char line[PATH_MAX];
- static struct menu *rootEntry;
-@@ -70,14 +70,14 @@ static void strip(char *str)
- 		*p-- = 0;
- }
- 
--static void check_stdin(void)
-+/* Helper function to facilitate fgets() by Jean Sacren. */
-+static void xfgets(char *str, int size, FILE *in)
- {
--	if (!valid_stdin) {
--		printf(_("aborted!\n\n"));
--		printf(_("Console input/output is redirected. "));
--		printf(_("Run 'make config' to update configuration.\n\n"));
--		exit(1);
--	}
-+	if (!fgets(str, size, in))
-+		fprintf(stderr, "\nError in reading or end of file.\n");
-+
-+	if (!tty_stdio)
-+		printf("%s", str);
- }
- 
- static int conf_askvalue(struct symbol *sym, const char *def)
-@@ -85,7 +85,7 @@ static int conf_askvalue(struct symbol *sym, const char *def)
- 	enum symbol_type type = sym_get_type(sym);
- 
- 	if (!sym_has_value(sym))
--		printf(_("(NEW) "));
-+		printf("(NEW) ");
- 
- 	line[0] = '\n';
- 	line[1] = 0;
-@@ -99,17 +99,15 @@ static int conf_askvalue(struct symbol *sym, const char *def)
- 
- 	switch (input_mode) {
- 	case oldconfig:
-+	case syncconfig:
- 		if (sym_has_value(sym)) {
- 			printf("%s\n", def);
- 			return 0;
- 		}
--		check_stdin();
- 		/* fall through */
- 	case oldaskconfig:
- 		fflush(stdout);
- 		xfgets(line, sizeof(line), stdin);
--		if (!tty_stdio)
--			printf("\n");
- 		return 1;
- 	default:
- 		break;
-@@ -134,7 +132,7 @@ static int conf_string(struct menu *menu)
- 	const char *def;
- 
- 	while (1) {
--		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-+		printf("%*s%s ", indent - 1, "", menu->prompt->text);
- 		printf("(%s) ", sym->name);
- 		def = sym_get_string_value(sym);
- 		if (sym_get_string_value(sym))
-@@ -167,7 +165,7 @@ static int conf_sym(struct menu *menu)
- 	tristate oldval, newval;
- 
- 	while (1) {
--		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-+		printf("%*s%s ", indent - 1, "", menu->prompt->text);
- 		if (sym->name)
- 			printf("(%s) ", sym->name);
- 		putchar('[');
-@@ -189,9 +187,7 @@ static int conf_sym(struct menu *menu)
- 			printf("/m");
- 		if (oldval != yes && sym_tristate_within_range(sym, yes))
- 			printf("/y");
--		if (menu_has_help(menu))
--			printf("/?");
--		printf("] ");
-+		printf("/?] ");
- 		if (!conf_askvalue(sym, sym_get_string_value(sym)))
- 			return 0;
- 		strip(line);
-@@ -254,7 +250,7 @@ static int conf_choice(struct menu *menu)
- 		case no:
- 			return 1;
- 		case mod:
--			printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-+			printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
- 			return 0;
- 		case yes:
- 			break;
-@@ -264,7 +260,7 @@ static int conf_choice(struct menu *menu)
- 	while (1) {
- 		int cnt, def;
- 
--		printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-+		printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
- 		def_sym = sym_get_choice_value(sym);
- 		cnt = def = 0;
- 		line[0] = 0;
-@@ -272,7 +268,7 @@ static int conf_choice(struct menu *menu)
- 			if (!menu_is_visible(child))
- 				continue;
- 			if (!child->sym) {
--				printf("%*c %s\n", indent, '*', _(menu_get_prompt(child)));
-+				printf("%*c %s\n", indent, '*', menu_get_prompt(child));
- 				continue;
- 			}
- 			cnt++;
-@@ -281,30 +277,27 @@ static int conf_choice(struct menu *menu)
- 				printf("%*c", indent, '>');
- 			} else
- 				printf("%*c", indent, ' ');
--			printf(" %d. %s", cnt, _(menu_get_prompt(child)));
-+			printf(" %d. %s", cnt, menu_get_prompt(child));
- 			if (child->sym->name)
- 				printf(" (%s)", child->sym->name);
- 			if (!sym_has_value(child->sym))
--				printf(_(" (NEW)"));
-+				printf(" (NEW)");
- 			printf("\n");
- 		}
--		printf(_("%*schoice"), indent - 1, "");
-+		printf("%*schoice", indent - 1, "");
- 		if (cnt == 1) {
- 			printf("[1]: 1\n");
- 			goto conf_childs;
- 		}
--		printf("[1-%d", cnt);
--		if (menu_has_help(menu))
--			printf("?");
--		printf("]: ");
-+		printf("[1-%d?]: ", cnt);
- 		switch (input_mode) {
- 		case oldconfig:
-+		case syncconfig:
- 			if (!is_new) {
- 				cnt = def;
- 				printf("%d\n", cnt);
- 				break;
- 			}
--			check_stdin();
- 			/* fall through */
- 		case oldaskconfig:
- 			fflush(stdout);
-@@ -364,9 +357,11 @@ static void conf(struct menu *menu)
- 
- 		switch (prop->type) {
- 		case P_MENU:
--			if ((input_mode == listnewconfig ||
--			     input_mode == oldnoconfig) &&
--			    rootEntry != menu) {
-+			/*
-+			 * Except in oldaskconfig mode, we show only menus that
-+			 * contain new symbols.
-+			 */
-+			if (input_mode != oldaskconfig && rootEntry != menu) {
- 				check_conf(menu);
- 				return;
- 			}
-@@ -376,7 +371,7 @@ static void conf(struct menu *menu)
- 			if (prompt)
- 				printf("%*c\n%*c %s\n%*c\n",
- 					indent, '*',
--					indent, '*', _(prompt),
-+					indent, '*', prompt,
- 					indent, '*');
- 		default:
- 			;
-@@ -426,12 +421,22 @@ static void check_conf(struct menu *menu)
- 		if (sym_is_changable(sym) ||
- 		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
- 			if (input_mode == listnewconfig) {
--				if (sym->name && !sym_is_choice_value(sym)) {
--					printf("%s%s\n", CONFIG_, sym->name);
-+				if (sym->name) {
-+					const char *str;
-+
-+					if (sym->type == S_STRING) {
-+						str = sym_get_string_value(sym);
-+						str = sym_escape_string_value(str);
-+						printf("%s%s=%s\n", CONFIG_, sym->name, str);
-+						free((void *)str);
-+					} else {
-+						str = sym_get_string_value(sym);
-+						printf("%s%s=%s\n", CONFIG_, sym->name, str);
-+					}
- 				}
--			} else if (input_mode != oldnoconfig) {
-+			} else {
- 				if (!conf_cnt++)
--					printf(_("*\n* Restart config...\n*\n"));
-+					printf("*\n* Restart config...\n*\n");
- 				rootEntry = menu_get_parent_menu(menu);
- 				conf(rootEntry);
- 			}
-@@ -443,8 +448,9 @@ static void check_conf(struct menu *menu)
- }
- 
- static struct option long_opts[] = {
--	{"askconfig",       no_argument,       NULL, oldaskconfig},
--	{"config",          no_argument,       NULL, oldconfig},
-+	{"oldaskconfig",    no_argument,       NULL, oldaskconfig},
-+	{"oldconfig",       no_argument,       NULL, oldconfig},
-+	{"syncconfig",      no_argument,       NULL, syncconfig},
- 	{"defconfig",       optional_argument, NULL, defconfig},
- 	{"savedefconfig",   required_argument, NULL, savedefconfig},
- 	{"allnoconfig",     no_argument,       NULL, allnoconfig},
-@@ -453,7 +459,7 @@ static struct option long_opts[] = {
- 	{"alldefconfig",    no_argument,       NULL, alldefconfig},
- 	{"randconfig",      no_argument,       NULL, randconfig},
- 	{"listnewconfig",   no_argument,       NULL, listnewconfig},
--	{"noconfig",        no_argument,       NULL, oldnoconfig},
-+	{"olddefconfig",    no_argument,       NULL, olddefconfig},
- 	{NULL, 0, NULL, 0}
- };
- 
-@@ -463,10 +469,11 @@ static void conf_usage(const char *progname)
- 	printf("Usage: %s [-s] [option] <kconfig-file>\n", progname);
- 	printf("[option] is _one_ of the following:\n");
- 	printf("  --listnewconfig         List new options\n");
--	printf("  --askconfig             Start a new configuration using a line-oriented program\n");
--	printf("  --config                Update a configuration using a provided .config as base\n");
--	printf("  --silentconfig          Same as config, but quietly, additionally update deps\n");
--	printf("  --noconfig              Same as silentconfig but set new symbols to no\n");
-+	printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
-+	printf("  --oldconfig             Update a configuration using a provided .config as base\n");
-+	printf("  --syncconfig            Similar to oldconfig but generates configuration in\n"
-+	       "                          include/{generated/,config/}\n");
-+	printf("  --olddefconfig          Same as oldconfig but sets new symbols to their default value\n");
- 	printf("  --defconfig <file>      New config with default defined in <file>\n");
- 	printf("  --savedefconfig <file>  Save the minimal current configuration to <file>\n");
- 	printf("  --allnoconfig           New config where all options are answered with no\n");
-@@ -482,12 +489,9 @@ int main(int ac, char **av)
- 	int opt;
- 	const char *name, *defconfig_file = NULL /* gcc uninit */;
- 	struct stat tmpstat;
-+	int no_conf_write = 0;
- 
--	setlocale(LC_ALL, "");
--	bindtextdomain(PACKAGE, LOCALEDIR);
--	textdomain(PACKAGE);
--
--	tty_stdio = isatty(0) && isatty(1) && isatty(2);
-+	tty_stdio = isatty(0) && isatty(1);
- 
- 	while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
- 		if (opt == 's') {
-@@ -496,6 +500,14 @@ int main(int ac, char **av)
- 		}
- 		input_mode = (enum input_mode)opt;
- 		switch (opt) {
-+		case syncconfig:
-+			/*
-+			 * syncconfig is invoked during the build stage.
-+			 * Suppress distracting "configuration written to ..."
-+			 */
-+			conf_set_message_callback(NULL);
-+			sync_kconfig = 1;
-+			break;
- 		case defconfig:
- 		case savedefconfig:
- 			defconfig_file = optarg;
-@@ -532,7 +544,7 @@ int main(int ac, char **av)
- 		case allmodconfig:
- 		case alldefconfig:
- 		case listnewconfig:
--		case oldnoconfig:
-+		case olddefconfig:
- 			break;
- 		case '?':
- 			conf_usage(progname);
-@@ -541,30 +553,45 @@ int main(int ac, char **av)
- 		}
- 	}
- 	if (ac == optind) {
--		printf(_("%s: Kconfig file missing\n"), av[0]);
-+		fprintf(stderr, "%s: Kconfig file missing\n", av[0]);
- 		conf_usage(progname);
- 		exit(1);
- 	}
- 	name = av[optind];
- 	conf_parse(name);
- 	//zconfdump(stdout);
-+	if (sync_kconfig) {
-+		name = conf_get_configname();
-+		if (stat(name, &tmpstat)) {
-+			fprintf(stderr, "***\n"
-+				"*** Configuration file \"%s\" not found!\n"
-+				"***\n"
-+				"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
-+				"*** \"make menuconfig\" or \"make xconfig\").\n"
-+				"***\n", name);
-+			exit(1);
-+		}
-+	}
- 
- 	switch (input_mode) {
- 	case defconfig:
- 		if (!defconfig_file)
- 			defconfig_file = conf_get_default_confname();
- 		if (conf_read(defconfig_file)) {
--			printf(_("***\n"
--				"*** Can't find default configuration \"%s\"!\n"
--				"***\n"), defconfig_file);
-+			fprintf(stderr,
-+				"***\n"
-+				  "*** Can't find default configuration \"%s\"!\n"
-+				  "***\n",
-+				defconfig_file);
- 			exit(1);
- 		}
- 		break;
- 	case savedefconfig:
-+	case syncconfig:
- 	case oldaskconfig:
- 	case oldconfig:
- 	case listnewconfig:
--	case oldnoconfig:
-+	case olddefconfig:
- 		conf_read(NULL);
- 		break;
- 	case allnoconfig:
-@@ -578,7 +605,7 @@ int main(int ac, char **av)
- 		if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) {
- 			if (conf_read_simple(name, S_DEF_USER)) {
- 				fprintf(stderr,
--					_("*** Can't read seed configuration \"%s\"!\n"),
-+					"*** Can't read seed configuration \"%s\"!\n",
- 					name);
- 				exit(1);
- 			}
-@@ -595,7 +622,7 @@ int main(int ac, char **av)
- 		if (conf_read_simple(name, S_DEF_USER) &&
- 		    conf_read_simple("all.config", S_DEF_USER)) {
- 			fprintf(stderr,
--				_("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
-+				"*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n",
- 				name);
- 			exit(1);
- 		}
-@@ -604,7 +631,17 @@ int main(int ac, char **av)
- 		break;
- 	}
- 
--	valid_stdin = tty_stdio;
-+	if (sync_kconfig) {
-+		name = getenv("KCONFIG_NOSILENTUPDATE");
-+		if (name && *name) {
-+			if (conf_get_changed()) {
-+				fprintf(stderr,
-+					"\n*** The configuration requires explicit update.\n\n");
-+				return 1;
-+			}
-+			no_conf_write = 1;
-+		}
-+	}
- 
- 	switch (input_mode) {
- 	case allnoconfig:
-@@ -635,44 +672,51 @@ int main(int ac, char **av)
- 		/* fall through */
- 	case oldconfig:
- 	case listnewconfig:
--	case oldnoconfig:
-+	case syncconfig:
- 		/* Update until a loop caused no more changes */
- 		do {
- 			conf_cnt = 0;
- 			check_conf(&rootmenu);
--		} while (conf_cnt &&
--			 (input_mode != listnewconfig &&
--			  input_mode != oldnoconfig));
-+		} while (conf_cnt);
-+		break;
-+	case olddefconfig:
-+	default:
- 		break;
- 	}
- 
- 	if (input_mode == savedefconfig) {
- 		if (conf_write_defconfig(defconfig_file)) {
--			fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"),
-+			fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n",
- 				defconfig_file);
- 			return 1;
- 		}
- 	} else if (input_mode != listnewconfig) {
--		/*
--		 * build so we shall update autoconf.
--		 */
--		if (conf_write(NULL)) {
--			fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
-+		if (!no_conf_write && conf_write(NULL)) {
-+			fprintf(stderr, "\n*** Error during writing of the configuration.\n\n");
- 			exit(1);
- 		}
--		if (conf_write_autoconf()) {
--			fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
-+
-+		/*
-+		 * Create auto.conf if it does not exist.
-+		 * This prevents GNU Make 4.1 or older from emitting
-+		 * "include/generated/auto.conf: No such file or directory"
-+		 * in the top-level Makefile
-+		 *
-+		 * syncconfig always creates or updates auto.conf because it is
-+		 * used during the build.
-+		 */
-+
-+		/*
-+		 * In our cmake case, we always want to update the autogenerated
-+		 * files.
-+		 */
-+		sync_kconfig = 1;
-+
-+		if (conf_write_autoconf(sync_kconfig) && sync_kconfig) {
-+			fprintf(stderr,
-+				"\n*** Error during sync of the configuration.\n\n");
- 			return 1;
- 		}
- 	}
- 	return 0;
- }
--
--/*
-- * Helper function to facilitate fgets() by Jean Sacren.
-- */
--void xfgets(char *str, int size, FILE *in)
--{
--	if (fgets(str, size, in) == NULL)
--		fprintf(stderr, "\nError in reading or end of file.\n");
--}
-diff --git a/carl9170fw/config/confdata.c b/carl9170fw/config/confdata.c
-index e606f06..d67695d 100644
---- a/carl9170fw/config/confdata.c
-+++ b/carl9170fw/config/confdata.c
-@@ -1,12 +1,13 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #include <sys/stat.h>
- #include <ctype.h>
- #include <errno.h>
- #include <fcntl.h>
-+#include <limits.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <stdlib.h>
-@@ -16,6 +17,105 @@
- 
- #include "lkc.h"
- 
-+/* return true if 'path' exists, false otherwise */
-+static bool is_present(const char *path)
-+{
-+	struct stat st;
-+
-+	return !stat(path, &st);
-+}
-+
-+/* return true if 'path' exists and it is a directory, false otherwise */
-+static bool is_dir(const char *path)
-+{
-+	struct stat st;
-+
-+	if (stat(path, &st))
-+		return 0;
-+
-+	return S_ISDIR(st.st_mode);
-+}
-+
-+/*
-+ * Create the parent directory of the given path.
-+ *
-+ * For example, if 'include/config/auto.conf' is given, create 'include/config'.
-+ */
-+static int make_parent_dir(const char *path)
-+{
-+	char tmp[PATH_MAX + 1];
-+	char *p;
-+
-+	strncpy(tmp, path, sizeof(tmp));
-+	tmp[sizeof(tmp) - 1] = 0;
-+
-+	/* Remove the base name. Just return if nothing is left */
-+	p = strrchr(tmp, '/');
-+	if (!p)
-+		return 0;
-+	*(p + 1) = 0;
-+
-+	/* Just in case it is an absolute path */
-+	p = tmp;
-+	while (*p == '/')
-+		p++;
-+
-+	while ((p = strchr(p, '/'))) {
-+		*p = 0;
-+
-+		/* skip if the directory exists */
-+		if (!is_dir(tmp) && mkdir(tmp, 0755))
-+			return -1;
-+
-+		*p = '/';
-+		while (*p == '/')
-+			p++;
-+	}
-+
-+	return 0;
-+}
-+
-+static char depfile_path[PATH_MAX];
-+static size_t depfile_prefix_len;
-+
-+/* touch depfile for symbol 'name' */
-+static int conf_touch_dep(const char *name)
-+{
-+	int fd, ret;
-+	const char *s;
-+	char *d, c;
-+
-+	/* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
-+	if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
-+		return -1;
-+
-+	d = depfile_path + depfile_prefix_len;
-+	s = name;
-+
-+	while ((c = *s++))
-+		*d++ = (c == '_') ? '/' : tolower(c);
-+	strcpy(d, ".h");
-+
-+	/* Assume directory path already exists. */
-+	fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-+	if (fd == -1) {
-+		if (errno != ENOENT)
-+			return -1;
-+
-+		ret = make_parent_dir(depfile_path);
-+		if (ret)
-+			return ret;
-+
-+		/* Try it again. */
-+		fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-+		if (fd == -1)
-+			return -1;
-+	}
-+	close(fd);
-+
-+	return 0;
-+}
-+
- struct conf_printer {
- 	void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
- 	void (*print_comment)(FILE *, const char *, void *);
-@@ -28,7 +128,7 @@ static void conf_message(const char *fmt, ...)
- 	__attribute__ ((format (printf, 1, 2)));
- 
- static const char *conf_filename;
--static int conf_lineno, conf_warnings, conf_unsaved;
-+static int conf_lineno, conf_warnings;
- 
- const char conf_defname[] = "include/generated/defconfig";
- 
-@@ -43,16 +143,16 @@ static void conf_warning(const char *fmt, ...)
- 	conf_warnings++;
- }
- 
--static void conf_default_message_callback(const char *fmt, va_list ap)
-+static void conf_default_message_callback(const char *s)
- {
- 	printf("#\n# ");
--	vprintf(fmt, ap);
-+	printf("%s", s);
- 	printf("\n#\n");
- }
- 
--static void (*conf_message_callback) (const char *fmt, va_list ap) =
-+static void (*conf_message_callback)(const char *s) =
- 	conf_default_message_callback;
--void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
-+void conf_set_message_callback(void (*fn)(const char *s))
- {
- 	conf_message_callback = fn;
- }
-@@ -60,10 +160,15 @@ void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
- static void conf_message(const char *fmt, ...)
- {
- 	va_list ap;
-+	char buf[4096];
-+
-+	if (!conf_message_callback)
-+		return;
- 
- 	va_start(ap, fmt);
--	if (conf_message_callback)
--		conf_message_callback(fmt, ap);
-+
-+	vsnprintf(buf, sizeof(buf), fmt, ap);
-+	conf_message_callback(buf);
- 	va_end(ap);
- }
- 
-@@ -81,43 +186,16 @@ const char *conf_get_autoconfig_name(void)
- 	return name ? name : "include/generated/auto.conf";
- }
- 
--static char *conf_expand_value(const char *in)
--{
--	struct symbol *sym;
--	const char *src;
--	static char res_value[SYMBOL_MAXLENGTH];
--	char *dst, name[SYMBOL_MAXLENGTH];
--
--	res_value[0] = 0;
--	dst = name;
--	while ((src = strchr(in, '$'))) {
--		strncat(res_value, in, src - in);
--		src++;
--		dst = name;
--		while (isalnum(*src) || *src == '_')
--			*dst++ = *src++;
--		*dst = 0;
--		sym = sym_lookup(name, 0);
--		sym_calc_value(sym);
--		strcat(res_value, sym_get_string_value(sym));
--		in = src;
--	}
--	strcat(res_value, in);
--
--	return res_value;
--}
--
- char *conf_get_default_confname(void)
- {
--	struct stat buf;
- 	static char fullname[PATH_MAX+1];
- 	char *env, *name;
- 
--	name = conf_expand_value(conf_defname);
-+	name = expand_string(conf_defname);
- 	env = getenv(SRCTREE);
- 	if (env) {
- 		sprintf(fullname, "%s/%s", env, name);
--		if (!stat(fullname, &buf))
-+		if (is_present(fullname))
- 			return fullname;
- 	}
- 	return name;
-@@ -150,14 +228,6 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
- 			conf_warning("symbol value '%s' invalid for %s",
- 				     p, sym->name);
- 		return 1;
--	case S_OTHER:
--		if (*p != '"') {
--			for (p2 = p; *p2 && !isspace(*p2); p2++)
--				;
--			sym->type = S_STRING;
--			goto done;
--		}
--		/* fall through */
- 	case S_STRING:
- 		if (*p++ != '"')
- 			break;
-@@ -176,9 +246,8 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
- 		/* fall through */
- 	case S_INT:
- 	case S_HEX:
--	done:
- 		if (sym_string_valid(sym, p)) {
--			sym->def[def].val = strdup(p);
-+			sym->def[def].val = xstrdup(p);
- 			sym->flags |= def_flags;
- 		} else {
- 			if (def != S_DEF_AUTO)
-@@ -201,7 +270,7 @@ static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
- 	if (new_size > *n) {
- 		new_size += LINE_GROWTH - 1;
- 		new_size *= 2;
--		nline = realloc(*lineptr, new_size);
-+		nline = xrealloc(*lineptr, new_size);
- 		if (!nline)
- 			return -1;
- 
-@@ -274,10 +343,11 @@ int conf_read_simple(const char *name, int def)
- 			if (expr_calc_value(prop->visible.expr) == no ||
- 			    prop->expr->type != E_SYMBOL)
- 				continue;
--			name = conf_expand_value(prop->expr->left.sym->name);
-+			sym_calc_value(prop->expr->left.sym);
-+			name = sym_get_string_value(prop->expr->left.sym);
- 			in = zconf_fopen(name);
- 			if (in) {
--				conf_message(_("using defaults found in %s"),
-+				conf_message("using defaults found in %s",
- 					 name);
- 				goto load;
- 			}
-@@ -290,7 +360,6 @@ load:
- 	conf_filename = name;
- 	conf_lineno = 0;
- 	conf_warnings = 0;
--	conf_unsaved = 0;
- 
- 	def_flags = SYMBOL_DEF << def;
- 	for_all_symbols(i, sym) {
-@@ -327,7 +396,7 @@ load:
- 				sym = sym_find(line + 2 + strlen(CONFIG_));
- 				if (!sym) {
- 					sym_add_change_count(1);
--					goto setsym;
-+					continue;
- 				}
- 			} else {
- 				sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
-@@ -357,17 +426,22 @@ load:
- 				if (*p2 == '\r')
- 					*p2 = 0;
- 			}
--			if (def == S_DEF_USER) {
--				sym = sym_find(line + strlen(CONFIG_));
--				if (!sym) {
-+
-+			sym = sym_find(line + strlen(CONFIG_));
-+			if (!sym) {
-+				if (def == S_DEF_AUTO)
-+					/*
-+					 * Reading from include/config/auto.conf
-+					 * If CONFIG_FOO previously existed in
-+					 * auto.conf but it is missing now,
-+					 * include/config/foo.h must be touched.
-+					 */
-+					conf_touch_dep(line + strlen(CONFIG_));
-+				else
- 					sym_add_change_count(1);
--					goto setsym;
--				}
--			} else {
--				sym = sym_lookup(line + strlen(CONFIG_), 0);
--				if (sym->type == S_UNKNOWN)
--					sym->type = S_OTHER;
-+				continue;
- 			}
-+
- 			if (sym->flags & def_flags) {
- 				conf_warning("override: reassigning to symbol %s", sym->name);
- 			}
-@@ -380,7 +454,7 @@ load:
- 
- 			continue;
- 		}
--setsym:
-+
- 		if (sym && sym_is_choice_value(sym)) {
- 			struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
- 			switch (sym->def[def].tri) {
-@@ -409,6 +483,7 @@ setsym:
- int conf_read(const char *name)
- {
- 	struct symbol *sym;
-+	int conf_unsaved = 0;
- 	int i;
- 
- 	sym_set_change_count(0);
-@@ -422,7 +497,7 @@ int conf_read(const char *name)
- 
- 	for_all_symbols(i, sym) {
- 		sym_calc_value(sym);
--		if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
-+		if (sym_is_choice(sym) || (sym->flags & SYMBOL_NO_WRITE))
- 			continue;
- 		if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
- 			/* check that calculated value agrees with saved value */
-@@ -678,7 +753,6 @@ static void conf_write_symbol(FILE *fp, struct symbol *sym,
- 	const char *str;
- 
- 	switch (sym->type) {
--	case S_OTHER:
- 	case S_UNKNOWN:
- 		break;
- 	case S_STRING:
-@@ -791,15 +865,14 @@ int conf_write(const char *name)
- 	struct menu *menu;
- 	const char *basename;
- 	const char *str;
--	char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
-+	char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8];
- 	char *env;
- 
- 	dirname[0] = 0;
- 	if (name && name[0]) {
--		struct stat st;
- 		char *slash;
- 
--		if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
-+		if (is_dir(name)) {
- 			strcpy(dirname, name);
- 			strcat(dirname, "/");
- 			basename = conf_get_configname();
-@@ -877,33 +950,61 @@ next:
- 			return 1;
- 	}
- 
--	conf_message(_("configuration written to %s"), newname);
-+	conf_message("configuration written to %s", newname);
- 
- 	sym_set_change_count(0);
- 
- 	return 0;
- }
- 
--static int conf_split_config(void)
-+/* write a dependency file as used by kbuild to track dependencies */
-+static int conf_write_dep(const char *name)
-+{
-+	struct file *file;
-+	FILE *out;
-+
-+	if (!name)
-+		name = ".kconfig.d";
-+	out = fopen("..config.tmp", "w");
-+	if (!out)
-+		return 1;
-+	fprintf(out, "deps_config := \\\n");
-+	for (file = file_list; file; file = file->next) {
-+		if (file->next)
-+			fprintf(out, "\t%s \\\n", file->name);
-+		else
-+			fprintf(out, "\t%s\n", file->name);
-+	}
-+	fprintf(out, "\n%s: \\\n"
-+		     "\t$(deps_config)\n\n", conf_get_autoconfig_name());
-+
-+	env_write_dep(out, conf_get_autoconfig_name());
-+
-+	fprintf(out, "\n$(deps_config): ;\n");
-+	fclose(out);
-+
-+	if (make_parent_dir(name))
-+		return 1;
-+	rename("..config.tmp", name);
-+	return 0;
-+}
-+
-+static int conf_touch_deps(void)
- {
- 	const char *name;
--	char path[PATH_MAX+1];
--	char *s, *d, c;
- 	struct symbol *sym;
--	struct stat sb;
--	int res, i, fd;
-+	int res, i;
-+
-+	strcpy(depfile_path, "include/generated/");
-+	depfile_prefix_len = strlen(depfile_path);
- 
- 	name = conf_get_autoconfig_name();
- 	conf_read_simple(name, S_DEF_AUTO);
- 	sym_calc_value(modules_sym);
- 
--	if (chdir("include/generated"))
--		return 1;
--
--	res = 0;
- 	for_all_symbols(i, sym) {
- 		sym_calc_value(sym);
--		if ((sym->flags & SYMBOL_AUTO) || !sym->name)
-+		if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name)
- 			continue;
- 		if (sym->flags & SYMBOL_WRITE) {
- 			if (sym->flags & SYMBOL_DEF_AUTO) {
-@@ -952,63 +1053,30 @@ static int conf_split_config(void)
- 		 *	different from 'no').
- 		 */
- 
--		/* Replace all '_' and append ".h" */
--		s = sym->name;
--		d = path;
--		while ((c = *s++)) {
--			c = tolower(c);
--			*d++ = (c == '_') ? '/' : c;
--		}
--		strcpy(d, ".h");
--
--		/* Assume directory path already exists. */
--		fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
--		if (fd == -1) {
--			if (errno != ENOENT) {
--				res = 1;
--				break;
--			}
--			/*
--			 * Create directory components,
--			 * unless they exist already.
--			 */
--			d = path;
--			while ((d = strchr(d, '/'))) {
--				*d = 0;
--				if (stat(path, &sb) && mkdir(path, 0755)) {
--					res = 1;
--					goto out;
--				}
--				*d++ = '/';
--			}
--			/* Try it again. */
--			fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
--			if (fd == -1) {
--				res = 1;
--				break;
--			}
--		}
--		close(fd);
-+		res = conf_touch_dep(sym->name);
-+		if (res)
-+			return res;
- 	}
--out:
--	if (chdir("../.."))
--		return 1;
- 
--	return res;
-+	return 0;
- }
- 
--int conf_write_autoconf(void)
-+int conf_write_autoconf(int overwrite)
- {
- 	struct symbol *sym;
- 	const char *name;
-+	const char *autoconf_name = conf_get_autoconfig_name();
- 	FILE *out, *tristate, *out_h, *out_c;
- 	int i;
- 
-+	if (!overwrite && is_present(autoconf_name))
-+		return 0;
-+
- 	sym_clear_all_valid();
- 
--	file_write_dep("include/generated/auto.conf.cmd");
-+	conf_write_dep("include/generated/auto.conf.cmd");
- 
--	if (conf_split_config())
-+	if (conf_touch_deps())
- 		return 1;
- 
- 	out = fopen(".tmpconfig", "w");
-@@ -1065,24 +1133,35 @@ int conf_write_autoconf(void)
- 	name = getenv("KCONFIG_AUTOHEADER");
- 	if (!name)
- 		name = "include/generated/autoconf.h";
-+	if (make_parent_dir(name))
-+		return 1;
- 	if (rename(".tmpconfig.h", name))
- 		return 1;
-+
- 	name = getenv("KCONFIG_TRISTATE");
- 	if (!name)
- 		name = "include/generated/tristate.conf";
-+	if (make_parent_dir(name))
-+		return 1;
- 	if (rename(".tmpconfig_tristate", name))
- 		return 1;
-+
-+	if (make_parent_dir(autoconf_name))
-+		return 1;
-+
- 	name = getenv("KCONFIG_CMAKE");
- 	if (!name)
- 		name = "config.cmake";
-+	if (make_parent_dir(name))
-+		return 1;
- 	if (rename(".tmpconfig.cmake", name))
- 		return 1;
--	name = conf_get_autoconfig_name();
-+
- 	/*
- 	 * This must be the last step, kbuild has a dependency on auto.conf
- 	 * and this marks the successful completion of the previous steps.
- 	 */
--	if (rename(".tmpconfig", name))
-+	if (rename(".tmpconfig", autoconf_name))
- 		return 1;
- 
- 	return 0;
-@@ -1186,7 +1265,7 @@ void set_all_choice_values(struct symbol *csym)
- bool conf_set_all_new_symbols(enum conf_def_mode mode)
- {
- 	struct symbol *sym, *csym;
--	int i, cnt, pby, pty, ptm;	/* pby: probability of boolean  = y
-+	int i, cnt, pby, pty, ptm;	/* pby: probability of bool     = y
- 					 * pty: probability of tristate = y
- 					 * ptm: probability of tristate = m
- 					 */
-diff --git a/carl9170fw/config/expr.c b/carl9170fw/config/expr.c
-index 8cee597..77ffff3 100644
---- a/carl9170fw/config/expr.c
-+++ b/carl9170fw/config/expr.c
-@@ -1,8 +1,10 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
-+#include <ctype.h>
-+#include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -94,7 +96,7 @@ struct expr *expr_copy(const struct expr *org)
- 		e->right.expr = expr_copy(org->right.expr);
- 		break;
- 	default:
--		printf("can't copy type %d\n", e->type);
-+		fprintf(stderr, "can't copy type %d\n", e->type);
- 		free(e);
- 		e = NULL;
- 		break;
-@@ -113,7 +115,7 @@ void expr_free(struct expr *e)
- 		break;
- 	case E_NOT:
- 		expr_free(e->left.expr);
--		return;
-+		break;
- 	case E_EQUAL:
- 	case E_GEQ:
- 	case E_GTH:
-@@ -127,7 +129,7 @@ void expr_free(struct expr *e)
- 		expr_free(e->right.expr);
- 		break;
- 	default:
--		printf("how to free type %d?\n", e->type);
-+		fprintf(stderr, "how to free type %d?\n", e->type);
- 		break;
- 	}
- 	free(e);
-@@ -138,8 +140,18 @@ static int trans_count;
- #define e1 (*ep1)
- #define e2 (*ep2)
- 
-+/*
-+ * expr_eliminate_eq() helper.
-+ *
-+ * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does
-+ * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared
-+ * against all other leaves. Two equal leaves are both replaced with either 'y'
-+ * or 'n' as appropriate for 'type', to be eliminated later.
-+ */
- static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
- {
-+	/* Recurse down to leaves */
-+
- 	if (e1->type == type) {
- 		__expr_eliminate_eq(type, &e1->left.expr, &e2);
- 		__expr_eliminate_eq(type, &e1->right.expr, &e2);
-@@ -150,12 +162,18 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e
- 		__expr_eliminate_eq(type, &e1, &e2->right.expr);
- 		return;
- 	}
-+
-+	/* e1 and e2 are leaves. Compare them. */
-+
- 	if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
- 	    e1->left.sym == e2->left.sym &&
- 	    (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no))
- 		return;
- 	if (!expr_eq(e1, e2))
- 		return;
-+
-+	/* e1 and e2 are equal leaves. Prepare them for elimination. */
-+
- 	trans_count++;
- 	expr_free(e1); expr_free(e2);
- 	switch (type) {
-@@ -172,6 +190,35 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e
- 	}
- }
- 
-+/*
-+ * Rewrites the expressions 'ep1' and 'ep2' to remove operands common to both.
-+ * Example reductions:
-+ *
-+ *	ep1: A && B           ->  ep1: y
-+ *	ep2: A && B && C      ->  ep2: C
-+ *
-+ *	ep1: A || B           ->  ep1: n
-+ *	ep2: A || B || C      ->  ep2: C
-+ *
-+ *	ep1: A && (B && FOO)  ->  ep1: FOO
-+ *	ep2: (BAR && B) && A  ->  ep2: BAR
-+ *
-+ *	ep1: A && (B || C)    ->  ep1: y
-+ *	ep2: (C || B) && A    ->  ep2: y
-+ *
-+ * Comparisons are done between all operands at the same "level" of && or ||.
-+ * For example, in the expression 'e1 && (e2 || e3) && (e4 || e5)', the
-+ * following operands will be compared:
-+ *
-+ *	- 'e1', 'e2 || e3', and 'e4 || e5', against each other
-+ *	- e2 against e3
-+ *	- e4 against e5
-+ *
-+ * Parentheses are irrelevant within a single level. 'e1 && (e2 && e3)' and
-+ * '(e1 && e2) && e3' are both a single level.
-+ *
-+ * See __expr_eliminate_eq() as well.
-+ */
- void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
- {
- 	if (!e1 || !e2)
-@@ -197,6 +244,12 @@ void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
- #undef e1
- #undef e2
- 
-+/*
-+ * Returns true if 'e1' and 'e2' are equal, after minor simplification. Two
-+ * &&/|| expressions are considered equal if every operand in one expression
-+ * equals some operand in the other (operands do not need to appear in the same
-+ * order), recursively.
-+ */
- static int expr_eq(struct expr *e1, struct expr *e2)
- {
- 	int res, old_count;
-@@ -243,6 +296,17 @@ static int expr_eq(struct expr *e1, struct expr *e2)
- 	return 0;
- }
- 
-+/*
-+ * Recursively performs the following simplifications in-place (as well as the
-+ * corresponding simplifications with swapped operands):
-+ *
-+ *	expr && n  ->  n
-+ *	expr && y  ->  expr
-+ *	expr || n  ->  expr
-+ *	expr || y  ->  y
-+ *
-+ * Returns the optimized expression.
-+ */
- static struct expr *expr_eliminate_yn(struct expr *e)
- {
- 	struct expr *tmp;
-@@ -516,12 +580,21 @@ static struct expr *expr_join_and(struct expr *e1, struct expr *e2)
- 	return NULL;
- }
- 
-+/*
-+ * expr_eliminate_dups() helper.
-+ *
-+ * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does
-+ * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared
-+ * against all other leaves to look for simplifications.
-+ */
- static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
- {
- #define e1 (*ep1)
- #define e2 (*ep2)
- 	struct expr *tmp;
- 
-+	/* Recurse down to leaves */
-+
- 	if (e1->type == type) {
- 		expr_eliminate_dups1(type, &e1->left.expr, &e2);
- 		expr_eliminate_dups1(type, &e1->right.expr, &e2);
-@@ -532,6 +605,9 @@ static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct
- 		expr_eliminate_dups1(type, &e1, &e2->right.expr);
- 		return;
- 	}
-+
-+	/* e1 and e2 are leaves. Compare and process them. */
-+
- 	if (e1 == e2)
- 		return;
- 
-@@ -568,6 +644,17 @@ static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct
- #undef e2
- }
- 
-+/*
-+ * Rewrites 'e' in-place to remove ("join") duplicate and other redundant
-+ * operands.
-+ *
-+ * Example simplifications:
-+ *
-+ *	A || B || A    ->  A || B
-+ *	A && B && A=y  ->  A=y && B
-+ *
-+ * Returns the deduplicated expression.
-+ */
- struct expr *expr_eliminate_dups(struct expr *e)
- {
- 	int oldcount;
-@@ -584,6 +671,7 @@ struct expr *expr_eliminate_dups(struct expr *e)
- 			;
- 		}
- 		if (!trans_count)
-+			/* No simplifications done in this pass. We're done */
- 			break;
- 		e = expr_eliminate_yn(e);
- 	}
-@@ -591,6 +679,12 @@ struct expr *expr_eliminate_dups(struct expr *e)
- 	return e;
- }
- 
-+/*
-+ * Performs various simplifications involving logical operators and
-+ * comparisons.
-+ *
-+ * Allocates and returns a new expression.
-+ */
- struct expr *expr_transform(struct expr *e)
- {
- 	struct expr *tmp;
-@@ -805,6 +899,20 @@ bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
-  	return false;
- }
- 
-+/*
-+ * Inserts explicit comparisons of type 'type' to symbol 'sym' into the
-+ * expression 'e'.
-+ *
-+ * Examples transformations for type == E_UNEQUAL, sym == &symbol_no:
-+ *
-+ *	A              ->  A!=n
-+ *	!A             ->  A=n
-+ *	A && B         ->  !(A=n || B=n)
-+ *	A || B         ->  !(A=n && B=n)
-+ *	A && (B || C)  ->  !(A=n || (B=n && C=n))
-+ *
-+ * Allocates and returns a new expression.
-+ */
- struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym)
- {
- 	struct expr *e1, *e2;
-@@ -874,7 +982,6 @@ enum string_value_kind {
- 	k_string,
- 	k_signed,
- 	k_unsigned,
--	k_invalid
- };
- 
- union string_value {
-@@ -905,13 +1012,10 @@ static enum string_value_kind expr_parse_string(const char *str,
- 		val->u = strtoull(str, &tail, 16);
- 		kind = k_unsigned;
- 		break;
--	case S_STRING:
--	case S_UNKNOWN:
-+	default:
- 		val->s = strtoll(str, &tail, 0);
- 		kind = k_signed;
- 		break;
--	default:
--		return k_invalid;
- 	}
- 	return !errno && !*tail && tail > str && isxdigit(tail[-1])
- 	       ? kind : k_string;
-@@ -967,13 +1071,7 @@ tristate expr_calc_value(struct expr *e)
- 
- 	if (k1 == k_string || k2 == k_string)
- 		res = strcmp(str1, str2);
--	else if (k1 == k_invalid || k2 == k_invalid) {
--		if (e->type != E_EQUAL && e->type != E_UNEQUAL) {
--			printf("Cannot compare \"%s\" and \"%s\"\n", str1, str2);
--			return no;
--		}
--		res = strcmp(str1, str2);
--	} else if (k1 == k_unsigned || k2 == k_unsigned)
-+	else if (k1 == k_unsigned || k2 == k_unsigned)
- 		res = (lval.u > rval.u) - (lval.u < rval.u);
- 	else /* if (k1 == k_signed && k2 == k_signed) */
- 		res = (lval.s > rval.s) - (lval.s < rval.s);
-@@ -1031,49 +1129,9 @@ static int expr_compare_type(enum expr_type t1, enum expr_type t2)
- 	return 0;
- }
- 
--static inline struct expr *
--expr_get_leftmost_symbol(const struct expr *e)
--{
--
--	if (e == NULL)
--		return NULL;
--
--	while (e->type != E_SYMBOL)
--		e = e->left.expr;
--
--	return expr_copy(e);
--}
--
--/*
-- * Given expression `e1' and `e2', returns the leaf of the longest
-- * sub-expression of `e1' not containing 'e2.
-- */
--struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2)
--{
--	struct expr *ret;
--
--	switch (e1->type) {
--	case E_OR:
--		return expr_alloc_and(
--		    expr_simplify_unmet_dep(e1->left.expr, e2),
--		    expr_simplify_unmet_dep(e1->right.expr, e2));
--	case E_AND: {
--		struct expr *e;
--		e = expr_alloc_and(expr_copy(e1), expr_copy(e2));
--		e = expr_eliminate_dups(e);
--		ret = (!expr_eq(e, e1)) ? e1 : NULL;
--		expr_free(e);
--		break;
--		}
--	default:
--		ret = e1;
--		break;
--	}
--
--	return expr_get_leftmost_symbol(ret);
--}
--
--void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
-+void expr_print(struct expr *e,
-+		void (*fn)(void *, struct symbol *, const char *),
-+		void *data, int prevtoken)
- {
- 	if (!e) {
- 		fn(data, NULL, "y");
-@@ -1207,3 +1265,33 @@ void expr_gstr_print(struct expr *e, struct gstr *gs)
- {
- 	expr_print(e, expr_print_gstr_helper, gs, E_NONE);
- }
-+
-+/*
-+ * Transform the top level "||" tokens into newlines and prepend each
-+ * line with a minus. This makes expressions much easier to read.
-+ * Suitable for reverse dependency expressions.
-+ */
-+static void expr_print_revdep(struct expr *e,
-+			      void (*fn)(void *, struct symbol *, const char *),
-+			      void *data, tristate pr_type, const char **title)
-+{
-+	if (e->type == E_OR) {
-+		expr_print_revdep(e->left.expr, fn, data, pr_type, title);
-+		expr_print_revdep(e->right.expr, fn, data, pr_type, title);
-+	} else if (expr_calc_value(e) == pr_type) {
-+		if (*title) {
-+			fn(data, NULL, *title);
-+			*title = NULL;
-+		}
-+
-+		fn(data, NULL, "  - ");
-+		expr_print(e, fn, data, E_NONE);
-+		fn(data, NULL, "\n");
-+	}
-+}
-+
-+void expr_gstr_print_revdep(struct expr *e, struct gstr *gs,
-+			    tristate pr_type, const char *title)
-+{
-+	expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title);
-+}
-diff --git a/carl9170fw/config/expr.h b/carl9170fw/config/expr.h
-index a73f762..999edb6 100644
---- a/carl9170fw/config/expr.h
-+++ b/carl9170fw/config/expr.h
-@@ -1,6 +1,6 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #ifndef EXPR_H
-@@ -62,7 +62,7 @@ struct symbol_value {
- };
- 
- enum symbol_type {
--	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
-+	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING
- };
- 
- /* enum values are used as index to symbol.def[] */
-@@ -74,21 +74,64 @@ enum {
- 	S_DEF_COUNT
- };
- 
-+/*
-+ * Represents a configuration symbol.
-+ *
-+ * Choices are represented as a special kind of symbol and have the
-+ * SYMBOL_CHOICE bit set in 'flags'.
-+ */
- struct symbol {
-+	/* The next symbol in the same bucket in the symbol hash table */
- 	struct symbol *next;
-+
-+	/* The name of the symbol, e.g. "FOO" for 'config FOO' */
- 	char *name;
-+
-+	/* S_BOOLEAN, S_TRISTATE, ... */
- 	enum symbol_type type;
-+
-+	/*
-+	 * The calculated value of the symbol. The SYMBOL_VALID bit is set in
-+	 * 'flags' when this is up to date. Note that this value might differ
-+	 * from the user value set in e.g. a .config file, due to visibility.
-+	 */
- 	struct symbol_value curr;
-+
-+	/*
-+	 * Values for the symbol provided from outside. def[S_DEF_USER] holds
-+	 * the .config value.
-+	 */
- 	struct symbol_value def[S_DEF_COUNT];
-+
-+	/*
-+	 * An upper bound on the tristate value the user can set for the symbol
-+	 * if it is a boolean or tristate. Calculated from prompt dependencies,
-+	 * which also inherit dependencies from enclosing menus, choices, and
-+	 * ifs. If 'n', the user value will be ignored.
-+	 *
-+	 * Symbols lacking prompts always have visibility 'n'.
-+	 */
- 	tristate visible;
-+
-+	/* SYMBOL_* flags */
- 	int flags;
-+
-+	/* List of properties. See prop_type. */
- 	struct property *prop;
-+
-+	/* Dependencies from enclosing menus, choices, and ifs */
- 	struct expr_value dir_dep;
-+
-+	/* Reverse dependencies through being selected by other symbols */
- 	struct expr_value rev_dep;
-+
-+	/*
-+	 * "Weak" reverse dependencies through being implied by other symbols
-+	 */
- 	struct expr_value implied;
- };
- 
--#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
-+#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next)
- 
- #define SYMBOL_CONST      0x0001  /* symbol is const */
- #define SYMBOL_CHECK      0x0008  /* used during dependency checking */
-@@ -98,7 +141,7 @@ struct symbol {
- #define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
- #define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
- #define SYMBOL_CHANGED    0x0400  /* ? */
--#define SYMBOL_AUTO       0x1000  /* value from environment variable */
-+#define SYMBOL_NO_WRITE   0x1000  /* Symbol for internal use only; it will not be written */
- #define SYMBOL_CHECKED    0x2000  /* used during dependency checking */
- #define SYMBOL_WARNED     0x8000  /* warning has been issued */
- 
-@@ -128,18 +171,20 @@ struct symbol {
-  * config BAZ
-  *         int "BAZ Value"
-  *         range 1..255
-+ *
-+ * Please, also check zconf.y:print_symbol() when modifying the
-+ * list of property types!
-  */
- enum prop_type {
- 	P_UNKNOWN,
- 	P_PROMPT,   /* prompt "foo prompt" or "BAZ Value" */
- 	P_COMMENT,  /* text associated with a comment */
--	P_MENU,     /* prompt associated with a menuconfig option */
-+	P_MENU,     /* prompt associated with a menu or menuconfig symbol */
- 	P_DEFAULT,  /* default y */
- 	P_CHOICE,   /* choice value */
- 	P_SELECT,   /* select BAR */
- 	P_IMPLY,    /* imply BAR */
- 	P_RANGE,    /* range 7..100 (for a symbol) */
--	P_ENV,      /* value from environment variable */
- 	P_SYMBOL,   /* where a symbol is defined */
- };
- 
-@@ -166,22 +211,67 @@ struct property {
- 	for (st = sym->prop; st; st = st->next) \
- 		if (st->text)
- 
-+/*
-+ * Represents a node in the menu tree, as seen in e.g. menuconfig (though used
-+ * for all front ends). Each symbol, menu, etc. defined in the Kconfig files
-+ * gets a node. A symbol defined in multiple locations gets one node at each
-+ * location.
-+ */
- struct menu {
-+	/* The next menu node at the same level */
- 	struct menu *next;
-+
-+	/* The parent menu node, corresponding to e.g. a menu or choice */
- 	struct menu *parent;
-+
-+	/* The first child menu node, for e.g. menus and choices */
- 	struct menu *list;
-+
-+	/*
-+	 * The symbol associated with the menu node. Choices are implemented as
-+	 * a special kind of symbol. NULL for menus, comments, and ifs.
-+	 */
- 	struct symbol *sym;
-+
-+	/*
-+	 * The prompt associated with the node. This holds the prompt for a
-+	 * symbol as well as the text for a menu or comment, along with the
-+	 * type (P_PROMPT, P_MENU, etc.)
-+	 */
- 	struct property *prompt;
-+
-+	/*
-+	 * 'visible if' dependencies. If more than one is given, they will be
-+	 * ANDed together.
-+	 */
- 	struct expr *visibility;
-+
-+	/*
-+	 * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed
-+	 * together
-+	 */
- 	struct expr *dep;
-+
-+	/* MENU_* flags */
- 	unsigned int flags;
-+
-+	/* Any help text associated with the node */
- 	char *help;
-+
-+	/* The location where the menu node appears in the Kconfig files */
- 	struct file *file;
- 	int lineno;
-+
-+	/* For use by front ends that need to store auxiliary data */
- 	void *data;
- };
- 
-+/*
-+ * Set on a menu node when the corresponding symbol changes state in some way.
-+ * Can be checked by front ends.
-+ */
- #define MENU_CHANGED		0x0001
-+
- #define MENU_ROOT		0x0002
- 
- struct jump_key {
-@@ -217,11 +307,12 @@ struct expr *expr_transform(struct expr *e);
- int expr_contains_symbol(struct expr *dep, struct symbol *sym);
- bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
- struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
--struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);
- 
- void expr_fprint(struct expr *e, FILE *out);
- struct gstr; /* forward */
- void expr_gstr_print(struct expr *e, struct gstr *gs);
-+void expr_gstr_print_revdep(struct expr *e, struct gstr *gs,
-+			    tristate pr_type, const char *title);
- 
- static inline int expr_is_yes(struct expr *e)
- {
-diff --git a/carl9170fw/config/kconf_id.c b/carl9170fw/config/kconf_id.c
-deleted file mode 100644
-index 5abbc72..0000000
---- a/carl9170fw/config/kconf_id.c
-+++ /dev/null
-@@ -1,54 +0,0 @@
--
--static struct kconf_id kconf_id_array[] = {
--	{ "mainmenu",		T_MAINMENU,		TF_COMMAND },
--	{ "menu",		T_MENU,			TF_COMMAND },
--	{ "endmenu",		T_ENDMENU,		TF_COMMAND },
--	{ "source",		T_SOURCE,		TF_COMMAND },
--	{ "choice",		T_CHOICE,		TF_COMMAND },
--	{ "endchoice",		T_ENDCHOICE,		TF_COMMAND },
--	{ "comment",		T_COMMENT,		TF_COMMAND },
--	{ "config",		T_CONFIG,		TF_COMMAND },
--	{ "menuconfig",		T_MENUCONFIG,		TF_COMMAND },
--	{ "help",		T_HELP,			TF_COMMAND },
--	{ "---help---",		T_HELP,			TF_COMMAND },
--	{ "if",			T_IF,			TF_COMMAND|TF_PARAM },
--	{ "endif",		T_ENDIF,		TF_COMMAND },
--	{ "depends",		T_DEPENDS,		TF_COMMAND },
--	{ "optional",		T_OPTIONAL,		TF_COMMAND },
--	{ "default",		T_DEFAULT,		TF_COMMAND, S_UNKNOWN },
--	{ "prompt",		T_PROMPT,		TF_COMMAND },
--	{ "tristate",		T_TYPE,			TF_COMMAND, S_TRISTATE },
--	{ "def_tristate",	T_DEFAULT,		TF_COMMAND, S_TRISTATE },
--	{ "bool",		T_TYPE,			TF_COMMAND, S_BOOLEAN },
--	{ "boolean",		T_TYPE,			TF_COMMAND, S_BOOLEAN },
--	{ "def_bool",		T_DEFAULT,		TF_COMMAND, S_BOOLEAN },
--	{ "int",		T_TYPE,			TF_COMMAND, S_INT },
--	{ "hex",		T_TYPE,			TF_COMMAND, S_HEX },
--	{ "string",		T_TYPE,			TF_COMMAND, S_STRING },
--	{ "select",		T_SELECT,		TF_COMMAND },
--	{ "imply",		T_IMPLY,		TF_COMMAND },
--	{ "range",		T_RANGE,		TF_COMMAND },
--	{ "visible",		T_VISIBLE,		TF_COMMAND },
--	{ "option",		T_OPTION,		TF_COMMAND },
--	{ "on",			T_ON,			TF_PARAM },
--	{ "modules",		T_OPT_MODULES,		TF_OPTION },
--	{ "defconfig_list",	T_OPT_DEFCONFIG_LIST,	TF_OPTION },
--	{ "env",		T_OPT_ENV,		TF_OPTION },
--	{ "allnoconfig_y",	T_OPT_ALLNOCONFIG_Y,	TF_OPTION },
--};
--
--#define KCONF_ID_ARRAY_SIZE (sizeof(kconf_id_array)/sizeof(struct kconf_id))
--
--static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len)
--{
--	int i;
--
--	for (i = 0; i < KCONF_ID_ARRAY_SIZE; i++) {
--		struct kconf_id *id = kconf_id_array+i;
--		int l = strlen(id->name);
--
--		if (len == l && !memcmp(str, id->name, len))
--			return id;
--	}
--	return NULL;
--}
-diff --git a/carl9170fw/config/lkc.h b/carl9170fw/config/lkc.h
-index cdcbe43..531ff7c 100644
---- a/carl9170fw/config/lkc.h
-+++ b/carl9170fw/config/lkc.h
-@@ -1,6 +1,6 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #ifndef LKC_H
-@@ -8,15 +8,6 @@
- 
- #include "expr.h"
- 
--#ifndef KBUILD_NO_NLS
--# include <libintl.h>
--#else
--static inline const char *gettext(const char *txt) { return txt; }
--static inline void textdomain(const char *domainname) {}
--static inline void bindtextdomain(const char *name, const char *dir) {}
--static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; }
--#endif
--
- #ifdef __cplusplus
- extern "C" {
- #endif
-@@ -29,11 +20,6 @@ extern "C" {
- #define PACKAGE "linux"
- #endif
- 
--#define LOCALEDIR "/usr/share/locale"
--
--#define _(text) gettext(text)
--#define N_(text) (text)
--
- #ifndef CONFIG_
- #define CONFIG_ "CONFIG_"
- #endif
-@@ -44,10 +30,6 @@ static inline const char *CONFIG_prefix(void)
- #undef CONFIG_
- #define CONFIG_ CONFIG_prefix()
- 
--#define TF_COMMAND	0x0001
--#define TF_PARAM	0x0002
--#define TF_OPTION	0x0004
--
- enum conf_def_mode {
- 	def_default,
- 	def_yes,
-@@ -56,18 +38,7 @@ enum conf_def_mode {
- 	def_random
- };
- 
--#define T_OPT_MODULES		1
--#define T_OPT_DEFCONFIG_LIST	2
--#define T_OPT_ENV		3
--#define T_OPT_ALLNOCONFIG_Y	4
--
--struct kconf_id {
--	const char *name;
--	int token;
--	unsigned int flags;
--	enum symbol_type stype;
--};
--
-+extern int yylineno;
- void zconfdump(FILE *out);
- void zconf_starthelp(void);
- FILE *zconf_fopen(const char *name);
-@@ -100,21 +71,27 @@ void menu_warn(struct menu *menu, const char *fmt, ...);
- struct menu *menu_add_menu(void);
- void menu_end_menu(void);
- void menu_add_entry(struct symbol *sym);
--void menu_end_entry(void);
- void menu_add_dep(struct expr *dep);
- void menu_add_visibility(struct expr *dep);
- struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
- void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
- void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
--void menu_add_option(int token, char *arg);
-+void menu_add_option_modules(void);
-+void menu_add_option_defconfig_list(void);
-+void menu_add_option_allnoconfig_y(void);
- void menu_finalize(struct menu *parent);
- void menu_set_type(int type);
- 
- /* util.c */
- struct file *file_lookup(const char *name);
--int file_write_dep(const char *name);
- void *xmalloc(size_t size);
- void *xcalloc(size_t nmemb, size_t size);
-+void *xrealloc(void *p, size_t size);
-+char *xstrdup(const char *s);
-+char *xstrndup(const char *s, size_t n);
-+
-+/* zconf.l */
-+int yylex(void);
- 
- struct gstr {
- 	size_t len;
-@@ -132,16 +109,13 @@ void str_printf(struct gstr *gs, const char *fmt, ...);
- const char *str_get(struct gstr *gs);
- 
- /* symbol.c */
--extern struct expr *sym_env_list;
--
--void sym_init(void);
- void sym_clear_all_valid(void);
- struct symbol *sym_choice_default(struct symbol *sym);
-+struct property *sym_get_range_prop(struct symbol *sym);
- const char *sym_get_string_default(struct symbol *sym);
- struct symbol *sym_check_deps(struct symbol *sym);
- struct property *prop_alloc(enum prop_type type, struct symbol *sym);
- struct symbol *prop_get_symbol(struct property *prop);
--struct property *sym_get_env_prop(struct symbol *sym);
- 
- static inline tristate sym_get_tristate_value(struct symbol *sym)
- {
-diff --git a/carl9170fw/config/lkc_proto.h b/carl9170fw/config/lkc_proto.h
-index 5d86e2d..86c2675 100644
---- a/carl9170fw/config/lkc_proto.h
-+++ b/carl9170fw/config/lkc_proto.h
-@@ -7,10 +7,10 @@ int conf_read(const char *name);
- int conf_read_simple(const char *name, int);
- int conf_write_defconfig(const char *name);
- int conf_write(const char *name);
--int conf_write_autoconf(void);
-+int conf_write_autoconf(int overwrite);
- bool conf_get_changed(void);
- void conf_set_changed_callback(void (*fn)(void));
--void conf_set_message_callback(void (*fn)(const char *fmt, va_list ap));
-+void conf_set_message_callback(void (*fn)(const char *s));
- 
- /* menu.c */
- extern struct menu rootmenu;
-@@ -31,7 +31,6 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
- 
- struct symbol * sym_lookup(const char *name, int flags);
- struct symbol * sym_find(const char *name);
--const char * sym_expand_string_value(const char *in);
- const char * sym_escape_string_value(const char *in);
- struct symbol ** sym_re_search(const char *pattern);
- const char * sym_type_name(enum symbol_type type);
-@@ -49,5 +48,19 @@ const char * sym_get_string_value(struct symbol *sym);
- 
- const char * prop_get_type_name(enum prop_type type);
- 
-+/* preprocess.c */
-+enum variable_flavor {
-+	VAR_SIMPLE,
-+	VAR_RECURSIVE,
-+	VAR_APPEND,
-+};
-+void env_write_dep(FILE *f, const char *auto_conf_name);
-+void variable_add(const char *name, const char *value,
-+		  enum variable_flavor flavor);
-+void variable_all_del(void);
-+char *expand_string(const char *in);
-+char *expand_dollar(const char **str);
-+char *expand_one_token(const char **str);
-+
- /* expr.c */
- void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken);
-diff --git a/carl9170fw/config/menu.c b/carl9170fw/config/menu.c
-index e935793..d9d1646 100644
---- a/carl9170fw/config/menu.c
-+++ b/carl9170fw/config/menu.c
-@@ -1,6 +1,6 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #include <ctype.h>
-@@ -62,13 +62,8 @@ void menu_add_entry(struct symbol *sym)
- 		menu_add_symbol(P_SYMBOL, sym, NULL);
- }
- 
--void menu_end_entry(void)
--{
--}
--
- struct menu *menu_add_menu(void)
- {
--	menu_end_entry();
- 	last_entry_ptr = &current_entry->list;
- 	return current_menu = current_entry;
- }
-@@ -79,19 +74,23 @@ void menu_end_menu(void)
- 	current_menu = current_menu->parent;
- }
- 
--static struct expr *menu_check_dep(struct expr *e)
-+/*
-+ * Rewrites 'm' to 'm' && MODULES, so that it evaluates to 'n' when running
-+ * without modules
-+ */
-+static struct expr *rewrite_m(struct expr *e)
- {
- 	if (!e)
- 		return e;
- 
- 	switch (e->type) {
- 	case E_NOT:
--		e->left.expr = menu_check_dep(e->left.expr);
-+		e->left.expr = rewrite_m(e->left.expr);
- 		break;
- 	case E_OR:
- 	case E_AND:
--		e->left.expr = menu_check_dep(e->left.expr);
--		e->right.expr = menu_check_dep(e->right.expr);
-+		e->left.expr = rewrite_m(e->left.expr);
-+		e->right.expr = rewrite_m(e->right.expr);
- 		break;
- 	case E_SYMBOL:
- 		/* change 'm' into 'm' && MODULES */
-@@ -106,7 +105,7 @@ static struct expr *menu_check_dep(struct expr *e)
- 
- void menu_add_dep(struct expr *dep)
- {
--	current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
-+	current_entry->dep = expr_alloc_and(current_entry->dep, dep);
- }
- 
- void menu_set_type(int type)
-@@ -131,7 +130,7 @@ static struct property *menu_add_prop(enum prop_type type, char *prompt, struct
- 
- 	prop->menu = current_entry;
- 	prop->expr = expr;
--	prop->visible.expr = menu_check_dep(dep);
-+	prop->visible.expr = dep;
- 
- 	if (prompt) {
- 		if (isspace(*prompt)) {
-@@ -196,31 +195,26 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
- 	menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
- }
- 
--void menu_add_option(int token, char *arg)
-+void menu_add_option_modules(void)
- {
--	switch (token) {
--	case T_OPT_MODULES:
--		if (modules_sym)
--			zconf_error("symbol '%s' redefines option 'modules'"
--				    " already defined by symbol '%s'",
--				    current_entry->sym->name,
--				    modules_sym->name
--				    );
--		modules_sym = current_entry->sym;
--		break;
--	case T_OPT_DEFCONFIG_LIST:
--		if (!sym_defconfig_list)
--			sym_defconfig_list = current_entry->sym;
--		else if (sym_defconfig_list != current_entry->sym)
--			zconf_error("trying to redefine defconfig symbol");
--		break;
--	case T_OPT_ENV:
--		prop_add_env(arg);
--		break;
--	case T_OPT_ALLNOCONFIG_Y:
--		current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
--		break;
--	}
-+	if (modules_sym)
-+		zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'",
-+			    current_entry->sym->name, modules_sym->name);
-+	modules_sym = current_entry->sym;
-+}
-+
-+void menu_add_option_defconfig_list(void)
-+{
-+	if (!sym_defconfig_list)
-+		sym_defconfig_list = current_entry->sym;
-+	else if (sym_defconfig_list != current_entry->sym)
-+		zconf_error("trying to redefine defconfig symbol");
-+	sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
-+}
-+
-+void menu_add_option_allnoconfig_y(void)
-+{
-+	current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
- }
- 
- static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
-@@ -252,6 +246,16 @@ static void sym_check_prop(struct symbol *sym)
- 					    "'%s': number is invalid",
- 					    sym->name);
- 			}
-+			if (sym_is_choice(sym)) {
-+				struct property *choice_prop =
-+					sym_get_choice_prop(sym2);
-+
-+				if (!choice_prop ||
-+				    prop_get_symbol(choice_prop) != sym)
-+					prop_warn(prop,
-+						  "choice default symbol '%s' is not contained in the choice",
-+						  sym2->name);
-+			}
- 			break;
- 		case P_SELECT:
- 		case P_IMPLY:
-@@ -260,13 +264,13 @@ static void sym_check_prop(struct symbol *sym)
- 			if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
- 				prop_warn(prop,
- 				    "config symbol '%s' uses %s, but is "
--				    "not boolean or tristate", sym->name, use);
-+				    "not bool or tristate", sym->name, use);
- 			else if (sym2->type != S_UNKNOWN &&
- 				 sym2->type != S_BOOLEAN &&
- 				 sym2->type != S_TRISTATE)
- 				prop_warn(prop,
- 				    "'%s' has wrong type. '%s' only "
--				    "accept arguments of boolean and "
-+				    "accept arguments of bool and "
- 				    "tristate type", sym2->name, use);
- 			break;
- 		case P_RANGE:
-@@ -292,6 +296,11 @@ void menu_finalize(struct menu *parent)
- 
- 	sym = parent->sym;
- 	if (parent->list) {
-+		/*
-+		 * This menu node has children. We (recursively) process them
-+		 * and propagate parent dependencies before moving on.
-+		 */
-+
- 		if (sym && sym_is_choice(sym)) {
- 			if (sym->type == S_UNKNOWN) {
- 				/* find the first choice value to find out choice type */
-@@ -309,30 +318,83 @@ void menu_finalize(struct menu *parent)
- 				if (menu->sym && menu->sym->type == S_UNKNOWN)
- 					menu_set_type(sym->type);
- 			}
-+
-+			/*
-+			 * Use the choice itself as the parent dependency of
-+			 * the contained items. This turns the mode of the
-+			 * choice into an upper bound on the visibility of the
-+			 * choice value symbols.
-+			 */
- 			parentdep = expr_alloc_symbol(sym);
- 		} else if (parent->prompt)
-+			/* Menu node for 'menu' */
- 			parentdep = parent->prompt->visible.expr;
- 		else
-+			/* Menu node for 'if' */
- 			parentdep = parent->dep;
- 
-+		/* For each child menu node... */
- 		for (menu = parent->list; menu; menu = menu->next) {
--			basedep = expr_transform(menu->dep);
-+			/*
-+			 * Propagate parent dependencies to the child menu
-+			 * node, also rewriting and simplifying expressions
-+			 */
-+			basedep = rewrite_m(menu->dep);
-+			basedep = expr_transform(basedep);
- 			basedep = expr_alloc_and(expr_copy(parentdep), basedep);
- 			basedep = expr_eliminate_dups(basedep);
- 			menu->dep = basedep;
-+
- 			if (menu->sym)
-+				/*
-+				 * Note: For symbols, all prompts are included
-+				 * too in the symbol's own property list
-+				 */
- 				prop = menu->sym->prop;
- 			else
-+				/*
-+				 * For non-symbol menu nodes, we just need to
-+				 * handle the prompt
-+				 */
- 				prop = menu->prompt;
-+
-+			/* For each property... */
- 			for (; prop; prop = prop->next) {
- 				if (prop->menu != menu)
-+					/*
-+					 * Two possibilities:
-+					 *
-+					 * 1. The property lacks dependencies
-+					 *    and so isn't location-specific,
-+					 *    e.g. an 'option'
-+					 *
-+					 * 2. The property belongs to a symbol
-+					 *    defined in multiple locations and
-+					 *    is from some other location. It
-+					 *    will be handled there in that
-+					 *    case.
-+					 *
-+					 * Skip the property.
-+					 */
- 					continue;
--				dep = expr_transform(prop->visible.expr);
-+
-+				/*
-+				 * Propagate parent dependencies to the
-+				 * property's condition, rewriting and
-+				 * simplifying expressions at the same time
-+				 */
-+				dep = rewrite_m(prop->visible.expr);
-+				dep = expr_transform(dep);
- 				dep = expr_alloc_and(expr_copy(basedep), dep);
- 				dep = expr_eliminate_dups(dep);
- 				if (menu->sym && menu->sym->type != S_TRISTATE)
- 					dep = expr_trans_bool(dep);
- 				prop->visible.expr = dep;
-+
-+				/*
-+				 * Handle selects and implies, which modify the
-+				 * dependencies of the selected/implied symbol
-+				 */
- 				if (prop->type == P_SELECT) {
- 					struct symbol *es = prop_get_symbol(prop);
- 					es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
-@@ -344,34 +406,81 @@ void menu_finalize(struct menu *parent)
- 				}
- 			}
- 		}
-+
-+		if (sym && sym_is_choice(sym))
-+			expr_free(parentdep);
-+
-+		/*
-+		 * Recursively process children in the same fashion before
-+		 * moving on
-+		 */
- 		for (menu = parent->list; menu; menu = menu->next)
- 			menu_finalize(menu);
- 	} else if (sym) {
-+		/*
-+		 * Automatic submenu creation. If sym is a symbol and A, B, C,
-+		 * ... are consecutive items (symbols, menus, ifs, etc.) that
-+		 * all depend on sym, then the following menu structure is
-+		 * created:
-+		 *
-+		 *	sym
-+		 *	 +-A
-+		 *	 +-B
-+		 *	 +-C
-+		 *	 ...
-+		 *
-+		 * This also works recursively, giving the following structure
-+		 * if A is a symbol and B depends on A:
-+		 *
-+		 *	sym
-+		 *	 +-A
-+		 *	 | +-B
-+		 *	 +-C
-+		 *	 ...
-+		 */
-+
- 		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
- 		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
- 		basedep = expr_eliminate_dups(expr_transform(basedep));
-+
-+		/* Examine consecutive elements after sym */
- 		last_menu = NULL;
- 		for (menu = parent->next; menu; menu = menu->next) {
- 			dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;
- 			if (!expr_contains_symbol(dep, sym))
-+				/* No dependency, quit */
- 				break;
- 			if (expr_depends_symbol(dep, sym))
-+				/* Absolute dependency, put in submenu */
- 				goto next;
-+
-+			/*
-+			 * Also consider it a dependency on sym if our
-+			 * dependencies contain sym and are a "superset" of
-+			 * sym's dependencies, e.g. '(sym || Q) && R' when sym
-+			 * depends on R.
-+			 *
-+			 * Note that 'R' might be from an enclosing menu or if,
-+			 * making this a more common case than it might seem.
-+			 */
- 			dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);
- 			dep = expr_eliminate_dups(expr_transform(dep));
- 			dep2 = expr_copy(basedep);
- 			expr_eliminate_eq(&dep, &dep2);
- 			expr_free(dep);
- 			if (!expr_is_yes(dep2)) {
-+				/* Not superset, quit */
- 				expr_free(dep2);
- 				break;
- 			}
-+			/* Superset, put in submenu */
- 			expr_free(dep2);
- 		next:
- 			menu_finalize(menu);
- 			menu->parent = parent;
- 			last_menu = menu;
- 		}
-+		expr_free(basedep);
- 		if (last_menu) {
- 			parent->list = parent->next;
- 			parent->next = last_menu->next;
-@@ -420,6 +529,35 @@ void menu_finalize(struct menu *parent)
- 			*ep = expr_alloc_one(E_LIST, NULL);
- 			(*ep)->right.sym = menu->sym;
- 		}
-+
-+		/*
-+		 * This code serves two purposes:
-+		 *
-+		 * (1) Flattening 'if' blocks, which do not specify a submenu
-+		 *     and only add dependencies.
-+		 *
-+		 *     (Automatic submenu creation might still create a submenu
-+		 *     from an 'if' before this code runs.)
-+		 *
-+		 * (2) "Undoing" any automatic submenus created earlier below
-+		 *     promptless symbols.
-+		 *
-+		 * Before:
-+		 *
-+		 *	A
-+		 *	if ... (or promptless symbol)
-+		 *	 +-B
-+		 *	 +-C
-+		 *	D
-+		 *
-+		 * After:
-+		 *
-+		 *	A
-+		 *	if ... (or promptless symbol)
-+		 *	B
-+		 *	C
-+		 *	D
-+		 */
- 		if (menu->list && (!menu->prompt || !menu->prompt->text)) {
- 			for (last_menu = menu->list; ; last_menu = last_menu->next) {
- 				last_menu->parent = parent;
-@@ -444,6 +582,15 @@ void menu_finalize(struct menu *parent)
- 		sym->flags |= SYMBOL_WARNED;
- 	}
- 
-+	/*
-+	 * For non-optional choices, add a reverse dependency (corresponding to
-+	 * a select) of '<visibility> && m'. This prevents the user from
-+	 * setting the choice mode to 'n' when the choice is visible.
-+	 *
-+	 * This would also work for non-choice symbols, but only non-optional
-+	 * choices clear SYMBOL_OPTIONAL as of writing. Choices are implemented
-+	 * as a type of symbol.
-+	 */
- 	if (sym && !sym_is_optional(sym) && parent->prompt) {
- 		sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
- 				expr_alloc_and(parent->prompt->visible.expr,
-@@ -558,7 +705,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
- 	struct menu *submenu[8], *menu, *location = NULL;
- 	struct jump_key *jump = NULL;
- 
--	str_printf(r, _("Prompt: %s\n"), _(prop->text));
-+	str_printf(r, "Prompt: %s\n", prop->text);
- 	menu = prop->menu->parent;
- 	for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
- 		bool accessible = menu_is_visible(menu);
-@@ -591,16 +738,16 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
- 	}
- 
- 	if (i > 0) {
--		str_printf(r, _("  Location:\n"));
-+		str_printf(r, "  Location:\n");
- 		for (j = 4; --i >= 0; j += 2) {
- 			menu = submenu[i];
- 			if (jump && menu == location)
- 				jump->offset = strlen(r->s);
- 			str_printf(r, "%*c-> %s", j, ' ',
--				   _(menu_get_prompt(menu)));
-+				   menu_get_prompt(menu));
- 			if (menu->sym) {
- 				str_printf(r, " (%s [=%s])", menu->sym->name ?
--					menu->sym->name : _("<choice>"),
-+					menu->sym->name : "<choice>",
- 					sym_get_string_value(menu->sym));
- 			}
- 			str_append(r, "\n");
-@@ -664,27 +811,27 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym,
- 
- 	prop = get_symbol_prop(sym);
- 	if (prop) {
--		str_printf(r, _("  Defined at %s:%d\n"), prop->menu->file->name,
-+		str_printf(r, "  Defined at %s:%d\n", prop->menu->file->name,
- 			prop->menu->lineno);
- 		if (!expr_is_yes(prop->visible.expr)) {
--			str_append(r, _("  Depends on: "));
-+			str_append(r, "  Depends on: ");
- 			expr_gstr_print(prop->visible.expr, r);
- 			str_append(r, "\n");
- 		}
- 	}
- 
--	get_symbol_props_str(r, sym, P_SELECT, _("  Selects: "));
-+	get_symbol_props_str(r, sym, P_SELECT, "  Selects: ");
- 	if (sym->rev_dep.expr) {
--		str_append(r, _("  Selected by: "));
--		expr_gstr_print(sym->rev_dep.expr, r);
--		str_append(r, "\n");
-+		expr_gstr_print_revdep(sym->rev_dep.expr, r, yes, "  Selected by [y]:\n");
-+		expr_gstr_print_revdep(sym->rev_dep.expr, r, mod, "  Selected by [m]:\n");
-+		expr_gstr_print_revdep(sym->rev_dep.expr, r, no, "  Selected by [n]:\n");
- 	}
- 
--	get_symbol_props_str(r, sym, P_IMPLY, _("  Implies: "));
-+	get_symbol_props_str(r, sym, P_IMPLY, "  Implies: ");
- 	if (sym->implied.expr) {
--		str_append(r, _("  Implied by: "));
--		expr_gstr_print(sym->implied.expr, r);
--		str_append(r, "\n");
-+		expr_gstr_print_revdep(sym->implied.expr, r, yes, "  Implied by [y]:\n");
-+		expr_gstr_print_revdep(sym->implied.expr, r, mod, "  Implied by [m]:\n");
-+		expr_gstr_print_revdep(sym->implied.expr, r, no, "  Implied by [n]:\n");
- 	}
- 
- 	str_append(r, "\n\n");
-@@ -699,7 +846,7 @@ struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
- 	for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
- 		get_symbol_str(&res, sym, head);
- 	if (!i)
--		str_append(&res, _("No matches found.\n"));
-+		str_append(&res, "No matches found.\n");
- 	return res;
- }
- 
-@@ -714,7 +861,7 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
- 			str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
- 		help_text = menu_get_help(menu);
- 	}
--	str_printf(help, "%s\n", _(help_text));
-+	str_printf(help, "%s\n", help_text);
- 	if (sym)
- 		get_symbol_str(help, sym, NULL);
- }
-diff --git a/carl9170fw/config/preprocess.c b/carl9170fw/config/preprocess.c
-new file mode 100644
-index 0000000..592dfbf
---- /dev/null
-+++ b/carl9170fw/config/preprocess.c
-@@ -0,0 +1,573 @@
-+// SPDX-License-Identifier: GPL-2.0
-+//
-+// Copyright (C) 2018 Masahiro Yamada <yamada.masahiro@socionext.com>
-+
-+#include <ctype.h>
-+#include <stdarg.h>
-+#include <stdbool.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "list.h"
-+#include "lkc.h"
-+
-+#define ARRAY_SIZE(arr)		(sizeof(arr) / sizeof((arr)[0]))
-+
-+static char *expand_string_with_args(const char *in, int argc, char *argv[]);
-+
-+static void __attribute__((noreturn)) pperror(const char *format, ...)
-+{
-+	va_list ap;
-+
-+	fprintf(stderr, "%s:%d: ", current_file->name, yylineno);
-+	va_start(ap, format);
-+	vfprintf(stderr, format, ap);
-+	va_end(ap);
-+	fprintf(stderr, "\n");
-+
-+	exit(1);
-+}
-+
-+/*
-+ * Environment variables
-+ */
-+static LIST_HEAD(env_list);
-+
-+struct env {
-+	char *name;
-+	char *value;
-+	struct list_head node;
-+};
-+
-+static void env_add(const char *name, const char *value)
-+{
-+	struct env *e;
-+
-+	e = xmalloc(sizeof(*e));
-+	e->name = xstrdup(name);
-+	e->value = xstrdup(value);
-+
-+	list_add_tail(&e->node, &env_list);
-+}
-+
-+static void env_del(struct env *e)
-+{
-+	list_del(&e->node);
-+	free(e->name);
-+	free(e->value);
-+	free(e);
-+}
-+
-+/* The returned pointer must be freed when done */
-+static char *env_expand(const char *name)
-+{
-+	struct env *e;
-+	const char *value;
-+
-+	if (!*name)
-+		return NULL;
-+
-+	list_for_each_entry(e, &env_list, node) {
-+		if (!strcmp(name, e->name))
-+			return xstrdup(e->value);
-+	}
-+
-+	value = getenv(name);
-+	if (!value)
-+		return NULL;
-+
-+	/*
-+	 * We need to remember all referenced environment variables.
-+	 * They will be written out to include/config/auto.conf.cmd
-+	 */
-+	env_add(name, value);
-+
-+	return xstrdup(value);
-+}
-+
-+void env_write_dep(FILE *f, const char *autoconfig_name)
-+{
-+	struct env *e, *tmp;
-+
-+	list_for_each_entry_safe(e, tmp, &env_list, node) {
-+		fprintf(f, "ifneq \"$(%s)\" \"%s\"\n", e->name, e->value);
-+		fprintf(f, "%s: FORCE\n", autoconfig_name);
-+		fprintf(f, "endif\n");
-+		env_del(e);
-+	}
-+}
-+
-+/*
-+ * Built-in functions
-+ */
-+struct function {
-+	const char *name;
-+	unsigned int min_args;
-+	unsigned int max_args;
-+	char *(*func)(int argc, char *argv[]);
-+};
-+
-+static char *do_error_if(int argc, char *argv[])
-+{
-+	if (!strcmp(argv[0], "y"))
-+		pperror("%s", argv[1]);
-+
-+	return NULL;
-+}
-+
-+static char *do_filename(int argc, char *argv[])
-+{
-+	return xstrdup(current_file->name);
-+}
-+
-+static char *do_info(int argc, char *argv[])
-+{
-+	printf("%s\n", argv[0]);
-+
-+	return xstrdup("");
-+}
-+
-+static char *do_lineno(int argc, char *argv[])
-+{
-+	char buf[16];
-+
-+	sprintf(buf, "%d", yylineno);
-+
-+	return xstrdup(buf);
-+}
-+
-+static char *do_shell(int argc, char *argv[])
-+{
-+	FILE *p;
-+	char buf[256];
-+	char *cmd;
-+	size_t nread;
-+	int i;
-+
-+	cmd = argv[0];
-+
-+	p = popen(cmd, "r");
-+	if (!p) {
-+		perror(cmd);
-+		exit(1);
-+	}
-+
-+	nread = fread(buf, 1, sizeof(buf), p);
-+	if (nread == sizeof(buf))
-+		nread--;
-+
-+	/* remove trailing new lines */
-+	while (nread > 0 && buf[nread - 1] == '\n')
-+		nread--;
-+
-+	buf[nread] = 0;
-+
-+	/* replace a new line with a space */
-+	for (i = 0; i < nread; i++) {
-+		if (buf[i] == '\n')
-+			buf[i] = ' ';
-+	}
-+
-+	if (pclose(p) == -1) {
-+		perror(cmd);
-+		exit(1);
-+	}
-+
-+	return xstrdup(buf);
-+}
-+
-+static char *do_warning_if(int argc, char *argv[])
-+{
-+	if (!strcmp(argv[0], "y"))
-+		fprintf(stderr, "%s:%d: %s\n",
-+			current_file->name, yylineno, argv[1]);
-+
-+	return xstrdup("");
-+}
-+
-+static const struct function function_table[] = {
-+	/* Name		MIN	MAX	Function */
-+	{ "error-if",	2,	2,	do_error_if },
-+	{ "filename",	0,	0,	do_filename },
-+	{ "info",	1,	1,	do_info },
-+	{ "lineno",	0,	0,	do_lineno },
-+	{ "shell",	1,	1,	do_shell },
-+	{ "warning-if",	2,	2,	do_warning_if },
-+};
-+
-+#define FUNCTION_MAX_ARGS		16
-+
-+static char *function_expand(const char *name, int argc, char *argv[])
-+{
-+	const struct function *f;
-+	int i;
-+
-+	for (i = 0; i < ARRAY_SIZE(function_table); i++) {
-+		f = &function_table[i];
-+		if (strcmp(f->name, name))
-+			continue;
-+
-+		if (argc < f->min_args)
-+			pperror("too few function arguments passed to '%s'",
-+				name);
-+
-+		if (argc > f->max_args)
-+			pperror("too many function arguments passed to '%s'",
-+				name);
-+
-+		return f->func(argc, argv);
-+	}
-+
-+	return NULL;
-+}
-+
-+/*
-+ * Variables (and user-defined functions)
-+ */
-+static LIST_HEAD(variable_list);
-+
-+struct variable {
-+	char *name;
-+	char *value;
-+	enum variable_flavor flavor;
-+	int exp_count;
-+	struct list_head node;
-+};
-+
-+static struct variable *variable_lookup(const char *name)
-+{
-+	struct variable *v;
-+
-+	list_for_each_entry(v, &variable_list, node) {
-+		if (!strcmp(name, v->name))
-+			return v;
-+	}
-+
-+	return NULL;
-+}
-+
-+static char *variable_expand(const char *name, int argc, char *argv[])
-+{
-+	struct variable *v;
-+	char *res;
-+
-+	v = variable_lookup(name);
-+	if (!v)
-+		return NULL;
-+
-+	if (argc == 0 && v->exp_count)
-+		pperror("Recursive variable '%s' references itself (eventually)",
-+			name);
-+
-+	if (v->exp_count > 1000)
-+		pperror("Too deep recursive expansion");
-+
-+	v->exp_count++;
-+
-+	if (v->flavor == VAR_RECURSIVE)
-+		res = expand_string_with_args(v->value, argc, argv);
-+	else
-+		res = xstrdup(v->value);
-+
-+	v->exp_count--;
-+
-+	return res;
-+}
-+
-+void variable_add(const char *name, const char *value,
-+		  enum variable_flavor flavor)
-+{
-+	struct variable *v;
-+	char *new_value;
-+	bool append = false;
-+
-+	v = variable_lookup(name);
-+	if (v) {
-+		/* For defined variables, += inherits the existing flavor */
-+		if (flavor == VAR_APPEND) {
-+			flavor = v->flavor;
-+			append = true;
-+		} else {
-+			free(v->value);
-+		}
-+	} else {
-+		/* For undefined variables, += assumes the recursive flavor */
-+		if (flavor == VAR_APPEND)
-+			flavor = VAR_RECURSIVE;
-+
-+		v = xmalloc(sizeof(*v));
-+		v->name = xstrdup(name);
-+		v->exp_count = 0;
-+		list_add_tail(&v->node, &variable_list);
-+	}
-+
-+	v->flavor = flavor;
-+
-+	if (flavor == VAR_SIMPLE)
-+		new_value = expand_string(value);
-+	else
-+		new_value = xstrdup(value);
-+
-+	if (append) {
-+		v->value = xrealloc(v->value,
-+				    strlen(v->value) + strlen(new_value) + 2);
-+		strcat(v->value, " ");
-+		strcat(v->value, new_value);
-+		free(new_value);
-+	} else {
-+		v->value = new_value;
-+	}
-+}
-+
-+static void variable_del(struct variable *v)
-+{
-+	list_del(&v->node);
-+	free(v->name);
-+	free(v->value);
-+	free(v);
-+}
-+
-+void variable_all_del(void)
-+{
-+	struct variable *v, *tmp;
-+
-+	list_for_each_entry_safe(v, tmp, &variable_list, node)
-+		variable_del(v);
-+}
-+
-+/*
-+ * Evaluate a clause with arguments.  argc/argv are arguments from the upper
-+ * function call.
-+ *
-+ * Returned string must be freed when done
-+ */
-+static char *eval_clause(const char *str, size_t len, int argc, char *argv[])
-+{
-+	char *tmp, *name, *res, *endptr, *prev, *p;
-+	int new_argc = 0;
-+	char *new_argv[FUNCTION_MAX_ARGS];
-+	int nest = 0;
-+	int i;
-+	unsigned long n;
-+
-+	tmp = xstrndup(str, len);
-+
-+	/*
-+	 * If variable name is '1', '2', etc.  It is generally an argument
-+	 * from a user-function call (i.e. local-scope variable).  If not
-+	 * available, then look-up global-scope variables.
-+	 */
-+	n = strtoul(tmp, &endptr, 10);
-+	if (!*endptr && n > 0 && n <= argc) {
-+		res = xstrdup(argv[n - 1]);
-+		goto free_tmp;
-+	}
-+
-+	prev = p = tmp;
-+
-+	/*
-+	 * Split into tokens
-+	 * The function name and arguments are separated by a comma.
-+	 * For example, if the function call is like this:
-+	 *   $(foo,$(x),$(y))
-+	 *
-+	 * The input string for this helper should be:
-+	 *   foo,$(x),$(y)
-+	 *
-+	 * and split into:
-+	 *   new_argv[0] = 'foo'
-+	 *   new_argv[1] = '$(x)'
-+	 *   new_argv[2] = '$(y)'
-+	 */
-+	while (*p) {
-+		if (nest == 0 && *p == ',') {
-+			*p = 0;
-+			if (new_argc >= FUNCTION_MAX_ARGS)
-+				pperror("too many function arguments");
-+			new_argv[new_argc++] = prev;
-+			prev = p + 1;
-+		} else if (*p == '(') {
-+			nest++;
-+		} else if (*p == ')') {
-+			nest--;
-+		}
-+
-+		p++;
-+	}
-+	new_argv[new_argc++] = prev;
-+
-+	/*
-+	 * Shift arguments
-+	 * new_argv[0] represents a function name or a variable name.  Put it
-+	 * into 'name', then shift the rest of the arguments.  This simplifies
-+	 * 'const' handling.
-+	 */
-+	name = expand_string_with_args(new_argv[0], argc, argv);
-+	new_argc--;
-+	for (i = 0; i < new_argc; i++)
-+		new_argv[i] = expand_string_with_args(new_argv[i + 1],
-+						      argc, argv);
-+
-+	/* Search for variables */
-+	res = variable_expand(name, new_argc, new_argv);
-+	if (res)
-+		goto free;
-+
-+	/* Look for built-in functions */
-+	res = function_expand(name, new_argc, new_argv);
-+	if (res)
-+		goto free;
-+
-+	/* Last, try environment variable */
-+	if (new_argc == 0) {
-+		res = env_expand(name);
-+		if (res)
-+			goto free;
-+	}
-+
-+	res = xstrdup("");
-+free:
-+	for (i = 0; i < new_argc; i++)
-+		free(new_argv[i]);
-+	free(name);
-+free_tmp:
-+	free(tmp);
-+
-+	return res;
-+}
-+
-+/*
-+ * Expand a string that follows '$'
-+ *
-+ * For example, if the input string is
-+ *     ($(FOO)$($(BAR)))$(BAZ)
-+ * this helper evaluates
-+ *     $($(FOO)$($(BAR)))
-+ * and returns a new string containing the expansion (note that the string is
-+ * recursively expanded), also advancing 'str' to point to the next character
-+ * after the corresponding closing parenthesis, in this case, *str will be
-+ *     $(BAR)
-+ */
-+static char *expand_dollar_with_args(const char **str, int argc, char *argv[])
-+{
-+	const char *p = *str;
-+	const char *q;
-+	int nest = 0;
-+
-+	/*
-+	 * In Kconfig, variable/function references always start with "$(".
-+	 * Neither single-letter variables as in $A nor curly braces as in ${CC}
-+	 * are supported.  '$' not followed by '(' loses its special meaning.
-+	 */
-+	if (*p != '(') {
-+		*str = p;
-+		return xstrdup("$");
-+	}
-+
-+	p++;
-+	q = p;
-+	while (*q) {
-+		if (*q == '(') {
-+			nest++;
-+		} else if (*q == ')') {
-+			if (nest-- == 0)
-+				break;
-+		}
-+		q++;
-+	}
-+
-+	if (!*q)
-+		pperror("unterminated reference to '%s': missing ')'", p);
-+
-+	/* Advance 'str' to after the expanded initial portion of the string */
-+	*str = q + 1;
-+
-+	return eval_clause(p, q - p, argc, argv);
-+}
-+
-+char *expand_dollar(const char **str)
-+{
-+	return expand_dollar_with_args(str, 0, NULL);
-+}
-+
-+static char *__expand_string(const char **str, bool (*is_end)(char c),
-+			     int argc, char *argv[])
-+{
-+	const char *in, *p;
-+	char *expansion, *out;
-+	size_t in_len, out_len;
-+
-+	out = xmalloc(1);
-+	*out = 0;
-+	out_len = 1;
-+
-+	p = in = *str;
-+
-+	while (1) {
-+		if (*p == '$') {
-+			in_len = p - in;
-+			p++;
-+			expansion = expand_dollar_with_args(&p, argc, argv);
-+			out_len += in_len + strlen(expansion);
-+			out = xrealloc(out, out_len);
-+			strncat(out, in, in_len);
-+			strcat(out, expansion);
-+			free(expansion);
-+			in = p;
-+			continue;
-+		}
-+
-+		if (is_end(*p))
-+			break;
-+
-+		p++;
-+	}
-+
-+	in_len = p - in;
-+	out_len += in_len;
-+	out = xrealloc(out, out_len);
-+	strncat(out, in, in_len);
-+
-+	/* Advance 'str' to the end character */
-+	*str = p;
-+
-+	return out;
-+}
-+
-+static bool is_end_of_str(char c)
-+{
-+	return !c;
-+}
-+
-+/*
-+ * Expand variables and functions in the given string.  Undefined variables
-+ * expand to an empty string.
-+ * The returned string must be freed when done.
-+ */
-+static char *expand_string_with_args(const char *in, int argc, char *argv[])
-+{
-+	return __expand_string(&in, is_end_of_str, argc, argv);
-+}
-+
-+char *expand_string(const char *in)
-+{
-+	return expand_string_with_args(in, 0, NULL);
-+}
-+
-+static bool is_end_of_token(char c)
-+{
-+	return !(isalnum(c) || c == '_' || c == '-');
-+}
-+
-+/*
-+ * Expand variables in a token.  The parsing stops when a token separater
-+ * (in most cases, it is a whitespace) is encountered.  'str' is updated to
-+ * point to the next character.
-+ *
-+ * The returned string must be freed when done.
-+ */
-+char *expand_one_token(const char **str)
-+{
-+	return __expand_string(str, is_end_of_token, 0, NULL);
-+}
-diff --git a/carl9170fw/config/symbol.c b/carl9170fw/config/symbol.c
-index 3c8bd9b..1f9266d 100644
---- a/carl9170fw/config/symbol.c
-+++ b/carl9170fw/config/symbol.c
-@@ -1,6 +1,6 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #include <ctype.h>
-@@ -33,33 +33,6 @@ struct symbol *sym_defconfig_list;
- struct symbol *modules_sym;
- tristate modules_val;
- 
--struct expr *sym_env_list;
--
--static void sym_add_default(struct symbol *sym, const char *def)
--{
--	struct property *prop = prop_alloc(P_DEFAULT, sym);
--
--	prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
--}
--
--void sym_init(void)
--{
--	struct symbol *sym;
--	struct utsname uts;
--	static bool inited = false;
--
--	if (inited)
--		return;
--	inited = true;
--
--	uname(&uts);
--
--	sym = sym_lookup("UNAME_RELEASE", 0);
--	sym->type = S_STRING;
--	sym->flags |= SYMBOL_AUTO;
--	sym_add_default(sym, uts.release);
--}
--
- enum symbol_type sym_get_type(struct symbol *sym)
- {
- 	enum symbol_type type = sym->type;
-@@ -77,7 +50,7 @@ const char *sym_type_name(enum symbol_type type)
- {
- 	switch (type) {
- 	case S_BOOLEAN:
--		return "boolean";
-+		return "bool";
- 	case S_TRISTATE:
- 		return "tristate";
- 	case S_INT:
-@@ -88,8 +61,6 @@ const char *sym_type_name(enum symbol_type type)
- 		return "string";
- 	case S_UNKNOWN:
- 		return "unknown";
--	case S_OTHER:
--		break;
- 	}
- 	return "???";
- }
-@@ -103,15 +74,6 @@ struct property *sym_get_choice_prop(struct symbol *sym)
- 	return NULL;
- }
- 
--struct property *sym_get_env_prop(struct symbol *sym)
--{
--	struct property *prop;
--
--	for_all_properties(sym, prop, P_ENV)
--		return prop;
--	return NULL;
--}
--
- static struct property *sym_get_default_prop(struct symbol *sym)
- {
- 	struct property *prop;
-@@ -124,7 +86,7 @@ static struct property *sym_get_default_prop(struct symbol *sym)
- 	return NULL;
- }
- 
--static struct property *sym_get_range_prop(struct symbol *sym)
-+struct property *sym_get_range_prop(struct symbol *sym)
- {
- 	struct property *prop;
- 
-@@ -183,7 +145,7 @@ static void sym_validate_range(struct symbol *sym)
- 		sprintf(str, "%lld", val2);
- 	else
- 		sprintf(str, "0x%llx", val2);
--	sym->curr.val = strdup(str);
-+	sym->curr.val = xstrdup(str);
- }
- 
- static void sym_set_changed(struct symbol *sym)
-@@ -243,7 +205,7 @@ static void sym_calc_visibility(struct symbol *sym)
- 	tri = yes;
- 	if (sym->dir_dep.expr)
- 		tri = expr_calc_value(sym->dir_dep.expr);
--	if (tri == mod)
-+	if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
- 		tri = yes;
- 	if (sym->dir_dep.tri != tri) {
- 		sym->dir_dep.tri = tri;
-@@ -333,6 +295,27 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
- 	return def_sym;
- }
- 
-+static void sym_warn_unmet_dep(struct symbol *sym)
-+{
-+	struct gstr gs = str_new();
-+
-+	str_printf(&gs,
-+		   "\nWARNING: unmet direct dependencies detected for %s\n",
-+		   sym->name);
-+	str_printf(&gs,
-+		   "  Depends on [%c]: ",
-+		   sym->dir_dep.tri == mod ? 'm' : 'n');
-+	expr_gstr_print(sym->dir_dep.expr, &gs);
-+	str_printf(&gs, "\n");
-+
-+	expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes,
-+			       "  Selected by [y]:\n");
-+	expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod,
-+			       "  Selected by [m]:\n");
-+
-+	fputs(str_get(&gs), stderr);
-+}
-+
- void sym_calc_value(struct symbol *sym)
- {
- 	struct symbol_value newval, oldval;
-@@ -371,11 +354,13 @@ void sym_calc_value(struct symbol *sym)
- 		sym->curr.tri = no;
- 		return;
- 	}
--	if (!sym_is_choice_value(sym))
--		sym->flags &= ~SYMBOL_WRITE;
-+	sym->flags &= ~SYMBOL_WRITE;
- 
- 	sym_calc_visibility(sym);
- 
-+	if (sym->visible != no)
-+		sym->flags |= SYMBOL_WRITE;
-+
- 	/* set default if recursively called */
- 	sym->curr = newval;
- 
-@@ -390,7 +375,6 @@ void sym_calc_value(struct symbol *sym)
- 				/* if the symbol is visible use the user value
- 				 * if available, otherwise try the default value
- 				 */
--				sym->flags |= SYMBOL_WRITE;
- 				if (sym_has_value(sym)) {
- 					newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
- 							      sym->visible);
-@@ -402,9 +386,10 @@ void sym_calc_value(struct symbol *sym)
- 			if (!sym_is_choice(sym)) {
- 				prop = sym_get_default_prop(sym);
- 				if (prop) {
--					sym->flags |= SYMBOL_WRITE;
- 					newval.tri = EXPR_AND(expr_calc_value(prop->expr),
- 							      prop->visible.tri);
-+					if (newval.tri != no)
-+						sym->flags |= SYMBOL_WRITE;
- 				}
- 				if (sym->implied.tri != no) {
- 					sym->flags |= SYMBOL_WRITE;
-@@ -412,18 +397,8 @@ void sym_calc_value(struct symbol *sym)
- 				}
- 			}
- 		calc_newval:
--			if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
--				struct expr *e;
--				e = expr_simplify_unmet_dep(sym->rev_dep.expr,
--				    sym->dir_dep.expr);
--				fprintf(stderr, "warning: (");
--				expr_fprint(e, stderr);
--				fprintf(stderr, ") selects %s which has unmet direct dependencies (",
--					sym->name);
--				expr_fprint(sym->dir_dep.expr, stderr);
--				fprintf(stderr, ")\n");
--				expr_free(e);
--			}
-+			if (sym->dir_dep.tri < sym->rev_dep.tri)
-+				sym_warn_unmet_dep(sym);
- 			newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
- 		}
- 		if (newval.tri == mod &&
-@@ -433,12 +408,9 @@ void sym_calc_value(struct symbol *sym)
- 	case S_STRING:
- 	case S_HEX:
- 	case S_INT:
--		if (sym->visible != no) {
--			sym->flags |= SYMBOL_WRITE;
--			if (sym_has_value(sym)) {
--				newval.val = sym->def[S_DEF_USER].val;
--				break;
--			}
-+		if (sym->visible != no && sym_has_value(sym)) {
-+			newval.val = sym->def[S_DEF_USER].val;
-+			break;
- 		}
- 		prop = sym_get_default_prop(sym);
- 		if (prop) {
-@@ -480,7 +452,7 @@ void sym_calc_value(struct symbol *sym)
- 		}
- 	}
- 
--	if (sym->flags & SYMBOL_AUTO)
-+	if (sym->flags & SYMBOL_NO_WRITE)
- 		sym->flags &= ~SYMBOL_WRITE;
- 
- 	if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES)
-@@ -783,7 +755,6 @@ const char *sym_get_string_default(struct symbol *sym)
- 		return str;
- 	case S_STRING:
- 		return str;
--	case S_OTHER:
- 	case S_UNKNOWN:
- 		break;
- 	}
-@@ -851,7 +822,7 @@ struct symbol *sym_lookup(const char *name, int flags)
- 				   : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
- 				return symbol;
- 		}
--		new_name = strdup(name);
-+		new_name = xstrdup(name);
- 	} else {
- 		new_name = NULL;
- 		hash = 0;
-@@ -896,55 +867,6 @@ struct symbol *sym_find(const char *name)
- 	return symbol;
- }
- 
--/*
-- * Expand symbol's names embedded in the string given in argument. Symbols'
-- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
-- * the empty string.
-- */
--const char *sym_expand_string_value(const char *in)
--{
--	const char *src;
--	char *res;
--	size_t reslen;
--
--	reslen = strlen(in) + 1;
--	res = xmalloc(reslen);
--	res[0] = '\0';
--
--	while ((src = strchr(in, '$'))) {
--		char *p, name[SYMBOL_MAXLENGTH];
--		const char *symval = "";
--		struct symbol *sym;
--		size_t newlen;
--
--		strncat(res, in, src - in);
--		src++;
--
--		p = name;
--		while (isalnum(*src) || *src == '_')
--			*p++ = *src++;
--		*p = '\0';
--
--		sym = sym_find(name);
--		if (sym != NULL) {
--			sym_calc_value(sym);
--			symval = sym_get_string_value(sym);
--		}
--
--		newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
--		if (newlen > reslen) {
--			reslen = newlen;
--			res = realloc(res, reslen);
--		}
--
--		strcat(res, symval);
--		in = src;
--	}
--	strcat(res, in);
--
--	return res;
--}
--
- const char *sym_escape_string_value(const char *in)
- {
- 	const char *p;
-@@ -1086,7 +1008,7 @@ static struct dep_stack {
- 	struct dep_stack *prev, *next;
- 	struct symbol *sym;
- 	struct property *prop;
--	struct expr *expr;
-+	struct expr **expr;
- } *check_top;
- 
- static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
-@@ -1150,37 +1072,52 @@ static void sym_check_print_recursive(struct symbol *last_sym)
- 		if (stack->sym == last_sym)
- 			fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
- 				prop->file->name, prop->lineno);
--			fprintf(stderr, "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n");
--			fprintf(stderr, "subsection \"Kconfig recursive dependency limitations\"\n");
--		if (stack->expr) {
--			fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
--				prop->file->name, prop->lineno,
-+
-+		if (sym_is_choice(sym)) {
-+			fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
-+				menu->file->name, menu->lineno,
- 				sym->name ? sym->name : "<choice>",
--				prop_get_type_name(prop->type),
- 				next_sym->name ? next_sym->name : "<choice>");
--		} else if (stack->prop) {
-+		} else if (sym_is_choice_value(sym)) {
-+			fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
-+				menu->file->name, menu->lineno,
-+				sym->name ? sym->name : "<choice>",
-+				next_sym->name ? next_sym->name : "<choice>");
-+		} else if (stack->expr == &sym->dir_dep.expr) {
- 			fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
- 				prop->file->name, prop->lineno,
- 				sym->name ? sym->name : "<choice>",
- 				next_sym->name ? next_sym->name : "<choice>");
--		} else if (sym_is_choice(sym)) {
--			fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
--				menu->file->name, menu->lineno,
-+		} else if (stack->expr == &sym->rev_dep.expr) {
-+			fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
-+				prop->file->name, prop->lineno,
- 				sym->name ? sym->name : "<choice>",
- 				next_sym->name ? next_sym->name : "<choice>");
--		} else if (sym_is_choice_value(sym)) {
--			fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
--				menu->file->name, menu->lineno,
-+		} else if (stack->expr == &sym->implied.expr) {
-+			fprintf(stderr, "%s:%d:\tsymbol %s is implied by %s\n",
-+				prop->file->name, prop->lineno,
-+				sym->name ? sym->name : "<choice>",
-+				next_sym->name ? next_sym->name : "<choice>");
-+		} else if (stack->expr) {
-+			fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
-+				prop->file->name, prop->lineno,
- 				sym->name ? sym->name : "<choice>",
-+				prop_get_type_name(prop->type),
- 				next_sym->name ? next_sym->name : "<choice>");
- 		} else {
--			fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
-+			fprintf(stderr, "%s:%d:\tsymbol %s %s is visible depending on %s\n",
- 				prop->file->name, prop->lineno,
- 				sym->name ? sym->name : "<choice>",
-+				prop_get_type_name(prop->type),
- 				next_sym->name ? next_sym->name : "<choice>");
- 		}
- 	}
- 
-+	fprintf(stderr,
-+		"For a resolution refer to Documentation/kbuild/kconfig-language.txt\n"
-+		"subsection \"Kconfig recursive dependency limitations\"\n"
-+		"\n");
-+
- 	if (check_top == &cv_stack)
- 		dep_stack_remove();
- }
-@@ -1215,7 +1152,7 @@ static struct symbol *sym_check_expr_deps(struct expr *e)
- 	default:
- 		break;
- 	}
--	printf("Oops! How to check %d?\n", e->type);
-+	fprintf(stderr, "Oops! How to check %d?\n", e->type);
- 	return NULL;
- }
- 
-@@ -1228,12 +1165,26 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym)
- 
- 	dep_stack_insert(&stack, sym);
- 
-+	stack.expr = &sym->dir_dep.expr;
-+	sym2 = sym_check_expr_deps(sym->dir_dep.expr);
-+	if (sym2)
-+		goto out;
-+
-+	stack.expr = &sym->rev_dep.expr;
- 	sym2 = sym_check_expr_deps(sym->rev_dep.expr);
- 	if (sym2)
- 		goto out;
- 
-+	stack.expr = &sym->implied.expr;
-+	sym2 = sym_check_expr_deps(sym->implied.expr);
-+	if (sym2)
-+		goto out;
-+
-+	stack.expr = NULL;
-+
- 	for (prop = sym->prop; prop; prop = prop->next) {
--		if (prop->type == P_CHOICE || prop->type == P_SELECT)
-+		if (prop->type == P_CHOICE || prop->type == P_SELECT ||
-+		    prop->type == P_IMPLY)
- 			continue;
- 		stack.prop = prop;
- 		sym2 = sym_check_expr_deps(prop->visible.expr);
-@@ -1241,7 +1192,7 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym)
- 			break;
- 		if (prop->type != P_DEFAULT || sym_is_choice(sym))
- 			continue;
--		stack.expr = prop->expr;
-+		stack.expr = &prop->expr;
- 		sym2 = sym_check_expr_deps(prop->expr);
- 		if (sym2)
- 			break;
-@@ -1319,9 +1270,6 @@ struct symbol *sym_check_deps(struct symbol *sym)
- 		sym->flags &= ~SYMBOL_CHECK;
- 	}
- 
--	if (sym2 && sym2 == sym)
--		sym2 = NULL;
--
- 	return sym2;
- }
- 
-@@ -1360,8 +1308,6 @@ const char *prop_get_type_name(enum prop_type type)
- 	switch (type) {
- 	case P_PROMPT:
- 		return "prompt";
--	case P_ENV:
--		return "env";
- 	case P_COMMENT:
- 		return "comment";
- 	case P_MENU:
-@@ -1383,32 +1329,3 @@ const char *prop_get_type_name(enum prop_type type)
- 	}
- 	return "unknown";
- }
--
--static void prop_add_env(const char *env)
--{
--	struct symbol *sym, *sym2;
--	struct property *prop;
--	char *p;
--
--	sym = current_entry->sym;
--	sym->flags |= SYMBOL_AUTO;
--	for_all_properties(sym, prop, P_ENV) {
--		sym2 = prop_get_symbol(prop);
--		if (strcmp(sym2->name, env))
--			menu_warn(current_entry, "redefining environment symbol from %s",
--				  sym2->name);
--		return;
--	}
--
--	prop = prop_alloc(P_ENV, sym);
--	prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
--
--	sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
--	sym_env_list->right.sym = sym;
--
--	p = getenv(env);
--	if (p)
--		sym_add_default(sym, p);
--	else
--		menu_warn(current_entry, "environment variable %s undefined", env);
--}
-diff --git a/carl9170fw/config/util.c b/carl9170fw/config/util.c
-index 0e76042..2958539 100644
---- a/carl9170fw/config/util.c
-+++ b/carl9170fw/config/util.c
-@@ -1,8 +1,7 @@
-+// SPDX-License-Identifier: GPL-2.0
- /*
-  * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
-  * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
-- *
-- * Released under the terms of the GNU GPL v2.0.
-  */
- 
- #include <stdarg.h>
-@@ -14,69 +13,21 @@
- struct file *file_lookup(const char *name)
- {
- 	struct file *file;
--	const char *file_name = sym_expand_string_value(name);
- 
- 	for (file = file_list; file; file = file->next) {
- 		if (!strcmp(name, file->name)) {
--			free((void *)file_name);
- 			return file;
- 		}
- 	}
- 
- 	file = xmalloc(sizeof(*file));
- 	memset(file, 0, sizeof(*file));
--	file->name = file_name;
-+	file->name = xstrdup(name);
- 	file->next = file_list;
- 	file_list = file;
- 	return file;
- }
- 
--/* write a dependency file as used by kbuild to track dependencies */
--int file_write_dep(const char *name)
--{
--	struct symbol *sym, *env_sym;
--	struct expr *e;
--	struct file *file;
--	FILE *out;
--
--	if (!name)
--		name = ".kconfig.d";
--	out = fopen("..config.tmp", "w");
--	if (!out)
--		return 1;
--	fprintf(out, "deps_config := \\\n");
--	for (file = file_list; file; file = file->next) {
--		if (file->next)
--			fprintf(out, "\t%s \\\n", file->name);
--		else
--			fprintf(out, "\t%s\n", file->name);
--	}
--	fprintf(out, "\n%s: \\\n"
--		     "\t$(deps_config)\n\n", conf_get_autoconfig_name());
--
--	expr_list_for_each_sym(sym_env_list, e, sym) {
--		struct property *prop;
--		const char *value;
--
--		prop = sym_get_env_prop(sym);
--		env_sym = prop_get_symbol(prop);
--		if (!env_sym)
--			continue;
--		value = getenv(env_sym->name);
--		if (!value)
--			value = "";
--		fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
--		fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
--		fprintf(out, "endif\n");
--	}
--
--	fprintf(out, "\n$(deps_config): ;\n");
--	fclose(out);
--	rename("..config.tmp", name);
--	return 0;
--}
--
--
- /* Allocate initial growable string */
- struct gstr str_new(void)
- {
-@@ -104,7 +55,7 @@ void str_append(struct gstr *gs, const char *s)
- 	if (s) {
- 		l = strlen(gs->s) + strlen(s) + 1;
- 		if (l > gs->len) {
--			gs->s   = realloc(gs->s, l);
-+			gs->s = xrealloc(gs->s, l);
- 			gs->len = l;
- 		}
- 		strcat(gs->s, s);
-@@ -145,3 +96,34 @@ void *xcalloc(size_t nmemb, size_t size)
- 	fprintf(stderr, "Out of memory.\n");
- 	exit(1);
- }
-+
-+void *xrealloc(void *p, size_t size)
-+{
-+	p = realloc(p, size);
-+	if (p)
-+		return p;
-+	fprintf(stderr, "Out of memory.\n");
-+	exit(1);
-+}
-+
-+char *xstrdup(const char *s)
-+{
-+	char *p;
-+
-+	p = strdup(s);
-+	if (p)
-+		return p;
-+	fprintf(stderr, "Out of memory.\n");
-+	exit(1);
-+}
-+
-+char *xstrndup(const char *s, size_t n)
-+{
-+	char *p;
-+
-+	p = strndup(s, n);
-+	if (p)
-+		return p;
-+	fprintf(stderr, "Out of memory.\n");
-+	exit(1);
-+}
-diff --git a/carl9170fw/config/zconf.l b/carl9170fw/config/zconf.l
-index 9720530..c52cce8 100644
---- a/carl9170fw/config/zconf.l
-+++ b/carl9170fw/config/zconf.l
-@@ -1,13 +1,13 @@
--%option nostdinit noyywrap never-interactive full ecs
--%option 8bit nodefault perf-report perf-report
--%option noinput
--%x COMMAND HELP STRING PARAM
--%{
-+/* SPDX-License-Identifier: GPL-2.0 */
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
-+%option nostdinit noyywrap never-interactive full ecs
-+%option 8bit nodefault yylineno
-+%x ASSIGN_VAL HELP STRING
-+%{
- 
-+#include <assert.h>
- #include <limits.h>
- #include <stdio.h>
- #include <stdlib.h>
-@@ -15,6 +15,9 @@
- #include <unistd.h>
- 
- #include "lkc.h"
-+#include "zconf.tab.h"
-+
-+#define YY_DECL		static int yylex1(void)
- 
- #define START_STRSIZE	16
- 
-@@ -23,6 +26,8 @@ static struct {
- 	int lineno;
- } current_pos;
- 
-+static int prev_prev_token = T_EOL;
-+static int prev_token = T_EOL;
- static char *text;
- static int text_size, text_asize;
- 
-@@ -35,6 +40,8 @@ struct buffer *current_buf;
- 
- static int last_ts, first_ts;
- 
-+static char *expand_token(const char *in, size_t n);
-+static void append_expanded_string(const char *in);
- static void zconf_endhelp(void);
- static void zconf_endfile(void);
- 
-@@ -52,7 +59,7 @@ static void append_string(const char *str, int size)
- 	if (new_size > text_asize) {
- 		new_size += START_STRSIZE - 1;
- 		new_size &= -START_STRSIZE;
--		text = realloc(text, new_size);
-+		text = xrealloc(text, new_size);
- 		text_asize = new_size;
- 	}
- 	memcpy(text + text_size, str, size);
-@@ -71,7 +78,7 @@ static void warn_ignored_character(char chr)
- {
- 	fprintf(stderr,
- 	        "%s:%d:warning: ignoring unsupported character '%c'\n",
--	        zconf_curname(), zconf_lineno(), chr);
-+	        current_file->name, yylineno, chr);
- }
- %}
- 
-@@ -81,116 +88,113 @@ n	[A-Za-z0-9_-]
- 	int str = 0;
- 	int ts, i;
- 
--[ \t]*#.*\n	|
--[ \t]*\n	{
--	current_file->lineno++;
--	return T_EOL;
--}
--[ \t]*#.*
--
--
--[ \t]+	{
--	BEGIN(COMMAND);
--}
--
--.	{
--	unput(yytext[0]);
--	BEGIN(COMMAND);
--}
--
--
--<COMMAND>{
--	{n}+	{
--		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
--		BEGIN(PARAM);
--		current_pos.file = current_file;
--		current_pos.lineno = current_file->lineno;
--		if (id && id->flags & TF_COMMAND) {
--			zconflval.id = id;
--			return id->token;
--		}
--		alloc_string(yytext, yyleng);
--		zconflval.string = text;
--		return T_WORD;
--	}
--	.	warn_ignored_character(*yytext);
--	\n	{
--		BEGIN(INITIAL);
--		current_file->lineno++;
--		return T_EOL;
--	}
--}
-+#.*			/* ignore comment */
-+[ \t]*			/* whitespaces */
-+\\\n			/* escaped new line */
-+\n			return T_EOL;
-+"allnoconfig_y"		return T_ALLNOCONFIG_Y;
-+"bool"			return T_BOOL;
-+"choice"		return T_CHOICE;
-+"comment"		return T_COMMENT;
-+"config"		return T_CONFIG;
-+"def_bool"		return T_DEF_BOOL;
-+"def_tristate"		return T_DEF_TRISTATE;
-+"default"		return T_DEFAULT;
-+"defconfig_list"	return T_DEFCONFIG_LIST;
-+"depends"		return T_DEPENDS;
-+"endchoice"		return T_ENDCHOICE;
-+"endif"			return T_ENDIF;
-+"endmenu"		return T_ENDMENU;
-+"help"|"---help---"	return T_HELP;
-+"hex"			return T_HEX;
-+"if"			return T_IF;
-+"imply"			return T_IMPLY;
-+"int"			return T_INT;
-+"mainmenu"		return T_MAINMENU;
-+"menu"			return T_MENU;
-+"menuconfig"		return T_MENUCONFIG;
-+"modules"		return T_MODULES;
-+"on"			return T_ON;
-+"option"		return T_OPTION;
-+"optional"		return T_OPTIONAL;
-+"prompt"		return T_PROMPT;
-+"range"			return T_RANGE;
-+"select"		return T_SELECT;
-+"source"		return T_SOURCE;
-+"string"		return T_STRING;
-+"tristate"		return T_TRISTATE;
-+"visible"		return T_VISIBLE;
-+"||"			return T_OR;
-+"&&"			return T_AND;
-+"="			return T_EQUAL;
-+"!="			return T_UNEQUAL;
-+"<"			return T_LESS;
-+"<="			return T_LESS_EQUAL;
-+">"			return T_GREATER;
-+">="			return T_GREATER_EQUAL;
-+"!"			return T_NOT;
-+"("			return T_OPEN_PAREN;
-+")"			return T_CLOSE_PAREN;
-+":="			return T_COLON_EQUAL;
-+"+="			return T_PLUS_EQUAL;
-+\"|\'			{
-+				str = yytext[0];
-+				new_string();
-+				BEGIN(STRING);
-+			}
-+{n}+			{
-+				alloc_string(yytext, yyleng);
-+				yylval.string = text;
-+				return T_WORD;
-+			}
-+({n}|$)+		{
-+				/* this token includes at least one '$' */
-+				yylval.string = expand_token(yytext, yyleng);
-+				if (strlen(yylval.string))
-+					return T_WORD;
-+				free(yylval.string);
-+			}
-+.			warn_ignored_character(*yytext);
- 
--<PARAM>{
--	"&&"	return T_AND;
--	"||"	return T_OR;
--	"("	return T_OPEN_PAREN;
--	")"	return T_CLOSE_PAREN;
--	"!"	return T_NOT;
--	"="	return T_EQUAL;
--	"!="	return T_UNEQUAL;
--	"<="	return T_LESS_EQUAL;
--	">="	return T_GREATER_EQUAL;
--	"<"	return T_LESS;
--	">"	return T_GREATER;
--	\"|\'	{
--		str = yytext[0];
--		new_string();
--		BEGIN(STRING);
--	}
--	\n	BEGIN(INITIAL); current_file->lineno++; return T_EOL;
--	({n}|[/.])+	{
--		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
--		if (id && id->flags & TF_PARAM) {
--			zconflval.id = id;
--			return id->token;
--		}
-+<ASSIGN_VAL>{
-+	[^[:blank:]\n]+.*	{
- 		alloc_string(yytext, yyleng);
--		zconflval.string = text;
--		return T_WORD;
--	}
--	#.*	/* comment */
--	\\\n	current_file->lineno++;
--	[[:blank:]]+
--	.	warn_ignored_character(*yytext);
--	<<EOF>> {
--		BEGIN(INITIAL);
-+		yylval.string = text;
-+		return T_ASSIGN_VAL;
- 	}
-+	\n	{ BEGIN(INITIAL); return T_EOL; }
-+	.
- }
- 
- <STRING>{
--	[^'"\\\n]+/\n	{
--		append_string(yytext, yyleng);
--		zconflval.string = text;
--		return T_WORD_QUOTE;
--	}
--	[^'"\\\n]+	{
-+	"$".*	append_expanded_string(yytext);
-+	[^$'"\\\n]+	{
- 		append_string(yytext, yyleng);
- 	}
--	\\.?/\n	{
--		append_string(yytext + 1, yyleng - 1);
--		zconflval.string = text;
--		return T_WORD_QUOTE;
--	}
- 	\\.?	{
- 		append_string(yytext + 1, yyleng - 1);
- 	}
- 	\'|\"	{
- 		if (str == yytext[0]) {
--			BEGIN(PARAM);
--			zconflval.string = text;
-+			BEGIN(INITIAL);
-+			yylval.string = text;
- 			return T_WORD_QUOTE;
- 		} else
- 			append_string(yytext, 1);
- 	}
- 	\n	{
--		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
--		current_file->lineno++;
-+		fprintf(stderr,
-+			"%s:%d:warning: multi-line strings not supported\n",
-+			zconf_curname(), zconf_lineno());
-+		unput('\n');
- 		BEGIN(INITIAL);
--		return T_EOL;
-+		yylval.string = text;
-+		return T_WORD_QUOTE;
- 	}
- 	<<EOF>>	{
- 		BEGIN(INITIAL);
-+		yylval.string = text;
-+		return T_WORD_QUOTE;
- 	}
- }
- 
-@@ -218,12 +222,10 @@ n	[A-Za-z0-9_-]
- 		}
- 	}
- 	[ \t]*\n/[^ \t\n] {
--		current_file->lineno++;
- 		zconf_endhelp();
- 		return T_HELPTEXT;
- 	}
- 	[ \t]*\n	{
--		current_file->lineno++;
- 		append_string("\n", 1);
- 	}
- 	[^ \t\n].* {
-@@ -243,6 +245,12 @@ n	[A-Za-z0-9_-]
- }
- 
- <<EOF>>	{
-+	BEGIN(INITIAL);
-+
-+	if (prev_token != T_EOL && prev_token != T_HELPTEXT)
-+		fprintf(stderr, "%s:%d:warning: no new line at end of file\n",
-+			current_file->name, yylineno);
-+
- 	if (current_file) {
- 		zconf_endfile();
- 		return T_EOL;
-@@ -252,6 +260,93 @@ n	[A-Za-z0-9_-]
- }
- 
- %%
-+
-+/* second stage lexer */
-+int yylex(void)
-+{
-+	int token;
-+
-+repeat:
-+	token = yylex1();
-+
-+	if (prev_token == T_EOL || prev_token == T_HELPTEXT) {
-+		if (token == T_EOL) {
-+			/* Do not pass unneeded T_EOL to the parser. */
-+			goto repeat;
-+		} else {
-+			/*
-+			 * For the parser, update file/lineno at the first token
-+			 * of each statement. Generally, \n is a statement
-+			 * terminator in Kconfig, but it is not always true
-+			 * because \n could be escaped by a backslash.
-+			 */
-+			current_pos.file = current_file;
-+			current_pos.lineno = yylineno;
-+		}
-+	}
-+
-+	if (prev_prev_token == T_EOL && prev_token == T_WORD &&
-+	    (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL))
-+		BEGIN(ASSIGN_VAL);
-+
-+	prev_prev_token = prev_token;
-+	prev_token = token;
-+
-+	return token;
-+}
-+
-+static char *expand_token(const char *in, size_t n)
-+{
-+	char *out;
-+	int c;
-+	char c2;
-+	const char *rest, *end;
-+
-+	new_string();
-+	append_string(in, n);
-+
-+	/* get the whole line because we do not know the end of token. */
-+	while ((c = input()) != EOF) {
-+		if (c == '\n') {
-+			unput(c);
-+			break;
-+		}
-+		c2 = c;
-+		append_string(&c2, 1);
-+	}
-+
-+	rest = text;
-+	out = expand_one_token(&rest);
-+
-+	/* push back unused characters to the input stream */
-+	end = rest + strlen(rest);
-+	while (end > rest)
-+		unput(*--end);
-+
-+	free(text);
-+
-+	return out;
-+}
-+
-+static void append_expanded_string(const char *str)
-+{
-+	const char *end;
-+	char *res;
-+
-+	str++;
-+
-+	res = expand_dollar(&str);
-+
-+	/* push back unused characters to the input stream */
-+	end = str + strlen(str);
-+	while (end > str)
-+		unput(*--end);
-+
-+	append_string(res, strlen(res));
-+
-+	free(res);
-+}
-+
- void zconf_starthelp(void)
- {
- 	new_string();
-@@ -261,7 +356,7 @@ void zconf_starthelp(void)
- 
- static void zconf_endhelp(void)
- {
--	zconflval.string = text;
-+	yylval.string = text;
- 	BEGIN(INITIAL);
- }
- 
-@@ -294,7 +389,7 @@ void zconf_initscan(const char *name)
- {
- 	yyin = zconf_fopen(name);
- 	if (!yyin) {
--		printf("can't find file %s\n", name);
-+		fprintf(stderr, "can't find file %s\n", name);
- 		exit(1);
- 	}
- 
-@@ -302,7 +397,7 @@ void zconf_initscan(const char *name)
- 	memset(current_buf, 0, sizeof(*current_buf));
- 
- 	current_file = file_lookup(name);
--	current_file->lineno = 1;
-+	yylineno = 1;
- }
- 
- void zconf_nextfile(const char *name)
-@@ -315,35 +410,34 @@ void zconf_nextfile(const char *name)
- 	current_buf->state = YY_CURRENT_BUFFER;
- 	yyin = zconf_fopen(file->name);
- 	if (!yyin) {
--		printf("%s:%d: can't open file \"%s\"\n",
--		    zconf_curname(), zconf_lineno(), file->name);
-+		fprintf(stderr, "%s:%d: can't open file \"%s\"\n",
-+			zconf_curname(), zconf_lineno(), file->name);
- 		exit(1);
- 	}
- 	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
- 	buf->parent = current_buf;
- 	current_buf = buf;
- 
--	for (iter = current_file->parent; iter; iter = iter->parent ) {
--		if (!strcmp(current_file->name,iter->name) ) {
--			printf("%s:%d: recursive inclusion detected. "
--			       "Inclusion path:\n  current file : '%s'\n",
--			       zconf_curname(), zconf_lineno(),
--			       zconf_curname());
--			iter = current_file->parent;
--			while (iter && \
--			       strcmp(iter->name,current_file->name)) {
--				printf("  included from: '%s:%d'\n",
--				       iter->name, iter->lineno-1);
-+	current_file->lineno = yylineno;
-+	file->parent = current_file;
-+
-+	for (iter = current_file; iter; iter = iter->parent) {
-+		if (!strcmp(iter->name, file->name)) {
-+			fprintf(stderr,
-+				"Recursive inclusion detected.\n"
-+				"Inclusion path:\n"
-+				"  current file : %s\n", file->name);
-+			iter = file;
-+			do {
- 				iter = iter->parent;
--			}
--			if (iter)
--				printf("  included from: '%s:%d'\n",
--				       iter->name, iter->lineno+1);
-+				fprintf(stderr, "  included from: %s:%d\n",
-+					iter->name, iter->lineno - 1);
-+			} while (strcmp(iter->name, file->name));
- 			exit(1);
- 		}
- 	}
--	file->lineno = 1;
--	file->parent = current_file;
-+
-+	yylineno = 1;
- 	current_file = file;
- }
- 
-@@ -352,6 +446,8 @@ static void zconf_endfile(void)
- 	struct buffer *parent;
- 
- 	current_file = current_file->parent;
-+	if (current_file)
-+		yylineno = current_file->lineno;
- 
- 	parent = current_buf->parent;
- 	if (parent) {
-diff --git a/carl9170fw/config/zconf.y b/carl9170fw/config/zconf.y
-index 79c4f04..60936c7 100644
---- a/carl9170fw/config/zconf.y
-+++ b/carl9170fw/config/zconf.y
-@@ -1,8 +1,8 @@
--%{
-+/* SPDX-License-Identifier: GPL-2.0 */
- /*
-  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
-- * Released under the terms of the GNU GPL v2.0.
-  */
-+%{
- 
- #include <ctype.h>
- #include <stdarg.h>
-@@ -20,63 +20,69 @@
- 
- int cdebug = PRINTD;
- 
--extern int zconflex(void);
-+static void yyerror(const char *err);
- static void zconfprint(const char *err, ...);
- static void zconf_error(const char *err, ...);
--static void zconferror(const char *err);
--static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
-+static bool zconf_endtoken(const char *tokenname,
-+			   const char *expected_tokenname);
- 
- struct symbol *symbol_hash[SYMBOL_HASHSIZE];
- 
- static struct menu *current_menu, *current_entry;
- 
- %}
--%expect 32
- 
- %union
- {
- 	char *string;
--	struct file *file;
- 	struct symbol *symbol;
- 	struct expr *expr;
- 	struct menu *menu;
--	const struct kconf_id *id;
-+	enum symbol_type type;
-+	enum variable_flavor flavor;
- }
- 
--%token <id>T_MAINMENU
--%token <id>T_MENU
--%token <id>T_ENDMENU
--%token <id>T_SOURCE
--%token <id>T_CHOICE
--%token <id>T_ENDCHOICE
--%token <id>T_COMMENT
--%token <id>T_CONFIG
--%token <id>T_MENUCONFIG
--%token <id>T_HELP
- %token <string> T_HELPTEXT
--%token <id>T_IF
--%token <id>T_ENDIF
--%token <id>T_DEPENDS
--%token <id>T_OPTIONAL
--%token <id>T_PROMPT
--%token <id>T_TYPE
--%token <id>T_DEFAULT
--%token <id>T_SELECT
--%token <id>T_IMPLY
--%token <id>T_RANGE
--%token <id>T_VISIBLE
--%token <id>T_OPTION
--%token <id>T_ON
- %token <string> T_WORD
- %token <string> T_WORD_QUOTE
--%token T_UNEQUAL
--%token T_LESS
--%token T_LESS_EQUAL
--%token T_GREATER
--%token T_GREATER_EQUAL
-+%token T_ALLNOCONFIG_Y
-+%token T_BOOL
-+%token T_CHOICE
- %token T_CLOSE_PAREN
-+%token T_COLON_EQUAL
-+%token T_COMMENT
-+%token T_CONFIG
-+%token T_DEFAULT
-+%token T_DEFCONFIG_LIST
-+%token T_DEF_BOOL
-+%token T_DEF_TRISTATE
-+%token T_DEPENDS
-+%token T_ENDCHOICE
-+%token T_ENDIF
-+%token T_ENDMENU
-+%token T_HELP
-+%token T_HEX
-+%token T_IF
-+%token T_IMPLY
-+%token T_INT
-+%token T_MAINMENU
-+%token T_MENU
-+%token T_MENUCONFIG
-+%token T_MODULES
-+%token T_ON
- %token T_OPEN_PAREN
-+%token T_OPTION
-+%token T_OPTIONAL
-+%token T_PLUS_EQUAL
-+%token T_PROMPT
-+%token T_RANGE
-+%token T_SELECT
-+%token T_SOURCE
-+%token T_STRING
-+%token T_TRISTATE
-+%token T_VISIBLE
- %token T_EOL
-+%token <string> T_ASSIGN_VAL
- 
- %left T_OR
- %left T_AND
-@@ -85,13 +91,15 @@ static struct menu *current_menu, *current_entry;
- %nonassoc T_NOT
- 
- %type <string> prompt
-+%type <symbol> nonconst_symbol
- %type <symbol> symbol
-+%type <type> type logic_type default
- %type <expr> expr
- %type <expr> if_expr
--%type <id> end
--%type <id> option_name
-+%type <string> end
- %type <menu> if_entry menu_entry choice_entry
--%type <string> symbol_option_arg word_opt
-+%type <string> word_opt assign_val
-+%type <flavor> assign_op
- 
- %destructor {
- 	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-@@ -100,71 +108,53 @@ static struct menu *current_menu, *current_entry;
- 		menu_end_menu();
- } if_entry menu_entry choice_entry
- 
--%{
--/* Include zconf_id.c here so it can see the token constants. */
--#include "kconf_id.c"
--%}
--
- %%
--input: nl start | start;
-+input: mainmenu_stmt stmt_list | stmt_list;
- 
--start: mainmenu_stmt stmt_list | stmt_list;
-+/* mainmenu entry */
-+
-+mainmenu_stmt: T_MAINMENU prompt T_EOL
-+{
-+	menu_add_prompt(P_MENU, $2, NULL);
-+};
- 
- stmt_list:
- 	  /* empty */
- 	| stmt_list common_stmt
- 	| stmt_list choice_stmt
- 	| stmt_list menu_stmt
--	| stmt_list end			{ zconf_error("unexpected end statement"); }
- 	| stmt_list T_WORD error T_EOL	{ zconf_error("unknown statement \"%s\"", $2); }
--	| stmt_list option_name error T_EOL
--{
--	zconf_error("unexpected option \"%s\"", $2->name);
--}
- 	| stmt_list error T_EOL		{ zconf_error("invalid statement"); }
- ;
- 
--option_name:
--	T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_IMPLY | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE
--;
--
- common_stmt:
--	  T_EOL
--	| if_stmt
-+	  if_stmt
- 	| comment_stmt
- 	| config_stmt
- 	| menuconfig_stmt
- 	| source_stmt
-+	| assignment_stmt
- ;
- 
--option_error:
--	  T_WORD error T_EOL		{ zconf_error("unknown option \"%s\"", $1); }
--	| error T_EOL			{ zconf_error("invalid option"); }
--;
--
--
- /* config/menuconfig entry */
- 
--config_entry_start: T_CONFIG T_WORD T_EOL
-+config_entry_start: T_CONFIG nonconst_symbol T_EOL
- {
--	struct symbol *sym = sym_lookup($2, 0);
--	sym->flags |= SYMBOL_OPTIONAL;
--	menu_add_entry(sym);
--	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2);
-+	$2->flags |= SYMBOL_OPTIONAL;
-+	menu_add_entry($2);
-+	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2->name);
- };
- 
- config_stmt: config_entry_start config_option_list
- {
--	menu_end_entry();
- 	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
- };
- 
--menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
-+menuconfig_entry_start: T_MENUCONFIG nonconst_symbol T_EOL
- {
--	struct symbol *sym = sym_lookup($2, 0);
--	sym->flags |= SYMBOL_OPTIONAL;
--	menu_add_entry(sym);
--	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
-+	$2->flags |= SYMBOL_OPTIONAL;
-+	menu_add_entry($2);
-+	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2->name);
- };
- 
- menuconfig_stmt: menuconfig_entry_start config_option_list
-@@ -173,26 +163,22 @@ menuconfig_stmt: menuconfig_entry_start config_option_list
- 		current_entry->prompt->type = P_MENU;
- 	else
- 		zconfprint("warning: menuconfig statement without prompt");
--	menu_end_entry();
- 	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
- };
- 
- config_option_list:
- 	  /* empty */
- 	| config_option_list config_option
--	| config_option_list symbol_option
- 	| config_option_list depends
- 	| config_option_list help
--	| config_option_list option_error
--	| config_option_list T_EOL
- ;
- 
--config_option: T_TYPE prompt_stmt_opt T_EOL
-+config_option: type prompt_stmt_opt T_EOL
- {
--	menu_set_type($1->stype);
-+	menu_set_type($1);
- 	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
- 		zconf_curname(), zconf_lineno(),
--		$1->stype);
-+		$1);
- };
- 
- config_option: T_PROMPT prompt if_expr T_EOL
-@@ -201,25 +187,25 @@ config_option: T_PROMPT prompt if_expr T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
- };
- 
--config_option: T_DEFAULT expr if_expr T_EOL
-+config_option: default expr if_expr T_EOL
- {
- 	menu_add_expr(P_DEFAULT, $2, $3);
--	if ($1->stype != S_UNKNOWN)
--		menu_set_type($1->stype);
-+	if ($1 != S_UNKNOWN)
-+		menu_set_type($1);
- 	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
- 		zconf_curname(), zconf_lineno(),
--		$1->stype);
-+		$1);
- };
- 
--config_option: T_SELECT T_WORD if_expr T_EOL
-+config_option: T_SELECT nonconst_symbol if_expr T_EOL
- {
--	menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
-+	menu_add_symbol(P_SELECT, $2, $3);
- 	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
- };
- 
--config_option: T_IMPLY T_WORD if_expr T_EOL
-+config_option: T_IMPLY nonconst_symbol if_expr T_EOL
- {
--	menu_add_symbol(P_IMPLY, sym_lookup($2, 0), $3);
-+	menu_add_symbol(P_IMPLY, $2, $3);
- 	printd(DEBUG_PARSE, "%s:%d:imply\n", zconf_curname(), zconf_lineno());
- };
- 
-@@ -229,34 +215,30 @@ config_option: T_RANGE symbol symbol if_expr T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
- };
- 
--symbol_option: T_OPTION symbol_option_list T_EOL
--;
-+config_option: T_OPTION T_MODULES T_EOL
-+{
-+	menu_add_option_modules();
-+};
- 
--symbol_option_list:
--	  /* empty */
--	| symbol_option_list T_WORD symbol_option_arg
-+config_option: T_OPTION T_DEFCONFIG_LIST T_EOL
- {
--	const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
--	if (id && id->flags & TF_OPTION)
--		menu_add_option(id->token, $3);
--	else
--		zconfprint("warning: ignoring unknown option %s", $2);
--	free($2);
-+	menu_add_option_defconfig_list();
- };
- 
--symbol_option_arg:
--	  /* empty */		{ $$ = NULL; }
--	| T_EQUAL prompt	{ $$ = $2; }
--;
-+config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL
-+{
-+	menu_add_option_allnoconfig_y();
-+};
- 
- /* choice entry */
- 
- choice: T_CHOICE word_opt T_EOL
- {
- 	struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
--	sym->flags |= SYMBOL_AUTO;
-+	sym->flags |= SYMBOL_NO_WRITE;
- 	menu_add_entry(sym);
- 	menu_add_expr(P_CHOICE, NULL, NULL);
-+	free($2);
- 	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
- };
- 
-@@ -267,7 +249,7 @@ choice_entry: choice choice_option_list
- 
- choice_end: end
- {
--	if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
-+	if (zconf_endtoken($1, "choice")) {
- 		menu_end_menu();
- 		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
- 	}
-@@ -281,8 +263,6 @@ choice_option_list:
- 	| choice_option_list choice_option
- 	| choice_option_list depends
- 	| choice_option_list help
--	| choice_option_list T_EOL
--	| choice_option_list option_error
- ;
- 
- choice_option: T_PROMPT prompt if_expr T_EOL
-@@ -291,15 +271,11 @@ choice_option: T_PROMPT prompt if_expr T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
- };
- 
--choice_option: T_TYPE prompt_stmt_opt T_EOL
-+choice_option: logic_type prompt_stmt_opt T_EOL
- {
--	if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
--		menu_set_type($1->stype);
--		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
--			zconf_curname(), zconf_lineno(),
--			$1->stype);
--	} else
--		YYERROR;
-+	menu_set_type($1);
-+	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-+	       zconf_curname(), zconf_lineno(), $1);
- };
- 
- choice_option: T_OPTIONAL T_EOL
-@@ -308,16 +284,28 @@ choice_option: T_OPTIONAL T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
- };
- 
--choice_option: T_DEFAULT T_WORD if_expr T_EOL
-+choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL
- {
--	if ($1->stype == S_UNKNOWN) {
--		menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
--		printd(DEBUG_PARSE, "%s:%d:default\n",
--			zconf_curname(), zconf_lineno());
--	} else
--		YYERROR;
-+	menu_add_symbol(P_DEFAULT, $2, $3);
-+	printd(DEBUG_PARSE, "%s:%d:default\n",
-+	       zconf_curname(), zconf_lineno());
- };
- 
-+type:
-+	  logic_type
-+	| T_INT			{ $$ = S_INT; }
-+	| T_HEX			{ $$ = S_HEX; }
-+	| T_STRING		{ $$ = S_STRING; }
-+
-+logic_type:
-+	  T_BOOL		{ $$ = S_BOOLEAN; }
-+	| T_TRISTATE		{ $$ = S_TRISTATE; }
-+
-+default:
-+	  T_DEFAULT		{ $$ = S_UNKNOWN; }
-+	| T_DEF_BOOL		{ $$ = S_BOOLEAN; }
-+	| T_DEF_TRISTATE	{ $$ = S_TRISTATE; }
-+
- choice_block:
- 	  /* empty */
- 	| choice_block common_stmt
-@@ -325,7 +313,7 @@ choice_block:
- 
- /* if entry */
- 
--if_entry: T_IF expr nl
-+if_entry: T_IF expr T_EOL
- {
- 	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
- 	menu_add_entry(NULL);
-@@ -335,29 +323,15 @@ if_entry: T_IF expr nl
- 
- if_end: end
- {
--	if (zconf_endtoken($1, T_IF, T_ENDIF)) {
-+	if (zconf_endtoken($1, "if")) {
- 		menu_end_menu();
- 		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
- 	}
- };
- 
--if_stmt: if_entry if_block if_end
-+if_stmt: if_entry stmt_list if_end
- ;
- 
--if_block:
--	  /* empty */
--	| if_block common_stmt
--	| if_block menu_stmt
--	| if_block choice_stmt
--;
--
--/* mainmenu entry */
--
--mainmenu_stmt: T_MAINMENU prompt nl
--{
--	menu_add_prompt(P_MENU, $2, NULL);
--};
--
- /* menu entry */
- 
- menu: T_MENU prompt T_EOL
-@@ -367,33 +341,33 @@ menu: T_MENU prompt T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
- };
- 
--menu_entry: menu visibility_list depends_list
-+menu_entry: menu menu_option_list
- {
- 	$$ = menu_add_menu();
- };
- 
- menu_end: end
- {
--	if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
-+	if (zconf_endtoken($1, "menu")) {
- 		menu_end_menu();
- 		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
- 	}
- };
- 
--menu_stmt: menu_entry menu_block menu_end
-+menu_stmt: menu_entry stmt_list menu_end
- ;
- 
--menu_block:
-+menu_option_list:
- 	  /* empty */
--	| menu_block common_stmt
--	| menu_block menu_stmt
--	| menu_block choice_stmt
-+	| menu_option_list visible
-+	| menu_option_list depends
- ;
- 
- source_stmt: T_SOURCE prompt T_EOL
- {
- 	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
- 	zconf_nextfile($2);
-+	free($2);
- };
- 
- /* comment entry */
-@@ -405,10 +379,13 @@ comment: T_COMMENT prompt T_EOL
- 	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
- };
- 
--comment_stmt: comment depends_list
--{
--	menu_end_entry();
--};
-+comment_stmt: comment comment_option_list
-+;
-+
-+comment_option_list:
-+	  /* empty */
-+	| comment_option_list depends
-+;
- 
- /* help option */
- 
-@@ -420,18 +397,22 @@ help_start: T_HELP T_EOL
- 
- help: help_start T_HELPTEXT
- {
-+	if (current_entry->help) {
-+		free(current_entry->help);
-+		zconfprint("warning: '%s' defined with more than one help text -- only the last one will be used",
-+			   current_entry->sym->name ?: "<choice>");
-+	}
-+
-+	/* Is the help text empty or all whitespace? */
-+	if ($2[strspn($2, " \f\n\r\t\v")] == '\0')
-+		zconfprint("warning: '%s' defined with blank help text",
-+			   current_entry->sym->name ?: "<choice>");
-+
- 	current_entry->help = $2;
- };
- 
- /* depends option */
- 
--depends_list:
--	  /* empty */
--	| depends_list depends
--	| depends_list T_EOL
--	| depends_list option_error
--;
--
- depends: T_DEPENDS T_ON expr T_EOL
- {
- 	menu_add_dep($3);
-@@ -439,14 +420,7 @@ depends: T_DEPENDS T_ON expr T_EOL
- };
- 
- /* visibility option */
--
--visibility_list:
--	  /* empty */
--	| visibility_list visible
--	| visibility_list T_EOL
--;
--
--visible: T_VISIBLE if_expr
-+visible: T_VISIBLE if_expr T_EOL
- {
- 	menu_add_visibility($2);
- };
-@@ -464,14 +438,9 @@ prompt:	  T_WORD
- 	| T_WORD_QUOTE
- ;
- 
--end:	  T_ENDMENU T_EOL	{ $$ = $1; }
--	| T_ENDCHOICE T_EOL	{ $$ = $1; }
--	| T_ENDIF T_EOL		{ $$ = $1; }
--;
--
--nl:
--	  T_EOL
--	| nl T_EOL
-+end:	  T_ENDMENU T_EOL	{ $$ = "menu"; }
-+	| T_ENDCHOICE T_EOL	{ $$ = "choice"; }
-+	| T_ENDIF T_EOL		{ $$ = "if"; }
- ;
- 
- if_expr:  /* empty */			{ $$ = NULL; }
-@@ -491,13 +460,31 @@ expr:	  symbol				{ $$ = expr_alloc_symbol($1); }
- 	| expr T_AND expr			{ $$ = expr_alloc_two(E_AND, $1, $3); }
- ;
- 
--symbol:	  T_WORD	{ $$ = sym_lookup($1, 0); free($1); }
-+/* For symbol definitions, selects, etc., where quotes are not accepted */
-+nonconst_symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); };
-+
-+symbol:	  nonconst_symbol
- 	| T_WORD_QUOTE	{ $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
- ;
- 
- word_opt: /* empty */			{ $$ = NULL; }
- 	| T_WORD
- 
-+/* assignment statement */
-+
-+assignment_stmt:  T_WORD assign_op assign_val T_EOL	{ variable_add($1, $3, $2); free($1); free($3); }
-+
-+assign_op:
-+	  T_EQUAL	{ $$ = VAR_RECURSIVE; }
-+	| T_COLON_EQUAL	{ $$ = VAR_SIMPLE; }
-+	| T_PLUS_EQUAL	{ $$ = VAR_APPEND; }
-+;
-+
-+assign_val:
-+	/* empty */		{ $$ = xstrdup(""); };
-+	| T_ASSIGN_VAL
-+;
-+
- %%
- 
- void conf_parse(const char *name)
-@@ -507,61 +494,51 @@ void conf_parse(const char *name)
- 
- 	zconf_initscan(name);
- 
--	sym_init();
- 	_menu_init();
--	rootmenu.prompt = menu_add_prompt(P_MENU, "CARL9170 Firmware Configuration", NULL);
- 
- 	if (getenv("ZCONF_DEBUG"))
--		zconfdebug = 1;
--	zconfparse();
--	if (zconfnerrs)
-+		yydebug = 1;
-+	yyparse();
-+
-+	/* Variables are expanded in the parse phase. We can free them here. */
-+	variable_all_del();
-+
-+	if (yynerrs)
- 		exit(1);
- 	if (!modules_sym)
- 		modules_sym = sym_find( "n" );
- 
--	rootmenu.prompt->text = _(rootmenu.prompt->text);
--	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
-+	if (!menu_has_prompt(&rootmenu)) {
-+		current_entry = &rootmenu;
-+		menu_add_prompt(P_MENU, "Main menu", NULL);
-+	}
- 
- 	menu_finalize(&rootmenu);
- 	for_all_symbols(i, sym) {
- 		if (sym_check_deps(sym))
--			zconfnerrs++;
-+			yynerrs++;
- 	}
--	if (zconfnerrs)
-+	if (yynerrs)
- 		exit(1);
- 	sym_set_change_count(1);
- }
- 
--static const char *zconf_tokenname(int token)
--{
--	switch (token) {
--	case T_MENU:		return "menu";
--	case T_ENDMENU:		return "endmenu";
--	case T_CHOICE:		return "choice";
--	case T_ENDCHOICE:	return "endchoice";
--	case T_IF:		return "if";
--	case T_ENDIF:		return "endif";
--	case T_DEPENDS:		return "depends";
--	case T_VISIBLE:		return "visible";
--	}
--	return "<token>";
--}
--
--static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
-+static bool zconf_endtoken(const char *tokenname,
-+			   const char *expected_tokenname)
- {
--	if (id->token != endtoken) {
-+	if (strcmp(tokenname, expected_tokenname)) {
- 		zconf_error("unexpected '%s' within %s block",
--			id->name, zconf_tokenname(starttoken));
--		zconfnerrs++;
-+			    tokenname, expected_tokenname);
-+		yynerrs++;
- 		return false;
- 	}
- 	if (current_menu->file != current_file) {
- 		zconf_error("'%s' in different file than '%s'",
--			id->name, zconf_tokenname(starttoken));
-+			    tokenname, expected_tokenname);
- 		fprintf(stderr, "%s:%d: location of the '%s'\n",
- 			current_menu->file->name, current_menu->lineno,
--			zconf_tokenname(starttoken));
--		zconfnerrs++;
-+			expected_tokenname);
-+		yynerrs++;
- 		return false;
- 	}
- 	return true;
-@@ -582,7 +559,7 @@ static void zconf_error(const char *err, ...)
- {
- 	va_list ap;
- 
--	zconfnerrs++;
-+	yynerrs++;
- 	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
- 	va_start(ap, err);
- 	vfprintf(stderr, err, ap);
-@@ -590,7 +567,7 @@ static void zconf_error(const char *err, ...)
- 	fprintf(stderr, "\n");
- }
- 
--static void zconferror(const char *err)
-+static void yyerror(const char *err)
- {
- 	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
- }
-@@ -623,7 +600,7 @@ static void print_symbol(FILE *out, struct menu *menu)
- 		fprintf(out, "\nconfig %s\n", sym->name);
- 	switch (sym->type) {
- 	case S_BOOLEAN:
--		fputs("  boolean\n", out);
-+		fputs("  bool\n", out);
- 		break;
- 	case S_TRISTATE:
- 		fputs("  tristate\n", out);
-@@ -686,6 +663,10 @@ static void print_symbol(FILE *out, struct menu *menu)
- 			print_quoted_string(out, prop->text);
- 			fputc('\n', out);
- 			break;
-+		case P_SYMBOL:
-+			fputs( "  symbol ", out);
-+			fprintf(out, "%s\n", prop->sym->name);
-+			break;
- 		default:
- 			fprintf(out, "  unknown prop %d!\n", prop->type);
- 			break;
-@@ -746,9 +727,5 @@ void zconfdump(FILE *out)
- 	}
- }
- 
--#include "zconf.lex.c"
- #include "util.c"
--#include "confdata.c"
--#include "expr.c"
--#include "symbol.c"
- #include "menu.c"
-diff --git a/carl9170fw/include/linux/ieee80211.h b/carl9170fw/include/linux/ieee80211.h
-index 31c59ea..46ce6cf 100644
---- a/carl9170fw/include/linux/ieee80211.h
-+++ b/carl9170fw/include/linux/ieee80211.h
-@@ -897,33 +897,33 @@ struct ieee80211_mgmt {
- 			__le16 status_code;
- 			/* possibly followed by Challenge text */
- 			u8 variable[0];
--		} __packed auth;
-+		} __packed __aligned(4) auth;
- 		struct {
- 			__le16 reason_code;
--		} __packed deauth;
-+		} __packed __aligned(4) deauth;
- 		struct {
- 			__le16 capab_info;
- 			__le16 listen_interval;
- 			/* followed by SSID and Supported rates */
- 			u8 variable[0];
--		} __packed assoc_req;
-+		} __packed __aligned(4) assoc_req;
- 		struct {
- 			__le16 capab_info;
- 			__le16 status_code;
- 			__le16 aid;
- 			/* followed by Supported rates */
- 			u8 variable[0];
--		} __packed assoc_resp, reassoc_resp;
-+		} __packed __aligned(4) assoc_resp, reassoc_resp;
- 		struct {
- 			__le16 capab_info;
- 			__le16 listen_interval;
- 			u8 current_ap[6];
- 			/* followed by SSID and Supported rates */
- 			u8 variable[0];
--		} __packed reassoc_req;
-+		} __packed __aligned(4) reassoc_req;
- 		struct {
- 			__le16 reason_code;
--		} __packed disassoc;
-+		} __packed __aligned(4) disassoc;
- 		struct {
- 			__le64 timestamp;
- 			__le16 beacon_int;
-@@ -931,11 +931,11 @@ struct ieee80211_mgmt {
- 			/* followed by some of SSID, Supported rates,
- 			 * FH Params, DS Params, CF Params, IBSS Params, TIM */
- 			u8 variable[0];
--		} __packed beacon;
-+		} __packed __aligned(4) beacon;
- 		struct {
- 			/* only variable items: SSID, Supported rates */
- 			u8 variable[0];
--		} __packed probe_req;
-+		} __packed __aligned(4) probe_req;
- 		struct {
- 			__le64 timestamp;
- 			__le16 beacon_int;
-@@ -943,7 +943,7 @@ struct ieee80211_mgmt {
- 			/* followed by some of SSID, Supported rates,
- 			 * FH Params, DS Params, CF Params, IBSS Params */
- 			u8 variable[0];
--		} __packed probe_resp;
-+		} __packed __aligned(4) probe_resp;
- 		struct {
- 			u8 category;
- 			union {
-@@ -1041,8 +1041,8 @@ struct ieee80211_mgmt {
- 					u8 variable[0];
- 				} __packed ftm;
- 			} u;
--		} __packed action;
--	} u;
-+		} __packed __aligned(4) action;
-+	} u __aligned(2);
- } __packed __aligned(2);
- 
- /* Supported rates membership selectors */
-@@ -1245,7 +1245,7 @@ struct ieee80211_bar {
- 	__u8 ta[6];
- 	__le16 control;
- 	__le16 start_seq_num;
--} __packed __aligned(4);
-+} __packed __aligned(2);
- 
- /* 802.11 BA(R) control masks */
- #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL	0x0000
-diff --git a/carl9170fw/include/shared/wlan.h b/carl9170fw/include/shared/wlan.h
-index 9c6b7ff..117f005 100644
---- a/carl9170fw/include/shared/wlan.h
-+++ b/carl9170fw/include/shared/wlan.h
-@@ -273,7 +273,7 @@ struct ar9170_tx_frame {
- 		struct ieee80211_hdr i3e;
- 		u8 payload[0];
- 	} data;
--} __packed;
-+} __packed __aligned(4);
- 
- struct carl9170_tx_superframe {
- 	struct carl9170_tx_superdesc s;
-diff --git a/carl9170fw/toolchain/Makefile b/carl9170fw/toolchain/Makefile
-index 11db906..43e546d 100644
---- a/carl9170fw/toolchain/Makefile
-+++ b/carl9170fw/toolchain/Makefile
-@@ -1,16 +1,16 @@
--BINUTILS_VER=2.31.1
-+BINUTILS_VER=2.32
- BINUTILS_TAR=binutils-$(BINUTILS_VER).tar.xz
- BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$(BINUTILS_TAR)"
- 
--NEWLIB_VER=3.0.0
-+NEWLIB_VER=3.1.0
- NEWLIB_TAR=newlib-$(NEWLIB_VER).tar.gz
- NEWLIB_URL="ftp://sourceware.org/pub/newlib/$(NEWLIB_TAR)"
- 
--GCC_VER=8.2.0
-+GCC_VER=9.1.0
- GCC_TAR=gcc-$(GCC_VER).tar.xz
- GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/$(GCC_TAR)"
- 
--MPFR_VER=4.0.1
-+MPFR_VER=4.0.2
- MPFR_TAR=mpfr-$(MPFR_VER).tar.xz
- MPFR_URL="https://ftp.gnu.org/gnu/mpfr/$(MPFR_TAR)"
- 
-diff --git a/carl9170fw/toolchain/SHA256SUMS b/carl9170fw/toolchain/SHA256SUMS
-index 1b65040..3a53959 100644
---- a/carl9170fw/toolchain/SHA256SUMS
-+++ b/carl9170fw/toolchain/SHA256SUMS
-@@ -1,16 +1,6 @@
--1cf7adf8ff4b5aa49041c8734bbcf1ad18cc4c94d0029aae0f4e48841088479a  src/gcc-7.2.0.tar.xz
--5b76a9b97c9464209772ed25ce55181a7bb144a66e5669aaec945aa64da3189b  src/newlib-2.5.0.tar.gz
--0b871e271c4c620444f8264f72143b4d224aa305306d85dd77ab8dce785b1e85  src/binutils-2.29.tar.xz
- 87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912  src/gmp-6.1.2.tar.xz
--617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3  src/mpc-1.0.3.tar.gz
--7a62ac1a04408614fccdc506e4844b10cf0ad2c2b1677097f8f35d3a1344a950  src/mpfr-3.1.6.tar.xz
- 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e  src/mpc-1.1.0.tar.gz
--fbe2cd1418b321f5c899ce4f0f0f4e73f5ecc7d02145b0e1fd096f5c3afb8a1d  src/mpfr-4.0.0.tar.xz
--c8566335ee74e5fcaeb8595b4ebd0400c4b043d6acb3263ecb1314f8f5501332  src/newlib-3.0.0.tar.gz
--832ca6ae04636adbb430e865a1451adf6979ab44ca1c8374f61fba65645ce15c  src/gcc-7.3.0.tar.xz
--e7010a46969f9d3e53b650a518663f98a5dde3c3ae21b7d71e5e6803bc36b577  src/binutils-2.29.1.tar.xz
--67874a60826303ee2fb6affc6dc0ddd3e749e9bfcb4c8655e3953d0458a6e16e  src/mpfr-4.0.1.tar.xz
--6e46b8aeae2f727a36f0bd9505e405768a72218f1796f0d09757d45209871ae6  src/binutils-2.30.tar.xz
--1d1866f992626e61349a1ccd0b8d5253816222cdc13390dcfaa74b093aa2b153  src/gcc-8.1.0.tar.xz
--5d20086ecf5752cc7d9134246e9588fa201740d540f7eb84d795b1f7a93bca86  src/binutils-2.31.1.tar.xz
--196c3c04ba2613f893283977e6011b2345d1cd1af9abeac58e916b1aab3e0080  src/gcc-8.2.0.tar.xz
-\ No newline at end of file
-+fb4fa1cc21e9060719208300a61420e4089d6de6ef59cf533b57fe74801d102a  src/newlib-3.1.0.tar.gz
-+1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a  src/mpfr-4.0.2.tar.xz
-+0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04  src/binutils-2.32.tar.xz
-+79a66834e96a6050d8fe78db2c3b32fb285b230b855d0a66288235bc04b327a0  src/gcc-9.1.0.tar.xz
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch b/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch
deleted file mode 100644
index aa4cb07..0000000
--- a/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch
+++ /dev/null
@@ -1,4893 +0,0 @@
-From dd4bc9ff49b9a7075e579fdd62fd930d27a9a7df Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 15:55:48 -0700
-Subject: [PATCH 2/8] Add firmware for the ATUSB IEEE 802.15.4 USB Adapter
-
-http://shop.sysmocom.de/products/atusb/
----
- INSTALL                     |  20 +-
- Makefile                    |   6 +-
- WHENCE                      |  12 ++
- atusb/Makefile              | 236 +++++++++++++++++++++
- atusb/README                |  94 +++++++++
- atusb/an/README             |  25 +++
- atusb/an/dec.py             | 127 ++++++++++++
- atusb/an/get.py             |  31 +++
- atusb/an/plot               |  12 ++
- atusb/atusb.c               |  63 ++++++
- atusb/board.c               | 120 +++++++++++
- atusb/board.h               |  95 +++++++++
- atusb/board_app.c           | 173 ++++++++++++++++
- atusb/board_atusb.c         | 162 +++++++++++++++
- atusb/board_atusb.h         |  48 +++++
- atusb/board_hulusb.c        | 179 ++++++++++++++++
- atusb/board_hulusb.h        |  66 ++++++
- atusb/board_rzusb.c         | 169 +++++++++++++++
- atusb/board_rzusb.h         |  48 +++++
- atusb/boot.c                |  77 +++++++
- atusb/descr.c               | 104 ++++++++++
- atusb/ep0.c                 | 338 ++++++++++++++++++++++++++++++
- atusb/flash.c               |  97 +++++++++
- atusb/include/at86rf230.h   | 402 ++++++++++++++++++++++++++++++++++++
- atusb/include/atusb/atusb.h |  97 +++++++++
- atusb/include/atusb/ep0.h   |  64 ++++++
- atusb/mac.c                 | 250 ++++++++++++++++++++++
- atusb/mac.h                 |  26 +++
- atusb/sernum.c              |  47 +++++
- atusb/sernum.h              |  37 ++++
- atusb/spi.c                 |  51 +++++
- atusb/spi.h                 |  30 +++
- atusb/uart.c                |  64 ++++++
- atusb/uart.h                |  25 +++
- atusb/usb/atu2.c            | 247 ++++++++++++++++++++++
- atusb/usb/dfu.c             | 260 +++++++++++++++++++++++
- atusb/usb/dfu.h             | 119 +++++++++++
- atusb/usb/dfu_common.c      | 101 +++++++++
- atusb/usb/usb.c             | 181 ++++++++++++++++
- atusb/usb/usb.h             | 189 +++++++++++++++++
- atusb/version.h             |  23 +++
- 42 files changed, 4512 insertions(+), 3 deletions(-)
- create mode 100644 atusb/Makefile
- create mode 100644 atusb/README
- create mode 100644 atusb/an/README
- create mode 100755 atusb/an/dec.py
- create mode 100755 atusb/an/get.py
- create mode 100755 atusb/an/plot
- create mode 100644 atusb/atusb.c
- create mode 100644 atusb/board.c
- create mode 100644 atusb/board.h
- create mode 100644 atusb/board_app.c
- create mode 100644 atusb/board_atusb.c
- create mode 100644 atusb/board_atusb.h
- create mode 100644 atusb/board_hulusb.c
- create mode 100644 atusb/board_hulusb.h
- create mode 100644 atusb/board_rzusb.c
- create mode 100644 atusb/board_rzusb.h
- create mode 100644 atusb/boot.c
- create mode 100644 atusb/descr.c
- create mode 100644 atusb/ep0.c
- create mode 100644 atusb/flash.c
- create mode 100644 atusb/include/at86rf230.h
- create mode 100644 atusb/include/atusb/atusb.h
- create mode 100644 atusb/include/atusb/ep0.h
- create mode 100644 atusb/mac.c
- create mode 100644 atusb/mac.h
- create mode 100644 atusb/sernum.c
- create mode 100644 atusb/sernum.h
- create mode 100644 atusb/spi.c
- create mode 100644 atusb/spi.h
- create mode 100644 atusb/uart.c
- create mode 100644 atusb/uart.h
- create mode 100644 atusb/usb/atu2.c
- create mode 100644 atusb/usb/dfu.c
- create mode 100644 atusb/usb/dfu.h
- create mode 100644 atusb/usb/dfu_common.c
- create mode 100644 atusb/usb/usb.c
- create mode 100644 atusb/usb/usb.h
- create mode 100644 atusb/version.h
-
-diff --git a/INSTALL b/INSTALL
-index 74c5cfd..7fb1116 100644
---- a/INSTALL
-+++ b/INSTALL
-@@ -16,6 +16,8 @@ In order to build everything you will need the following on the host
- system:
- 
-     * A C/C++ compiler, like GCC
-+    * AVR-GCC
-+    * Standard C library for AVR-GCC
-     * Cmake
-     * GNU Bison/YACC
-     * GNU Flex
-@@ -32,13 +34,27 @@ system:
- 
- On GNU/Linux distros that use apt you can install these with:
- 
--    apt install binutils-arm-linux-gnueabi binutils-arm-none-eabi bison \
--    cmake flex g++ gcc gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget
-+    apt install avr-gcc avr-libc binutils-arm-linux-gnueabi \
-+    binutils-arm-none-eabi bison cmake flex g++ gcc \
-+    gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget
- 
- CARL9170 Firmware Configuration
-+-------------------------------
- When building the carl9170 firmware you will be prompted with
- configuration questions.
- 
-+atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter
-+-------------------------------------------------------
-+
-+To flash the firmware you need dfu-util on the host. Issue
-+
-+    make dfu
-+
-+right after plugging the device into the USB port while the red led is
-+still on.
-+
-+Refer to the included README file for more information.
-+
- Licensing
- ---------
- 
-diff --git a/Makefile b/Makefile
-index 21d16fb..8474b30 100644
---- a/Makefile
-+++ b/Makefile
-@@ -17,7 +17,7 @@ shell=/bin/sh
- prefix=/lib/firmware
- install_program=install
- 
--.PHONY:	all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux
-+.PHONY:	all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc atusb av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux
- 
- all: aica ath9k_htc av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux
- 
-@@ -36,6 +36,9 @@ ath9k_htc_toolchain:
- ath9k_htc: ath9k_htc_toolchain
- 	cd ath9k_htc && $(MAKE) -C target_firmware
- 
-+atusb:
-+	cd atusb && $(MAKE)
-+
- av7110:
- 	cd av7110 && $(MAKE)
- 
-@@ -81,6 +84,7 @@ clean:
- 	if [ -a as31/Makefile ]; then cd as31 && $(MAKE) clean; fi;
- 	cd ath9k_htc && $(MAKE) toolchain-clean
- 	cd ath9k_htc && $(MAKE) -C target_firmware clean
-+	cd atusb && $(MAKE) clean
- 	cd av7110 && $(MAKE) clean
- 	cd carl9170fw/toolchain && $(MAKE) clean
- 	if [ -a carl9170fw/Makefile ]; then cd carl9170fw && $(MAKE) clean; fi;
-diff --git a/WHENCE b/WHENCE
-index 2932155..756de43 100644
---- a/WHENCE
-+++ b/WHENCE
-@@ -112,6 +112,18 @@ From https://github.com/qca/open-ath9k-htc-firmware
- 
- --------------------------------------------------------------------------
- 
-+atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter
-+http://shop.sysmocom.de/products/atusb/
-+
-+From http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw
-+
-+License: GPL-2.0-or-later
-+
-+Version: Based on commit 805db6ebf5d80692158acadf88e239da9d3e67af 
-+dated September 13 2017
-+
-+--------------------------------------------------------------------------
-+
- Driver: b43 - OpenFWWF -- Free firmware for some Broadcom 43xx series WLAN chips
- 
- License: GPLv2
-diff --git a/atusb/Makefile b/atusb/Makefile
-new file mode 100644
-index 0000000..c79cb26
---- /dev/null
-+++ b/atusb/Makefile
-@@ -0,0 +1,236 @@
-+#
-+# Makefile - Makefile of the ATUSB firmware
-+#
-+# Written 2010-2011, 2013 by Werner Almesberger
-+# Copyright 2010-2011, 2013 by Werner Almesberger
-+#
-+# 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.
-+#
-+
-+SHELL = /bin/bash
-+
-+NAME = atusb
-+DEBUG = false
-+
-+CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \
-+	 -Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \
-+	 -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes
-+
-+ifeq ($(DEBUG),true)
-+CFLAGS += -DDEBUG
-+endif
-+
-+ifeq ($(NAME),rzusb)
-+CHIP=at90usb1287
-+CFLAGS += -DRZUSB -DAT86RF230
-+else ifeq ($(NAME),hulusb)
-+CHIP=at90usb1287
-+CFLAGS += -DHULUSB -DAT86RF212
-+else
-+CHIP=atmega32u2
-+CFLAGS += -DATUSB -DAT86RF231
-+endif
-+HOST=jlime
-+BOOT_ADDR=0x7000
-+
-+AVR_PREFIX = $(BIN_PATH) avr-
-+CC = $(AVR_PREFIX)gcc
-+OBJCOPY = $(AVR_PREFIX)objcopy
-+#OBJDUMP = $(AVR_PREFIX)objdump
-+SIZE = $(AVR_PREFIX)size
-+
-+# BCD notion is 0xJJMM with JJ being major and MM being minor. Thus 0x0020 is
-+# version 0.2 */
-+USB_BCD_VERSION = 0030
-+USB_VENDOR_ID = 20b7
-+USB_PRODUCT_ID = 1540
-+USB_ID = $(USB_VENDOR_ID):$(USB_PRODUCT_ID)
-+
-+OBJS = atusb.o board.o board_app.o sernum.o spi.o descr.o ep0.o \
-+       dfu_common.o usb.o app-atu2.o mac.o
-+BOOT_OBJS = boot.o board.o sernum.o spi.o flash.o dfu.o \
-+            dfu_common.o usb.o boot-atu2.o
-+
-+ifeq ($(DEBUG),true)
-+OBJS +=  uart.o
-+endif
-+
-+ifeq ($(NAME),rzusb)
-+OBJS += board_rzusb.o
-+BOOT_OBJS += board_rzusb.o
-+else ifeq ($(NAME),hulusb)
-+OBJS += board_hulusb.o
-+BOOT_OBJS += board_hulusb.o
-+else
-+OBJS += board_atusb.o
-+BOOT_OBJS += board_atusb.o
-+endif
-+
-+
-+vpath %.c usb/
-+
-+CFLAGS += -Iinclude -Iusb -I.
-+
-+# ----- Verbosity control -----------------------------------------------------
-+
-+CC_normal	:= $(CC)
-+BUILD_normal	:=
-+DEPEND_normal	:= $(CPP) $(CFLAGS) -MM -MG
-+
-+CC_quiet	= @echo "  CC       " $@ && $(CC_normal)
-+BUILD_quiet	= @echo "  BUILD    " $@ && $(BUILD_normal)
-+DEPEND_quiet	= @$(DEPEND_normal)
-+
-+ifeq ($(V),1)
-+    CC		= $(CC_normal)
-+    BUILD	= $(BUILD_normal)
-+    DEPEND	= $(DEPEND_normal)
-+else
-+    CC		= $(CC_quiet)
-+    BUILD	= $(BUILD_quiet)
-+    DEPEND	= $(DEPEND_quiet)
-+endif
-+
-+# ----- Rules -----------------------------------------------------------------
-+
-+.PHONY:		all clean upload prog dfu update version.c bindist
-+.PHONY:		prog-app prog-read on off reset
-+
-+all:		$(NAME).bin boot.hex
-+
-+$(NAME).elf:	$(OBJS)
-+		$(MAKE) version.o
-+		$(CC) $(CFLAGS) -o $@ $(OBJS) version.o
-+		$(SIZE) $@
-+
-+boot.elf:	$(BOOT_OBJS)
-+		$(CC) $(CFLAGS) -o $@ $(BOOT_OBJS) \
-+		  -Wl,--section-start=.text=$(BOOT_ADDR)
-+		$(SIZE) $@
-+
-+%.bin:		%.elf
-+		$(BUILD) $(OBJCOPY) -j .text -j .data -O binary $< $@
-+		@echo "build #`cat .version`, `ls -l $@`"
-+
-+%.dfu:		%.bin
-+		cp $(NAME).bin $(NAME).dfu
-+		dfu-suffix -a $(NAME).dfu -d 0x$(USB_BCD_VERSION) \
-+		  -p 0x$(USB_PRODUCT_ID) -v 0x$(USB_VENDOR_ID)
-+
-+%.hex:		%.elf
-+		$(BUILD) $(OBJCOPY) -j .text -j .data -O ihex $< $@
-+		@echo "Size: `$(SIZE) -A boot.hex | sed '/Total */s///p;d'` B"
-+
-+# ----- Cleanup ---------------------------------------------------------------
-+
-+clean:
-+		rm -f $(NAME).bin $(NAME).elf $(NAME).dfu
-+		rm -f $(OBJS) $(OBJS:.o=.d)
-+		rm -f boot.hex boot.elf
-+		rm -f $(BOOT_OBJS) $(BOOT_OBJS:.o=.d)
-+		rm -f version.c version.d version.o
-+
-+# ----- Build version ---------------------------------------------------------
-+
-+version.c:
-+		@if [ -f .version ]; then \
-+		    v=`cat .version`; \
-+		    expr $$v + 1 >.version; \
-+		else \
-+		    echo 0 >.version; \
-+		fi
-+		@[ -s .version ] || echo 0 >.version
-+		@echo '/* MACHINE-GENERATED. DO NOT EDIT ! */' >version.c
-+		@echo '#include "version.h"' >>version.c
-+		@echo "const char *build_date = \"`date`\";" >>version.c
-+		@echo "const uint16_t build_number = `cat .version`;" \
-+		  >>version.c
-+
-+# ----- Dependencies ----------------------------------------------------------
-+
-+MKDEP =									\
-+	$(DEPEND) $< |							\
-+	  sed 								\
-+	    -e 's|^$(basename $(notdir $<)).o:|$@:|'			\
-+	    -e '/^\(.*:\)\? */{p;s///;s/ *\\\?$$/ /;s/  */:\n/g;H;}'	\
-+	    -e '$${g;p;}'						\
-+	    -e d >$(basename $@).d;					\
-+	  [ "$${PIPESTATUS[*]}" = "0 0" ] ||				\
-+	  { rm -f $(basename $@).d; exit 1; }
-+
-+%.o:            %.c
-+		$(CC) $(CFLAGS) -Os -c $<
-+		$(MKDEP)
-+
-+-include $(OBJS:.o=.d)
-+
-+# ----- Object file variants --------------------------------------------------
-+
-+app-%.o:	usb/%.c
-+		$(CC) $(CFLAGS) -Os -o $@ -c $<
-+		$(MKDEP)
-+
-+boot-%.o:	usb/%.c
-+		$(CC) $(CFLAGS) -DBOOT_LOADER -Os -o $@ -c $<
-+		$(MKDEP)
-+
-+# ----- Distribution ----------------------------------------------------------
-+
-+BINDIST_BASE=http://downloads.qi-hardware.com/people/werner/wpan/bindist
-+ATUSB_BIN_NAME=atusb-`git rev-parse HEAD | cut -c 1-7`.bin
-+
-+bindist:
-+		qippl atusb.bin wpan/bindist/$(ATUSB_BIN_NAME)
-+		@echo $(BINDIST_BASE)/$(ATUSB_BIN_NAME)
-+		@echo md5sum: `md5sum atusb.bin | sed 's/ .*//'`
-+		@echo atrf-id: \
-+		  `sed '/.*number = \(.*\);/s//#\1/p;d' version.c` \
-+		  `sed '/.*date = "\(.*\)";/s//\1/p;d' version.c`
-+
-+# ----- Programming and device control ----------------------------------------
-+
-+upload:		$(NAME).bin boot.hex
-+		scp $(NAME).bin boot.hex $(HOST):
-+
-+# lfuse: external clock, slow start-up
-+# hfuse: 4 kB boot loader, reset into boot loader
-+# lock: allow everything but SPM to the boot loader
-+#       Note: when trying to program 0xef, we get back 0x2f, failing
-+#	      verification. So we just program 0x2f.
-+
-+prog-app:
-+		ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \
-+		  -U flash:w:atusb.bin:r \
-+		  -U lfuse:w:0x60:m
-+
-+prog:
-+		ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \
-+		  -U flash:w:boot.hex:i \
-+		  -U lfuse:w:0x60:m \
-+		  -U hfuse:w:0xd8:m \
-+		  -U lock:w:0x2f:m
-+
-+prog-read:
-+		ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb \
-+		  -U flash:r:mcu.bin:r
-+
-+dfu:		$(NAME).dfu
-+		dfu-util -d $(USB_ID) -D $(NAME).dfu
-+
-+update:		$(NAME).bin
-+		-atrf-reset -a
-+		usbwait -r -i 0.01 -t 5 $(USB_ID)
-+		$(MAKE) dfu
-+
-+on:
-+		ssh $(HOST) poke 0x10010318 4
-+
-+off:
-+		ssh $(HOST) poke 0x10010314 4
-+
-+reset:
-+		ssh $(HOST) poke 0x10010318 2048
-+		ssh $(HOST) poke 0x10010314 2048
-diff --git a/atusb/README b/atusb/README
-new file mode 100644
-index 0000000..99ceb22
---- /dev/null
-+++ b/atusb/README
-@@ -0,0 +1,94 @@
-+Requires a very recent toolchain, because ATmega32U2 is relatively new.
-+
-+- Building:
-+
-+  make
-+
-+- Uploading the firmware to a Ben (for flashing with the atusb-pgm cable):
-+
-+  make HOST=<hostname> upload
-+
-+  Example:
-+
-+  make HOST=ben upload
-+
-+  HOST defaults to "jlime".
-+
-+- Flashing the boot loader:
-+
-+  Prerequisite: avrdude on the Ben.
-+
-+  Disconnect the atusb board from USB. Insert the atusb-pgm connector into
-+  the Ben. Place the atusb-pgm adapter on the exposed contact pads of the
-+  atusb board and push it down. Then run
-+
-+  make prog
-+
-+  This takes about 30 seconds. If the programming fails with an error
-+  message like "Yikes!  Invalid device signature.", verify that the
-+  atusb-pgm board is properly connected and placed, then try again.
-+
-+- Uploading the application:
-+
-+  Prerequisite: dfu-util installed on the PC.
-+
-+  Insert atusb into the PC, then run
-+
-+  make dfu
-+
-+  Note: since the boot loader resets the USB bus after timing out,
-+  this operation can fail with a message like "No DFU capable USB device
-+  found". Just retry, and it will eventually get through.
-+
-+
-+HULUSB notes:
-+-------------
-+To prepare and flash the firmware on a HULUSB device some additional steps are
-+needed;
-+
-+avr-objcopy -O ihex -R .signature -R .fuse -R .eeprom hulusb.elf hulusb.hex
-+dfu-programmer at90usb1287 flash hulusb.hex
-+dfu-programmer at90usb1287 reset
-+
-+--------------------------
-+
-+Making the toolchain:
-+
-+# patches according to
-+# http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=789527
-+
-+# some gcc prerequisites
-+
-+apt-get remove avr-libc gcc-avr binutils-avr
-+apt-get install libmpfr-dev libmpc-dev
-+
-+# binutils
-+
-+wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.tar.bz2
-+tar xfj binutils-2.21.tar.bz2 
-+cd binutils-2.21
-+./configure --target=avr --disable-nls
-+make
-+make install
-+
-+# gcc
-+
-+wget http://ftpmirror.gnu.org/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2
-+wget -O gcc_452_avr.patch http://gcc.gnu.org/bugzilla/attachment.cgi?id=23050
-+tar xfj gcc-4.5.2.tar.bz2
-+cd gcc-4.5.2
-+patch -p1 -s <../gcc_452_avr.patch
-+mkdir obj-avr
-+cd obj-avr
-+../configure --target=avr --enable-languages=c \
-+    --disable-nls --disable-libssp --with-dwarf2
-+make
-+make install
-+
-+wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.7.1.tar.bz2
-+tar xfj avr-libc-1.7.1.tar.bz2 
-+cd avr-libc-1.7.1
-+./bootstrap	# the automake at the end takes a while
-+./configure --build=`./config.guess` --host=avr
-+make
-+make install
-diff --git a/atusb/an/README b/atusb/an/README
-new file mode 100644
-index 0000000..8e0d2fc
---- /dev/null
-+++ b/atusb/an/README
-@@ -0,0 +1,25 @@
-+workflow:
-+
-+- connect zprobe (note: it currently inverts because it didn't have any
-+  other chips around. this may change later.)
-+
-+- capture the USB signals at an interesting moment with a sample rate of
-+  50 MSa/s
-+
-+- zoom into the frame(s) of interest
-+
-+- download the data with
-+  ./get.py
-+
-+- decode with
-+  ./dec.py
-+
-+  For manual decoding, set the coders to D+ and D- (we need D- for SE0
-+  and SE1 detection), then click on a rising clock edge left of the
-+  packet and move the cursor to the right.
-+
-+- if there are problems with the clock, the analog signal and digital
-+  signals derived from it can be examined after running dec.py with
-+  ./plot
-+
-+  (Note that the digital zprobe hides any analog anomalies.)
-diff --git a/atusb/an/dec.py b/atusb/an/dec.py
-new file mode 100755
-index 0000000..8534857
---- /dev/null
-+++ b/atusb/an/dec.py
-@@ -0,0 +1,127 @@
-+#!/usr/bin/python
-+
-+from tmc.wave import *
-+from tmc.dxplore import dxplore
-+from tmc.decode import d_usb_stream
-+
-+
-+#
-+# Clock recovery: we assume that each change in the wave is triggered by a
-+# clock edge. We know the clock's nominal period and resynchronize on each
-+# edge. Additionally, we can obtain a list of times when a timing violation
-+# has occurred.
-+#
-+# Note that the timing violations logic doesn't make much sense in its present
-+# form, since it mainly measures noise (particularly if we're digitizing slow
-+# edges) and not clock drift.
-+#
-+# A more useful metric would be accumulated error from some point of reference
-+# or at least the timing of same edges, to eliminate (generally harmless) time
-+# offsets introduced by digitizing.
-+#
-+# So it would probably make more sense for "recover" not to check for timing
-+# violations at all, and leave this to more specialized functions.
-+#
-+def recover(self, period, min = None, max = None, t0 = None):
-+    if t0 is None:
-+	t0 = self.data[0]
-+    v = not self.initial
-+    res = []
-+    violations = []
-+    for t in self.data:
-+	v = not v
-+	if t <= t0:
-+	    continue
-+	n = 0
-+	while t0 < t-period/2:
-+	    res.append(t0)
-+	    t0 += period
-+	    n += 1
-+	if min is not None:
-+	    if t0-t > n*min:
-+		violations.append(t)
-+	if max is not None:
-+	    if t-t0 > n*max:
-+		violations.append(t)
-+	t0 = t
-+    return res, violations
-+
-+
-+#
-+# Load the analog waves saved by get.py
-+#
-+wv = waves()
-+wv.load("_wv")
-+
-+#
-+# Digitize the waves and save the result.
-+#
-+dp = wv[0].digitize(1.5, 1.8)
-+dm = wv[1].digitize(1.5, 1.8)
-+wv = waves(dp, dm, dp-dm)
-+wv.save("_dig")
-+
-+#
-+# Also record the differential signal.
-+#
-+wd = wv[1]-wv[0]
-+dd = wd.digitize(-0.5, 0.5)
-+wd.save("_diff")
-+
-+#
-+# Run clock recovery on D+/D-. We only need one, but check both to be sure.
-+#
-+#p = 1/1.5e6
-+p = 1/12e6
-+dp_t, viol = recover(dp, p, p*0.9, p*1.1)
-+print viol
-+dm_t, viol = recover(dm, p, p*.9, p*1.1, t0 = dp.data[0])
-+print viol
-+
-+#
-+# Shift the clock by half a period, add a few periods to get steady state and
-+# SE0s (if any), and then sample the data lines.
-+#
-+clk = map(lambda t: t+p/2, dp_t)
-+clk.extend((clk[-1]+p, clk[-1]+2*p, clk[-1]+3*p))
-+dp_bv = dp.get(clk)
-+dm_bv = dm.get(clk)
-+
-+#
-+# Save a wave with the recovered clock to make it easier to find the bits in
-+# analog graphs.
-+#
-+dd.data = dp_t;
-+dd.save("_clk")
-+
-+#
-+# For decoding, we need a fake bit clock. We generate it by doubling each data
-+# bit and generating a L->H transition during this bit.
-+#
-+dpd = []
-+dmd = []
-+dck = []
-+
-+# err, silly, seems that we've mixed up D+ and D- all over the place :-)
-+print d_usb_stream(dm_bv[:], dp_bv[:])
-+
-+for v in dp_bv:
-+    dpd.append(v)
-+    dpd.append(v)
-+    dck.append(0)
-+    dck.append(1)
-+
-+for v in dm_bv:
-+    dmd.append(v)
-+    dmd.append(v)
-+
-+#
-+# Display the reconstructed digital signal. Note that the absolute time is only
-+# correct at the beginning and that relative time is only accurate over
-+# intervals in which no significant clock resynchronization has occurred.
-+#
-+# In fact, dxplore should probably have an option to either turn off time
-+# entirely or to display a user-provided time axis. The latter may be a bit
-+# tricky to implement.
-+#
-+dxplore((dmd, dpd, dck), 0, p/2, labels = ("D+", "D-", "CLK"))
-diff --git a/atusb/an/get.py b/atusb/an/get.py
-new file mode 100755
-index 0000000..685e00f
---- /dev/null
-+++ b/atusb/an/get.py
-@@ -0,0 +1,31 @@
-+#!/usr/bin/python
-+
-+from tmc.scope import rigol_ds1000c
-+
-+#-800, +1600
-+s = rigol_ds1000c()
-+#s.debug = False
-+
-+pos = s.hor.pos
-+scale = s.hor.scale
-+t0 = pos-scale*s.div_hor/2
-+t1 = pos+scale*s.div_hor/2
-+print t0, t1
-+
-+#zoom = 10
-+#step = scale/s.samples_per_div/zoom
-+#print step
-+step = 4e-9
-+step = 2e-9
-+
-+w = s.wave((s.ch[0], s.ch[1]), start = t0, end = t1, step = step)
-+w[0] = 3.3-w[0]
-+w[1] = 3.3-w[1]
-+
-+s.hor.pos = pos
-+s.hor.scale = scale
-+
-+w[0].label = "D+";
-+w[1].label = "D-";
-+
-+w.save("_wv")
-diff --git a/atusb/an/plot b/atusb/an/plot
-new file mode 100755
-index 0000000..1dea789
---- /dev/null
-+++ b/atusb/an/plot
-@@ -0,0 +1,12 @@
-+#!/bin/sh
-+#
-+# Plot output of "dec"
-+#
-+gnuplot -persist <<EOF
-+set style data lines
-+plot "_wv" using 1:(\$2-4), \
-+  "_dig" using 1:(\$2*3.3-4) lw 2, \
-+  "_wv" using 1:3, \
-+  "_dig" using 1:(\$3*3.3) lw 2, \
-+  "_clk" using 1:(\$2+1) lt 7
-+EOF
-diff --git a/atusb/atusb.c b/atusb/atusb.c
-new file mode 100644
-index 0000000..28faf40
---- /dev/null
-+++ b/atusb/atusb.c
-@@ -0,0 +1,63 @@
-+/*
-+ * fw/atusb.c - ATUSB initialization and main loop
-+ *
-+ * Written 2008-2011 by Werner Almesberger
-+ * Copyright 2008-2011 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/sleep.h>
-+#include <avr/interrupt.h>
-+
-+#include "usb.h"
-+
-+#include "board.h"
-+#include "sernum.h"
-+#include "spi.h"
-+#include "atusb/ep0.h"
-+
-+#ifdef DEBUG
-+#include "uart.h"
-+#endif
-+
-+
-+int main(void)
-+{
-+	board_init();
-+	board_app_init();
-+	reset_rf();
-+
-+	user_get_descriptor = sernum_get_descr;
-+
-+	/* now we should be at 8 MHz */
-+
-+#ifdef DEBUG
-+	uart_init();
-+	static FILE atben_stdout = FDEV_SETUP_STREAM(uart_write_char, NULL,
-+						     _FDEV_SETUP_WRITE);
-+	stdout = &atben_stdout;
-+#endif
-+
-+	usb_init();
-+	ep0_init();
-+#ifdef ATUSB
-+	timer_init();
-+
-+	/* move interrupt vectors to 0 */
-+	MCUCR = 1 << IVCE;
-+	MCUCR = 0;
-+#endif
-+
-+	sei();
-+
-+	while (1)
-+		sleep_mode();
-+}
-diff --git a/atusb/board.c b/atusb/board.c
-new file mode 100644
-index 0000000..c3b8d26
---- /dev/null
-+++ b/atusb/board.c
-@@ -0,0 +1,120 @@
-+/*
-+ * fw/board.c - Board-specific functions (for boot loader and application)
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include <avr/boot.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "at86rf230.h"
-+#include "board.h"
-+#include "spi.h"
-+
-+
-+uint8_t board_sernum[42] = { 42, USB_DT_STRING };
-+
-+/* ----- Register access --------------------------------------------------- */
-+
-+void change_state(uint8_t new)
-+{
-+	while ((reg_read(REG_TRX_STATUS) & TRX_STATUS_MASK) ==
-+		TRX_STATUS_TRANSITION);
-+	reg_write(REG_TRX_STATE, new);
-+}
-+
-+
-+uint8_t reg_read(uint8_t reg)
-+{
-+	uint8_t value;
-+
-+	spi_begin();
-+	spi_send(AT86RF230_REG_READ | reg);
-+	value = spi_recv();
-+	spi_end();
-+
-+	return value;
-+}
-+
-+
-+uint8_t subreg_read(uint8_t address, uint8_t mask, uint8_t position)
-+{
-+	/* Read current register value and mask out subregister. */
-+	uint8_t register_value = reg_read(address);
-+	register_value &= mask;
-+	register_value >>= position; /* Align subregister value. */
-+
-+	return register_value;
-+}
-+
-+
-+void reg_write(uint8_t reg, uint8_t value)
-+{
-+	spi_begin();
-+	spi_send(AT86RF230_REG_WRITE | reg);
-+	spi_send(value);
-+	spi_end();
-+}
-+
-+
-+void subreg_write(uint8_t address, uint8_t mask, uint8_t position, uint8_t value)
-+{
-+	/* Read current register value and mask area outside the subregister. */
-+	uint8_t register_value = reg_read(address);
-+	register_value &= ~mask;
-+
-+	/* Start preparing the new subregister value. shift in place and mask. */
-+	value <<= position;
-+	value &= mask;
-+
-+	value |= register_value; /* Set the new subregister value. */
-+
-+	/* Write the modified register value. */
-+	reg_write(address, value);
-+}
-+
-+
-+void panic(void)
-+{
-+	cli();
-+	while (1) {
-+		SET(LED);
-+		_delay_ms(100);
-+		CLR(LED);
-+		_delay_ms(100);
-+	}
-+}
-+
-+
-+static char hex(uint8_t nibble)
-+{
-+	return nibble < 10 ? '0'+nibble : 'a'+nibble-10;
-+}
-+
-+
-+void get_sernum(void)
-+{
-+	uint8_t sig;
-+	uint8_t i;
-+
-+	for (i = 0; i != 10; i++) {
-+		sig = boot_signature_byte_get(i+0xe);
-+		board_sernum[(i << 2)+2] = hex(sig >> 4);
-+		board_sernum[(i << 2)+4] = hex(sig & 0xf);
-+	}
-+}
-diff --git a/atusb/board.h b/atusb/board.h
-new file mode 100644
-index 0000000..dbcd410
---- /dev/null
-+++ b/atusb/board.h
-@@ -0,0 +1,95 @@
-+/*
-+ * fw/board.h - Board-specific functions and definitions
-+ *
-+ * Written 2008-2011, 2013, 2013 by Werner Almesberger
-+ * Copyright 2008-2011, 2013, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+#ifndef BOARD_H
-+#define	BOARD_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <atusb/atusb.h>
-+
-+#ifdef ATUSB
-+#include "board_atusb.h"
-+#endif
-+#ifdef RZUSB
-+#include "board_rzusb.h"
-+#endif
-+#ifdef HULUSB
-+#include "board_hulusb.h"
-+#endif
-+
-+#define	SET_2(p, b)	PORT##p |= 1 << (b)
-+#define	CLR_2(p, b)	PORT##p &= ~(1 << (b))
-+#define	IN_2(p, b)	DDR##p &= ~(1 << (b))
-+#define	OUT_2(p, b)	DDR##p |= 1 << (b)
-+#define	PIN_2(p, b)	((PIN##p >> (b)) & 1)
-+
-+#define	SET_1(p, b)	SET_2(p, b)
-+#define	CLR_1(p, b)	CLR_2(p, b)
-+#define	IN_1(p, b)	IN_2(p, b)
-+#define	OUT_1(p, b)	OUT_2(p, b)
-+#define	PIN_1(p, b)	PIN_2(p, b)
-+
-+#define	SET(n)		SET_1(n##_PORT, n##_BIT)
-+#define	CLR(n)		CLR_1(n##_PORT, n##_BIT)
-+#define	IN(n)		IN_1(n##_PORT, n##_BIT)
-+#define	OUT(n)		OUT_1(n##_PORT, n##_BIT)
-+#define	PIN(n)		PIN_1(n##_PORT, n##_BIT)
-+
-+
-+#define	USB_VENDOR	ATUSB_VENDOR_ID
-+#define	USB_PRODUCT	ATUSB_PRODUCT_ID
-+
-+#define	DFU_USB_VENDOR	USB_VENDOR
-+#define	DFU_USB_PRODUCT	USB_PRODUCT
-+
-+
-+#define	BOARD_MAX_mA	40
-+
-+#ifdef BOOT_LOADER
-+#define	NUM_EPS	1
-+#else
-+#define	NUM_EPS	2
-+#endif
-+
-+#define	HAS_BOARD_SERNUM
-+
-+extern uint8_t board_sernum[42];
-+extern uint8_t irq_serial;
-+
-+
-+void reset_rf(void);
-+void reset_cpu(void);
-+uint8_t read_irq(void);
-+void slp_tr(void);
-+
-+void led(bool on);
-+void panic(void);
-+
-+uint64_t timer_read(void);
-+void timer_init(void);
-+
-+bool gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res);
-+void gpio_cleanup(void);
-+
-+void get_sernum(void);
-+
-+void board_app_init(void);
-+
-+uint8_t reg_read(uint8_t reg);
-+uint8_t subreg_read(uint8_t address, uint8_t mask, uint8_t position);
-+void reg_write(uint8_t reg, uint8_t value);
-+void subreg_write(uint8_t address, uint8_t mask, uint8_t position, uint8_t value);
-+void change_state(uint8_t new);
-+
-+#endif /* !BOARD_H */
-diff --git a/atusb/board_app.c b/atusb/board_app.c
-new file mode 100644
-index 0000000..1fa9bf4
---- /dev/null
-+++ b/atusb/board_app.c
-@@ -0,0 +1,173 @@
-+/*
-+ * fw/board_app.c - Board-specific functions (for the application)
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stddef.h>
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "at86rf230.h"
-+#include "spi.h"
-+#include "mac.h"
-+#include "board.h"
-+
-+
-+static volatile uint32_t timer_h = 0;	/* 2^(16+32) / 8 MHz = ~1.1 years */
-+
-+
-+void reset_cpu(void)
-+{
-+	WDTCSR = 1 << WDE;
-+}
-+
-+
-+uint8_t read_irq(void)
-+{
-+	return PIN(IRQ_RF);
-+}
-+
-+
-+void slp_tr(void)
-+{
-+	SET(SLP_TR);
-+	CLR(SLP_TR);
-+}
-+
-+
-+ISR(TIMER1_OVF_vect)
-+{
-+	timer_h++;
-+}
-+
-+
-+uint64_t timer_read(void)
-+{
-+	uint32_t high;
-+	uint8_t low, mid;
-+
-+	do {
-+		if (TIFR1 & (1 << TOV1)) {
-+			TIFR1 = 1 << TOV1;
-+			timer_h++;
-+		}
-+		high = timer_h;
-+		low = TCNT1L;
-+		mid = TCNT1H;
-+	}
-+	while (TIFR1 & (1 << TOV1));
-+
-+	/*
-+	 * We need all these casts because the intermediate results are handled
-+	 * as if they were signed and thus get sign-expanded. Sounds wrong-ish.
-+	 */
-+	return (uint64_t) high << 16 | (uint64_t) mid << 8 | (uint64_t) low;
-+}
-+
-+
-+void timer_init(void)
-+{
-+	/* configure timer 1 as a free-running CLK counter */
-+
-+	TCCR1A = 0;
-+	TCCR1B = 1 << CS10;
-+
-+	/* enable timer overflow interrupt */
-+
-+	TIMSK1 = 1 << TOIE1;
-+}
-+
-+
-+bool gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res)
-+{
-+	EIMSK = 0; /* recover INT_RF to ATUSB_GPIO_CLEANUP or an MCU reset */
-+
-+	switch (port) {
-+	case 1:
-+		DDRB = (DDRB & ~mask) | dir;
-+		PORTB = (PORTB & ~mask) | data;
-+		break;
-+	case 2:
-+		DDRC = (DDRC & ~mask) | dir;
-+		PORTC = (PORTC & ~mask) | data;
-+		break;
-+	case 3:
-+		DDRD = (DDRD & ~mask) | dir;
-+		PORTD = (PORTD & ~mask) | data;
-+		break;
-+	default:
-+		return 0;
-+	}
-+
-+	/* disable the UART so that we can meddle with these pins as well. */
-+	spi_off();
-+	_delay_ms(1);
-+
-+	switch (port) {
-+	case 1:
-+		res[0] = PINB;
-+		res[1] = PORTB;
-+		res[2] = DDRB;
-+		break;
-+	case 2:
-+		res[0] = PINC;
-+		res[1] = PORTC;
-+		res[2] = DDRC;
-+		break;
-+	case 3:
-+		res[0] = PIND;
-+		res[1] = PORTD;
-+		res[2] = DDRD;
-+		break;
-+	}
-+
-+	return 1;
-+}
-+
-+
-+void gpio_cleanup(void)
-+{
-+	EIMSK = 1 << 0;
-+}
-+
-+
-+static void done(void *user)
-+{
-+	led(0);
-+}
-+
-+
-+uint8_t irq_serial;
-+
-+#if defined(ATUSB) || defined(HULUSB)
-+ISR(INT0_vect)
-+#endif
-+#ifdef RZUSB
-+ISR(TIMER1_CAPT_vect)
-+#endif
-+{
-+	if (mac_irq) {
-+		if (mac_irq())
-+			return;
-+	}
-+	if (eps[1].state == EP_IDLE) {
-+		led(1);
-+		irq_serial = (irq_serial+1) | 0x80;
-+		usb_send(&eps[1], &irq_serial, 1, done, NULL);
-+	}
-+}
-diff --git a/atusb/board_atusb.c b/atusb/board_atusb.c
-new file mode 100644
-index 0000000..a02fb7f
---- /dev/null
-+++ b/atusb/board_atusb.c
-@@ -0,0 +1,162 @@
-+/*
-+ * fw/board_atusb.c - ATUSB Board-specific functions (for boot loader and application)
-+ *
-+ * Written 2016 by Stefan Schmidt
-+ * Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include <avr/boot.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "at86rf230.h"
-+#include "board.h"
-+#include "spi.h"
-+#include "usb/usb.h"
-+
-+static bool spi_initialized = 0;
-+
-+void reset_rf(void)
-+{
-+	/* set up all the outputs; default port value is 0 */
-+
-+	DDRB = 0;
-+	DDRC = 0;
-+	DDRD = 0;
-+	PORTB = 0;
-+	PORTC = 0;
-+	PORTD = 0;
-+
-+	OUT(LED);
-+	OUT(nRST_RF);   /* this also resets the transceiver */
-+	OUT(SLP_TR);
-+
-+	spi_init();
-+
-+	/* AT86RF231 data sheet, 12.4.13, reset pulse width: 625 ns (min) */
-+
-+	CLR(nRST_RF);
-+	_delay_us(2);
-+	SET(nRST_RF);
-+
-+	/* 12.4.14: SPI access latency after reset: 625 ns (min) */
-+
-+	_delay_us(2);
-+
-+	/* we must restore TRX_CTRL_0 after each reset (9.6.4) */
-+
-+	set_clkm();
-+}
-+
-+void led(bool on)
-+{
-+	if (on)
-+		SET(LED);
-+	else
-+		CLR(LED);
-+}
-+
-+void set_clkm(void)
-+{
-+	/* switch CLKM to 8 MHz */
-+
-+	/*
-+	 * @@@ Note: Atmel advise against changing the external clock in
-+	 * mid-flight. We should therefore switch to the RC clock first, then
-+	 * crank up the external clock, and finally switch back to the external
-+	 * clock. The clock switching procedure is described in the ATmega32U2
-+	 * data sheet in secton 8.2.2.
-+	 */
-+	spi_begin();
-+	spi_send(AT86RF230_REG_WRITE | REG_TRX_CTRL_0);
-+	spi_send(CLKM_CTRL_8MHz);
-+	spi_end();
-+}
-+
-+void board_init(void)
-+{
-+	/* Disable the watchdog timer */
-+
-+	MCUSR = 0;		/* Remove override */
-+	WDTCSR |= 1 << WDCE;	/* Enable change */
-+	WDTCSR = 1 << WDCE;	/* Disable watchdog while still enabling
-+				   change */
-+
-+	CLKPR = 1 << CLKPCE;
-+	/* We start with a 1 MHz/8 clock. Disable the prescaler. */
-+	CLKPR = 0;
-+
-+	get_sernum();
-+}
-+
-+void spi_begin(void)
-+{
-+	if (!spi_initialized)
-+		spi_init();
-+	CLR(nSS);
-+}
-+
-+void spi_off(void)
-+{
-+	spi_initialized = 0;
-+	UCSR1B = 0;
-+}
-+
-+void spi_init(void)
-+{
-+	SET(nSS);
-+	OUT(SCLK);
-+	OUT(MOSI);
-+	OUT(nSS);
-+	IN(MISO);
-+
-+	UBRR1 = 0;	/* set bit rate to zero to begin */
-+	UCSR1C = 1 << UMSEL11 | 1 << UMSEL10;
-+			/* set MSPI, MSB first, SPI data mode 0 */
-+	UCSR1B = 1 << RXEN1 | 1 << TXEN1;
-+			/* enable receiver and transmitter */
-+	UBRR1 = 0;	/* reconfirm the bit rate */
-+
-+	spi_initialized = 1;
-+}
-+
-+void usb_init(void)
-+{
-+	USBCON |= 1 << FRZCLK;		/* freeze the clock */
-+
-+	/* enable the PLL and wait for it to lock */
-+	PLLCSR &= ~(1 << PLLP2 | 1 << PLLP1 | 1 << PLLP0);
-+	PLLCSR |= 1 << PLLE;
-+	while (!(PLLCSR & (1 << PLOCK)));
-+
-+	USBCON &= ~(1 << USBE);		/* reset the controller */
-+	USBCON |= 1 << USBE;
-+
-+	USBCON &= ~(1 << FRZCLK);	/* thaw the clock */
-+
-+	UDCON &= ~(1 << DETACH);	/* attach the pull-up */
-+	UDIEN = 1 << EORSTE;		/* enable device interrupts  */
-+//	UDCON |= 1 << RSTCPU;		/* reset CPU on bus reset */
-+
-+	ep_init();
-+}
-+
-+void board_app_init(void)
-+{
-+	/* enable INT0, trigger on rising edge */
-+	EICRA = 1 << ISC01 | 1 << ISC00;
-+	EIMSK = 1 << 0;
-+}
-diff --git a/atusb/board_atusb.h b/atusb/board_atusb.h
-new file mode 100644
-index 0000000..e5974c7
---- /dev/null
-+++ b/atusb/board_atusb.h
-@@ -0,0 +1,48 @@
-+/*
-+ * fw/board_atusb.h - ATUSB Board-specific functions and definitions
-+ *
-+ * Written 2016 by Stefan Schmidt
-+ * Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+#ifndef BOARD_ATUSB_H
-+#define	BOARD_ATUSB_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#define	LED_PORT	B
-+#define	LED_BIT		  6
-+#define	nRST_RF_PORT	C
-+#define	nRST_RF_BIT	  7
-+#define	SLP_TR_PORT	B
-+#define	SLP_TR_BIT	  4
-+
-+#define SCLK_PORT	D
-+#define SCLK_BIT	  5
-+#define	MOSI_PORT	D
-+#define	MOSI_BIT	  3
-+
-+#define	MISO_PORT	D
-+#define	MISO_BIT	  2
-+#define	nSS_PORT	D
-+#define	nSS_BIT		  1
-+#define	IRQ_RF_PORT	D
-+#define	IRQ_RF_BIT	  0
-+
-+#define SPI_WAIT_DONE()	while (!(UCSR1A & 1 << RXC1))
-+#define SPI_DATA	UDR1
-+
-+void set_clkm(void);
-+void board_init(void);
-+
-+void spi_begin(void);
-+void spi_off(void);
-+void spi_init(void);
-+
-+#endif /* !BOARD_H */
-diff --git a/atusb/board_hulusb.c b/atusb/board_hulusb.c
-new file mode 100644
-index 0000000..084714e
---- /dev/null
-+++ b/atusb/board_hulusb.c
-@@ -0,0 +1,179 @@
-+/*
-+ * fw/board_hulusb.c - Busware HUL Board-specific functions (for boot loader and application)
-+ *
-+ * Written 2017 by Filzmaier Josef
-+ * Based on fw/board_rzusb written and Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include <avr/boot.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "at86rf230.h"
-+#include "board.h"
-+#include "spi.h"
-+#include "usb/usb.h"
-+
-+static bool spi_initialized = 0;
-+
-+void reset_rf(void)
-+{
-+	/* set up all the outputs; default port value is 0 */
-+
-+	DDRB = 0;
-+	DDRC = 0;
-+	DDRD = 0;
-+	PORTB = 0;
-+	PORTC = 0;
-+	PORTD = 0;
-+
-+	OUT(LED_RED);
-+	OUT(LED_GREEN);
-+	SET(LED_RED); /* Leds are active low on HULUSB board */
-+	CLR(LED_GREEN); /* Green Led indicates the dongle is running */
-+	OUT(nRST_RF);   /* this also resets the transceiver */
-+	OUT(SLP_TR);
-+
-+	spi_init();
-+
-+	/* AT86RF212 data sheet, Appendix B, p166 Power-On Reset procedure */
-+	/*-----------------------------------------------------------------*/
-+	CLR(SLP_TR);
-+	SET(nRST_RF);
-+	SET(nSS);
-+	_delay_us(400);
-+
-+	CLR(nRST_RF);
-+	_delay_us(2);
-+	SET(nRST_RF);
-+
-+	/* 5.1.4.5: Wait t10: 625 ns (min) */
-+
-+	_delay_us(2);
-+
-+	reg_write(REG_TRX_CTRL_0, 0x19);
-+
-+	change_state(TRX_CMD_FORCE_TRX_OFF);
-+	/*-----------------------------------------------------------------*/
-+
-+	/* we must restore TRX_CTRL_0 after each reset (7.7.4) */
-+
-+	set_clkm();
-+}
-+
-+void led_red(bool on) {
-+	if (on)
-+		CLR(LED_RED);
-+	else
-+		SET(LED_RED);
-+}
-+
-+void led_green(bool on) {
-+	if (on)
-+		CLR(LED_GREEN);
-+	else
-+		SET(LED_GREEN);
-+}
-+
-+void led(bool on)
-+{
-+	led_red(on);
-+}
-+
-+void set_clkm(void)
-+{
-+	/* CLKM is not connected on BUSWARE HUL and therefore it is running in
-+	 * async mode. */
-+	reg_write(REG_TRX_CTRL_0, 0x00);
-+
-+	/* TX_AUTO_CRC_ON, default disabled */
-+	subreg_write(SR_TX_AUTO_CRC_ON, 1);
-+}
-+
-+void board_init(void)
-+{
-+	/* Disable the watchdog timer */
-+
-+	MCUSR = 0;		/* Remove override */
-+	WDTCSR |= 1 << WDCE;	/* Enable change */
-+	WDTCSR = 1 << WDCE;	/* Disable watchdog while still enabling
-+	change */
-+
-+	CLKPR = 1 << CLKPCE;
-+	/* We start with a 16 MHz/8 clock. Put the prescaler to 2. */
-+	CLKPR = 1 << CLKPS0;
-+
-+	get_sernum();
-+}
-+
-+void spi_begin(void)
-+{
-+	if (!spi_initialized)
-+		spi_init();
-+	CLR(nSS);
-+}
-+
-+void spi_off(void)
-+{
-+	spi_initialized = 0;
-+	SPCR &= ~(1 << SPE);
-+}
-+
-+void spi_init(void)
-+{
-+	SET(nSS);
-+	OUT(SCLK);
-+	OUT(MOSI);
-+	OUT(nSS);
-+	IN(MISO);
-+
-+	SPCR = (1 << SPE) | (1 << MSTR);
-+	SPSR = (1 << SPI2X);
-+
-+	spi_initialized = 1;
-+}
-+
-+void usb_init(void)
-+{
-+	USBCON |= 1 << FRZCLK;		/* freeze the clock */
-+
-+	/* enable the PLL and wait for it to lock */
-+	/* TODO sheet page 50 For Atmel AT90USB128x only. Do not use with Atmel AT90USB64x. */
-+	/*  FOR 8 XTAL Mhz only!!! */
-+	PLLCSR = ((1 << PLLP1) | (1 << PLLP0));
-+	PLLCSR |= 1 << PLLE;
-+	while (!(PLLCSR & (1 << PLOCK)));
-+
-+	UHWCON |= (1 << UVREGE);
-+
-+	USBCON &= ~((1 << USBE) | (1 << OTGPADE));		/* reset the controller */
-+	USBCON |= ((1 << USBE) | (1 << OTGPADE));
-+
-+	USBCON &= ~(1 << FRZCLK);	/* thaw the clock */
-+
-+	UDCON &= ~(1 << DETACH);	/* attach the pull-up */
-+	UDIEN = 1 << EORSTE;		/* enable device interrupts  */
-+	//	UDCON |= 1 << RSTCPU;		/* reset CPU on bus reset */
-+
-+	ep_init();
-+}
-+
-+void board_app_init(void)
-+{
-+	/* enable INT0, trigger on rising edge */
-+	EICRA = 1 << ISC01 | 1 << ISC00;
-+	EIMSK = 1 << INT0;
-+}
-diff --git a/atusb/board_hulusb.h b/atusb/board_hulusb.h
-new file mode 100644
-index 0000000..a1dadf0
---- /dev/null
-+++ b/atusb/board_hulusb.h
-@@ -0,0 +1,66 @@
-+/*
-+ * fw/board_hulusb.h - Busware HUL Board-specific functions (for boot loader and application)
-+ *
-+ * Written 2017 by Filzmaier Josef
-+ * Based on fw/board_rzusb written and Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+#ifndef BOARD_HULUSB_H
-+#define	BOARD_HULUSB_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#define LED_RED_PORT		A
-+#define LED_GREEN_PORT		A
-+#define LED_RED_BIT		3
-+#define LED_GREEN_BIT 		4
-+#define LED_PORT		LED_RED_PORT
-+#define LED_BIT		  	LED_RED_BIT
-+
-+#define nRST_RF_PORT		B
-+#define nRST_RF_BIT	  	5
-+#define SLP_TR_PORT		B
-+#define SLP_TR_BIT	  	4
-+
-+#define SCLK_PORT		B
-+#define SCLK_BIT	  	1
-+#define MOSI_PORT		B
-+#define MOSI_BIT	  	2
-+
-+#define MISO_PORT		B
-+#define MISO_BIT	  	3
-+#define nSS_PORT		B
-+#define nSS_BIT		  	0
-+#define IRQ_RF_PORT		D
-+#define IRQ_RF_BIT	  	4
-+
-+#define SR_TX_AUTO_CRC_ON	0x04, 0x20, 5
-+#define SR_CHANNEL		0x08, 0x1f, 0
-+
-+#define RG_CC_CTRL_1		(0x14)
-+
-+#define SPI_WAIT_DONE()	while ((SPSR & (1 << SPIF)) == 0)
-+#define SPI_DATA	SPDR
-+
-+void set_clkm(void);
-+void board_init(void);
-+
-+void led_red(bool on);
-+void led_green(bool on);
-+
-+void spi_begin(void);
-+void spi_off(void);
-+void spi_init(void);
-+
-+#ifdef DEBUG
-+void printStatus(void);
-+#define PRINT_STATUS() printStatus()
-+#endif
-+
-+#endif /* !BOARD_HULUSB_H */
-diff --git a/atusb/board_rzusb.c b/atusb/board_rzusb.c
-new file mode 100644
-index 0000000..e83d6fa
---- /dev/null
-+++ b/atusb/board_rzusb.c
-@@ -0,0 +1,169 @@
-+/*
-+ * fw/board_rzusb.c - RZUSB Board-specific functions (for boot loader and application)
-+ *
-+ * Written 2016 by Stefan Schmidt
-+ * Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include <avr/boot.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "at86rf230.h"
-+#include "board.h"
-+#include "spi.h"
-+#include "usb/usb.h"
-+
-+static bool spi_initialized = 0;
-+
-+void reset_rf(void)
-+{
-+	/* set up all the outputs; default port value is 0 */
-+
-+	DDRB = 0;
-+	DDRC = 0;
-+	DDRD = 0;
-+	PORTB = 0;
-+	PORTC = 0;
-+	PORTD = 0;
-+
-+	OUT(LED);
-+	OUT(nRST_RF);   /* this also resets the transceiver */
-+	OUT(SLP_TR);
-+
-+	spi_init();
-+
-+	/* AT86RF231 data sheet, 12.4.13, reset pulse width: 625 ns (min) */
-+
-+	CLR(nRST_RF);
-+	_delay_us(2);
-+	SET(nRST_RF);
-+
-+	/* 12.4.14: SPI access latency after reset: 625 ns (min) */
-+
-+	_delay_us(2);
-+
-+	/* we must restore TRX_CTRL_0 after each reset (9.6.4) */
-+
-+	set_clkm();
-+}
-+
-+void led(bool on)
-+{
-+	if (on)
-+		SET(LED);
-+	else
-+		CLR(LED);
-+}
-+
-+void set_clkm(void)
-+{
-+	/* switch CLKM to 8 MHz */
-+
-+	/*
-+	 * @@@ Note: Atmel advise against changing the external clock in
-+	 * mid-flight. We should therefore switch to the RC clock first, then
-+	 * crank up the external clock, and finally switch back to the external
-+	 * clock. The clock switching procedure is described in the ATmega32U2
-+	 * data sheet in secton 8.2.2.
-+	 */
-+	spi_begin();
-+	spi_send(AT86RF230_REG_WRITE | REG_TRX_CTRL_0);
-+	spi_send(0x10);
-+	spi_end();
-+
-+	/* TX_AUTO_CRC_ON, default disabled */
-+	spi_begin();
-+	spi_send(AT86RF230_REG_WRITE | 0x05);
-+	spi_send(0x80);
-+	spi_end();
-+}
-+
-+void board_init(void)
-+{
-+	/* Disable the watchdog timer */
-+
-+	MCUSR = 0;		/* Remove override */
-+	WDTCSR |= 1 << WDCE;	/* Enable change */
-+	WDTCSR = 1 << WDCE;	/* Disable watchdog while still enabling
-+				   change */
-+
-+	CLKPR = 1 << CLKPCE;
-+	/* We start with a 16 MHz/8 clock. Put the prescaler to 2. */
-+	CLKPR = 1 << CLKPS0;
-+
-+	get_sernum();
-+}
-+
-+void spi_begin(void)
-+{
-+	if (!spi_initialized)
-+		spi_init();
-+	CLR(nSS);
-+}
-+
-+void spi_off(void)
-+{
-+	spi_initialized = 0;
-+	SPCR &= ~(1 << SPE);
-+}
-+
-+void spi_init(void)
-+{
-+	SET(nSS);
-+	OUT(SCLK);
-+	OUT(MOSI);
-+	OUT(nSS);
-+	IN(MISO);
-+
-+	SPCR = (1 << SPE) | (1 << MSTR);
-+	SPSR = (1 << SPI2X);
-+
-+	spi_initialized = 1;
-+}
-+
-+void usb_init(void)
-+{
-+	USBCON |= 1 << FRZCLK;		/* freeze the clock */
-+
-+	/* enable the PLL and wait for it to lock */
-+	/* TODO sheet page 50 For Atmel AT90USB128x only. Do not use with Atmel AT90USB64x. */
-+	/*  FOR 8 XTAL Mhz only!!! */
-+	PLLCSR = ((1 << PLLP1) | (1 << PLLP0));
-+	PLLCSR |= 1 << PLLE;
-+	while (!(PLLCSR & (1 << PLOCK)));
-+
-+	UHWCON |= (1 << UVREGE);
-+
-+	USBCON &= ~((1 << USBE) | (1 << OTGPADE));		/* reset the controller */
-+	USBCON |= ((1 << USBE) | (1 << OTGPADE));
-+
-+	USBCON &= ~(1 << FRZCLK);	/* thaw the clock */
-+
-+	UDCON &= ~(1 << DETACH);	/* attach the pull-up */
-+	UDIEN = 1 << EORSTE;		/* enable device interrupts  */
-+//	UDCON |= 1 << RSTCPU;		/* reset CPU on bus reset */
-+
-+	ep_init();
-+}
-+
-+void board_app_init(void)
-+{
-+	/* enable timer input capture 1, trigger on rising edge */
-+	TCCR1B = (1 << ICES1);
-+	TIFR1 = (1 << ICF1);
-+	TIMSK1 = (1 << ICIE1);
-+}
-diff --git a/atusb/board_rzusb.h b/atusb/board_rzusb.h
-new file mode 100644
-index 0000000..c2e518f
---- /dev/null
-+++ b/atusb/board_rzusb.h
-@@ -0,0 +1,48 @@
-+/*
-+ * fw/board_rzusb.h - RZUSB Board-specific functions and definitions
-+ *
-+ * Written 2016 by Stefan Schmidt
-+ * Copyright 2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+#ifndef BOARD_RZUSB_H
-+#define	BOARD_RZUSB_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#define	LED_PORT	D
-+#define	LED_BIT		  7
-+#define	nRST_RF_PORT	B
-+#define	nRST_RF_BIT	  5
-+#define	SLP_TR_PORT	B
-+#define	SLP_TR_BIT	  4
-+
-+#define SCLK_PORT	B
-+#define SCLK_BIT	  1
-+#define	MOSI_PORT	B
-+#define	MOSI_BIT	  2
-+
-+#define	MISO_PORT	B
-+#define	MISO_BIT	  3
-+#define	nSS_PORT	B
-+#define	nSS_BIT		  0
-+#define	IRQ_RF_PORT	D
-+#define	IRQ_RF_BIT	  4
-+
-+#define SPI_WAIT_DONE()	while ((SPSR & (1 << SPIF)) == 0)
-+#define SPI_DATA	SPDR
-+
-+void set_clkm(void);
-+void board_init(void);
-+
-+void spi_begin(void);
-+void spi_off(void);
-+void spi_init(void);
-+
-+#endif /* !BOARD_H */
-diff --git a/atusb/boot.c b/atusb/boot.c
-new file mode 100644
-index 0000000..6826ac6
---- /dev/null
-+++ b/atusb/boot.c
-@@ -0,0 +1,77 @@
-+/*
-+ * fw/boot.c - DFU boot loader for ATUSB
-+ *
-+ * Written 2008-2011 by Werner Almesberger
-+ * Copyright 2008-2011 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include <avr/pgmspace.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include "usb.h"
-+#include "dfu.h"
-+
-+#include "board.h"
-+#include "spi.h"
-+#include "atusb/ep0.h"
-+
-+
-+#define	MS_TO_LOOPS(ms) ((uint32_t) (ms)*335)
-+
-+
-+static void (*run_payload)(void) = 0;
-+
-+
-+int main(void)
-+{
-+	/*
-+	 * pgm_read_byte gets cached and there doesn't seem to be any other
-+	 * way to dissuade gcc from doing this.
-+	 */
-+	volatile int zero = 0;
-+	uint32_t loop = 0;
-+
-+	board_init();
-+	reset_rf();
-+
-+	/* now we should be at 8 MHz */
-+
-+	usb_init();
-+	dfu_init();
-+
-+	/* move interrupt vectors to the boot loader */
-+	MCUCR = 1 << IVCE;
-+	MCUCR = 1 << IVSEL;
-+
-+	sei();
-+
-+	led(1);
-+
-+	while (loop != MS_TO_LOOPS(2500)) {
-+		if (dfu.state == dfuIDLE && pgm_read_byte(zero) != 0xff)
-+			loop++;
-+		else
-+			loop = 0;
-+	}
-+
-+	led(0);
-+
-+	cli();
-+
-+	usb_reset();
-+	run_payload();
-+
-+	while (1);	/* not reached */
-+}
-diff --git a/atusb/descr.c b/atusb/descr.c
-new file mode 100644
-index 0000000..f96b0ee
---- /dev/null
-+++ b/atusb/descr.c
-@@ -0,0 +1,104 @@
-+/*
-+ * fw/descr.c - USB descriptors
-+ *
-+ * Written 2008-2011, 2014 by Werner Almesberger
-+ * Copyright 2008-2011, 2014 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include "usb.h"
-+#include "dfu.h"
-+#include "board.h"
-+
-+
-+#define LE(x) ((uint16_t) (x) & 0xff), ((uint16_t) (x) >> 8)
-+
-+/*
-+ * Device descriptor
-+ */
-+
-+const uint8_t device_descriptor[18] = {
-+	18,			/* bLength */
-+	USB_DT_DEVICE,		/* bDescriptorType */
-+	LE(0x200),		/* bcdUSB */
-+	USB_CLASS_VENDOR_SPEC,	/* bDeviceClass */
-+	0x00,			/* bDeviceSubClass */
-+	0x00,			/* bDeviceProtocol */
-+	EP0_SIZE,		/* bMaxPacketSize */
-+	LE(USB_VENDOR),		/* idVendor */
-+	LE(USB_PRODUCT),	/* idProduct */
-+	LE(0x0001),		/* bcdDevice */
-+	0,			/* iManufacturer */
-+	0,			/* iProduct */
-+#ifdef HAS_BOARD_SERNUM
-+	1,			/* iSerialNumber */
-+#else
-+	0,			/* iSerialNumber */
-+#endif
-+	1			/* bNumConfigurations */
-+};
-+
-+
-+/*
-+ * Our configuration
-+ *
-+ * We're always bus-powered.
-+ */
-+
-+const uint8_t config_descriptor[] = {
-+	9,			/* bLength */
-+	USB_DT_CONFIG,		/* bDescriptorType */
-+#if 0
-+	LE(9+9+7+7),		/* wTotalLength */
-+#else
-+	LE(9+9+7+9),		/* wTotalLength */
-+#endif
-+	2,			/* bNumInterfaces */
-+	1,			/* bConfigurationValue (> 0 !) */
-+	0,			/* iConfiguration */
-+	USB_ATTR_BUS_POWERED,	/* bmAttributes */
-+	((BOARD_MAX_mA)+1)/2,	/* bMaxPower */
-+
-+	/* Interface #0 */
-+
-+	9,			/* bLength */
-+	USB_DT_INTERFACE,	/* bDescriptorType */
-+	0,			/* bInterfaceNumber */
-+	0,			/* bAlternateSetting */
-+	1,			/* bNumEndpoints */
-+	USB_CLASS_VENDOR_SPEC,	/* bInterfaceClass */
-+	0,			/* bInterfaceSubClass */
-+	0,			/* bInterfaceProtocol */
-+	0,			/* iInterface */
-+
-+#if 0
-+	/* EP OUT */
-+
-+	7,			/* bLength */
-+	USB_DT_ENDPOINT,	/* bDescriptorType */
-+	0x01,			/* bEndPointAddress */
-+	0x02,			/* bmAttributes (bulk) */
-+	LE(EP1_SIZE),		/* wMaxPacketSize */
-+	0,			/* bInterval */
-+#endif
-+
-+#if 1
-+	/* EP IN */
-+
-+	7,			/* bLength */
-+	USB_DT_ENDPOINT,	/* bDescriptorType */
-+	0x81,			/* bEndPointAddress */
-+	0x02,			/* bmAttributes (bulk) */
-+	LE(EP1_SIZE),		/* wMaxPacketSize */
-+	0,			/* bInterval */
-+#endif
-+
-+	/* Interface #1 */
-+
-+	DFU_ITF_DESCR(1, 0, dfu_proto_runtime, 0)
-+};
-diff --git a/atusb/ep0.c b/atusb/ep0.c
-new file mode 100644
-index 0000000..fa43f3b
---- /dev/null
-+++ b/atusb/ep0.c
-@@ -0,0 +1,338 @@
-+/*
-+ * fw/ep0.c - EP0 extension protocol
-+ *
-+ * Written 2008-2011, 2013 by Werner Almesberger
-+ * Copyright 2008-2011, 2013 Werner Almesberger
-+ * Copyright 2015-2016 Stefan Schmidt
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+#include <string.h>
-+
-+#include <avr/io.h>
-+#include <avr/eeprom.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#include "usb.h"
-+#include "dfu.h"
-+
-+#include "at86rf230.h"
-+#include "atusb/ep0.h"
-+#include "version.h"
-+#include "board.h"
-+#include "sernum.h"
-+#include "spi.h"
-+#include "mac.h"
-+
-+#ifdef ATUSB
-+#define	HW_TYPE		ATUSB_HW_TYPE_110131
-+#endif
-+
-+#ifdef RZUSB
-+#define	HW_TYPE		ATUSB_HW_TYPE_RZUSB
-+#endif
-+
-+#ifdef HULUSB
-+#define HW_TYPE		ATUSB_HW_TYPE_HULUSB
-+#endif
-+
-+#ifdef DEBUG
-+#include "uart.h"
-+#include <stdio.h>
-+#define debug(FORMAT,args...) printf(FORMAT,##args)
-+#define error(FORMAT,args...) printf(FORMAT,##args)
-+#else
-+#define debug(...)
-+#define error(...)
-+#endif
-+
-+
-+static const uint8_t id[] = { EP0ATUSB_MAJOR, EP0ATUSB_MINOR, HW_TYPE };
-+static uint8_t buf[MAX_PSDU+3]; /* command, PHDR, and LQI */
-+static uint8_t size;
-+
-+
-+static void do_eeprom_write(void *user)
-+{
-+	int i;
-+
-+	for (i = 0; i < size; i++)
-+		eeprom_update_byte((uint8_t*)i, buf[i]);
-+}
-+
-+static void do_buf_write(void *user)
-+{
-+	uint8_t i;
-+
-+	spi_begin();
-+	for (i = 0; i != size; i++)
-+		spi_send(buf[i]);
-+	spi_end();
-+}
-+
-+
-+#define	BUILD_OFFSET	7	/* '#' plus "65535" plus ' ' */
-+
-+
-+static bool my_setup(const struct setup_request *setup)
-+{
-+	uint16_t req = setup->bmRequestType | setup->bRequest << 8;
-+	unsigned tmp;
-+	uint8_t i;
-+	uint64_t tmp64;
-+
-+	switch (req) {
-+	case ATUSB_FROM_DEV(ATUSB_ID):
-+		debug("ATUSB_ID\n");
-+		if (setup->wLength > 3)
-+			return 0;
-+		usb_send(&eps[0], id, setup->wLength, NULL, NULL);
-+		return 1;
-+	case ATUSB_FROM_DEV(ATUSB_BUILD):
-+		debug("ATUSB_BUILD\n");
-+		tmp = build_number;
-+		for (i = BUILD_OFFSET-2; tmp; i--) {
-+			buf[i] = (tmp % 10)+'0';
-+			tmp /= 10;
-+		}
-+		buf[i] = '#';
-+		buf[BUILD_OFFSET-1] = ' ';
-+		for (size = 0; build_date[size]; size++)
-+			buf[BUILD_OFFSET+size] = build_date[size];
-+		size += BUILD_OFFSET-i;
-+		if (size > setup->wLength)
-+			return 0;
-+		usb_send(&eps[0], buf+i, size, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_RESET):
-+		debug("ATUSB_RESET\n");
-+		reset_cpu();
-+		while (1);
-+
-+	case ATUSB_TO_DEV(ATUSB_RF_RESET):
-+		debug("ATUSB_RF_RESET\n");
-+		reset_rf();
-+		mac_reset();
-+		//ep_send_zlp(EP_CTRL);
-+		return 1;
-+
-+	case ATUSB_FROM_DEV(ATUSB_POLL_INT):
-+		debug("ATUSB_POLL_INT\n");
-+		if (setup->wLength < 1)
-+			return 0;
-+		*buf = read_irq();
-+		usb_send(&eps[0], buf, 1, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_FROM_DEV(ATUSB_TIMER):
-+		debug("ATUSB_TIMER\n");
-+		size = setup->wLength;
-+		if (size > sizeof(tmp64))
-+			size = sizeof(tmp64);
-+		tmp64 = timer_read();
-+		memcpy(buf, &tmp64, sizeof(tmp64));
-+		usb_send(&eps[0], buf, size, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_FROM_DEV(ATUSB_GPIO):
-+		debug("ATUSB_GPIO\n");
-+		if (setup->wLength < 3)
-+			return 0;
-+		if (!gpio(setup->wIndex, setup->wValue, setup->wValue >> 8,
-+		    setup->wIndex >> 8, buf))
-+			return 0;
-+		usb_send(&eps[0], buf, 3, NULL, NULL);
-+		return 1;
-+	case ATUSB_TO_DEV(ATUSB_GPIO_CLEANUP):
-+		gpio_cleanup();
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_SLP_TR):
-+		debug("ATUSB_SLP_TR\n");
-+		slp_tr();
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_REG_WRITE):
-+		debug("ATUSB_REG_WRITE\n");
-+		spi_begin();
-+		spi_send(AT86RF230_REG_WRITE | setup->wIndex);
-+		spi_send(setup->wValue);
-+		spi_end();
-+		//ep_send_zlp(EP_CTRL);
-+		return 1;
-+	case ATUSB_FROM_DEV(ATUSB_REG_READ):
-+		debug("ATUSB_REG_READ\n");
-+		spi_begin();
-+		spi_send(AT86RF230_REG_READ | setup->wIndex);
-+		*buf = spi_recv();
-+		spi_end();
-+		usb_send(&eps[0], buf, 1, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_BUF_WRITE):
-+		debug("ATUSB_BUF_WRITE\n");
-+		if (setup->wLength < 1)
-+			return 0;
-+		if (setup->wLength > MAX_PSDU)
-+			return 0;
-+		buf[0] = AT86RF230_BUF_WRITE;
-+		buf[1] = setup->wLength;
-+		size = setup->wLength+2;
-+		usb_recv(&eps[0], buf+2, setup->wLength, do_buf_write, NULL);
-+		return 1;
-+	case ATUSB_FROM_DEV(ATUSB_BUF_READ):
-+		debug("ATUSB_BUF_READ\n");
-+		if (setup->wLength < 2)			/* PHR+LQI */
-+			return 0;
-+		if (setup->wLength > MAX_PSDU+2)	/* PHR+PSDU+LQI */
-+			return 0;
-+		spi_begin();
-+		spi_send(AT86RF230_BUF_READ);
-+		size = spi_recv();
-+		if (size >= setup->wLength)
-+			size = setup->wLength-1;
-+		for (i = 0; i != size+1; i++)
-+			buf[i] = spi_recv();
-+		spi_end();
-+		usb_send(&eps[0], buf, size+1, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_SRAM_WRITE):
-+		debug("ATUSB_SRAM_WRITE\n");
-+		if (setup->wIndex > SRAM_SIZE)
-+			return 0;
-+		if (setup->wIndex+setup->wLength > SRAM_SIZE)
-+			return 0;
-+		buf[0] = AT86RF230_SRAM_WRITE;
-+		buf[1] = setup->wIndex;
-+		size = setup->wLength+2;
-+		usb_recv(&eps[0], buf+2, setup->wLength, do_buf_write, NULL);
-+		return 1;
-+	case ATUSB_FROM_DEV(ATUSB_SRAM_READ):
-+		debug("ATUSB_SRAM_READ\n");
-+		if (setup->wIndex > SRAM_SIZE)
-+			return 0;
-+		if (setup->wIndex+setup->wLength > SRAM_SIZE)
-+			return 0;
-+		spi_begin();
-+		spi_send(AT86RF230_SRAM_READ);
-+		spi_send(setup->wIndex);
-+		for (i = 0; i != setup->wLength; i++)
-+			buf[i] = spi_recv();
-+		spi_end();
-+		usb_send(&eps[0], buf, setup->wLength, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_SPI_WRITE):
-+		size = setup->wLength+2;
-+		if (size > sizeof(buf))
-+			return 0;
-+		buf[0] = setup->wValue;
-+		buf[1] = setup->wIndex;
-+		if (setup->wLength)
-+			usb_recv(&eps[0], buf+2, setup->wLength,
-+			    do_buf_write, NULL);
-+		else
-+			do_buf_write(NULL);
-+		return 1;
-+	case ATUSB_FROM_DEV(ATUSB_SPI_WRITE2_SYNC):
-+		spi_begin();
-+		spi_send(setup->wValue);
-+		spi_send(setup->wIndex);
-+		spi_end();
-+		buf[0] = irq_serial;
-+		if (setup->wLength)
-+			usb_send(&eps[0], buf, 1, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_FROM_DEV(ATUSB_SPI_READ1):
-+	case ATUSB_FROM_DEV(ATUSB_SPI_READ2):
-+		spi_begin();
-+		spi_send(setup->wValue);
-+		if (req == ATUSB_FROM_DEV(ATUSB_SPI_READ2))
-+			spi_send(setup->wIndex);
-+		for (i = 0; i != setup->wLength; i++)
-+			buf[i] = spi_recv();
-+		spi_end();
-+		usb_send(&eps[0], buf, setup->wLength, NULL, NULL);
-+		return 1;
-+
-+	case ATUSB_TO_DEV(ATUSB_RX_MODE):
-+		return mac_rx(setup->wValue);
-+	case ATUSB_TO_DEV(ATUSB_TX):
-+		return mac_tx(setup->wValue, setup->wIndex, setup->wLength);
-+	case ATUSB_TO_DEV(ATUSB_EUI64_WRITE):
-+		debug("ATUSB_EUI64_WRITE\n");
-+		usb_recv(&eps[0], buf, setup->wLength, do_eeprom_write, NULL);
-+		_delay_ms(100);
-+		reset_cpu();
-+		return 1;
-+
-+	case ATUSB_FROM_DEV(ATUSB_EUI64_READ):
-+		debug("ATUSB_EUI64_READ\n");
-+		eeprom_read_block(buf, (const void*)0, 8);
-+		usb_send(&eps[0], buf, 8, NULL, NULL);
-+		return 1;
-+
-+	default:
-+		error("Unrecognized SETUP: 0x%02x 0x%02x ...\n",
-+		    setup->bmRequestType, setup->bRequest);
-+		return 0;
-+	}
-+}
-+
-+
-+static bool my_dfu_setup(const struct setup_request *setup)
-+{
-+	switch (setup->bmRequestType | setup->bRequest << 8) {
-+	case DFU_TO_DEV(DFU_DETACH):
-+		/* @@@ should use wTimeout */
-+		dfu.state = appDETACH;
-+		return 1;
-+	default:
-+		return dfu_setup_common(setup);
-+	}
-+}
-+
-+
-+static void my_set_interface(int nth)
-+{
-+	if (nth) {
-+		user_setup = my_dfu_setup;
-+		user_get_descriptor = dfu_my_descr;
-+		dfu.state = appIDLE;
-+	} else {
-+		user_setup = my_setup;
-+		user_get_descriptor = sernum_get_descr;
-+	}
-+}
-+
-+
-+static void my_reset(void)
-+{
-+	if (dfu.state == appDETACH)
-+		reset_cpu();
-+}
-+
-+
-+void ep0_init(void)
-+{
-+	user_setup = my_setup;
-+	user_set_interface = my_set_interface;
-+	my_set_interface(0);
-+	user_reset = my_reset;
-+}
-diff --git a/atusb/flash.c b/atusb/flash.c
-new file mode 100644
-index 0000000..1f8e59d
---- /dev/null
-+++ b/atusb/flash.c
-@@ -0,0 +1,97 @@
-+/*
-+ * fw/flash.c - Board-specific flash functions
-+ *
-+ * Written 2011, 2013-2015 by Werner Almesberger
-+ * Copyright 2011, 2013-2015 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/boot.h>
-+#include <avr/pgmspace.h>
-+
-+#include "dfu.h"
-+#include "board.h"
-+
-+
-+static uint32_t payload;
-+
-+
-+static void flash_start(void)
-+{
-+	payload = 0;
-+}
-+
-+
-+static bool flash_can_write(uint16_t size)
-+{
-+	return payload+size <= BOOT_ADDR;
-+}
-+
-+
-+static void flash_write(const uint8_t *buf, uint16_t size)
-+{
-+	static uint8_t last;
-+	const uint8_t *p;
-+
-+	for (p = buf; p != buf+size; p++) {
-+		if (!(payload & (SPM_PAGESIZE-1))) {
-+			boot_page_erase(payload);
-+			boot_spm_busy_wait();
-+		}
-+
-+		if (payload & 1)
-+			boot_page_fill(payload, last | (*p << 8));
-+		else
-+			last = *p;
-+		payload++;
-+
-+		if (!(payload & (SPM_PAGESIZE-1))) {
-+			boot_page_write(payload-SPM_PAGESIZE);
-+			boot_spm_busy_wait();
-+		}
-+	}
-+}
-+
-+
-+static void flash_end_write(void)
-+{
-+	if (payload & (SPM_PAGESIZE-1)) {
-+		boot_page_write(payload & ~(SPM_PAGESIZE-1));
-+		boot_spm_busy_wait();
-+	}
-+	boot_rww_enable();
-+}
-+
-+
-+static uint16_t flash_read(uint8_t *buf, uint16_t size)
-+{
-+	uint16_t got = 0;
-+
-+	while (size && payload != (uint32_t) FLASHEND+1) {
-+		*buf++ = pgm_read_byte(payload);
-+		payload++;
-+		size--;
-+		got++;
-+	}
-+	return got;
-+}
-+
-+
-+static const struct dfu_flash_ops flash_ops = {
-+	.start		= flash_start,
-+	.can_write	= flash_can_write,
-+	.write		= flash_write,
-+	.end_write	= flash_end_write,
-+	.read		= flash_read,
-+};
-+
-+
-+const struct dfu_flash_ops *dfu_flash_ops = &flash_ops;
-diff --git a/atusb/include/at86rf230.h b/atusb/include/at86rf230.h
-new file mode 100644
-index 0000000..4c3ae22
---- /dev/null
-+++ b/atusb/include/at86rf230.h
-@@ -0,0 +1,402 @@
-+/*
-+ * include/at86rf230.h - AT86RF230/AT86RF231 protocol and register definitions
-+ *
-+ * Written 2008-2011 by Werner Almesberger
-+ * Copyright 2008-2011 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#ifndef AT86RF230_H
-+#define	AT86RF230_H
-+
-+enum {
-+	AT86RF230_REG_WRITE	= 0xc0, /* 11... */
-+	AT86RF230_REG_READ	= 0x80,	/* 10... */
-+	AT86RF230_BUF_WRITE	= 0x60,	/* 011... */
-+	AT86RF230_BUF_READ	= 0x20,	/* 001... */
-+	AT86RF230_SRAM_WRITE	= 0x40,	/* 010... */
-+	AT86RF230_SRAM_READ	= 0x00 	/* 000... */
-+};
-+
-+#define	MAX_PSDU	127	/* octets, see AT86RF230 manual section 8.1  */
-+#define	SRAM_SIZE	128
-+
-+
-+/* --- Registers ----------------------------------------------------------- */
-+
-+enum {
-+	REG_TRX_STATUS		= 0x01,
-+	REG_TRX_STATE		= 0x02,
-+	REG_TRX_CTRL_0		= 0x03,
-+
-+	REG_TRX_CTRL_1		= 0x04,	/* 231 only */
-+
-+	REG_PHY_TX_PWR		= 0x05,
-+	REG_PHY_RSSI		= 0x06,
-+	REG_PHY_ED_LEVEL	= 0x07,
-+	REG_PHY_CC_CCA		= 0x08,
-+	REG_CCA_THRES		= 0x09,
-+
-+	REG_RX_CTRL		= 0x0a,	/* 231 only */
-+	REG_SFD_VALUE		= 0x0b,	/* 231 only */
-+	REG_TRX_CTRL_2		= 0x0c,	/* 231 only */
-+	REG_ANT_DIV		= 0x0d,	/* 231 only */
-+
-+	REG_IRQ_MASK		= 0x0e,
-+	REG_IRQ_STATUS		= 0x0f,
-+	REG_VREG_CTRL		= 0x10,
-+	REG_BATMON		= 0x11,
-+	REG_XOSC_CTRL		= 0x12,
-+
-+	REG_RX_SYN		= 0x15,	/* 231 only */
-+	REG_XAH_CTRL_1		= 0x17,	/* 231 only */
-+	REG_FTN_CTRL		= 0x18,	/* 231 only */
-+
-+	REG_PLL_CF		= 0x1a,
-+	REL_PLL_DCU		= 0x1b,
-+	REG_PART_NUM		= 0x1c,
-+	REG_VERSION_NUM		= 0x1d,
-+	REG_MAN_ID_0		= 0x1e,
-+	REG_MAN_ID_1		= 0x1f,
-+	REG_SHORT_ADDR_0	= 0x20,
-+	REG_SHORT_ADDR_1	= 0x21,
-+	REG_PAN_ID_0		= 0x22,
-+	REG_PAN_ID_1		= 0x23,
-+	REG_IEEE_ADDR_0		= 0x24,
-+	REG_IEEE_ADDR_1		= 0x25,
-+	REG_IEEE_ADDR_2		= 0x26,
-+	REG_IEEE_ADDR_3		= 0x27,
-+	REG_IEEE_ADDR_4		= 0x28,
-+	REG_IEEE_ADDR_5		= 0x29,
-+	REG_IEEE_ADDR_6		= 0x2a,
-+	REG_IEEE_ADDR_7		= 0x2b,
-+
-+	REG_XAH_CTRL_0		= 0x2c,	/* XAH_CTRL in 230 */
-+	REG_CSMA_SEED_0		= 0x2d,
-+	REG_CSMA_SEED_1		= 0x2e,
-+	REG_CSMA_BE		= 0x2f,	/* 231 only */
-+
-+	REG_CONT_TX_0		= 0x36,
-+	REG_CONT_TX_1		= 0x3d,	/* 230 only */
-+};
-+
-+/* --- TRX_STATUS --- ------------------------------------------------------ */
-+
-+#define	CCA_DONE	(1 << 7)
-+#define	CCA_STATUS	(1 << 6)
-+
-+#define	TRX_STATUS_SHIFT	0
-+#define	TRX_STATUS_MASK		0x1f
-+
-+enum {
-+	TRX_STATUS_P_ON			= 0x00,	/* reset default */
-+	TRX_STATUS_BUSY_RX		= 0x01,
-+	TRX_STATUS_BUSY_TX		= 0x02,
-+	TRX_STATUS_RX_ON		= 0x06,
-+	TRX_STATUS_TRX_OFF		= 0x08,
-+	TRX_STATUS_PLL_ON		= 0x09,
-+	TRX_STATUS_SLEEP		= 0x0f,
-+	TRX_STATUS_BUSY_RX_AACK		= 0x11,
-+	TRX_STATUS_BUSY_TX_ARET		= 0x12,
-+	TRX_STATUS_RX_AACK_ON		= 0x16,
-+	TRX_STATUS_TX_ARET_ON		= 0x19,
-+	TRX_STATUS_RX_ON_NOCLK		= 0x1c,
-+	TRX_STATUS_RX_AACK_ON_NOCLK	= 0x1d,
-+	TRX_STATUS_BUSY_RX_AACK_NOCLK	= 0x1e,
-+	TRX_STATUS_TRANSITION		= 0x1f	/* ..._IN_PROGRESS */
-+};
-+
-+/* --- TRX_STATE ----------------------------------------------------------- */
-+
-+#define	TRAC_STATUS_SHIFT	5
-+#define	TRAC_STATUS_MASK	7
-+
-+enum {
-+	TRAC_STATUS_SUCCESS			= 0,	/* reset default */
-+	TRAC_STATUS_SUCCESS_DATA_PENDING	= 1,
-+	TRAC_STATUS_SUCCESS_WAIT_FOR_ACK	= 2,	/* 231 only */
-+	TRAC_STATUS_CHANNEL_ACCESS_FAILURE	= 3,
-+	TRAC_STATUS_NO_ACK			= 5,
-+	TRAC_STATUS_INVALID			= 7
-+};
-+
-+#define	TRX_CMD_SHIFT	0
-+#define	TRX_CMD_MASK	0x1f
-+
-+enum {
-+	TRX_CMD_NOP		= 0x00,	/* reset default */
-+	TRX_CMD_TX_START	= 0x02,
-+	TRX_CMD_FORCE_TRX_OFF	= 0x03,
-+	TRX_CMD_FORCE_PLL_ON	= 0x04,	/* 231 only */
-+	TRX_CMD_RX_ON		= 0x06,
-+	TRX_CMD_TRX_OFF		= 0x08,
-+	TRX_CMD_PLL_ON		= 0x09,
-+	TRX_CMD_RX_AACK_ON	= 0x16,
-+	TRX_CMD_TX_ARET_ON	= 0x19,
-+};
-+
-+/* --- TRX_CTRL_0 ---------------------------------------------------------- */
-+
-+#define	PAD_IO_SHIFT	6
-+#define	PAD_IO_MASK	3
-+
-+enum {
-+	PAD_IO_2mA,	/* reset default */
-+	PAD_IO_4mA,
-+	PAD_IO_6mA,
-+	PAD_IO_8mA
-+};
-+
-+#define	PAD_IO_CLKM_SHIFT	4
-+#define	PAD_IO_CLKM_MASK	3
-+
-+enum {
-+	PAD_IO_CLKM_2mA,
-+	PAD_IO_CLKM_4mA,	/* reset default */
-+	PAD_IO_CLKM_5mA,
-+	PAD_IO_CLKM_8mA,
-+};
-+
-+#define	CLKM_SHA_SEL		(1 << 3)
-+
-+#define	CLKM_CTRL_SHIFT	0
-+#define	CLKM_CTRL_MASK	7
-+
-+enum {
-+	CLKM_CTRL_OFF	= 0,
-+	CLKM_CTRL_1MHz	= 1,	/* reset default */
-+	CLKM_CTRL_2MHz	= 2,
-+	CLKM_CTRL_4MHz	= 3,
-+	CLKM_CTRL_8MHz	= 4,
-+	CLKM_CTRL_16MHz	= 5
-+};
-+
-+/* --- TRX_CTRL_1 (231 only) ----------------------------------------------- */
-+
-+#define	PA_EXT_EN		(1 << 7)
-+#define	IRQ_2_EXT_EN		(1 << 6)
-+#define	TX_AUTO_CRC_ON		(1 << 5)	/* 231 location */
-+#define	RX_BL_CTRL		(1 << 4)
-+
-+#define	SPI_CMD_MODE_SHIFT	2
-+#define	SPI_CMD_MODE_MASK	3
-+
-+enum {
-+	SPI_CMD_MODE_EMPTY	= 0,	/* reset default */
-+	SPI_CMD_MODE_TRX_STATUS	= 1,
-+	SPI_CMD_MODE_PHY_RSSI	= 2,
-+	SPI_CMD_MODE_IRQ_STATUS	= 3,
-+};
-+
-+#define	IRQ_MASK_MODE		(1 << 1)
-+#define	IRQ_POLARITY		(1 << 0)
-+
-+/* --- PHY_TX_PWR ---------------------------------------------------------- */
-+
-+#define	TX_AUTO_CRC_ON_230	(1 << 7)	/* 230 location */
-+
-+#define	PA_BUF_LT_SHIFT	6
-+#define	PA_BUF_LT_MASK	3
-+
-+#define	PA_LT_SHIFT	4
-+#define	PA_LT_MASK	3
-+
-+#define	TX_PWR_SHIFT	0
-+#define	TX_PWR_MASK	0x0f
-+
-+/* --- PHY_RSSI ------------------------------------------------------------ */
-+
-+#define	RX_CRC_VALID	(1 << 7)
-+
-+#define	RND_VALUE_SHIFT	5		/* 231 only */
-+#define	RND_VALUE_MASK	3
-+
-+#define	RSSI_SHIFT	0
-+#define	RSSI_MASK	0x1f
-+
-+/* --- PHY_CC_CCA ---------------------------------------------------------- */
-+
-+#define	CCA_REQUEST	(1 << 7)
-+
-+#define	CCA_MODE_SHIFT	5
-+#define	CCA_MODE_MASK	3
-+
-+enum {
-+	CCA_MODE_CARRIER_OR_ENERGY	= 0,	/* 231 only */
-+	CCA_MODE_ENERGY			= 1,	/* reset default */
-+	CCA_MODE_CARRIER		= 2,
-+	CCA_MODE_CARRIER_AND_ENERGY	= 3
-+};
-+
-+#define	CHANNEL_SHIFT	0
-+#define	CHANNEL_MASK	0x1f
-+
-+/* --- CCA_THRES ----------------------------------------------------------- */
-+
-+#define	CCA_ED_THRES_SHIFT	0
-+#define	CCA_ED_THRES_MASK	0x0f
-+
-+/* --- RX_CTRL (231 only) -------------------------------------------------- */
-+
-+#define	PDT_THRES_SHIFT	0
-+#define	PDT_THRES_MASK	0x0f
-+
-+enum {
-+	PDT_THRES_DEFAULT	= 0x07,	/* reset default */
-+	PDT_THRES_DIVERSITY	= 0x03,
-+};
-+
-+/* --- TRX_CTRL_2 (231 only) ----------------------------------------------- */
-+
-+#define	RX_SAFE_MODE		(1 << 7)
-+
-+#define	OQPSK_DATA_RATE_SHIFT	0
-+#define	OQPSK_DATA_RATE_MASK	3
-+
-+enum {
-+	OQPSK_DATA_RATE_250	= 0,	/* reset default */
-+	OQPSK_DATA_RATE_500	= 1,
-+	OQPSK_DATA_RATE_1000	= 2,
-+	OQPSK_DATA_RATE_2000	= 3
-+};
-+
-+/* --- ANT_DIV (231 only) -------------------------------------------------- */
-+
-+#define	ANT_SEL		(1 << 7)
-+#define	ANT_DIV_EN	(1 << 3)
-+#define	ANT_EXT_SW_EN	(1 << 2)
-+
-+#define	ANT_CTRL_SHIFT	0
-+#define	ANT_CTRL_MASK	3
-+
-+enum {
-+	ANT_CTRL_ANT_0	= 1,
-+	ANT_CTRL_ANT_1	= 2,
-+	ANT_CTRL_NODIV	= 3,	/* reset default */
-+};
-+
-+/* --- IRQ_MASK/IRQ_STATUS ------------------------------------------------- */
-+
-+enum {
-+	IRQ_PLL_LOCK	= 1 << 0,
-+	IRQ_PLL_UNLOCK	= 1 << 1,
-+	IRQ_RX_START	= 1 << 2,
-+	IRQ_TRX_END	= 1 << 3,
-+	IRQ_CCA_ED_DONE	= 1 << 4,	/* 231 only */
-+	IRQ_AMI		= 1 << 5,	/* 231 only */
-+	IRQ_TRX_UR	= 1 << 6,
-+	IRQ_BAT_LOW	= 1 << 7
-+};
-+
-+/* --- VREG_CTRL ----------------------------------------------------------- */
-+
-+#define	AVREG_EXT	(1 << 7)
-+#define	AVDD_OK		(1 << 6)
-+#define	DVREG_EXT	(1 << 3)
-+#define	DVDD_OK		(1 << 2)
-+
-+/* --- BATMON -------------------------------------------------------------- */
-+
-+#define	BATMON_OK	(1 << 5)
-+#define	BATMON_HR	(1 << 4)
-+
-+#define	BATMON_VTH_SHIFT	0
-+#define	BATMON_VTH_MASK		0x0f
-+
-+/* --- XOSC_CTRL ----------------------------------------------------------- */
-+
-+#define	XTAL_MODE_SHIFT	4
-+#define	XTAL_MODE_MASK	0x0f
-+
-+enum {
-+	XTAL_MODE_OFF	= 0x0,	/* 230 only */
-+	XTAL_MODE_EXT	= 0x4,
-+	XTAL_MODE_INT	= 0xf	/* reset default */
-+};
-+
-+#define	XTAL_TRIM_SHIFT	4
-+#define	XTAL_TRIM_MASK	0x0f
-+
-+/* --- RX_SYN (231 only) --------------------------------------------------- */
-+
-+#define	RX_PDT_DIS		(1 << 7)
-+
-+#define	RX_PDT_LEVEL_SHIFT	0
-+#define	RX_PDT_LEVEL_MASK	0xf
-+
-+/* --- XAH_CTRL_1 (231 only) ----------------------------------------------- */
-+
-+#define	AACK_FLTR_RES_FT	(1 << 5)
-+#define	AACK_UPLD_RES_FT	(1 << 4)
-+#define	AACK_ACK_TIME		(1 << 2)
-+#define	AACK_PROM_MODE		(1 << 1)
-+
-+/* --- FTN_CTRL (231 only) ------------------------------------------------- */
-+
-+#define	FTN_START		(1 << 7)
-+
-+/* --- PLL_CF -------------------------------------------------------------- */
-+
-+#define	PLL_CF_START	(1 << 7)
-+
-+/* --- PLL_DCU ------------------------------------------------------------- */
-+
-+#define	PLL_DCU_START	(1 << 7)
-+
-+/* --- XAH_CTRL_0 (XAH_CTRL in 230) ---------------------------------------- */
-+
-+#define	MAX_FRAME_RETRIES_SHIFT	4
-+#define	MAX_FRAME_RETRIES_MASK	0x0f
-+
-+#define	MAX_CSMA_RETRIES_SHIFT	1
-+#define	MAX_CSMA_RETRIES_MASK	0x07
-+
-+#define	SLOTTED_OPERATION	(1 << 0)	/* 231 only */
-+
-+/* --- CSMA_SEED_1 --------------------------------------------------------- */
-+
-+#define	MIN_BE_SHIFT_230	6	/* 230 location */
-+#define	MIN_BE_MASK_230		3
-+
-+#define	AACK_FVN_MODE_SHIFT	6	/* 231 only */
-+#define	AACK_FVN_MODE_MASK	3
-+
-+enum {
-+	AACK_FVN_MODE_0		= 0,
-+	AACK_FVN_MODE_01	= 1,	/* reset default */
-+	AACK_FVN_MODE_012	= 2,
-+	AACK_FVN_MODE_ANY	= 3
-+};
-+
-+#define	AACK_SET_PD		(1 << 5)
-+#define	AACK_DIS_ACK		(1 << 4)	/* 231 only */
-+#define	I_AM_COORD		(1 << 3)
-+
-+#define CSMA_SEED_1_SHIFT	0
-+#define	CSMA_SEED_1_MASK	7
-+
-+/* --- CSMA_BE ------------------------------------------------------------- */
-+
-+#define	MAX_BE_SHIFT		4
-+#define	MAX_BE_MASK		0x0f
-+
-+#define	MIN_BE_SHIFT		0	/* 231 location */
-+#define	MIN_BE_MASK		0x0f
-+
-+/* --- REG_CONT_TX_0 ------------------------------------------------------- */
-+
-+#define	CONT_TX_MAGIC		0x0f
-+
-+/* --- REG_CONT_TX_1 (230 only) -------------------------------------------- */
-+
-+#define	CONT_TX_MOD		0x00	/* modulated */
-+#define	CONT_TX_M2M		0x10	/* f_CH-2 MHz */
-+#define	CONT_TX_M500K		0x80	/* f_CH-0.5 MHz */
-+#define	CONT_TX_P500K		0xc0	/* f_CH+0.5 MHz */
-+
-+#endif /* !AT86RF230_H */
-diff --git a/atusb/include/atusb/atusb.h b/atusb/include/atusb/atusb.h
-new file mode 100644
-index 0000000..555d14b
---- /dev/null
-+++ b/atusb/include/atusb/atusb.h
-@@ -0,0 +1,97 @@
-+/*
-+ * atusb.h - Definitions shared between kernel and ATUSB firmware
-+ *
-+ * Written 2013 by Werner Almesberger <werner@almesberger.net>
-+ *
-+ * 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, version 2, or
-+ * (at your option) any later version.
-+ *
-+ * This file should be identical for kernel and firmware.
-+ * Kernel: drivers/net/ieee802154/atusb.h
-+ * Firmware: ben-wpan/atusb/fw/include/atusb/atusb.h
-+ */
-+
-+#ifndef	_ATUSB_H
-+#define	_ATUSB_H
-+
-+#define ATUSB_VENDOR_ID	0x20b7	/* Qi Hardware*/
-+#define ATUSB_PRODUCT_ID 0x1540	/* 802.15.4, device 0 */
-+				/*     -- -         - */
-+
-+#define ATUSB_BUILD_SIZE 256	/* maximum build version/date message length */
-+
-+/* Commands to our device. Make sure this is synced with the firmware */
-+enum atusb_requests {
-+	ATUSB_ID			= 0x00,	/* system status/control grp */
-+	ATUSB_BUILD,
-+	ATUSB_RESET,
-+	ATUSB_RF_RESET			= 0x10,	/* debug/test group */
-+	ATUSB_POLL_INT,
-+	ATUSB_TEST,			/* atusb-sil only */
-+	ATUSB_TIMER,
-+	ATUSB_GPIO,
-+	ATUSB_SLP_TR,
-+	ATUSB_GPIO_CLEANUP,
-+	ATUSB_REG_WRITE			= 0x20,	/* transceiver group */
-+	ATUSB_REG_READ,
-+	ATUSB_BUF_WRITE,
-+	ATUSB_BUF_READ,
-+	ATUSB_SRAM_WRITE,
-+	ATUSB_SRAM_READ,
-+	ATUSB_SPI_WRITE			= 0x30,	/* SPI group */
-+	ATUSB_SPI_READ1,
-+	ATUSB_SPI_READ2,
-+	ATUSB_SPI_WRITE2_SYNC,
-+	ATUSB_RX_MODE			= 0x40, /* HardMAC group */
-+	ATUSB_TX,
-+	ATUSB_EUI64_WRITE		= 0x50, /* Parameter in EEPROM grp */
-+	ATUSB_EUI64_READ,
-+};
-+
-+enum {
-+	ATUSB_HW_TYPE_100813,	/* 2010-08-13 */
-+	ATUSB_HW_TYPE_101216,	/* 2010-12-16 */
-+	ATUSB_HW_TYPE_110131,	/* 2011-01-31, ATmega32U2-based */
-+	ATUSB_HW_TYPE_RZUSB,	/* Atmel Raven USB dongle with at86rf230 */
-+	ATUSB_HW_TYPE_HULUSB,	/* Busware HUL USB dongle with at86rf212 */
-+};
-+
-+/*
-+ * Direction	bRequest		wValue		wIndex	wLength
-+ *
-+ * ->host	ATUSB_ID		-		-	3
-+ * ->host	ATUSB_BUILD		-		-	#bytes
-+ * host->	ATUSB_RESET		-		-	0
-+ *
-+ * host->	ATUSB_RF_RESET		-		-	0
-+ * ->host	ATUSB_POLL_INT		-		-	1
-+ * host->	ATUSB_TEST		-		-	0
-+ * ->host	ATUSB_TIMER		-		-	#bytes (6)
-+ * ->host	ATUSB_GPIO		dir+data	mask+p#	3
-+ * host->	ATUSB_SLP_TR		-		-	0
-+ * host->	ATUSB_GPIO_CLEANUP	-		-	0
-+ *
-+ * host->	ATUSB_REG_WRITE		value		addr	0
-+ * ->host	ATUSB_REG_READ		-		addr	1
-+ * host->	ATUSB_BUF_WRITE		-		-	#bytes
-+ * ->host	ATUSB_BUF_READ		-		-	#bytes
-+ * host->	ATUSB_SRAM_WRITE	-		addr	#bytes
-+ * ->host	ATUSB_SRAM_READ		-		addr	#bytes
-+ *
-+ * host->	ATUSB_SPI_WRITE		byte0		byte1	#bytes
-+ * ->host	ATUSB_SPI_READ1		byte0		-	#bytes
-+ * ->host	ATUSB_SPI_READ2		byte0		byte1	#bytes
-+ * ->host	ATUSB_SPI_WRITE2_SYNC	byte0		byte1	0/1
-+ *
-+ * host->	ATUSB_RX_MODE		on		-	0
-+ * host->	ATUSB_TX		flags		ack_seq	#bytes
-+ * host->	ATUSB_EUI64_WRITE	-		-	#bytes (8)
-+ * ->host	ATUSB_EUI64_READ	-		-	#bytes (8)
-+ */
-+
-+#define ATUSB_REQ_FROM_DEV	(USB_TYPE_VENDOR | USB_DIR_IN)
-+#define ATUSB_REQ_TO_DEV	(USB_TYPE_VENDOR | USB_DIR_OUT)
-+
-+#endif /* !_ATUSB_H */
-diff --git a/atusb/include/atusb/ep0.h b/atusb/include/atusb/ep0.h
-new file mode 100644
-index 0000000..7777345
---- /dev/null
-+++ b/atusb/include/atusb/ep0.h
-@@ -0,0 +1,64 @@
-+/*
-+ * include/atusb/ep0.h - EP0 extension protocol
-+ *
-+ * Written 2008-2011, 2013 by Werner Almesberger
-+ * Copyright 2008-2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#ifndef EP0_H
-+#define EP0_H
-+
-+#include <atusb/atusb.h>
-+
-+
-+/*
-+ * EP0 protocol:
-+ *
-+ * 0.0	initial release
-+ * 0.1  addition of ATUSB_TEST
-+ * 0.2  First public release
-+ * 0.3	ATUSB_EUI64_READ/WRITE for permanent EUI64 handling
-+ * 	Support to run the firmware on Atmel Raven USB dongles
-+ * 	Remove FCS frame check from firmware and leave it to the driver
-+ * 	Use extended operation mode for TX for automatic ACK handling
-+ */
-+
-+#define EP0ATUSB_MAJOR	0	/* EP0 protocol, major revision */
-+#define EP0ATUSB_MINOR	3	/* EP0 protocol, minor revision */
-+
-+
-+/*
-+ * bmRequestType:
-+ *
-+ * D7 D6..5 D4...0
-+ * |  |     |
-+ * direction (0 = host->dev)
-+ *    type (2 = vendor)
-+ *          recipient (0 = device)
-+ */
-+
-+#ifndef USB_TYPE_VENDOR
-+#define	USB_TYPE_VENDOR		0x40
-+#endif
-+
-+#ifndef USB_DIR_IN
-+#define	USB_DIR_IN		0x80
-+#endif
-+
-+#ifndef USB_DIR_OUT
-+#define	USB_DIR_OUT		0x00
-+#endif
-+
-+#define	ATUSB_FROM_DEV(req)	(ATUSB_REQ_FROM_DEV | (req) << 8)
-+#define	ATUSB_TO_DEV(req)	(ATUSB_REQ_TO_DEV | (req) << 8)
-+
-+
-+void ep0_init(void);
-+
-+#endif /* !EP0_H */
-diff --git a/atusb/mac.c b/atusb/mac.c
-new file mode 100644
-index 0000000..835002c
---- /dev/null
-+++ b/atusb/mac.c
-@@ -0,0 +1,250 @@
-+/*
-+ * fw/mac.c - HardMAC functions
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+#include <stddef.h>
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+
-+#include "at86rf230.h"
-+#include "spi.h"
-+#include "board.h"
-+#include "mac.h"
-+
-+#define	RX_BUFS	3
-+
-+
-+bool (*mac_irq)(void) = NULL;
-+
-+
-+static uint8_t rx_buf[RX_BUFS][MAX_PSDU+2]; /* PHDR+payload+LQ */
-+static uint8_t tx_buf[MAX_PSDU];
-+static uint8_t tx_size = 0;
-+static bool txing = 0;
-+static bool queued_tx_ack = 0;
-+static uint8_t next_seq, this_seq, queued_seq;
-+
-+
-+/* ----- Receive buffer management ----------------------------------------- */
-+
-+
-+static uint8_t rx_in = 0, rx_out = 0;
-+
-+
-+static inline void next_buf(uint8_t *index)
-+{
-+	*index = (*index+1) % RX_BUFS;
-+}
-+
-+
-+/* ----- Interrupt handling ------------------------------------------------ */
-+
-+
-+static void rx_done(void *user);
-+static void tx_ack_done(void *user);
-+
-+
-+static void usb_next(void)
-+{
-+	const uint8_t *buf;
-+
-+	if (rx_in != rx_out) {
-+		buf = rx_buf[rx_out];
-+		led(1);
-+		usb_send(&eps[1], buf, buf[0]+2, rx_done, NULL);
-+	}
-+
-+	if (queued_tx_ack) {
-+		usb_send(&eps[1], &queued_seq, 1, tx_ack_done, NULL);
-+		queued_tx_ack = 0;	
-+	}
-+}
-+
-+
-+static void tx_ack_done(void *user)
-+{
-+	usb_next();
-+}
-+
-+static void rx_done(void *user)
-+{
-+	led(0);
-+	next_buf(&rx_out);
-+	usb_next();
-+#ifdef AT86RF230
-+	/* slap at86rf230 - reduce fragmentation issue */
-+	change_state(TRX_STATUS_RX_AACK_ON);
-+#endif
-+}
-+
-+
-+static void receive_frame(void)
-+{
-+	uint8_t size;
-+	uint8_t *buf;
-+
-+	spi_begin();
-+	spi_io(AT86RF230_BUF_READ);
-+
-+	size = spi_recv();
-+	if (!size || (size & 0x80)) {
-+		spi_end();
-+		return;
-+	}
-+
-+	buf = rx_buf[rx_in];
-+	spi_recv_block(buf+1, size+1);
-+	spi_end();
-+
-+	buf[0] = size;
-+	next_buf(&rx_in);
-+
-+	if (eps[1].state == EP_IDLE)
-+		usb_next();
-+}
-+
-+
-+static bool handle_irq(void)
-+{
-+	uint8_t irq;
-+
-+	irq = reg_read(REG_IRQ_STATUS);
-+	if (!(irq & IRQ_TRX_END))
-+		return 1;
-+
-+	if (txing) {
-+		if (eps[1].state == EP_IDLE) {
-+			usb_send(&eps[1], &this_seq, 1, tx_ack_done, NULL);
-+		} else {
-+			queued_tx_ack = 1;
-+			queued_seq = this_seq;
-+		}
-+		txing = 0;
-+		return 1;
-+	}
-+
-+	/* likely */
-+	if (eps[1].state == EP_IDLE || rx_in != rx_out)
-+		receive_frame();
-+
-+	return 1;
-+}
-+
-+
-+/* ----- TX/RX ------------------------------------------------------------- */
-+
-+
-+bool mac_rx(int on)
-+{
-+	if (on) {
-+		mac_irq = handle_irq;
-+		reg_read(REG_IRQ_STATUS);
-+		change_state(TRX_CMD_RX_AACK_ON);
-+	} else {
-+		mac_irq = NULL;
-+		change_state(TRX_CMD_FORCE_TRX_OFF);
-+		txing = 0;
-+	}
-+	return 1;
-+}
-+
-+
-+static void do_tx(void *user)
-+{
-+	uint16_t timeout = 0xffff;
-+	uint8_t status;
-+	uint8_t i;
-+
-+	/*
-+	 * If we time out here, the host driver will time out waiting for the
-+	 * TRX_END acknowledgement.
-+	 */
-+	do {
-+		if (!--timeout)
-+			return;
-+		status = reg_read(REG_TRX_STATUS) & TRX_STATUS_MASK;
-+	}
-+	while (status != TRX_STATUS_RX_ON && status != TRX_STATUS_RX_AACK_ON);
-+
-+#ifdef AT86RF231
-+	/*
-+	 * We use TRX_CMD_FORCE_PLL_ON instead of TRX_CMD_PLL_ON because a new
-+	 * reception may have begun while we were still working on the previous
-+	 * one.
-+	 */
-+	reg_write(REG_TRX_STATE, TRX_CMD_FORCE_PLL_ON);
-+#endif
-+#ifdef AT86RF230
-+	/*
-+	 * at86rf230 doesn't support force change, nevetherless this works
-+	 * somehow
-+	 */
-+	reg_write(REG_TRX_STATE, TRX_CMD_PLL_ON);
-+#endif
-+#ifdef AT86RF212
-+	/*
-+	* We use TRX_CMD_FORCE_PLL_ON instead of TRX_CMD_PLL_ON because a new
-+	* reception may have begun while we were still working on the previous
-+	* one.
-+	*/
-+	reg_write(REG_TRX_STATE, TRX_CMD_FORCE_PLL_ON);
-+#endif
-+
-+	handle_irq();
-+
-+	spi_begin();
-+	spi_send(AT86RF230_BUF_WRITE);
-+	spi_send(tx_size+2); /* CRC */
-+	for (i = 0; i != tx_size; i++)
-+		spi_send(tx_buf[i]);
-+	spi_end();
-+
-+	change_state(TRX_STATUS_TX_ARET_ON);
-+
-+	slp_tr();
-+
-+	txing = 1;
-+	this_seq = next_seq;
-+
-+	/*
-+	 * Wait until we reach BUSY_TX_ARET, so that we command the transition to
-+	 * RX_AACK_ON which will be executed upon TX completion.
-+	 */
-+	change_state(TRX_CMD_PLL_ON);
-+	change_state(TRX_CMD_RX_AACK_ON);
-+}
-+
-+
-+bool mac_tx(uint16_t flags, uint8_t seq, uint16_t len)
-+{
-+	if (len > MAX_PSDU)
-+		return 0;
-+	tx_size = len;
-+	next_seq = seq;
-+	usb_recv(&eps[0], tx_buf, len, do_tx, NULL);
-+	return 1;
-+}
-+
-+
-+void mac_reset(void)
-+{
-+	mac_irq = NULL;
-+	txing = 0;
-+	queued_tx_ack = 0;
-+	rx_in = rx_out = 0;
-+	next_seq = this_seq = queued_seq = 0;
-+
-+	/* enable CRC and PHY_RSSI (with RX_CRC_VALID) in SPI status return */
-+	reg_write(REG_TRX_CTRL_1,
-+	    TX_AUTO_CRC_ON | SPI_CMD_MODE_PHY_RSSI << SPI_CMD_MODE_SHIFT);
-+}
-diff --git a/atusb/mac.h b/atusb/mac.h
-new file mode 100644
-index 0000000..f3c92fb
---- /dev/null
-+++ b/atusb/mac.h
-@@ -0,0 +1,26 @@
-+/*
-+ * fw/mac.h - HardMAC functions
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+#ifndef MAC_H
-+#define	MAC_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+
-+extern bool (*mac_irq)(void);
-+
-+bool mac_rx(int on);
-+bool mac_tx(uint16_t flags, uint8_t seq, uint16_t len);
-+void mac_reset(void);
-+
-+#endif /* !MAC_H */
-diff --git a/atusb/sernum.c b/atusb/sernum.c
-new file mode 100644
-index 0000000..41e434c
---- /dev/null
-+++ b/atusb/sernum.c
-@@ -0,0 +1,47 @@
-+/*
-+ * fw/sernum.c - ATUSB serial number
-+ *
-+ * Written 2008-2011, 2013 by Werner Almesberger
-+ * Copyright 2008-2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+
-+#include "board.h"
-+#include "sernum.h"
-+
-+
-+static const uint8_t string_descriptor_0[] = {
-+	4,				/* blength */
-+	USB_DT_STRING,			/* bDescriptorType */
-+	LE(USB_LANGID_ENGLISH_US)	/* wLANGID[0]  */
-+};
-+
-+
-+bool sernum_get_descr(uint8_t type, uint8_t index, const uint8_t **reply,
-+    uint8_t *size)
-+{
-+	if (type != USB_DT_STRING)
-+		return 0;
-+	switch (index) {
-+	case 0:
-+		*reply = string_descriptor_0;
-+		*size = sizeof(string_descriptor_0);
-+		return 1;
-+	case 1:
-+		*reply = board_sernum;
-+		*size = sizeof(board_sernum);
-+		return 1;
-+	default:
-+		return 0;
-+	}
-+}
-diff --git a/atusb/sernum.h b/atusb/sernum.h
-new file mode 100644
-index 0000000..31a8e27
---- /dev/null
-+++ b/atusb/sernum.h
-@@ -0,0 +1,37 @@
-+/*
-+ * fw/sernum.h - ATUSB serial number
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+#ifndef SERNUM_H
-+#define	SERNUM_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "board.h"
-+
-+
-+#ifdef HAS_BOARD_SERNUM
-+
-+bool sernum_get_descr(uint8_t type, uint8_t index, const uint8_t **reply,
-+    uint8_t *size);
-+
-+#else /* HAS_BOARD_SERNUM */
-+
-+static inline bool sernum_get_descr(uint8_t type, uint8_t index,
-+    const uint8_t **reply, uint8_t *size)
-+{
-+	return 0;
-+}
-+
-+#endif /* !HAS_BOARD_SERNUM */
-+
-+#endif /* !SERNUM_H */
-diff --git a/atusb/spi.c b/atusb/spi.c
-new file mode 100644
-index 0000000..3fa5715
---- /dev/null
-+++ b/atusb/spi.c
-@@ -0,0 +1,51 @@
-+/*
-+ * fw/spi.c - ATmega8 family SPI I/O
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include <avr/io.h>
-+
-+#include "board.h"
-+#include "spi.h"
-+
-+
-+uint8_t spi_io(uint8_t v)
-+{
-+//      while (!(UCSR1A & 1 << UDRE1));
-+	SPI_DATA = v;
-+	SPI_WAIT_DONE();
-+	return SPI_DATA;
-+}
-+
-+
-+void spi_end(void)
-+{
-+//      while (!(UCSR1A & 1 << TXC1));
-+	SET(nSS);
-+}
-+
-+
-+void spi_recv_block(uint8_t *buf, uint8_t n)
-+{
-+	if (!n)
-+		return;
-+	SPI_DATA = 0;
-+	while (--n) {
-+		SPI_WAIT_DONE();
-+		*buf++ = SPI_DATA;
-+		SPI_DATA = 0;
-+	}
-+	SPI_WAIT_DONE();
-+	*buf++ = SPI_DATA;
-+}
-diff --git a/atusb/spi.h b/atusb/spi.h
-new file mode 100644
-index 0000000..6e04f4e
---- /dev/null
-+++ b/atusb/spi.h
-@@ -0,0 +1,30 @@
-+/*
-+ * fw/spi.h - ATmega8 family SPI I/O
-+ *
-+ * Written 2011, 2013 by Werner Almesberger
-+ * Copyright 2011, 2013 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+#ifndef SPI_H
-+#define	SPI_H
-+
-+#include <stdint.h>
-+
-+
-+void spi_begin(void);
-+uint8_t spi_io(uint8_t v);
-+void spi_end(void);
-+void spi_off(void);
-+void spi_init(void);
-+
-+#define	spi_send(v)	(void) spi_io(v)
-+#define	spi_recv(v)	spi_io(0)
-+
-+void spi_recv_block(uint8_t *buf, uint8_t n);
-+
-+#endif /* !SPI_H */
-diff --git a/atusb/uart.c b/atusb/uart.c
-new file mode 100644
-index 0000000..44bec27
---- /dev/null
-+++ b/atusb/uart.c
-@@ -0,0 +1,64 @@
-+/*
-+ * fw/uart.h - Functions needed for debugging over uart
-+ *
-+ * Code adapted from http://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc
-+ * and http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
-+ *
-+ * Published under the Creative Commons Share-Alike licence
-+ * https://creativecommons.org/licenses/by-sa/2.0/de/
-+ *
-+ * S. Salewski 2007
-+ *
-+ * Adapted by
-+ * Josef Filzmaier 2017
-+ */
-+
-+#include <avr/io.h>
-+#include "uart.h"
-+
-+#define USART_BAUD 38400UL
-+#define F_CPU 8000000UL
-+
-+#define Wait_USART_Ready() while (!(UCSR1A & (1<<UDRE1)))
-+#define UART_UBRR (F_CPU/(16L*USART_BAUD)-1)
-+
-+// initialize USART, 8N1 mode
-+void
-+uart_init(void)
-+{
-+/* TODO: Find a working configuration for uart for the atmega32u2 */
-+#if CHIP == at90usb1287
-+	CLKPR = (1 << CLKPCE);
-+	CLKPR = 0; // clock prescaler == 0, so we have 16 MHz mpu frequency
-+	UBRR1 = UART_UBRR;
-+	UCSR1C = (1 << UCSZ10) | (1 << UCSZ11);
-+	UCSR1B = (1 << TXEN1);
-+	do
-+	{
-+		UDR1;
-+	}
-+	while (UCSR1A & (1 << RXC1));
-+#endif
-+
-+}
-+
-+int uart_write_char(char c, FILE* stream)
-+{
-+	if (c == '\n'){
-+		uart_new_line();
-+	}
-+	else {
-+		Wait_USART_Ready();
-+		UDR1 = c;
-+	}
-+	return 0;
-+}
-+
-+void
-+uart_new_line(void)
-+{
-+	Wait_USART_Ready();
-+	UDR1 = '\r';
-+	Wait_USART_Ready();
-+	UDR1 = '\n';
-+}
-diff --git a/atusb/uart.h b/atusb/uart.h
-new file mode 100644
-index 0000000..4810f9c
---- /dev/null
-+++ b/atusb/uart.h
-@@ -0,0 +1,25 @@
-+/*
-+ * fw/uart.h - Functions needed for debugging over uart
-+ *
-+ * Code adapted from http://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc
-+ * and http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
-+ *
-+ * Published under the Creative Commons Share-Alike licence
-+ * https://creativecommons.org/licenses/by-sa/2.0/de/
-+ *
-+ * S. Salewski 2007
-+ *
-+ * Adapted by
-+ * Josef Filzmaier 2017
-+ */
-+
-+#ifndef UART_H_
-+#define	UART_H_
-+
-+#include <stdio.h>
-+
-+void uart_init(void);
-+int uart_write_char(char c, FILE* stream);
-+void uart_new_line(void);
-+
-+#endif /* UART_H_ */
-diff --git a/atusb/usb/atu2.c b/atusb/usb/atu2.c
-new file mode 100644
-index 0000000..98158bf
---- /dev/null
-+++ b/atusb/usb/atu2.c
-@@ -0,0 +1,247 @@
-+/*
-+ * fw/usb/atu2.c - Chip-specific driver for Atmel ATxxxU2 USB chips
-+ *
-+ * Written 2008-2011, 2013-2014 by Werner Almesberger
-+ * Copyright 2008-2011, 2013-2014 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * Known issues:
-+ * - no suspend/resume
-+ * - we don't call back after failed transmissions,
-+ * - we don't reset the EP buffer after failed receptions
-+ * - enumeration often encounters an error -71 (from which it recovers)
-+ */
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#define F_CPU   8000000UL
-+#include <util/delay.h>
-+
-+#include <avr/io.h>
-+#include <avr/interrupt.h>
-+#include "usb.h"
-+#include "board.h"
-+
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#if 1
-+#define BUG_ON(cond)    do { if (cond) panic(); } while (0)
-+#else
-+#define BUG_ON(cond)
-+#endif
-+
-+
-+struct ep_descr eps[NUM_EPS];
-+
-+
-+static uint16_t usb_read_word(void)
-+{
-+	uint8_t low;
-+
-+	low = UEDATX;
-+	return low | UEDATX << 8;
-+}
-+
-+
-+static void enable_addr(void *user)
-+{
-+	while (!(UEINTX & (1 << TXINI)));
-+	UDADDR |= 1 << ADDEN;
-+}
-+
-+
-+void set_addr(uint8_t addr)
-+{
-+	UDADDR = addr;
-+	usb_send(&eps[0], NULL, 0, enable_addr, NULL);
-+}
-+
-+
-+void usb_ep_change(struct ep_descr *ep)
-+{
-+	if (ep->state == EP_TX) {
-+		UENUM = ep-eps;
-+		UEIENX |= 1 << TXINE;
-+	}
-+}
-+
-+
-+static bool ep_setup(void)
-+{
-+	struct setup_request setup;
-+
-+	BUG_ON(UEBCLX < 8);
-+
-+	setup.bmRequestType = UEDATX;
-+	setup.bRequest = UEDATX;
-+	setup.wValue = usb_read_word();
-+	setup.wIndex = usb_read_word();
-+	setup.wLength = usb_read_word();
-+
-+	if (!handle_setup(&setup))
-+		return 0;
-+	if (!(setup.bmRequestType & 0x80) && eps[0].state == EP_IDLE)
-+		usb_send(&eps[0], NULL, 0, NULL, NULL);
-+	return 1;
-+}
-+
-+
-+static bool ep_rx(struct ep_descr *ep)
-+{
-+	uint8_t size;
-+
-+	size = UEBCLX;
-+	if (size > ep->end-ep->buf)
-+		return 0;
-+	while (size--)
-+		*ep->buf++ = UEDATX;
-+	if (ep->buf == ep->end) {
-+		ep->state = EP_IDLE;
-+		if (ep->callback)
-+			ep->callback(ep->user);
-+//		if (ep == &eps[0])
-+			usb_send(ep, NULL, 0, NULL, NULL);
-+	}
-+	return 1;
-+}
-+
-+
-+static void ep_tx(struct ep_descr *ep)
-+{
-+	uint8_t size = ep->end-ep->buf;
-+	uint8_t left;
-+
-+	if (size > ep->size)
-+		size = ep->size;
-+	for (left = size; left; left--)
-+		UEDATX = *ep->buf++;
-+	if (size == ep->size)
-+		return;
-+	ep->state = EP_IDLE;
-+}
-+
-+
-+static void handle_ep(int n)
-+{
-+	struct ep_descr *ep = eps+n;
-+	uint8_t mask;
-+
-+	UENUM = n;
-+	if (UEINTX & (1 << RXSTPI)) {
-+		/* @@@ EP_RX. EP_TX: cancel */
-+		ep->state = EP_IDLE;
-+		if (!ep_setup())
-+			goto stall;
-+		UEINTX = ~(1 << RXSTPI);
-+	}
-+	if (UEINTX & (1 << RXOUTI)) {
-+		/* @@ EP_TX: cancel */
-+		if (ep->state != EP_RX)
-+			goto stall;
-+		if (!ep_rx(ep))
-+			goto stall;
-+		/* @@@ gcc 4.5.2 wants this cast */
-+		UEINTX = (uint8_t) ~(1 << RXOUTI | 1 << FIFOCON);
-+	}
-+	if (UEINTX & (1 << STALLEDI)) {
-+		ep->state = EP_IDLE;
-+		UEINTX = ~(1 << STALLEDI);
-+	}
-+	if (UEINTX & (1 << TXINI)) {
-+		/* @@ EP_RX: cancel (?) */
-+		if (ep->state == EP_TX) {
-+			ep_tx(ep);
-+			mask = 1 << TXINI;
-+			if (n)
-+				mask |= 1 << FIFOCON;
-+			UEINTX = ~mask;
-+			if (ep->state == EP_IDLE && ep->callback)
-+				ep->callback(ep->user);
-+		} else {
-+			UEIENX &= ~(1 << TXINE);
-+		}
-+	}
-+	return;
-+
-+stall:
-+	UEINTX = ~(1 << RXSTPI | 1 << RXOUTI | 1 << STALLEDI);
-+	ep->state = EP_IDLE;
-+	UECONX |= 1 << STALLRQ;
-+}
-+
-+
-+void ep_init(void)
-+{
-+	UENUM = 0;
-+	UECONX = (1 << RSTDT) | (1 << EPEN);	/* enable */
-+	UECFG0X = 0;	/* control, direction is ignored */
-+	UECFG1X = 3 << EPSIZE0;	/* 64 bytes */
-+	UECFG1X |= 1 << ALLOC;
-+
-+	while (!(UESTA0X & (1 << CFGOK)));
-+
-+	UEIENX =
-+	    (1 << RXSTPE) | (1 << RXOUTE) | (1 << STALLEDE) | (1 << TXINE);
-+
-+	eps[0].state = EP_IDLE;
-+	eps[0].size = 64;
-+
-+#ifndef BOOT_LOADER
-+
-+	UENUM = 1;
-+	UECONX = (1 << RSTDT) | (1 << EPEN);	/* enable */
-+	UECFG0X = (1 << EPTYPE1) | (1 << EPDIR); /* bulk IN */
-+	UECFG1X = 3 << EPSIZE0;	/* 64 bytes */
-+	UECFG1X |= 1 << ALLOC;
-+
-+	while (!(UESTA0X & (1 << CFGOK)));
-+
-+	UEIENX = (1 << STALLEDE) | (1 << TXINE);
-+
-+	eps[1].state = EP_IDLE;
-+	eps[1].size = 64;
-+
-+#endif
-+}
-+
-+
-+ISR(USB_GEN_vect)
-+{
-+	uint8_t flags;
-+
-+	flags = UDINT;
-+	if (flags & (1 << EORSTI)) {
-+		if (user_reset)
-+			user_reset();
-+		ep_init();
-+		UDINT = ~(1 << EORSTI);
-+	}
-+}
-+
-+
-+ISR(USB_COM_vect)
-+{
-+	uint8_t flags, i;
-+
-+	flags = UEINT;
-+	for (i = 0; i != NUM_EPS; i++)
-+		if (flags & (1 << i))
-+			handle_ep(i);
-+}
-+
-+
-+void usb_reset(void)
-+{
-+	UDCON |= 1 << DETACH;	/* detach the pull-up */
-+	_delay_ms(1);
-+}
-diff --git a/atusb/usb/dfu.c b/atusb/usb/dfu.c
-new file mode 100644
-index 0000000..c84a28d
---- /dev/null
-+++ b/atusb/usb/dfu.c
-@@ -0,0 +1,260 @@
-+/*
-+ * boot/dfu.c - DFU protocol engine
-+ *
-+ * Written 2008-2011, 2013-2015 by Werner Almesberger
-+ * Copyright 2008-2011, 2013-2015 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf
-+ */
-+
-+/*
-+ * A few, erm, shortcuts:
-+ *
-+ * - we don't bother with the app* states since DFU is all this firmware does
-+ * - after DFU_DNLOAD, we just block until things are written, so we never
-+ *   enter dfuDNLOAD_SYNC or dfuDNBUSY
-+ * - no dfuMANIFEST_SYNC, dfuMANIFEST, or dfuMANIFEST_WAIT_RESET
-+ * - to keep our buffers small, we only accept EP0-sized blocks
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+#include "dfu.h"
-+
-+#include "board.h"
-+
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#define debug(...)
-+#define error(...)
-+
-+
-+#ifndef DFU_ALT_SETTINGS
-+#define	DFU_ALT_SETTINGS	1
-+#endif
-+
-+#ifndef DFU_ALT_NAME_0_IDX
-+#define	DFU_ALT_NAME_0_IDX	0
-+#endif
-+
-+#ifndef DFU_ALT_NAME_1_IDX
-+#define	DFU_ALT_NAME_1_IDX	0
-+#endif
-+
-+#ifndef DFU_ALT_NAME_2_IDX
-+#define	DFU_ALT_NAME_2_IDX	0
-+#endif
-+
-+
-+const uint8_t device_descriptor[] = {
-+	18,			/* bLength */
-+	USB_DT_DEVICE,		/* bDescriptorType */
-+	LE(0x100),		/* bcdUSB */
-+	USB_CLASS_APP_SPEC,	/* bDeviceClass */
-+	0x00,			/* bDeviceSubClass (per interface) */
-+	0x00,			/* bDeviceProtocol (per interface) */
-+	EP0_SIZE,		/* bMaxPacketSize */
-+	LE(DFU_USB_VENDOR),	/* idVendor */
-+	LE(DFU_USB_PRODUCT),	/* idProduct */
-+	LE(0x0001),		/* bcdDevice */
-+	0,			/* iManufacturer */
-+	0,			/* iProduct */
-+#ifdef HAS_BOARD_SERNUM
-+	1,			/* iSerialNumber */
-+#else
-+	0,			/* iSerialNumber */
-+#endif
-+	1			/* bNumConfigurations */
-+};
-+
-+
-+const uint8_t config_descriptor[] = {
-+	9,			/* bLength */
-+	USB_DT_CONFIG,		/* bDescriptorType */
-+	LE(9+9*DFU_ALT_SETTINGS), /* wTotalLength */
-+	1,			/* bNumInterfaces */
-+	1,			/* bConfigurationValue (> 0 !) */
-+	0,			/* iConfiguration */
-+//	USB_ATTR_SELF_POWERED | USB_ATTR_BUS_POWERED,
-+	USB_ATTR_BUS_POWERED,	/* bmAttributes */
-+	((BOARD_MAX_mA)+1)/2,	/* bMaxPower */
-+
-+	/* Interface #0 */
-+
-+	DFU_ITF_DESCR(0, 0, dfu_proto_dfu, DFU_ALT_NAME_0_IDX)
-+#if DFU_ALT_SETTINGS > 1
-+	DFU_ITF_DESCR(0, 1, dfu_proto_dfu, DFU_ALT_NAME_1_IDX)
-+#endif
-+#if DFU_ALT_SETTINGS > 2
-+	DFU_ITF_DESCR(0, 2, dfu_proto_dfu, DFU_ALT_NAME_2_IDX)
-+#endif
-+};
-+
-+
-+static uint16_t next_block = 0;
-+static bool did_download;
-+
-+
-+static uint8_t buf[EP0_SIZE];
-+
-+
-+static void block_write(void *user)
-+{
-+	uint16_t *size = user;
-+
-+	dfu_flash_ops->write(buf, *size);
-+}
-+
-+
-+static bool block_receive(uint16_t length)
-+{
-+	static uint16_t size;
-+
-+	if (!dfu_flash_ops->can_write(length)) {
-+		dfu.state = dfuERROR;	
-+		dfu.status = errADDRESS;
-+		return 0;
-+	}
-+	if (length > EP0_SIZE) {
-+		dfu.state = dfuERROR;	
-+		dfu.status = errUNKNOWN;
-+		return 0;
-+	}
-+	size = length;
-+	usb_recv(&eps[0], buf, size, block_write, &size);
-+	return 1;
-+}
-+
-+
-+static bool block_transmit(uint16_t length)
-+{
-+	uint16_t got;
-+
-+	if (length > EP0_SIZE) {
-+		dfu.state = dfuERROR;	
-+		dfu.status = errUNKNOWN;
-+		return 1;
-+	}
-+	got = dfu_flash_ops->read(buf, length);
-+	if (got < length) {
-+		length = got;
-+		dfu.state = dfuIDLE;
-+	}
-+	usb_send(&eps[0], buf, length, NULL, NULL);
-+	return 1;
-+}
-+
-+
-+static bool my_setup(const struct setup_request *setup)
-+{
-+	bool ok;
-+
-+	switch (setup->bmRequestType | setup->bRequest << 8) {
-+	case DFU_TO_DEV(DFU_DETACH):
-+		debug("DFU_DETACH\n");
-+		/*
-+		 * The DFU spec says thay this is sent in protocol 1 only.
-+		 * However, dfu-util also sends it to get out of DFU mode,
-+		 * so we just don't make a fuss and ignore it.
-+		 */
-+		return 1;
-+	case DFU_TO_DEV(DFU_DNLOAD):
-+		debug("DFU_DNLOAD\n");
-+		if (dfu.state == dfuIDLE) {
-+			next_block = setup->wValue;
-+			dfu_flash_ops->start();
-+		}
-+		else if (dfu.state != dfuDNLOAD_IDLE) {
-+			error("bad state\n");
-+			return 0;
-+		}
-+		if (dfu.state != dfuIDLE && setup->wValue == next_block-1) {
-+			debug("retransmisson\n");
-+			return 1;
-+		}
-+		if (setup->wValue != next_block) {
-+			debug("bad block (%d vs. %d)\n",
-+			    setup->wValue, next_block);
-+			dfu.state = dfuERROR;
-+			dfu.status = errUNKNOWN;
-+			return 1;
-+		}
-+		if (!setup->wLength) {
-+			debug("DONE\n");
-+			dfu_flash_ops->end_write();
-+			dfu.state = dfuIDLE;
-+			did_download = 1;
-+			return 1;
-+		}
-+		ok = block_receive(setup->wLength);
-+		next_block++;
-+		dfu.state = dfuDNLOAD_IDLE;
-+		return ok;
-+	case DFU_FROM_DEV(DFU_UPLOAD):
-+		debug("DFU_UPLOAD\n");
-+		if (dfu.state == dfuIDLE) {
-+			next_block = setup->wValue;
-+			dfu_flash_ops->start();
-+		}
-+		else if (dfu.state != dfuUPLOAD_IDLE)
-+			return 0;
-+		if (dfu.state != dfuIDLE && setup->wValue == next_block-1) {
-+			debug("retransmisson\n");
-+			/* @@@ try harder */
-+			dfu.state = dfuERROR;
-+			dfu.status = errUNKNOWN;
-+			return 1;
-+		}
-+		if (setup->wValue != next_block) {
-+			debug("bad block (%d vs. %d)\n",
-+			    setup->wValue, next_block);
-+			dfu.state = dfuERROR;
-+			dfu.status = errUNKNOWN;
-+			return 1;
-+		}
-+		ok = block_transmit(setup->wLength);
-+		next_block++;
-+		dfu.state = dfuUPLOAD_IDLE;
-+		return ok;
-+	case DFU_TO_DEV(DFU_ABORT):
-+		debug("DFU_ABORT\n");
-+		dfu.state = dfuIDLE;
-+		dfu.status = OK;
-+		return 1;
-+	default:
-+		return dfu_setup_common(setup);
-+	}
-+}
-+
-+
-+static void my_reset(void)
-+{
-+#if 0
-+	/* @@@ not nice -- think about where this should go */
-+	extern void run_payload(void);
-+
-+	if (did_download)
-+		run_payload();
-+#endif
-+}
-+
-+
-+void dfu_init(void)
-+{
-+	user_setup = my_setup;
-+	user_get_descriptor = dfu_my_descr;
-+	user_reset = my_reset;
-+}
-diff --git a/atusb/usb/dfu.h b/atusb/usb/dfu.h
-new file mode 100644
-index 0000000..bc35bbc
---- /dev/null
-+++ b/atusb/usb/dfu.h
-@@ -0,0 +1,119 @@
-+/*
-+ * boot/dfu.h - DFU protocol constants and data structures
-+ *
-+ * Written 2008, 2011, 2013-2015 by Werner Almesberger
-+ * Copyright 2008, 2011, 2013-2015 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#ifndef DFU_H
-+#define DFU_H
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+
-+
-+enum dfu_request {
-+	DFU_DETACH,
-+	DFU_DNLOAD,
-+	DFU_UPLOAD,
-+	DFU_GETSTATUS,
-+	DFU_CLRSTATUS,
-+	DFU_GETSTATE,
-+	DFU_ABORT,
-+};
-+
-+
-+enum dfu_status {
-+	OK,
-+	errTARGET,
-+	errFILE,
-+	errWRITE,
-+	errERASE,
-+	errCHECK_ERASED,
-+	errPROG,
-+	errVERIFY,
-+	errADDRESS,
-+	errNOTDONE,
-+	errFIRMWARE,
-+	errVENDOR,
-+	errUSBR,
-+	errPOR,
-+	errUNKNOWN,
-+	errSTALLEDPKT,
-+};
-+
-+
-+enum dfu_state {
-+	appIDLE,
-+	appDETACH,
-+	dfuIDLE,
-+	dfuDNLOAD_SYNC,
-+	dfuDNBUSY,
-+	dfuDNLOAD_IDLE,
-+	dfuMANIFEST_SYNC,
-+	dfuMANIFEST,
-+	dfuMANIFEST_WAIT_RESET,
-+	dfuUPLOAD_IDLE,
-+	dfuERROR
-+};
-+
-+enum dfu_itf_proto {
-+	dfu_proto_runtime	= 1,	/* Runtime protocol */
-+	dfu_proto_dfu		= 2,	/* DFU mode protocol */
-+};
-+
-+
-+#define DFU_DT_FUNCTIONAL	0x21	/* DFU FUNCTIONAL descriptor type */
-+
-+
-+#define	DFU_TO_DEV(req)		(0x21 | (req) << 8)
-+#define	DFU_FROM_DEV(req)	(0xa1 | (req) << 8)
-+
-+
-+struct dfu {
-+	uint8_t status;		/* bStatus */
-+	uint8_t toL, toM, toH;	/* bwPollTimeout */
-+	uint8_t state;		/* bState */
-+	uint8_t iString;
-+};
-+
-+
-+#define	DFU_ITF_DESCR(itf, alt, proto, idx)				     \
-+	9,			/* bLength */				     \
-+	USB_DT_INTERFACE,	/* bDescriptorType */			     \
-+	(itf),			/* bInterfaceNumber */			     \
-+	(alt),			/* bAlternateSetting */			     \
-+	0,			/* bNumEndpoints */			     \
-+	0xfe,			/* bInterfaceClass (application specific) */ \
-+	0x01,			/* bInterfaceSubClass (device fw upgrade) */ \
-+	(proto),		/* bInterfaceProtocol (dfu_proto_*) */	     \
-+	(idx),			/* iInterface */
-+
-+
-+struct dfu_flash_ops {
-+	void (*start)(void);
-+	bool (*can_write)(uint16_t size);
-+	void (*write)(const uint8_t *buf, uint16_t size);
-+	void (*end_write)(void);
-+	uint16_t (*read)(uint8_t *buf, uint16_t size);
-+};
-+
-+extern struct dfu dfu;
-+extern const struct dfu_flash_ops *dfu_flash_ops;
-+
-+
-+bool dfu_setup_common(const struct setup_request *setup);
-+bool dfu_my_descr(uint8_t type, uint8_t index, const uint8_t **reply,
-+    uint8_t *size);
-+
-+void dfu_init(void);
-+
-+#endif /* !DFU_H */
-diff --git a/atusb/usb/dfu_common.c b/atusb/usb/dfu_common.c
-new file mode 100644
-index 0000000..9b6feef
---- /dev/null
-+++ b/atusb/usb/dfu_common.c
-@@ -0,0 +1,101 @@
-+/*
-+ * boot/dfu_common.c - DFU protocol engine parts common to App/DFU
-+ *
-+ * Written 2008-2011, 2013-2014 by Werner Almesberger
-+ * Copyright 2008-2011, 2013-2014 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf
-+ */
-+
-+/*
-+ * A few, erm, shortcuts:
-+ *
-+ * - we don't bother with the app* states since DFU is all this firmware does
-+ * - after DFU_DNLOAD, we just block until things are written, so we never
-+ *   enter dfuDNLOAD_SYNC or dfuDNBUSY
-+ * - no dfuMANIFEST_SYNC, dfuMANIFEST, or dfuMANIFEST_WAIT_RESET
-+ * - to keep our buffers small, we only accept EP0-sized blocks
-+ */
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+#include "dfu.h"
-+
-+#include "board.h"
-+#include "../sernum.h"
-+
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#define debug(...)
-+#define error(...)
-+
-+
-+static const uint8_t functional_descriptor[] = {
-+	9,			/* bLength */
-+	DFU_DT_FUNCTIONAL,	/* bDescriptorType */
-+	0xf,			/* bmAttributes (claim omnipotence :-) */
-+	LE(0xffff),		/* wDetachTimeOut (we're very patient) */
-+	LE(EP0_SIZE),		/* wTransferSize */
-+	LE(0x101),		/* bcdDFUVersion */
-+};
-+
-+
-+/*
-+ * The worst-case activity would be flashing a one page and erasing another
-+ * one, would should take less than 10 ms. A 100 ms timeout ought to be plenty.
-+ */
-+
-+struct dfu dfu = {
-+	OK,			/* bStatus */
-+	LE(100), 0,		/* bwPollTimeout, 100 ms */
-+	dfuIDLE,		/* bState */
-+	0,			/* iString */
-+};
-+
-+
-+bool dfu_setup_common(const struct setup_request *setup)
-+{
-+	switch (setup->bmRequestType | setup->bRequest << 8) {
-+	case DFU_FROM_DEV(DFU_GETSTATUS):
-+		debug("DFU_GETSTATUS\n");
-+		usb_send(&eps[0], (uint8_t *) &dfu, sizeof(dfu), NULL, NULL);
-+		return 1;
-+	case DFU_TO_DEV(DFU_CLRSTATUS):
-+		debug("DFU_CLRSTATUS\n");
-+		dfu.state = dfuIDLE;
-+		dfu.status = OK;
-+		return 1;
-+	case DFU_FROM_DEV(DFU_GETSTATE):
-+		debug("DFU_GETSTATE\n");
-+		usb_send(&eps[0], &dfu.state, 1, NULL, NULL);
-+		return 1;
-+	default:
-+		error("DFU rt %x, rq%x ?\n",
-+		    setup->bmRequestType, setup->bRequest);
-+		return 0;
-+	}
-+}
-+
-+
-+bool dfu_my_descr(uint8_t type, uint8_t index, const uint8_t **reply,
-+    uint8_t *size)
-+{
-+	if (type != DFU_DT_FUNCTIONAL)
-+		return sernum_get_descr(type, index, reply, size);
-+	*reply = functional_descriptor;
-+	*size = sizeof(functional_descriptor);
-+	return 1;
-+}
-diff --git a/atusb/usb/usb.c b/atusb/usb/usb.c
-new file mode 100644
-index 0000000..543d8c2
---- /dev/null
-+++ b/atusb/usb/usb.c
-@@ -0,0 +1,181 @@
-+/*
-+ * fw/usb/usb.c - USB hardware setup and standard device requests
-+ *
-+ * Written 2008-2011, 2013, 2015 by Werner Almesberger
-+ * Copyright 2008-2011, 2013, 2015 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * Known issues:
-+ * - no suspend/resume
-+ * - should support EP clearing and stalling
-+ */
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+#include "usb.h"
-+#include "board.h"
-+
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#if 1
-+extern void panic(void);
-+#define BUG_ON(cond)	do { if (cond) panic(); } while (0)
-+#else
-+#define BUG_ON(cond)
-+#endif
-+
-+bool (*user_setup)(const struct setup_request *setup);
-+void (*user_set_interface)(int nth);
-+bool (*user_get_descriptor)(uint8_t type, uint8_t index,
-+    const uint8_t **reply, uint8_t *size);
-+void (*user_reset)(void);
-+
-+
-+void usb_io(struct ep_descr *ep, enum ep_state state, uint8_t *buf,
-+    uint8_t size, void (*callback)(void *user), void *user)
-+{
-+	BUG_ON(ep->state);
-+	ep->state = state;
-+	ep->buf = buf;
-+	ep->end = buf+size;
-+	ep->callback = callback;
-+	ep->user = user;
-+	usb_ep_change(ep);
-+}
-+
-+
-+static bool get_descriptor(uint8_t type, uint8_t index, uint16_t length)
-+{
-+	const uint8_t *reply;
-+	uint8_t size;
-+
-+	switch (type) {
-+	case USB_DT_DEVICE:
-+		reply = device_descriptor;
-+		size = reply[0];
-+		break;
-+	case USB_DT_CONFIG:
-+		if (index)
-+			return 0;
-+		reply = config_descriptor;
-+		size = reply[2];
-+		break;
-+	default:
-+		if (!user_get_descriptor)
-+			return 0;
-+		if (!user_get_descriptor(type, index, &reply, &size))
-+			return 0;
-+	}
-+	if (length < size)
-+		size = length;
-+	usb_send(&eps[0], reply, size, NULL, NULL);
-+	return 1;
-+}
-+
-+
-+bool handle_setup(const struct setup_request *setup)
-+{
-+	switch (setup->bmRequestType | setup->bRequest << 8) {
-+
-+	/*
-+	 * Device request
-+	 *
-+	 * See http://www.beyondlogic.org/usbnutshell/usb6.htm
-+	 */
-+
-+	case FROM_DEVICE(GET_STATUS):
-+		if (setup->wLength != 2)
-+			return 0;
-+		usb_send(&eps[0], "\000", 2, NULL, NULL);
-+		break;
-+	case TO_DEVICE(CLEAR_FEATURE):
-+		break;
-+	case TO_DEVICE(SET_FEATURE):
-+		return 0;
-+	case TO_DEVICE(SET_ADDRESS):
-+		set_addr(setup->wValue);
-+		break;
-+	case FROM_DEVICE(GET_DESCRIPTOR):
-+	case FROM_INTERFACE(GET_DESCRIPTOR):
-+		if (!get_descriptor(setup->wValue >> 8, setup->wValue,
-+		    setup->wLength))
-+			return 0;
-+		break;
-+	case TO_DEVICE(SET_DESCRIPTOR):
-+		return 0;
-+	case FROM_DEVICE(GET_CONFIGURATION):
-+		usb_send(&eps[0], "", 1, NULL, NULL);
-+		break;
-+	case TO_DEVICE(SET_CONFIGURATION):
-+		if (setup->wValue != config_descriptor[5])
-+			return 0;
-+		break;
-+
-+	/*
-+	 * Interface request
-+	 */
-+
-+	case FROM_INTERFACE(GET_STATUS):
-+		return 0;
-+	case TO_INTERFACE(CLEAR_FEATURE):
-+		return 0;
-+	case TO_INTERFACE(SET_FEATURE):
-+		return 0;
-+	case FROM_INTERFACE(GET_INTERFACE):
-+		return 0;
-+	case TO_INTERFACE(SET_INTERFACE):
-+		{
-+			const uint8_t *interface_descriptor =
-+			    config_descriptor+9;
-+			const uint8_t *p;
-+			int i;
-+
-+			i = 0;
-+			for (p = interface_descriptor;
-+			    p != config_descriptor+config_descriptor[2];
-+			    p += p[0]) {
-+				if (p[1] != USB_DT_INTERFACE)
-+					continue;
-+				if (p[2] == setup->wIndex &&
-+				    p[3] == setup->wValue) {
-+					if (user_set_interface)
-+						user_set_interface(i);
-+					return 1;
-+				}
-+				i++;
-+			}
-+			return 0;
-+		}
-+		break;
-+
-+	/*
-+	 * Endpoint request
-+	 */
-+
-+	case FROM_ENDPOINT(GET_STATUS):
-+		return 0;
-+	case TO_ENDPOINT(CLEAR_FEATURE):
-+		return 0;
-+	case TO_ENDPOINT(SET_FEATURE):
-+		return 0;
-+	case FROM_ENDPOINT(SYNCH_FRAME):
-+		return 0;
-+
-+	default:
-+		if (user_setup)
-+			return user_setup(setup);
-+		return 0;
-+	}
-+
-+	return 1;
-+}
-diff --git a/atusb/usb/usb.h b/atusb/usb/usb.h
-new file mode 100644
-index 0000000..cb40f9e
---- /dev/null
-+++ b/atusb/usb/usb.h
-@@ -0,0 +1,189 @@
-+/*
-+ * fw/usb//usb.h - USB hardware setup and standard device requests
-+ *
-+ * Written 2008, 2009, 2011, 2013, 2015 by Werner Almesberger
-+ * Copyright 2008, 2009, 2011, 2013, 2015 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#ifndef USB_H
-+#define USB_H
-+
-+
-+#include <stdbool.h>
-+#include <stdint.h>
-+
-+
-+/*
-+ * Packet identifier types
-+ */
-+
-+#define	PID_OUT		0x1
-+#define	PID_IN		0x9
-+#define	PID_SOF		0x5
-+#define	PID_SETUP	0xd
-+#define	PID_DATA0	0x3
-+#define	PID_DATA1	0xb
-+#define	PID_ACK		0x2
-+#define	PID_NAK		0xa
-+#define	PID_STALL	0xe
-+
-+/*
-+ * Descriptor types
-+ *
-+ * Reuse libusb naming scheme (/usr/include/usb.h)
-+ */
-+
-+#define	USB_DT_DEVICE		1
-+#define	USB_DT_CONFIG		2
-+#define	USB_DT_STRING		3
-+#define	USB_DT_INTERFACE	4
-+#define	USB_DT_ENDPOINT		5
-+
-+/*
-+ * Device classes
-+ *
-+ * Reuse libusb naming scheme (/usr/include/usb.h)
-+ */
-+
-+#define USB_CLASS_PER_INTERFACE	0
-+#define	USB_CLASS_COMM		2
-+#define	USB_CLASS_HID		3
-+#define	USB_CLASS_MASS_STORAGE	8
-+#define	USB_CLASS_HUB		9
-+#define	USB_CLASS_DATA		10
-+#define	USB_CLASS_APP_SPEC	0xfe
-+#define USB_CLASS_VENDOR_SPEC	0xff
-+
-+/*
-+ * Configuration attributes
-+ */
-+
-+#define	USB_ATTR_BUS_POWERED	0x80
-+#define	USB_ATTR_SELF_POWERED	0x40
-+#define	USB_ATTR_REMOTE_WAKEUP	0x20
-+
-+/*
-+ * Endpoint type
-+ */
-+
-+#define	USB_ENDPOINT_TYPE_CONTROL	0
-+#define	USB_ENDPOINT_TYPE_ISOCHRONOUS	1
-+#define	USB_ENDPOINT_TYPE_BULK		2
-+#define	USB_ENDPOINT_TYPE_INTERRUPT	3
-+
-+/*
-+ * Setup request types
-+ */
-+
-+#define	TO_DEVICE(req)		(0x00 | (req) << 8)
-+#define	FROM_DEVICE(req)	(0x80 | (req) << 8)
-+#define	TO_INTERFACE(req)	(0x01 | (req) << 8)
-+#define	FROM_INTERFACE(req)	(0x81 | (req) << 8)
-+#define	TO_ENDPOINT(req)	(0x02 | (req) << 8)
-+#define	FROM_ENDPOINT(req)	(0x82 | (req) << 8)
-+
-+/*
-+ * Setup requests
-+ */
-+
-+#define	GET_STATUS		0x00
-+#define	CLEAR_FEATURE		0x01
-+#define	SET_FEATURE		0x03
-+#define	SET_ADDRESS		0x05
-+#define	GET_DESCRIPTOR		0x06
-+#define	SET_DESCRIPTOR		0x07
-+#define	GET_CONFIGURATION	0x08
-+#define	SET_CONFIGURATION	0x09
-+#define	GET_INTERFACE		0x0a
-+#define	SET_INTERFACE		0x0b
-+#define	SYNCH_FRAME		0x0c
-+
-+/*
-+ * USB Language ID codes
-+ *
-+ * http://www.usb.org/developers/docs/USB_LANGIDs.pdf
-+ */
-+
-+#define	USB_LANGID_ENGLISH_US	0x409
-+
-+
-+/*
-+ * Odd. sdcc seems to think "x" assumes the size of the destination, i.e.,
-+ * uint8_t. Hence the cast.
-+ */
-+
-+#define LE(x) ((uint16_t) (x) & 0xff), ((uint16_t) (x) >> 8)
-+
-+#define LO(x) (((uint8_t *) &(x))[0])
-+#define HI(x) (((uint8_t *) &(x))[1])
-+
-+
-+#ifdef LOW_SPEED
-+#define	EP0_SIZE	8
-+#else
-+#define	EP0_SIZE	64
-+#endif
-+
-+#define	EP1_SIZE	64	/* simplify */
-+
-+
-+enum ep_state {
-+	EP_IDLE,
-+	EP_RX,
-+	EP_TX,
-+	EP_STALL,
-+};
-+
-+struct ep_descr {
-+	enum ep_state state;
-+	uint8_t *buf;
-+	uint8_t *end;
-+	uint8_t size;
-+	void (*callback)(void *user);
-+	void *user;
-+};
-+
-+struct setup_request {
-+	uint8_t bmRequestType;
-+	uint8_t bRequest;
-+	uint16_t wValue;
-+	uint16_t wIndex;
-+	uint16_t wLength;
-+};
-+
-+
-+extern const uint8_t device_descriptor[];
-+extern const uint8_t config_descriptor[];
-+extern struct ep_descr eps[];
-+
-+extern bool (*user_setup)(const struct setup_request *setup);
-+extern void (*user_set_interface)(int nth);
-+extern bool (*user_get_descriptor)(uint8_t type, uint8_t index,
-+    const uint8_t **reply, uint8_t *size);
-+extern void (*user_reset)(void);
-+
-+
-+#define	usb_left(ep) ((ep)->end-(ep)->buf)
-+#define usb_send(ep, buf, size, callback, user) \
-+	usb_io(ep, EP_TX, (void *) buf, size, callback, user)
-+#define usb_recv(ep, buf, size, callback, user) \
-+	usb_io(ep, EP_RX, buf, size, callback, user)
-+
-+void usb_io(struct ep_descr *ep, enum ep_state state, uint8_t *buf,
-+    uint8_t size, void (*callback)(void *user), void *user);
-+
-+bool handle_setup(const struct setup_request *setup);
-+void set_addr(uint8_t addr);
-+void usb_ep_change(struct ep_descr *ep);
-+void usb_reset(void);
-+void usb_init(void);
-+
-+void ep_init(void);
-+
-+#endif /* !USB_H */
-diff --git a/atusb/version.h b/atusb/version.h
-new file mode 100644
-index 0000000..8fd6a2c
---- /dev/null
-+++ b/atusb/version.h
-@@ -0,0 +1,23 @@
-+/*
-+ * fw/version.h - Automatically generated version string
-+ *
-+ * Written 2008, 2011 by Werner Almesberger
-+ * Copyright 2008, 2011 Werner Almesberger
-+ *
-+ * 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.
-+ */
-+
-+
-+#ifndef VERSION_H
-+#define VERSION_H
-+
-+#include <stdint.h>
-+
-+
-+extern const char *build_date;
-+extern const uint16_t build_number;
-+
-+#endif /* !VERSION_H */
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch b/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch
deleted file mode 100644
index 038b518..0000000
--- a/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 02054c86c9fce8978cc7372b758339191cc9f6d6 Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 16:34:28 -0700
-Subject: [PATCH 3/8] Update INSTALL document
-
-To include the correct package name for GCC-AVR and improved
-descriptions.
----
- INSTALL | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/INSTALL b/INSTALL
-index 7fb1116..9ea6dad 100644
---- a/INSTALL
-+++ b/INSTALL
-@@ -16,14 +16,14 @@ In order to build everything you will need the following on the host
- system:
- 
-     * A C/C++ compiler, like GCC
--    * AVR-GCC
--    * Standard C library for AVR-GCC
-     * Cmake
-     * GNU Bison/YACC
-     * GNU Flex
-     * GNU Gperf
-     * GNU Make
-     * GNU Wget
-+    * GNU C cross-compiler for AVR
-+    * Standard C library for Atmel AVR
-     * GNU C cross-compiler for ARM:
-         - arm-linux-gnueabi-gcc
-         - arm-linux-gnueabi-ld
-@@ -34,7 +34,7 @@ system:
- 
- On GNU/Linux distros that use apt you can install these with:
- 
--    apt install avr-gcc avr-libc binutils-arm-linux-gnueabi \
-+    apt install gcc-avr avr-libc binutils-arm-linux-gnueabi \
-     binutils-arm-none-eabi bison cmake flex g++ gcc \
-     gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget
- 
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0004-atusb-Build-updates.patch b/libre/linux-libre-firmware/0004-atusb-Build-updates.patch
deleted file mode 100644
index 6411835..0000000
--- a/libre/linux-libre-firmware/0004-atusb-Build-updates.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From d6bb7bf71810db1b02dec985e8383594c193f55f Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 16:57:58 -0700
-Subject: [PATCH 4/8] atusb: Build updates
-
-Update the root level Makefile to both invoke "make atusb.dfu" when
-building.
-
-Update the INSTALL document to mention the dependency on dfu-util.
-
-Update the root level Makefile to install atusb.dfu if it's compiled.
-Even though the kernel itself doesn't load the firmware into the
-device this will ensure that pre-compiled firmware is included in the
-release tarballs.
----
- INSTALL  | 5 +++--
- Makefile | 3 ++-
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/INSTALL b/INSTALL
-index 9ea6dad..70c4381 100644
---- a/INSTALL
-+++ b/INSTALL
-@@ -17,6 +17,7 @@ system:
- 
-     * A C/C++ compiler, like GCC
-     * Cmake
-+    * dfu-util - Device Firmware Upgrade Utilities
-     * GNU Bison/YACC
-     * GNU Flex
-     * GNU Gperf
-@@ -35,7 +36,7 @@ system:
- On GNU/Linux distros that use apt you can install these with:
- 
-     apt install gcc-avr avr-libc binutils-arm-linux-gnueabi \
--    binutils-arm-none-eabi bison cmake flex g++ gcc \
-+    binutils-arm-none-eabi bison cmake dfu-util flex g++ gcc \
-     gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget
- 
- CARL9170 Firmware Configuration
-@@ -48,7 +49,7 @@ atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter
- 
- To flash the firmware you need dfu-util on the host. Issue
- 
--    make dfu
-+    dfu-util -d 20b7:1540 -D atusb.dfu
- 
- right after plugging the device into the USB port while the red led is
- still on.
-diff --git a/Makefile b/Makefile
-index 8474b30..51f708d 100644
---- a/Makefile
-+++ b/Makefile
-@@ -37,7 +37,7 @@ ath9k_htc: ath9k_htc_toolchain
- 	cd ath9k_htc && $(MAKE) -C target_firmware
- 
- atusb:
--	cd atusb && $(MAKE)
-+	cd atusb && $(MAKE) atusb.dfu
- 
- av7110:
- 	cd av7110 && $(MAKE)
-@@ -103,6 +103,7 @@ install:
- 		ln -s ath9k_htc/htc_9271-1.4.0.fw $(prefix)/htc_9271.fw; fi;
- 	if [ -a ath9k_htc/target_firmware/htc_7010.fw ]; then $(install_program) -D ath9k_htc/target_firmware/htc_7010.fw $(prefix)/ath9k_htc/htc_7010-1.4.0.fw && \
- 		ln -s ath9k_htc/htc_7010-1.4.0.fw $(prefix)/htc_7010.fw; fi;
-+        if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi;
- 	if [ -a av7110/bootcode.bin ]; then $(install_program) -D av7110/bootcode.bin $(prefix)/av7110/bootcode.bin; fi;
- 	if [ -a cis/3CCFEM556.cis ]; then $(install_program) -D cis/3CCFEM556.cis $(prefix)/cis/3CCFEM556.cis; fi;
- 	if [ -a cis/3CXEM556.cis ]; then $(install_program) -D cis/3CXEM556.cis $(prefix)/cis/3CXEM556.cis; fi;
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch b/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch
deleted file mode 100644
index 8dafb6b..0000000
--- a/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 06147f83be16e7ab5e08c280c61e015b60bd0acc Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 17:14:30 -0700
-Subject: [PATCH 6/8] Makefile: Change spaces for atusb to tab
-
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 51f708d..b5c5d05 100644
---- a/Makefile
-+++ b/Makefile
-@@ -103,7 +103,7 @@ install:
- 		ln -s ath9k_htc/htc_9271-1.4.0.fw $(prefix)/htc_9271.fw; fi;
- 	if [ -a ath9k_htc/target_firmware/htc_7010.fw ]; then $(install_program) -D ath9k_htc/target_firmware/htc_7010.fw $(prefix)/ath9k_htc/htc_7010-1.4.0.fw && \
- 		ln -s ath9k_htc/htc_7010-1.4.0.fw $(prefix)/htc_7010.fw; fi;
--        if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi;
-+	if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi;
- 	if [ -a av7110/bootcode.bin ]; then $(install_program) -D av7110/bootcode.bin $(prefix)/av7110/bootcode.bin; fi;
- 	if [ -a cis/3CCFEM556.cis ]; then $(install_program) -D cis/3CCFEM556.cis $(prefix)/cis/3CCFEM556.cis; fi;
- 	if [ -a cis/3CXEM556.cis ]; then $(install_program) -D cis/3CXEM556.cis $(prefix)/cis/3CXEM556.cis; fi;
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch b/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch
deleted file mode 100644
index 1da3c00..0000000
--- a/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From b43de635d524d519e47bcba78d081a0f811584b1 Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 18:34:05 -0700
-Subject: [PATCH 7/8] Makefile: Add atusb to 'all'
-
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index b5c5d05..b5bfb47 100644
---- a/Makefile
-+++ b/Makefile
-@@ -19,7 +19,7 @@ install_program=install
- 
- .PHONY:	all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc atusb av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux
- 
--all: aica ath9k_htc av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux
-+all: aica ath9k_htc atusb av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux
- 
- a56:
- 	cd a56 && $(MAKE)
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch b/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch
deleted file mode 100644
index 6029cd5..0000000
--- a/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From a4d24e3a224a19404bc3ac98389ff376198c85ef Mon Sep 17 00:00:00 2001
-From: Jason Self <j@jxself.org>
-Date: Thu, 4 Jul 2019 18:37:45 -0700
-Subject: [PATCH 8/8] Makefile: Set shell to /bin/bash
-
----
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index b5bfb47..5e38d94 100644
---- a/Makefile
-+++ b/Makefile
-@@ -13,7 +13,7 @@
- # You should have received a copy of the GNU General Public License
- # along with this program.  If not, see <http://www.gnu.org/licenses/>.
- 
--shell=/bin/sh
-+shell=/bin/bash
- prefix=/lib/firmware
- install_program=install
- 
--- 
-2.26.0
-
diff --git a/libre/linux-libre-firmware/PKGBUILD b/libre/linux-libre-firmware/PKGBUILD
index 68e9145..1c99507 100644
--- a/libre/linux-libre-firmware/PKGBUILD
+++ b/libre/linux-libre-firmware/PKGBUILD
@@ -4,18 +4,18 @@
 # Contributor: Luke Shumaker <lukeshu@sbcglobal.net>
 
 pkgname=linux-libre-firmware
-pkgver=1.3.1
-pkgrel=2
+pkgver=1.4
+pkgrel=1
 epoch=1
 pkgdesc='Firmware files for Linux-libre'
 arch=(any)
 url='https://jxself.org/firmware'
 license=(GPL3)
-makedepends=(arm-linux-gnueabi-gcc # av7110
-             arm-none-eabi-gcc # aica
-             avr-gcc avr-libc dfu-util # atusb
-             sh-elf-gcc sh-elf-newlib cmake # carl9170fw
-             xtensa-elf-gcc # ath9k_htc
+makedepends=(arm-linux-gnueabi-gcc           # av7110
+             arm-none-eabi-gcc               # aica
+             avr-gcc avr-libc dfu-util       # atusb
+             sh-elf-gcc sh-elf-newlib cmake  # carl9170fw
+             xtensa-elf-gcc                  # ath9k_htc
 )
 optdepends=('dfu-util: to flash the atusb firmware')
 provides=(linux-firmware)
@@ -36,29 +36,13 @@ conflicts=(linux-firmware
            ath9k-htc-firmware)
 replaces=(${conflicts[@]})
 options=(!buildflags !makeflags)
-source=(
-  "$url/$pkgname-$pkgver.tar.lz"{,.asc}
-  0001-Update-carl9170-to-latest-upstream.patch
-  0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch
-  0003-Update-INSTALL-document.patch
-  0004-atusb-Build-updates.patch
-  0006-Makefile-Change-spaces-for-atusb-to-tab.patch
-  0007-Makefile-Add-atusb-to-all.patch
-  0008-Makefile-Set-shell-to-bin-bash.patch
-)
-sha512sums=('d827ec7024b4900dcdf6af8cdd4e72b02596d0ade5c2262460cd573785300498e6aa655b9a59cd22e38a6a787826a564ae33acfac52e68df1d082445e66f18df'
-            'SKIP'
-            '07263a406cb15c9f91f41c8fb6d4307875665b8106adf526353d64306611458e11ce311842caa9efa623091c897ec9f87cfe54584c9c47590195867958cf4086'
-            'a4e8752cfee8dfd0b17ff798d2b5ea7a773ebcf688f7614d1c1a92fe7f092c626a289069a472bc873a77c9cf52f1e37953b0ba47c37a9dfb2a763a695ca77625'
-            '1665ce62de148383fe4f30aa5714ef6bb1dfd4eed110415995069830b36a4b1aafb05e4cd6cf428dc0817e2affb91740e41b3fab8d2385683d6c18790bbf5afd'
-            '0168ba0f3a8f3938a96b7f72d081283ca04b7ba90c5474d8ccf0716d6964137980f49623c5489271158a48827319a20ee4f19bd94f5bb956ee97d5ba637070c1'
-            'fa006627935beb7ae78fad5b63423a54e4eae384761ff618fff173250fb5d0c7eef9d5a707733d037edc95259ef59c9053c4245b80a004928b6809ea1cb43cf8'
-            '8014d9eccb4c5193d1b4b056e163b5631c207adc78522e413650eb053c90e7b9e333c9e5cb6f73b63985e27020f4c69e7b791176702c55f711f6db95387e6bff'
-            '59560f16978b2fd7d8c828d7609ee4f71cbdc902b70cfb87feca686958dd4df05c61c5e1bfa5e0c2a060f23185a0b9e5d07d487e172764767cdc4b26a6240b79')
+source=("$url/$pkgname-$pkgver.tar.lz"{,.asc})
+sha512sums=('3b4c8afb63c55f05df0b2686459c6bb2c0cb56db8384d5527506ff4a14b8de80e1a3037a9b57cccccd6953d869c6a71a6500c4c7b735253ea0b57c79854d9457'
+            'SKIP')
 validpgpkeys=('F611A908FFA165C699584ED49D0DB31B545A3198') # Jason Self
 
 prepare(){
-  cd $pkgname-$pkgver/src
+  cd "$pkgname-$pkgver/src"
 
   local src
   for src in "${source[@]}"; do
@@ -69,25 +53,27 @@ prepare(){
     patch -Np1 < "$srcdir/$src"
   done
 
-  # Use our cross compilers and build carl9170fw with the default config
+  # Use our cross compilers
   sed -e 's|$PWD/../toolchain/inst/bin/||g' \
-      -e 's|${CMAKE_SOURCE_DIR}/toolchain/inst/bin/||g' \
+      -i ath9k_htc/target_firmware/configure
+  sed -e 's|${CMAKE_SOURCE_DIR}/toolchain/inst/bin/||g' \
       -e '/CMAKE_FIND_ROOT_PATH/d' \
-      -e 's/: ath9k_htc_toolchain$/:/' \
+      -i carl9170fw/extra/sh-elf-linux.cmake
+
+  # Remove toolchains and build carl9170fw with the default config
+  sed -e 's/: ath9k_htc_toolchain$/:/' \
       -e 's/: carl9170fw-toolchain$/:/' \
       -e '/cd carl9170fw && .\/autogen.sh$/ s/$/ --alldefconfig/' \
-      -i Makefile \
-         ath9k_htc/target_firmware/configure \
-         carl9170fw/extra/sh-elf-linux.cmake
+      -i Makefile
 }
 
 build(){
-  make -C $pkgname-$pkgver/src
+  make -C "$pkgname-$pkgver/src"
 }
 
 package(){
-  cd $pkgname-$pkgver/src
+  cd "$pkgname-$pkgver/src"
 
-  make prefix=$pkgdir/usr/lib/firmware install
-  install -Dm644 WHENCE $pkgdir/usr/share/licenses/$pkgname/WHENCE
+  make prefix="$pkgdir/usr/lib/firmware install"
+  install -Dm644 WHENCE "$pkgdir/usr/share/licenses/$pkgname/WHENCE"
 }

From ee2601c074ecde286b965de7b07947b9e02e0fb8 Mon Sep 17 00:00:00 2001
From: Parabola automatic package builder <dev@lists.parabolagnulinux.org>
Date: Oct 14 2021 23:32:53 +0000
Subject: [PATCH 16/23] Update libre/your-freedom


---

diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD
index 98779ff..f833775 100644
--- a/libre/your-freedom/PKGBUILD
+++ b/libre/your-freedom/PKGBUILD
@@ -4,8 +4,8 @@ pkgname=your-freedom
 pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free."
 license=('GPL3')
 url="https://git.parabola.nu/blacklist.git"
-pkgver=20210928
-_gitver=7d2e711096135e4f5c160fc739e23fd1ec7a3c07
+pkgver=20211014
+_gitver=00c03ece88c2cb7d7d45fae45d01950378cfef91
 pkgrel=1
 
 arch=('any')
@@ -13,7 +13,7 @@ install=${pkgname}.install
 
 makedepends=(librelib)
 source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver})
-sha512sums=('746be9d938a565a99dc3a2a273b580e0c7c2026a14f727bb09a996eacfbb40ce25ca62db58caa462f5546c60dd7be6b5f87cd65e2ab3fd843d4662a77f3ce827')
+sha512sums=('b697ec86dbf8dbe8abfba4124be696eab60267961b7adf513a8033ed8f9978ecd52d4c719dd2a0af72274f9e683951cee45901ac372dc07a6b0f46a6d635a3c9')
 
 
 package() {

From 9ffd901c919987a590cfea19a5c2bb6be81ddaaa Mon Sep 17 00:00:00 2001
From: David P <megver83@parabola.nu>
Date: Oct 18 2021 12:43:46 +0000
Subject: [PATCH 17/23] linux-libre-lts: don't build htmldocs (armv7h)


Signed-off-by: David P <megver83@parabola.nu>

---

diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 55a4c7d..653a7ac 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -9,6 +9,8 @@
 
 # Based on linux-lts package
 
+# NOTE: Don't build htmldocs due to an error in sphinx (armv7h only)
+
 _replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix
 _replacesoldkernels=() # '%' gets replaced with kernel suffix
 _replacesoldmodules=() # '%' gets replaced with kernel suffix
@@ -152,7 +154,9 @@ prepare() {
 build() {
   cd $_srcname
   make all
-  make htmldocs
+  if ! [ "$CARCH" = armv7h ]; then
+    make htmldocs
+  fi
 }
 
 _package() {
@@ -316,7 +320,8 @@ _package-docs() {
   ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase"
 }
 
-pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
+pkgname=("$pkgbase" "$pkgbase-headers")
+[[ $CARCH = armv7h ]] || pkgname+=("$pkgbase-docs")
 for _p in "${pkgname[@]}"; do
   eval "package_$_p() {
     $(declare -f "_package${_p#$pkgbase}")

From 19dca05f8d753ad809799eb995cefbd691de6688 Mon Sep 17 00:00:00 2001
From: Parabola automatic package builder <dev@lists.parabolagnulinux.org>
Date: Oct 18 2021 21:44:34 +0000
Subject: [PATCH 18/23] Update libre/your-freedom


---

diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD
index f833775..89aefa8 100644
--- a/libre/your-freedom/PKGBUILD
+++ b/libre/your-freedom/PKGBUILD
@@ -4,8 +4,8 @@ pkgname=your-freedom
 pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free."
 license=('GPL3')
 url="https://git.parabola.nu/blacklist.git"
-pkgver=20211014
-_gitver=00c03ece88c2cb7d7d45fae45d01950378cfef91
+pkgver=20211018
+_gitver=c5b0ce0101756d82b19daab6df3c2b653793cdf6
 pkgrel=1
 
 arch=('any')
@@ -13,7 +13,7 @@ install=${pkgname}.install
 
 makedepends=(librelib)
 source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver})
-sha512sums=('b697ec86dbf8dbe8abfba4124be696eab60267961b7adf513a8033ed8f9978ecd52d4c719dd2a0af72274f9e683951cee45901ac372dc07a6b0f46a6d635a3c9')
+sha512sums=('97b90ef448c9c41b93e939b5be42d170c8836473ebefb0f24adf3a1eb13c5a832486cbe063f191f3b536b384a2c16c5d2e952931d71e27b1240aa1b20f571703')
 
 
 package() {

From a405b5371c9e46f92f794a95b778a56356df9123 Mon Sep 17 00:00:00 2001
From: Parabola automatic package builder <dev@lists.parabolagnulinux.org>
Date: Oct 18 2021 22:00:21 +0000
Subject: [PATCH 19/23] Update libre/your-freedom


---

diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD
index 89aefa8..1067a48 100644
--- a/libre/your-freedom/PKGBUILD
+++ b/libre/your-freedom/PKGBUILD
@@ -4,8 +4,8 @@ pkgname=your-freedom
 pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free."
 license=('GPL3')
 url="https://git.parabola.nu/blacklist.git"
-pkgver=20211018
-_gitver=c5b0ce0101756d82b19daab6df3c2b653793cdf6
+pkgver=20211018.1
+_gitver=e3eeb82dc48d248e18ff240e778d77b765b336ce
 pkgrel=1
 
 arch=('any')
@@ -13,7 +13,7 @@ install=${pkgname}.install
 
 makedepends=(librelib)
 source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver})
-sha512sums=('97b90ef448c9c41b93e939b5be42d170c8836473ebefb0f24adf3a1eb13c5a832486cbe063f191f3b536b384a2c16c5d2e952931d71e27b1240aa1b20f571703')
+sha512sums=('e93f5f1476068a261ff84b2a07d222fd09587ac97adae0236e309d3a72a26b47421e99aabfebef8029c1c24449634e274996a548e0db6eb16e67f08795a56084')
 
 
 package() {

From fcd3033e675f4ef197a0cfe2dddbb6be9d12e76a Mon Sep 17 00:00:00 2001
From: Omar Vega Ramos <ovruni@gnu.org.pe>
Date: Oct 27 2021 07:15:06 +0000
Subject: [PATCH 20/23] systemd-249.5-2.parabola1: updating version


---

diff --git a/libre/systemd/PKGBUILD b/libre/systemd/PKGBUILD
index 2ea8fb9..85072d6 100644
--- a/libre/systemd/PKGBUILD
+++ b/libre/systemd/PKGBUILD
@@ -11,10 +11,10 @@ pkgname+=('systemd-common' 'systemd-udev')
 # We split Arch's systemd-libs into systemd-$X, for the following $X:
 _systemd_libs=('libsystemd' 'libudev' 'nss-systemd' 'nss-myhostname' 'nss-mymachines' 'nss-resolve')
 pkgname+=("${_systemd_libs[@]/#/systemd-}")
-_tag='91ea8d825553fc1ecfc19448be24a4da56b13d00' # git rev-parse v${_tag_name}
-_tag_name=249.4
+_tag='f1d37a5c491d85255e9996960dc2889a15022b78' # git rev-parse v${_tag_name}
+_tag_name=249.5
 pkgver="${_tag_name/-/}"
-pkgrel=1
+pkgrel=2
 pkgrel+=.parabola1
 arch=('x86_64')
 arch+=('i686' 'armv7h' 'ppc64le')
@@ -91,6 +91,11 @@ sha512sums=('SKIP'
             '28a5b3fc9e2c5cec9267bb96725c73ee77788514f140c0cf8df765af64bc8130dd02f4863d9128ac45d54256b2ab4f2b06d1a3f65660ce1dfba5727618cd1839')
 
 _backports=(
+  # coredumpctl: stop truncating information about coredump
+  '473627e1c9fcdf8f819ced2bb79cb7e9ff598b0c'
+
+  # Revert "core: Check unit start rate limiting earlier"
+  '4fa9d8f14523982482386d398d2b2669902f2098'
 )
 
 _reverts=(

From abb944bd774546492d607eb0bd34af92048dca18 Mon Sep 17 00:00:00 2001
From: bill-auger <mr.j.spam.me@gmail.com>
Date: Oct 29 2021 21:44:39 +0000
Subject: [PATCH 21/23] [p11-kit]: rebuild against latest libffi


---

diff --git a/nonsystemd/p11-kit/PKGBUILD b/nonsystemd/p11-kit/PKGBUILD
index 90a986f..cd1bbe9 100644
--- a/nonsystemd/p11-kit/PKGBUILD
+++ b/nonsystemd/p11-kit/PKGBUILD
@@ -5,7 +5,7 @@
 pkgbase=p11-kit
 pkgname=(p11-kit libp11-kit)
 pkgver=0.24.0
-pkgrel=1
+pkgrel=2
 pkgrel+=.nonsystemd1
 pkgdesc="Loads and enumerates PKCS#11 modules"
 url="https://p11-glue.freedesktop.org"

From 9ab3befd9790b7448d6cf289c7a093a1eccf9385 Mon Sep 17 00:00:00 2001
From: Parabola automatic package builder <dev@lists.parabolagnulinux.org>
Date: Oct 31 2021 22:51:45 +0000
Subject: [PATCH 22/23] Update libre/your-freedom


---

diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD
index 1067a48..43eb22f 100644
--- a/libre/your-freedom/PKGBUILD
+++ b/libre/your-freedom/PKGBUILD
@@ -4,8 +4,8 @@ pkgname=your-freedom
 pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free."
 license=('GPL3')
 url="https://git.parabola.nu/blacklist.git"
-pkgver=20211018.1
-_gitver=e3eeb82dc48d248e18ff240e778d77b765b336ce
+pkgver=20211031
+_gitver=3cc30bc2bfdaa2cdb47d3ab78d6ffd855307d50c
 pkgrel=1
 
 arch=('any')
@@ -13,7 +13,7 @@ install=${pkgname}.install
 
 makedepends=(librelib)
 source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver})
-sha512sums=('e93f5f1476068a261ff84b2a07d222fd09587ac97adae0236e309d3a72a26b47421e99aabfebef8029c1c24449634e274996a548e0db6eb16e67f08795a56084')
+sha512sums=('4a43619f7b19dfc2a12f0b769c097518f93d1a88159716148c0a2477df69ff6369fd8426a5ccadae8c4e9a152306f2724763a13183aca6a10f2c21292be1d1c9')
 
 
 package() {

From cf681a6b4e7ca7241caedf1b1de886ab2cb3cc26 Mon Sep 17 00:00:00 2001
From: grizzlyuser <grizzlyuser@protonmail.com>
Date: Nov 03 2021 11:19:09 +0000
Subject: [PATCH 23/23] libre/iceweasel: update to 94.0 from upstreams


---

diff --git a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
index c1feb3f..86dddab 100644
--- a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
+++ b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch
@@ -9,10 +9,10 @@ Subject: [PATCH] Use remoting name for GDK application names
  2 files changed, 6 insertions(+), 12 deletions(-)
 
 diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
-index bb14d84338334..f5c0222987fb0 100644
+index 332f340179d3..840ad794f606 100644
 --- a/toolkit/xre/nsAppRunner.cpp
 +++ b/toolkit/xre/nsAppRunner.cpp
-@@ -4299,11 +4299,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
+@@ -4285,11 +4285,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
    // consistently.
  
    // Set program name to the one defined in application.ini.
@@ -26,7 +26,7 @@ index bb14d84338334..f5c0222987fb0 100644
    // Initialize GTK here for splash.
  
 diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp
-index 60de473de07ab..004c066575c17 100644
+index 60de473de07a..004c066575c1 100644
 --- a/widget/gtk/nsAppShell.cpp
 +++ b/widget/gtk/nsAppShell.cpp
 @@ -24,6 +24,8 @@
diff --git a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
index 9fcaef7..d4e4ef5 100644
--- a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
+++ b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch
@@ -370,9 +370,9 @@ index 3cc9436f61..3742da5667 100644
      "blocklists",
      "main",
 +    "monitor",
-     "pinning",
      "security-state",
  ]
+ 
 -- 
 2.31.1
 
@@ -538,7 +538,7 @@ index 80dd563e11..1025ab33a2 100644
 -      signature: { x5u, signature },
 +      json_dump_metadata: { hash, size },
      } = metadata;
--    const certChain = await (await fetch(x5u)).text();
+-    const certChain = await (await Utils.fetch(x5u)).text();
      // Merge remote records with local ones and serialize as canonical JSON.
      const serialized = await RemoteSettingsWorker.canonicalStringify(
        records,
@@ -639,7 +639,7 @@ index 1025ab33a2..1cebf2bc29 100644
    IDBHelpers: "resource://services-settings/IDBHelpers.jsm",
    KintoHttpClient: "resource://services-common/kinto-http-client.js",
 @@ -30,6 +31,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
- XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
+ });
  
  const TELEMETRY_COMPONENT = "remotesettings";
 +const DEFERRED_SYNC_DELAY_MILLISECONDS = 1000;
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 96b248a..9b612fe 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -47,7 +47,7 @@
 
 pkgname=iceweasel
 epoch=1
-pkgver=93.0
+pkgver=94.0
 pkgrel=1
 pkgrel+=.parabola1
 _brandingver=93.0-1
@@ -82,13 +82,13 @@ source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.bra
 source_armv7h=(build-arm-libopus.patch)
 source_i686=('avoid-libxul-OOM-python-check.patch'
              'rust-static-disable-network-test-on-static-libraries.patch')
-sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102'
+sha256sums=('b7bb8c5fcc74a74e9d2b55d1e9415b891305fe86520fb854cec25024d7e5de67'
             'SKIP'
-            'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb'
+            '51cca2cab0fa9798f96b81ed24c238b2a7c98524f589ec500224bac9797b66fb'
             '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58')
 sha256sums+=('2b2dcb5f15dba7f4ce8bc19de260dbc75219a93b107931bb0f6aff705c579fe5'
              'SKIP'
-             '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d'
+             'a4e3c3869085cb282cb5a0fcb64e816c0415f25d4792a62c4f1d599d3111b23c'
              'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887'
              '39e3a5e1ad137e21f842a44d7e3bd24050292d2b41fe59b4e7c7dfed52a195dd'
              '9386f1c50506cd20ab6d212335d5e4417faeb2aea371dd46f2d107d171e80b83'
@@ -201,7 +201,7 @@ ac_add_options --disable-elf-hack
 # https://bugzilla.redhat.com/show_bug.cgi?id=1641623
 ac_add_options --disable-av1
 ac_add_options --enable-optimize="-g0 -O2"
-mk_add_options MOZ_MAKE_FLAGS='-j2'
+mk_add_options MOZ_MAKE_FLAGS='-j1'
 END
 
       # mozbuild.configure.options.InvalidOptionError: --disable-eme is not available in this configuration

