aboutsummaryrefslogtreecommitdiff
path: root/SOURCES
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES')
-rw-r--r--SOURCES/0001-ally-x-audio-quirk.patch22
-rw-r--r--SOURCES/0001-amd-pstate.patch337
-rw-r--r--SOURCES/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch16
-rw-r--r--SOURCES/0001-ntsync.patch492
-rw-r--r--SOURCES/0001-patch_realtek-Fix-ROG-ALLY-X-audio.patch50
-rw-r--r--SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch10
-rw-r--r--SOURCES/OpenRGB.patch6
-rw-r--r--SOURCES/Patchlist.changelog146
-rw-r--r--SOURCES/asus-linux.patch3890
-rw-r--r--SOURCES/cachy-bbr3.patch128
-rw-r--r--SOURCES/cachy-bore.patch178
-rw-r--r--SOURCES/cachy-fixes.patch573
-rwxr-xr-xSOURCES/check-kabi39
-rw-r--r--SOURCES/def_variants.yaml.fedora2
-rw-r--r--SOURCES/def_variants.yaml.rhel2
-rw-r--r--SOURCES/fedoraimaca.x509bin0 -> 408 bytes
-rwxr-xr-xSOURCES/filtermods.py5
-rw-r--r--SOURCES/kernel-aarch64-16k-debug-fedora.config116
-rw-r--r--SOURCES/kernel-aarch64-16k-fedora.config108
-rw-r--r--SOURCES/kernel-aarch64-64k-debug-rhel.config103
-rw-r--r--SOURCES/kernel-aarch64-64k-rhel.config99
-rw-r--r--SOURCES/kernel-aarch64-debug-fedora.config116
-rw-r--r--SOURCES/kernel-aarch64-debug-rhel.config103
-rw-r--r--SOURCES/kernel-aarch64-fedora.config108
-rw-r--r--SOURCES/kernel-aarch64-rhel.config99
-rw-r--r--SOURCES/kernel-aarch64-rt-debug-rhel.config103
-rw-r--r--SOURCES/kernel-aarch64-rt-rhel.config99
-rw-r--r--SOURCES/kernel-ppc64le-debug-fedora.config78
-rw-r--r--SOURCES/kernel-ppc64le-debug-rhel.config87
-rw-r--r--SOURCES/kernel-ppc64le-fedora.config74
-rw-r--r--SOURCES/kernel-ppc64le-rhel.config83
-rw-r--r--SOURCES/kernel-s390x-debug-fedora.config81
-rw-r--r--SOURCES/kernel-s390x-debug-rhel.config93
-rw-r--r--SOURCES/kernel-s390x-fedora.config77
-rw-r--r--SOURCES/kernel-s390x-rhel.config89
-rw-r--r--SOURCES/kernel-s390x-zfcpdump-rhel.config88
-rw-r--r--SOURCES/kernel-x86_64-debug-fedora.config89
-rw-r--r--SOURCES/kernel-x86_64-debug-rhel.config107
-rw-r--r--SOURCES/kernel-x86_64-fedora.config85
-rw-r--r--SOURCES/kernel-x86_64-rhel.config103
-rw-r--r--SOURCES/kernel-x86_64-rt-debug-rhel.config107
-rw-r--r--SOURCES/kernel-x86_64-rt-rhel.config103
-rw-r--r--SOURCES/kernel.changelog534
-rw-r--r--SOURCES/lenovo-legion-laptop.patch10
-rw-r--r--SOURCES/linux-surface.patch4876
-rw-r--r--SOURCES/patch-6.10-redhat.patch (renamed from SOURCES/patch-6.9-redhat.patch)333
-rw-r--r--SOURCES/patch-6.8-redhat.patch1575
-rw-r--r--SOURCES/platform-chrome-cros_ec_lpc-add-support-for-AMD-Framework-Laptops.patch564
-rw-r--r--SOURCES/rpminspect.yaml2
-rw-r--r--SOURCES/scx-kernel.patch454
-rw-r--r--SOURCES/steam-deck.patch12
-rw-r--r--SOURCES/t2linux.patch10690
-rw-r--r--SOURCES/tkg.patch888
-rw-r--r--SOURCES/v0-speaker-multifix.patch7
54 files changed, 11063 insertions, 17176 deletions
diff --git a/SOURCES/0001-ally-x-audio-quirk.patch b/SOURCES/0001-ally-x-audio-quirk.patch
deleted file mode 100644
index 0fd97b1..0000000
--- a/SOURCES/0001-ally-x-audio-quirk.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jan200101 <sentrycraft123@gmail.com>
-Date: Sat, 13 Jul 2024 07:34:05 +0200
-Subject: [PATCH] Add Rog Ally X tas2781 audio quirk
-
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
----
- sound/pci/hda/patch_realtek.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
-index 3a56434c8..b9712c4e0 100644
---- a/sound/pci/hda/patch_realtek.c
-+++ b/sound/pci/hda/patch_realtek.c
-@@ -10250,6 +10250,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
- SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
- SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
- SND_PCI_QUIRK(0x1043, 0x17f3, "ROG Ally NR2301L/X", ALC294_FIXUP_ASUS_ALLY),
-+ SND_PCI_QUIRK(0x1043, 0x1eb3, "ROG Ally X RC72LA", ALC287_FIXUP_TAS2781_I2C),
- SND_PCI_QUIRK(0x1043, 0x1863, "ASUS UX6404VI/VV", ALC245_FIXUP_CS35L41_SPI_2),
- SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
- SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
diff --git a/SOURCES/0001-amd-pstate.patch b/SOURCES/0001-amd-pstate.patch
index 8b81bc4..d4986ef 100644
--- a/SOURCES/0001-amd-pstate.patch
+++ b/SOURCES/0001-amd-pstate.patch
@@ -1,7 +1,7 @@
-From 4ca68a16f48ef388742a25c6d6643bf996e8d1d5 Mon Sep 17 00:00:00 2001
+From 06c02d91fcfeb0fde264f03f0e364161b11a678d Mon Sep 17 00:00:00 2001
From: Peter Jung <admin@ptr1337.dev>
-Date: Fri, 5 Jul 2024 10:31:29 +0200
-Subject: [PATCH 02/10] amd-pstate
+Date: Sat, 3 Aug 2024 09:32:45 +0200
+Subject: [PATCH 01/12] amd-pstate
Signed-off-by: Peter Jung <admin@ptr1337.dev>
---
@@ -11,10 +11,10 @@ Signed-off-by: Peter Jung <admin@ptr1337.dev>
arch/x86/kernel/cpu/scattered.c | 1 +
drivers/cpufreq/Kconfig.x86 | 1 +
drivers/cpufreq/acpi-cpufreq.c | 3 +-
- drivers/cpufreq/amd-pstate.c | 356 ++++++++++++++------
- drivers/cpufreq/amd-pstate.h | 16 +-
+ drivers/cpufreq/amd-pstate.c | 307 ++++++++++++++------
+ drivers/cpufreq/amd-pstate.h | 2 +
drivers/cpufreq/cpufreq.c | 11 +-
- 9 files changed, 290 insertions(+), 119 deletions(-)
+ 9 files changed, 251 insertions(+), 95 deletions(-)
diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst
index 1e0d101b020a..d0324d44f548 100644
@@ -65,10 +65,10 @@ index 3c7434329661..6c128d463a14 100644
/*
* BUG word(s)
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
-index e72c2b872957..8738a7b3917d 100644
+index e022e6eb766c..384739d592af 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
-@@ -782,6 +782,8 @@
+@@ -781,6 +781,8 @@
#define MSR_K7_HWCR_IRPERF_EN BIT_ULL(MSR_K7_HWCR_IRPERF_EN_BIT)
#define MSR_K7_FID_VID_CTL 0xc0010041
#define MSR_K7_FID_VID_STATUS 0xc0010042
@@ -123,7 +123,7 @@ index 4ac3a35dcd98..f4f8587c4ea0 100644
return 0;
}
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
-index 6af175e6c08a..80eaa58f1405 100644
+index a092b13ffbc2..804fab4ebb26 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -51,6 +51,7 @@
@@ -168,7 +168,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if (!cppc_req_cached) {
epp = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ,
&cppc_req_cached);
-@@ -252,7 +244,7 @@ static int amd_pstate_set_epp(struct amd_cpudata *cpudata, u32 epp)
+@@ -272,7 +264,7 @@ static int amd_pstate_set_epp(struct amd_cpudata *cpudata, u32 epp)
int ret;
struct cppc_perf_ctrls perf_ctrls;
@@ -177,7 +177,7 @@ index 6af175e6c08a..80eaa58f1405 100644
u64 value = READ_ONCE(cpudata->cppc_req_cached);
value &= ~GENMASK_ULL(31, 24);
-@@ -281,10 +273,8 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata,
+@@ -304,10 +296,8 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata,
int epp = -EINVAL;
int ret;
@@ -190,7 +190,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if (epp == -EINVAL)
epp = epp_values[pref_index];
-@@ -521,7 +511,10 @@ static inline bool amd_pstate_sample(struct amd_cpudata *cpudata)
+@@ -524,7 +514,10 @@ static inline bool amd_pstate_sample(struct amd_cpudata *cpudata)
static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
u32 des_perf, u32 max_perf, bool fast_switch, int gov_flags)
{
@@ -201,7 +201,7 @@ index 6af175e6c08a..80eaa58f1405 100644
u64 value = prev;
min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf,
-@@ -530,6 +523,9 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
+@@ -533,6 +526,9 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
cpudata->max_limit_perf);
des_perf = clamp_t(unsigned long, des_perf, min_perf, max_perf);
@@ -211,7 +211,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if ((cppc_state == AMD_PSTATE_GUIDED) && (gov_flags & CPUFREQ_GOV_DYNAMIC_SWITCHING)) {
min_perf = des_perf;
des_perf = 0;
-@@ -541,6 +537,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
+@@ -544,6 +540,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
value &= ~AMD_CPPC_DES_PERF(~0L);
value |= AMD_CPPC_DES_PERF(des_perf);
@@ -222,7 +222,7 @@ index 6af175e6c08a..80eaa58f1405 100644
value &= ~AMD_CPPC_MAX_PERF(~0L);
value |= AMD_CPPC_MAX_PERF(max_perf);
-@@ -651,10 +651,9 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
+@@ -654,10 +654,9 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
unsigned long capacity)
{
unsigned long max_perf, min_perf, des_perf,
@@ -234,7 +234,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
amd_pstate_update_min_max_limit(policy);
-@@ -662,7 +661,6 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
+@@ -665,7 +664,6 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
cap_perf = READ_ONCE(cpudata->highest_perf);
lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
@@ -242,7 +242,7 @@ index 6af175e6c08a..80eaa58f1405 100644
des_perf = cap_perf;
if (target_perf < capacity)
-@@ -680,32 +678,57 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
+@@ -683,51 +681,111 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
max_perf = min_perf;
des_perf = clamp_t(unsigned long, des_perf, min_perf, max_perf);
@@ -254,35 +254,25 @@ index 6af175e6c08a..80eaa58f1405 100644
cpufreq_cpu_put(policy);
}
--static int amd_get_min_freq(struct amd_cpudata *cpudata)
+-static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
+static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
{
-- return READ_ONCE(cpudata->min_freq);
--}
-+ struct amd_cpudata *cpudata = policy->driver_data;
+ struct amd_cpudata *cpudata = policy->driver_data;
+ struct cppc_perf_ctrls perf_ctrls;
+ u32 highest_perf, nominal_perf, nominal_freq, max_freq;
-+ int ret;
+ int ret;
--static int amd_get_max_freq(struct amd_cpudata *cpudata)
--{
-- return READ_ONCE(cpudata->max_freq);
--}
+- if (!cpudata->boost_supported) {
+- pr_err("Boost mode is not supported by this processor or SBIOS\n");
+- return -EINVAL;
+ highest_perf = READ_ONCE(cpudata->highest_perf);
+ nominal_perf = READ_ONCE(cpudata->nominal_perf);
+ nominal_freq = READ_ONCE(cpudata->nominal_freq);
+ max_freq = READ_ONCE(cpudata->max_freq);
-
--static int amd_get_nominal_freq(struct amd_cpudata *cpudata)
--{
-- return READ_ONCE(cpudata->nominal_freq);
--}
++
+ if (boot_cpu_has(X86_FEATURE_CPPC)) {
+ u64 value = READ_ONCE(cpudata->cppc_req_cached);
-
--static int amd_get_lowest_nonlinear_freq(struct amd_cpudata *cpudata)
--{
-- return READ_ONCE(cpudata->lowest_nonlinear_freq);
++
+ value &= ~GENMASK_ULL(7, 0);
+ value |= on ? highest_perf : nominal_perf;
+ WRITE_ONCE(cpudata->cppc_req_cached, value);
@@ -297,32 +287,46 @@ index 6af175e6c08a..80eaa58f1405 100644
+ cpudata->cpu, ret);
+ return ret;
+ }
-+ }
-+
+ }
+
+- if (state)
+- policy->cpuinfo.max_freq = cpudata->max_freq;
+- else
+- policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
+ if (on)
+ policy->cpuinfo.max_freq = max_freq;
+ else if (policy->cpuinfo.max_freq > nominal_freq * 1000)
+ policy->cpuinfo.max_freq = nominal_freq * 1000;
-+
-+ policy->max = policy->cpuinfo.max_freq;
-+
+
+ policy->max = policy->cpuinfo.max_freq;
+
+- ret = freq_qos_update_request(&cpudata->req[1],
+- policy->cpuinfo.max_freq);
+- if (ret < 0)
+- return ret;
+ if (cppc_state == AMD_PSTATE_PASSIVE) {
+ ret = freq_qos_update_request(&cpudata->req[1], policy->cpuinfo.max_freq);
+ if (ret < 0)
+ pr_debug("Failed to update freq constraint: CPU%d\n", cpudata->cpu);
+ }
-+
+
+- return 0;
+ return ret < 0 ? ret : 0;
}
- static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
-@@ -715,36 +738,51 @@ static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
+-static void amd_pstate_boost_init(struct amd_cpudata *cpudata)
++static int amd_pstate_set_boost(struct cpufreq_policy *policy, int state)
+ {
+- u32 highest_perf, nominal_perf;
++ struct amd_cpudata *cpudata = policy->driver_data;
++ int ret;
- if (!cpudata->boost_supported) {
- pr_err("Boost mode is not supported by this processor or SBIOS\n");
-- return -EINVAL;
+- highest_perf = READ_ONCE(cpudata->highest_perf);
+- nominal_perf = READ_ONCE(cpudata->nominal_perf);
++ if (!cpudata->boost_supported) {
++ pr_err("Boost mode is not supported by this processor or SBIOS\n");
+ return -EOPNOTSUPP;
- }
++ }
+ mutex_lock(&amd_pstate_driver_lock);
+ ret = amd_pstate_cpu_boost_update(policy, state);
+ WRITE_ONCE(cpudata->boost_state, !ret ? state : false);
@@ -330,23 +334,17 @@ index 6af175e6c08a..80eaa58f1405 100644
+ refresh_frequency_limits(policy);
+ mutex_unlock(&amd_pstate_driver_lock);
-- if (state)
-- policy->cpuinfo.max_freq = cpudata->max_freq;
-- else
-- policy->cpuinfo.max_freq = cpudata->nominal_freq * 1000;
+- if (highest_perf <= nominal_perf)
+- return;
+ return ret;
+}
-- policy->max = policy->cpuinfo.max_freq;
+- cpudata->boost_supported = true;
+static int amd_pstate_init_boost_support(struct amd_cpudata *cpudata)
+{
+ u64 boost_val;
+ int ret = -1;
-
-- ret = freq_qos_update_request(&cpudata->req[1],
-- policy->cpuinfo.max_freq);
-- if (ret < 0)
-- return ret;
++
+ /*
+ * If platform has no CPB support or disable it, initialize current driver
+ * boost_enabled state to be false, it is not an error for cpufreq core to handle.
@@ -356,40 +354,29 @@ index 6af175e6c08a..80eaa58f1405 100644
+ ret = 0;
+ goto exit_err;
+ }
-
-- return 0;
--}
++
+ /* at least one CPU supports CPB, even if others fail later on to set up */
-+ current_pstate_driver->boost_enabled = true;
-
--static void amd_pstate_boost_init(struct amd_cpudata *cpudata)
--{
-- u32 highest_perf, nominal_perf;
+ current_pstate_driver->boost_enabled = true;
++
+ ret = rdmsrl_on_cpu(cpudata->cpu, MSR_K7_HWCR, &boost_val);
+ if (ret) {
+ pr_err_once("failed to read initial CPU boost state!\n");
+ ret = -EIO;
+ goto exit_err;
+ }
-
-- highest_perf = READ_ONCE(cpudata->highest_perf);
-- nominal_perf = READ_ONCE(cpudata->nominal_perf);
++
+ if (!(boost_val & MSR_K7_HWCR_CPB_DIS))
+ cpudata->boost_supported = true;
-
-- if (highest_perf <= nominal_perf)
-- return;
++
+ return 0;
-
-- cpudata->boost_supported = true;
-- current_pstate_driver->boost_enabled = true;
++
+exit_err:
+ cpudata->boost_supported = false;
+ return ret;
}
static void amd_perf_ctl_reset(unsigned int cpu)
-@@ -773,7 +811,7 @@ static int amd_pstate_get_highest_perf(int cpu, u32 *highest_perf)
+@@ -756,7 +814,7 @@ static int amd_pstate_get_highest_perf(int cpu, u32 *highest_perf)
{
int ret;
@@ -398,58 +385,22 @@ index 6af175e6c08a..80eaa58f1405 100644
u64 cap1;
ret = rdmsrl_safe_on_cpu(cpu, MSR_AMD_CPPC_CAP1, &cap1);
-@@ -860,7 +898,41 @@ static void amd_pstate_update_limits(unsigned int cpu)
- mutex_unlock(&amd_pstate_driver_lock);
- }
+@@ -852,8 +910,12 @@ static u32 amd_pstate_get_transition_delay_us(unsigned int cpu)
+ u32 transition_delay_ns;
--/**
-+/*
-+ * Get pstate transition delay time from ACPI tables that firmware set
-+ * instead of using hardcode value directly.
-+ */
-+static u32 amd_pstate_get_transition_delay_us(unsigned int cpu)
-+{
-+ u32 transition_delay_ns;
-+
-+ transition_delay_ns = cppc_get_transition_latency(cpu);
+ transition_delay_ns = cppc_get_transition_latency(cpu);
+- if (transition_delay_ns == CPUFREQ_ETERNAL)
+- return AMD_PSTATE_TRANSITION_DELAY;
+ if (transition_delay_ns == CPUFREQ_ETERNAL) {
+ if (cpu_feature_enabled(X86_FEATURE_FAST_CPPC))
+ return AMD_PSTATE_FAST_CPPC_TRANSITION_DELAY;
+ else
+ return AMD_PSTATE_TRANSITION_DELAY;
+ }
-+
-+ return transition_delay_ns / NSEC_PER_USEC;
-+}
-+
-+/*
-+ * Get pstate transition latency value from ACPI tables that firmware
-+ * set instead of using hardcode value directly.
-+ */
-+static u32 amd_pstate_get_transition_latency(unsigned int cpu)
-+{
-+ u32 transition_latency;
-+
-+ transition_latency = cppc_get_transition_latency(cpu);
-+ if (transition_latency == CPUFREQ_ETERNAL)
-+ return AMD_PSTATE_TRANSITION_LATENCY;
-+
-+ return transition_latency;
-+}
-+
-+/*
- * amd_pstate_init_freq: Initialize the max_freq, min_freq,
- * nominal_freq and lowest_nonlinear_freq for
- * the @cpudata object.
-@@ -881,7 +953,6 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
- u32 boost_ratio, lowest_nonlinear_ratio;
- struct cppc_perf_caps cppc_perf;
--
- ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
- if (ret)
- return ret;
-@@ -912,12 +983,30 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
+ return transition_delay_ns / NSEC_PER_USEC;
+ }
+@@ -924,12 +986,30 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
WRITE_ONCE(cpudata->nominal_freq, nominal_freq);
WRITE_ONCE(cpudata->max_freq, max_freq);
@@ -476,40 +427,35 @@ index 6af175e6c08a..80eaa58f1405 100644
static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
{
-- int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret;
+- int min_freq, max_freq, nominal_freq, ret;
+ int min_freq, max_freq, ret;
struct device *dev;
struct amd_cpudata *cpudata;
-@@ -946,20 +1035,15 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
+@@ -958,18 +1038,12 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
if (ret)
goto free_cpudata1;
-- min_freq = amd_get_min_freq(cpudata);
-- max_freq = amd_get_max_freq(cpudata);
-- nominal_freq = amd_get_nominal_freq(cpudata);
-- lowest_nonlinear_freq = amd_get_lowest_nonlinear_freq(cpudata);
--
-- if (min_freq < 0 || max_freq < 0 || min_freq > max_freq) {
-- dev_err(dev, "min_freq(%d) or max_freq(%d) value is incorrect\n",
-- min_freq, max_freq);
-- ret = -EINVAL;
+ ret = amd_pstate_init_boost_support(cpudata);
+ if (ret)
- goto free_cpudata1;
-- }
-
-- policy->cpuinfo.transition_latency = AMD_PSTATE_TRANSITION_LATENCY;
-- policy->transition_delay_us = AMD_PSTATE_TRANSITION_DELAY;
-+ min_freq = READ_ONCE(cpudata->min_freq);
-+ max_freq = READ_ONCE(cpudata->max_freq);
++ goto free_cpudata1;
+
-+ policy->cpuinfo.transition_latency = amd_pstate_get_transition_latency(policy->cpu);
-+ policy->transition_delay_us = amd_pstate_get_transition_delay_us(policy->cpu);
+ min_freq = READ_ONCE(cpudata->min_freq);
+ max_freq = READ_ONCE(cpudata->max_freq);
+- nominal_freq = READ_ONCE(cpudata->nominal_freq);
+-
+- if (min_freq <= 0 || max_freq <= 0 ||
+- nominal_freq <= 0 || min_freq > max_freq) {
+- dev_err(dev,
+- "min_freq(%d) or max_freq(%d) or nominal_freq (%d) value is incorrect, check _CPC in ACPI tables\n",
+- min_freq, max_freq, nominal_freq);
+- ret = -EINVAL;
+- goto free_cpudata1;
+- }
- policy->min = min_freq;
- policy->max = max_freq;
-@@ -967,10 +1051,12 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
+ policy->cpuinfo.transition_latency = amd_pstate_get_transition_latency(policy->cpu);
+ policy->transition_delay_us = amd_pstate_get_transition_delay_us(policy->cpu);
+@@ -980,10 +1054,12 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
policy->cpuinfo.min_freq = min_freq;
policy->cpuinfo.max_freq = max_freq;
@@ -523,7 +469,7 @@ index 6af175e6c08a..80eaa58f1405 100644
policy->fast_switch_possible = true;
ret = freq_qos_add_request(&policy->constraints, &cpudata->req[0],
-@@ -992,7 +1078,6 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
+@@ -1005,7 +1081,6 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
policy->driver_data = cpudata;
@@ -531,25 +477,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if (!current_pstate_driver->adjust_perf)
current_pstate_driver->adjust_perf = amd_pstate_adjust_perf;
-@@ -1052,7 +1137,7 @@ static ssize_t show_amd_pstate_max_freq(struct cpufreq_policy *policy,
- int max_freq;
- struct amd_cpudata *cpudata = policy->driver_data;
-
-- max_freq = amd_get_max_freq(cpudata);
-+ max_freq = READ_ONCE(cpudata->max_freq);
- if (max_freq < 0)
- return max_freq;
-
-@@ -1065,7 +1150,7 @@ static ssize_t show_amd_pstate_lowest_nonlinear_freq(struct cpufreq_policy *poli
- int freq;
- struct amd_cpudata *cpudata = policy->driver_data;
-
-- freq = amd_get_lowest_nonlinear_freq(cpudata);
-+ freq = READ_ONCE(cpudata->lowest_nonlinear_freq);
- if (freq < 0)
- return freq;
-
-@@ -1203,7 +1288,7 @@ static int amd_pstate_change_mode_without_dvr_change(int mode)
+@@ -1216,7 +1291,7 @@ static int amd_pstate_change_mode_without_dvr_change(int mode)
cppc_state = mode;
@@ -558,38 +486,38 @@ index 6af175e6c08a..80eaa58f1405 100644
return 0;
for_each_present_cpu(cpu) {
-@@ -1376,7 +1461,7 @@ static bool amd_pstate_acpi_pm_profile_undefined(void)
+@@ -1389,7 +1464,7 @@ static bool amd_pstate_acpi_pm_profile_undefined(void)
static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
{
-- int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret;
+- int min_freq, max_freq, nominal_freq, ret;
+ int min_freq, max_freq, ret;
struct amd_cpudata *cpudata;
struct device *dev;
u64 value;
-@@ -1407,16 +1492,12 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
+@@ -1420,17 +1495,12 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
if (ret)
goto free_cpudata1;
-- min_freq = amd_get_min_freq(cpudata);
-- max_freq = amd_get_max_freq(cpudata);
-- nominal_freq = amd_get_nominal_freq(cpudata);
-- lowest_nonlinear_freq = amd_get_lowest_nonlinear_freq(cpudata);
-- if (min_freq < 0 || max_freq < 0 || min_freq > max_freq) {
-- dev_err(dev, "min_freq(%d) or max_freq(%d) value is incorrect\n",
-- min_freq, max_freq);
-- ret = -EINVAL;
+ ret = amd_pstate_init_boost_support(cpudata);
+ if (ret)
- goto free_cpudata1;
-- }
++ goto free_cpudata1;
+
-+ min_freq = READ_ONCE(cpudata->min_freq);
-+ max_freq = READ_ONCE(cpudata->max_freq);
+ min_freq = READ_ONCE(cpudata->min_freq);
+ max_freq = READ_ONCE(cpudata->max_freq);
+- nominal_freq = READ_ONCE(cpudata->nominal_freq);
+- if (min_freq <= 0 || max_freq <= 0 ||
+- nominal_freq <= 0 || min_freq > max_freq) {
+- dev_err(dev,
+- "min_freq(%d) or max_freq(%d) or nominal_freq(%d) value is incorrect, check _CPC in ACPI tables\n",
+- min_freq, max_freq, nominal_freq);
+- ret = -EINVAL;
+- goto free_cpudata1;
+- }
policy->cpuinfo.min_freq = min_freq;
policy->cpuinfo.max_freq = max_freq;
-@@ -1425,11 +1506,13 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
+@@ -1439,11 +1509,13 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
policy->driver_data = cpudata;
@@ -604,7 +532,7 @@ index 6af175e6c08a..80eaa58f1405 100644
/*
* Set the policy to provide a valid fallback value in case
* the default cpufreq governor is neither powersave nor performance.
-@@ -1440,7 +1523,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
+@@ -1454,7 +1526,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
else
policy->policy = CPUFREQ_POLICY_POWERSAVE;
@@ -613,7 +541,7 @@ index 6af175e6c08a..80eaa58f1405 100644
ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, &value);
if (ret)
return ret;
-@@ -1451,7 +1534,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
+@@ -1465,7 +1537,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
return ret;
WRITE_ONCE(cpudata->cppc_cap1_cached, value);
}
@@ -621,7 +549,7 @@ index 6af175e6c08a..80eaa58f1405 100644
return 0;
-@@ -1530,7 +1612,7 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
+@@ -1544,7 +1615,7 @@ static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
epp = 0;
/* Set initial EPP value */
@@ -630,7 +558,7 @@ index 6af175e6c08a..80eaa58f1405 100644
value &= ~GENMASK_ULL(31, 24);
value |= (u64)epp << 24;
}
-@@ -1553,6 +1635,12 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
+@@ -1567,6 +1638,12 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
amd_pstate_epp_update_limit(policy);
@@ -643,7 +571,7 @@ index 6af175e6c08a..80eaa58f1405 100644
return 0;
}
-@@ -1569,7 +1657,7 @@ static void amd_pstate_epp_reenable(struct amd_cpudata *cpudata)
+@@ -1583,7 +1660,7 @@ static void amd_pstate_epp_reenable(struct amd_cpudata *cpudata)
value = READ_ONCE(cpudata->cppc_req_cached);
max_perf = READ_ONCE(cpudata->highest_perf);
@@ -652,7 +580,7 @@ index 6af175e6c08a..80eaa58f1405 100644
wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value);
} else {
perf_ctrls.max_perf = max_perf;
-@@ -1603,7 +1691,7 @@ static void amd_pstate_epp_offline(struct cpufreq_policy *policy)
+@@ -1617,7 +1694,7 @@ static void amd_pstate_epp_offline(struct cpufreq_policy *policy)
value = READ_ONCE(cpudata->cppc_req_cached);
mutex_lock(&amd_pstate_limits_lock);
@@ -661,7 +589,7 @@ index 6af175e6c08a..80eaa58f1405 100644
cpudata->epp_policy = CPUFREQ_POLICY_UNKNOWN;
/* Set max perf same as min perf */
-@@ -1707,6 +1795,7 @@ static struct cpufreq_driver amd_pstate_epp_driver = {
+@@ -1721,6 +1798,7 @@ static struct cpufreq_driver amd_pstate_epp_driver = {
.suspend = amd_pstate_epp_suspend,
.resume = amd_pstate_epp_resume,
.update_limits = amd_pstate_update_limits,
@@ -669,7 +597,7 @@ index 6af175e6c08a..80eaa58f1405 100644
.name = "amd-pstate-epp",
.attr = amd_pstate_epp_attr,
};
-@@ -1730,6 +1819,46 @@ static int __init amd_pstate_set_driver(int mode_idx)
+@@ -1744,6 +1822,46 @@ static int __init amd_pstate_set_driver(int mode_idx)
return -EINVAL;
}
@@ -716,7 +644,7 @@ index 6af175e6c08a..80eaa58f1405 100644
static int __init amd_pstate_init(void)
{
struct device *dev_root;
-@@ -1738,6 +1867,11 @@ static int __init amd_pstate_init(void)
+@@ -1752,6 +1870,11 @@ static int __init amd_pstate_init(void)
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
return -ENODEV;
@@ -728,7 +656,7 @@ index 6af175e6c08a..80eaa58f1405 100644
if (!acpi_cpc_valid()) {
pr_warn_once("the _CPC object is not present in SBIOS or ACPI disabled\n");
return -ENODEV;
-@@ -1752,35 +1886,43 @@ static int __init amd_pstate_init(void)
+@@ -1766,35 +1889,43 @@ static int __init amd_pstate_init(void)
/* check if this machine need CPPC quirks */
dmi_check_system(amd_pstate_quirks_table);
@@ -782,7 +710,7 @@ index 6af175e6c08a..80eaa58f1405 100644
pr_debug("AMD CPPC MSR based functionality is supported\n");
if (cppc_state != AMD_PSTATE_ACTIVE)
current_pstate_driver->adjust_perf = amd_pstate_adjust_perf;
-@@ -1794,13 +1936,15 @@ static int __init amd_pstate_init(void)
+@@ -1808,13 +1939,15 @@ static int __init amd_pstate_init(void)
/* enable amd pstate feature */
ret = amd_pstate_enable(true);
if (ret) {
@@ -800,7 +728,7 @@ index 6af175e6c08a..80eaa58f1405 100644
dev_root = bus_get_dev_root(&cpu_subsys);
if (dev_root) {
-@@ -1816,6 +1960,8 @@ static int __init amd_pstate_init(void)
+@@ -1830,6 +1963,8 @@ static int __init amd_pstate_init(void)
global_attr_free:
cpufreq_unregister_driver(current_pstate_driver);
@@ -810,33 +738,10 @@ index 6af175e6c08a..80eaa58f1405 100644
}
device_initcall(amd_pstate_init);
diff --git a/drivers/cpufreq/amd-pstate.h b/drivers/cpufreq/amd-pstate.h
-index bc341f35908d..cc8bb2bc325a 100644
+index e6a28e7f4dbf..cc8bb2bc325a 100644
--- a/drivers/cpufreq/amd-pstate.h
+++ b/drivers/cpufreq/amd-pstate.h
-@@ -42,13 +42,17 @@ struct amd_aperf_mperf {
- * @lowest_perf: the absolute lowest performance level of the processor
- * @prefcore_ranking: the preferred core ranking, the higher value indicates a higher
- * priority.
-- * @max_freq: the frequency that mapped to highest_perf
-- * @min_freq: the frequency that mapped to lowest_perf
-- * @nominal_freq: the frequency that mapped to nominal_perf
-- * @lowest_nonlinear_freq: the frequency that mapped to lowest_nonlinear_perf
-+ * @min_limit_perf: Cached value of the performance corresponding to policy->min
-+ * @max_limit_perf: Cached value of the performance corresponding to policy->max
-+ * @min_limit_freq: Cached value of policy->min (in khz)
-+ * @max_limit_freq: Cached value of policy->max (in khz)
-+ * @max_freq: the frequency (in khz) that mapped to highest_perf
-+ * @min_freq: the frequency (in khz) that mapped to lowest_perf
-+ * @nominal_freq: the frequency (in khz) that mapped to nominal_perf
-+ * @lowest_nonlinear_freq: the frequency (in khz) that mapped to lowest_nonlinear_perf
- * @cur: Difference of Aperf/Mperf/tsc count between last and current sample
- * @prev: Last Aperf/Mperf/tsc count value read from register
-- * @freq: current cpu frequency value
-+ * @freq: current cpu frequency value (in khz)
- * @boost_supported: check whether the Processor or SBIOS supports boost mode
- * @hw_prefcore: check whether HW supports preferred core featue.
- * Only when hw_prefcore and early prefcore param are true,
-@@ -95,6 +99,8 @@ struct amd_cpudata {
+@@ -99,6 +99,8 @@ struct amd_cpudata {
u32 policy;
u64 cppc_cap1_cached;
bool suspended;
@@ -846,7 +751,7 @@ index bc341f35908d..cc8bb2bc325a 100644
#endif /* _LINUX_AMD_PSTATE_H */
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
-index d7630d9cdb2f..bbbeb8b90313 100644
+index 9e5060b27864..270ea04fb616 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -614,10 +614,9 @@ static ssize_t show_boost(struct kobject *kobj,
diff --git a/SOURCES/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch b/SOURCES/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch
index 757f777..c5c52b5 100644
--- a/SOURCES/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch
+++ b/SOURCES/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch
@@ -12,19 +12,19 @@ diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/
index a280448df771..1596114dd9ae 100644
--- a/drivers/gpu/drm/i915/display/intel_quirks.c
+++ b/drivers/gpu/drm/i915/display/intel_quirks.c
-@@ -14,6 +14,12 @@ static void intel_set_quirk(struct drm_i915_private *i915, enum intel_quirk_id q
- i915->display.quirks.mask |= BIT(quirk);
+@@ -65,6 +65,12 @@
+ drm_info(display->drm, "Applying no pps backlight power quirk\n");
}
-+static void quirk_async_page_flips_force_disable(struct drm_i915_private *i915)
++static void quirk_async_page_flips_force_disable(struct intel_display *display)
+{
-+ i915->drm.mode_config.async_page_flip = false;
-+ drm_info(&i915->drm, "applying async flip disable quirk\n");
++ display->drm->mode_config.async_page_flip = false;
++ drm_info(display->drm, "Applying async flip disable quirk\n");
+}
+
- /*
- * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
- */
+ struct intel_quirk {
+ int device;
+ int subsystem_vendor;
@@ -136,6 +142,20 @@ static const struct intel_dmi_quirk intel_dmi_quirks[] = {
},
.hook = quirk_no_pps_backlight_power_hook,
diff --git a/SOURCES/0001-ntsync.patch b/SOURCES/0001-ntsync.patch
index 00a3538..4a16758 100644
--- a/SOURCES/0001-ntsync.patch
+++ b/SOURCES/0001-ntsync.patch
@@ -1,37 +1,33 @@
-From 0f079f29cb143deb96685a5d7e5c40ee3e709cf8 Mon Sep 17 00:00:00 2001
+From 36ef0070410e229e52c9de58d6021df36a4b1707 Mon Sep 17 00:00:00 2001
From: Peter Jung <admin@ptr1337.dev>
-Date: Fri, 5 Jul 2024 10:32:47 +0200
-Subject: [PATCH 08/10] ntsync
+Date: Sat, 3 Aug 2024 09:34:15 +0200
+Subject: [PATCH 09/12] ntsync
Signed-off-by: Peter Jung <admin@ptr1337.dev>
---
Documentation/userspace-api/index.rst | 1 +
- .../userspace-api/ioctl/ioctl-number.rst | 2 +
Documentation/userspace-api/ntsync.rst | 398 +++++
MAINTAINERS | 9 +
- drivers/misc/Kconfig | 11 +
- drivers/misc/Makefile | 1 +
- drivers/misc/ntsync.c | 1232 +++++++++++++++
- include/uapi/linux/ntsync.h | 62 +
+ drivers/misc/Kconfig | 1 -
+ drivers/misc/ntsync.c | 989 +++++++++++-
+ include/uapi/linux/ntsync.h | 39 +
tools/testing/selftests/Makefile | 1 +
.../selftests/drivers/ntsync/.gitignore | 1 +
.../testing/selftests/drivers/ntsync/Makefile | 7 +
tools/testing/selftests/drivers/ntsync/config | 1 +
.../testing/selftests/drivers/ntsync/ntsync.c | 1407 +++++++++++++++++
- 13 files changed, 3133 insertions(+)
+ 11 files changed, 2850 insertions(+), 4 deletions(-)
create mode 100644 Documentation/userspace-api/ntsync.rst
- create mode 100644 drivers/misc/ntsync.c
- create mode 100644 include/uapi/linux/ntsync.h
create mode 100644 tools/testing/selftests/drivers/ntsync/.gitignore
create mode 100644 tools/testing/selftests/drivers/ntsync/Makefile
create mode 100644 tools/testing/selftests/drivers/ntsync/config
create mode 100644 tools/testing/selftests/drivers/ntsync/ntsync.c
diff --git a/Documentation/userspace-api/index.rst b/Documentation/userspace-api/index.rst
-index afecfe3cc4a8..d5745a500fa7 100644
+index 8a251d71fa6e..02bea81fb4bf 100644
--- a/Documentation/userspace-api/index.rst
+++ b/Documentation/userspace-api/index.rst
-@@ -62,6 +62,7 @@ Everything else
+@@ -64,6 +64,7 @@ Everything else
vduse
futex2
perf_ring_buffer
@@ -39,19 +35,6 @@ index afecfe3cc4a8..d5745a500fa7 100644
.. only:: subproject and html
-diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst
-index c472423412bf..a141e8e65c5d 100644
---- a/Documentation/userspace-api/ioctl/ioctl-number.rst
-+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
-@@ -174,6 +174,8 @@ Code Seq# Include File Comments
- 'M' 00-0F drivers/video/fsl-diu-fb.h conflict!
- 'N' 00-1F drivers/usb/scanner.h
- 'N' 40-7F drivers/block/nvme.c
-+'N' 80-8F uapi/linux/ntsync.h NT synchronization primitives
-+ <mailto:wine-devel@winehq.org>
- 'O' 00-06 mtd/ubi-user.h UBI
- 'P' all linux/soundcard.h conflict!
- 'P' 60-6F sound/sscape_ioctl.h conflict!
diff --git a/Documentation/userspace-api/ntsync.rst b/Documentation/userspace-api/ntsync.rst
new file mode 100644
index 000000000000..767844637a7d
@@ -457,10 +440,10 @@ index 000000000000..767844637a7d
+ ``objs`` and in ``alert``. If this is attempted, the function fails
+ with ``EINVAL``.
diff --git a/MAINTAINERS b/MAINTAINERS
-index 3121709d99e3..baa28e4151aa 100644
+index b27470be2e6a..4112729fc23a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -15720,6 +15720,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git
+@@ -15983,6 +15983,15 @@ T: git https://github.com/Paragon-Software-Group/linux-ntfs3.git
F: Documentation/filesystems/ntfs3.rst
F: fs/ntfs3/
@@ -477,104 +460,66 @@ index 3121709d99e3..baa28e4151aa 100644
M: Finn Thain <fthain@linux-m68k.org>
L: linux-m68k@lists.linux-m68k.org
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index 4fb291f0bf7c..801ed229ed7d 100644
+index faf983680040..2907b5c23368 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
-@@ -506,6 +506,17 @@ config OPEN_DICE
+@@ -507,7 +507,6 @@ config OPEN_DICE
- If unsure, say N.
-
-+config NTSYNC
-+ tristate "NT synchronization primitive emulation"
-+ help
-+ This module provides kernel support for emulation of Windows NT
-+ synchronization primitives. It is not a hardware driver.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called ntsync.
-+
-+ If unsure, say N.
-+
- config VCPU_STALL_DETECTOR
- tristate "Guest vCPU stall detector"
- depends on OF && HAS_IOMEM
-diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index ea6ea5bbbc9c..153a3f4837e8 100644
---- a/drivers/misc/Makefile
-+++ b/drivers/misc/Makefile
-@@ -59,6 +59,7 @@ obj-$(CONFIG_PVPANIC) += pvpanic/
- obj-$(CONFIG_UACCE) += uacce/
- obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
- obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o
-+obj-$(CONFIG_NTSYNC) += ntsync.o
- obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
- obj-$(CONFIG_OPEN_DICE) += open-dice.o
- obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
+ config NTSYNC
+ tristate "NT synchronization primitive emulation"
+- depends on BROKEN
+ help
+ This module provides kernel support for emulation of Windows NT
+ synchronization primitives. It is not a hardware driver.
diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
-new file mode 100644
-index 000000000000..87a24798a5c7
---- /dev/null
+index 3c2f743c58b0..87a24798a5c7 100644
+--- a/drivers/misc/ntsync.c
+++ b/drivers/misc/ntsync.c
-@@ -0,0 +1,1232 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+/*
-+ * ntsync.c - Kernel driver for NT synchronization primitives
-+ *
-+ * Copyright (C) 2024 Elizabeth Figura <zfigura@codeweavers.com>
-+ */
-+
-+#include <linux/anon_inodes.h>
+@@ -6,11 +6,17 @@
+ */
+
+ #include <linux/anon_inodes.h>
+#include <linux/atomic.h>
-+#include <linux/file.h>
-+#include <linux/fs.h>
+ #include <linux/file.h>
+ #include <linux/fs.h>
+#include <linux/hrtimer.h>
+#include <linux/ktime.h>
-+#include <linux/miscdevice.h>
-+#include <linux/module.h>
+ #include <linux/miscdevice.h>
+ #include <linux/module.h>
+#include <linux/mutex.h>
-+#include <linux/overflow.h>
+ #include <linux/overflow.h>
+#include <linux/sched.h>
+#include <linux/sched/signal.h>
-+#include <linux/slab.h>
-+#include <linux/spinlock.h>
-+#include <uapi/linux/ntsync.h>
-+
-+#define NTSYNC_NAME "ntsync"
-+
-+enum ntsync_type {
-+ NTSYNC_TYPE_SEM,
+ #include <linux/slab.h>
+ #include <linux/spinlock.h>
+ #include <uapi/linux/ntsync.h>
+@@ -19,6 +25,8 @@
+
+ enum ntsync_type {
+ NTSYNC_TYPE_SEM,
+ NTSYNC_TYPE_MUTEX,
+ NTSYNC_TYPE_EVENT,
-+};
-+
-+/*
-+ * Individual synchronization primitives are represented by
-+ * struct ntsync_obj, and each primitive is backed by a file.
-+ *
-+ * The whole namespace is represented by a struct ntsync_device also
-+ * backed by a file.
-+ *
-+ * Both rely on struct file for reference counting. Individual
-+ * ntsync_obj objects take a reference to the device when created.
+ };
+
+ /*
+@@ -30,10 +38,13 @@ enum ntsync_type {
+ *
+ * Both rely on struct file for reference counting. Individual
+ * ntsync_obj objects take a reference to the device when created.
+ * Wait operations take a reference to each object being waited on for
+ * the duration of the wait.
-+ */
-+
-+struct ntsync_obj {
-+ spinlock_t lock;
+ */
+
+ struct ntsync_obj {
+ spinlock_t lock;
+ int dev_locked;
-+
-+ enum ntsync_type type;
-+
-+ struct file *file;
-+ struct ntsync_device *dev;
-+
-+ /* The following fields are protected by the object lock. */
-+ union {
-+ struct {
-+ __u32 count;
-+ __u32 max;
-+ } sem;
+
+ enum ntsync_type type;
+
+@@ -46,13 +57,335 @@ struct ntsync_obj {
+ __u32 count;
+ __u32 max;
+ } sem;
+ struct {
+ __u32 count;
+ pid_t owner;
@@ -584,7 +529,7 @@ index 000000000000..87a24798a5c7
+ bool manual;
+ bool signaled;
+ } event;
-+ } u;
+ } u;
+
+ /*
+ * any_waiters is protected by the object lock, but all_waiters is
@@ -634,9 +579,9 @@ index 000000000000..87a24798a5c7
+ bool ownerdead;
+ __u32 count;
+ struct ntsync_q_entry entries[];
-+};
-+
-+struct ntsync_device {
+ };
+
+ struct ntsync_device {
+ /*
+ * Wait-all operations must atomically grab all objects, and be totally
+ * ordered with respect to each other and wait-any operations.
@@ -649,9 +594,9 @@ index 000000000000..87a24798a5c7
+ */
+ struct mutex wait_all_lock;
+
-+ struct file *file;
-+};
-+
+ struct file *file;
+ };
+
+/*
+ * Single objects are locked using obj->lock.
+ *
@@ -904,57 +849,54 @@ index 000000000000..87a24798a5c7
+ }
+}
+
-+/*
-+ * Actually change the semaphore state, returning -EOVERFLOW if it is made
-+ * invalid.
-+ */
-+static int post_sem_state(struct ntsync_obj *sem, __u32 count)
-+{
-+ __u32 sum;
-+
+ /*
+ * Actually change the semaphore state, returning -EOVERFLOW if it is made
+ * invalid.
+@@ -61,7 +394,7 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count)
+ {
+ __u32 sum;
+
+- lockdep_assert_held(&sem->lock);
+ ntsync_assert_held(sem);
-+
-+ if (check_add_overflow(sem->u.sem.count, count, &sum) ||
-+ sum > sem->u.sem.max)
-+ return -EOVERFLOW;
-+
-+ sem->u.sem.count = sum;
-+ return 0;
-+}
-+
-+static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
-+{
+
+ if (check_add_overflow(sem->u.sem.count, count, &sum) ||
+ sum > sem->u.sem.max)
+@@ -73,9 +406,11 @@ static int post_sem_state(struct ntsync_obj *sem, __u32 count)
+
+ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
+ {
+ struct ntsync_device *dev = sem->dev;
-+ __u32 __user *user_args = argp;
-+ __u32 prev_count;
-+ __u32 args;
+ __u32 __user *user_args = argp;
+ __u32 prev_count;
+ __u32 args;
+ bool all;
-+ int ret;
-+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
-+
-+ if (sem->type != NTSYNC_TYPE_SEM)
-+ return -EINVAL;
-+
+ int ret;
+
+ if (copy_from_user(&args, argp, sizeof(args)))
+@@ -84,12 +419,17 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
+ if (sem->type != NTSYNC_TYPE_SEM)
+ return -EINVAL;
+
+- spin_lock(&sem->lock);
+ all = ntsync_lock_obj(dev, sem);
-+
-+ prev_count = sem->u.sem.count;
-+ ret = post_sem_state(sem, args);
+
+ prev_count = sem->u.sem.count;
+ ret = post_sem_state(sem, args);
+ if (!ret) {
+ if (all)
+ try_wake_all_obj(dev, sem);
+ try_wake_any_sem(sem);
+ }
-+
+
+- spin_unlock(&sem->lock);
+ ntsync_unlock_obj(dev, sem, all);
-+
-+ if (!ret && put_user(prev_count, user_args))
-+ ret = -EFAULT;
-+
-+ return ret;
-+}
-+
+
+ if (!ret && put_user(prev_count, user_args))
+ ret = -EFAULT;
+@@ -97,6 +437,226 @@ static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
+ return ret;
+ }
+
+/*
+ * Actually change the mutex state, returning -EPERM if not the owner.
+ */
@@ -1175,25 +1117,13 @@ index 000000000000..87a24798a5c7
+ return 0;
+}
+
-+static int ntsync_obj_release(struct inode *inode, struct file *file)
-+{
-+ struct ntsync_obj *obj = file->private_data;
-+
-+ fput(obj->dev->file);
-+ kfree(obj);
-+
-+ return 0;
-+}
-+
-+static long ntsync_obj_ioctl(struct file *file, unsigned int cmd,
-+ unsigned long parm)
-+{
-+ struct ntsync_obj *obj = file->private_data;
-+ void __user *argp = (void __user *)parm;
-+
-+ switch (cmd) {
-+ case NTSYNC_IOC_SEM_POST:
-+ return ntsync_sem_post(obj, argp);
+ static int ntsync_obj_release(struct inode *inode, struct file *file)
+ {
+ struct ntsync_obj *obj = file->private_data;
+@@ -116,6 +676,22 @@ static long ntsync_obj_ioctl(struct file *file, unsigned int cmd,
+ switch (cmd) {
+ case NTSYNC_IOC_SEM_POST:
+ return ntsync_sem_post(obj, argp);
+ case NTSYNC_IOC_SEM_READ:
+ return ntsync_sem_read(obj, argp);
+ case NTSYNC_IOC_MUTEX_UNLOCK:
@@ -1210,84 +1140,23 @@ index 000000000000..87a24798a5c7
+ return ntsync_event_set(obj, argp, true);
+ case NTSYNC_IOC_EVENT_READ:
+ return ntsync_event_read(obj, argp);
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+}
-+
-+static const struct file_operations ntsync_obj_fops = {
-+ .owner = THIS_MODULE,
-+ .release = ntsync_obj_release,
-+ .unlocked_ioctl = ntsync_obj_ioctl,
-+ .compat_ioctl = compat_ptr_ioctl,
-+ .llseek = no_llseek,
-+};
-+
-+static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev,
-+ enum ntsync_type type)
-+{
-+ struct ntsync_obj *obj;
-+
-+ obj = kzalloc(sizeof(*obj), GFP_KERNEL);
-+ if (!obj)
-+ return NULL;
-+ obj->type = type;
-+ obj->dev = dev;
-+ get_file(dev->file);
-+ spin_lock_init(&obj->lock);
+ default:
+ return -ENOIOCTLCMD;
+ }
+@@ -141,6 +717,9 @@ static struct ntsync_obj *ntsync_alloc_obj(struct ntsync_device *dev,
+ obj->dev = dev;
+ get_file(dev->file);
+ spin_lock_init(&obj->lock);
+ INIT_LIST_HEAD(&obj->any_waiters);
+ INIT_LIST_HEAD(&obj->all_waiters);
+ atomic_set(&obj->all_hint, 0);
-+
-+ return obj;
-+}
-+
-+static int ntsync_obj_get_fd(struct ntsync_obj *obj)
-+{
-+ struct file *file;
-+ int fd;
-+
-+ fd = get_unused_fd_flags(O_CLOEXEC);
-+ if (fd < 0)
-+ return fd;
-+ file = anon_inode_getfile("ntsync", &ntsync_obj_fops, obj, O_RDWR);
-+ if (IS_ERR(file)) {
-+ put_unused_fd(fd);
-+ return PTR_ERR(file);
-+ }
-+ obj->file = file;
-+ fd_install(fd, file);
-+
-+ return fd;
-+}
-+
-+static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
-+{
-+ struct ntsync_sem_args __user *user_args = argp;
-+ struct ntsync_sem_args args;
-+ struct ntsync_obj *sem;
-+ int fd;
-+
-+ if (copy_from_user(&args, argp, sizeof(args)))
-+ return -EFAULT;
-+
-+ if (args.count > args.max)
-+ return -EINVAL;
-+
-+ sem = ntsync_alloc_obj(dev, NTSYNC_TYPE_SEM);
-+ if (!sem)
-+ return -ENOMEM;
-+ sem->u.sem.count = args.count;
-+ sem->u.sem.max = args.max;
-+ fd = ntsync_obj_get_fd(sem);
-+ if (fd < 0) {
-+ kfree(sem);
-+ return fd;
-+ }
-+
-+ return put_user(fd, &user_args->sem);
-+}
-+
+
+ return obj;
+ }
+@@ -191,6 +770,400 @@ static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
+ return put_user(fd, &user_args->sem);
+ }
+
+static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
+{
+ struct ntsync_mutex_args __user *user_args = argp;
@@ -1682,96 +1551,43 @@ index 000000000000..87a24798a5c7
+ return ret;
+}
+
-+static int ntsync_char_open(struct inode *inode, struct file *file)
-+{
-+ struct ntsync_device *dev;
-+
-+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+ if (!dev)
-+ return -ENOMEM;
-+
+ static int ntsync_char_open(struct inode *inode, struct file *file)
+ {
+ struct ntsync_device *dev;
+@@ -199,6 +1172,8 @@ static int ntsync_char_open(struct inode *inode, struct file *file)
+ if (!dev)
+ return -ENOMEM;
+
+ mutex_init(&dev->wait_all_lock);
+
-+ file->private_data = dev;
-+ dev->file = file;
-+ return nonseekable_open(inode, file);
-+}
-+
-+static int ntsync_char_release(struct inode *inode, struct file *file)
-+{
-+ struct ntsync_device *dev = file->private_data;
-+
-+ kfree(dev);
-+
-+ return 0;
-+}
-+
-+static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
-+ unsigned long parm)
-+{
-+ struct ntsync_device *dev = file->private_data;
-+ void __user *argp = (void __user *)parm;
-+
-+ switch (cmd) {
+ file->private_data = dev;
+ dev->file = file;
+ return nonseekable_open(inode, file);
+@@ -220,8 +1195,16 @@ static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
+ void __user *argp = (void __user *)parm;
+
+ switch (cmd) {
+ case NTSYNC_IOC_CREATE_EVENT:
+ return ntsync_create_event(dev, argp);
+ case NTSYNC_IOC_CREATE_MUTEX:
+ return ntsync_create_mutex(dev, argp);
-+ case NTSYNC_IOC_CREATE_SEM:
-+ return ntsync_create_sem(dev, argp);
+ case NTSYNC_IOC_CREATE_SEM:
+ return ntsync_create_sem(dev, argp);
+ case NTSYNC_IOC_WAIT_ALL:
+ return ntsync_wait_all(dev, argp);
+ case NTSYNC_IOC_WAIT_ANY:
+ return ntsync_wait_any(dev, argp);
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+}
-+
-+static const struct file_operations ntsync_fops = {
-+ .owner = THIS_MODULE,
-+ .open = ntsync_char_open,
-+ .release = ntsync_char_release,
-+ .unlocked_ioctl = ntsync_char_ioctl,
-+ .compat_ioctl = compat_ptr_ioctl,
-+ .llseek = no_llseek,
-+};
-+
-+static struct miscdevice ntsync_misc = {
-+ .minor = MISC_DYNAMIC_MINOR,
-+ .name = NTSYNC_NAME,
-+ .fops = &ntsync_fops,
-+};
-+
-+module_misc_device(ntsync_misc);
-+
-+MODULE_AUTHOR("Elizabeth Figura <zfigura@codeweavers.com>");
-+MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
-+MODULE_LICENSE("GPL");
+ default:
+ return -ENOIOCTLCMD;
+ }
diff --git a/include/uapi/linux/ntsync.h b/include/uapi/linux/ntsync.h
-new file mode 100644
-index 000000000000..4a8095a3fc34
---- /dev/null
+index dcfa38fdc93c..4a8095a3fc34 100644
+--- a/include/uapi/linux/ntsync.h
+++ b/include/uapi/linux/ntsync.h
-@@ -0,0 +1,62 @@
-+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-+/*
-+ * Kernel support for NT synchronization primitive emulation
-+ *
-+ * Copyright (C) 2021-2022 Elizabeth Figura <zfigura@codeweavers.com>
-+ */
-+
-+#ifndef __LINUX_NTSYNC_H
-+#define __LINUX_NTSYNC_H
-+
-+#include <linux/types.h>
-+
-+struct ntsync_sem_args {
-+ __u32 sem;
-+ __u32 count;
-+ __u32 max;
-+};
-+
+@@ -16,8 +16,47 @@ struct ntsync_sem_args {
+ __u32 max;
+ };
+
+struct ntsync_mutex_args {
+ __u32 mutex;
+ __u32 owner;
@@ -1799,13 +1615,13 @@ index 000000000000..4a8095a3fc34
+
+#define NTSYNC_MAX_WAIT_COUNT 64
+
-+#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
+ #define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
+#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
+#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
+#define NTSYNC_IOC_CREATE_MUTEX _IOWR('N', 0x84, struct ntsync_sem_args)
+#define NTSYNC_IOC_CREATE_EVENT _IOWR('N', 0x87, struct ntsync_event_args)
-+
-+#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
+
+ #define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
+#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
+#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
+#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
@@ -1814,10 +1630,10 @@ index 000000000000..4a8095a3fc34
+#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
+#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)
+#define NTSYNC_IOC_EVENT_READ _IOR ('N', 0x8d, struct ntsync_event_args)
-+
-+#endif
+
+ #endif
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
-index e1504833654d..6f95206325e1 100644
+index 9039f3709aff..d5aeaa8fe3ca 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -16,6 +16,7 @@ TARGETS += damon
@@ -1826,8 +1642,8 @@ index e1504833654d..6f95206325e1 100644
TARGETS += drivers/dma-buf
+TARGETS += drivers/ntsync
TARGETS += drivers/s390x/uvdevice
+ TARGETS += drivers/net
TARGETS += drivers/net/bonding
- TARGETS += drivers/net/team
diff --git a/tools/testing/selftests/drivers/ntsync/.gitignore b/tools/testing/selftests/drivers/ntsync/.gitignore
new file mode 100644
index 000000000000..848573a3d3ea
@@ -3269,5 +3085,5 @@ index 000000000000..5fa2c9a0768c
+
+TEST_HARNESS_MAIN
--
-2.45.2
+2.46.0.rc1
diff --git a/SOURCES/0001-patch_realtek-Fix-ROG-ALLY-X-audio.patch b/SOURCES/0001-patch_realtek-Fix-ROG-ALLY-X-audio.patch
new file mode 100644
index 0000000..bcb222a
--- /dev/null
+++ b/SOURCES/0001-patch_realtek-Fix-ROG-ALLY-X-audio.patch
@@ -0,0 +1,50 @@
+From ac9fa29b679959fc58c9180942a74e6687a63584 Mon Sep 17 00:00:00 2001
+From: Jonathan LoBue <jlobue10@gmail.com>
+Date: Thu, 25 Jul 2024 08:22:38 -0700
+Subject: [PATCH] ALSA: hda/realtek: tas2781: Fix ROG ALLY X audio
+
+Fix the loading of the proper TI TAS2781 amplifier
+for the ROG ALLY X, while keeping the other Realtek
+codec and pin portions from original ROG ALLY.
+
+Add proper credit and tag lines before submitting...
+This patch is for sharing and testing (6.10.1)
+---
+ sound/pci/hda/patch_realtek.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 766f0b1..8d118df 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -7409,6 +7409,7 @@ enum {
+ ALC285_FIXUP_THINKPAD_X1_GEN7,
+ ALC285_FIXUP_THINKPAD_HEADSET_JACK,
+ ALC294_FIXUP_ASUS_ALLY,
++ ALC294_FIXUP_ASUS_ALLY_X,
+ ALC294_FIXUP_ASUS_ALLY_PINS,
+ ALC294_FIXUP_ASUS_ALLY_VERBS,
+ ALC294_FIXUP_ASUS_ALLY_SPEAKER,
+@@ -8875,6 +8876,12 @@ static const struct hda_fixup alc269_fixups[] = {
+ .chained = true,
+ .chain_id = ALC294_FIXUP_ASUS_ALLY_PINS
+ },
++ [ALC294_FIXUP_ASUS_ALLY_X] = {
++ .type = HDA_FIXUP_FUNC,
++ .v.func = tas2781_fixup_i2c,
++ .chained = true,
++ .chain_id = ALC294_FIXUP_ASUS_ALLY_PINS
++ },
+ [ALC294_FIXUP_ASUS_ALLY_PINS] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+@@ -10306,6 +10313,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+ SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
+ SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
+ SND_PCI_QUIRK(0x1043, 0x17f3, "ROG Ally NR2301L/X", ALC294_FIXUP_ASUS_ALLY),
++ SND_PCI_QUIRK(0x1043, 0x1eb3, "ROG Ally X RC72LA", ALC294_FIXUP_ASUS_ALLY_X),
+ SND_PCI_QUIRK(0x1043, 0x1863, "ASUS UX6404VI/VV", ALC245_FIXUP_CS35L41_SPI_2),
+ SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
+ SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
+--
+2.45.2
diff --git a/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch b/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
index 20b095b..b91bf1a 100644
--- a/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
+++ b/SOURCES/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
@@ -57,11 +57,13 @@ diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device
index e8491979a6f2..4682970746c3 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
-@@ -498,6 +498,7 @@ struct xe_device {
+@@ -516,6 +516,9 @@
+ unsigned int czclk_freq;
+ unsigned int fsb_freq, mem_freq, is_ddr3;
};
- struct {
- const char *dmc_firmware_path;
++ struct {
+ bool disable_async_page_flip;
- } params;
++ } params;
void *pxp;
+ #endif
diff --git a/SOURCES/OpenRGB.patch b/SOURCES/OpenRGB.patch
index 3ddf50e..720345f 100644
--- a/SOURCES/OpenRGB.patch
+++ b/SOURCES/OpenRGB.patch
@@ -2,7 +2,7 @@ diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 2ddca08f8a76..72647850f08e 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
-@@ -217,6 +217,15 @@ config I2C_CHT_WC
+@@ -238,6 +238,15 @@
combined with a FUSB302 Type-C port-controller as such it is advised
to also select CONFIG_TYPEC_FUSB302=m.
@@ -17,7 +17,7 @@ index 2ddca08f8a76..72647850f08e 100644
+
config I2C_NFORCE2
tristate "Nvidia nForce2, nForce3 and nForce4"
- depends on PCI
+ depends on PCI && HAS_IOPORT
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index 25d60889713c..3c2a9b237ac6 100644
--- a/drivers/i2c/busses/Makefile
@@ -413,7 +413,7 @@ index 000000000000..0462f0952043
+ }
+
+ adap->owner = THIS_MODULE;
-+ adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
++ adap->class = I2C_CLASS_HWMON;
+ adap->algo = &smbus_algorithm;
+
+ adapdata = kzalloc(sizeof(*adapdata), GFP_KERNEL);
diff --git a/SOURCES/Patchlist.changelog b/SOURCES/Patchlist.changelog
index 21ca765..64270ad 100644
--- a/SOURCES/Patchlist.changelog
+++ b/SOURCES/Patchlist.changelog
@@ -1,96 +1,114 @@
-https://gitlab.com/cki-project/kernel-ark/-/commit/982eb4ceebb7be3979ef62dbd5d4c8a514180ae1
- 982eb4ceebb7be3979ef62dbd5d4c8a514180ae1 ACPI: scan: Ignore camera graph port nodes on all Dell Tiger, Alder and Raptor Lake models
+https://gitlab.com/cki-project/kernel-ark/-/commit/64905c656dbdbc1a21d838d33e10699e391f185b
+ 64905c656dbdbc1a21d838d33e10699e391f185b Bluetooth: hci_event: Fix setting DISCOVERY_FINDING for passive scanning
-https://gitlab.com/cki-project/kernel-ark/-/commit/a058bf42a79af81598f7404ad550ff677eb2be4d
- a058bf42a79af81598f7404ad550ff677eb2be4d lsm: update security_lock_kernel_down
+https://gitlab.com/cki-project/kernel-ark/-/commit/df97a13dc31a28e5c34e946a9e229c8b0e4c94b7
+ df97a13dc31a28e5c34e946a9e229c8b0e4c94b7 not upstream: drop openssl ENGINE API usage
-https://gitlab.com/cki-project/kernel-ark/-/commit/c1cadf2e615cbb9af6b7f9edde762b1d3dea9c0c
- c1cadf2e615cbb9af6b7f9edde762b1d3dea9c0c random: replace import_single_range() with import_ubuf()
+https://gitlab.com/cki-project/kernel-ark/-/commit/3454711caea17db89f985e7dff3e99ee6b88c409
+ 3454711caea17db89f985e7dff3e99ee6b88c409 media: ipu-bridge: Add HIDs from out of tree IPU6 driver ipu-bridge copy
-https://gitlab.com/cki-project/kernel-ark/-/commit/3700812249f29081392b820339445a1d801092b5
- 3700812249f29081392b820339445a1d801092b5 crypto: rng - Override drivers/char/random in FIPS mode
+https://gitlab.com/cki-project/kernel-ark/-/commit/be66be71dcf134a103446381d3d3ad7c2f3d1f36
+ be66be71dcf134a103446381d3d3ad7c2f3d1f36 media: ipu-bridge: Sort ipu_supported_sensors[] array by ACPI HID
-https://gitlab.com/cki-project/kernel-ark/-/commit/38603aa6f9160a2a2672c1eabd3824912b9138f4
- 38603aa6f9160a2a2672c1eabd3824912b9138f4 random: Add hook to override device reads and getrandom(2)
+https://gitlab.com/cki-project/kernel-ark/-/commit/cbbaa28dd511151ef6453ba310d827e8033ec9c0
+ cbbaa28dd511151ef6453ba310d827e8033ec9c0 lsm: update security_lock_kernel_down
-https://gitlab.com/cki-project/kernel-ark/-/commit/adcfffd16fe8e29ea3d89dae57d2ba2f7dce15a6
- adcfffd16fe8e29ea3d89dae57d2ba2f7dce15a6 scsi: sd: Add "probe_type" module parameter to allow synchronous probing
+https://gitlab.com/cki-project/kernel-ark/-/commit/c63e36d30db93dc40db4fe4a9eec03faab3cdc70
+ c63e36d30db93dc40db4fe4a9eec03faab3cdc70 random: replace import_single_range() with import_ubuf()
-https://gitlab.com/cki-project/kernel-ark/-/commit/a40f874c560bfdca05a43033f0da5892e07c0717
- a40f874c560bfdca05a43033f0da5892e07c0717 Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64"
+https://gitlab.com/cki-project/kernel-ark/-/commit/b9735227d9941ce60606745511251a36fa22a790
+ b9735227d9941ce60606745511251a36fa22a790 crypto: rng - Override drivers/char/random in FIPS mode
-https://gitlab.com/cki-project/kernel-ark/-/commit/af64073bd494d1b47c287fc0108ba96a35d0367b
- af64073bd494d1b47c287fc0108ba96a35d0367b Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64
+https://gitlab.com/cki-project/kernel-ark/-/commit/65d1b706fca339b0903f4fbfeaf8d178b8172c7e
+ 65d1b706fca339b0903f4fbfeaf8d178b8172c7e random: Add hook to override device reads and getrandom(2)
-https://gitlab.com/cki-project/kernel-ark/-/commit/b1f7767cb10f5580f27a85879af827211582240d
- b1f7767cb10f5580f27a85879af827211582240d redhat: version two of Makefile.rhelver tweaks
+https://gitlab.com/cki-project/kernel-ark/-/commit/c90965635e3602b0c9e4cc886d676c442dd42258
+ c90965635e3602b0c9e4cc886d676c442dd42258 scsi: sd: Add "probe_type" module parameter to allow synchronous probing
-https://gitlab.com/cki-project/kernel-ark/-/commit/982f7106d82a1e440cbcd67ce63d7ce7cd50e5e5
- 982f7106d82a1e440cbcd67ce63d7ce7cd50e5e5 redhat: adapt to upstream Makefile change
+https://gitlab.com/cki-project/kernel-ark/-/commit/38785ac0bb912f801fded5a5941d88b04d7d7290
+ 38785ac0bb912f801fded5a5941d88b04d7d7290 Revert "Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64"
-https://gitlab.com/cki-project/kernel-ark/-/commit/e3f67e0f1b929889e65bbfe5fb95b5a1fa0be860
- e3f67e0f1b929889e65bbfe5fb95b5a1fa0be860 Change acpi_bus_get_acpi_device to acpi_get_acpi_dev
+https://gitlab.com/cki-project/kernel-ark/-/commit/afb130da7fa29ace02a6503e9a6ace1a20f308f6
+ afb130da7fa29ace02a6503e9a6ace1a20f308f6 Enable IO_URING for RHEL
-https://gitlab.com/cki-project/kernel-ark/-/commit/f4cf25715646744728f260cbd557200859531f45
- f4cf25715646744728f260cbd557200859531f45 REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70
+https://gitlab.com/cki-project/kernel-ark/-/commit/35af8d13f76ff5350cede226edd174d3c0da8746
+ 35af8d13f76ff5350cede226edd174d3c0da8746 Remove EXPERT from ARCH_FORCE_MAX_ORDER for aarch64
-https://gitlab.com/cki-project/kernel-ark/-/commit/972bc4c647a0fd5e77b16cb5961acf33779cd85e
- 972bc4c647a0fd5e77b16cb5961acf33779cd85e KEYS: Make use of platform keyring for module signature verify
+https://gitlab.com/cki-project/kernel-ark/-/commit/6fc82f934cef12036a096abd8b6c96aaa91caa27
+ 6fc82f934cef12036a096abd8b6c96aaa91caa27 redhat: version two of Makefile.rhelver tweaks
-https://gitlab.com/cki-project/kernel-ark/-/commit/a81bc7d379eec8d7d656a214c5d61b766da600f3
- a81bc7d379eec8d7d656a214c5d61b766da600f3 Input: rmi4 - remove the need for artificial IRQ in case of HID
+https://gitlab.com/cki-project/kernel-ark/-/commit/4514ddff557ce3d0376ba0987caed185f7add413
+ 4514ddff557ce3d0376ba0987caed185f7add413 redhat: adapt to upstream Makefile change
-https://gitlab.com/cki-project/kernel-ark/-/commit/75e64275d4826f21b0a52a0bc502fc45409dd162
- 75e64275d4826f21b0a52a0bc502fc45409dd162 ARM: tegra: usb no reset
+https://gitlab.com/cki-project/kernel-ark/-/commit/3070d9bf71f868356d7981c303f905e09db7f181
+ 3070d9bf71f868356d7981c303f905e09db7f181 Change acpi_bus_get_acpi_device to acpi_get_acpi_dev
-https://gitlab.com/cki-project/kernel-ark/-/commit/bd8667dc26d8e02a694bd16410cf3ff98a12dd33
- bd8667dc26d8e02a694bd16410cf3ff98a12dd33 s390: Lock down the kernel when the IPL secure flag is set
+https://gitlab.com/cki-project/kernel-ark/-/commit/38541e47233d3488faf6e03e3c9766d89594da4c
+ 38541e47233d3488faf6e03e3c9766d89594da4c RHEL: disable io_uring support
-https://gitlab.com/cki-project/kernel-ark/-/commit/eb4d5c8c36cda70fb6d202ffc02e1e88bd9cfbfb
- eb4d5c8c36cda70fb6d202ffc02e1e88bd9cfbfb efi: Lock down the kernel if booted in secure boot mode
+https://gitlab.com/cki-project/kernel-ark/-/commit/43e1a1bf7e0e75155e871e6073f102fcf2521bf2
+ 43e1a1bf7e0e75155e871e6073f102fcf2521bf2 REDHAT: coresight: etm4x: Disable coresight on HPE Apollo 70
-https://gitlab.com/cki-project/kernel-ark/-/commit/f4ba6bed48d0f4fcb4cedc79d0328e4423f82b32
- f4ba6bed48d0f4fcb4cedc79d0328e4423f82b32 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
+https://gitlab.com/cki-project/kernel-ark/-/commit/60b325a0fe9439e714c086ad9c1953ef336d9c18
+ 60b325a0fe9439e714c086ad9c1953ef336d9c18 KEYS: Make use of platform keyring for module signature verify
-https://gitlab.com/cki-project/kernel-ark/-/commit/491147cb07452a185d4a45ac5eacda5e1610269f
- 491147cb07452a185d4a45ac5eacda5e1610269f security: lockdown: expose a hook to lock the kernel down
+https://gitlab.com/cki-project/kernel-ark/-/commit/720413433847a69179713f8acc9ddf34b97aa0cc
+ 720413433847a69179713f8acc9ddf34b97aa0cc Input: rmi4 - remove the need for artificial IRQ in case of HID
-https://gitlab.com/cki-project/kernel-ark/-/commit/23a6deaae098060905cd45e10bf76623e6780b0c
- 23a6deaae098060905cd45e10bf76623e6780b0c Make get_cert_list() use efi_status_to_str() to print error messages.
+https://gitlab.com/cki-project/kernel-ark/-/commit/1c4d521584814938e16894cedd74fecc7fae4e4d
+ 1c4d521584814938e16894cedd74fecc7fae4e4d ARM: tegra: usb no reset
-https://gitlab.com/cki-project/kernel-ark/-/commit/d4b0376586d603bbb8645df9765307d1e41a5873
- d4b0376586d603bbb8645df9765307d1e41a5873 Add efi_status_to_str() and rework efi_status_to_err().
+https://gitlab.com/cki-project/kernel-ark/-/commit/b9ac33fa8da358c7cd9d5fcf81a81e9440c4f4e8
+ b9ac33fa8da358c7cd9d5fcf81a81e9440c4f4e8 arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT
-https://gitlab.com/cki-project/kernel-ark/-/commit/a503547abadf03a34b2e0ca68006e21500dff7d0
- a503547abadf03a34b2e0ca68006e21500dff7d0 iommu/arm-smmu: workaround DMA mode issues
+https://gitlab.com/cki-project/kernel-ark/-/commit/9b433e174c62feee214f54c0c37c6b9ef563c17c
+ 9b433e174c62feee214f54c0c37c6b9ef563c17c s390: Lock down the kernel when the IPL secure flag is set
-https://gitlab.com/cki-project/kernel-ark/-/commit/c71c74bfaad1f6416f0f381abd64763ad2561669
- c71c74bfaad1f6416f0f381abd64763ad2561669 ipmi: do not configure ipmi for HPE m400
+https://gitlab.com/cki-project/kernel-ark/-/commit/f12e9938ce152070d1321726f9350ddf45954456
+ f12e9938ce152070d1321726f9350ddf45954456 efi: Lock down the kernel if booted in secure boot mode
-https://gitlab.com/cki-project/kernel-ark/-/commit/68825f508efb8b68ece87efce84927b61f2f8421
- 68825f508efb8b68ece87efce84927b61f2f8421 ahci: thunderx2: Fix for errata that affects stop engine
+https://gitlab.com/cki-project/kernel-ark/-/commit/9a13b2349fb725958f5325ff8523376101ef8383
+ 9a13b2349fb725958f5325ff8523376101ef8383 efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
-https://gitlab.com/cki-project/kernel-ark/-/commit/d9e09cccc36eb88ea94f7012af07fe90b5ae7148
- d9e09cccc36eb88ea94f7012af07fe90b5ae7148 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon
+https://gitlab.com/cki-project/kernel-ark/-/commit/0af95004576d1c8c70ddb214f32067d033d6649c
+ 0af95004576d1c8c70ddb214f32067d033d6649c security: lockdown: expose a hook to lock the kernel down
-https://gitlab.com/cki-project/kernel-ark/-/commit/0f80caf1384053933abbed494860f4382785a559
- 0f80caf1384053933abbed494860f4382785a559 tags.sh: Ignore redhat/rpm
+https://gitlab.com/cki-project/kernel-ark/-/commit/66c1104a75fd35975a3fd001a80e6cfe6e4e2e95
+ 66c1104a75fd35975a3fd001a80e6cfe6e4e2e95 Make get_cert_list() use efi_status_to_str() to print error messages.
-https://gitlab.com/cki-project/kernel-ark/-/commit/79fb8fec7b0127a8c0c3c0ff3639f69d8df95ced
- 79fb8fec7b0127a8c0c3c0ff3639f69d8df95ced aarch64: acpi scan: Fix regression related to X-Gene UARTs
+https://gitlab.com/cki-project/kernel-ark/-/commit/9b009a11be7b5673b633f97dd79bbbb4a2a383d5
+ 9b009a11be7b5673b633f97dd79bbbb4a2a383d5 Add efi_status_to_str() and rework efi_status_to_err().
-https://gitlab.com/cki-project/kernel-ark/-/commit/92c71a695476a9dceedba19c80426b04212e83e1
- 92c71a695476a9dceedba19c80426b04212e83e1 ACPI / irq: Workaround firmware issue on X-Gene based m400
+https://gitlab.com/cki-project/kernel-ark/-/commit/31acc47a35aa48eb72f286c23bd3dc6170d4679b
+ 31acc47a35aa48eb72f286c23bd3dc6170d4679b arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT
-https://gitlab.com/cki-project/kernel-ark/-/commit/271b9d1c79a8f8bdd0be002164fb26197d8f97c7
- 271b9d1c79a8f8bdd0be002164fb26197d8f97c7 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support
+https://gitlab.com/cki-project/kernel-ark/-/commit/a1251f95f26d81227f6f9f9c5a6da0ba878c101f
+ a1251f95f26d81227f6f9f9c5a6da0ba878c101f iommu/arm-smmu: workaround DMA mode issues
-https://gitlab.com/cki-project/kernel-ark/-/commit/0ffa30e9c57ac3ba7541a4f8de93529261057492
- 0ffa30e9c57ac3ba7541a4f8de93529261057492 Introduce CONFIG_RH_DISABLE_DEPRECATED
+https://gitlab.com/cki-project/kernel-ark/-/commit/3a9a8d542ceb13c88aec9a01641e622f902966ef
+ 3a9a8d542ceb13c88aec9a01641e622f902966ef ipmi: do not configure ipmi for HPE m400
-https://gitlab.com/cki-project/kernel-ark/-/commit/a37d01ec36990daa364c76348e2943abc990fb80
- a37d01ec36990daa364c76348e2943abc990fb80 Pull the RHEL version defines out of the Makefile
+https://gitlab.com/cki-project/kernel-ark/-/commit/92a98c325754a3b7ac5120be23d44c4b39be2ff4
+ 92a98c325754a3b7ac5120be23d44c4b39be2ff4 ahci: thunderx2: Fix for errata that affects stop engine
-https://gitlab.com/cki-project/kernel-ark/-/commit/4263a1d58a8680d200652698c52a0d77d25a50d3
- 4263a1d58a8680d200652698c52a0d77d25a50d3 [initial commit] Add Red Hat variables in the top level makefile
+https://gitlab.com/cki-project/kernel-ark/-/commit/c8e9b8316a520281c415bbcd5d4e79c83ef1efe2
+ c8e9b8316a520281c415bbcd5d4e79c83ef1efe2 Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/596ed9913c9baa40872fae05c2b2d25361d9ba5a
+ 596ed9913c9baa40872fae05c2b2d25361d9ba5a tags.sh: Ignore redhat/rpm
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/ad9ca98ac11c17c7c0a86150fd39fdb2c5555eae
+ ad9ca98ac11c17c7c0a86150fd39fdb2c5555eae aarch64: acpi scan: Fix regression related to X-Gene UARTs
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/51d0866487663784d1cc1665d804f5a7fe62d171
+ 51d0866487663784d1cc1665d804f5a7fe62d171 ACPI / irq: Workaround firmware issue on X-Gene based m400
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/301279f0f655f76a7ca1ed8583a483253139a2a9
+ 301279f0f655f76a7ca1ed8583a483253139a2a9 ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/9c3c3b074c576933be673f718aa7444273317ab5
+ 9c3c3b074c576933be673f718aa7444273317ab5 Pull the RHEL version defines out of the Makefile
+
+https://gitlab.com/cki-project/kernel-ark/-/commit/030267e59ba8d0219857aceb6e41fb9ced3b386f
+ 030267e59ba8d0219857aceb6e41fb9ced3b386f [initial commit] Add Red Hat variables in the top level makefile
diff --git a/SOURCES/asus-linux.patch b/SOURCES/asus-linux.patch
index 99985c0..d7817b7 100644
--- a/SOURCES/asus-linux.patch
+++ b/SOURCES/asus-linux.patch
@@ -1,1927 +1,140 @@
-From a120838990cea1397e9bacb303b41ab83fa76d8c Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Luke D. Jones" <luke@ljones.dev>
Date: Sun, 10 Mar 2024 15:14:37 +1300
-Subject: [PATCH v4 1/9] platform/x86: asus-wmi: add support for 2024 ROG
- Mini-LED
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
+Subject: [PATCH] asus-linux
-Support the 2024 mini-led backlight and adjust the related functions
-to select the relevant dev-id. Also add `available_mini_led_mode` to the
-platform sysfs since the available mini-led levels can be different.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- .../ABI/testing/sysfs-platform-asus-wmi | 8 ++
- drivers/platform/x86/asus-wmi.c | 96 +++++++++++++++++--
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 3 files changed, 95 insertions(+), 10 deletions(-)
-
-diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-index 8a7e25bde085..ef1ac1a20a71 100644
---- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
-+++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-@@ -126,6 +126,14 @@ Description:
- Change the mini-LED mode:
- * 0 - Single-zone,
- * 1 - Multi-zone
-+ * 2 - Multi-zone strong (available on newer generation mini-led)
-+
-+What: /sys/devices/platform/<platform>/available_mini_led_mode
-+Date: Apr 2024
-+KernelVersion: 6.10
-+Contact: "Luke Jones" <luke@ljones.dev>
-+Description:
-+ List the available mini-led modes.
-
- What: /sys/devices/platform/<platform>/ppt_pl1_spl
- Date: Jun 2023
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 3f07bbf809ef..aa2a3b402e33 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -126,6 +126,17 @@ module_param(fnlock_default, bool, 0444);
- #define ASUS_SCREENPAD_BRIGHT_MAX 255
- #define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
-
-+#define ASUS_MINI_LED_MODE_MASK 0x03
-+/* Standard modes for devices with only on/off */
-+#define ASUS_MINI_LED_OFF 0x00
-+#define ASUS_MINI_LED_ON 0x01
-+/* New mode on some devices, define here to clarify remapping later */
-+#define ASUS_MINI_LED_STRONG_MODE 0x02
-+/* New modes for devices with 3 mini-led mode types */
-+#define ASUS_MINI_LED_2024_WEAK 0x00
-+#define ASUS_MINI_LED_2024_STRONG 0x01
-+#define ASUS_MINI_LED_2024_OFF 0x02
-+
- /* Controls the power state of the USB0 hub on ROG Ally which input is on */
- #define ASUS_USB0_PWR_EC0_CSEE "\\_SB.PCI0.SBRG.EC0.CSEE"
- /* 300ms so far seems to produce a reliable result on AC and battery */
-@@ -288,7 +299,7 @@ struct asus_wmi {
- bool battery_rsoc_available;
-
- bool panel_overdrive_available;
-- bool mini_led_mode_available;
-+ u32 mini_led_dev_id;
-
- struct hotplug_slot hotplug_slot;
- struct mutex hotplug_lock;
-@@ -2108,13 +2119,33 @@ static ssize_t mini_led_mode_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
- struct asus_wmi *asus = dev_get_drvdata(dev);
-- int result;
-+ u32 value;
-+ int err;
-
-- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_MINI_LED_MODE);
-- if (result < 0)
-- return result;
-+ err = asus_wmi_get_devstate(asus, asus->mini_led_dev_id, &value);
-+ if (err < 0)
-+ return err;
-+ value = value & ASUS_MINI_LED_MODE_MASK;
-
-- return sysfs_emit(buf, "%d\n", result);
-+ /*
-+ * Remap the mode values to match previous generation mini-led. The last gen
-+ * WMI 0 == off, while on this version WMI 2 ==off (flipped).
-+ */
-+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2) {
-+ switch (value) {
-+ case ASUS_MINI_LED_2024_WEAK:
-+ value = ASUS_MINI_LED_ON;
-+ break;
-+ case ASUS_MINI_LED_2024_STRONG:
-+ value = ASUS_MINI_LED_STRONG_MODE;
-+ break;
-+ case ASUS_MINI_LED_2024_OFF:
-+ value = ASUS_MINI_LED_OFF;
-+ break;
-+ }
-+ }
-+
-+ return sysfs_emit(buf, "%d\n", value);
- }
-
- static ssize_t mini_led_mode_store(struct device *dev,
-@@ -2130,11 +2161,32 @@ static ssize_t mini_led_mode_store(struct device *dev,
- if (result)
- return result;
-
-- if (mode > 1)
-+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE &&
-+ mode > ASUS_MINI_LED_ON)
-+ return -EINVAL;
-+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2 &&
-+ mode > ASUS_MINI_LED_STRONG_MODE)
- return -EINVAL;
-
-- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MINI_LED_MODE, mode, &result);
-+ /*
-+ * Remap the mode values so expected behaviour is the same as the last
-+ * generation of mini-LED with 0 == off, 1 == on.
-+ */
-+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2) {
-+ switch (mode) {
-+ case ASUS_MINI_LED_OFF:
-+ mode = ASUS_MINI_LED_2024_OFF;
-+ break;
-+ case ASUS_MINI_LED_ON:
-+ mode = ASUS_MINI_LED_2024_WEAK;
-+ break;
-+ case ASUS_MINI_LED_STRONG_MODE:
-+ mode = ASUS_MINI_LED_2024_STRONG;
-+ break;
-+ }
-+ }
-
-+ err = asus_wmi_set_devstate(asus->mini_led_dev_id, mode, &result);
- if (err) {
- pr_warn("Failed to set mini-LED: %d\n", err);
- return err;
-@@ -2151,6 +2203,23 @@ static ssize_t mini_led_mode_store(struct device *dev,
- }
- static DEVICE_ATTR_RW(mini_led_mode);
-
-+static ssize_t available_mini_led_mode_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ switch (asus->mini_led_dev_id) {
-+ case ASUS_WMI_DEVID_MINI_LED_MODE:
-+ return sysfs_emit(buf, "0 1\n");
-+ case ASUS_WMI_DEVID_MINI_LED_MODE2:
-+ return sysfs_emit(buf, "0 1 2\n");
-+ }
-+
-+ return sysfs_emit(buf, "0\n");
-+}
-+
-+static DEVICE_ATTR_RO(available_mini_led_mode);
-+
- /* Quirks *********************************************************************/
-
- static void asus_wmi_set_xusb2pr(struct asus_wmi *asus)
-@@ -4139,6 +4208,7 @@ static struct attribute *platform_attributes[] = {
- &dev_attr_nv_temp_target.attr,
- &dev_attr_panel_od.attr,
- &dev_attr_mini_led_mode.attr,
-+ &dev_attr_available_mini_led_mode.attr,
- NULL
- };
-
-@@ -4191,7 +4261,9 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_panel_od.attr)
- ok = asus->panel_overdrive_available;
- else if (attr == &dev_attr_mini_led_mode.attr)
-- ok = asus->mini_led_mode_available;
-+ ok = asus->mini_led_dev_id != 0;
-+ else if (attr == &dev_attr_available_mini_led_mode.attr)
-+ ok = asus->mini_led_dev_id != 0;
-
- if (devid != -1)
- ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0);
-@@ -4444,10 +4516,14 @@ static int asus_wmi_add(struct platform_device *pdev)
- asus->nv_dyn_boost_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_DYN_BOOST);
- asus->nv_temp_tgt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_THERM_TARGET);
- asus->panel_overdrive_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PANEL_OD);
-- asus->mini_led_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE);
- asus->ally_mcu_usb_switch = acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
- && dmi_match(DMI_BOARD_NAME, "RC71L");
-
-+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE))
-+ asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE;
-+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE2))
-+ asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE2;
-+
- err = fan_boost_mode_check_present(asus);
- if (err)
- goto fail_fan_boost_mode;
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index ab1c7deff118..9cadce10ad9a 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -71,6 +71,7 @@
- #define ASUS_WMI_DEVID_LID_FLIP 0x00060062
- #define ASUS_WMI_DEVID_LID_FLIP_ROG 0x00060077
- #define ASUS_WMI_DEVID_MINI_LED_MODE 0x0005001E
-+#define ASUS_WMI_DEVID_MINI_LED_MODE2 0x0005002E
-
- /* Storage */
- #define ASUS_WMI_DEVID_CARDREADER 0x00080013
---
-2.44.0
-
-From b54d273cb1fddcf9ae2618447e23b9f62730e15f Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 10 Mar 2024 17:10:05 +1300
-Subject: [PATCH v4 2/9] platform/x86: asus-wmi: add support for Vivobook GPU
- MUX
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add support for the Vivobook dgpu MUX available on the ASUS Viviobook
-and some of the other ranges (Zen).
-
-This MUX functions exactly the same as the existing ROG MUX support so
-the existing functionality now detects which MUX is available and uses
-that for control.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 22 +++++++++++++---------
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 2 files changed, 14 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index aa2a3b402e33..1ab4380e9771 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -270,7 +270,7 @@ struct asus_wmi {
- bool egpu_enable_available;
- bool egpu_connect_available;
- bool dgpu_disable_available;
-- bool gpu_mux_mode_available;
-+ u32 gpu_mux_dev;
-
- /* Tunables provided by ASUS for gaming laptops */
- bool ppt_pl2_sppt_available;
-@@ -693,8 +693,8 @@ static ssize_t dgpu_disable_store(struct device *dev,
- if (disable > 1)
- return -EINVAL;
-
-- if (asus->gpu_mux_mode_available) {
-- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX);
-+ if (asus->gpu_mux_dev) {
-+ result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev);
- if (result < 0)
- /* An error here may signal greater failure of GPU handling */
- return result;
-@@ -759,8 +759,8 @@ static ssize_t egpu_enable_store(struct device *dev,
- return err;
- }
-
-- if (asus->gpu_mux_mode_available) {
-- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX);
-+ if (asus->gpu_mux_dev) {
-+ result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev);
- if (result < 0) {
- /* An error here may signal greater failure of GPU handling */
- pr_warn("Failed to get gpu mux status: %d\n", result);
-@@ -813,7 +813,7 @@ static ssize_t gpu_mux_mode_show(struct device *dev,
- struct asus_wmi *asus = dev_get_drvdata(dev);
- int result;
-
-- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX);
-+ result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev);
- if (result < 0)
- return result;
-
-@@ -859,7 +859,7 @@ static ssize_t gpu_mux_mode_store(struct device *dev,
- }
- }
-
-- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_GPU_MUX, optimus, &result);
-+ err = asus_wmi_set_devstate(asus->gpu_mux_dev, optimus, &result);
- if (err) {
- dev_err(dev, "Failed to set GPU MUX mode: %d\n", err);
- return err;
-@@ -4239,7 +4239,7 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_dgpu_disable.attr)
- ok = asus->dgpu_disable_available;
- else if (attr == &dev_attr_gpu_mux_mode.attr)
-- ok = asus->gpu_mux_mode_available;
-+ ok = asus->gpu_mux_dev != 0;
- else if (attr == &dev_attr_fan_boost_mode.attr)
- ok = asus->fan_boost_mode_available;
- else if (attr == &dev_attr_throttle_thermal_policy.attr)
-@@ -4505,7 +4505,6 @@ static int asus_wmi_add(struct platform_device *pdev)
- asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
- asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED);
- asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
-- asus->gpu_mux_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX);
- asus->kbd_rgb_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE);
- asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
- asus->ppt_pl2_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL2_SPPT);
-@@ -4524,6 +4523,11 @@ static int asus_wmi_add(struct platform_device *pdev)
- else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE2))
- asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE2;
-
-+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX))
-+ asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX;
-+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX_VIVO))
-+ asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX_VIVO;
-+
- err = fan_boost_mode_check_present(asus);
- if (err)
- goto fail_fan_boost_mode;
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 9cadce10ad9a..b48b024dd844 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -128,6 +128,7 @@
-
- /* gpu mux switch, 0 = dGPU, 1 = Optimus */
- #define ASUS_WMI_DEVID_GPU_MUX 0x00090016
-+#define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026
-
- /* TUF laptop RGB modes/colours */
- #define ASUS_WMI_DEVID_TUF_RGB_MODE 0x00100056
---
-2.44.0
-
-From 3baa8b981e24bb1ae4e468085e89241a0439d259 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 10 Mar 2024 17:20:02 +1300
-Subject: [PATCH v4 3/9] platform/x86: asus-wmi: add support variant of TUF RGB
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Adds support for a second TUF RGB wmi call that some versions of the TUF
-laptop come with. Also adjusts existing support to select whichever is
-available.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 13 +++++++++----
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 2 files changed, 10 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 1ab4380e9771..6896d056d227 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -281,7 +281,7 @@ struct asus_wmi {
- bool nv_dyn_boost_available;
- bool nv_temp_tgt_available;
-
-- bool kbd_rgb_mode_available;
-+ u32 kbd_rgb_dev;
- bool kbd_rgb_state_available;
-
- bool throttle_thermal_policy_available;
-@@ -881,6 +881,7 @@ static ssize_t kbd_rgb_mode_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- u32 cmd, mode, r, g, b, speed;
- int err;
-
-@@ -917,7 +918,7 @@ static ssize_t kbd_rgb_mode_store(struct device *dev,
- speed = 0xeb;
- }
-
-- err = asus_wmi_evaluate_method3(ASUS_WMI_METHODID_DEVS, ASUS_WMI_DEVID_TUF_RGB_MODE,
-+ err = asus_wmi_evaluate_method3(ASUS_WMI_METHODID_DEVS, asus->kbd_rgb_dev,
- cmd | (mode << 8) | (r << 16) | (g << 24), b | (speed << 8), NULL);
- if (err)
- return err;
-@@ -1560,7 +1561,7 @@ static int asus_wmi_led_init(struct asus_wmi *asus)
- {
- int rv = 0, num_rgb_groups = 0, led_val;
-
-- if (asus->kbd_rgb_mode_available)
-+ if (asus->kbd_rgb_dev)
- kbd_rgb_mode_groups[num_rgb_groups++] = &kbd_rgb_mode_group;
- if (asus->kbd_rgb_state_available)
- kbd_rgb_mode_groups[num_rgb_groups++] = &kbd_rgb_state_group;
-@@ -4505,7 +4506,6 @@ static int asus_wmi_add(struct platform_device *pdev)
- asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
- asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED);
- asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
-- asus->kbd_rgb_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE);
- asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
- asus->ppt_pl2_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL2_SPPT);
- asus->ppt_pl1_spl_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL1_SPL);
-@@ -4528,6 +4528,11 @@ static int asus_wmi_add(struct platform_device *pdev)
- else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX_VIVO))
- asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX_VIVO;
-
-+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE))
-+ asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE;
-+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE2))
-+ asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE2;
-+
- err = fan_boost_mode_check_present(asus);
- if (err)
- goto fail_fan_boost_mode;
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index b48b024dd844..3e9a01467c67 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -132,6 +132,7 @@
-
- /* TUF laptop RGB modes/colours */
- #define ASUS_WMI_DEVID_TUF_RGB_MODE 0x00100056
-+#define ASUS_WMI_DEVID_TUF_RGB_MODE2 0x0010005A
-
- /* TUF laptop RGB power/state */
- #define ASUS_WMI_DEVID_TUF_RGB_STATE 0x00100057
---
-2.44.0
-
-From 37f3b097a3f245ab8a12befd37e2d76ed6ebf85f Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 10 Mar 2024 19:03:11 +1300
-Subject: [PATCH v4 4/9] platform/x86: asus-wmi: support toggling POST sound
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add support for toggling the BIOS POST sound on some ASUS laptops.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
+Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
- .../ABI/testing/sysfs-platform-asus-wmi | 9 ++++
- drivers/platform/x86/asus-wmi.c | 51 +++++++++++++++++++
- include/linux/platform_data/x86/asus-wmi.h | 3 ++
- 3 files changed, 63 insertions(+)
+ .../ABI/testing/sysfs-platform-asus-wmi | 23 +-
+ drivers/hid/hid-asus.c | 7 +
+ drivers/hid/hid-ids.h | 1 +
+ drivers/platform/x86/Kconfig | 14 +
+ drivers/platform/x86/Makefile | 1 +
+ drivers/platform/x86/asus-bios.c | 983 ++++++++++++++++++
+ drivers/platform/x86/asus-bios.h | 288 +++++
+ drivers/platform/x86/asus-wmi.c | 754 +++++++-------
+ include/linux/platform_data/x86/asus-wmi.h | 65 ++
+ 9 files changed, 1735 insertions(+), 401 deletions(-)
+ create mode 100644 drivers/platform/x86/asus-bios.c
+ create mode 100644 drivers/platform/x86/asus-bios.h
diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-index ef1ac1a20a71..72933527d2e4 100644
+index 28144371a0f1..984a04f32fd0 100644
--- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
+++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-@@ -194,3 +194,12 @@ Contact: "Luke Jones" <luke@ljones.dev>
+@@ -142,8 +142,8 @@ Contact: "Luke Jones" <luke@ljones.dev>
Description:
- Set the target temperature limit of the Nvidia dGPU:
- * min=75, max=87
-+
-+What: /sys/devices/platform/<platform>/boot_sound
-+Date: Apr 2024
-+KernelVersion: 6.10
-+Contact: "Luke Jones" <luke@ljones.dev>
-+Description:
-+ Set if the BIOS POST sound is played on boot.
-+ * 0 - False,
-+ * 1 - True
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 6896d056d227..6c353b8e8da9 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -2115,6 +2115,54 @@ static ssize_t panel_od_store(struct device *dev,
- }
- static DEVICE_ATTR_RW(panel_od);
-
-+/* Bootup sound ***************************************************************/
-+
-+static ssize_t boot_sound_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+ int result;
-+
-+ result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_BOOT_SOUND);
-+ if (result < 0)
-+ return result;
-+
-+ return sysfs_emit(buf, "%d\n", result);
-+}
-+
-+static ssize_t boot_sound_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int result, err;
-+ u32 snd;
-+
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ result = kstrtou32(buf, 10, &snd);
-+ if (result)
-+ return result;
-+
-+ if (snd > 1)
-+ return -EINVAL;
-+
-+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BOOT_SOUND, snd, &result);
-+ if (err) {
-+ pr_warn("Failed to set boot sound: %d\n", err);
-+ return err;
-+ }
-+
-+ if (result > 1) {
-+ pr_warn("Failed to set panel boot sound (result): 0x%x\n", result);
-+ return -EIO;
-+ }
-+
-+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "boot_sound");
-+
-+ return count;
-+}
-+static DEVICE_ATTR_RW(boot_sound);
-+
- /* Mini-LED mode **************************************************************/
- static ssize_t mini_led_mode_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-@@ -4207,6 +4255,7 @@ static struct attribute *platform_attributes[] = {
- &dev_attr_ppt_platform_sppt.attr,
- &dev_attr_nv_dynamic_boost.attr,
- &dev_attr_nv_temp_target.attr,
-+ &dev_attr_boot_sound.attr,
- &dev_attr_panel_od.attr,
- &dev_attr_mini_led_mode.attr,
- &dev_attr_available_mini_led_mode.attr,
-@@ -4259,6 +4308,8 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- ok = asus->nv_dyn_boost_available;
- else if (attr == &dev_attr_nv_temp_target.attr)
- ok = asus->nv_temp_tgt_available;
-+ else if (attr == &dev_attr_boot_sound.attr)
-+ devid = ASUS_WMI_DEVID_BOOT_SOUND;
- else if (attr == &dev_attr_panel_od.attr)
- ok = asus->panel_overdrive_available;
- else if (attr == &dev_attr_mini_led_mode.attr)
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 3e9a01467c67..3eb5cd6773ad 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -137,6 +137,9 @@
- /* TUF laptop RGB power/state */
- #define ASUS_WMI_DEVID_TUF_RGB_STATE 0x00100057
-
-+/* Bootup sound control */
-+#define ASUS_WMI_DEVID_BOOT_SOUND 0x00130022
-+
- /* DSTS masks */
- #define ASUS_WMI_DSTS_STATUS_BIT 0x00000001
- #define ASUS_WMI_DSTS_UNKNOWN_BIT 0x00000002
---
-2.44.0
-
-From eea03ef05c38fe9bfd8653b13b870bb8f96fe41d Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 11 Mar 2024 12:15:46 +1300
-Subject: [PATCH v4 5/9] platform/x86: asus-wmi: store a min default for ppt
- options
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Laptops with any of the ppt or nv tunables default to the minimum setting
-on boot so we can safely assume a stored value is correct.
-
-This patch adds storing of those values in the local struct, and enables
-reading of those values back. To prevent creating a series of byte holes
-in the struct the "<name>_available" bool is removed and
-`asus_sysfs_is_visible()` uses the `ASUS_WMI_DEVID_<name>` directly.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 127 +++++++++++++++++++++++++-------
- 1 file changed, 99 insertions(+), 28 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 6c353b8e8da9..f13606fc62e6 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -273,13 +273,13 @@ struct asus_wmi {
- u32 gpu_mux_dev;
-
- /* Tunables provided by ASUS for gaming laptops */
-- bool ppt_pl2_sppt_available;
-- bool ppt_pl1_spl_available;
-- bool ppt_apu_sppt_available;
-- bool ppt_plat_sppt_available;
-- bool ppt_fppt_available;
-- bool nv_dyn_boost_available;
-- bool nv_temp_tgt_available;
-+ u32 ppt_pl2_sppt;
-+ u32 ppt_pl1_spl;
-+ u32 ppt_apu_sppt;
-+ u32 ppt_platform_sppt;
-+ u32 ppt_fppt;
-+ u32 nv_dynamic_boost;
-+ u32 nv_temp_target;
-
- u32 kbd_rgb_dev;
- bool kbd_rgb_state_available;
-@@ -1031,11 +1031,21 @@ static ssize_t ppt_pl2_sppt_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->ppt_pl2_sppt = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_pl2_sppt");
-
- return count;
- }
--static DEVICE_ATTR_WO(ppt_pl2_sppt);
-+
-+static ssize_t ppt_pl2_sppt_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->ppt_pl2_sppt);
-+}
-+static DEVICE_ATTR_RW(ppt_pl2_sppt);
-
- /* Tunable: PPT, Intel=PL1, AMD=SPL ******************************************/
- static ssize_t ppt_pl1_spl_store(struct device *dev,
-@@ -1065,11 +1075,20 @@ static ssize_t ppt_pl1_spl_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->ppt_pl1_spl = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_pl1_spl");
-
- return count;
- }
--static DEVICE_ATTR_WO(ppt_pl1_spl);
-+static ssize_t ppt_pl1_spl_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->ppt_pl1_spl);
-+}
-+static DEVICE_ATTR_RW(ppt_pl1_spl);
-
- /* Tunable: PPT APU FPPT ******************************************************/
- static ssize_t ppt_fppt_store(struct device *dev,
-@@ -1099,11 +1118,21 @@ static ssize_t ppt_fppt_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->ppt_fppt = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_fpu_sppt");
-
- return count;
- }
--static DEVICE_ATTR_WO(ppt_fppt);
-+
-+static ssize_t ppt_fppt_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->ppt_fppt);
-+}
-+static DEVICE_ATTR_RW(ppt_fppt);
-
- /* Tunable: PPT APU SPPT *****************************************************/
- static ssize_t ppt_apu_sppt_store(struct device *dev,
-@@ -1133,11 +1162,21 @@ static ssize_t ppt_apu_sppt_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->ppt_apu_sppt = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_apu_sppt");
-
- return count;
- }
--static DEVICE_ATTR_WO(ppt_apu_sppt);
-+
-+static ssize_t ppt_apu_sppt_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->ppt_apu_sppt);
-+}
-+static DEVICE_ATTR_RW(ppt_apu_sppt);
-
- /* Tunable: PPT platform SPPT ************************************************/
- static ssize_t ppt_platform_sppt_store(struct device *dev,
-@@ -1167,11 +1206,21 @@ static ssize_t ppt_platform_sppt_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->ppt_platform_sppt = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_platform_sppt");
-
- return count;
- }
--static DEVICE_ATTR_WO(ppt_platform_sppt);
-+
-+static ssize_t ppt_platform_sppt_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->ppt_platform_sppt);
-+}
-+static DEVICE_ATTR_RW(ppt_platform_sppt);
-
- /* Tunable: NVIDIA dynamic boost *********************************************/
- static ssize_t nv_dynamic_boost_store(struct device *dev,
-@@ -1201,11 +1250,21 @@ static ssize_t nv_dynamic_boost_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->nv_dynamic_boost = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "nv_dynamic_boost");
-
- return count;
- }
--static DEVICE_ATTR_WO(nv_dynamic_boost);
-+
-+static ssize_t nv_dynamic_boost_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->nv_dynamic_boost);
-+}
-+static DEVICE_ATTR_RW(nv_dynamic_boost);
-
- /* Tunable: NVIDIA temperature target ****************************************/
- static ssize_t nv_temp_target_store(struct device *dev,
-@@ -1235,11 +1294,21 @@ static ssize_t nv_temp_target_store(struct device *dev,
- return -EIO;
- }
-
-+ asus->nv_temp_target = value;
- sysfs_notify(&asus->platform_device->dev.kobj, NULL, "nv_temp_target");
-
- return count;
- }
--static DEVICE_ATTR_WO(nv_temp_target);
-+
-+static ssize_t nv_temp_target_show(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%u\n", asus->nv_temp_target);
-+}
-+static DEVICE_ATTR_RW(nv_temp_target);
-
- /* Battery ********************************************************************/
-
-@@ -4295,19 +4364,19 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_throttle_thermal_policy.attr)
- ok = asus->throttle_thermal_policy_available;
- else if (attr == &dev_attr_ppt_pl2_sppt.attr)
-- ok = asus->ppt_pl2_sppt_available;
-+ devid = ASUS_WMI_DEVID_PPT_PL2_SPPT;
- else if (attr == &dev_attr_ppt_pl1_spl.attr)
-- ok = asus->ppt_pl1_spl_available;
-+ devid = ASUS_WMI_DEVID_PPT_PL1_SPL;
- else if (attr == &dev_attr_ppt_fppt.attr)
-- ok = asus->ppt_fppt_available;
-+ devid = ASUS_WMI_DEVID_PPT_FPPT;
- else if (attr == &dev_attr_ppt_apu_sppt.attr)
-- ok = asus->ppt_apu_sppt_available;
-+ devid = ASUS_WMI_DEVID_PPT_APU_SPPT;
- else if (attr == &dev_attr_ppt_platform_sppt.attr)
-- ok = asus->ppt_plat_sppt_available;
-+ devid = ASUS_WMI_DEVID_PPT_PLAT_SPPT;
- else if (attr == &dev_attr_nv_dynamic_boost.attr)
-- ok = asus->nv_dyn_boost_available;
-+ devid = ASUS_WMI_DEVID_NV_DYN_BOOST;
- else if (attr == &dev_attr_nv_temp_target.attr)
-- ok = asus->nv_temp_tgt_available;
-+ devid = ASUS_WMI_DEVID_NV_THERM_TARGET;
- else if (attr == &dev_attr_boot_sound.attr)
- devid = ASUS_WMI_DEVID_BOOT_SOUND;
- else if (attr == &dev_attr_panel_od.attr)
-@@ -4553,18 +4622,20 @@ static int asus_wmi_add(struct platform_device *pdev)
- if (err)
- goto fail_platform;
-
-+ /* ensure defaults for tunables */
-+ asus->ppt_pl2_sppt = 5;
-+ asus->ppt_pl1_spl = 5;
-+ asus->ppt_apu_sppt = 5;
-+ asus->ppt_platform_sppt = 5;
-+ asus->ppt_fppt = 5;
-+ asus->nv_dynamic_boost = 5;
-+ asus->nv_temp_target = 75;
-+
- asus->charge_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_CHARGE_MODE);
- asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
- asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED);
- asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
- asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
-- asus->ppt_pl2_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL2_SPPT);
-- asus->ppt_pl1_spl_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL1_SPL);
-- asus->ppt_fppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_FPPT);
-- asus->ppt_apu_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_APU_SPPT);
-- asus->ppt_plat_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PLAT_SPPT);
-- asus->nv_dyn_boost_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_DYN_BOOST);
-- asus->nv_temp_tgt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_THERM_TARGET);
- asus->panel_overdrive_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PANEL_OD);
- asus->ally_mcu_usb_switch = acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
- && dmi_match(DMI_BOARD_NAME, "RC71L");
---
-2.44.0
-
-From 43355f0d9ba2d6e9ef791c0fe5efbbff872d05ac Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 25 Mar 2024 16:20:57 +1300
-Subject: [PATCH v4 6/9] platform/x86: asus-wmi: adjust formatting of
- ppt-<name>() functions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Shift the call to dev_get_drvdata() up to top of the function block
-in all of the ppt_<name>() functions as part of a minor cleanup.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 21 +++++++--------------
- 1 file changed, 7 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index f13606fc62e6..976e26c82f80 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1008,11 +1008,10 @@ static ssize_t ppt_pl2_sppt_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1052,11 +1051,10 @@ static ssize_t ppt_pl1_spl_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1095,11 +1093,10 @@ static ssize_t ppt_fppt_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1139,11 +1136,10 @@ static ssize_t ppt_apu_sppt_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1183,11 +1179,10 @@ static ssize_t ppt_platform_sppt_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1227,11 +1222,10 @@ static ssize_t nv_dynamic_boost_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
-@@ -1271,11 +1265,10 @@ static ssize_t nv_temp_target_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
- int result, err;
- u32 value;
-
-- struct asus_wmi *asus = dev_get_drvdata(dev);
--
- result = kstrtou32(buf, 10, &value);
- if (result)
- return result;
---
-2.44.0
-
-From 4f772c2affe17d50c791d61c72662df81b18884a Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 25 Mar 2024 11:14:28 +1300
-Subject: [PATCH v4 7/9] platform/x86: asus-wmi: ROG Ally increase wait time,
- allow MCU powersave
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The previous work to allow the MCU to be resumed correctly after sleep
-and resume tried to take the shortest possible time. However as work
-continues in various other parts of the s2idle subsystems it has shown
-that it wasn't entirely reliable.
-
-If the MCU disable/enable call is done correctly the MCU fully removes
-its USB endpoints, and this shows as a full USB device reconnection on
-resume. When we tried to short this as much as possible sometimes the
-MCU doesn't get to complete what it needs to do before going to low-power
-and this affected the reconnection.
-
-Through trial it is found that the minimum time required is approx 1200ms
-to allow a proper disconnect and disable, and the same amount of time on
-resume is required to prevent a rapid disconnect/reconnect happening on
-seemingly random occasions. To be safe the time is now 1500ms for msleep.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 12 ++----------
- 1 file changed, 2 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 976e26c82f80..ab98f91e573c 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -140,7 +140,7 @@ module_param(fnlock_default, bool, 0444);
- /* Controls the power state of the USB0 hub on ROG Ally which input is on */
- #define ASUS_USB0_PWR_EC0_CSEE "\\_SB.PCI0.SBRG.EC0.CSEE"
- /* 300ms so far seems to produce a reliable result on AC and battery */
--#define ASUS_USB0_PWR_EC0_CSEE_WAIT 300
-+#define ASUS_USB0_PWR_EC0_CSEE_WAIT 1500
-
- static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
-
-@@ -4829,6 +4829,7 @@ static int asus_hotk_resume_early(struct device *device)
- struct asus_wmi *asus = dev_get_drvdata(device);
-
- if (asus->ally_mcu_usb_switch) {
-+ /* sleep required to prevent USB0 being yanked then reappearing rapidly */
- if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB8)))
- dev_err(device, "ROG Ally MCU failed to connect USB dev\n");
- else
-@@ -4840,17 +4841,8 @@ static int asus_hotk_resume_early(struct device *device)
- static int asus_hotk_prepare(struct device *device)
- {
- struct asus_wmi *asus = dev_get_drvdata(device);
-- int result, err;
-
- if (asus->ally_mcu_usb_switch) {
-- /* When powersave is enabled it causes many issues with resume of USB hub */
-- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_MCU_POWERSAVE);
-- if (result == 1) {
-- dev_warn(device, "MCU powersave enabled, disabling to prevent resume issues");
-- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MCU_POWERSAVE, 0, &result);
-- if (err || result != 1)
-- dev_err(device, "Failed to set MCU powersave mode: %d\n", err);
-- }
- /* sleep required to ensure USB0 is disabled before sleep continues */
- if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB7)))
- dev_err(device, "ROG Ally MCU failed to disconnect USB dev\n");
---
-2.44.0
-
-From 67529648f99081e63e66c831d2644181ca314c86 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 25 Mar 2024 16:43:12 +1300
-Subject: [PATCH v4 8/9] platform/x86: asus-wmi: Add support for MCU powersave
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add support for an MCU powersave WMI call. This is intended to set the
-MCU in to a low-power mode when sleeping. This mode can cut sleep power
-use by around half.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- .../ABI/testing/sysfs-platform-asus-wmi | 9 ++++
- drivers/platform/x86/asus-wmi.c | 50 +++++++++++++++++++
- 2 files changed, 59 insertions(+)
-
-diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-index 72933527d2e4..28144371a0f1 100644
---- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
-+++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-@@ -203,3 +203,12 @@ Description:
- Set if the BIOS POST sound is played on boot.
- * 0 - False,
- * 1 - True
-+
-+What: /sys/devices/platform/<platform>/mcu_powersave
-+Date: Apr 2024
-+KernelVersion: 6.10
-+Contact: "Luke Jones" <luke@ljones.dev>
-+Description:
-+ Set if the MCU can go in to low-power mode on system sleep
-+ * 0 - False,
-+ * 1 - True
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index ab98f91e573c..d06d9e0c498c 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1303,6 +1303,53 @@ static ssize_t nv_temp_target_show(struct device *dev,
- }
- static DEVICE_ATTR_RW(nv_temp_target);
-
-+/* Ally MCU Powersave ********************************************************/
-+static ssize_t mcu_powersave_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+ int result;
-+
-+ result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_MCU_POWERSAVE);
-+ if (result < 0)
-+ return result;
-+
-+ return sysfs_emit(buf, "%d\n", result);
-+}
-+
-+static ssize_t mcu_powersave_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int result, err;
-+ u32 enable;
-+
-+ struct asus_wmi *asus = dev_get_drvdata(dev);
-+
-+ result = kstrtou32(buf, 10, &enable);
-+ if (result)
-+ return result;
-+
-+ if (enable > 1)
-+ return -EINVAL;
-+
-+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MCU_POWERSAVE, enable, &result);
-+ if (err) {
-+ pr_warn("Failed to set MCU powersave: %d\n", err);
-+ return err;
-+ }
-+
-+ if (result > 1) {
-+ pr_warn("Failed to set MCU powersave (result): 0x%x\n", result);
-+ return -EIO;
-+ }
-+
-+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "mcu_powersave");
-+
-+ return count;
-+}
-+static DEVICE_ATTR_RW(mcu_powersave);
-+
- /* Battery ********************************************************************/
-
- /* The battery maximum charging percentage */
-@@ -4317,6 +4364,7 @@ static struct attribute *platform_attributes[] = {
- &dev_attr_ppt_platform_sppt.attr,
- &dev_attr_nv_dynamic_boost.attr,
- &dev_attr_nv_temp_target.attr,
-+ &dev_attr_mcu_powersave.attr,
- &dev_attr_boot_sound.attr,
- &dev_attr_panel_od.attr,
- &dev_attr_mini_led_mode.attr,
-@@ -4370,6 +4418,8 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- devid = ASUS_WMI_DEVID_NV_DYN_BOOST;
- else if (attr == &dev_attr_nv_temp_target.attr)
- devid = ASUS_WMI_DEVID_NV_THERM_TARGET;
-+ else if (attr == &dev_attr_mcu_powersave.attr)
-+ devid = ASUS_WMI_DEVID_MCU_POWERSAVE;
- else if (attr == &dev_attr_boot_sound.attr)
- devid = ASUS_WMI_DEVID_BOOT_SOUND;
- else if (attr == &dev_attr_panel_od.attr)
---
-2.44.0
-
-From fb8027a2ca91fff199a21300ca2d2afaf264e1d3 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 25 Mar 2024 17:14:00 +1300
-Subject: [PATCH v4 9/9] platform/x86: asus-wmi: cleanup main struct to avoid
- some holes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reorganises some attr-available calls to remove a few unrequired
-booleans in the main driver struct which combined with some
-reorganisation prevents a series of large holes seen with pahole.
-
-Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 17 ++++++-----------
- 1 file changed, 6 insertions(+), 11 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index d06d9e0c498c..2d2b4eca7fd8 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -254,6 +254,9 @@ struct asus_wmi {
- u32 tablet_switch_dev_id;
- bool tablet_switch_inverted;
-
-+ /* The ROG Ally device requires the MCU USB device be disconnected before suspend */
-+ bool ally_mcu_usb_switch;
-+
- enum fan_type fan_type;
- enum fan_type gpu_fan_type;
- enum fan_type mid_fan_type;
-@@ -266,9 +269,7 @@ struct asus_wmi {
- u8 fan_boost_mode_mask;
- u8 fan_boost_mode;
-
-- bool charge_mode_available;
- bool egpu_enable_available;
-- bool egpu_connect_available;
- bool dgpu_disable_available;
- u32 gpu_mux_dev;
-
-@@ -309,9 +310,6 @@ struct asus_wmi {
-
- bool fnlock_locked;
-
-- /* The ROG Ally device requires the MCU USB device be disconnected before suspend */
-- bool ally_mcu_usb_switch;
+ Set the Package Power Target total of CPU: PL1 on Intel, SPL on AMD.
+ Shown on Intel+Nvidia or AMD+Nvidia based systems:
-
- struct asus_wmi_debug debug;
-
- struct asus_wmi_driver *driver;
-@@ -4391,11 +4389,11 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_als_enable.attr)
- devid = ASUS_WMI_DEVID_ALS_ENABLE;
- else if (attr == &dev_attr_charge_mode.attr)
-- ok = asus->charge_mode_available;
-+ devid = ASUS_WMI_DEVID_CHARGE_MODE;
- else if (attr == &dev_attr_egpu_enable.attr)
- ok = asus->egpu_enable_available;
- else if (attr == &dev_attr_egpu_connected.attr)
-- ok = asus->egpu_connect_available;
-+ devid = ASUS_WMI_DEVID_EGPU_CONNECTED;
- else if (attr == &dev_attr_dgpu_disable.attr)
- ok = asus->dgpu_disable_available;
- else if (attr == &dev_attr_gpu_mux_mode.attr)
-@@ -4423,7 +4421,7 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_boot_sound.attr)
- devid = ASUS_WMI_DEVID_BOOT_SOUND;
- else if (attr == &dev_attr_panel_od.attr)
-- ok = asus->panel_overdrive_available;
-+ devid = ASUS_WMI_DEVID_PANEL_OD;
- else if (attr == &dev_attr_mini_led_mode.attr)
- ok = asus->mini_led_dev_id != 0;
- else if (attr == &dev_attr_available_mini_led_mode.attr)
-@@ -4674,12 +4672,9 @@ static int asus_wmi_add(struct platform_device *pdev)
- asus->nv_dynamic_boost = 5;
- asus->nv_temp_target = 75;
-
-- asus->charge_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_CHARGE_MODE);
- asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
-- asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED);
- asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
- asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
-- asus->panel_overdrive_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PANEL_OD);
- asus->ally_mcu_usb_switch = acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
- && dmi_match(DMI_BOARD_NAME, "RC71L");
-
---
-2.44.0
-
-From 8cab59d3fb33f17e3b3fa4937c5d4bf0b59e6b12 Mon Sep 17 00:00:00 2001
-From: Mohamed Ghanmi <mohamed.ghanmi@supcom.tn>
-Date: Fri, 12 Apr 2024 00:56:39 +0100
-Subject: [PATCH] platform/x86: asus-wmi: add support for vivobook fan profiles
-
-Add support for vivobook fan profiles wmi call on the ASUS VIVOBOOK
-to adjust power limits.
-
-These fan profiles have a different device id than the ROG series.
-and different order. This reorders the existing modes and adds a new
-full speed mode available on these laptops.
-
-As part of keeping the patch clean the throttle_thermal_policy_available
-boolean stored in the driver struct is removed and
-throttle_thermal_policy_dev is used in place (as on init it is zeroed).
-
-Signed-off-by: Mohamed Ghanmi <mohamed.ghanmi@supcom.tn>
-Co-developed-by: Luke D. Jones <luke@ljones.dev>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 100 +++++++++++----------
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 2 files changed, 55 insertions(+), 46 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 2d2b4eca7fd8..439d330fb80b 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -97,6 +97,11 @@ module_param(fnlock_default, bool, 0444);
- #define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST 1
- #define ASUS_THROTTLE_THERMAL_POLICY_SILENT 2
-
-+#define ASUS_THROTTLE_THERMAL_POLICY_DEFAULT_VIVO 0
-+#define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST_VIVO 2
-+#define ASUS_THROTTLE_THERMAL_POLICY_SILENT_VIVO 1
-+#define ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED 3
-+
- #define USB_INTEL_XUSB2PR 0xD0
- #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
-
-@@ -285,8 +290,8 @@ struct asus_wmi {
- u32 kbd_rgb_dev;
- bool kbd_rgb_state_available;
-
-- bool throttle_thermal_policy_available;
- u8 throttle_thermal_policy_mode;
-+ u32 throttle_thermal_policy_dev;
-
- bool cpu_fan_curve_available;
- bool gpu_fan_curve_available;
-@@ -3153,7 +3158,7 @@ static int fan_curve_get_factory_default(struct asus_wmi *asus, u32 fan_dev)
- int err, fan_idx;
- u8 mode = 0;
-
-- if (asus->throttle_thermal_policy_available)
-+ if (asus->throttle_thermal_policy_dev)
- mode = asus->throttle_thermal_policy_mode;
- /* DEVID_<C/G>PU_FAN_CURVE is switched for OVERBOOST vs SILENT */
- if (mode == 2)
-@@ -3360,7 +3365,7 @@ static ssize_t fan_curve_enable_store(struct device *dev,
- * For machines with throttle this is the only way to reset fans
- * to default mode of operation (does not erase curve data).
- */
-- if (asus->throttle_thermal_policy_available) {
-+ if (asus->throttle_thermal_policy_dev) {
- err = throttle_thermal_policy_write(asus);
- if (err)
- return err;
-@@ -3577,8 +3582,8 @@ static const struct attribute_group asus_fan_curve_attr_group = {
- __ATTRIBUTE_GROUPS(asus_fan_curve_attr);
-
- /*
-- * Must be initialised after throttle_thermal_policy_check_present() as
-- * we check the status of throttle_thermal_policy_available during init.
-+ * Must be initialised after throttle_thermal_policy_dev is set as
-+ * we check the status of throttle_thermal_policy_dev during init.
- */
- static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
- {
-@@ -3619,38 +3624,31 @@ static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
- }
+- * min=5, max=250
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
- /* Throttle thermal policy ****************************************************/
--
--static int throttle_thermal_policy_check_present(struct asus_wmi *asus)
--{
-- u32 result;
-- int err;
--
-- asus->throttle_thermal_policy_available = false;
--
-- err = asus_wmi_get_devstate(asus,
-- ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY,
-- &result);
-- if (err) {
-- if (err == -ENODEV)
-- return 0;
-- return err;
-- }
--
-- if (result & ASUS_WMI_DSTS_PRESENCE_BIT)
-- asus->throttle_thermal_policy_available = true;
--
-- return 0;
--}
+ What: /sys/devices/platform/<platform>/ppt_pl2_sppt
+ Date: Jun 2023
+@@ -152,8 +152,8 @@ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the Slow Package Power Tracking Limit of CPU: PL2 on Intel, SPPT,
+ on AMD. Shown on Intel+Nvidia or AMD+Nvidia based systems:
-
- static int throttle_thermal_policy_write(struct asus_wmi *asus)
- {
-- int err;
-- u8 value;
-+ u8 value = asus->throttle_thermal_policy_mode;
- u32 retval;
-+ bool vivo;
-+ int err;
-
-- value = asus->throttle_thermal_policy_mode;
-+ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
-+ if (vivo) {
-+ switch (value) {
-+ case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT:
-+ value = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT_VIVO;
-+ break;
-+ case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST:
-+ value = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST_VIVO;
-+ break;
-+ case ASUS_THROTTLE_THERMAL_POLICY_SILENT:
-+ value = ASUS_THROTTLE_THERMAL_POLICY_SILENT_VIVO;
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-
-- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY,
-+ err = asus_wmi_set_devstate(asus->throttle_thermal_policy_dev,
- value, &retval);
-
- sysfs_notify(&asus->platform_device->dev.kobj, NULL,
-@@ -3680,7 +3678,7 @@ static int throttle_thermal_policy_write(struct asus_wmi *asus)
-
- static int throttle_thermal_policy_set_default(struct asus_wmi *asus)
- {
-- if (!asus->throttle_thermal_policy_available)
-+ if (!asus->throttle_thermal_policy_dev)
- return 0;
-
- asus->throttle_thermal_policy_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
-@@ -3690,9 +3688,14 @@ static int throttle_thermal_policy_set_default(struct asus_wmi *asus)
- static int throttle_thermal_policy_switch_next(struct asus_wmi *asus)
- {
- u8 new_mode = asus->throttle_thermal_policy_mode + 1;
-+ bool vivo;
- int err;
-
-- if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
-+ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
-+ if (!vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
-+ new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
-+
-+ if (vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED)
- new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
-
- asus->throttle_thermal_policy_mode = new_mode;
-@@ -3725,13 +3728,17 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
- struct asus_wmi *asus = dev_get_drvdata(dev);
- u8 new_mode;
- int result;
-+ bool vivo;
- int err;
-
- result = kstrtou8(buf, 10, &new_mode);
- if (result < 0)
- return result;
-
-- if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
-+ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
-+ if (vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED)
-+ return -EINVAL;
-+ else if (!vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
- return -EINVAL;
-
- asus->throttle_thermal_policy_mode = new_mode;
-@@ -3748,7 +3755,10 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
- return count;
- }
-
--// Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
-+/*
-+ * Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
-+ * VIVOBOOK: 3 - fans full speed
-+ */
- static DEVICE_ATTR_RW(throttle_thermal_policy);
+- * min=5, max=250
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
- /* Platform profile ***********************************************************/
-@@ -3814,7 +3824,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
- * Not an error if a component platform_profile relies on is unavailable
- * so early return, skipping the setup of platform_profile.
- */
-- if (!asus->throttle_thermal_policy_available)
-+ if (!asus->throttle_thermal_policy_dev)
- return 0;
+ What: /sys/devices/platform/<platform>/ppt_fppt
+ Date: Jun 2023
+@@ -161,7 +161,8 @@ KernelVersion: 6.5
+ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the Fast Package Power Tracking Limit of CPU. AMD+Nvidia only:
+- * min=5, max=250
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
- dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");
-@@ -4229,7 +4239,7 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
- if (code == NOTIFY_KBD_FBM || code == NOTIFY_KBD_TTP) {
- if (asus->fan_boost_mode_available)
- fan_boost_mode_switch_next(asus);
-- if (asus->throttle_thermal_policy_available)
-+ if (asus->throttle_thermal_policy_dev)
- throttle_thermal_policy_switch_next(asus);
- return;
+ What: /sys/devices/platform/<platform>/ppt_apu_sppt
+ Date: Jun 2023
+@@ -169,7 +170,8 @@ KernelVersion: 6.5
+ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the APU SPPT limit. Shown on full AMD systems only:
+- * min=5, max=130
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
-@@ -4401,7 +4411,7 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_fan_boost_mode.attr)
- ok = asus->fan_boost_mode_available;
- else if (attr == &dev_attr_throttle_thermal_policy.attr)
-- ok = asus->throttle_thermal_policy_available;
-+ ok = asus->throttle_thermal_policy_dev != 0;
- else if (attr == &dev_attr_ppt_pl2_sppt.attr)
- devid = ASUS_WMI_DEVID_PPT_PL2_SPPT;
- else if (attr == &dev_attr_ppt_pl1_spl.attr)
-@@ -4693,16 +4703,15 @@ static int asus_wmi_add(struct platform_device *pdev)
- else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE2))
- asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE2;
+ What: /sys/devices/platform/<platform>/ppt_platform_sppt
+ Date: Jun 2023
+@@ -177,7 +179,8 @@ KernelVersion: 6.5
+ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the platform SPPT limit. Shown on full AMD systems only:
+- * min=5, max=130
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
-+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY))
-+ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY;
-+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO))
-+ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
-+
- err = fan_boost_mode_check_present(asus);
- if (err)
- goto fail_fan_boost_mode;
+ What: /sys/devices/platform/<platform>/nv_dynamic_boost
+ Date: Jun 2023
+@@ -185,7 +188,8 @@ KernelVersion: 6.5
+ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the dynamic boost limit of the Nvidia dGPU:
+- * min=5, max=25
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
-- err = throttle_thermal_policy_check_present(asus);
-- if (err)
-- goto fail_throttle_thermal_policy;
-- else
-- throttle_thermal_policy_set_default(asus);
--
- err = platform_profile_setup(asus);
- if (err)
- goto fail_platform_profile_setup;
-@@ -4797,7 +4806,6 @@ static int asus_wmi_add(struct platform_device *pdev)
- fail_input:
- asus_wmi_sysfs_exit(asus->platform_device);
- fail_sysfs:
--fail_throttle_thermal_policy:
- fail_custom_fan_curve:
- fail_platform_profile_setup:
- if (asus->platform_profile_support)
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 3eb5cd6773ad..982a637744ec 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -64,6 +64,7 @@
- #define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032
- #define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018
- #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075
-+#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
+ What: /sys/devices/platform/<platform>/nv_temp_target
+ Date: Jun 2023
+@@ -193,7 +197,8 @@ KernelVersion: 6.5
+ Contact: "Luke Jones" <luke@ljones.dev>
+ Description:
+ Set the target temperature limit of the Nvidia dGPU:
+- * min=75, max=87
++ * min/max varies, read *_min/*_max sysfs entries
++ * -1 resets to default
- /* Misc */
- #define ASUS_WMI_DEVID_PANEL_OD 0x00050019
---
-2.44.0
-
-From de9b01c3b8869451d4cf44ab0baf55440e804fc6 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sat, 2 Dec 2023 17:47:59 +1300
-Subject: [PATCH 2/4] HID: asus: make asus_kbd_init() generic, remove
- rog_nkey_led_init()
-
-Some of the n-key stuff is old and outdated, so
-make asus_kbd_init() generic to use with other
-report ID and remove rog_nkey_led_init().
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/hid/hid-asus.c | 70 +++++++++++-------------------------------
- 1 file changed, 18 insertions(+), 52 deletions(-)
-
+ What: /sys/devices/platform/<platform>/boot_sound
+ Date: Apr 2024
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
-index 855972a4470f..cdd998a761fe 100644
+index 37e6d25593c2..af57a5f03193 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
-@@ -386,9 +386,9 @@ static int asus_kbd_set_report(struct hid_device *hdev, const u8 *buf, size_t bu
- return ret;
- }
-
--static int asus_kbd_init(struct hid_device *hdev)
-+static int asus_kbd_init(struct hid_device *hdev, u8 report_id)
- {
-- const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x41, 0x53, 0x55, 0x53, 0x20, 0x54,
-+ const u8 buf[] = { report_id, 0x41, 0x53, 0x55, 0x53, 0x20, 0x54,
- 0x65, 0x63, 0x68, 0x2e, 0x49, 0x6e, 0x63, 0x2e, 0x00 };
- int ret;
-
-@@ -400,9 +400,10 @@ static int asus_kbd_init(struct hid_device *hdev)
- }
-
- static int asus_kbd_get_functions(struct hid_device *hdev,
-- unsigned char *kbd_func)
-+ unsigned char *kbd_func,
-+ u8 report_id)
- {
-- const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x05, 0x20, 0x31, 0x00, 0x08 };
-+ const u8 buf[] = { report_id, 0x05, 0x20, 0x31, 0x00, 0x08 };
- u8 *readbuf;
- int ret;
-
-@@ -431,51 +432,6 @@ static int asus_kbd_get_functions(struct hid_device *hdev,
- return ret;
- }
-
--static int rog_nkey_led_init(struct hid_device *hdev)
--{
-- const u8 buf_init_start[] = { FEATURE_KBD_LED_REPORT_ID1, 0xB9 };
-- u8 buf_init2[] = { FEATURE_KBD_LED_REPORT_ID1, 0x41, 0x53, 0x55, 0x53, 0x20,
-- 0x54, 0x65, 0x63, 0x68, 0x2e, 0x49, 0x6e, 0x63, 0x2e, 0x00 };
-- u8 buf_init3[] = { FEATURE_KBD_LED_REPORT_ID1,
-- 0x05, 0x20, 0x31, 0x00, 0x08 };
-- int ret;
--
-- hid_info(hdev, "Asus initialise N-KEY Device");
-- /* The first message is an init start */
-- ret = asus_kbd_set_report(hdev, buf_init_start, sizeof(buf_init_start));
-- if (ret < 0) {
-- hid_warn(hdev, "Asus failed to send init start command: %d\n", ret);
-- return ret;
-- }
-- /* Followed by a string */
-- ret = asus_kbd_set_report(hdev, buf_init2, sizeof(buf_init2));
-- if (ret < 0) {
-- hid_warn(hdev, "Asus failed to send init command 1.0: %d\n", ret);
-- return ret;
-- }
-- /* Followed by a string */
-- ret = asus_kbd_set_report(hdev, buf_init3, sizeof(buf_init3));
-- if (ret < 0) {
-- hid_warn(hdev, "Asus failed to send init command 1.1: %d\n", ret);
-- return ret;
-- }
--
-- /* begin second report ID with same data */
-- buf_init2[0] = FEATURE_KBD_LED_REPORT_ID2;
-- buf_init3[0] = FEATURE_KBD_LED_REPORT_ID2;
--
-- ret = asus_kbd_set_report(hdev, buf_init2, sizeof(buf_init2));
-- if (ret < 0) {
-- hid_warn(hdev, "Asus failed to send init command 2.0: %d\n", ret);
-- return ret;
-- }
-- ret = asus_kbd_set_report(hdev, buf_init3, sizeof(buf_init3));
-- if (ret < 0)
-- hid_warn(hdev, "Asus failed to send init command 2.1: %d\n", ret);
--
-- return ret;
--}
--
- static void asus_schedule_work(struct asus_kbd_leds *led)
+@@ -492,12 +492,19 @@ static void asus_kbd_backlight_work(struct work_struct *work)
+ */
+ static bool asus_kbd_wmi_led_control_present(struct hid_device *hdev)
{
- unsigned long flags;
-@@ -558,17 +514,27 @@ static int asus_kbd_register_leds(struct hid_device *hdev)
++ struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
+ u32 value;
int ret;
- if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
-- ret = rog_nkey_led_init(hdev);
-+ /* Initialize keyboard */
-+ ret = asus_kbd_init(hdev, FEATURE_KBD_REPORT_ID);
-+ if (ret < 0)
-+ return ret;
-+
-+ /* The LED endpoint is initialised in two HID */
-+ ret = asus_kbd_init(hdev, FEATURE_KBD_LED_REPORT_ID1);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = asus_kbd_init(hdev, FEATURE_KBD_LED_REPORT_ID2);
- if (ret < 0)
- return ret;
- } else {
- /* Initialize keyboard */
-- ret = asus_kbd_init(hdev);
-+ ret = asus_kbd_init(hdev, FEATURE_KBD_REPORT_ID);
- if (ret < 0)
- return ret;
-
- /* Get keyboard functions */
-- ret = asus_kbd_get_functions(hdev, &kbd_func);
-+ ret = asus_kbd_get_functions(hdev, &kbd_func, FEATURE_KBD_REPORT_ID);
- if (ret < 0)
- return ret;
-
---
-2.44.0
-
-From fe9fe2bbb769c5ffe0d096d9732029f900c65872 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Wed, 29 Nov 2023 22:18:11 +1300
-Subject: [PATCH 3/4] HID: asus: add ROG Ally N-Key ID and keycodes
-
----
- drivers/hid/hid-asus.c | 7 +++++++
- drivers/hid/hid-ids.h | 1 +
- 2 files changed, 8 insertions(+)
-
-diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
-index cdd998a761fe..3a1a6024d299 100644
---- a/drivers/hid/hid-asus.c
-+++ b/drivers/hid/hid-asus.c
-@@ -847,6 +847,10 @@ static int asus_input_mapping(struct hid_device *hdev,
- case 0xb3: asus_map_key_clear(KEY_PROG3); break; /* Fn+Left next aura */
- case 0x6a: asus_map_key_clear(KEY_F13); break; /* Screenpad toggle */
- case 0x4b: asus_map_key_clear(KEY_F14); break; /* Arrows/Pg-Up/Dn toggle */
-+ case 0xa5: asus_map_key_clear(KEY_F15); break; /* ROG Ally left back */
-+ case 0xa6: asus_map_key_clear(KEY_F16); break; /* ROG Ally QAM button */
-+ case 0xa7: asus_map_key_clear(KEY_F17); break; /* ROG Ally ROG long-press */
-+ case 0xa8: asus_map_key_clear(KEY_F18); break; /* ROG Ally ROG long-press-release */
-
+ if (!IS_ENABLED(CONFIG_ASUS_WMI))
+ return false;
- default:
---
-2.44.0
-
-From d9a40306ea83c8799634b6ee8b497d3801967831 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Tue, 2 Apr 2024 15:13:23 +1300
-Subject: [PATCH 4/4] HID: asus: add ROG Z13 lightbar
-
-Add init of the lightbar which is a small panel on the back of the ASUS
-ROG Z13 and uses the same MCU as keyboards.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/hid/hid-asus.c | 3 +++
- drivers/hid/hid-ids.h | 1 +
- 2 files changed, 4 insertions(+)
-
-diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
-index 3a1a6024d299..de0c13babc03 100644
---- a/drivers/hid/hid-asus.c
-+++ b/drivers/hid/hid-asus.c
-@@ -1274,6 +1274,9 @@
- USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3),
- QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
- { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
-+ USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR),
-+ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
- USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD),
- QUIRK_ROG_CLAYMORE_II_KEYBOARD },
- { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
++ if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD &&
++ dmi_check_system(asus_use_hid_led_dmi_ids)) {
++ hid_info(hdev, "using HID for asus::kbd_backlight\n");
++ return false;
++ }
++
+ ret = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS,
+ ASUS_WMI_DEVID_KBD_BACKLIGHT, 0, &value);
+ hid_dbg(hdev, "WMI backlight check: rc %d value %x", ret, value);
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index f1e508a7ef06..94501dbdd463 100644
+index 72d56ee7ce1b..8291699ec56c 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
-@@ -208,6 +208,7 @@
- #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD 0x1866
+@@ -209,6 +209,7 @@
#define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2 0x19b6
#define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3 0x1a30
-+#define USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR 0x18c6
+ #define USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR 0x18c6
++#define USB_DEVICE_ID_ASUSTEK_ROG_RAIKIRI_PAD 0x1abb
+ #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY 0x1abe
#define USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD 0x196b
#define USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD 0x1869
-
---
-2.44.0
-
-From f6690cfd476029bc67f3161705587497dabb6b8e Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Tue, 21 May 2024 18:17:17 +1200
-Subject: [PATCH 1/8] platform/x86: asus-wmi: add debug print in more key
- places
-
-Add more verbose debug print in the WMI method calls. This helps a lot
-with debugging various issues working with regular users as the WMI
-methods can be traced now.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 58 +++++++++++++++++++++++++++------
- 1 file changed, 48 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 799d928c7d3d..4c129881ce28 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -334,20 +334,29 @@ static int asus_wmi_evaluate_method3(u32 method_id,
- status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
- &input, &output);
-
-- if (ACPI_FAILURE(status))
-+ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x, 0x%08x\n",
-+ __func__, method_id, arg0, arg1, arg2);
-+ if (ACPI_FAILURE(status)) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, -EIO);
- return -EIO;
-+ }
-
- obj = (union acpi_object *)output.pointer;
- if (obj && obj->type == ACPI_TYPE_INTEGER)
- tmp = (u32) obj->integer.value;
-
-+ pr_debug("Result: 0x%08x\n", tmp);
- if (retval)
- *retval = tmp;
-
- kfree(obj);
-
-- if (tmp == ASUS_WMI_UNSUPPORTED_METHOD)
-+ if (tmp == ASUS_WMI_UNSUPPORTED_METHOD) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, -ENODEV);
- return -ENODEV;
-+ }
-
- return 0;
- }
-@@ -377,20 +386,29 @@ static int asus_wmi_evaluate_method5(u32 method_id,
- status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
- &input, &output);
-
-- if (ACPI_FAILURE(status))
-+ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
-+ __func__, method_id, arg0, arg1, arg2, arg3, arg4);
-+ if (ACPI_FAILURE(status)) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, -EIO);
- return -EIO;
-+ }
-
- obj = (union acpi_object *)output.pointer;
- if (obj && obj->type == ACPI_TYPE_INTEGER)
- tmp = (u32) obj->integer.value;
-
-+ pr_debug("Result: %x\n", tmp);
- if (retval)
- *retval = tmp;
-
- kfree(obj);
-
-- if (tmp == ASUS_WMI_UNSUPPORTED_METHOD)
-+ if (tmp == ASUS_WMI_UNSUPPORTED_METHOD) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, -ENODEV);
- return -ENODEV;
-+ }
-
- return 0;
- }
-@@ -416,8 +434,13 @@ static int asus_wmi_evaluate_method_buf(u32 method_id,
- status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
- &input, &output);
-
-- if (ACPI_FAILURE(status))
-+ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x\n",
-+ __func__, method_id, arg0, arg1);
-+ if (ACPI_FAILURE(status)) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, -EIO);
- return -EIO;
-+ }
-
- obj = (union acpi_object *)output.pointer;
-
-@@ -453,8 +476,11 @@ static int asus_wmi_evaluate_method_buf(u32 method_id,
-
- kfree(obj);
-
-- if (err)
-+ if (err) {
-+ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
-+ __func__, method_id, arg0, err);
- return err;
-+ }
-
- return 0;
- }
-@@ -542,6 +568,7 @@ static bool asus_wmi_dev_is_present(struct asus_wmi *asus, u32 dev_id)
- {
- u32 retval;
- int status = asus_wmi_get_devstate(asus, dev_id, &retval);
-+ pr_debug("%s called (0x%08x), retval: 0x%08x\n", __func__, dev_id, retval);
-
- return status == 0 && (retval & ASUS_WMI_DSTS_PRESENCE_BIT);
- }
-@@ -3559,18 +3586,27 @@ static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
-
- err = fan_curve_check_present(asus, &asus->cpu_fan_curve_available,
- ASUS_WMI_DEVID_CPU_FAN_CURVE);
-- if (err)
-+ if (err) {
-+ pr_err("%s, checked 0x%08x, failed: %d\n",
-+ __func__, ASUS_WMI_DEVID_CPU_FAN_CURVE, err);
- return err;
-+ }
-
- err = fan_curve_check_present(asus, &asus->gpu_fan_curve_available,
- ASUS_WMI_DEVID_GPU_FAN_CURVE);
-- if (err)
-+ if (err) {
-+ pr_err("%s, checked 0x%08x, failed: %d\n",
-+ __func__, ASUS_WMI_DEVID_GPU_FAN_CURVE, err);
- return err;
-+ }
-
- err = fan_curve_check_present(asus, &asus->mid_fan_curve_available,
- ASUS_WMI_DEVID_MID_FAN_CURVE);
-- if (err)
-+ if (err) {
-+ pr_err("%s, checked 0x%08x, failed: %d\n",
-+ __func__, ASUS_WMI_DEVID_MID_FAN_CURVE, err);
- return err;
-+ }
-
- if (!asus->cpu_fan_curve_available
- && !asus->gpu_fan_curve_available
-@@ -4398,8 +4434,10 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
- else if (attr == &dev_attr_available_mini_led_mode.attr)
- ok = asus->mini_led_dev_id != 0;
-
-- if (devid != -1)
-+ if (devid != -1) {
- ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0);
-+ pr_debug("%s called 0x%08x, ok: %x\n", __func__, devid, ok);
-+ }
-
- return ok ? attr->mode : 0;
- }
---
-2.45.1
-
-From 7a08b0a6a1b47ad7c3e84a14f433c5909ec13679 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Fri, 24 May 2024 10:54:36 +1200
-Subject: [PATCH 2/8] platform/x86: asus-wmi: don't fail if platform_profile
- already registered
-
-On some newer laptops it appears that an AMD driver can register a
-platform_profile handler. If this happens then the asus_wmi driver would
-error with -EEXIST when trying to register its own handler.
-
-We can safely continue loading the driver instead of bombing out.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-wmi.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 4c129881ce28..7d87ff68f418 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -3836,8 +3836,13 @@ static int platform_profile_setup(struct asus_wmi *asus)
- asus->platform_profile_handler.choices);
-
- err = platform_profile_register(&asus->platform_profile_handler);
-- if (err)
-+ if (err == -EEXIST) {
-+ pr_warn("%s, a platform_profile handler is already registered\n", __func__);
-+ return 0;
-+ } else if (err) {
-+ pr_err("%s, failed at platform_profile_register: %d\n", __func__, err);
- return err;
-+ }
-
- asus->platform_profile_support = true;
- return 0;
-@@ -4662,7 +4662,7 @@
- goto fail_fan_boost_mode;
-
- err = platform_profile_setup(asus);
-- if (err)
-+ if (err && err != -EEXIST)
- goto fail_platform_profile_setup;
-
- err = asus_wmi_sysfs_init(asus->platform_device);
---
-2.45.1
-
-From 2ebd194c3d390abdb67e61941f3b71fe149620eb Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Thu, 30 May 2024 13:20:11 +1200
-Subject: [PATCH 3/8] asus-bios: refactor existing tunings in to asus-bios
- module
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/Kconfig | 14 +
- drivers/platform/x86/Makefile | 1 +
- drivers/platform/x86/asus-bios.c | 654 +++++++++++++++++++++
- drivers/platform/x86/asus-bios.h | 234 ++++++++
- drivers/platform/x86/asus-wmi.c | 18 +-
- include/linux/platform_data/x86/asus-wmi.h | 10 +
- 6 files changed, 930 insertions(+), 1 deletion(-)
- create mode 100644 drivers/platform/x86/asus-bios.c
- create mode 100644 drivers/platform/x86/asus-bios.h
-
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
-index 0ec952b5d03e..296b5c9bfbb0 100644
+index 665fa9524986..b4a5a5bec7f3 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
-@@ -264,6 +264,18 @@ config ASUS_WIRELESS
+@@ -265,6 +265,18 @@ config ASUS_WIRELESS
If you choose to compile this driver as a module the module will be
called asus-wireless.
@@ -1940,7 +153,7 @@ index 0ec952b5d03e..296b5c9bfbb0 100644
config ASUS_WMI
tristate "ASUS WMI Driver"
depends on ACPI_WMI
-@@ -275,6 +287,8 @@ config ASUS_WMI
+@@ -276,6 +288,8 @@ config ASUS_WMI
depends on HOTPLUG_PCI
depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on SERIO_I8042 || SERIO_I8042 = n
@@ -1963,10 +176,10 @@ index e1b142947067..d9b5b3f3b241 100644
obj-$(CONFIG_ASUS_TF103C_DOCK) += asus-tf103c-dock.o
diff --git a/drivers/platform/x86/asus-bios.c b/drivers/platform/x86/asus-bios.c
new file mode 100644
-index 000000000000..c245a48c4072
+index 000000000000..bd4c408fd062
--- /dev/null
+++ b/drivers/platform/x86/asus-bios.c
-@@ -0,0 +1,654 @@
+@@ -0,0 +1,983 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Asus BIOS attributes driver
@@ -2011,6 +224,18 @@ index 000000000000..c245a48c4072
+#define ASUS_MINI_LED_2024_STRONG 0x01
+#define ASUS_MINI_LED_2024_OFF 0x02
+
++enum cpu_core_type {
++ CPU_CORE_PERF = 0,
++ CPU_CORE_POWER,
++};
++
++enum cpu_core_value {
++ CPU_CORE_DEFAULT = 0,
++ CPU_CORE_MIN,
++ CPU_CORE_MAX,
++ CPU_CORE_CURRENT,
++};
++
+/* Default limits for tunables available on ASUS ROG laptops */
+#define PPT_CPU_LIMIT_MIN 5
+#define PPT_CPU_LIMIT_MAX 150
@@ -2022,6 +247,7 @@ index 000000000000..c245a48c4072
+#define NVIDIA_BOOST_MAX 25
+#define NVIDIA_TEMP_MIN 75
+#define NVIDIA_TEMP_MAX 87
++#define NVIDIA_GPU_POWER_MAX 70
+
+/* Tunables provided by ASUS for gaming laptops */
+struct rog_tunables {
@@ -2044,6 +270,10 @@ index 000000000000..c245a48c4072
+ u32 nv_temp_default;
+ u32 nv_temp_max;
+ u32 nv_temp_target;
++
++ u32 min_perf_cores;
++ u32 max_perf_cores;
++ u32 max_power_cores;
+};
+
+static const struct class *fw_attr_class;
@@ -2095,7 +325,8 @@ index 000000000000..c245a48c4072
+static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
+
+static bool asus_bios_requires_reboot(struct kobj_attribute *attr) {
-+ return !strcmp(attr->attr.name, "gpu_mux_mode");
++ return !strcmp(attr->attr.name, "gpu_mux_mode") ||
++ !strcmp(attr->attr.name, "panel_hd_mode");
+}
+
+/*
@@ -2392,6 +623,299 @@ index 000000000000..c245a48c4072
+WMI_SHOW_INT(egpu_enable_current_value, "%d\n", ASUS_WMI_DEVID_EGPU);
+ATTR_GROUP_BOOL_CUSTOM(egpu_enable, "egpu_enable", "Enable the eGPU (also disables dGPU)");
+
++/* Device memory available to APU */
++
++static ssize_t apu_mem_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ int err;
++ u32 mem;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_APU_MEM, &mem);
++ if (err)
++ return err;
++
++ switch (mem) {
++ case 256:
++ mem = 0;
++ break;
++ case 258:
++ mem = 1;
++ break;
++ case 259:
++ mem = 2;
++ break;
++ case 260:
++ mem = 3;
++ break;
++ case 261:
++ mem = 4;
++ break;
++ case 262:
++ /* This is out of order and looks wrong but is correct */
++ mem = 8;
++ break;
++ case 263:
++ mem = 5;
++ break;
++ case 264:
++ mem = 6;
++ break;
++ case 265:
++ mem = 7;
++ break;
++ default:
++ mem = 4;
++ break;
++ }
++
++ return sysfs_emit(buf, "%d\n", mem);
++}
++
++static ssize_t apu_mem_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int result, err;
++ u32 requested, mem;
++
++ result = kstrtou32(buf, 10, &requested);
++ if (result)
++ return result;
++
++ switch (requested) {
++ case 0:
++ mem = 0;
++ break;
++ case 1:
++ mem = 258;
++ break;
++ case 2:
++ mem = 259;
++ break;
++ case 3:
++ mem = 260;
++ break;
++ case 4:
++ mem = 261;
++ break;
++ case 5:
++ mem = 263;
++ break;
++ case 6:
++ mem = 264;
++ break;
++ case 7:
++ mem = 265;
++ break;
++ case 8:
++ /* This is outof order and looks wrong but is correct */
++ mem = 262;
++ break;
++ default:
++ return -EIO;
++ }
++
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_APU_MEM, mem, &result);
++ if (err) {
++ pr_warn("Failed to set apu_mem: %d\n", err);
++ return err;
++ }
++
++ pr_info("APU memory changed to %dGB, reboot required\n", requested);
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ asus_set_reboot_and_signal_event();
++
++ return count;
++}
++
++static ssize_t apu_mem_possible_values_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return sysfs_emit(buf, "0;1;2;3;4;5;6;7;8\n");
++}
++ATTR_GROUP_ENUM_CUSTOM(apu_mem, "apu_mem", "Set the available system memory for the APU to use");
++
++static int asus_bios_set_max_cores(void)
++{
++ u32 cores;
++ int err;
++
++ asus_bios.rog_tunables->min_perf_cores = 4;
++ asus_bios.rog_tunables->max_perf_cores = 4;
++ asus_bios.rog_tunables->max_power_cores = 8;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES_MAX, &cores);
++ if (err)
++ return err;
++
++ cores &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
++ asus_bios.rog_tunables->max_power_cores = (cores & 0xff00) >> 8;
++ asus_bios.rog_tunables->max_perf_cores = cores & 0xff;
++
++ return 0;
++}
++
++static ssize_t cores_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf,
++ enum cpu_core_type core_type,
++ enum cpu_core_value core_value)
++{
++ u32 cores;
++ int err;
++
++ switch (core_value) {
++ case CPU_CORE_DEFAULT:
++ case CPU_CORE_MAX:
++ if (core_type == CPU_CORE_PERF)
++ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->max_perf_cores);
++ else
++ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->max_power_cores);
++ case CPU_CORE_MIN:
++ if (core_type == CPU_CORE_PERF)
++ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->min_perf_cores);
++ else
++ return sysfs_emit(buf, "%d\n", 0);
++ default:
++ break;
++ }
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES, &cores);
++ if (err)
++ return err;
++
++ cores &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
++ if (core_type == CPU_CORE_PERF)
++ cores &= 0xff;
++ else
++ cores = (cores & 0xff00) >> 8;
++ return sysfs_emit(buf, "%d\n", cores);
++}
++
++static ssize_t cores_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr, const char *buf,
++ enum cpu_core_type core_type)
++{
++ int result, err;
++ u32 cores, currentv, min, max;
++
++ result = kstrtou32(buf, 10, &cores);
++ if (result)
++ return result;
++
++ if (core_type == CPU_CORE_PERF) {
++ min = asus_bios.rog_tunables->min_perf_cores;
++ max = asus_bios.rog_tunables->max_perf_cores;
++ } else {
++ min = 0;
++ max = asus_bios.rog_tunables->max_power_cores;
++ }
++ if (cores < min || cores > max)
++ return -EINVAL;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES, &currentv);
++ if (err)
++ return err;
++
++ if (core_type == CPU_CORE_PERF)
++ cores |= (currentv & 0xff00);
++ else
++ cores |= currentv & 0xff;
++
++ if (cores == currentv)
++ return 0;
++
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_CORES, cores, &result);
++ if (err) {
++ pr_warn("Failed to set perfromance core count: %d\n", err);
++ return err;
++ }
++
++ if (result > 1) {
++ pr_warn("Failed to set performance core count (result): 0x%x\n", result);
++ return -EIO;
++ }
++
++ pr_info("CPU core count changed, reboot required\n");
++ sysfs_notify(kobj, NULL, attr->attr.name);
++ asus_set_reboot_and_signal_event();
++
++ return 0;
++}
++
++static ssize_t cores_performance_min_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MIN);
++}
++
++static ssize_t cores_performance_max_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MAX);
++}
++
++static ssize_t cores_performance_default_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_DEFAULT);
++}
++
++static ssize_t cores_performance_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_CURRENT);
++}
++
++static ssize_t cores_performance_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int err = cores_current_value_store(kobj, attr, buf, CPU_CORE_PERF);
++ if (err)
++ return err;
++
++ return count;
++}
++ATTR_GROUP_CORES_RW(cores_performance, "cores_performance", ASUS_WMI_DEVID_CORES, "Set the max available performance cores");
++
++static ssize_t cores_efficiency_min_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MIN);
++}
++
++static ssize_t cores_efficiency_max_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MAX);
++}
++
++static ssize_t cores_efficiency_default_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_DEFAULT);
++}
++
++static ssize_t cores_efficiency_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_CURRENT);
++}
++
++static ssize_t cores_efficiency_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int err = cores_current_value_store(kobj, attr, buf, CPU_CORE_POWER);
++ if (err)
++ return err;
++
++ return count;
++}
++ATTR_GROUP_CORES_RW(cores_efficiency, "cores_efficiency", ASUS_WMI_DEVID_CORES, "Set the max available efficiency cores");
++
+/* Simple attribute creation */
+ATTR_GROUP_ENUM_INT_RW(thermal_policy, "thermal_policy", ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, 0, 3, "0;1;2", "Fan stuff todo");
+ATTR_GROUP_PPT_RW(ppt_pl1_spl, "ppt_pl1_spl", ASUS_WMI_DEVID_PPT_PL1_SPL,
@@ -2409,11 +933,15 @@ index 000000000000..c245a48c4072
+ nv_boost_default, 5, nv_boost_max, 1, "Set the Nvidia dynamic boost limit");
+ATTR_GROUP_PPT_RW(nv_temp_target, "nv_temp_target", ASUS_WMI_DEVID_NV_THERM_TARGET,
+ nv_temp_default, 75, nv_temp_max, 1, "Set the Nvidia max thermal limit");
++ATTR_GROUP_INT_VALUE_ONLY_RO(dgpu_base_tgp, "dgpu_base_tgp", ASUS_WMI_DEVID_DGPU_BASE_TGP, "Read the base TGP value")
++ATTR_GROUP_INT_RW(dgpu_tgp, "dgpu_tgp", ASUS_WMI_DEVID_DGPU_SET_TGP,
++ 70, 0, NVIDIA_GPU_POWER_MAX, 1, "Set the additional TGP on top of the base TGP");
+
+ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_MODE, 0, 0, "0;1;2", "Show the current mode of charging");
+ATTR_GROUP_BOOL_RW(boot_sound, "boot_sound", ASUS_WMI_DEVID_BOOT_SOUND, "Set the boot POST sound");
+ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE, "Set MCU powersaving mode");
+ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD, "Set the panel refresh overdrive");
++ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD, "Set the panel HD mode to UHD<0> or FHD<1>");
+ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED, "Show the eGPU connection status");
+
+static int asus_fw_attr_add(void)
@@ -2476,8 +1004,14 @@ index 000000000000..c245a48c4072
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_EGPU_CONNECTED))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &egpu_connected_attr_group);
+
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_CORES_MAX) && !asus_bios_set_max_cores()){
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &cores_performance_attr_group);
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &cores_efficiency_attr_group);
++ }
++
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &thermal_policy_attr_group);
++
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_PPT_PL1_SPL))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &ppt_pl1_spl_attr_group);
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_PPT_PL2_SPPT))
@@ -2493,6 +1027,12 @@ index 000000000000..c245a48c4072
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &nv_dynamic_boost_attr_group);
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_NV_THERM_TARGET))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &nv_temp_target_attr_group);
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU_BASE_TGP))
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_base_tgp_attr_group);
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU_SET_TGP))
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_tgp_attr_group);
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_APU_MEM))
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &apu_mem_attr_group);
+
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_CHARGE_MODE))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &charge_mode_attr_group);
@@ -2502,6 +1042,8 @@ index 000000000000..c245a48c4072
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &mcu_powersave_attr_group);
+ if (asus_wmi_is_present(ASUS_WMI_DEVID_PANEL_OD))
+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &panel_od_attr_group);
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_PANEL_HD))
++ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &panel_hd_mode_attr_group);
+
+ return 0;
+
@@ -2623,10 +1165,10 @@ index 000000000000..c245a48c4072
+module_exit(asus_fw_exit);
diff --git a/drivers/platform/x86/asus-bios.h b/drivers/platform/x86/asus-bios.h
new file mode 100644
-index 000000000000..acae11698a07
+index 000000000000..7016ec14efc1
--- /dev/null
+++ b/drivers/platform/x86/asus-bios.h
-@@ -0,0 +1,234 @@
+@@ -0,0 +1,288 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Definitions for kernel modules using asus-bios driver
@@ -2741,6 +1283,22 @@ index 000000000000..acae11698a07
+static struct kobj_attribute attr_##_attrname##_##_prop = \
+ __ASUS_ATTR_RO(_attrname, _prop);
+
++/* Requires current_value show&|store */
++#define __ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname) \
++__ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, int_type_show); \
++static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++}; \
++static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, \
++ .attrs = _attrname##_attrs \
++};
++
+/* Int style min/max range, base macro. Requires current_value show&|store */
+#define __ATTR_GROUP_INT(_attrname, _fsname, _default, \
+ _min, _max, _incstep, _dispname)\
@@ -2784,6 +1342,15 @@ index 000000000000..acae11698a07
+ .attrs = _attrname##_attrs \
+};
+
++#define ATTR_GROUP_INT_VALUE_ONLY_RO(_attrname, _fsname, _wmi, _dispname) \
++__ATTR_CURRENT_INT_RO(_attrname, _wmi); \
++__ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname);
++
++#define ATTR_GROUP_INT_RW(_attrname, _fsname, _wmi, _default, _min, \
++ _max, _incstep, _dispname) \
++__ATTR_CURRENT_INT_RW(_attrname, _min, _max, _wmi); \
++__ATTR_GROUP_INT(_attrname, _fsname, _default, _min, _max, _incstep, _dispname);
++
+#define ATTR_GROUP_BOOL_RO(_attrname, _fsname, _wmi, _dispname) \
+__ATTR_CURRENT_INT_RO(_attrname, _wmi); \
+__ATTR_GROUP_ENUM(_attrname, _fsname, "0;1", _dispname);
@@ -2834,15 +1401,18 @@ index 000000000000..acae11698a07
+ .attrs = _attrname##_attrs \
+};
+
-+/* ROG PPT attributes need a little different in setup */
-+#define ATTR_GROUP_PPT_RW(_attrname, _fsname, _wmi, _default, \
-+ _min, _max, _incstep, _dispname) \
-+__ROG_TUNABLE_RW(_attrname, _min, _max, _wmi); \
-+__ROG_TUNABLE_SHOW(default_value, _attrname, _default); \
-+__ATTR_SHOW_FMT(min_value, _attrname, "%d\n", _min); \
-+__ROG_TUNABLE_SHOW(max_value, _attrname, _max); \
-+__ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", _incstep); \
++/* CPU core attributes need a little different in setup */
++#define ATTR_GROUP_CORES_RW(_attrname, _fsname, _wmi, _dispname)\
++__ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", 1); \
+__ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RW(_attrname, current_value); \
++static struct kobj_attribute attr_##_attrname##_default_value = \
++ __ASUS_ATTR_RO(_attrname, default_value); \
++static struct kobj_attribute attr_##_attrname##_min_value = \
++ __ASUS_ATTR_RO(_attrname, min_value); \
++static struct kobj_attribute attr_##_attrname##_max_value = \
++ __ASUS_ATTR_RO(_attrname, max_value); \
+static struct kobj_attribute attr_##_attrname##_type = \
+ __ASUS_ATTR_RO_AS(type, int_type_show); \
+static struct attribute *_attrname##_attrs[] = { \
@@ -2860,656 +1430,15 @@ index 000000000000..acae11698a07
+ .attrs = _attrname##_attrs \
+};
+
-+#endif /* _ASUS_BIOSCFG_H_ */
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 7d87ff68f418..a6f2e5325a60 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -529,12 +529,28 @@ static int asus_wmi_get_devstate(struct asus_wmi *asus, u32 dev_id, u32 *retval)
- return 0;
- }
-
--static int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
-+int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
-+{
-+ int err;
-+
-+ err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, dev_id, 0, retval);
-+ if (err)
-+ return err;
-+
-+ if (*retval == ~0)
-+ return -ENODEV;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(asus_wmi_get_devstate_dsts);
-+
-+int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
- u32 *retval)
- {
- return asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS, dev_id,
- ctrl_param, retval);
- }
-+EXPORT_SYMBOL_GPL(asus_wmi_set_devstate);
-
- /* Helper for special devices with magic return codes */
- static int asus_wmi_get_devstate_bits(struct asus_wmi *asus,
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 6ba0015e4386..525cb7c803fe 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -152,8 +152,18 @@
- #define ASUS_WMI_DSTS_LIGHTBAR_MASK 0x0000000F
-
- #if IS_REACHABLE(CONFIG_ASUS_WMI)
-+int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval);
-+int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval);
- int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
- #else
-+static int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
-+{
-+ return -ENODEV;
-+}
-+static int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
-+{
-+ return -ENODEV;
-+}
- static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
- u32 *retval)
- {
---
-2.45.1
-
-From 4a50aed36c4c202688226653511af52f5a4915e1 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 2 Jun 2024 13:44:22 +1200
-Subject: [PATCH 4/8] asus-bios: add panel-hd control
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-bios.c | 6 +++++-
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 2 files changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/platform/x86/asus-bios.c b/drivers/platform/x86/asus-bios.c
-index c245a48c4072..9af7a8da9c05 100644
---- a/drivers/platform/x86/asus-bios.c
-+++ b/drivers/platform/x86/asus-bios.c
-@@ -126,7 +126,8 @@ static ssize_t pending_reboot_show(struct kobject *kobj,
- static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
-
- static bool asus_bios_requires_reboot(struct kobj_attribute *attr) {
-- return !strcmp(attr->attr.name, "gpu_mux_mode");
-+ return !strcmp(attr->attr.name, "gpu_mux_mode") ||
-+ !strcmp(attr->attr.name, "panel_hd_mode");
- }
-
- /*
-@@ -445,6 +446,7 @@ ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_MODE, 0
- ATTR_GROUP_BOOL_RW(boot_sound, "boot_sound", ASUS_WMI_DEVID_BOOT_SOUND, "Set the boot POST sound");
- ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE, "Set MCU powersaving mode");
- ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD, "Set the panel refresh overdrive");
-+ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD, "Set the panel HD mode to UHD<0> or FHD<1>");
- ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED, "Show the eGPU connection status");
-
- static int asus_fw_attr_add(void)
-@@ -533,6 +535,8 @@ static int asus_fw_attr_add(void)
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &mcu_powersave_attr_group);
- if (asus_wmi_is_present(ASUS_WMI_DEVID_PANEL_OD))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &panel_od_attr_group);
-+ if (asus_wmi_is_present(ASUS_WMI_DEVID_PANEL_HD))
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &panel_hd_mode_attr_group);
-
- return 0;
-
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 525cb7c803fe..c93068afc2b6 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -68,6 +68,7 @@
- #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
-
- /* Misc */
-+#define ASUS_WMI_DEVID_PANEL_HD 0x0005001C
- #define ASUS_WMI_DEVID_PANEL_OD 0x00050019
- #define ASUS_WMI_DEVID_CAMERA 0x00060013
- #define ASUS_WMI_DEVID_LID_FLIP 0x00060062
---
-2.45.1
-
-From 59d69aba37bc9ca2a22a2c44d8a5dd8600d2a35c Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 2 Jun 2024 14:32:15 +1200
-Subject: [PATCH 5/8] asus-bios: add dgpu tgp control
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-bios.c | 8 +++++++
- drivers/platform/x86/asus-bios.h | 25 ++++++++++++++++++++++
- include/linux/platform_data/x86/asus-wmi.h | 3 +++
- 3 files changed, 36 insertions(+)
-
-diff --git a/drivers/platform/x86/asus-bios.c b/drivers/platform/x86/asus-bios.c
-index 9af7a8da9c05..d453f02a22fd 100644
---- a/drivers/platform/x86/asus-bios.c
-+++ b/drivers/platform/x86/asus-bios.c
-@@ -53,6 +53,7 @@ MODULE_ALIAS("wmi:"ASUS_NB_WMI_EVENT_GUID);
- #define NVIDIA_BOOST_MAX 25
- #define NVIDIA_TEMP_MIN 75
- #define NVIDIA_TEMP_MAX 87
-+#define NVIDIA_GPU_POWER_MAX 70
-
- /* Tunables provided by ASUS for gaming laptops */
- struct rog_tunables {
-@@ -441,6 +442,9 @@ ATTR_GROUP_PPT_RW(nv_dynamic_boost, "nv_dynamic_boost", ASUS_WMI_DEVID_NV_DYN_BO
- nv_boost_default, 5, nv_boost_max, 1, "Set the Nvidia dynamic boost limit");
- ATTR_GROUP_PPT_RW(nv_temp_target, "nv_temp_target", ASUS_WMI_DEVID_NV_THERM_TARGET,
- nv_temp_default, 75, nv_temp_max, 1, "Set the Nvidia max thermal limit");
-+ATTR_GROUP_INT_VALUE_ONLY_RO(dgpu_base_tgp, "dgpu_base_tgp", ASUS_WMI_DEVID_DGPU_BASE_TGP, "Read the base TGP value")
-+ATTR_GROUP_INT_RW(dgpu_tgp, "dgpu_tgp", ASUS_WMI_DEVID_DGPU_SET_TGP,
-+ 70, 0, NVIDIA_GPU_POWER_MAX, 1, "Set the additional TGP on top of the base TGP");
-
- ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_MODE, 0, 0, "0;1;2", "Show the current mode of charging");
- ATTR_GROUP_BOOL_RW(boot_sound, "boot_sound", ASUS_WMI_DEVID_BOOT_SOUND, "Set the boot POST sound");
-@@ -526,6 +530,10 @@ static int asus_fw_attr_add(void)
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &nv_dynamic_boost_attr_group);
- if (asus_wmi_is_present(ASUS_WMI_DEVID_NV_THERM_TARGET))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &nv_temp_target_attr_group);
-+ if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU_BASE_TGP))
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_base_tgp_attr_group);
-+ if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU_SET_TGP))
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_tgp_attr_group);
-
- if (asus_wmi_is_present(ASUS_WMI_DEVID_CHARGE_MODE))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &charge_mode_attr_group);
-diff --git a/drivers/platform/x86/asus-bios.h b/drivers/platform/x86/asus-bios.h
-index acae11698a07..7c4176ab757a 100644
---- a/drivers/platform/x86/asus-bios.h
-+++ b/drivers/platform/x86/asus-bios.h
-@@ -112,6 +112,22 @@ static ssize_t _attrname##_##_prop##_show(struct kobject *kobj, \
- static struct kobj_attribute attr_##_attrname##_##_prop = \
- __ASUS_ATTR_RO(_attrname, _prop);
-
-+/* Requires current_value show&|store */
-+#define __ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname) \
-+__ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
-+static struct kobj_attribute attr_##_attrname##_type = \
-+ __ASUS_ATTR_RO_AS(type, int_type_show); \
-+static struct attribute *_attrname##_attrs[] = { \
-+ &attr_##_attrname##_current_value.attr, \
-+ &attr_##_attrname##_display_name.attr, \
-+ &attr_##_attrname##_type.attr, \
-+ NULL \
-+}; \
-+static const struct attribute_group _attrname##_attr_group = { \
-+ .name = _fsname, \
-+ .attrs = _attrname##_attrs \
-+};
-+
- /* Int style min/max range, base macro. Requires current_value show&|store */
- #define __ATTR_GROUP_INT(_attrname, _fsname, _default, \
- _min, _max, _incstep, _dispname)\
-@@ -155,6 +171,15 @@ static const struct attribute_group _attrname##_attr_group = { \
- .attrs = _attrname##_attrs \
- };
-
-+#define ATTR_GROUP_INT_VALUE_ONLY_RO(_attrname, _fsname, _wmi, _dispname) \
-+__ATTR_CURRENT_INT_RO(_attrname, _wmi); \
-+__ATTR_GROUP_INT_VALUE_ONLY(_attrname, _fsname, _dispname);
-+
-+#define ATTR_GROUP_INT_RW(_attrname, _fsname, _wmi, _default, _min, \
-+ _max, _incstep, _dispname) \
-+__ATTR_CURRENT_INT_RW(_attrname, _min, _max, _wmi); \
-+__ATTR_GROUP_INT(_attrname, _fsname, _default, _min, _max, _incstep, _dispname);
-+
- #define ATTR_GROUP_BOOL_RO(_attrname, _fsname, _wmi, _dispname) \
- __ATTR_CURRENT_INT_RO(_attrname, _wmi); \
- __ATTR_GROUP_ENUM(_attrname, _fsname, "0;1", _dispname);
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index c93068afc2b6..71f3f1d67479 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -128,6 +128,9 @@
- /* dgpu on/off */
- #define ASUS_WMI_DEVID_DGPU 0x00090020
-
-+#define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099
-+#define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098
-+
- /* gpu mux switch, 0 = dGPU, 1 = Optimus */
- #define ASUS_WMI_DEVID_GPU_MUX 0x00090016
- #define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026
---
-2.45.1
-
-From ae58c8b2e60a5feff3cf833d7f572414758d06c2 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 2 Jun 2024 14:44:31 +1200
-Subject: [PATCH 6/8] asus-bios: add apu-mem
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-bios.c | 116 +++++++++++++++++++++
- include/linux/platform_data/x86/asus-wmi.h | 1 +
- 2 files changed, 117 insertions(+)
-
-diff --git a/drivers/platform/x86/asus-bios.c b/drivers/platform/x86/asus-bios.c
-index d453f02a22fd..bcb053b57102 100644
---- a/drivers/platform/x86/asus-bios.c
-+++ b/drivers/platform/x86/asus-bios.c
-@@ -425,6 +425,120 @@ static ssize_t egpu_enable_current_value_store(struct kobject *kobj,
- WMI_SHOW_INT(egpu_enable_current_value, "%d\n", ASUS_WMI_DEVID_EGPU);
- ATTR_GROUP_BOOL_CUSTOM(egpu_enable, "egpu_enable", "Enable the eGPU (also disables dGPU)");
-
-+/* Device memory available to APU */
-+
-+static ssize_t apu_mem_current_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ int err;
-+ u32 mem;
-+
-+ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_APU_MEM, &mem);
-+ if (err)
-+ return err;
-+
-+ switch (mem) {
-+ case 256:
-+ mem = 0;
-+ break;
-+ case 258:
-+ mem = 1;
-+ break;
-+ case 259:
-+ mem = 2;
-+ break;
-+ case 260:
-+ mem = 3;
-+ break;
-+ case 261:
-+ mem = 4;
-+ break;
-+ case 262:
-+ /* This is out of order and looks wrong but is correct */
-+ mem = 8;
-+ break;
-+ case 263:
-+ mem = 5;
-+ break;
-+ case 264:
-+ mem = 6;
-+ break;
-+ case 265:
-+ mem = 7;
-+ break;
-+ default:
-+ mem = 4;
-+ break;
-+ }
-+
-+ return sysfs_emit(buf, "%d\n", mem);
-+}
-+
-+static ssize_t apu_mem_current_value_store(struct kobject *kobj,
-+ struct kobj_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int result, err;
-+ u32 requested, mem;
-+
-+ result = kstrtou32(buf, 10, &requested);
-+ if (result)
-+ return result;
-+
-+ switch (requested) {
-+ case 0:
-+ mem = 0;
-+ break;
-+ case 1:
-+ mem = 258;
-+ break;
-+ case 2:
-+ mem = 259;
-+ break;
-+ case 3:
-+ mem = 260;
-+ break;
-+ case 4:
-+ mem = 261;
-+ break;
-+ case 5:
-+ mem = 263;
-+ break;
-+ case 6:
-+ mem = 264;
-+ break;
-+ case 7:
-+ mem = 265;
-+ break;
-+ case 8:
-+ /* This is outof order and looks wrong but is correct */
-+ mem = 262;
-+ break;
-+ default:
-+ return -EIO;
-+ }
-+
-+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_APU_MEM, mem, &result);
-+ if (err) {
-+ pr_warn("Failed to set apu_mem: %d\n", err);
-+ return err;
-+ }
-+
-+ pr_info("APU memory changed to %dGB, reboot required\n", requested);
-+ sysfs_notify(kobj, NULL, attr->attr.name);
-+
-+ asus_set_reboot_and_signal_event();
-+
-+ return count;
-+}
-+
-+static ssize_t apu_mem_possible_values_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return sysfs_emit(buf, "0;1;2;3;4;5;6;7;8\n");
-+}
-+ATTR_GROUP_ENUM_CUSTOM(apu_mem, "apu_mem", "Set the available system memory for the APU to use");
-+
- /* Simple attribute creation */
- ATTR_GROUP_ENUM_INT_RW(thermal_policy, "thermal_policy", ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, 0, 3, "0;1;2", "Fan stuff todo");
- ATTR_GROUP_PPT_RW(ppt_pl1_spl, "ppt_pl1_spl", ASUS_WMI_DEVID_PPT_PL1_SPL,
-@@ -534,6 +648,8 @@ static int asus_fw_attr_add(void)
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_base_tgp_attr_group);
- if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU_SET_TGP))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &dgpu_tgp_attr_group);
-+ if (asus_wmi_is_present(ASUS_WMI_DEVID_APU_MEM))
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &apu_mem_attr_group);
-
- if (asus_wmi_is_present(ASUS_WMI_DEVID_CHARGE_MODE))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &charge_mode_attr_group);
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 71f3f1d67479..da0e423ecb06 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -130,6 +130,7 @@
-
- #define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099
- #define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098
-+#define ASUS_WMI_DEVID_APU_MEM 0x000600C1
-
- /* gpu mux switch, 0 = dGPU, 1 = Optimus */
- #define ASUS_WMI_DEVID_GPU_MUX 0x00090016
---
-2.45.1
-
-From f7e8fe2458a3f8aa091e5e282b67f2a78f5cc1c4 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sun, 2 Jun 2024 16:21:32 +1200
-Subject: [PATCH 7/8] asus-bios: add core count control
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/platform/x86/asus-bios.c | 201 +++++++++++++++++++++
- drivers/platform/x86/asus-bios.h | 29 +++
- include/linux/platform_data/x86/asus-wmi.h | 4 +
- 3 files changed, 234 insertions(+)
-
-diff --git a/drivers/platform/x86/asus-bios.c b/drivers/platform/x86/asus-bios.c
-index bcb053b57102..bd4c408fd062 100644
---- a/drivers/platform/x86/asus-bios.c
-+++ b/drivers/platform/x86/asus-bios.c
-@@ -42,6 +42,18 @@ MODULE_ALIAS("wmi:"ASUS_NB_WMI_EVENT_GUID);
- #define ASUS_MINI_LED_2024_STRONG 0x01
- #define ASUS_MINI_LED_2024_OFF 0x02
-
-+enum cpu_core_type {
-+ CPU_CORE_PERF = 0,
-+ CPU_CORE_POWER,
-+};
-+
-+enum cpu_core_value {
-+ CPU_CORE_DEFAULT = 0,
-+ CPU_CORE_MIN,
-+ CPU_CORE_MAX,
-+ CPU_CORE_CURRENT,
-+};
-+
- /* Default limits for tunables available on ASUS ROG laptops */
- #define PPT_CPU_LIMIT_MIN 5
- #define PPT_CPU_LIMIT_MAX 150
-@@ -76,6 +88,10 @@ struct rog_tunables {
- u32 nv_temp_default;
- u32 nv_temp_max;
- u32 nv_temp_target;
-+
-+ u32 min_perf_cores;
-+ u32 max_perf_cores;
-+ u32 max_power_cores;
- };
-
- static const struct class *fw_attr_class;
-@@ -539,6 +555,185 @@ static ssize_t apu_mem_possible_values_show(struct kobject *kobj,
- }
- ATTR_GROUP_ENUM_CUSTOM(apu_mem, "apu_mem", "Set the available system memory for the APU to use");
-
-+static int asus_bios_set_max_cores(void)
-+{
-+ u32 cores;
-+ int err;
-+
-+ asus_bios.rog_tunables->min_perf_cores = 4;
-+ asus_bios.rog_tunables->max_perf_cores = 4;
-+ asus_bios.rog_tunables->max_power_cores = 8;
-+
-+ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES_MAX, &cores);
-+ if (err)
-+ return err;
-+
-+ cores &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
-+ asus_bios.rog_tunables->max_power_cores = (cores & 0xff00) >> 8;
-+ asus_bios.rog_tunables->max_perf_cores = cores & 0xff;
-+
-+ return 0;
-+}
-+
-+static ssize_t cores_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf,
-+ enum cpu_core_type core_type,
-+ enum cpu_core_value core_value)
-+{
-+ u32 cores;
-+ int err;
-+
-+ switch (core_value) {
-+ case CPU_CORE_DEFAULT:
-+ case CPU_CORE_MAX:
-+ if (core_type == CPU_CORE_PERF)
-+ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->max_perf_cores);
-+ else
-+ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->max_power_cores);
-+ case CPU_CORE_MIN:
-+ if (core_type == CPU_CORE_PERF)
-+ return sysfs_emit(buf, "%d\n", asus_bios.rog_tunables->min_perf_cores);
-+ else
-+ return sysfs_emit(buf, "%d\n", 0);
-+ default:
-+ break;
-+ }
-+
-+ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES, &cores);
-+ if (err)
-+ return err;
-+
-+ cores &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
-+ if (core_type == CPU_CORE_PERF)
-+ cores &= 0xff;
-+ else
-+ cores = (cores & 0xff00) >> 8;
-+ return sysfs_emit(buf, "%d\n", cores);
-+}
-+
-+static ssize_t cores_current_value_store(struct kobject *kobj,
-+ struct kobj_attribute *attr, const char *buf,
-+ enum cpu_core_type core_type)
-+{
-+ int result, err;
-+ u32 cores, currentv, min, max;
-+
-+ result = kstrtou32(buf, 10, &cores);
-+ if (result)
-+ return result;
-+
-+ if (core_type == CPU_CORE_PERF) {
-+ min = asus_bios.rog_tunables->min_perf_cores;
-+ max = asus_bios.rog_tunables->max_perf_cores;
-+ } else {
-+ min = 0;
-+ max = asus_bios.rog_tunables->max_power_cores;
-+ }
-+ if (cores < min || cores > max)
-+ return -EINVAL;
-+
-+ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES, &currentv);
-+ if (err)
-+ return err;
-+
-+ if (core_type == CPU_CORE_PERF)
-+ cores |= (currentv & 0xff00);
-+ else
-+ cores |= currentv & 0xff;
-+
-+ if (cores == currentv)
-+ return 0;
-+
-+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_CORES, cores, &result);
-+ if (err) {
-+ pr_warn("Failed to set perfromance core count: %d\n", err);
-+ return err;
-+ }
-+
-+ if (result > 1) {
-+ pr_warn("Failed to set performance core count (result): 0x%x\n", result);
-+ return -EIO;
-+ }
-+
-+ pr_info("CPU core count changed, reboot required\n");
-+ sysfs_notify(kobj, NULL, attr->attr.name);
-+ asus_set_reboot_and_signal_event();
-+
-+ return 0;
-+}
-+
-+static ssize_t cores_performance_min_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MIN);
-+}
-+
-+static ssize_t cores_performance_max_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MAX);
-+}
-+
-+static ssize_t cores_performance_default_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_DEFAULT);
-+}
-+
-+static ssize_t cores_performance_current_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_CURRENT);
-+}
-+
-+static ssize_t cores_performance_current_value_store(struct kobject *kobj,
-+ struct kobj_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int err = cores_current_value_store(kobj, attr, buf, CPU_CORE_PERF);
-+ if (err)
-+ return err;
-+
-+ return count;
-+}
-+ATTR_GROUP_CORES_RW(cores_performance, "cores_performance", ASUS_WMI_DEVID_CORES, "Set the max available performance cores");
-+
-+static ssize_t cores_efficiency_min_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MIN);
-+}
-+
-+static ssize_t cores_efficiency_max_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MAX);
-+}
-+
-+static ssize_t cores_efficiency_default_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_DEFAULT);
-+}
-+
-+static ssize_t cores_efficiency_current_value_show(struct kobject *kobj,
-+ struct kobj_attribute *attr, char *buf)
-+{
-+ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_CURRENT);
-+}
-+
-+static ssize_t cores_efficiency_current_value_store(struct kobject *kobj,
-+ struct kobj_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int err = cores_current_value_store(kobj, attr, buf, CPU_CORE_POWER);
-+ if (err)
-+ return err;
-+
-+ return count;
-+}
-+ATTR_GROUP_CORES_RW(cores_efficiency, "cores_efficiency", ASUS_WMI_DEVID_CORES, "Set the max available efficiency cores");
-+
- /* Simple attribute creation */
- ATTR_GROUP_ENUM_INT_RW(thermal_policy, "thermal_policy", ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, 0, 3, "0;1;2", "Fan stuff todo");
- ATTR_GROUP_PPT_RW(ppt_pl1_spl, "ppt_pl1_spl", ASUS_WMI_DEVID_PPT_PL1_SPL,
-@@ -627,8 +822,14 @@ static int asus_fw_attr_add(void)
- if (asus_wmi_is_present(ASUS_WMI_DEVID_EGPU_CONNECTED))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &egpu_connected_attr_group);
-
-+ if (asus_wmi_is_present(ASUS_WMI_DEVID_CORES_MAX) && !asus_bios_set_max_cores()){
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &cores_performance_attr_group);
-+ sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &cores_efficiency_attr_group);
-+ }
-+
- if (asus_wmi_is_present(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &thermal_policy_attr_group);
-+
- if (asus_wmi_is_present(ASUS_WMI_DEVID_PPT_PL1_SPL))
- sysfs_create_group(&asus_bios.fw_attr_kset->kobj, &ppt_pl1_spl_attr_group);
- if (asus_wmi_is_present(ASUS_WMI_DEVID_PPT_PL2_SPPT))
-diff --git a/drivers/platform/x86/asus-bios.h b/drivers/platform/x86/asus-bios.h
-index 7c4176ab757a..7016ec14efc1 100644
---- a/drivers/platform/x86/asus-bios.h
-+++ b/drivers/platform/x86/asus-bios.h
-@@ -230,6 +230,35 @@ static const struct attribute_group _attrname##_attr_group = { \
- .attrs = _attrname##_attrs \
- };
-
-+/* CPU core attributes need a little different in setup */
-+#define ATTR_GROUP_CORES_RW(_attrname, _fsname, _wmi, _dispname)\
-+__ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", 1); \
++/* ROG PPT attributes need a little different in setup */
++#define ATTR_GROUP_PPT_RW(_attrname, _fsname, _wmi, _default, \
++ _min, _max, _incstep, _dispname) \
++__ROG_TUNABLE_RW(_attrname, _min, _max, _wmi); \
++__ROG_TUNABLE_SHOW(default_value, _attrname, _default); \
++__ATTR_SHOW_FMT(min_value, _attrname, "%d\n", _min); \
++__ROG_TUNABLE_SHOW(max_value, _attrname, _max); \
++__ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", _incstep); \
+__ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
-+static struct kobj_attribute attr_##_attrname##_current_value = \
-+ __ASUS_ATTR_RW(_attrname, current_value); \
-+static struct kobj_attribute attr_##_attrname##_default_value = \
-+ __ASUS_ATTR_RO(_attrname, default_value); \
-+static struct kobj_attribute attr_##_attrname##_min_value = \
-+ __ASUS_ATTR_RO(_attrname, min_value); \
-+static struct kobj_attribute attr_##_attrname##_max_value = \
-+ __ASUS_ATTR_RO(_attrname, max_value); \
+static struct kobj_attribute attr_##_attrname##_type = \
+ __ASUS_ATTR_RO_AS(type, int_type_show); \
+static struct attribute *_attrname##_attrs[] = { \
@@ -3527,315 +1456,24 @@ index 7c4176ab757a..7016ec14efc1 100644
+ .attrs = _attrname##_attrs \
+};
+
- /* ROG PPT attributes need a little different in setup */
- #define ATTR_GROUP_PPT_RW(_attrname, _fsname, _wmi, _default, \
- _min, _max, _incstep, _dispname) \
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index da0e423ecb06..9756e595d2cd 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -128,6 +128,10 @@
- /* dgpu on/off */
- #define ASUS_WMI_DEVID_DGPU 0x00090020
-
-+/* Intel E-core and P-core configuration in a format 0x0[E]0[P] */
-+#define ASUS_WMI_DEVID_CORES 0x001200D2
-+ /* Maximum Intel E-core and P-core availability */
-+#define ASUS_WMI_DEVID_CORES_MAX 0x001200D3
- #define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099
- #define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098
- #define ASUS_WMI_DEVID_APU_MEM 0x000600C1
---
-2.45.1
-
-From 59cb165cde465df5380b809ecea6737d85405dac Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Mon, 13 May 2024 19:20:04 +1200
-Subject: [PATCH v2 1/3] hid-asus: use hid for brightness control on keyboard
-
-On almost all ASUS ROG series laptops the MCU used for the USB keyboard
-also has a HID packet used for setting the brightness. This is usually
-the same as the WMI method. But in some laptops the WMI method either
-is missing or doesn't work, so we should default to the HID control.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/hid/hid-asus.c | 7 ++++
- drivers/platform/x86/asus-wmi.c | 3 +-
- include/linux/platform_data/x86/asus-wmi.h | 45 ++++++++++++++++++++++
- 3 files changed, 54 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
-index 02de2bf4f790..0ed3708ef7e2 100644
---- a/drivers/hid/hid-asus.c
-+++ b/drivers/hid/hid-asus.c
-@@ -492,12 +492,19 @@ static void asus_kbd_backlight_work(struct work_struct *work)
- */
- static bool asus_kbd_wmi_led_control_present(struct hid_device *hdev)
- {
-+ struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
- u32 value;
- int ret;
-
- if (!IS_ENABLED(CONFIG_ASUS_WMI))
- return false;
-
-+ if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD &&
-+ dmi_check_system(asus_use_hid_led_dmi_ids)) {
-+ hid_info(hdev, "using HID for asus::kbd_backlight\n");
-+ return false;
-+ }
-+
- ret = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS,
- ASUS_WMI_DEVID_KBD_BACKLIGHT, 0, &value);
- hid_dbg(hdev, "WMI backlight check: rc %d value %x", ret, value);
++#endif /* _ASUS_BIOSCFG_H_ */
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 3f9b6285c9a6..799d928c7d3d 100644
+index bc9c5db38324..9c80aa073758 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1681,7 +1681,8 @@ static int asus_wmi_led_init(struct asus_wmi *asus)
- goto error;
- }
-
-- if (!kbd_led_read(asus, &led_val, NULL)) {
-+ if (!kbd_led_read(asus, &led_val, NULL) && !dmi_check_system(asus_use_hid_led_dmi_ids)) {
-+ pr_info("using asus-wmi for asus::kbd_backlight\n");
- asus->kbd_led_wk = led_val;
- asus->kbd_led.name = "asus::kbd_backlight";
- asus->kbd_led.flags = LED_BRIGHT_HW_CHANGED;
-diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
-index 3eb5cd6773ad..96c780efa0d7 100644
---- a/include/linux/platform_data/x86/asus-wmi.h
-+++ b/include/linux/platform_data/x86/asus-wmi.h
-@@ -4,6 +4,7 @@
-
- #include <linux/errno.h>
- #include <linux/types.h>
-+#include <linux/dmi.h>
-
- /* WMI Methods */
- #define ASUS_WMI_METHODID_SPEC 0x43455053 /* BIOS SPECification */
-@@ -160,4 +161,48 @@ static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
- }
- #endif
+@@ -97,6 +97,11 @@ module_param(fnlock_default, bool, 0444);
+ #define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST 1
+ #define ASUS_THROTTLE_THERMAL_POLICY_SILENT 2
-+/* To be used by both hid-asus and asus-wmi to determine which controls kbd_brightness */
-+#if IS_ENABLED(CONFIG_ASUS_WMI)
-+bool asus_use_hid_led(void);
-+#else
-+static inline bool asus_use_hid_led(void)
-+{
-+ return true;
-+}
-+#endif
-+
-+static const struct dmi_system_id asus_use_hid_led_dmi_ids[] = {
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Zephyrus"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Strix"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Flow"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_NAME, "GA403U"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_NAME, "GU605M"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_BOARD_NAME, "RC71L"),
-+ },
-+ },
-+ NULL,
-+};
++#define ASUS_THROTTLE_THERMAL_POLICY_DEFAULT_VIVO 0
++#define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST_VIVO 2
++#define ASUS_THROTTLE_THERMAL_POLICY_SILENT_VIVO 1
++#define ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED 3
+
- #endif /* __PLATFORM_DATA_X86_ASUS_WMI_H */
---
-2.45.2
-
-From 671da604738dd6dd01903585e8e8a55d49ab06e9 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Fri, 7 Jun 2024 15:58:01 +1200
-Subject: [PATCH v2 3/3] Input: xpad - add support for ASUS ROG RAIKIRI PRO
-
-Add the VID/PID for ASUS ROG RAIKIRI PRO to
-xpad_device and the VID to xpad_table.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- drivers/hid/hid-ids.h | 1 +
- drivers/input/joystick/xpad.c | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 61d2a21affa2..31c522fa4e87 100644
---- a/drivers/hid/hid-ids.h
-+++ b/drivers/hid/hid-ids.h
-@@ -209,6 +209,7 @@
- #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2 0x19b6
- #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3 0x1a30
- #define USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR 0x18c6
-+#define USB_DEVICE_ID_ASUSTEK_ROG_RAIKIRI_PAD 0x1abb
- #define USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD 0x196b
- #define USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD 0x1869
-
---
-2.45.2
-
-/* Default limits for tunables available on ASUS ROG laptops */
-#define PPT_CPU_LIMIT_MIN 5
-#define PPT_CPU_LIMIT_MAX 150
-#define PPT_CPU_LIMIT_DEFAULT 80
-#define PPT_PLATFORM_MIN 5
-#define PPT_PLATFORM_MAX 100
-#define PPT_PLATFORM_DEFAULT 80
-#define NVIDIA_BOOST_MIN 5
-#define NVIDIA_BOOST_MAX 25
-#define NVIDIA_TEMP_MIN 75
-
-/* Tunables provided by ASUS for gaming laptops */
-struct rog_tunables {
- u32 cpu_default;
- u32 cpu_max;
-
- u32 platform_default;
- u32 platform_max;
-
- u32 ppt_pl1_spl; // total
- u32 ppt_pl2_sppt; // total
- u32 ppt_apu_sppt; // cpu
- u32 ppt_platform_sppt; // cpu
- u32 ppt_fppt; // total
-
- u32 nv_boost_default;
- u32 nv_boost_max;
- u32 nv_dynamic_boost;
-
- u32 nv_temp_default;
- u32 nv_temp_max;
- u32 nv_temp_target;
-};
-
-
-From 74b729c160f95f0bec8d7af3efc94514195b23e3 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Sat, 25 May 2024 17:31:07 +1200
-Subject: [PATCH 3/9] platform/x86: asus-wmi: add macros and expose min/max
- sysfs for ppt tunables
-
-In most cases the safe min and max values of the various PPT tunables are
-known for various ASUS ROG (and other) laptop models. We can match the
-DMI string for these and expose min/max sysfs points, plus set some sane
-default values.
-
-As part of the addition of the min/max and defaults, to reduce the amount
-of code copy/paste and introduce some sanity a group of macros were added
-specific to the PPT and NV tunables. The code becomes much cleaner and
-easier to read.
-
-This makes the PPT functions much more usable and safe.
-
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- .../ABI/testing/sysfs-platform-asus-wmi | 23 +-
- drivers/platform/x86/asus-wmi.c | 561 ++++++++----------
- 2 files changed, 245 insertions(+), 339 deletions(-)
-
-diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-index 28144371a0f1..984a04f32fd0 100644
---- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
-+++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
-@@ -142,8 +142,8 @@ Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the Package Power Target total of CPU: PL1 on Intel, SPL on AMD.
- Shown on Intel+Nvidia or AMD+Nvidia based systems:
--
-- * min=5, max=250
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/ppt_pl2_sppt
- Date: Jun 2023
-@@ -152,8 +152,8 @@ Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the Slow Package Power Tracking Limit of CPU: PL2 on Intel, SPPT,
- on AMD. Shown on Intel+Nvidia or AMD+Nvidia based systems:
--
-- * min=5, max=250
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/ppt_fppt
- Date: Jun 2023
-@@ -161,7 +161,8 @@ KernelVersion: 6.5
- Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the Fast Package Power Tracking Limit of CPU. AMD+Nvidia only:
-- * min=5, max=250
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/ppt_apu_sppt
- Date: Jun 2023
-@@ -169,7 +170,8 @@ KernelVersion: 6.5
- Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the APU SPPT limit. Shown on full AMD systems only:
-- * min=5, max=130
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/ppt_platform_sppt
- Date: Jun 2023
-@@ -177,7 +179,8 @@ KernelVersion: 6.5
- Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the platform SPPT limit. Shown on full AMD systems only:
-- * min=5, max=130
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/nv_dynamic_boost
- Date: Jun 2023
-@@ -185,7 +188,8 @@ KernelVersion: 6.5
- Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the dynamic boost limit of the Nvidia dGPU:
-- * min=5, max=25
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
-
- What: /sys/devices/platform/<platform>/nv_temp_target
- Date: Jun 2023
-@@ -193,7 +197,8 @@ KernelVersion: 6.5
- Contact: "Luke Jones" <luke@ljones.dev>
- Description:
- Set the target temperature limit of the Nvidia dGPU:
-- * min=75, max=87
-+ * min/max varies, read *_min/*_max sysfs entries
-+ * -1 resets to default
+ #define USB_INTEL_XUSB2PR 0xD0
+ #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
- What: /sys/devices/platform/<platform>/boot_sound
- Date: Apr 2024
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 999cd658ec8b..d016acb23789 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -112,11 +112,13 @@ module_param(fnlock_default, bool, 0444);
+@@ -112,11 +117,13 @@ module_param(fnlock_default, bool, 0444);
/* Mask to determine if setting temperature or percentage */
#define FAN_CURVE_PWM_MASK 0x04
@@ -3854,7 +1492,7 @@ index 999cd658ec8b..d016acb23789 100644
#define NVIDIA_BOOST_MIN 5
#define NVIDIA_BOOST_MAX 25
#define NVIDIA_TEMP_MIN 75
-@@ -219,6 +221,29 @@ struct fan_curve_data {
+@@ -219,6 +226,29 @@ struct fan_curve_data {
u8 percents[FAN_CURVE_POINTS];
};
@@ -3884,7 +1522,7 @@ index 999cd658ec8b..d016acb23789 100644
struct asus_wmi {
int dsts_id;
int spec;
-@@ -273,14 +298,7 @@ struct asus_wmi {
+@@ -273,20 +303,13 @@ struct asus_wmi {
bool dgpu_disable_available;
u32 gpu_mux_dev;
@@ -3900,7 +1538,144 @@ index 999cd658ec8b..d016acb23789 100644
u32 kbd_rgb_dev;
bool kbd_rgb_state_available;
-@@ -652,6 +670,98 @@ static void asus_wmi_input_exit(struct asus_wmi *asus)
+
+- bool throttle_thermal_policy_available;
+ u8 throttle_thermal_policy_mode;
++ u32 throttle_thermal_policy_dev;
+
+ bool cpu_fan_curve_available;
+ bool gpu_fan_curve_available;
+@@ -334,20 +357,29 @@ static int asus_wmi_evaluate_method3(u32 method_id,
+ status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
+ &input, &output);
+
+- if (ACPI_FAILURE(status))
++ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x, 0x%08x\n",
++ __func__, method_id, arg0, arg1, arg2);
++ if (ACPI_FAILURE(status)) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, -EIO);
+ return -EIO;
++ }
+
+ obj = (union acpi_object *)output.pointer;
+ if (obj && obj->type == ACPI_TYPE_INTEGER)
+ tmp = (u32) obj->integer.value;
+
++ pr_debug("Result: 0x%08x\n", tmp);
+ if (retval)
+ *retval = tmp;
+
+ kfree(obj);
+
+- if (tmp == ASUS_WMI_UNSUPPORTED_METHOD)
++ if (tmp == ASUS_WMI_UNSUPPORTED_METHOD) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, -ENODEV);
+ return -ENODEV;
++ }
+
+ return 0;
+ }
+@@ -377,20 +409,29 @@ static int asus_wmi_evaluate_method5(u32 method_id,
+ status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
+ &input, &output);
+
+- if (ACPI_FAILURE(status))
++ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
++ __func__, method_id, arg0, arg1, arg2, arg3, arg4);
++ if (ACPI_FAILURE(status)) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, -EIO);
+ return -EIO;
++ }
+
+ obj = (union acpi_object *)output.pointer;
+ if (obj && obj->type == ACPI_TYPE_INTEGER)
+ tmp = (u32) obj->integer.value;
+
++ pr_debug("Result: %x\n", tmp);
+ if (retval)
+ *retval = tmp;
+
+ kfree(obj);
+
+- if (tmp == ASUS_WMI_UNSUPPORTED_METHOD)
++ if (tmp == ASUS_WMI_UNSUPPORTED_METHOD) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, -ENODEV);
+ return -ENODEV;
++ }
+
+ return 0;
+ }
+@@ -416,8 +457,13 @@ static int asus_wmi_evaluate_method_buf(u32 method_id,
+ status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, method_id,
+ &input, &output);
+
+- if (ACPI_FAILURE(status))
++ pr_debug("%s called (0x%08x) with args: 0x%08x, 0x%08x\n",
++ __func__, method_id, arg0, arg1);
++ if (ACPI_FAILURE(status)) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, -EIO);
+ return -EIO;
++ }
+
+ obj = (union acpi_object *)output.pointer;
+
+@@ -453,8 +499,11 @@ static int asus_wmi_evaluate_method_buf(u32 method_id,
+
+ kfree(obj);
+
+- if (err)
++ if (err) {
++ pr_debug("%s, (0x%08x), arg 0x%08x failed: %d\n",
++ __func__, method_id, arg0, err);
+ return err;
++ }
+
+ return 0;
+ }
+@@ -503,12 +552,28 @@ static int asus_wmi_get_devstate(struct asus_wmi *asus, u32 dev_id, u32 *retval)
+ return 0;
+ }
+
+-static int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
++int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
++{
++ int err;
++
++ err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, dev_id, 0, retval);
++ if (err)
++ return err;
++
++ if (*retval == ~0)
++ return -ENODEV;
++
++ return 0;
++}
++EXPORT_SYMBOL_GPL(asus_wmi_get_devstate_dsts);
++
++int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
+ u32 *retval)
+ {
+ return asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS, dev_id,
+ ctrl_param, retval);
+ }
++EXPORT_SYMBOL_GPL(asus_wmi_set_devstate);
+
+ /* Helper for special devices with magic return codes */
+ static int asus_wmi_get_devstate_bits(struct asus_wmi *asus,
+@@ -542,6 +607,7 @@ static bool asus_wmi_dev_is_present(struct asus_wmi *asus, u32 dev_id)
+ {
+ u32 retval;
+ int status = asus_wmi_get_devstate(asus, dev_id, &retval);
++ pr_debug("%s called (0x%08x), retval: 0x%08x\n", __func__, dev_id, retval);
+
+ return status == 0 && (retval & ASUS_WMI_DSTS_PRESENCE_BIT);
+ }
+@@ -625,6 +691,98 @@ static void asus_wmi_input_exit(struct asus_wmi *asus)
asus->inputdev = NULL;
}
@@ -3999,7 +1774,7 @@ index 999cd658ec8b..d016acb23789 100644
/* Tablet mode ****************************************************************/
static void asus_wmi_tablet_mode_get_state(struct asus_wmi *asus)
-@@ -1018,306 +1128,6 @@ static const struct attribute_group *kbd_rgb_mode_groups[] = {
+@@ -995,306 +1153,6 @@ static const struct attribute_group *kbd_rgb_mode_groups[] = {
NULL,
};
@@ -4306,7 +2081,238 @@ index 999cd658ec8b..d016acb23789 100644
/* Ally MCU Powersave ********************************************************/
static ssize_t mcu_powersave_show(struct device *dev,
struct device_attribute *attr, char *buf)
-@@ -4367,13 +4177,27 @@ static struct attribute *platform_attributes[] = {
+@@ -1685,7 +1544,8 @@ static int asus_wmi_led_init(struct asus_wmi *asus)
+ goto error;
+ }
+
+- if (!kbd_led_read(asus, &led_val, NULL)) {
++ if (!kbd_led_read(asus, &led_val, NULL) && !dmi_check_system(asus_use_hid_led_dmi_ids)) {
++ pr_info("using asus-wmi for asus::kbd_backlight\n");
+ asus->kbd_led_wk = led_val;
+ asus->kbd_led.name = "asus::kbd_backlight";
+ asus->kbd_led.flags = LED_BRIGHT_HW_CHANGED;
+@@ -2312,10 +2172,10 @@ static ssize_t mini_led_mode_store(struct device *dev,
+ return result;
+
+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE &&
+- mode > ASUS_MINI_LED_ON)
++ mode > ASUS_MINI_LED_ON)
+ return -EINVAL;
+ if (asus->mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2 &&
+- mode > ASUS_MINI_LED_STRONG_MODE)
++ mode > ASUS_MINI_LED_STRONG_MODE)
+ return -EINVAL;
+
+ /*
+@@ -3127,7 +2987,7 @@ static int fan_curve_get_factory_default(struct asus_wmi *asus, u32 fan_dev)
+ int err, fan_idx;
+ u8 mode = 0;
+
+- if (asus->throttle_thermal_policy_available)
++ if (asus->throttle_thermal_policy_dev)
+ mode = asus->throttle_thermal_policy_mode;
+ /* DEVID_<C/G>PU_FAN_CURVE is switched for OVERBOOST vs SILENT */
+ if (mode == 2)
+@@ -3334,7 +3194,7 @@ static ssize_t fan_curve_enable_store(struct device *dev,
+ * For machines with throttle this is the only way to reset fans
+ * to default mode of operation (does not erase curve data).
+ */
+- if (asus->throttle_thermal_policy_available) {
++ if (asus->throttle_thermal_policy_dev) {
+ err = throttle_thermal_policy_write(asus);
+ if (err)
+ return err;
+@@ -3551,8 +3411,8 @@ static const struct attribute_group asus_fan_curve_attr_group = {
+ __ATTRIBUTE_GROUPS(asus_fan_curve_attr);
+
+ /*
+- * Must be initialised after throttle_thermal_policy_check_present() as
+- * we check the status of throttle_thermal_policy_available during init.
++ * Must be initialised after throttle_thermal_policy_dev is set as
++ * we check the status of throttle_thermal_policy_dev during init.
+ */
+ static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
+ {
+@@ -3562,18 +3422,27 @@ static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
+
+ err = fan_curve_check_present(asus, &asus->cpu_fan_curve_available,
+ ASUS_WMI_DEVID_CPU_FAN_CURVE);
+- if (err)
++ if (err) {
++ pr_err("%s, checked 0x%08x, failed: %d\n",
++ __func__, ASUS_WMI_DEVID_CPU_FAN_CURVE, err);
+ return err;
++ }
+
+ err = fan_curve_check_present(asus, &asus->gpu_fan_curve_available,
+ ASUS_WMI_DEVID_GPU_FAN_CURVE);
+- if (err)
++ if (err) {
++ pr_err("%s, checked 0x%08x, failed: %d\n",
++ __func__, ASUS_WMI_DEVID_GPU_FAN_CURVE, err);
+ return err;
++ }
+
+ err = fan_curve_check_present(asus, &asus->mid_fan_curve_available,
+ ASUS_WMI_DEVID_MID_FAN_CURVE);
+- if (err)
++ if (err) {
++ pr_err("%s, checked 0x%08x, failed: %d\n",
++ __func__, ASUS_WMI_DEVID_MID_FAN_CURVE, err);
+ return err;
++ }
+
+ if (!asus->cpu_fan_curve_available
+ && !asus->gpu_fan_curve_available
+@@ -3593,38 +3462,31 @@ static int asus_wmi_custom_fan_curve_init(struct asus_wmi *asus)
+ }
+
+ /* Throttle thermal policy ****************************************************/
+-
+-static int throttle_thermal_policy_check_present(struct asus_wmi *asus)
+-{
+- u32 result;
+- int err;
+-
+- asus->throttle_thermal_policy_available = false;
+-
+- err = asus_wmi_get_devstate(asus,
+- ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY,
+- &result);
+- if (err) {
+- if (err == -ENODEV)
+- return 0;
+- return err;
+- }
+-
+- if (result & ASUS_WMI_DSTS_PRESENCE_BIT)
+- asus->throttle_thermal_policy_available = true;
+-
+- return 0;
+-}
+-
+ static int throttle_thermal_policy_write(struct asus_wmi *asus)
+ {
+- int err;
+- u8 value;
++ u8 value = asus->throttle_thermal_policy_mode;
+ u32 retval;
++ bool vivo;
++ int err;
+
+- value = asus->throttle_thermal_policy_mode;
++ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
++ if (vivo) {
++ switch (value) {
++ case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT:
++ value = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT_VIVO;
++ break;
++ case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST:
++ value = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST_VIVO;
++ break;
++ case ASUS_THROTTLE_THERMAL_POLICY_SILENT:
++ value = ASUS_THROTTLE_THERMAL_POLICY_SILENT_VIVO;
++ break;
++ default:
++ break;
++ }
++ }
+
+- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY,
++ err = asus_wmi_set_devstate(asus->throttle_thermal_policy_dev,
+ value, &retval);
+
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL,
+@@ -3654,7 +3516,7 @@ static int throttle_thermal_policy_write(struct asus_wmi *asus)
+
+ static int throttle_thermal_policy_set_default(struct asus_wmi *asus)
+ {
+- if (!asus->throttle_thermal_policy_available)
++ if (!asus->throttle_thermal_policy_dev)
+ return 0;
+
+ asus->throttle_thermal_policy_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
+@@ -3664,9 +3526,14 @@ static int throttle_thermal_policy_set_default(struct asus_wmi *asus)
+ static int throttle_thermal_policy_switch_next(struct asus_wmi *asus)
+ {
+ u8 new_mode = asus->throttle_thermal_policy_mode + 1;
++ bool vivo;
+ int err;
+
+- if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
++ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
++ if (!vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
++ new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
++
++ if (vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED)
+ new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
+
+ asus->throttle_thermal_policy_mode = new_mode;
+@@ -3699,13 +3566,17 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+ u8 new_mode;
+ int result;
++ bool vivo;
+ int err;
+
+ result = kstrtou8(buf, 10, &new_mode);
+ if (result < 0)
+ return result;
+
+- if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
++ vivo = asus->throttle_thermal_policy_dev == ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
++ if (vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_FULLSPEED)
++ return -EINVAL;
++ else if (!vivo && new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT)
+ return -EINVAL;
+
+ asus->throttle_thermal_policy_mode = new_mode;
+@@ -3722,7 +3593,10 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
+ return count;
+ }
+
+-// Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
++/*
++ * Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
++ * VIVOBOOK: 3 - fans full speed
++ */
+ static DEVICE_ATTR_RW(throttle_thermal_policy);
+
+ /* Platform profile ***********************************************************/
+@@ -3788,7 +3662,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
+ * Not an error if a component platform_profile relies on is unavailable
+ * so early return, skipping the setup of platform_profile.
+ */
+- if (!asus->throttle_thermal_policy_available)
++ if (!asus->throttle_thermal_policy_dev)
+ return 0;
+
+ dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");
+@@ -3803,8 +3677,13 @@ static int platform_profile_setup(struct asus_wmi *asus)
+ asus->platform_profile_handler.choices);
+
+ err = platform_profile_register(&asus->platform_profile_handler);
+- if (err)
++ if (err == -EEXIST) {
++ pr_warn("%s, a platform_profile handler is already registered\n", __func__);
++ return 0;
++ } else if (err) {
++ pr_err("%s, failed at platform_profile_register: %d\n", __func__, err);
+ return err;
++ }
+
+ asus->platform_profile_support = true;
+ return 0;
+@@ -4203,7 +4082,7 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
+ if (code == NOTIFY_KBD_FBM || code == NOTIFY_KBD_TTP) {
+ if (asus->fan_boost_mode_available)
+ fan_boost_mode_switch_next(asus);
+- if (asus->throttle_thermal_policy_available)
++ if (asus->throttle_thermal_policy_dev)
+ throttle_thermal_policy_switch_next(asus);
+ return;
+
+@@ -4329,13 +4208,27 @@ static struct attribute *platform_attributes[] = {
&dev_attr_als_enable.attr,
&dev_attr_fan_boost_mode.attr,
&dev_attr_throttle_thermal_policy.attr,
@@ -4335,11 +2341,13 @@ index 999cd658ec8b..d016acb23789 100644
&dev_attr_mcu_powersave.attr,
&dev_attr_boot_sound.attr,
&dev_attr_panel_od.attr,
-@@ -4294,19 +4294,33 @@
+@@ -4375,20 +4268,34 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
+ else if (attr == &dev_attr_fan_boost_mode.attr)
ok = asus->fan_boost_mode_available;
else if (attr == &dev_attr_throttle_thermal_policy.attr)
- ok = asus->throttle_thermal_policy_dev != 0;
+- ok = asus->throttle_thermal_policy_available;
- else if (attr == &dev_attr_ppt_pl2_sppt.attr)
++ ok = asus->throttle_thermal_policy_dev != 0;
+ else if (attr == &dev_attr_ppt_pl2_sppt.attr
+ || attr == &dev_attr_ppt_pl2_sppt_min.attr
+ || attr == &dev_attr_ppt_pl2_sppt_max.attr)
@@ -4376,7 +2384,19 @@ index 999cd658ec8b..d016acb23789 100644
devid = ASUS_WMI_DEVID_NV_THERM_TARGET;
else if (attr == &dev_attr_mcu_powersave.attr)
devid = ASUS_WMI_DEVID_MCU_POWERSAVE;
-@@ -4652,6 +4490,77 @@ static void asus_wmi_debugfs_init(struct asus_wmi *asus)
+@@ -4401,8 +4308,10 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
+ else if (attr == &dev_attr_available_mini_led_mode.attr)
+ ok = asus->mini_led_dev_id != 0;
+
+- if (devid != -1)
++ if (devid != -1) {
+ ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0);
++ pr_debug("%s called 0x%08x, ok: %x\n", __func__, devid, ok);
++ }
+
+ return ok ? attr->mode : 0;
+ }
+@@ -4612,6 +4521,77 @@ static void asus_wmi_debugfs_init(struct asus_wmi *asus)
/* Init / exit ****************************************************************/
@@ -4454,7 +2474,7 @@ index 999cd658ec8b..d016acb23789 100644
static int asus_wmi_add(struct platform_device *pdev)
{
struct platform_driver *pdrv = to_platform_driver(pdev->dev.driver);
-@@ -4677,15 +4586,7 @@ static int asus_wmi_add(struct platform_device *pdev)
+@@ -4637,15 +4617,7 @@ static int asus_wmi_add(struct platform_device *pdev)
if (err)
goto fail_platform;
@@ -4471,6 +2491,142 @@ index 999cd658ec8b..d016acb23789 100644
asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
---
-2.45.1
-
+@@ -4667,18 +4639,17 @@ static int asus_wmi_add(struct platform_device *pdev)
+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE2))
+ asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE2;
+
++ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY))
++ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY;
++ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO))
++ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
++
+ err = fan_boost_mode_check_present(asus);
+ if (err)
+ goto fail_fan_boost_mode;
+
+- err = throttle_thermal_policy_check_present(asus);
+- if (err)
+- goto fail_throttle_thermal_policy;
+- else
+- throttle_thermal_policy_set_default(asus);
+-
+ err = platform_profile_setup(asus);
+- if (err)
++ if (err && err != -EEXIST)
+ goto fail_platform_profile_setup;
+
+ err = asus_wmi_sysfs_init(asus->platform_device);
+@@ -4771,7 +4742,6 @@ static int asus_wmi_add(struct platform_device *pdev)
+ fail_input:
+ asus_wmi_sysfs_exit(asus->platform_device);
+ fail_sysfs:
+-fail_throttle_thermal_policy:
+ fail_custom_fan_curve:
+ fail_platform_profile_setup:
+ if (asus->platform_profile_support)
+diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
+index 3eb5cd6773ad..870f4bb57100 100644
+--- a/include/linux/platform_data/x86/asus-wmi.h
++++ b/include/linux/platform_data/x86/asus-wmi.h
+@@ -4,6 +4,7 @@
+
+ #include <linux/errno.h>
+ #include <linux/types.h>
++#include <linux/dmi.h>
+
+ /* WMI Methods */
+ #define ASUS_WMI_METHODID_SPEC 0x43455053 /* BIOS SPECification */
+@@ -64,8 +65,10 @@
+ #define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032
+ #define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018
+ #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075
++#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
+
+ /* Misc */
++#define ASUS_WMI_DEVID_PANEL_HD 0x0005001C
+ #define ASUS_WMI_DEVID_PANEL_OD 0x00050019
+ #define ASUS_WMI_DEVID_CAMERA 0x00060013
+ #define ASUS_WMI_DEVID_LID_FLIP 0x00060062
+@@ -126,6 +129,14 @@
+ /* dgpu on/off */
+ #define ASUS_WMI_DEVID_DGPU 0x00090020
+
++/* Intel E-core and P-core configuration in a format 0x0[E]0[P] */
++#define ASUS_WMI_DEVID_CORES 0x001200D2
++ /* Maximum Intel E-core and P-core availability */
++#define ASUS_WMI_DEVID_CORES_MAX 0x001200D3
++#define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099
++#define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098
++#define ASUS_WMI_DEVID_APU_MEM 0x000600C1
++
+ /* gpu mux switch, 0 = dGPU, 1 = Optimus */
+ #define ASUS_WMI_DEVID_GPU_MUX 0x00090016
+ #define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026
+@@ -151,8 +162,18 @@
+ #define ASUS_WMI_DSTS_LIGHTBAR_MASK 0x0000000F
+
+ #if IS_REACHABLE(CONFIG_ASUS_WMI)
++int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval);
++int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval);
+ int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
+ #else
++static int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
++{
++ return -ENODEV;
++}
++static int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
++{
++ return -ENODEV;
++}
+ static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
+ u32 *retval)
+ {
+@@ -160,4 +181,48 @@ static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
+ }
+ #endif
+
++/* To be used by both hid-asus and asus-wmi to determine which controls kbd_brightness */
++#if IS_ENABLED(CONFIG_ASUS_WMI)
++bool asus_use_hid_led(void);
++#else
++static inline bool asus_use_hid_led(void)
++{
++ return true;
++}
++#endif
++
++static const struct dmi_system_id asus_use_hid_led_dmi_ids[] = {
++ {
++ .matches = {
++ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Zephyrus"),
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Strix"),
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_PRODUCT_FAMILY, "ROG Flow"),
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA403U"),
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GU605M"),
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "RC71L"),
++ },
++ },
++ NULL,
++};
++
+ #endif /* __PLATFORM_DATA_X86_ASUS_WMI_H */
diff --git a/SOURCES/cachy-bbr3.patch b/SOURCES/cachy-bbr3.patch
index c714f9d..51633e0 100644
--- a/SOURCES/cachy-bbr3.patch
+++ b/SOURCES/cachy-bbr3.patch
@@ -1,7 +1,7 @@
-From 3b7e1abbffd80645ae13f4fb033fa0f49a641e27 Mon Sep 17 00:00:00 2001
+From b8584936a7a1eb2149d0c10de2ac05ca7acc5c9f Mon Sep 17 00:00:00 2001
From: Peter Jung <admin@ptr1337.dev>
-Date: Fri, 5 Jul 2024 10:31:38 +0200
-Subject: [PATCH 03/10] bbr3
+Date: Sat, 3 Aug 2024 09:32:56 +0200
+Subject: [PATCH 02/12] bbr3
Signed-off-by: Peter Jung <admin@ptr1337.dev>
---
@@ -24,10 +24,10 @@ Signed-off-by: Peter Jung <admin@ptr1337.dev>
16 files changed, 1940 insertions(+), 553 deletions(-)
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
-index 55399ee2a57e..c6193d87a8e6 100644
+index 6a5e08b937b3..27aab715490e 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
-@@ -368,7 +368,9 @@ struct tcp_sock {
+@@ -369,7 +369,9 @@ struct tcp_sock {
u8 compressed_ack;
u8 dup_ack_counter:2,
tlp_retrans:1, /* TLP is a retransmission */
@@ -36,10 +36,10 @@ index 55399ee2a57e..c6193d87a8e6 100644
+ tlp_orig_data_app_limited:1, /* app-limited before TLP rtx? */
+ unused:2;
u8 thin_lto : 1,/* Use linear timeouts for thin streams */
- recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */
fastopen_connect:1, /* FASTOPEN_CONNECT sockopt */
+ fastopen_no_cookie:1, /* Allow send/recv SYN+data without a cookie */
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
-index 146ece8563ca..0217922aa100 100644
+index c0deaafebfdc..d53f042d936e 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -137,8 +137,8 @@ struct inet_connection_sock {
@@ -54,10 +54,10 @@ index 146ece8563ca..0217922aa100 100644
#define ICSK_TIME_RETRANS 1 /* Retransmit timer */
diff --git a/include/net/tcp.h b/include/net/tcp.h
-index 2bcf30381d75..54e1af0789b8 100644
+index 32815a40dea1..109b8d1ddc31 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
-@@ -381,6 +381,8 @@ static inline void tcp_dec_quickack_mode(struct sock *sk)
+@@ -375,6 +375,8 @@ static inline void tcp_dec_quickack_mode(struct sock *sk)
#define TCP_ECN_QUEUE_CWR 2
#define TCP_ECN_DEMAND_CWR 4
#define TCP_ECN_SEEN 8
@@ -66,7 +66,7 @@ index 2bcf30381d75..54e1af0789b8 100644
enum tcp_tw_status {
TCP_TW_SUCCESS = 0,
-@@ -782,6 +784,15 @@ static inline void tcp_fast_path_check(struct sock *sk)
+@@ -779,6 +781,15 @@ static inline void tcp_fast_path_check(struct sock *sk)
u32 tcp_delack_max(const struct sock *sk);
@@ -82,7 +82,7 @@ index 2bcf30381d75..54e1af0789b8 100644
/* Compute the actual rto_min value */
static inline u32 tcp_rto_min(const struct sock *sk)
{
-@@ -887,6 +898,11 @@ static inline u32 tcp_stamp_us_delta(u64 t1, u64 t0)
+@@ -884,6 +895,11 @@ static inline u32 tcp_stamp_us_delta(u64 t1, u64 t0)
return max_t(s64, t1 - t0, 0);
}
@@ -94,7 +94,7 @@ index 2bcf30381d75..54e1af0789b8 100644
/* provide the departure time in us unit */
static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb)
{
-@@ -975,9 +991,14 @@ struct tcp_skb_cb {
+@@ -973,9 +989,14 @@ struct tcp_skb_cb {
/* pkts S/ACKed so far upon tx of skb, incl retrans: */
__u32 delivered;
/* start of send pipeline phase */
@@ -111,7 +111,7 @@ index 2bcf30381d75..54e1af0789b8 100644
} tx; /* only used for outgoing skbs */
union {
struct inet_skb_parm h4;
-@@ -1081,6 +1102,7 @@ enum tcp_ca_event {
+@@ -1079,6 +1100,7 @@ enum tcp_ca_event {
CA_EVENT_LOSS, /* loss timeout */
CA_EVENT_ECN_NO_CE, /* ECT set, but not CE marked */
CA_EVENT_ECN_IS_CE, /* received CE marked IP packet */
@@ -119,7 +119,7 @@ index 2bcf30381d75..54e1af0789b8 100644
};
/* Information about inbound ACK, passed to cong_ops->in_ack_event() */
-@@ -1103,7 +1125,11 @@ enum tcp_ca_ack_event_flags {
+@@ -1101,7 +1123,11 @@ enum tcp_ca_ack_event_flags {
#define TCP_CONG_NON_RESTRICTED 0x1
/* Requires ECN/ECT set on all packets */
#define TCP_CONG_NEEDS_ECN 0x2
@@ -132,7 +132,7 @@ index 2bcf30381d75..54e1af0789b8 100644
union tcp_cc_info;
-@@ -1123,10 +1149,13 @@ struct ack_sample {
+@@ -1121,10 +1147,13 @@ struct ack_sample {
*/
struct rate_sample {
u64 prior_mstamp; /* starting timestamp for interval */
@@ -147,7 +147,7 @@ index 2bcf30381d75..54e1af0789b8 100644
long interval_us; /* time for tp->delivered to incr "delivered" */
u32 snd_interval_us; /* snd interval for delivered packets */
u32 rcv_interval_us; /* rcv interval for delivered packets */
-@@ -1137,7 +1166,9 @@ struct rate_sample {
+@@ -1135,7 +1164,9 @@ struct rate_sample {
u32 last_end_seq; /* end_seq of most recently ACKed packet */
bool is_app_limited; /* is sample from packet with bubble in pipe? */
bool is_retrans; /* is sample from retransmission? */
@@ -157,7 +157,7 @@ index 2bcf30381d75..54e1af0789b8 100644
};
struct tcp_congestion_ops {
-@@ -1161,8 +1192,11 @@ struct tcp_congestion_ops {
+@@ -1159,8 +1190,11 @@ struct tcp_congestion_ops {
/* hook for packet ack accounting (optional) */
void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
@@ -171,7 +171,7 @@ index 2bcf30381d75..54e1af0789b8 100644
/* call when packets are delivered to update cwnd and pacing rate,
* after all the ca_state processing. (optional)
-@@ -1228,6 +1262,14 @@ static inline char *tcp_ca_get_name_by_key(u32 key, char *buffer)
+@@ -1226,6 +1260,14 @@ static inline char *tcp_ca_get_name_by_key(u32 key, char *buffer)
}
#endif
@@ -186,7 +186,7 @@ index 2bcf30381d75..54e1af0789b8 100644
static inline bool tcp_ca_needs_ecn(const struct sock *sk)
{
const struct inet_connection_sock *icsk = inet_csk(sk);
-@@ -1247,6 +1289,7 @@ static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
+@@ -1245,6 +1287,7 @@ static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
void tcp_set_ca_state(struct sock *sk, const u8 ca_state);
/* From tcp_rate.c */
@@ -194,7 +194,7 @@ index 2bcf30381d75..54e1af0789b8 100644
void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb);
void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
struct rate_sample *rs);
-@@ -1259,6 +1302,21 @@ static inline bool tcp_skb_sent_after(u64 t1, u64 t2, u32 seq1, u32 seq2)
+@@ -1257,6 +1300,21 @@ static inline bool tcp_skb_sent_after(u64 t1, u64 t2, u32 seq1, u32 seq2)
return t1 > t2 || (t1 == t2 && after(seq1, seq2));
}
@@ -216,7 +216,7 @@ index 2bcf30381d75..54e1af0789b8 100644
/* These functions determine how the current flow behaves in respect of SACK
* handling. SACK is negotiated with the peer, and therefore it can vary
* between different flows.
-@@ -2417,7 +2475,7 @@ struct tcp_plb_state {
+@@ -2419,7 +2477,7 @@ struct tcp_plb_state {
u8 consec_cong_rounds:5, /* consecutive congested rounds */
unused:3;
u32 pause_until; /* jiffies32 when PLB can resume rerouting */
@@ -280,10 +280,10 @@ index 3b687d20c9ed..a7c30c243b54 100644
struct rta_session {
__u8 proto;
diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h
-index c07e9f90c084..5c88336ced60 100644
+index dbf896f3146c..4702cd2f1ffc 100644
--- a/include/uapi/linux/tcp.h
+++ b/include/uapi/linux/tcp.h
-@@ -176,6 +176,7 @@ enum tcp_fastopen_client_fail {
+@@ -178,6 +178,7 @@ enum tcp_fastopen_client_fail {
#define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */
#define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */
#define TCPI_OPT_USEC_TS 64 /* usec timestamps */
@@ -324,10 +324,10 @@ index 8e94ed7c56a0..50dc9970cad2 100644
choice
prompt "Default TCP congestion control"
diff --git a/net/ipv4/bpf_tcp_ca.c b/net/ipv4/bpf_tcp_ca.c
-index 7f518ea5f4ac..8f9b677c20e1 100644
+index 18227757ec0c..f180befc28bd 100644
--- a/net/ipv4/bpf_tcp_ca.c
+++ b/net/ipv4/bpf_tcp_ca.c
-@@ -302,11 +302,15 @@ static void bpf_tcp_ca_pkts_acked(struct sock *sk, const struct ack_sample *samp
+@@ -305,11 +305,15 @@ static void bpf_tcp_ca_pkts_acked(struct sock *sk, const struct ack_sample *samp
{
}
@@ -341,10 +341,10 @@ index 7f518ea5f4ac..8f9b677c20e1 100644
+{
+}
+
- static void bpf_tcp_ca_cong_control(struct sock *sk, const struct rate_sample *rs)
+ static void bpf_tcp_ca_cong_control(struct sock *sk, u32 ack, int flag,
+ const struct rate_sample *rs)
{
- }
-@@ -336,7 +340,8 @@ static struct tcp_congestion_ops __bpf_ops_tcp_congestion_ops = {
+@@ -340,7 +344,8 @@ static struct tcp_congestion_ops __bpf_ops_tcp_congestion_ops = {
.cwnd_event = bpf_tcp_ca_cwnd_event,
.in_ack_event = bpf_tcp_ca_in_ack_event,
.pkts_acked = bpf_tcp_ca_pkts_acked,
@@ -355,10 +355,10 @@ index 7f518ea5f4ac..8f9b677c20e1 100644
.undo_cwnd = bpf_tcp_ca_undo_cwnd,
.sndbuf_expand = bpf_tcp_ca_sndbuf_expand,
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
-index 77ee1eda3fd8..b3d43b2b8617 100644
+index ec6911034138..df7731a30198 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
-@@ -3099,6 +3099,7 @@ int tcp_disconnect(struct sock *sk, int flags)
+@@ -3120,6 +3120,7 @@ int tcp_disconnect(struct sock *sk, int flags)
tp->rx_opt.dsack = 0;
tp->rx_opt.num_sacks = 0;
tp->rcv_ooopack = 0;
@@ -366,7 +366,7 @@ index 77ee1eda3fd8..b3d43b2b8617 100644
/* Clean up fastopen related fields */
-@@ -3825,6 +3826,8 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info)
+@@ -3846,6 +3847,8 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info)
info->tcpi_options |= TCPI_OPT_ECN;
if (tp->ecn_flags & TCP_ECN_SEEN)
info->tcpi_options |= TCPI_OPT_ECN_SEEN;
@@ -376,7 +376,7 @@ index 77ee1eda3fd8..b3d43b2b8617 100644
info->tcpi_options |= TCPI_OPT_SYN_DATA;
if (tp->tcp_usec_ts)
diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
-index 05dc2d05bc7c..61ed3e549350 100644
+index 760941e55153..a180fa648d5e 100644
--- a/net/ipv4/tcp_bbr.c
+++ b/net/ipv4/tcp_bbr.c
@@ -1,18 +1,19 @@
@@ -1549,7 +1549,7 @@ index 05dc2d05bc7c..61ed3e549350 100644
+ return 3;
}
--__bpf_kfunc static void bbr_main(struct sock *sk, const struct rate_sample *rs)
+-__bpf_kfunc static void bbr_main(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs)
+/* Incorporate a new bw sample into the current window of our max filter. */
+static void bbr_take_max_bw_sample(struct sock *sk, u32 bw)
{
@@ -2651,7 +2651,7 @@ index 05dc2d05bc7c..61ed3e549350 100644
+ return false;
+}
+
-+__bpf_kfunc static void bbr_main(struct sock *sk, const struct rate_sample *rs)
++__bpf_kfunc static void bbr_main(struct sock *sk, u32 ack, int flag, const struct rate_sample *rs)
+{
+ struct tcp_sock *tp = tcp_sk(sk);
+ struct bbr *bbr = inet_csk_ca(sk);
@@ -2993,7 +2993,7 @@ index 05dc2d05bc7c..61ed3e549350 100644
.get_info = bbr_get_info,
.set_state = bbr_set_state,
};
-@@ -1161,10 +2361,11 @@ BTF_KFUNCS_START(tcp_bbr_check_kfunc_ids)
+@@ -1159,10 +2359,11 @@ BTF_KFUNCS_START(tcp_bbr_check_kfunc_ids)
BTF_ID_FLAGS(func, bbr_init)
BTF_ID_FLAGS(func, bbr_main)
BTF_ID_FLAGS(func, bbr_sndbuf_expand)
@@ -3004,9 +3004,9 @@ index 05dc2d05bc7c..61ed3e549350 100644
-BTF_ID_FLAGS(func, bbr_min_tso_segs)
+BTF_ID_FLAGS(func, bbr_tso_segs)
BTF_ID_FLAGS(func, bbr_set_state)
- #endif
- #endif
-@@ -1199,5 +2400,12 @@ MODULE_AUTHOR("Van Jacobson <vanj@google.com>");
+ BTF_KFUNCS_END(tcp_bbr_check_kfunc_ids)
+
+@@ -1195,5 +2396,12 @@ MODULE_AUTHOR("Van Jacobson <vanj@google.com>");
MODULE_AUTHOR("Neal Cardwell <ncardwell@google.com>");
MODULE_AUTHOR("Yuchung Cheng <ycheng@google.com>");
MODULE_AUTHOR("Soheil Hassas Yeganeh <soheil@google.com>");
@@ -3032,10 +3032,10 @@ index 28ffcfbeef14..7b13915ba288 100644
icsk->icsk_ca_ops->init(sk);
if (tcp_ca_needs_ecn(sk))
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
-index 7b692bcb61d4..650db0ec7222 100644
+index 570e87ad9a56..c539ac50f7a6 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -364,7 +364,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
+@@ -365,7 +365,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
tcp_enter_quickack_mode(sk, 2);
break;
case INET_ECN_CE:
@@ -3044,7 +3044,7 @@ index 7b692bcb61d4..650db0ec7222 100644
tcp_ca_event(sk, CA_EVENT_ECN_IS_CE);
if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
-@@ -375,7 +375,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
+@@ -376,7 +376,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
tp->ecn_flags |= TCP_ECN_SEEN;
break;
default:
@@ -3053,7 +3053,7 @@ index 7b692bcb61d4..650db0ec7222 100644
tcp_ca_event(sk, CA_EVENT_ECN_NO_CE);
tp->ecn_flags |= TCP_ECN_SEEN;
break;
-@@ -1112,7 +1112,12 @@ static void tcp_verify_retransmit_hint(struct tcp_sock *tp, struct sk_buff *skb)
+@@ -1115,7 +1115,12 @@ static void tcp_verify_retransmit_hint(struct tcp_sock *tp, struct sk_buff *skb)
*/
static void tcp_notify_skb_loss_event(struct tcp_sock *tp, const struct sk_buff *skb)
{
@@ -3066,7 +3066,7 @@ index 7b692bcb61d4..650db0ec7222 100644
}
void tcp_mark_skb_lost(struct sock *sk, struct sk_buff *skb)
-@@ -1493,6 +1498,17 @@ static bool tcp_shifted_skb(struct sock *sk, struct sk_buff *prev,
+@@ -1496,6 +1501,17 @@ static bool tcp_shifted_skb(struct sock *sk, struct sk_buff *prev,
WARN_ON_ONCE(tcp_skb_pcount(skb) < pcount);
tcp_skb_pcount_add(skb, -pcount);
@@ -3084,7 +3084,7 @@ index 7b692bcb61d4..650db0ec7222 100644
/* When we're adding to gso_segs == 1, gso_size will be zero,
* in theory this shouldn't be necessary but as long as DSACK
* code can come after this skb later on it's better to keep
-@@ -3778,7 +3794,8 @@ static void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq)
+@@ -3790,7 +3806,8 @@ static void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq)
/* This routine deals with acks during a TLP episode and ends an episode by
* resetting tlp_high_seq. Ref: TLP algorithm in draft-ietf-tcpm-rack
*/
@@ -3094,7 +3094,7 @@ index 7b692bcb61d4..650db0ec7222 100644
{
struct tcp_sock *tp = tcp_sk(sk);
-@@ -3795,6 +3812,7 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
+@@ -3807,6 +3824,7 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
/* ACK advances: there was a loss, so reduce cwnd. Reset
* tlp_high_seq in tcp_init_cwnd_reduction()
*/
@@ -3102,7 +3102,7 @@ index 7b692bcb61d4..650db0ec7222 100644
tcp_init_cwnd_reduction(sk);
tcp_set_ca_state(sk, TCP_CA_CWR);
tcp_end_cwnd_reduction(sk);
-@@ -3805,6 +3823,11 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
+@@ -3817,6 +3835,11 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
FLAG_NOT_DUP | FLAG_DATA_SACKED))) {
/* Pure dupack: original and TLP probe arrived; no loss */
tp->tlp_high_seq = 0;
@@ -3114,7 +3114,7 @@ index 7b692bcb61d4..650db0ec7222 100644
}
}
-@@ -3913,6 +3936,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
+@@ -3925,6 +3948,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
prior_fack = tcp_is_sack(tp) ? tcp_highest_sack_seq(tp) : tp->snd_una;
rs.prior_in_flight = tcp_packets_in_flight(tp);
@@ -3122,7 +3122,7 @@ index 7b692bcb61d4..650db0ec7222 100644
/* ts_recent update must be made after we are sure that the packet
* is in window.
-@@ -3987,7 +4011,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
+@@ -3999,7 +4023,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
tcp_rack_update_reo_wnd(sk, &rs);
if (tp->tlp_high_seq)
@@ -3131,7 +3131,7 @@ index 7b692bcb61d4..650db0ec7222 100644
if (tcp_ack_is_dubious(sk, flag)) {
if (!(flag & (FLAG_SND_UNA_ADVANCED |
-@@ -4011,6 +4035,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
+@@ -4023,6 +4047,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
delivered = tcp_newly_delivered(sk, delivered, flag);
lost = tp->lost - lost; /* freshly marked lost */
rs.is_ack_delayed = !!(flag & FLAG_ACK_MAYBE_DELAYED);
@@ -3139,7 +3139,7 @@ index 7b692bcb61d4..650db0ec7222 100644
tcp_rate_gen(sk, delivered, lost, is_sack_reneg, sack_state.rate);
tcp_cong_control(sk, ack, delivered, flag, sack_state.rate);
tcp_xmit_recovery(sk, rexmit);
-@@ -4030,7 +4055,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
+@@ -4042,7 +4067,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
tcp_ack_probe(sk);
if (tp->tlp_high_seq)
@@ -3148,7 +3148,7 @@ index 7b692bcb61d4..650db0ec7222 100644
return 1;
old_ack:
-@@ -5688,13 +5713,14 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible)
+@@ -5714,13 +5739,14 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible)
/* More than one full frame received... */
if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss &&
@@ -3166,7 +3166,7 @@ index 7b692bcb61d4..650db0ec7222 100644
tcp_in_quickack_mode(sk) ||
/* Protocol state mandates a one-time immediate ACK */
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index f0761f060a83..90a9389499e6 100644
+index 0fbebf6266e9..6eb1d369c584 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -460,6 +460,8 @@ void tcp_ca_openreq_child(struct sock *sk, const struct dst_entry *dst)
@@ -3179,10 +3179,10 @@ index f0761f060a83..90a9389499e6 100644
const struct tcp_congestion_ops *ca;
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
-index 02caeb7bcf63..0e445bc5cc60 100644
+index 95618d0e78e4..3f4bdd2b6476 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
-@@ -332,10 +332,9 @@ static void tcp_ecn_send_syn(struct sock *sk, struct sk_buff *skb)
+@@ -336,10 +336,9 @@ static void tcp_ecn_send_syn(struct sock *sk, struct sk_buff *skb)
bool bpf_needs_ecn = tcp_bpf_ca_needs_ecn(sk);
bool use_ecn = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_ecn) == 1 ||
tcp_ca_needs_ecn(sk) || bpf_needs_ecn;
@@ -3194,7 +3194,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
if (dst && dst_feature(dst, RTAX_FEATURE_ECN))
use_ecn = true;
}
-@@ -347,6 +346,9 @@ static void tcp_ecn_send_syn(struct sock *sk, struct sk_buff *skb)
+@@ -351,6 +350,9 @@ static void tcp_ecn_send_syn(struct sock *sk, struct sk_buff *skb)
tp->ecn_flags = TCP_ECN_OK;
if (tcp_ca_needs_ecn(sk) || bpf_needs_ecn)
INET_ECN_xmit(sk);
@@ -3204,7 +3204,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
}
}
-@@ -384,7 +386,8 @@ static void tcp_ecn_send(struct sock *sk, struct sk_buff *skb,
+@@ -388,7 +390,8 @@ static void tcp_ecn_send(struct sock *sk, struct sk_buff *skb,
th->cwr = 1;
skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
}
@@ -3214,7 +3214,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
/* ACK or retransmitted segment: clear ECT|CE */
INET_ECN_dontxmit(sk);
}
-@@ -1593,7 +1596,7 @@ int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
+@@ -1601,7 +1604,7 @@ int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
{
struct tcp_sock *tp = tcp_sk(sk);
struct sk_buff *buff;
@@ -3223,7 +3223,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
long limit;
int nlen;
u8 flags;
-@@ -1668,6 +1671,30 @@ int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
+@@ -1676,6 +1679,30 @@ int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
if (diff)
tcp_adjust_pcount(sk, skb, diff);
@@ -3254,7 +3254,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
}
/* Link BUFF into the send queue. */
-@@ -2025,13 +2052,12 @@ static u32 tcp_tso_autosize(const struct sock *sk, unsigned int mss_now,
+@@ -2033,13 +2060,12 @@ static u32 tcp_tso_autosize(const struct sock *sk, unsigned int mss_now,
static u32 tcp_tso_segs(struct sock *sk, unsigned int mss_now)
{
const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
@@ -3273,7 +3273,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
return min_t(u32, tso_segs, sk->sk_gso_max_segs);
}
-@@ -2731,6 +2757,7 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
+@@ -2767,6 +2793,7 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
skb_set_delivery_time(skb, tp->tcp_wstamp_ns, true);
list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue);
tcp_init_tso_segs(skb, mss_now);
@@ -3281,7 +3281,7 @@ index 02caeb7bcf63..0e445bc5cc60 100644
goto repair; /* Skip network transmission */
}
-@@ -2944,6 +2971,7 @@ void tcp_send_loss_probe(struct sock *sk)
+@@ -2981,6 +3008,7 @@ void tcp_send_loss_probe(struct sock *sk)
if (WARN_ON(!skb || !tcp_skb_pcount(skb)))
goto rearm_timer;
@@ -3370,10 +3370,10 @@ index a8f6d9d06f2e..8737f2134648 100644
rs->interval_us = max(snd_us, ack_us);
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
-index f96f68cf7961..af0ce59fbbc0 100644
+index 4d40615dc8fc..f27941201ef2 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
-@@ -682,6 +682,7 @@ void tcp_write_timer_handler(struct sock *sk)
+@@ -689,6 +689,7 @@ void tcp_write_timer_handler(struct sock *sk)
return;
}
@@ -3382,5 +3382,5 @@ index f96f68cf7961..af0ce59fbbc0 100644
event = icsk->icsk_pending;
--
-2.45.2
+2.46.0.rc1
diff --git a/SOURCES/cachy-bore.patch b/SOURCES/cachy-bore.patch
index c321203..7421807 100644
--- a/SOURCES/cachy-bore.patch
+++ b/SOURCES/cachy-bore.patch
@@ -1,22 +1,21 @@
-From 699662da34346e7dfea9523fb4ae2b18287f527c Mon Sep 17 00:00:00 2001
-From: Piotr Gorski <lucjan.lucjanov@gmail.com>
-Date: Thu, 4 Jul 2024 21:28:26 +0200
+From 3816495f5635104fae1dda21b743f750c2914196 Mon Sep 17 00:00:00 2001
+From: Eric Naim <dnaim@proton.me>
+Date: Sat, 3 Aug 2024 15:23:30 +0700
Subject: [PATCH] bore
-Signed-off-by: Piotr Gorski <lucjan.lucjanov@gmail.com>
---
include/linux/sched.h | 10 ++
init/Kconfig | 17 +++
- kernel/Kconfig.hz | 16 +++
- kernel/sched/core.c | 143 +++++++++++++++++++++
- kernel/sched/debug.c | 60 ++++++++-
- kernel/sched/fair.c | 275 +++++++++++++++++++++++++++++++++++++---
- kernel/sched/features.h | 28 +++-
+ kernel/Kconfig.hz | 16 ++
+ kernel/sched/core.c | 143 ++++++++++++++++++
+ kernel/sched/debug.c | 60 +++++++-
+ kernel/sched/fair.c | 322 ++++++++++++++++++++++++++++++++++++++--
+ kernel/sched/features.h | 22 ++-
kernel/sched/sched.h | 7 +
- 8 files changed, 538 insertions(+), 18 deletions(-)
+ 8 files changed, 583 insertions(+), 14 deletions(-)
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 3c2abbc58..e7bf3a034 100644
+index 76214d7c8..9f65d367b 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -547,6 +547,16 @@ struct sched_entity {
@@ -37,10 +36,10 @@ index 3c2abbc58..e7bf3a034 100644
u64 slice;
diff --git a/init/Kconfig b/init/Kconfig
-index 459f44ef7..17385c859 100644
+index febdea2af..171b5d995 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1279,6 +1279,23 @@ config CHECKPOINT_RESTORE
+@@ -1283,6 +1283,23 @@ config CHECKPOINT_RESTORE
If unsure, say N here.
@@ -91,10 +90,10 @@ index 38ef6d068..5f6eecd1e 100644
config SCHED_HRTICK
def_bool HIGH_RES_TIMERS
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index d211d40a2..b6b2aa707 100644
+index ebf21373f..5d1c97612 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -4516,6 +4516,138 @@ int wake_up_state(struct task_struct *p, unsigned int state)
+@@ -4512,6 +4512,138 @@ int wake_up_state(struct task_struct *p, unsigned int state)
return try_to_wake_up(p, state, 0);
}
@@ -233,7 +232,7 @@ index d211d40a2..b6b2aa707 100644
/*
* Perform scheduler related setup for a newly forked process p.
* p is forked by current.
-@@ -4532,6 +4664,9 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
+@@ -4528,6 +4660,9 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
p->se.prev_sum_exec_runtime = 0;
p->se.nr_migrations = 0;
p->se.vruntime = 0;
@@ -243,7 +242,7 @@ index d211d40a2..b6b2aa707 100644
p->se.vlag = 0;
p->se.slice = sysctl_sched_base_slice;
INIT_LIST_HEAD(&p->se.group_node);
-@@ -4848,6 +4983,9 @@ void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
+@@ -4843,6 +4978,9 @@ void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
void sched_post_fork(struct task_struct *p)
{
@@ -253,20 +252,20 @@ index d211d40a2..b6b2aa707 100644
uclamp_post_fork(p);
}
-@@ -9931,6 +10069,11 @@ void __init sched_init(void)
+@@ -9930,6 +10068,11 @@ void __init sched_init(void)
BUG_ON(&dl_sched_class != &stop_sched_class + 1);
#endif
+#ifdef CONFIG_SCHED_BORE
+ sched_init_bore();
-+ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 5.2.4 by Masahito Suzuki");
++ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 5.2.8 by Masahito Suzuki");
+#endif // CONFIG_SCHED_BORE
+
wait_bit_init();
#ifdef CONFIG_FAIR_GROUP_SCHED
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
-index 8d5d98a58..b17861261 100644
+index c1eb9a1af..e2da8d773 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -167,7 +167,52 @@ static const struct file_operations sched_feat_fops = {
@@ -352,7 +351,7 @@ index 8d5d98a58..b17861261 100644
debugfs_create_u32("migration_cost_ns", 0644, debugfs_sched, &sysctl_sched_migration_cost);
debugfs_create_u32("nr_migrate", 0644, debugfs_sched, &sysctl_sched_nr_migrate);
-@@ -595,6 +647,9 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
+@@ -596,6 +648,9 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
SPLIT_NS(schedstat_val_or_zero(p->stats.sum_sleep_runtime)),
SPLIT_NS(schedstat_val_or_zero(p->stats.sum_block_runtime)));
@@ -362,7 +361,7 @@ index 8d5d98a58..b17861261 100644
#ifdef CONFIG_NUMA_BALANCING
SEQ_printf(m, " %d %d", task_node(p), task_numa_group_id(p));
#endif
-@@ -1068,6 +1123,9 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
+@@ -1069,6 +1124,9 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
P(se.load.weight);
#ifdef CONFIG_SMP
@@ -373,7 +372,7 @@ index 8d5d98a58..b17861261 100644
P(se.avg.runnable_sum);
P(se.avg.util_sum);
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index 213c94d02..6dffa3419 100644
+index 483c137b9..4c8d7fbd5 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -19,6 +19,9 @@
@@ -386,7 +385,7 @@ index 213c94d02..6dffa3419 100644
*/
#include <linux/energy_model.h>
#include <linux/mmap_lock.h>
-@@ -64,20 +67,125 @@
+@@ -64,20 +67,146 @@
* SCHED_TUNABLESCALING_LOG - scaled logarithmical, *1+ilog(ncpus)
* SCHED_TUNABLESCALING_LINEAR - scaled linear, *ncpus
*
@@ -420,12 +419,17 @@ index 213c94d02..6dffa3419 100644
+#ifdef CONFIG_SCHED_BORE
+u8 __read_mostly sched_bore = 1;
++u8 __read_mostly sched_burst_exclude_kthreads = 1;
+u8 __read_mostly sched_burst_smoothness_long = 1;
+u8 __read_mostly sched_burst_smoothness_short = 0;
+u8 __read_mostly sched_burst_fork_atavistic = 2;
+u8 __read_mostly sched_burst_penalty_offset = 22;
+uint __read_mostly sched_burst_penalty_scale = 1280;
+uint __read_mostly sched_burst_cache_lifetime = 60000000;
++uint __read_mostly sched_deadline_boost_mask = ENQUEUE_INITIAL
++ | ENQUEUE_WAKEUP;
++uint __read_mostly sched_deadline_preserve_mask = ENQUEUE_RESTORE
++ | ENQUEUE_MIGRATED;
+static int __maybe_unused sixty_four = 64;
+static int __maybe_unused maxval_12_bits = 4095;
+
@@ -461,7 +465,19 @@ index 213c94d02..6dffa3419 100644
+ return __unscale_slice(delta, se->burst_score);
+}
+
-+void reweight_task(struct task_struct *p, int prio);
++static void reweight_entity(
++ struct cfs_rq *cfs_rq, struct sched_entity *se, unsigned long weight);
++
++static void renice_task(struct task_struct *p, int prio)
++{
++ struct sched_entity *se = &p->se;
++ struct cfs_rq *cfs_rq = cfs_rq_of(se);
++ struct load_weight *load = &se->load;
++ unsigned long weight = scale_load(sched_prio_to_weight[prio]);
++
++ reweight_entity(cfs_rq, se, weight);
++ load->inv_weight = sched_prio_to_wmult[prio];
++}
+
+static void update_burst_score(struct sched_entity *se) {
+ if (!entity_is_task(se)) return;
@@ -469,11 +485,15 @@ index 213c94d02..6dffa3419 100644
+ u8 prio = p->static_prio - MAX_RT_PRIO;
+ u8 prev_prio = min(39, prio + se->burst_score);
+
-+ se->burst_score = se->burst_penalty >> 2;
++ u8 burst_score = 0;
++ if (!(sched_burst_exclude_kthreads && (p->flags & PF_KTHREAD)))
++ burst_score = se->burst_penalty >> 2;
++
++ se->burst_score = burst_score;
+
+ u8 new_prio = min(39, prio + se->burst_score);
+ if (new_prio != prev_prio)
-+ reweight_task(p, new_prio);
++ renice_task(p, new_prio);
+}
+
+static void update_burst_penalty(struct sched_entity *se) {
@@ -511,10 +531,10 @@ index 213c94d02..6dffa3419 100644
+}
+#endif // CONFIG_SCHED_BORE
+
- int sched_thermal_decay_shift;
static int __init setup_sched_thermal_decay_shift(char *str)
{
-@@ -137,6 +245,69 @@ static unsigned int sysctl_numa_balancing_promote_rate_limit = 65536;
+ pr_warn("Ignoring the deprecated sched_thermal_decay_shift= option\n");
+@@ -131,6 +260,92 @@ static unsigned int sysctl_numa_balancing_promote_rate_limit = 65536;
#ifdef CONFIG_SYSCTL
static struct ctl_table sched_fair_sysctls[] = {
@@ -529,6 +549,15 @@ index 213c94d02..6dffa3419 100644
+ .extra2 = SYSCTL_ONE,
+ },
+ {
++ .procname = "sched_burst_exclude_kthreads",
++ .data = &sched_burst_exclude_kthreads,
++ .maxlen = sizeof(u8),
++ .mode = 0644,
++ .proc_handler = proc_dou8vec_minmax,
++ .extra1 = SYSCTL_ZERO,
++ .extra2 = SYSCTL_ONE,
++ },
++ {
+ .procname = "sched_burst_smoothness_long",
+ .data = &sched_burst_smoothness_long,
+ .maxlen = sizeof(u8),
@@ -580,11 +609,25 @@ index 213c94d02..6dffa3419 100644
+ .mode = 0644,
+ .proc_handler = proc_douintvec,
+ },
++ {
++ .procname = "sched_deadline_boost_mask",
++ .data = &sched_deadline_boost_mask,
++ .maxlen = sizeof(uint),
++ .mode = 0644,
++ .proc_handler = proc_douintvec,
++ },
++ {
++ .procname = "sched_deadline_preserve_mask",
++ .data = &sched_deadline_preserve_mask,
++ .maxlen = sizeof(uint),
++ .mode = 0644,
++ .proc_handler = proc_douintvec,
++ },
+#endif // CONFIG_SCHED_BORE
#ifdef CONFIG_CFS_BANDWIDTH
{
.procname = "sched_cfs_bandwidth_slice_us",
-@@ -195,6 +366,13 @@ static inline void update_load_set(struct load_weight *lw, unsigned long w)
+@@ -188,6 +403,13 @@ static inline void update_load_set(struct load_weight *lw, unsigned long w)
*
* This idea comes from the SD scheduler of Con Kolivas:
*/
@@ -598,7 +641,7 @@ index 213c94d02..6dffa3419 100644
static unsigned int get_update_sysctl_factor(void)
{
unsigned int cpus = min_t(unsigned int, num_online_cpus(), 8);
-@@ -225,6 +403,7 @@ static void update_sysctl(void)
+@@ -218,6 +440,7 @@ static void update_sysctl(void)
SET_SYSCTL(sched_base_slice);
#undef SET_SYSCTL
}
@@ -606,7 +649,7 @@ index 213c94d02..6dffa3419 100644
void __init sched_init_granularity(void)
{
-@@ -702,6 +881,9 @@ static s64 entity_lag(u64 avruntime, struct sched_entity *se)
+@@ -695,6 +918,9 @@ static s64 entity_lag(u64 avruntime, struct sched_entity *se)
vlag = avruntime - se->vruntime;
limit = calc_delta_fair(max_t(u64, 2*se->slice, TICK_NSEC), se);
@@ -616,7 +659,7 @@ index 213c94d02..6dffa3419 100644
return clamp(vlag, -limit, limit);
}
-@@ -862,6 +1044,39 @@ struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq)
+@@ -855,6 +1081,39 @@ struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq)
return __node_2_se(left);
}
@@ -656,7 +699,7 @@ index 213c94d02..6dffa3419 100644
/*
* Earliest Eligible Virtual Deadline First
*
-@@ -881,28 +1096,27 @@ struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq)
+@@ -874,28 +1133,27 @@ struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq)
*
* Which allows tree pruning through eligibility.
*/
@@ -692,7 +735,7 @@ index 213c94d02..6dffa3419 100644
return curr;
/* Pick the leftmost entity if it's eligible */
-@@ -961,6 +1175,7 @@ struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
+@@ -954,6 +1212,7 @@ struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
* Scheduling class statistics methods:
*/
#ifdef CONFIG_SMP
@@ -700,7 +743,7 @@ index 213c94d02..6dffa3419 100644
int sched_update_scaling(void)
{
unsigned int factor = get_update_sysctl_factor();
-@@ -972,6 +1187,7 @@ int sched_update_scaling(void)
+@@ -965,6 +1224,7 @@ int sched_update_scaling(void)
return 0;
}
@@ -708,7 +751,7 @@ index 213c94d02..6dffa3419 100644
#endif
#endif
-@@ -1171,7 +1387,13 @@ static void update_curr(struct cfs_rq *cfs_rq)
+@@ -1165,7 +1425,13 @@ static void update_curr(struct cfs_rq *cfs_rq)
if (unlikely(delta_exec <= 0))
return;
@@ -722,7 +765,19 @@ index 213c94d02..6dffa3419 100644
update_deadline(cfs_rq, curr);
update_min_vruntime(cfs_rq);
-@@ -5183,6 +5405,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
+@@ -5179,6 +5445,11 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
+ s64 lag = 0;
+
+ se->slice = sysctl_sched_base_slice;
++#ifdef CONFIG_SCHED_BORE
++ if (flags & ~sched_deadline_boost_mask & sched_deadline_preserve_mask)
++ vslice = se->deadline - se->vruntime;
++ else
++#endif // CONFIG_SCHED_BORE
+ vslice = calc_delta_fair(se->slice, se);
+
+ /*
+@@ -5189,6 +5460,9 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
*
* EEVDF: placement strategy #1 / #2
*/
@@ -732,17 +787,19 @@ index 213c94d02..6dffa3419 100644
if (sched_feat(PLACE_LAG) && cfs_rq->nr_running) {
struct sched_entity *curr = cfs_rq->curr;
unsigned long load;
-@@ -5258,7 +5483,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
+@@ -5264,7 +5538,11 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
* on average, halfway through their slice, as such start tasks
* off with half a slice to ease into the competition.
*/
-- if (sched_feat(PLACE_DEADLINE_INITIAL) && (flags & ENQUEUE_INITIAL))
-+ if ((sched_feat(PLACE_DEADLINE_INITIAL) && (flags & ENQUEUE_INITIAL)) ||
-+ (sched_feat(PLACE_DEADLINE_WAKEUP) && (flags & ENQUEUE_WAKEUP)))
++#if !defined(CONFIG_SCHED_BORE)
+ if (sched_feat(PLACE_DEADLINE_INITIAL) && (flags & ENQUEUE_INITIAL))
++#else // CONFIG_SCHED_BORE
++ if (flags & sched_deadline_boost_mask)
++#endif // CONFIG_SCHED_BORE
vslice /= 2;
/*
-@@ -5472,7 +5698,7 @@ pick_next_entity(struct cfs_rq *cfs_rq)
+@@ -5478,7 +5756,7 @@ pick_next_entity(struct cfs_rq *cfs_rq)
cfs_rq->next && entity_eligible(cfs_rq, cfs_rq->next))
return cfs_rq->next;
@@ -751,7 +808,7 @@ index 213c94d02..6dffa3419 100644
}
static bool check_cfs_rq_runtime(struct cfs_rq *cfs_rq);
-@@ -6835,6 +7061,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
+@@ -6846,6 +7124,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
bool was_sched_idle = sched_idle_rq(rq);
util_est_dequeue(&rq->cfs, p);
@@ -766,19 +823,16 @@ index 213c94d02..6dffa3419 100644
for_each_sched_entity(se) {
cfs_rq = cfs_rq_of(se);
-@@ -8369,10 +8603,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
- cfs_rq = cfs_rq_of(se);
- update_curr(cfs_rq);
-
-- /*
-- * XXX pick_eevdf(cfs_rq) != se ?
-- */
+@@ -8414,7 +8700,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
+ /*
+ * XXX pick_eevdf(cfs_rq) != se ?
+ */
- if (pick_eevdf(cfs_rq) == pse)
+ if (pick_eevdf(cfs_rq, pse) == pse)
goto preempt;
return;
-@@ -8590,16 +8821,25 @@ static void yield_task_fair(struct rq *rq)
+@@ -8632,16 +8918,25 @@ static void yield_task_fair(struct rq *rq)
/*
* Are we the only task in the tree?
*/
@@ -804,7 +858,7 @@ index 213c94d02..6dffa3419 100644
/*
* Tell update_rq_clock() that we've just updated,
* so we don't do microscopic update in schedule()
-@@ -12660,6 +12900,9 @@ static void task_fork_fair(struct task_struct *p)
+@@ -12709,6 +13004,9 @@ static void task_fork_fair(struct task_struct *p)
curr = cfs_rq->curr;
if (curr)
update_curr(cfs_rq);
@@ -815,25 +869,19 @@ index 213c94d02..6dffa3419 100644
rq_unlock(rq, &rf);
}
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
-index 143f55df8..9ad25e4e7 100644
+index 143f55df8..3aad8900c 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
-@@ -5,8 +5,34 @@
+@@ -5,8 +5,28 @@
* sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled.
*/
SCHED_FEAT(PLACE_LAG, true)
+/*
+ * Give new tasks half a slice to ease into the competition.
+ */
++#if !defined(CONFIG_SCHED_BORE)
SCHED_FEAT(PLACE_DEADLINE_INITIAL, true)
-SCHED_FEAT(RUN_TO_PARITY, true)
-+/*
-+ * Give waken tasks half a slice to ease into the competition.
-+ */
-+#ifdef CONFIG_SCHED_BORE
-+SCHED_FEAT(PLACE_DEADLINE_WAKEUP, true)
-+#else // !CONFIG_SCHED_BORE
-+SCHED_FEAT(PLACE_DEADLINE_WAKEUP, false)
+#endif // CONFIG_SCHED_BORE
+/*
+ * Inhibit (wakeup) preemption until the current task has exhausted its slice.
@@ -855,10 +903,10 @@ index 143f55df8..9ad25e4e7 100644
/*
* Prefer to schedule the task we woke last (assuming it failed
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index ae50f2127..8c976d27f 100644
+index 38aeedd8a..aa0ae3fb9 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -1967,7 +1967,11 @@ static inline void dirty_sched_domain_sysctl(int cpu)
+@@ -1969,7 +1969,11 @@ static inline void dirty_sched_domain_sysctl(int cpu)
}
#endif
@@ -881,5 +929,5 @@ index ae50f2127..8c976d27f 100644
#ifdef CONFIG_SCHED_DEBUG
extern int sysctl_resched_latency_warn_ms;
--
-2.45.2.606.g9005149a4a
+2.46.0
diff --git a/SOURCES/cachy-fixes.patch b/SOURCES/cachy-fixes.patch
deleted file mode 100644
index 1c632df..0000000
--- a/SOURCES/cachy-fixes.patch
+++ /dev/null
@@ -1,573 +0,0 @@
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-index 371531b2a3d0..ddc064b4fc32 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
-@@ -8327,6 +8327,122 @@ static inline uint32_t get_mem_type(struct drm_framebuffer *fb)
- return abo->tbo.resource ? abo->tbo.resource->mem_type : 0;
- }
-
-+/* TODO remove duplicate */
-+static int amdgpu_dm_plane_get_cursor_position(struct drm_plane *plane, struct drm_crtc *crtc,
-+ struct dc_cursor_position *position)
-+{
-+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-+ int x, y;
-+ int xorigin = 0, yorigin = 0;
-+
-+ if (!crtc || !plane->state->fb)
-+ return 0;
-+
-+ if ((plane->state->crtc_w > amdgpu_crtc->max_cursor_width) ||
-+ (plane->state->crtc_h > amdgpu_crtc->max_cursor_height)) {
-+ DRM_ERROR("%s: bad cursor width or height %d x %d\n",
-+ __func__,
-+ plane->state->crtc_w,
-+ plane->state->crtc_h);
-+ return -EINVAL;
-+ }
-+
-+ x = plane->state->crtc_x;
-+ y = plane->state->crtc_y;
-+
-+ if (x <= -amdgpu_crtc->max_cursor_width ||
-+ y <= -amdgpu_crtc->max_cursor_height)
-+ return 0;
-+
-+ if (x < 0) {
-+ xorigin = min(-x, amdgpu_crtc->max_cursor_width - 1);
-+ x = 0;
-+ }
-+ if (y < 0) {
-+ yorigin = min(-y, amdgpu_crtc->max_cursor_height - 1);
-+ y = 0;
-+ }
-+ position->enable = true;
-+ position->translate_by_source = true;
-+ position->x = x;
-+ position->y = y;
-+ position->x_hotspot = xorigin;
-+ position->y_hotspot = yorigin;
-+
-+ return 0;
-+}
-+
-+static void amdgpu_dm_update_cursor(struct drm_plane *plane,
-+ struct drm_plane_state *old_plane_state,
-+ struct dc_stream_update *update)
-+{
-+ struct amdgpu_device *adev = drm_to_adev(plane->dev);
-+ struct amdgpu_framebuffer *afb = to_amdgpu_framebuffer(plane->state->fb);
-+ struct drm_crtc *crtc = afb ? plane->state->crtc : old_plane_state->crtc;
-+ struct dm_crtc_state *crtc_state = crtc ? to_dm_crtc_state(crtc->state) : NULL;
-+ struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-+ uint64_t address = afb ? afb->address : 0;
-+ struct dc_cursor_position position = {0};
-+ struct dc_cursor_attributes attributes;
-+ int ret;
-+
-+ if (!plane->state->fb && !old_plane_state->fb)
-+ return;
-+
-+ drm_dbg_atomic(plane->dev, "crtc_id=%d with size %d to %d\n",
-+ amdgpu_crtc->crtc_id, plane->state->crtc_w,
-+ plane->state->crtc_h);
-+
-+ ret = amdgpu_dm_plane_get_cursor_position(plane, crtc, &position);
-+ if (ret)
-+ return;
-+
-+ if (!position.enable) {
-+ /* turn off cursor */
-+ if (crtc_state && crtc_state->stream) {
-+ dc_stream_set_cursor_position(crtc_state->stream,
-+ &position);
-+ update->cursor_position = &crtc_state->stream->cursor_position;
-+ }
-+ return;
-+ }
-+
-+ amdgpu_crtc->cursor_width = plane->state->crtc_w;
-+ amdgpu_crtc->cursor_height = plane->state->crtc_h;
-+
-+ memset(&attributes, 0, sizeof(attributes));
-+ attributes.address.high_part = upper_32_bits(address);
-+ attributes.address.low_part = lower_32_bits(address);
-+ attributes.width = plane->state->crtc_w;
-+ attributes.height = plane->state->crtc_h;
-+ attributes.color_format = CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA;
-+ attributes.rotation_angle = 0;
-+ attributes.attribute_flags.value = 0;
-+
-+ /* Enable cursor degamma ROM on DCN3+ for implicit sRGB degamma in DRM
-+ * legacy gamma setup.
-+ */
-+ if (crtc_state->cm_is_degamma_srgb &&
-+ adev->dm.dc->caps.color.dpp.gamma_corr)
-+ attributes.attribute_flags.bits.ENABLE_CURSOR_DEGAMMA = 1;
-+
-+ attributes.pitch = afb->base.pitches[0] / afb->base.format->cpp[0];
-+
-+ if (crtc_state->stream) {
-+ if (!dc_stream_set_cursor_attributes(crtc_state->stream,
-+ &attributes))
-+ DRM_ERROR("DC failed to set cursor attributes\n");
-+
-+ update->cursor_attributes = &crtc_state->stream->cursor_attributes;
-+
-+ if (!dc_stream_set_cursor_position(crtc_state->stream,
-+ &position))
-+ DRM_ERROR("DC failed to set cursor position\n");
-+
-+ update->cursor_position = &crtc_state->stream->cursor_position;
-+ }
-+}
-+
- static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- struct drm_device *dev,
- struct amdgpu_display_manager *dm,
-@@ -8350,6 +8466,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- bool cursor_update = false;
- bool pflip_present = false;
- bool dirty_rects_changed = false;
-+ bool updated_planes_and_streams = false;
- struct {
- struct dc_surface_update surface_updates[MAX_SURFACES];
- struct dc_plane_info plane_infos[MAX_SURFACES];
-@@ -8386,8 +8503,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- /* Cursor plane is handled after stream updates */
- if (plane->type == DRM_PLANE_TYPE_CURSOR) {
- if ((fb && crtc == pcrtc) ||
-- (old_plane_state->fb && old_plane_state->crtc == pcrtc))
-+ (old_plane_state->fb && old_plane_state->crtc == pcrtc)) {
- cursor_update = true;
-+ amdgpu_dm_update_cursor(plane, old_plane_state, &bundle->stream_update);
-+ }
-
- continue;
- }
-@@ -8660,6 +8779,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- acrtc_state->stream,
- &bundle->stream_update,
- bundle->surface_updates);
-+ updated_planes_and_streams = true;
-
- /**
- * Enable or disable the interrupts on the backend.
-@@ -8737,7 +8857,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
- * This avoids redundant programming in the case where we're going
- * to be disabling a single plane - those pipes are being disabled.
- */
-- if (acrtc_state->active_planes)
-+ if (acrtc_state->active_planes && !updated_planes_and_streams)
- amdgpu_dm_commit_cursors(state);
-
- cleanup:
-@@ -8925,7 +9045,7 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
-
- memset(&position, 0, sizeof(position));
- mutex_lock(&dm->dc_lock);
-- dc_stream_set_cursor_position(dm_old_crtc_state->stream, &position);
-+ dc_stream_program_cursor_position(dm_old_crtc_state->stream, &position);
- mutex_unlock(&dm->dc_lock);
- }
-
-diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
-index 779880c64575..8c8d0d209d7a 100644
---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
-+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
-@@ -1254,7 +1254,7 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane,
- /* turn off cursor */
- if (crtc_state && crtc_state->stream) {
- mutex_lock(&adev->dm.dc_lock);
-- dc_stream_set_cursor_position(crtc_state->stream,
-+ dc_stream_program_cursor_position(crtc_state->stream,
- &position);
- mutex_unlock(&adev->dm.dc_lock);
- }
-@@ -1284,11 +1284,11 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane,
-
- if (crtc_state->stream) {
- mutex_lock(&adev->dm.dc_lock);
-- if (!dc_stream_set_cursor_attributes(crtc_state->stream,
-+ if (!dc_stream_program_cursor_attributes(crtc_state->stream,
- &attributes))
- DRM_ERROR("DC failed to set cursor attributes\n");
-
-- if (!dc_stream_set_cursor_position(crtc_state->stream,
-+ if (!dc_stream_program_cursor_position(crtc_state->stream,
- &position))
- DRM_ERROR("DC failed to set cursor position\n");
- mutex_unlock(&adev->dm.dc_lock);
-diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
-index d68c83e40d4d..575290784c61 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
-@@ -3188,6 +3188,83 @@ static bool update_planes_and_stream_state(struct dc *dc,
-
- }
-
-+static void program_cursor_attributes(
-+ struct dc *dc,
-+ struct dc_stream_state *stream)
-+{
-+ int i;
-+ struct resource_context *res_ctx;
-+ struct pipe_ctx *pipe_to_program = NULL;
-+
-+ if (!stream)
-+ return;
-+
-+ res_ctx = &dc->current_state->res_ctx;
-+
-+ for (i = 0; i < MAX_PIPES; i++) {
-+ struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i];
-+
-+ if (pipe_ctx->stream != stream)
-+ continue;
-+
-+ if (!pipe_to_program) {
-+ pipe_to_program = pipe_ctx;
-+ dc->hwss.cursor_lock(dc, pipe_to_program, true);
-+ if (pipe_to_program->next_odm_pipe)
-+ dc->hwss.cursor_lock(dc, pipe_to_program->next_odm_pipe, true);
-+ }
-+
-+ dc->hwss.set_cursor_attribute(pipe_ctx);
-+ if (dc->ctx->dmub_srv)
-+ dc_send_update_cursor_info_to_dmu(pipe_ctx, i);
-+ if (dc->hwss.set_cursor_sdr_white_level)
-+ dc->hwss.set_cursor_sdr_white_level(pipe_ctx);
-+ }
-+
-+ if (pipe_to_program) {
-+ dc->hwss.cursor_lock(dc, pipe_to_program, false);
-+ if (pipe_to_program->next_odm_pipe)
-+ dc->hwss.cursor_lock(dc, pipe_to_program->next_odm_pipe, false);
-+ }
-+}
-+
-+static void program_cursor_position(
-+ struct dc *dc,
-+ struct dc_stream_state *stream)
-+{
-+ int i;
-+ struct resource_context *res_ctx;
-+ struct pipe_ctx *pipe_to_program = NULL;
-+
-+ if (!stream)
-+ return;
-+
-+ res_ctx = &dc->current_state->res_ctx;
-+
-+ for (i = 0; i < MAX_PIPES; i++) {
-+ struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i];
-+
-+ if (pipe_ctx->stream != stream ||
-+ (!pipe_ctx->plane_res.mi && !pipe_ctx->plane_res.hubp) ||
-+ !pipe_ctx->plane_state ||
-+ (!pipe_ctx->plane_res.xfm && !pipe_ctx->plane_res.dpp) ||
-+ (!pipe_ctx->plane_res.ipp && !pipe_ctx->plane_res.dpp))
-+ continue;
-+
-+ if (!pipe_to_program) {
-+ pipe_to_program = pipe_ctx;
-+ dc->hwss.cursor_lock(dc, pipe_to_program, true);
-+ }
-+
-+ dc->hwss.set_cursor_position(pipe_ctx);
-+ if (dc->ctx->dmub_srv)
-+ dc_send_update_cursor_info_to_dmu(pipe_ctx, i);
-+ }
-+
-+ if (pipe_to_program)
-+ dc->hwss.cursor_lock(dc, pipe_to_program, false);
-+}
-+
- static void commit_planes_do_stream_update(struct dc *dc,
- struct dc_stream_state *stream,
- struct dc_stream_update *stream_update,
-@@ -3248,6 +3325,13 @@ static void commit_planes_do_stream_update(struct dc *dc,
- }
- }
-
-+ if (stream_update->cursor_attributes) {
-+ program_cursor_attributes(dc, stream);
-+ }
-+
-+ if (stream_update->cursor_position) {
-+ program_cursor_position(dc, stream);
-+ }
-
- /* Full fe update*/
- if (update_type == UPDATE_TYPE_FAST)
-diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-index 51a970fcb5d0..5601ee8a8d41 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-@@ -278,7 +278,6 @@ bool dc_stream_set_cursor_attributes(
- const struct dc_cursor_attributes *attributes)
- {
- struct dc *dc;
-- bool reset_idle_optimizations = false;
-
- if (NULL == stream) {
- dm_error("DC: dc_stream is NULL!\n");
-@@ -309,20 +308,36 @@ bool dc_stream_set_cursor_attributes(
-
- stream->cursor_attributes = *attributes;
-
-- dc_z10_restore(dc);
-- /* disable idle optimizations while updating cursor */
-- if (dc->idle_optimizations_allowed) {
-- dc_allow_idle_optimizations(dc, false);
-- reset_idle_optimizations = true;
-- }
-+ return true;
-+}
-
-- program_cursor_attributes(dc, stream, attributes);
-+bool dc_stream_program_cursor_attributes(
-+ struct dc_stream_state *stream,
-+ const struct dc_cursor_attributes *attributes)
-+{
-+ struct dc *dc;
-+ bool reset_idle_optimizations = false;
-
-- /* re-enable idle optimizations if necessary */
-- if (reset_idle_optimizations)
-- dc_allow_idle_optimizations(dc, true);
-+ dc = stream ? stream->ctx->dc : NULL;
-
-- return true;
-+ if (dc_stream_set_cursor_attributes(stream, attributes)) {
-+ dc_z10_restore(dc);
-+ /* disable idle optimizations while updating cursor */
-+ if (dc->idle_optimizations_allowed) {
-+ dc_allow_idle_optimizations(dc, false);
-+ reset_idle_optimizations = true;
-+ }
-+
-+ program_cursor_attributes(dc, stream, attributes);
-+
-+ /* re-enable idle optimizations if necessary */
-+ if (reset_idle_optimizations)
-+ dc_allow_idle_optimizations(dc, true);
-+
-+ return true;
-+ }
-+
-+ return false;
- }
-
- static void program_cursor_position(
-@@ -367,9 +382,6 @@ bool dc_stream_set_cursor_position(
- struct dc_stream_state *stream,
- const struct dc_cursor_position *position)
- {
-- struct dc *dc;
-- bool reset_idle_optimizations = false;
--
- if (NULL == stream) {
- dm_error("DC: dc_stream is NULL!\n");
- return false;
-@@ -380,24 +392,43 @@ bool dc_stream_set_cursor_position(
- return false;
- }
-
-+ stream->cursor_position = *position;
-+
-+ return true;
-+}
-+
-+bool dc_stream_program_cursor_position(
-+ struct dc_stream_state *stream,
-+ const struct dc_cursor_position *position)
-+{
-+ struct dc *dc;
-+ bool reset_idle_optimizations = false;
-+ const struct dc_cursor_position *old_position;
-+
-+ old_position = stream ? &stream->cursor_position : NULL;
- dc = stream->ctx->dc;
-- dc_z10_restore(dc);
-
-- /* disable idle optimizations if enabling cursor */
-- if (dc->idle_optimizations_allowed && (!stream->cursor_position.enable || dc->debug.exit_idle_opt_for_cursor_updates)
-- && position->enable) {
-- dc_allow_idle_optimizations(dc, false);
-- reset_idle_optimizations = true;
-- }
-+ if (dc_stream_set_cursor_position(stream, position)) {
-+ dc_z10_restore(dc);
-
-- stream->cursor_position = *position;
-+ /* disable idle optimizations if enabling cursor */
-+ if (dc->idle_optimizations_allowed &&
-+ (!old_position->enable || dc->debug.exit_idle_opt_for_cursor_updates) &&
-+ position->enable) {
-+ dc_allow_idle_optimizations(dc, false);
-+ reset_idle_optimizations = true;
-+ }
-
-- program_cursor_position(dc, stream, position);
-- /* re-enable idle optimizations if necessary */
-- if (reset_idle_optimizations)
-- dc_allow_idle_optimizations(dc, true);
-
-- return true;
-+ program_cursor_position(dc, stream, position);
-+ /* re-enable idle optimizations if necessary */
-+ if (reset_idle_optimizations)
-+ dc_allow_idle_optimizations(dc, true);
-+
-+ return true;
-+ }
-+
-+ return false;
- }
-
- bool dc_stream_add_writeback(struct dc *dc,
-diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h
-index ee10941caa59..df86668f560f 100644
---- a/drivers/gpu/drm/amd/display/dc/dc_stream.h
-+++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h
-@@ -327,6 +327,9 @@ struct dc_stream_update {
-
- struct test_pattern *pending_test_pattern;
- struct dc_crtc_timing_adjust *crtc_timing_adjust;
-+
-+ struct dc_cursor_attributes *cursor_attributes;
-+ struct dc_cursor_position *cursor_position;
- };
-
- bool dc_is_stream_unchanged(
-@@ -478,10 +481,17 @@ bool dc_stream_set_cursor_attributes(
- struct dc_stream_state *stream,
- const struct dc_cursor_attributes *attributes);
-
-+bool dc_stream_program_cursor_attributes(
-+ struct dc_stream_state *stream,
-+ const struct dc_cursor_attributes *attributes);
-+
- bool dc_stream_set_cursor_position(
- struct dc_stream_state *stream,
- const struct dc_cursor_position *position);
-
-+bool dc_stream_program_cursor_position(
-+ struct dc_stream_state *stream,
-+ const struct dc_cursor_position *position);
-
- bool dc_stream_adjust_vmin_vmax(struct dc *dc,
- struct dc_stream_state *stream,
-diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
-index 8bc3d01537bb..f91169c80f7f 100644
---- a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
-+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
-@@ -1042,7 +1042,7 @@ bool dcn30_apply_idle_power_optimizations(struct dc *dc, bool enable)
-
- /* Use copied cursor, and it's okay to not switch back */
- cursor_attr.address.quad_part = cmd.mall.cursor_copy_dst.quad_part;
-- dc_stream_set_cursor_attributes(stream, &cursor_attr);
-+ dc_stream_program_cursor_attributes(stream, &cursor_attr);
- }
-
- /* Enable MALL */
-diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
-index 1e020620748d..082f87834503 100644
---- a/fs/btrfs/extent_io.c
-+++ b/fs/btrfs/extent_io.c
-@@ -4269,6 +4269,13 @@ void set_extent_buffer_uptodate(struct extent_buffer *eb)
- }
- }
-
-+static void clear_extent_buffer_reading(struct extent_buffer *eb)
-+{
-+ clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
-+ smp_mb__after_atomic();
-+ wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
-+}
-+
- static void end_bbio_meta_read(struct btrfs_bio *bbio)
- {
- struct extent_buffer *eb = bbio->private;
-@@ -4277,6 +4284,13 @@ static void end_bbio_meta_read(struct btrfs_bio *bbio)
- struct folio_iter fi;
- u32 bio_offset = 0;
-
-+ /*
-+ * If the extent buffer is marked UPTODATE before the read operation
-+ * completes, other calls to read_extent_buffer_pages() will return
-+ * early without waiting for the read to finish, causing data races.
-+ */
-+ WARN_ON(test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags));
-+
- eb->read_mirror = bbio->mirror_num;
-
- if (uptodate &&
-@@ -4303,9 +4317,7 @@ static void end_bbio_meta_read(struct btrfs_bio *bbio)
- bio_offset += len;
- }
-
-- clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
-- smp_mb__after_atomic();
-- wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
-+ clear_extent_buffer_reading(eb);
- free_extent_buffer(eb);
-
- bio_put(&bbio->bio);
-@@ -4339,9 +4351,7 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
- * will now be set, and we shouldn't read it in again.
- */
- if (unlikely(test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags))) {
-- clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
-- smp_mb__after_atomic();
-- wake_up_bit(&eb->bflags, EXTENT_BUFFER_READING);
-+ clear_extent_buffer_reading(eb);
- return 0;
- }
-
-diff --git a/include/linux/filter.h b/include/linux/filter.h
-index cf12bfa2a78c..2acf8634008d 100644
---- a/include/linux/filter.h
-+++ b/include/linux/filter.h
-@@ -644,14 +644,16 @@ static __always_inline u32 __bpf_prog_run(const struct bpf_prog *prog,
- cant_migrate();
- if (static_branch_unlikely(&bpf_stats_enabled_key)) {
- struct bpf_prog_stats *stats;
-- u64 start = sched_clock();
-+ u64 duration, start = sched_clock();
- unsigned long flags;
-
- ret = dfunc(ctx, prog->insnsi, prog->bpf_func);
-+
-+ duration = sched_clock() - start;
- stats = this_cpu_ptr(prog->stats);
- flags = u64_stats_update_begin_irqsave(&stats->syncp);
- u64_stats_inc(&stats->cnt);
-- u64_stats_add(&stats->nsecs, sched_clock() - start);
-+ u64_stats_add(&stats->nsecs, duration);
- u64_stats_update_end_irqrestore(&stats->syncp, flags);
- } else {
- ret = dfunc(ctx, prog->insnsi, prog->bpf_func);
-diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
-index db7599c59c78..146de96e99b8 100644
---- a/kernel/bpf/trampoline.c
-+++ b/kernel/bpf/trampoline.c
-@@ -883,12 +883,13 @@ static void notrace update_prog_stats(struct bpf_prog *prog,
- * Hence check that 'start' is valid.
- */
- start > NO_START_TIME) {
-+ u64 duration = sched_clock() - start;
- unsigned long flags;
-
- stats = this_cpu_ptr(prog->stats);
- flags = u64_stats_update_begin_irqsave(&stats->syncp);
- u64_stats_inc(&stats->cnt);
-- u64_stats_add(&stats->nsecs, sched_clock() - start);
-+ u64_stats_add(&stats->nsecs, duration);
- u64_stats_update_end_irqrestore(&stats->syncp, flags);
- }
- }
---
-2.45.2
-
diff --git a/SOURCES/check-kabi b/SOURCES/check-kabi
index f9d4dcb..3809209 100755
--- a/SOURCES/check-kabi
+++ b/SOURCES/check-kabi
@@ -41,7 +41,8 @@ def load_symvers(symvers, filename):
break
if in_line == "\n":
continue
- checksum, symbol, directory, type = in_line.split()
+ checksum, symbol, directory, type, *ns = in_line.split()
+ ns = ns[0] if ns else None
symvers[symbol] = in_line[0:-1]
@@ -57,7 +58,8 @@ def load_kabi(kabi, filename):
break
if in_line == "\n":
continue
- checksum, symbol, directory, type = in_line.split()
+ checksum, symbol, directory, type, *ns = in_line.split()
+ ns = ns[0] if ns else None
kabi[symbol] = in_line[0:-1]
@@ -69,11 +71,14 @@ def check_kabi(symvers, kabi):
warn = 0
changed_symbols = []
moved_symbols = []
+ ns_symbols = []
for symbol in kabi:
- abi_hash, abi_sym, abi_dir, abi_type = kabi[symbol].split()
+ abi_hash, abi_sym, abi_dir, abi_type, *abi_ns = kabi[symbol].split()
+ abi_ns = abi_ns[0] if abi_ns else None
if symbol in symvers:
- sym_hash, sym_sym, sym_dir, sym_type = symvers[symbol].split()
+ sym_hash, sym_sym, sym_dir, sym_type, *sym_ns = symvers[symbol].split()
+ sym_ns = sym_ns[0] if sym_ns else None
if abi_hash != sym_hash:
fail = 1
changed_symbols.append(symbol)
@@ -81,6 +86,10 @@ def check_kabi(symvers, kabi):
if abi_dir != sym_dir:
warn = 1
moved_symbols.append(symbol)
+
+ if abi_ns != sym_ns:
+ warn = 1
+ ns_symbols.append(symbol)
else:
fail = 1
changed_symbols.append(symbol)
@@ -96,13 +105,21 @@ def check_kabi(symvers, kabi):
if warn:
print("*** WARNING - ABI SYMBOLS MOVED ***")
- print("")
- print("The following symbols moved (typically caused by moving a symbol from being")
- print("provided by the kernel vmlinux out to a loadable module):")
- print("")
- for symbol in moved_symbols:
- print(symbol)
- print("")
+ if moved_symbols:
+ print("")
+ print("The following symbols moved (typically caused by moving a symbol from being")
+ print("provided by the kernel vmlinux out to a loadable module):")
+ print("")
+ for symbol in moved_symbols:
+ print(symbol)
+ print("")
+ if ns_symbols:
+ print("")
+ print("The following symbols changed symbol namespaces:")
+ print("")
+ for symbol in ns_symbols:
+ print(symbol)
+ print("")
"""Halt the build, if we got errors and/or warnings. In either case,
double-checkig is required to avoid introducing / concealing
diff --git a/SOURCES/def_variants.yaml.fedora b/SOURCES/def_variants.yaml.fedora
index ecac2ae..ce3549b 100644
--- a/SOURCES/def_variants.yaml.fedora
+++ b/SOURCES/def_variants.yaml.fedora
@@ -137,6 +137,7 @@ rules:
- drivers/input/touchscreen/.*: modules
- drivers/input/.*: modules-core
- drivers/interconnect/.*: modules-core
+ - drivers/iommu/.*test.ko: modules-internal
- drivers/iommu/.*: modules-core
- drivers/irqchip/.*: modules-core
@@ -258,6 +259,7 @@ rules:
- drivers/pps/.*: modules-core
- drivers/ptp/ptp_kvm.*: modules-rt-kvm
if_variant_in: ["rt"]
+ - drivers/ptp/ptp_mock.*: modules-internal
- drivers/ptp/ptp_dfl_tod.*: modules
- drivers/ptp/.*: modules-core
- drivers/pwm/.*: modules-core
diff --git a/SOURCES/def_variants.yaml.rhel b/SOURCES/def_variants.yaml.rhel
index 5f64ee5..49acee7 100644
--- a/SOURCES/def_variants.yaml.rhel
+++ b/SOURCES/def_variants.yaml.rhel
@@ -137,6 +137,7 @@ rules:
- drivers/input/touchscreen/.*: modules
- drivers/input/.*: modules-core
- drivers/interconnect/.*: modules-core
+ - drivers/iommu/.*test.ko: modules-internal
- drivers/iommu/.*: modules-core
- drivers/irqchip/.*: modules-core
@@ -262,6 +263,7 @@ rules:
- drivers/pps/.*: modules-core
- drivers/ptp/ptp_kvm.*: modules-rt-kvm
if_variant_in: ["rt"]
+ - drivers/ptp/ptp_mock.*: modules-internal
- drivers/ptp/ptp_dfl_tod.*: modules
- drivers/ptp/.*: modules-core
- drivers/pwm/.*: modules-core
diff --git a/SOURCES/fedoraimaca.x509 b/SOURCES/fedoraimaca.x509
new file mode 100644
index 0000000..f75acb6
--- /dev/null
+++ b/SOURCES/fedoraimaca.x509
Binary files differ
diff --git a/SOURCES/filtermods.py b/SOURCES/filtermods.py
index 9d7e33d..fbfe56c 100755
--- a/SOURCES/filtermods.py
+++ b/SOURCES/filtermods.py
@@ -706,13 +706,10 @@ def sort_kmods(depmod_pathname: str, config_str: str, variants=[], do_pictures='
def abbrev_list_for_report(alist: list[KMod]) -> str:
tmp_str = []
- for kmod in alist[:2]:
+ for kmod in alist:
if kmod.allowed_list:
tmp_str.append('%s(%s)' % (kmod.name, ' '.join([x.name for x in kmod.allowed_list])))
ret = ', '.join(tmp_str)
- other_len = len(alist[2:])
- if other_len > 0:
- ret = ret + ' and %s other(s)' % (other_len)
return ret
diff --git a/SOURCES/kernel-aarch64-16k-debug-fedora.config b/SOURCES/kernel-aarch64-16k-debug-fedora.config
index f0ddf82..b46564f 100644
--- a/SOURCES/kernel-aarch64-16k-debug-fedora.config
+++ b/SOURCES/kernel-aarch64-16k-debug-fedora.config
@@ -116,6 +116,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -138,12 +139,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -155,6 +158,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -227,6 +231,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -270,6 +275,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
CONFIG_APPLE_ADMAC=m
@@ -361,6 +367,7 @@ CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
CONFIG_ARCH_R9A08G045=y
CONFIG_ARCH_R9A09G011=y
+CONFIG_ARCH_R9A09G057=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
@@ -429,6 +436,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -443,6 +452,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
# CONFIG_ARM64_PSEUDO_NMI is not set
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -502,6 +512,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_IMX_CPUFREQ_DT=m
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+CONFIG_ARM_MHU_V3=m
CONFIG_ARM_PL172_MPMC=m
CONFIG_ARM_PMUV3=y
CONFIG_ARM_PMU=y
@@ -540,6 +551,7 @@ CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
CONFIG_ARM_SMMU_QCOM=y
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -554,6 +566,7 @@ CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
CONFIG_ARM_TIMER_SP804=y
+CONFIG_ARM_TSTEE=m
CONFIG_ARMV8_DEPRECATED=y
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
@@ -591,6 +604,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
CONFIG_ATH11K_SPECTRAL=y
CONFIG_ATH11K_TRACING=y
+CONFIG_ATH12K_DEBUGFS=y
CONFIG_ATH12K_DEBUG=y
CONFIG_ATH12K=m
CONFIG_ATH12K_TRACING=y
@@ -717,6 +731,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -992,6 +1007,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1234,6 +1250,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+CONFIG_CLK_IMX95_BLK_CTL=m
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_CLK_PX30=y
@@ -1332,7 +1349,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1575,6 +1592,7 @@ CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y
CONFIG_CRYPTO_DEV_SUN8I_SS_HASH=y
CONFIG_CRYPTO_DEV_SUN8I_SS=m
CONFIG_CRYPTO_DEV_SUN8I_SS_PRNG=y
+CONFIG_CRYPTO_DEV_TEGRA=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
# CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set
@@ -1807,7 +1825,7 @@ CONFIG_DEFAULT_CUBIC=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
# CONFIG_DEFAULT_RENO is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
@@ -1961,6 +1979,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
@@ -2036,6 +2057,7 @@ CONFIG_DRM_MSM=m
# CONFIG_DRM_MSM_MDP4 is not set
CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -2077,6 +2099,7 @@ CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -2100,6 +2123,7 @@ CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -2107,6 +2131,7 @@ CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -2139,6 +2164,7 @@ CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANFROST=m
+CONFIG_DRM_PANTHOR=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
@@ -2200,8 +2226,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
# CONFIG_DS1682 is not set
@@ -2333,6 +2379,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+CONFIG_EC_ACER_ASPIRE1=m
CONFIG_ECHO=m
CONFIG_ECRYPT_FS=m
# CONFIG_ECRYPT_FS_MESSAGING is not set
@@ -2402,6 +2449,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2549,6 +2597,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2579,6 +2628,7 @@ CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
# CONFIG_FPGA_MGR_VERSAL_FPGA is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
@@ -2618,6 +2668,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=m
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2640,6 +2691,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTWDT010_WATCHDOG is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2974,6 +3026,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -3196,6 +3249,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -3384,6 +3438,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3543,8 +3598,8 @@ CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_IOMMU_DMA=y
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
CONFIG_IOMMU_IO_PGTABLE_DART=y
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3554,6 +3609,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
CONFIG_IP5XXX_POWER=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3851,8 +3907,8 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
# CONFIG_KASAN_EXTRA_INFO is not set
-CONFIG_KASAN_GENERIC=y
-# CONFIG_KASAN_HW_TAGS is not set
+# CONFIG_KASAN_GENERIC is not set
+CONFIG_KASAN_HW_TAGS=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
# CONFIG_KASAN_MODULE_TEST is not set
@@ -3955,6 +4011,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -4203,6 +4260,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -4332,6 +4390,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4446,7 +4505,7 @@ CONFIG_MFD_MAX77714=m
# CONFIG_MFD_PALMAS is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_PM8XXX is not set
-# CONFIG_MFD_QCOM_PM8008 is not set
+CONFIG_MFD_QCOM_PM8008=m
# CONFIG_MFD_QCOM_RPM is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RDC321X is not set
@@ -4524,6 +4583,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4937,7 +4997,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5804,6 +5863,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -5818,6 +5878,7 @@ CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_FSL_LYNX_28G=m
+CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY=m
CONFIG_PHY_HI3660_USB=m
# CONFIG_PHY_HI3670_PCIE is not set
CONFIG_PHY_HI3670_USB=m
@@ -5886,9 +5947,10 @@ CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=m
CONFIG_PHY_ROCKCHIP_PCIE=y
-# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set
+CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
+CONFIG_PHY_ROCKCHIP_USBDP=m
CONFIG_PHY_ROCKCHIP_USB=m
CONFIG_PHY_RTK_RTD_USB2PHY=m
CONFIG_PHY_RTK_RTD_USB3PHY=m
@@ -5979,6 +6041,7 @@ CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP=m
+CONFIG_PINCTRL_SCMI=m
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM670 is not set
CONFIG_PINCTRL_SDM845=m
@@ -6188,7 +6251,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
@@ -6227,6 +6290,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -6534,6 +6598,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
# CONFIG_REGULATOR_SY8824X is not set
@@ -6603,7 +6668,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -6792,6 +6856,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_SA1100 is not set
@@ -6843,6 +6908,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -6862,6 +6928,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -7129,6 +7196,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -7361,6 +7429,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XGENE=m
@@ -7408,7 +7477,8 @@ CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
CONFIG_SERIAL_EARLYCON_SEMIHOST=y
-# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_IMX_CONSOLE=y
@@ -7433,9 +7503,9 @@ CONFIG_SERIAL_QCOM_GENI=y
# CONFIG_SERIAL_RP2 is not set
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_SAMSUNG=y
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_DMA=y
@@ -7522,6 +7592,7 @@ CONFIG_SM_CAMCC_8250=m
# CONFIG_SM_CAMCC_8450 is not set
# CONFIG_SM_CAMCC_8550 is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_8250=m
@@ -7797,6 +7868,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7869,7 +7941,7 @@ CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_SOC_IMX_CARD=m
-# CONFIG_SND_SOC_IMX_ES8328 is not set
+CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_RPMSG=m
@@ -7998,11 +8070,13 @@ CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_SPI=m
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_QDSP6=m
# CONFIG_SND_SOC_RCAR is not set
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
+CONFIG_SND_SOC_RK3308=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_RK817=m
@@ -8264,6 +8338,7 @@ CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TEGRA_FLOWCTRL=y
CONFIG_SOC_TI=y
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -8575,6 +8650,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8740,6 +8816,7 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
CONFIG_TI_ICSSG_PRUETH=m
+CONFIG_TI_ICSSG_PRUETH_SR1=m
CONFIG_TI_ICSS_IEP=m
CONFIG_TI_K3_AM65_CPSW_NUSS=m
CONFIG_TI_K3_AM65_CPSW_SWITCHDEV=y
@@ -9305,6 +9382,7 @@ CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PCI=m
CONFIG_USB_OHCI_HCD_PLATFORM=m
# CONFIG_USB_OHCI_HCD_SSB is not set
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
CONFIG_USB_OTG_FSM=m
@@ -9538,6 +9616,7 @@ CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_BCM2835=m
+CONFIG_VIDEO_BCM2835_UNICAM=m
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT856=m
@@ -9633,7 +9712,7 @@ CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_MAX9286=m
-# CONFIG_VIDEO_MAX96712 is not set
+CONFIG_VIDEO_MAX96712=m
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
CONFIG_VIDEO_MESON_GE2D=m
CONFIG_VIDEO_MESON_VDEC=m
@@ -9741,7 +9820,7 @@ CONFIG_VIDEO_SUN8I_DEINTERLACE=m
CONFIG_VIDEO_SUN8I_ROTATE=m
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_VIDEO_SUNXI=y
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -9802,6 +9881,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-aarch64-16k-fedora.config b/SOURCES/kernel-aarch64-16k-fedora.config
index 4cecf2d..9fbc21c 100644
--- a/SOURCES/kernel-aarch64-16k-fedora.config
+++ b/SOURCES/kernel-aarch64-16k-fedora.config
@@ -116,6 +116,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -138,12 +139,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -155,6 +158,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -227,6 +231,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -270,6 +275,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
CONFIG_APPLE_ADMAC=m
@@ -361,6 +367,7 @@ CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
CONFIG_ARCH_R9A08G045=y
CONFIG_ARCH_R9A09G011=y
+CONFIG_ARCH_R9A09G057=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
@@ -429,6 +436,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -443,6 +452,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
# CONFIG_ARM64_PSEUDO_NMI is not set
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -502,6 +512,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_IMX_CPUFREQ_DT=m
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+CONFIG_ARM_MHU_V3=m
CONFIG_ARM_PL172_MPMC=m
CONFIG_ARM_PMUV3=y
CONFIG_ARM_PMU=y
@@ -540,6 +551,7 @@ CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
CONFIG_ARM_SMMU_QCOM=y
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -554,6 +566,7 @@ CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
CONFIG_ARM_TIMER_SP804=y
+CONFIG_ARM_TSTEE=m
CONFIG_ARMV8_DEPRECATED=y
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
@@ -591,6 +604,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
# CONFIG_ATH11K_SPECTRAL is not set
# CONFIG_ATH11K_TRACING is not set
+# CONFIG_ATH12K_DEBUGFS is not set
# CONFIG_ATH12K_DEBUG is not set
CONFIG_ATH12K=m
# CONFIG_ATH12K_TRACING is not set
@@ -717,6 +731,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -992,6 +1007,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1234,6 +1250,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+CONFIG_CLK_IMX95_BLK_CTL=m
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_CLK_PX30=y
@@ -1332,7 +1349,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1575,6 +1592,7 @@ CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y
CONFIG_CRYPTO_DEV_SUN8I_SS_HASH=y
CONFIG_CRYPTO_DEV_SUN8I_SS=m
CONFIG_CRYPTO_DEV_SUN8I_SS_PRNG=y
+CONFIG_CRYPTO_DEV_TEGRA=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
# CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set
@@ -1799,7 +1817,7 @@ CONFIG_DEFAULT_CUBIC=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
# CONFIG_DEFAULT_RENO is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
@@ -1952,6 +1970,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
@@ -2027,6 +2048,7 @@ CONFIG_DRM_MSM=m
# CONFIG_DRM_MSM_MDP4 is not set
CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -2068,6 +2090,7 @@ CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -2091,6 +2114,7 @@ CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -2098,6 +2122,7 @@ CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -2130,6 +2155,7 @@ CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANFROST=m
+CONFIG_DRM_PANTHOR=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
@@ -2191,8 +2217,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
# CONFIG_DS1682 is not set
@@ -2324,6 +2370,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+CONFIG_EC_ACER_ASPIRE1=m
CONFIG_ECHO=m
CONFIG_ECRYPT_FS=m
# CONFIG_ECRYPT_FS_MESSAGING is not set
@@ -2393,6 +2440,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2532,6 +2580,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2562,6 +2611,7 @@ CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
# CONFIG_FPGA_MGR_VERSAL_FPGA is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
@@ -2601,6 +2651,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=m
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2623,6 +2674,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTWDT010_WATCHDOG is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2957,6 +3009,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -3179,6 +3232,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -3367,6 +3421,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3537,6 +3592,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
CONFIG_IP5XXX_POWER=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3931,6 +3987,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -4179,6 +4236,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -4307,6 +4365,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4421,7 +4480,7 @@ CONFIG_MFD_MAX77714=m
# CONFIG_MFD_PALMAS is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_PM8XXX is not set
-# CONFIG_MFD_QCOM_PM8008 is not set
+CONFIG_MFD_QCOM_PM8008=m
# CONFIG_MFD_QCOM_RPM is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RDC321X is not set
@@ -4499,6 +4558,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4911,7 +4971,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5777,6 +5836,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_PER_VMA_LOCK_STATS is not set
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -5791,6 +5851,7 @@ CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_FSL_LYNX_28G=m
+CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY=m
CONFIG_PHY_HI3660_USB=m
# CONFIG_PHY_HI3670_PCIE is not set
CONFIG_PHY_HI3670_USB=m
@@ -5859,9 +5920,10 @@ CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=m
CONFIG_PHY_ROCKCHIP_PCIE=y
-# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set
+CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
+CONFIG_PHY_ROCKCHIP_USBDP=m
CONFIG_PHY_ROCKCHIP_USB=m
CONFIG_PHY_RTK_RTD_USB2PHY=m
CONFIG_PHY_RTK_RTD_USB3PHY=m
@@ -5952,6 +6014,7 @@ CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP=m
+CONFIG_PINCTRL_SCMI=m
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM670 is not set
CONFIG_PINCTRL_SDM845=m
@@ -6161,7 +6224,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
@@ -6200,6 +6263,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -6507,6 +6571,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
# CONFIG_REGULATOR_SY8824X is not set
@@ -6576,7 +6641,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -6765,6 +6829,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_SA1100 is not set
@@ -6816,6 +6881,7 @@ CONFIG_RTLLIB=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -6835,6 +6901,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -7102,6 +7169,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -7334,6 +7402,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XGENE=m
@@ -7381,7 +7450,8 @@ CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
CONFIG_SERIAL_EARLYCON_SEMIHOST=y
-# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_IMX_CONSOLE=y
@@ -7406,9 +7476,9 @@ CONFIG_SERIAL_QCOM_GENI=y
# CONFIG_SERIAL_RP2 is not set
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_SAMSUNG=y
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_DMA=y
@@ -7495,6 +7565,7 @@ CONFIG_SM_CAMCC_8250=m
# CONFIG_SM_CAMCC_8450 is not set
# CONFIG_SM_CAMCC_8550 is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_8250=m
@@ -7769,6 +7840,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7841,7 +7913,7 @@ CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_SOC_IMX_CARD=m
-# CONFIG_SND_SOC_IMX_ES8328 is not set
+CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_RPMSG=m
@@ -7970,11 +8042,13 @@ CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_SPI=m
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_QDSP6=m
# CONFIG_SND_SOC_RCAR is not set
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
+CONFIG_SND_SOC_RK3308=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_RK817=m
@@ -8235,6 +8309,7 @@ CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TEGRA_FLOWCTRL=y
CONFIG_SOC_TI=y
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -8546,6 +8621,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8711,6 +8787,7 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
CONFIG_TI_ICSSG_PRUETH=m
+CONFIG_TI_ICSSG_PRUETH_SR1=m
CONFIG_TI_ICSS_IEP=m
CONFIG_TI_K3_AM65_CPSW_NUSS=m
CONFIG_TI_K3_AM65_CPSW_SWITCHDEV=y
@@ -9276,6 +9353,7 @@ CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PCI=m
CONFIG_USB_OHCI_HCD_PLATFORM=m
# CONFIG_USB_OHCI_HCD_SSB is not set
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
CONFIG_USB_OTG_FSM=m
@@ -9509,6 +9587,7 @@ CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_BCM2835=m
+CONFIG_VIDEO_BCM2835_UNICAM=m
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT856=m
@@ -9604,7 +9683,7 @@ CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_MAX9286=m
-# CONFIG_VIDEO_MAX96712 is not set
+CONFIG_VIDEO_MAX96712=m
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
CONFIG_VIDEO_MESON_GE2D=m
CONFIG_VIDEO_MESON_VDEC=m
@@ -9712,7 +9791,7 @@ CONFIG_VIDEO_SUN8I_DEINTERLACE=m
CONFIG_VIDEO_SUN8I_ROTATE=m
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_VIDEO_SUNXI=y
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -9773,6 +9852,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-aarch64-64k-debug-rhel.config b/SOURCES/kernel-aarch64-64k-debug-rhel.config
index ddeb98f..4060a6b 100644
--- a/SOURCES/kernel-aarch64-64k-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-64k-debug-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -350,6 +363,7 @@ CONFIG_ARM64_MTE=y
# CONFIG_ARM64_PA_BITS_48 is not set
CONFIG_ARM64_PA_BITS_52=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -383,6 +397,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -408,6 +423,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -418,6 +434,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -525,6 +542,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -582,7 +600,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -743,6 +761,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -943,6 +962,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -996,7 +1016,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1079,6 +1099,8 @@ CONFIG_CPU_THERMAL=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1189,6 +1211,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1409,7 +1432,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1432,7 +1455,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1543,6 +1566,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1629,6 +1655,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1652,6 +1679,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1659,6 +1687,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1690,6 +1719,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1734,6 +1764,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1859,6 +1890,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2098,6 +2130,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2119,6 +2152,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2215,6 +2249,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2426,6 +2461,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2621,6 +2657,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2643,7 +2680,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2758,7 +2795,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2773,7 +2809,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2918,8 +2954,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3173,6 +3209,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3180,8 +3217,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3247,6 +3284,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3362,6 +3400,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3472,6 +3512,7 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_MAILBOX_TEST=m
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3578,10 +3619,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3742,6 +3785,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3946,6 +3990,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4063,7 +4108,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4375,7 +4419,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4796,6 +4840,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4814,6 +4859,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4895,6 +4941,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5043,7 +5090,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5068,9 +5115,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5125,7 +5173,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5317,7 +5365,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5466,6 +5513,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5509,6 +5557,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5528,6 +5577,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5733,6 +5783,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5815,6 +5866,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -5967,6 +6019,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -6024,6 +6077,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6093,6 +6147,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6208,7 +6263,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6218,6 +6272,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6287,6 +6342,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6311,6 +6367,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6507,6 +6564,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6740,6 +6798,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6959,6 +7018,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7498,6 +7558,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7766,6 +7827,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7905,6 +7967,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7934,7 +7997,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -8010,6 +8074,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-aarch64-64k-rhel.config b/SOURCES/kernel-aarch64-64k-rhel.config
index 0cc790e..058a619 100644
--- a/SOURCES/kernel-aarch64-64k-rhel.config
+++ b/SOURCES/kernel-aarch64-64k-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -350,6 +363,7 @@ CONFIG_ARM64_MTE=y
# CONFIG_ARM64_PA_BITS_48 is not set
CONFIG_ARM64_PA_BITS_52=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -383,6 +397,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -408,6 +423,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -418,6 +434,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -525,6 +542,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -582,7 +600,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -743,6 +761,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -943,6 +962,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -996,7 +1016,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1079,6 +1099,8 @@ CONFIG_CPU_THERMAL=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1189,6 +1211,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1401,7 +1424,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1424,7 +1447,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1535,6 +1558,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1621,6 +1647,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1644,6 +1671,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1651,6 +1679,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1682,6 +1711,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1726,6 +1756,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1851,6 +1882,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2082,6 +2114,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2103,6 +2136,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2199,6 +2233,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2410,6 +2445,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2605,6 +2641,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2627,7 +2664,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2742,7 +2779,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2757,7 +2793,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -3152,6 +3188,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3159,8 +3196,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3226,6 +3263,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3341,6 +3379,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3451,6 +3491,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3557,10 +3598,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3721,6 +3764,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3925,6 +3969,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4042,7 +4087,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4354,7 +4398,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4773,6 +4817,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4791,6 +4836,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4872,6 +4918,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5020,7 +5067,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5045,9 +5092,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5102,7 +5150,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5294,7 +5342,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5443,6 +5490,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5486,6 +5534,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5505,6 +5554,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5710,6 +5760,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5792,6 +5843,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -5944,6 +5996,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -6001,6 +6054,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6070,6 +6124,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6185,7 +6240,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6195,6 +6249,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6263,6 +6318,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6287,6 +6343,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6483,6 +6540,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6715,6 +6773,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6934,6 +6993,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7473,6 +7533,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7741,6 +7802,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7880,6 +7942,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7909,7 +7972,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7985,6 +8049,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-aarch64-debug-fedora.config b/SOURCES/kernel-aarch64-debug-fedora.config
index f49eb59..30d1b95 100644
--- a/SOURCES/kernel-aarch64-debug-fedora.config
+++ b/SOURCES/kernel-aarch64-debug-fedora.config
@@ -116,6 +116,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -138,12 +139,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -155,6 +158,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -227,6 +231,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -270,6 +275,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
CONFIG_APPLE_ADMAC=m
@@ -361,6 +367,7 @@ CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
CONFIG_ARCH_R9A08G045=y
CONFIG_ARCH_R9A09G011=y
+CONFIG_ARCH_R9A09G057=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
@@ -429,6 +436,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -443,6 +452,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
# CONFIG_ARM64_PSEUDO_NMI is not set
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -502,6 +512,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_IMX_CPUFREQ_DT=m
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+CONFIG_ARM_MHU_V3=m
CONFIG_ARM_PL172_MPMC=m
CONFIG_ARM_PMUV3=y
CONFIG_ARM_PMU=y
@@ -540,6 +551,7 @@ CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
CONFIG_ARM_SMMU_QCOM=y
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -554,6 +566,7 @@ CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
CONFIG_ARM_TIMER_SP804=y
+CONFIG_ARM_TSTEE=m
CONFIG_ARMV8_DEPRECATED=y
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
@@ -591,6 +604,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
CONFIG_ATH11K_SPECTRAL=y
CONFIG_ATH11K_TRACING=y
+CONFIG_ATH12K_DEBUGFS=y
CONFIG_ATH12K_DEBUG=y
CONFIG_ATH12K=m
CONFIG_ATH12K_TRACING=y
@@ -717,6 +731,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -992,6 +1007,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1234,6 +1250,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+CONFIG_CLK_IMX95_BLK_CTL=m
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_CLK_PX30=y
@@ -1332,7 +1349,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1575,6 +1592,7 @@ CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y
CONFIG_CRYPTO_DEV_SUN8I_SS_HASH=y
CONFIG_CRYPTO_DEV_SUN8I_SS=m
CONFIG_CRYPTO_DEV_SUN8I_SS_PRNG=y
+CONFIG_CRYPTO_DEV_TEGRA=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
# CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set
@@ -1807,7 +1825,7 @@ CONFIG_DEFAULT_CUBIC=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
# CONFIG_DEFAULT_RENO is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
@@ -1961,6 +1979,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
@@ -2036,6 +2057,7 @@ CONFIG_DRM_MSM=m
# CONFIG_DRM_MSM_MDP4 is not set
CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -2077,6 +2099,7 @@ CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -2100,6 +2123,7 @@ CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -2107,6 +2131,7 @@ CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -2139,6 +2164,7 @@ CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANFROST=m
+CONFIG_DRM_PANTHOR=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
@@ -2200,8 +2226,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
# CONFIG_DS1682 is not set
@@ -2333,6 +2379,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+CONFIG_EC_ACER_ASPIRE1=m
CONFIG_ECHO=m
CONFIG_ECRYPT_FS=m
# CONFIG_ECRYPT_FS_MESSAGING is not set
@@ -2402,6 +2449,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2549,6 +2597,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2579,6 +2628,7 @@ CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
# CONFIG_FPGA_MGR_VERSAL_FPGA is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
@@ -2618,6 +2668,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=m
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2640,6 +2691,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTWDT010_WATCHDOG is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2974,6 +3026,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -3196,6 +3249,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -3384,6 +3438,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3543,8 +3598,8 @@ CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
CONFIG_IOMMU_DMA=y
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
CONFIG_IOMMU_IO_PGTABLE_DART=y
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3554,6 +3609,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
CONFIG_IP5XXX_POWER=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3851,8 +3907,8 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS=y
# CONFIG_KARMA_PARTITION is not set
# CONFIG_KASAN_EXTRA_INFO is not set
-CONFIG_KASAN_GENERIC=y
-# CONFIG_KASAN_HW_TAGS is not set
+# CONFIG_KASAN_GENERIC is not set
+CONFIG_KASAN_HW_TAGS=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_KUNIT_TEST=m
# CONFIG_KASAN_MODULE_TEST is not set
@@ -3955,6 +4011,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -4203,6 +4260,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -4332,6 +4390,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4446,7 +4505,7 @@ CONFIG_MFD_MAX77714=m
# CONFIG_MFD_PALMAS is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_PM8XXX is not set
-# CONFIG_MFD_QCOM_PM8008 is not set
+CONFIG_MFD_QCOM_PM8008=m
# CONFIG_MFD_QCOM_RPM is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RDC321X is not set
@@ -4524,6 +4583,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4937,7 +4997,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5803,6 +5862,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -5817,6 +5877,7 @@ CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_FSL_LYNX_28G=m
+CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY=m
CONFIG_PHY_HI3660_USB=m
# CONFIG_PHY_HI3670_PCIE is not set
CONFIG_PHY_HI3670_USB=m
@@ -5885,9 +5946,10 @@ CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=m
CONFIG_PHY_ROCKCHIP_PCIE=y
-# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set
+CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
+CONFIG_PHY_ROCKCHIP_USBDP=m
CONFIG_PHY_ROCKCHIP_USB=m
CONFIG_PHY_RTK_RTD_USB2PHY=m
CONFIG_PHY_RTK_RTD_USB3PHY=m
@@ -5978,6 +6040,7 @@ CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP=m
+CONFIG_PINCTRL_SCMI=m
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM670 is not set
CONFIG_PINCTRL_SDM845=m
@@ -6187,7 +6250,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
@@ -6226,6 +6289,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -6533,6 +6597,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
# CONFIG_REGULATOR_SY8824X is not set
@@ -6602,7 +6667,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -6791,6 +6855,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_SA1100 is not set
@@ -6842,6 +6907,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -6861,6 +6927,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -7128,6 +7195,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -7360,6 +7428,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XGENE=m
@@ -7407,7 +7476,8 @@ CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
CONFIG_SERIAL_EARLYCON_SEMIHOST=y
-# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_IMX_CONSOLE=y
@@ -7432,9 +7502,9 @@ CONFIG_SERIAL_QCOM_GENI=y
# CONFIG_SERIAL_RP2 is not set
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_SAMSUNG=y
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_DMA=y
@@ -7521,6 +7591,7 @@ CONFIG_SM_CAMCC_8250=m
# CONFIG_SM_CAMCC_8450 is not set
# CONFIG_SM_CAMCC_8550 is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_8250=m
@@ -7796,6 +7867,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7868,7 +7940,7 @@ CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_SOC_IMX_CARD=m
-# CONFIG_SND_SOC_IMX_ES8328 is not set
+CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_RPMSG=m
@@ -7997,11 +8069,13 @@ CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_SPI=m
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_QDSP6=m
# CONFIG_SND_SOC_RCAR is not set
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
+CONFIG_SND_SOC_RK3308=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_RK817=m
@@ -8263,6 +8337,7 @@ CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TEGRA_FLOWCTRL=y
CONFIG_SOC_TI=y
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -8574,6 +8649,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8739,6 +8815,7 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
CONFIG_TI_ICSSG_PRUETH=m
+CONFIG_TI_ICSSG_PRUETH_SR1=m
CONFIG_TI_ICSS_IEP=m
CONFIG_TI_K3_AM65_CPSW_NUSS=m
CONFIG_TI_K3_AM65_CPSW_SWITCHDEV=y
@@ -9304,6 +9381,7 @@ CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PCI=m
CONFIG_USB_OHCI_HCD_PLATFORM=m
# CONFIG_USB_OHCI_HCD_SSB is not set
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
CONFIG_USB_OTG_FSM=m
@@ -9537,6 +9615,7 @@ CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_BCM2835=m
+CONFIG_VIDEO_BCM2835_UNICAM=m
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT856=m
@@ -9632,7 +9711,7 @@ CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_MAX9286=m
-# CONFIG_VIDEO_MAX96712 is not set
+CONFIG_VIDEO_MAX96712=m
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
CONFIG_VIDEO_MESON_GE2D=m
CONFIG_VIDEO_MESON_VDEC=m
@@ -9740,7 +9819,7 @@ CONFIG_VIDEO_SUN8I_DEINTERLACE=m
CONFIG_VIDEO_SUN8I_ROTATE=m
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_VIDEO_SUNXI=y
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -9801,6 +9880,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-aarch64-debug-rhel.config b/SOURCES/kernel-aarch64-debug-rhel.config
index eb6b6dc..c5845c6 100644
--- a/SOURCES/kernel-aarch64-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-debug-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -349,6 +362,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -381,6 +395,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -406,6 +421,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -416,6 +432,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -523,6 +540,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -580,7 +598,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -741,6 +759,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -941,6 +960,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -994,7 +1014,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1077,6 +1097,8 @@ CONFIG_CPU_THERMAL=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1187,6 +1209,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1407,7 +1430,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1430,7 +1453,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1541,6 +1564,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1627,6 +1653,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1650,6 +1677,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1657,6 +1685,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1688,6 +1717,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1732,6 +1762,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1857,6 +1888,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2095,6 +2127,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2116,6 +2149,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2212,6 +2246,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2423,6 +2458,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2618,6 +2654,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2640,7 +2677,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2755,7 +2792,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2770,7 +2806,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2915,8 +2951,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3170,6 +3206,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3177,8 +3214,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3244,6 +3281,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3359,6 +3397,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3469,6 +3509,7 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_MAILBOX_TEST=m
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3575,10 +3616,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3739,6 +3782,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3943,6 +3987,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4060,7 +4105,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4372,7 +4416,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4792,6 +4836,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4810,6 +4855,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4891,6 +4937,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5039,7 +5086,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5064,9 +5111,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5121,7 +5169,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5313,7 +5361,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5462,6 +5509,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5505,6 +5553,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5524,6 +5573,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5729,6 +5779,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5811,6 +5862,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -5963,6 +6015,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -6020,6 +6073,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6089,6 +6143,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6204,7 +6259,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6214,6 +6268,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6283,6 +6338,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6307,6 +6363,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6503,6 +6560,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6736,6 +6794,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6955,6 +7014,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7494,6 +7554,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7762,6 +7823,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7901,6 +7963,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7930,7 +7993,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -8006,6 +8070,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-aarch64-fedora.config b/SOURCES/kernel-aarch64-fedora.config
index 1b3084e..c05da35 100644
--- a/SOURCES/kernel-aarch64-fedora.config
+++ b/SOURCES/kernel-aarch64-fedora.config
@@ -116,6 +116,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -138,12 +139,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -155,6 +158,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -227,6 +231,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -270,6 +275,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
CONFIG_APDS9960=m
CONFIG_APPLE_ADMAC=m
@@ -361,6 +367,7 @@ CONFIG_ARCH_R9A07G044=y
CONFIG_ARCH_R9A07G054=y
CONFIG_ARCH_R9A08G045=y
CONFIG_ARCH_R9A09G011=y
+CONFIG_ARCH_R9A09G057=y
CONFIG_ARCH_RANDOM=y
# CONFIG_ARCH_RDA is not set
# CONFIG_ARCH_REALTEK is not set
@@ -429,6 +436,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -443,6 +452,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
# CONFIG_ARM64_PSEUDO_NMI is not set
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -502,6 +512,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
CONFIG_ARM_IMX_CPUFREQ_DT=m
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+CONFIG_ARM_MHU_V3=m
CONFIG_ARM_PL172_MPMC=m
CONFIG_ARM_PMUV3=y
CONFIG_ARM_PMU=y
@@ -540,6 +551,7 @@ CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
CONFIG_ARM_SMMU_QCOM=y
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -554,6 +566,7 @@ CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
CONFIG_ARM_TIMER_SP804=y
+CONFIG_ARM_TSTEE=m
CONFIG_ARMV8_DEPRECATED=y
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
@@ -591,6 +604,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
# CONFIG_ATH11K_SPECTRAL is not set
# CONFIG_ATH11K_TRACING is not set
+# CONFIG_ATH12K_DEBUGFS is not set
# CONFIG_ATH12K_DEBUG is not set
CONFIG_ATH12K=m
# CONFIG_ATH12K_TRACING is not set
@@ -717,6 +731,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -992,6 +1007,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1234,6 +1250,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+CONFIG_CLK_IMX95_BLK_CTL=m
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
CONFIG_CLK_PX30=y
@@ -1332,7 +1349,7 @@ CONFIG_COMMON_CLK_ROCKCHIP=y
CONFIG_COMMON_CLK_RS9_PCIE=m
CONFIG_COMMON_CLK_S4_PERIPHERALS=y
CONFIG_COMMON_CLK_S4_PLL=y
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
CONFIG_COMMON_CLK_SI521XX=y
@@ -1575,6 +1592,7 @@ CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y
CONFIG_CRYPTO_DEV_SUN8I_SS_HASH=y
CONFIG_CRYPTO_DEV_SUN8I_SS=m
CONFIG_CRYPTO_DEV_SUN8I_SS_PRNG=y
+CONFIG_CRYPTO_DEV_TEGRA=m
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_ZYNQMP_AES=m
# CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set
@@ -1799,7 +1817,7 @@ CONFIG_DEFAULT_CUBIC=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
# CONFIG_DEFAULT_RENO is not set
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
@@ -1952,6 +1970,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
@@ -2027,6 +2048,7 @@ CONFIG_DRM_MSM=m
# CONFIG_DRM_MSM_MDP4 is not set
CONFIG_DRM_MSM_MDP5=y
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -2068,6 +2090,7 @@ CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -2091,6 +2114,7 @@ CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -2098,6 +2122,7 @@ CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -2130,6 +2155,7 @@ CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANFROST=m
+CONFIG_DRM_PANTHOR=m
CONFIG_DRM_PARADE_PS8622=m
CONFIG_DRM_PARADE_PS8640=m
CONFIG_DRM_PL111=m
@@ -2191,8 +2217,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
CONFIG_DRM_ZYNQMP_DPSUB=m
# CONFIG_DS1682 is not set
@@ -2324,6 +2370,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+CONFIG_EC_ACER_ASPIRE1=m
CONFIG_ECHO=m
CONFIG_ECRYPT_FS=m
# CONFIG_ECRYPT_FS_MESSAGING is not set
@@ -2393,6 +2440,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2532,6 +2580,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2562,6 +2611,7 @@ CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
# CONFIG_FPGA_MGR_VERSAL_FPGA is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_MGR_ZYNQMP_FPGA=m
@@ -2601,6 +2651,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=m
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2623,6 +2674,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTWDT010_WATCHDOG is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2957,6 +3009,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -3179,6 +3232,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -3367,6 +3421,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3537,6 +3592,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
CONFIG_IP5XXX_POWER=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3931,6 +3987,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -4179,6 +4236,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -4307,6 +4365,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4421,7 +4480,7 @@ CONFIG_MFD_MAX77714=m
# CONFIG_MFD_PALMAS is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_PM8XXX is not set
-# CONFIG_MFD_QCOM_PM8008 is not set
+CONFIG_MFD_QCOM_PM8008=m
# CONFIG_MFD_QCOM_RPM is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RDC321X is not set
@@ -4499,6 +4558,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4911,7 +4971,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5776,6 +5835,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_PER_VMA_LOCK_STATS is not set
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -5790,6 +5850,7 @@ CONFIG_PHY_CAN_TRANSCEIVER=m
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
CONFIG_PHY_FSL_LYNX_28G=m
+CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY=m
CONFIG_PHY_HI3660_USB=m
# CONFIG_PHY_HI3670_PCIE is not set
CONFIG_PHY_HI3670_USB=m
@@ -5858,9 +5919,10 @@ CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
CONFIG_PHY_ROCKCHIP_INNO_USB2=m
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=m
CONFIG_PHY_ROCKCHIP_PCIE=y
-# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set
+CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX=m
CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=m
CONFIG_PHY_ROCKCHIP_TYPEC=m
+CONFIG_PHY_ROCKCHIP_USBDP=m
CONFIG_PHY_ROCKCHIP_USB=m
CONFIG_PHY_RTK_RTD_USB2PHY=m
CONFIG_PHY_RTK_RTD_USB3PHY=m
@@ -5951,6 +6013,7 @@ CONFIG_PINCTRL_SC7280=m
CONFIG_PINCTRL_SC8180X=m
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
CONFIG_PINCTRL_SC8280XP=m
+CONFIG_PINCTRL_SCMI=m
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM670 is not set
CONFIG_PINCTRL_SDM845=m
@@ -6160,7 +6223,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_QORIQ=m
@@ -6199,6 +6262,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=y
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -6506,6 +6570,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
CONFIG_REGULATOR_SY8106A=m
# CONFIG_REGULATOR_SY8824X is not set
@@ -6575,7 +6640,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -6764,6 +6828,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
CONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_SA1100 is not set
@@ -6815,6 +6880,7 @@ CONFIG_RTLLIB=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -6834,6 +6900,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -7101,6 +7168,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -7333,6 +7401,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
CONFIG_SENSORS_XGENE=m
@@ -7380,7 +7449,8 @@ CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
CONFIG_SERIAL_EARLYCON_SEMIHOST=y
-# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_IMX_CONSOLE=y
@@ -7405,9 +7475,9 @@ CONFIG_SERIAL_QCOM_GENI=y
# CONFIG_SERIAL_RP2 is not set
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_SAMSUNG=y
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_SH_SCI_CONSOLE=y
CONFIG_SERIAL_SH_SCI_DMA=y
@@ -7494,6 +7564,7 @@ CONFIG_SM_CAMCC_8250=m
# CONFIG_SM_CAMCC_8450 is not set
# CONFIG_SM_CAMCC_8550 is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
CONFIG_SM_DISPCC_6115=m
CONFIG_SM_DISPCC_8250=m
@@ -7768,6 +7839,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7840,7 +7912,7 @@ CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMIX=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_SOC_IMX_CARD=m
-# CONFIG_SND_SOC_IMX_ES8328 is not set
+CONFIG_SND_SOC_IMX_ES8328=m
CONFIG_SND_SOC_IMX_HDMI=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_RPMSG=m
@@ -7969,11 +8041,13 @@ CONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_SPI=m
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
CONFIG_SND_SOC_QCOM=m
CONFIG_SND_SOC_QDSP6=m
# CONFIG_SND_SOC_RCAR is not set
CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m
+CONFIG_SND_SOC_RK3308=m
CONFIG_SND_SOC_RK3328=m
CONFIG_SND_SOC_RK3399_GRU_SOUND=m
CONFIG_SND_SOC_RK817=m
@@ -8234,6 +8308,7 @@ CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TEGRA_FLOWCTRL=y
CONFIG_SOC_TI=y
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -8545,6 +8620,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS_SYNQUACER=m
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8710,6 +8786,7 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m
CONFIG_TI_ICSSG_PRUETH=m
+CONFIG_TI_ICSSG_PRUETH_SR1=m
CONFIG_TI_ICSS_IEP=m
CONFIG_TI_K3_AM65_CPSW_NUSS=m
CONFIG_TI_K3_AM65_CPSW_SWITCHDEV=y
@@ -9275,6 +9352,7 @@ CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_HCD_PCI=m
CONFIG_USB_OHCI_HCD_PLATFORM=m
# CONFIG_USB_OHCI_HCD_SSB is not set
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
CONFIG_USB_OTG_FSM=m
@@ -9508,6 +9586,7 @@ CONFIG_VIDEO_AU0828=m
# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_BCM2835=m
+CONFIG_VIDEO_BCM2835_UNICAM=m
CONFIG_VIDEO_BT819=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_BT856=m
@@ -9603,7 +9682,7 @@ CONFIG_VIDEO_LM3560=m
CONFIG_VIDEO_LM3646=m
CONFIG_VIDEO_M52790=m
CONFIG_VIDEO_MAX9286=m
-# CONFIG_VIDEO_MAX96712 is not set
+CONFIG_VIDEO_MAX96712=m
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
CONFIG_VIDEO_MESON_GE2D=m
CONFIG_VIDEO_MESON_VDEC=m
@@ -9711,7 +9790,7 @@ CONFIG_VIDEO_SUN8I_DEINTERLACE=m
CONFIG_VIDEO_SUN8I_ROTATE=m
CONFIG_VIDEO_SUNXI_CEDRUS=m
CONFIG_VIDEO_SUNXI=y
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -9772,6 +9851,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-aarch64-rhel.config b/SOURCES/kernel-aarch64-rhel.config
index 9f3f340..8277598 100644
--- a/SOURCES/kernel-aarch64-rhel.config
+++ b/SOURCES/kernel-aarch64-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -349,6 +362,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -381,6 +395,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -406,6 +421,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -416,6 +432,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -523,6 +540,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -580,7 +598,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -741,6 +759,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -941,6 +960,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -994,7 +1014,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1077,6 +1097,8 @@ CONFIG_CPU_THERMAL=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1187,6 +1209,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1399,7 +1422,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1422,7 +1445,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1533,6 +1556,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1619,6 +1645,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1642,6 +1669,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1649,6 +1677,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1680,6 +1709,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1724,6 +1754,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1849,6 +1880,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2079,6 +2111,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2100,6 +2133,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2196,6 +2230,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2407,6 +2442,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2602,6 +2638,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2624,7 +2661,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2739,7 +2776,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2754,7 +2790,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -3149,6 +3185,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3156,8 +3193,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3223,6 +3260,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3338,6 +3376,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3448,6 +3488,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3554,10 +3595,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3718,6 +3761,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3922,6 +3966,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4039,7 +4084,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4351,7 +4395,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4769,6 +4813,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4787,6 +4832,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4868,6 +4914,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5016,7 +5063,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5041,9 +5088,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5098,7 +5146,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5290,7 +5338,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5439,6 +5486,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5482,6 +5530,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5501,6 +5550,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5706,6 +5756,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5788,6 +5839,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -5940,6 +5992,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -5997,6 +6050,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6066,6 +6120,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6181,7 +6236,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6191,6 +6245,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6259,6 +6314,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6283,6 +6339,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6479,6 +6536,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6711,6 +6769,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6930,6 +6989,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7469,6 +7529,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7737,6 +7798,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7876,6 +7938,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7905,7 +7968,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7981,6 +8045,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-aarch64-rt-debug-rhel.config b/SOURCES/kernel-aarch64-rt-debug-rhel.config
index a1ca877..cb2f7f9 100644
--- a/SOURCES/kernel-aarch64-rt-debug-rhel.config
+++ b/SOURCES/kernel-aarch64-rt-debug-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -349,6 +362,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -381,6 +395,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -406,6 +421,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -416,6 +432,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -523,6 +540,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -580,7 +598,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -741,6 +759,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -941,6 +960,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -994,7 +1014,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1078,6 +1098,8 @@ CONFIG_CRAMFS_BLOCKDEV=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1188,6 +1210,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1409,7 +1432,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1432,7 +1455,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1543,6 +1566,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1629,6 +1655,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1652,6 +1679,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1659,6 +1687,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1690,6 +1719,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1734,6 +1764,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1895,6 +1926,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2133,6 +2165,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2154,6 +2187,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2251,6 +2285,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2463,6 +2498,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2658,6 +2694,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2680,7 +2717,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2795,7 +2832,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2810,7 +2846,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2955,8 +2991,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3210,6 +3246,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3217,8 +3254,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3284,6 +3321,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3399,6 +3437,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3509,6 +3549,7 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_MAILBOX_TEST=m
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3620,10 +3661,12 @@ CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
# CONFIG_MEDIA_TUNER_TDA18250 is not set
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3784,6 +3827,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3988,6 +4032,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4105,7 +4150,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4417,7 +4461,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4837,6 +4881,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4855,6 +4900,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4936,6 +4982,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5088,7 +5135,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5113,9 +5160,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5170,7 +5218,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5365,7 +5413,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5514,6 +5561,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5557,6 +5605,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5576,6 +5625,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5781,6 +5831,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5863,6 +5914,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -6015,6 +6067,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -6072,6 +6125,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6142,6 +6196,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6257,7 +6312,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
CONFIG_SND_JACK_INJECTION_DEBUG=y
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6267,6 +6321,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6336,6 +6391,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6360,6 +6416,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6556,6 +6613,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6789,6 +6847,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -7008,6 +7067,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7548,6 +7608,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7816,6 +7877,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7955,6 +8017,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7984,7 +8047,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -8061,6 +8125,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-aarch64-rt-rhel.config b/SOURCES/kernel-aarch64-rt-rhel.config
index 7eccd43..378957a 100644
--- a/SOURCES/kernel-aarch64-rt-rhel.config
+++ b/SOURCES/kernel-aarch64-rt-rhel.config
@@ -56,6 +56,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_TAD is not set
@@ -95,6 +96,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -117,12 +119,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -133,6 +137,7 @@ CONFIG_ACPI=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -194,6 +199,7 @@ CONFIG_AHCI_IMX=m
# CONFIG_AHCI_TEGRA is not set
CONFIG_AHCI_XGENE=m
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -218,6 +224,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -232,16 +239,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_ASPEED is not set
@@ -336,6 +347,8 @@ CONFIG_ARM64_ERRATUM_2645198=y
CONFIG_ARM64_ERRATUM_2658417=y
CONFIG_ARM64_ERRATUM_2966298=y
CONFIG_ARM64_ERRATUM_3117295=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
CONFIG_ARM64_ERRATUM_819472=y
CONFIG_ARM64_ERRATUM_824069=y
CONFIG_ARM64_ERRATUM_826319=y
@@ -349,6 +362,7 @@ CONFIG_ARM64_LSE_ATOMICS=y
CONFIG_ARM64_MTE=y
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PAN=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_PMEM=y
CONFIG_ARM64_PSEUDO_NMI=y
CONFIG_ARM64_PTR_AUTH_KERNEL=y
@@ -381,6 +395,7 @@ CONFIG_ARM_IMX_BUS_DEVFREQ=m
# CONFIG_ARM_IMX_CPUFREQ_DT is not set
CONFIG_ARM_MHU=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_PL172_MPMC is not set
CONFIG_ARM_PMU=y
# CONFIG_ARM_PSCI_CHECKER is not set
@@ -406,6 +421,7 @@ CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT is not set
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
# CONFIG_ARM_SMMU_QCOM_DEBUG is not set
+CONFIG_ARM_SMMU_V3_KUNIT_TEST=m
CONFIG_ARM_SMMU_V3_PMU=m
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_ARM_SMMU_V3=y
@@ -416,6 +432,7 @@ CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA194_CPUFREQ=m
CONFIG_ARM_TEGRA_DEVFREQ=m
CONFIG_ARM_TI_CPUFREQ=y
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -523,6 +540,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -580,7 +598,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -741,6 +759,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -941,6 +960,7 @@ CONFIG_CLK_IMX8MQ=y
CONFIG_CLK_IMX8QXP=y
CONFIG_CLK_IMX8ULP=y
CONFIG_CLK_IMX93=y
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
CONFIG_CLK_LS1028A_PLLDIG=y
# CONFIG_CLK_QORIQ is not set
@@ -994,7 +1014,7 @@ CONFIG_COMMON_CLK_MAX77686=y
# CONFIG_COMMON_CLK_PWM is not set
# CONFIG_COMMON_CLK_QCOM is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
-CONFIG_COMMON_CLK_SCMI=m
+CONFIG_COMMON_CLK_SCMI=y
CONFIG_COMMON_CLK_SCPI=m
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI521XX is not set
@@ -1078,6 +1098,8 @@ CONFIG_CRAMFS_BLOCKDEV=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -1188,6 +1210,7 @@ CONFIG_CRYPTO_DEV_SA2UL=m
# CONFIG_CRYPTO_DEV_SAHARA is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1401,7 +1424,7 @@ CONFIG_DEFAULT_FQ_CODEL=y
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_DEFAULT_INIT=""
-CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
CONFIG_DEFAULT_NET_SCH="fq_codel"
# CONFIG_DEFAULT_PFIFO_FAST is not set
# CONFIG_DEFAULT_RENO is not set
@@ -1424,7 +1447,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
# CONFIG_DLM_DEPRECATED_API is not set
# CONFIG_DLM is not set
@@ -1535,6 +1558,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1621,6 +1647,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1644,6 +1671,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
@@ -1651,6 +1679,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1682,6 +1711,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1726,6 +1756,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1887,6 +1918,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_BLUEFIELD=m
@@ -2117,6 +2149,7 @@ CONFIG_FSL_ENETC_QOS=y
CONFIG_FSL_ENETC_VF=m
CONFIG_FSL_ERRATUM_A008585=y
CONFIG_FSL_FMAN=y
+# CONFIG_FSL_IFC is not set
CONFIG_FSL_IMX8_DDR_PMU=m
# CONFIG_FSL_IMX9_DDR_PMU is not set
CONFIG_FSL_MC_BUS=y
@@ -2138,6 +2171,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ERRATUM_010001=y
@@ -2235,6 +2269,7 @@ CONFIG_GPIO_DWAPB=m
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HISI is not set
@@ -2447,6 +2482,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2642,6 +2678,7 @@ CONFIG_I2C_XGENE_SLIMPRO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C_XLP9XX=m
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
CONFIG_I3C=m
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2664,7 +2701,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2779,7 +2816,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2794,7 +2830,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -3189,6 +3225,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3196,8 +3233,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3263,6 +3300,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3378,6 +3416,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3488,6 +3528,7 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
# CONFIG_MANAGER_SBS is not set
+CONFIG_MANA_INFINIBAND=m
CONFIG_MANTIS_CORE=m
# CONFIG_MARCH_Z16 is not set
CONFIG_MARVELL_10G_PHY=m
@@ -3599,10 +3640,12 @@ CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
# CONFIG_MEDIA_TUNER_TDA18250 is not set
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3763,6 +3806,7 @@ CONFIG_MICROCHIP_PHY=m
CONFIG_MICROCHIP_T1_PHY=m
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
# CONFIG_MINIX_FS is not set
@@ -3967,6 +4011,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -4084,7 +4129,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4396,7 +4440,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4814,6 +4858,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_AM654_SERDES=m
@@ -4832,6 +4877,7 @@ CONFIG_PHY_BRCM_SATA=y
CONFIG_PHY_FSL_IMX8M_PCIE=y
CONFIG_PHY_FSL_IMX8MQ_USB=m
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4913,6 +4959,7 @@ CONFIG_PINCTRL_MLXBF3=m
CONFIG_PINCTRL_QDF2XXX=m
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SINGLE is not set
@@ -5065,7 +5112,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_QORIQ=m
CONFIG_PTP_1588_CLOCK=y
@@ -5090,9 +5137,10 @@ CONFIG_PWM_TIECAP=m
CONFIG_PWM_TIEHRPWM=m
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -5147,7 +5195,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5342,7 +5390,6 @@ CONFIG_RESET_TI_SCI=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
@@ -5491,6 +5538,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5534,6 +5582,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5553,6 +5602,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5758,6 +5808,7 @@ CONFIG_SENSORS_ADCXX=m
# CONFIG_SENSORS_ADM1266 is not set
# CONFIG_SENSORS_ADM1275 is not set
# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADP1050 is not set
# CONFIG_SENSORS_ADS7828 is not set
CONFIG_SENSORS_ADS7871=m
# CONFIG_SENSORS_ADT7310 is not set
@@ -5840,6 +5891,7 @@ CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LM25066 is not set
@@ -5992,6 +6044,7 @@ CONFIG_SENSORS_VIA_CPUTEMP=m
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
CONFIG_SENSORS_XGENE=m
@@ -6049,6 +6102,7 @@ CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -6119,6 +6173,7 @@ CONFIG_SLUB=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC91X=m
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMPRO_ERRMON=m
CONFIG_SMPRO_MISC=m
@@ -6234,7 +6289,6 @@ CONFIG_SND_INDIGO=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
CONFIG_SND_ISIGHT=m
-# CONFIG_SND is not set
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
CONFIG_SND_JACK=y
# CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set
@@ -6244,6 +6298,7 @@ CONFIG_SND_LAYLA20=m
CONFIG_SND_LAYLA24=m
CONFIG_SND_LOLA=m
CONFIG_SND_LX6464ES=m
+CONFIG_SND=m
CONFIG_SND_MAESTRO3_INPUT=y
CONFIG_SND_MAESTRO3=m
CONFIG_SND_MAX_CARDS=32
@@ -6312,6 +6367,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6336,6 +6392,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6532,6 +6589,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6764,6 +6822,7 @@ CONFIG_SOC_IMX9=m
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
CONFIG_SOC_TEGRA_CBB=m
CONFIG_SOC_TI=y
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6983,6 +7042,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7523,6 +7583,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7791,6 +7852,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7930,6 +7992,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7959,7 +8022,8 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
+CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -8036,6 +8100,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-ppc64le-debug-fedora.config b/SOURCES/kernel-ppc64le-debug-fedora.config
index b440569..75b508c 100644
--- a/SOURCES/kernel-ppc64le-debug-fedora.config
+++ b/SOURCES/kernel-ppc64le-debug-fedora.config
@@ -107,6 +107,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -129,12 +130,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -146,6 +149,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -214,6 +218,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -252,6 +257,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_MFI_FASTCHARGE=m
@@ -338,6 +344,7 @@ CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_PCI=m
CONFIG_ATH11K_SPECTRAL=y
CONFIG_ATH11K_TRACING=y
+CONFIG_ATH12K_DEBUGFS=y
CONFIG_ATH12K_DEBUG=y
# CONFIG_ATH12K is not set
CONFIG_ATH12K_TRACING=y
@@ -458,6 +465,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -714,6 +722,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1480,6 +1489,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1515,6 +1527,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1557,6 +1570,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1580,6 +1594,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1587,6 +1602,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1660,8 +1676,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1839,6 +1875,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1983,6 +2020,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2012,6 +2050,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2061,6 +2100,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTR_FIXUP_SELFTEST is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2364,6 +2404,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2534,6 +2575,7 @@ CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2695,6 +2737,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -2812,13 +2855,14 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3191,6 +3235,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -3561,6 +3606,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -3725,6 +3771,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4065,7 +4112,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -4851,6 +4897,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -5095,7 +5142,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK=y
@@ -5116,6 +5163,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5311,6 +5359,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5356,7 +5405,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5508,6 +5556,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5554,6 +5603,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -5573,6 +5623,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5799,6 +5850,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -6028,6 +6080,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -6078,9 +6131,9 @@ CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=m
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6148,6 +6201,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6376,6 +6430,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6571,6 +6626,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6801,6 +6857,7 @@ CONFIG_SND_VX222=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -7034,6 +7091,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7638,6 +7696,7 @@ CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_OHCI_HCD_PPC_OF=y
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -8010,7 +8069,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -8065,6 +8124,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-ppc64le-debug-rhel.config b/SOURCES/kernel-ppc64le-debug-rhel.config
index 66322c6..cf747f1 100644
--- a/SOURCES/kernel-ppc64le-debug-rhel.config
+++ b/SOURCES/kernel-ppc64le-debug-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -52,6 +52,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_THERMAL=y
@@ -89,6 +90,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -111,12 +113,14 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -127,6 +131,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -185,6 +190,7 @@ CONFIG_AFS_FS=m
# CONFIG_AHCI_DWC is not set
# CONFIG_AHCI_QORIQ is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -209,6 +215,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -220,16 +227,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -267,10 +278,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -279,6 +294,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -385,6 +401,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -436,7 +453,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -597,6 +614,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -777,6 +795,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -887,6 +906,8 @@ CONFIG_CPUSETS=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -972,6 +993,7 @@ CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
CONFIG_CRYPTO_DEV_VMX=y
@@ -1210,7 +1232,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
# CONFIG_DLM_DEPRECATED_API is not set
@@ -1321,6 +1343,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1403,6 +1428,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1426,12 +1452,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1463,6 +1491,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1505,6 +1534,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1623,6 +1653,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_CPC925=m
@@ -1857,6 +1888,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTR_FIXUP_SELFTEST is not set
# CONFIG_FUEL_GAUGE_MM8013 is not set
@@ -1949,6 +1981,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2149,6 +2182,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
# CONFIG_HID_XINMO is not set
CONFIG_HID=y
@@ -2321,6 +2355,7 @@ CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2347,7 +2382,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2447,7 +2482,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2462,7 +2496,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2599,8 +2633,8 @@ CONFIG_IOMMU_DEBUGFS=y
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -2853,6 +2887,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -2860,8 +2895,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -2925,6 +2960,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3049,6 +3085,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3257,10 +3295,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3615,6 +3655,7 @@ CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
CONFIG_MSI_BITMAP_SELFTEST=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3717,7 +3758,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4026,7 +4066,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4405,6 +4445,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4416,6 +4457,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4467,6 +4509,7 @@ CONFIG_PID_NS=y
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4650,7 +4693,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK=y
# CONFIG_PUNIT_ATOM_DEBUG is not set
@@ -4669,6 +4712,7 @@ CONFIG_PWM=y
# CONFIG_PWRSEQ_EMMC is not set
# CONFIG_PWRSEQ_SD8787 is not set
# CONFIG_PWRSEQ_SIMPLE is not set
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4865,7 +4909,6 @@ CONFIG_RENESAS_PHY=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -5009,6 +5052,7 @@ CONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5049,6 +5093,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5068,6 +5113,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5276,6 +5322,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
CONFIG_SENSORS_ADT7310=m
@@ -5357,6 +5404,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5507,6 +5555,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5554,6 +5603,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=m
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5626,6 +5676,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
CONFIG_SMSC9420=m
@@ -5817,6 +5868,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -5841,6 +5893,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6037,6 +6090,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6267,6 +6321,7 @@ CONFIG_SND_VX222=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6460,6 +6515,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -6970,6 +7026,7 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_OHCI_HCD_PPC_OF=y
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7230,6 +7287,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7369,6 +7427,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7397,7 +7456,6 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7475,6 +7533,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-ppc64le-fedora.config b/SOURCES/kernel-ppc64le-fedora.config
index 264acb2..415aa28 100644
--- a/SOURCES/kernel-ppc64le-fedora.config
+++ b/SOURCES/kernel-ppc64le-fedora.config
@@ -107,6 +107,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -129,12 +130,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -146,6 +149,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -214,6 +218,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -252,6 +257,7 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_MFI_FASTCHARGE=m
@@ -336,6 +342,7 @@ CONFIG_ATH10K_USB=m
CONFIG_ATH11K_PCI=m
# CONFIG_ATH11K_SPECTRAL is not set
# CONFIG_ATH11K_TRACING is not set
+# CONFIG_ATH12K_DEBUGFS is not set
# CONFIG_ATH12K_DEBUG is not set
# CONFIG_ATH12K is not set
# CONFIG_ATH12K_TRACING is not set
@@ -456,6 +463,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -712,6 +720,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -1469,6 +1478,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1504,6 +1516,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1546,6 +1559,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1569,6 +1583,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1576,6 +1591,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1649,8 +1665,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1828,6 +1864,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1964,6 +2001,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -1993,6 +2031,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2042,6 +2081,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTR_FIXUP_SELFTEST is not set
CONFIG_FUEL_GAUGE_MM8013=m
@@ -2345,6 +2385,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2514,6 +2555,7 @@ CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2675,6 +2717,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -2799,6 +2842,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3165,6 +3209,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -3534,6 +3579,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -3698,6 +3744,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4037,7 +4084,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -4822,6 +4868,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_PER_VMA_LOCK_STATS is not set
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -5066,7 +5113,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK=y
@@ -5087,6 +5134,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5282,6 +5330,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5327,7 +5376,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5479,6 +5527,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5525,6 +5574,7 @@ CONFIG_RTLLIB=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -5544,6 +5594,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5770,6 +5821,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -5999,6 +6051,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -6049,9 +6102,9 @@ CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=m
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6119,6 +6172,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6346,6 +6400,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6541,6 +6596,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6770,6 +6826,7 @@ CONFIG_SND_VX222=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -7003,6 +7060,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7607,6 +7665,7 @@ CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_OHCI_HCD_PPC_OF=y
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -7979,7 +8038,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -8034,6 +8093,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-ppc64le-rhel.config b/SOURCES/kernel-ppc64le-rhel.config
index d19b693..25ac725 100644
--- a/SOURCES/kernel-ppc64le-rhel.config
+++ b/SOURCES/kernel-ppc64le-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -52,6 +52,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_THERMAL=y
@@ -89,6 +90,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -111,12 +113,14 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -127,6 +131,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -185,6 +190,7 @@ CONFIG_AFS_FS=m
# CONFIG_AHCI_DWC is not set
# CONFIG_AHCI_QORIQ is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -209,6 +215,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -220,16 +227,20 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -267,10 +278,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -279,6 +294,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -385,6 +401,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -436,7 +453,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -597,6 +614,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -777,6 +795,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -887,6 +906,8 @@ CONFIG_CPUSETS=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -972,6 +993,7 @@ CONFIG_CRYPTO_DEV_NX=y
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
CONFIG_CRYPTO_DEV_VMX=y
@@ -1202,7 +1224,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
# CONFIG_DLM_DEPRECATED_API is not set
@@ -1313,6 +1335,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1395,6 +1420,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1418,12 +1444,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1455,6 +1483,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1497,6 +1526,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1615,6 +1645,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_CPC925=m
@@ -1841,6 +1872,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FTR_FIXUP_SELFTEST is not set
# CONFIG_FUEL_GAUGE_MM8013 is not set
@@ -1933,6 +1965,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2133,6 +2166,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
# CONFIG_HID_XINMO is not set
CONFIG_HID=y
@@ -2305,6 +2339,7 @@ CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2331,7 +2366,7 @@ CONFIG_ICPLUS_PHY=m
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2431,7 +2466,6 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2446,7 +2480,7 @@ CONFIG_INFINIBAND=m
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2833,6 +2867,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -2840,8 +2875,8 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -2905,6 +2940,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3029,6 +3065,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3237,10 +3275,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3595,6 +3635,7 @@ CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
CONFIG_MSI_BITMAP_SELFTEST=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3697,7 +3738,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4006,7 +4046,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4384,6 +4424,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4395,6 +4436,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4446,6 +4488,7 @@ CONFIG_PID_NS=y
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4629,7 +4672,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK=y
# CONFIG_PUNIT_ATOM_DEBUG is not set
@@ -4648,6 +4691,7 @@ CONFIG_PWM=y
# CONFIG_PWRSEQ_EMMC is not set
# CONFIG_PWRSEQ_SD8787 is not set
# CONFIG_PWRSEQ_SIMPLE is not set
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4844,7 +4888,6 @@ CONFIG_RENESAS_PHY=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -4988,6 +5031,7 @@ CONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5028,6 +5072,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5047,6 +5092,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5255,6 +5301,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
CONFIG_SENSORS_ADT7310=m
@@ -5336,6 +5383,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5486,6 +5534,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5533,6 +5582,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_OF_PLATFORM=m
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5605,6 +5655,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
CONFIG_SMSC9420=m
@@ -5795,6 +5846,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -5819,6 +5871,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6015,6 +6068,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6244,6 +6298,7 @@ CONFIG_SND_VX222=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6437,6 +6492,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -6947,6 +7003,7 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_OHCI_HCD_PPC_OF=y
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7207,6 +7264,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7346,6 +7404,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7374,7 +7433,6 @@ CONFIG_VMAP_STACK=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
-# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7452,6 +7510,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-s390x-debug-fedora.config b/SOURCES/kernel-s390x-debug-fedora.config
index 4abf5de..091dc10 100644
--- a/SOURCES/kernel-s390x-debug-fedora.config
+++ b/SOURCES/kernel-s390x-debug-fedora.config
@@ -108,6 +108,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -130,12 +131,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -147,6 +150,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -215,6 +219,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -251,7 +256,9 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+CONFIG_AP_DEBUG=y
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
CONFIG_APPLDATA_BASE=y
@@ -261,6 +268,7 @@ CONFIG_APPLDATA_OS=m
CONFIG_APPLE_MFI_FASTCHARGE=m
# CONFIG_APPLE_PROPERTIES is not set
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
CONFIG_AR5523=m
@@ -341,6 +349,7 @@ CONFIG_ATH11K_DEBUG=y
CONFIG_ATH11K_PCI=m
CONFIG_ATH11K_SPECTRAL=y
CONFIG_ATH11K_TRACING=y
+CONFIG_ATH12K_DEBUGFS=y
CONFIG_ATH12K_DEBUG=y
CONFIG_ATH12K=m
CONFIG_ATH12K_TRACING=y
@@ -461,6 +470,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -716,6 +726,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
# CONFIG_BT is not set
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
@@ -1485,6 +1496,9 @@ CONFIG_DRM_CHRONTEL_CH7033=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1520,6 +1534,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1561,6 +1576,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1584,6 +1600,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1591,6 +1608,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1664,8 +1682,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1839,6 +1877,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
# CONFIG_ETHOC is not set
@@ -1985,6 +2024,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -2014,6 +2054,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2054,6 +2095,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
CONFIG_FUEL_GAUGE_MM8013=m
# CONFIG_FUNCTION_ERROR_INJECTION is not set
@@ -2353,6 +2395,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
@@ -2510,6 +2553,7 @@ CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2667,6 +2711,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -2782,13 +2827,14 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3083,6 +3129,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3162,6 +3209,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM=m
@@ -3532,6 +3580,7 @@ CONFIG_MEGARAID_MM=m
# CONFIG_MEGARAID_SAS is not set
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -3696,6 +3745,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4033,7 +4083,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -4813,6 +4862,7 @@ CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
CONFIG_PFAULT=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -5009,7 +5059,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK=y
@@ -5030,6 +5080,7 @@ CONFIG_PWM_OMAP_DMTIMER=m
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5231,6 +5282,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5277,7 +5329,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
# CONFIG_RFKILL is not set
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5425,6 +5476,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5471,6 +5523,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -5490,6 +5543,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5729,6 +5783,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -5956,6 +6011,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -6004,9 +6060,9 @@ CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6074,6 +6130,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6304,6 +6361,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6499,6 +6557,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6729,6 +6788,7 @@ CONFIG_SND_VX222=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6958,6 +7018,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7571,6 +7632,7 @@ CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -7945,7 +8007,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -8000,6 +8062,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-s390x-debug-rhel.config b/SOURCES/kernel-s390x-debug-rhel.config
index a367a9c..88a84d0 100644
--- a/SOURCES/kernel-s390x-debug-rhel.config
+++ b/SOURCES/kernel-s390x-debug-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -51,6 +51,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_THERMAL=y
@@ -88,6 +89,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -110,12 +112,14 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -126,6 +130,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -183,6 +188,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -206,6 +212,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
# CONFIG_AMD_PHY is not set
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -217,7 +224,9 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
CONFIG_APPLDATA_BASE=y
@@ -227,10 +236,12 @@ CONFIG_APPLDATA_OS=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -266,10 +277,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -278,6 +293,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -384,6 +400,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -435,7 +452,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -595,6 +612,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
@@ -780,6 +798,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -886,6 +905,8 @@ CONFIG_CPUSETS=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -969,6 +990,7 @@ CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1213,7 +1235,7 @@ CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
CONFIG_DIAG288_WATCHDOG=m
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
# CONFIG_DLM_DEPRECATED_API is not set
@@ -1324,6 +1346,9 @@ CONFIG_DRM_AMDGPU_USERPTR=y
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1407,6 +1432,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1430,12 +1456,14 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1467,6 +1495,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1509,6 +1538,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
@@ -1626,6 +1656,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_DEBUG=y
@@ -1860,6 +1891,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
# CONFIG_FUNCTION_ERROR_INJECTION is not set
@@ -1949,6 +1981,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2149,6 +2182,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
@@ -2309,6 +2343,7 @@ CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_VIPERBOARD is not set
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2332,7 +2367,7 @@ CONFIG_ICE_SWITCHDEV=y
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2431,7 +2466,6 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2446,7 +2480,7 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
@@ -2582,8 +2616,8 @@ CONFIG_IOMMU_DEBUGFS=y
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set
CONFIG_IOMMU_DEFAULT_DMA_STRICT=y
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -2834,6 +2868,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -2843,9 +2878,9 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -2908,6 +2943,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3024,6 +3060,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3239,10 +3277,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_SAS is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3596,6 +3636,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
# CONFIG_MSPRO_BLOCK is not set
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3697,7 +3738,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4006,7 +4046,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4384,6 +4424,7 @@ CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
CONFIG_PFAULT=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4395,6 +4436,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4445,6 +4487,7 @@ CONFIG_PID_NS=y
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4583,7 +4626,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK=y
# CONFIG_PUNIT_ATOM_DEBUG is not set
@@ -4599,9 +4642,10 @@ CONFIG_PTP_1588_CLOCK=y
# CONFIG_PWM is not set
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4647,7 +4691,7 @@ CONFIG_QETH=m
# CONFIG_QETH_OSX is not set
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -4802,7 +4846,6 @@ CONFIG_RENESAS_PHY=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -4942,6 +4985,7 @@ CONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -4982,6 +5026,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5001,6 +5046,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5254,6 +5300,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
CONFIG_SENSORS_ADT7310=m
@@ -5334,6 +5381,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LIS3LV02D is not set
@@ -5485,6 +5533,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5530,6 +5579,7 @@ CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5594,6 +5644,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -5788,6 +5839,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -5812,6 +5864,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6008,6 +6061,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6238,6 +6292,7 @@ CONFIG_SND_VX222=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6428,6 +6483,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -6947,6 +7003,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7210,6 +7267,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7349,6 +7407,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7380,7 +7439,6 @@ CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMLOGRDR=m
-# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7456,6 +7514,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-s390x-fedora.config b/SOURCES/kernel-s390x-fedora.config
index b4a6795..2479547 100644
--- a/SOURCES/kernel-s390x-fedora.config
+++ b/SOURCES/kernel-s390x-fedora.config
@@ -108,6 +108,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -130,12 +131,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -147,6 +150,7 @@ CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -215,6 +219,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -251,7 +256,9 @@ CONFIG_ANDROID_BINDERFS=y
# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
CONFIG_APPLDATA_BASE=y
@@ -261,6 +268,7 @@ CONFIG_APPLDATA_OS=m
CONFIG_APPLE_MFI_FASTCHARGE=m
# CONFIG_APPLE_PROPERTIES is not set
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
CONFIG_AR5523=m
@@ -339,6 +347,7 @@ CONFIG_ATH10K_USB=m
CONFIG_ATH11K_PCI=m
# CONFIG_ATH11K_SPECTRAL is not set
# CONFIG_ATH11K_TRACING is not set
+# CONFIG_ATH12K_DEBUGFS is not set
# CONFIG_ATH12K_DEBUG is not set
CONFIG_ATH12K=m
# CONFIG_ATH12K_TRACING is not set
@@ -459,6 +468,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -714,6 +724,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
# CONFIG_BT is not set
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
@@ -1474,6 +1485,9 @@ CONFIG_DRM_CHRONTEL_CH7033=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1509,6 +1523,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1550,6 +1565,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1573,6 +1589,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1580,6 +1597,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1653,8 +1671,28 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
-# CONFIG_DRM_XE is not set
+CONFIG_DRM_WERROR=y
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_KUNIT_TEST is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+CONFIG_DRM_XE=m
# CONFIG_DRM_XEN_FRONTEND is not set
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+# CONFIG_DRM_XE_SIMPLE_ERROR_CAPTURE is not set
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# CONFIG_DRM_XE_WERROR is not set
CONFIG_DRM=y
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
@@ -1828,6 +1866,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
# CONFIG_ETHOC is not set
@@ -1966,6 +2005,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
# CONFIG_FIREWIRE_NOSY is not set
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FIRMWARE_MEMMAP=y
@@ -1995,6 +2035,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2035,6 +2076,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
CONFIG_FUEL_GAUGE_MM8013=m
# CONFIG_FUNCTION_ERROR_INJECTION is not set
@@ -2334,6 +2376,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
@@ -2490,6 +2533,7 @@ CONFIG_I2C_TINY_USB=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2647,6 +2691,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -2769,6 +2814,7 @@ CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3057,6 +3103,7 @@ CONFIG_KALLSYMS=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3136,6 +3183,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM=m
@@ -3505,6 +3553,7 @@ CONFIG_MEGARAID_MM=m
# CONFIG_MEGARAID_SAS is not set
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -3669,6 +3718,7 @@ CONFIG_MICROCHIP_PHY=m
# CONFIG_MICROCHIP_T1_PHY is not set
CONFIG_MICROCHIP_T1S_PHY=m
CONFIG_MICROSEMI_PHY=m
+CONFIG_MICROSOFT_MANA=m
CONFIG_MIGRATION=y
CONFIG_MII=m
CONFIG_MINIX_FS=m
@@ -4005,7 +4055,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -4784,6 +4833,7 @@ CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_PER_VMA_LOCK_STATS is not set
CONFIG_PFAULT=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -4980,7 +5030,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK=y
@@ -5001,6 +5051,7 @@ CONFIG_PWM_OMAP_DMTIMER=m
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5202,6 +5253,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5248,7 +5300,6 @@ CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
# CONFIG_RFKILL is not set
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5396,6 +5447,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5442,6 +5494,7 @@ CONFIG_RTLLIB=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -5461,6 +5514,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5700,6 +5754,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -5927,6 +5982,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -5975,9 +6031,9 @@ CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6045,6 +6101,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6274,6 +6331,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6469,6 +6527,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6698,6 +6757,7 @@ CONFIG_SND_VX222=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6927,6 +6987,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7540,6 +7601,7 @@ CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -7914,7 +7976,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -7969,6 +8031,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
diff --git a/SOURCES/kernel-s390x-rhel.config b/SOURCES/kernel-s390x-rhel.config
index f178cc8..c9435cd 100644
--- a/SOURCES/kernel-s390x-rhel.config
+++ b/SOURCES/kernel-s390x-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -51,6 +51,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_THERMAL=y
@@ -88,6 +89,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -110,12 +112,14 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -126,6 +130,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -183,6 +188,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -206,6 +212,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
# CONFIG_AMD_PHY is not set
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -217,7 +224,9 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
CONFIG_APPLDATA_BASE=y
@@ -227,10 +236,12 @@ CONFIG_APPLDATA_OS=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -266,10 +277,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -278,6 +293,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -384,6 +400,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -435,7 +452,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -595,6 +612,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
@@ -780,6 +798,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -886,6 +905,8 @@ CONFIG_CPUSETS=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -969,6 +990,7 @@ CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1205,7 +1227,7 @@ CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
CONFIG_DIAG288_WATCHDOG=m
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
# CONFIG_DLM_DEPRECATED_API is not set
@@ -1316,6 +1338,9 @@ CONFIG_DRM_AMDGPU_USERPTR=y
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1399,6 +1424,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1422,12 +1448,14 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1459,6 +1487,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1501,6 +1530,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
@@ -1618,6 +1648,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_EDAC_DEBUG is not set
@@ -1844,6 +1875,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
# CONFIG_FUNCTION_ERROR_INJECTION is not set
@@ -1933,6 +1965,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2133,6 +2166,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
@@ -2293,6 +2327,7 @@ CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_VIPERBOARD is not set
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2316,7 +2351,7 @@ CONFIG_ICE_SWITCHDEV=y
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2415,7 +2450,6 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2430,7 +2464,7 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
@@ -2814,6 +2848,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -2823,9 +2858,9 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -2888,6 +2923,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3004,6 +3040,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3219,10 +3257,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_SAS is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3576,6 +3616,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_MSDOS_FS=m
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
# CONFIG_MSPRO_BLOCK is not set
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3677,7 +3718,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -3986,7 +4026,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4363,6 +4403,7 @@ CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
CONFIG_PFAULT=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4374,6 +4415,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4424,6 +4466,7 @@ CONFIG_PID_NS=y
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4562,7 +4605,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK=y
# CONFIG_PUNIT_ATOM_DEBUG is not set
@@ -4578,9 +4621,10 @@ CONFIG_PTP_1588_CLOCK=y
# CONFIG_PWM is not set
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4626,7 +4670,7 @@ CONFIG_QETH=m
# CONFIG_QETH_OSX is not set
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -4781,7 +4825,6 @@ CONFIG_RENESAS_PHY=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -4921,6 +4964,7 @@ CONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -4961,6 +5005,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -4980,6 +5025,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5233,6 +5279,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
CONFIG_SENSORS_ADT7310=m
@@ -5313,6 +5360,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LIS3LV02D is not set
@@ -5464,6 +5512,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5509,6 +5558,7 @@ CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5573,6 +5623,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -5766,6 +5817,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -5790,6 +5842,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -5986,6 +6039,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6215,6 +6269,7 @@ CONFIG_SND_VX222=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6405,6 +6460,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -6924,6 +6980,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7187,6 +7244,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7326,6 +7384,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7357,7 +7416,6 @@ CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMLOGRDR=m
-# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7433,6 +7491,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
CONFIG_XDP_SOCKETS=y
diff --git a/SOURCES/kernel-s390x-zfcpdump-rhel.config b/SOURCES/kernel-s390x-zfcpdump-rhel.config
index 8ceb765..cab9fb5 100644
--- a/SOURCES/kernel-s390x-zfcpdump-rhel.config
+++ b/SOURCES/kernel-s390x-zfcpdump-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -51,6 +51,7 @@ CONFIG_ACPI_PFRUT=m
CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
CONFIG_ACPI_SPCR_TABLE=y
CONFIG_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_THERMAL=y
@@ -88,6 +89,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -110,12 +112,14 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -126,6 +130,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -183,6 +188,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -206,6 +212,7 @@ CONFIG_ALX=m
CONFIG_AMD_ATL=m
CONFIG_AMD_HSMP=m
# CONFIG_AMD_IOMMU_DEBUGFS is not set
+CONFIG_AMD_MP2_STB=y
# CONFIG_AMD_PHY is not set
CONFIG_AMD_PMC=m
# CONFIG_AMD_PTDMA is not set
@@ -217,7 +224,9 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_APDS9960 is not set
# CONFIG_APPLDATA_BASE is not set
@@ -227,10 +236,12 @@ CONFIG_APPLDATA_NET_SUM=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
# CONFIG_AQTION is not set
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -266,10 +277,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -278,6 +293,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -385,7 +401,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -437,7 +453,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -597,6 +613,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
@@ -782,6 +799,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -888,6 +906,8 @@ CONFIG_CPU_MITIGATIONS=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
CONFIG_CRC16=y
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC32_SARWATE is not set
@@ -971,6 +991,7 @@ CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1207,7 +1228,7 @@ CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
CONFIG_DIAG288_WATCHDOG=m
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
# CONFIG_DLM_DEPRECATED_API is not set
@@ -1318,6 +1339,9 @@ CONFIG_DRM_AMDGPU_USERPTR=y
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1401,6 +1425,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1424,12 +1449,14 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1461,6 +1488,7 @@ CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1503,6 +1531,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
# CONFIG_DS1682 is not set
@@ -1620,6 +1649,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_EDAC_DEBUG is not set
@@ -1849,6 +1879,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
# CONFIG_FUEL_GAUGE_MM8013 is not set
# CONFIG_FUNCTION_ERROR_INJECTION is not set
# CONFIG_FUNCTION_GRAPH_RETVAL is not set
@@ -1939,6 +1970,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2139,6 +2171,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID_ZEROPLUS=m
@@ -2300,6 +2333,7 @@ CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_VIPERBOARD is not set
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2323,7 +2357,7 @@ CONFIG_ICE_SWITCHDEV=y
# CONFIG_IDLE_INJECT is not set
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2422,7 +2456,6 @@ CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2437,7 +2470,7 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_SRP is not set
@@ -2823,6 +2856,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -2832,9 +2866,9 @@ CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_ZSTD is not set
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
# CONFIG_KEXEC_SIG_FORCE is not set
# CONFIG_KEXEC_SIG is not set
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -2897,6 +2931,7 @@ CONFIG_KPROBES=y
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
# CONFIG_KUNIT is not set
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3013,6 +3048,8 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m
CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_LEGACY_TIOCSTI=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
# CONFIG_LIBCRC32C is not set
@@ -3229,10 +3266,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_SAS is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3586,6 +3625,7 @@ CONFIG_MQ_IOSCHED_KYBER=y
# CONFIG_MSDOS_FS is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
+# CONFIG_MSI_WMI_PLATFORM is not set
# CONFIG_MSPRO_BLOCK is not set
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3687,7 +3727,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -3998,7 +4037,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4375,6 +4414,7 @@ CONFIG_PERF_EVENTS_AMD_UNCORE=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
# CONFIG_PFAULT is not set
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4386,6 +4426,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4436,6 +4477,7 @@ CONFIG_PID_NS=y
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4591,9 +4633,10 @@ CONFIG_PTP_1588_CLOCK=y
# CONFIG_PWM is not set
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4639,7 +4682,7 @@ CONFIG_QETH=m
# CONFIG_QETH_OSX is not set
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -4794,7 +4837,6 @@ CONFIG_RENESAS_PHY=m
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -4934,6 +4976,7 @@ CONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -4975,6 +5018,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI=m
CONFIG_RT_MUTEXES=y
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -4994,6 +5038,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5250,6 +5295,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
CONFIG_SENSORS_ADT7310=m
@@ -5330,6 +5376,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_LIS3LV02D is not set
@@ -5481,6 +5528,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5526,6 +5574,7 @@ CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5590,6 +5639,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -5783,6 +5833,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -5807,6 +5858,7 @@ CONFIG_SND_SOC_AMD_SOUNDWIRE=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6003,6 +6055,7 @@ CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6232,6 +6285,7 @@ CONFIG_SND_VX222=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
# CONFIG_SOLARIS_X86_PARTITION is not set
@@ -6427,6 +6481,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -6947,6 +7002,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7210,6 +7266,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7349,6 +7406,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
# CONFIG_VIRTIO_CONSOLE is not set
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -7380,7 +7438,6 @@ CONFIG_VM_EVENT_COUNTERS=y
CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMLOGRDR=m
-# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
CONFIG_VP_VDPA=m
CONFIG_VSOCKETS_DIAG=m
@@ -7456,6 +7513,7 @@ CONFIG_WWAN_HWSIM=m
CONFIG_WWAN=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_X25 is not set
+# CONFIG_X86_POSTED_MSI is not set
# CONFIG_X9250 is not set
CONFIG_XDP_SOCKETS_DIAG=m
# CONFIG_XDP_SOCKETS is not set
diff --git a/SOURCES/kernel-x86_64-debug-fedora.config b/SOURCES/kernel-x86_64-debug-fedora.config
index 7fcb6a1..94664db 100644
--- a/SOURCES/kernel-x86_64-debug-fedora.config
+++ b/SOURCES/kernel-x86_64-debug-fedora.config
@@ -78,6 +78,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_QUICKSTART=m
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -125,6 +126,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -147,12 +149,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -164,6 +168,7 @@ CONFIG_ADDRESS_MASKING=y
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -243,6 +248,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -271,6 +277,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -292,6 +299,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
@@ -383,6 +391,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
CONFIG_ATH11K_SPECTRAL=y
CONFIG_ATH11K_TRACING=y
+CONFIG_ATH12K_DEBUGFS=y
CONFIG_ATH12K_DEBUG=y
CONFIG_ATH12K=m
CONFIG_ATH12K_TRACING=y
@@ -509,6 +518,7 @@ CONFIG_BALLOON_COMPACTION=y
CONFIG_BARCO_P50_GPIO=m
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -769,6 +779,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -805,7 +816,6 @@ CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -1087,8 +1097,6 @@ CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_THERMAL=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
# CONFIG_CPU_IDLE_GOV_TEO is not set
@@ -1099,9 +1107,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
@@ -1470,6 +1476,7 @@ CONFIG_DELL_SMBIOS=m
CONFIG_DELL_SMBIOS_SMM=y
CONFIG_DELL_SMBIOS_WMI=y
CONFIG_DELL_SMO8800=m
+CONFIG_DELL_UART_BACKLIGHT=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_DDV=m
CONFIG_DELL_WMI_LED=m
@@ -1618,6 +1625,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1683,6 +1693,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1724,6 +1735,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1747,6 +1759,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1754,6 +1767,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1827,6 +1841,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
CONFIG_DRM_VMWGFX_MKSSTATS=y
+CONFIG_DRM_WERROR=y
# CONFIG_DRM_XE_DEBUG is not set
# CONFIG_DRM_XE_DEBUG_MEM is not set
# CONFIG_DRM_XE_DEBUG_SRIOV is not set
@@ -2056,6 +2071,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2206,6 +2222,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
CONFIG_FIREWIRE_KUNIT_UAPI_TEST=m
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_NET=m
@@ -2241,6 +2258,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2281,6 +2299,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
CONFIG_FUEL_GAUGE_MM8013=m
CONFIG_FUJITSU_ES=m
@@ -2334,7 +2353,6 @@ CONFIG_GAMEPORT_NS558=m
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2385,6 +2403,7 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_FTGPIO010 is not set
CONFIG_GPIO_FXL6408=m
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+CONFIG_GPIO_GRANITERAPIDS=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2601,6 +2620,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2787,6 +2807,7 @@ CONFIG_I2C_VIAPRO=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2959,6 +2980,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
CONFIG_INFINIBAND_VMWARE_PVRDMA=m
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3083,7 +3105,8 @@ CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
CONFIG_INTEL_MEI_PXP=m
CONFIG_INTEL_MEI_TXE=m
-# CONFIG_INTEL_MEI_VSC_HW is not set
+CONFIG_INTEL_MEI_VSC_HW=m
+CONFIG_INTEL_MEI_VSC=m
CONFIG_INTEL_MEI_WDT=m
CONFIG_INTEL_MRFLD_ADC=m
CONFIG_INTEL_MRFLD_PWRBTN=m
@@ -3130,7 +3153,7 @@ CONFIG_INTEL_TURBO_MAX_3=y
CONFIG_INTEL_TXT=y
CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
CONFIG_INTEL_VBTN=m
-# CONFIG_INTEL_VSC is not set
+CONFIG_INTEL_VSC=m
CONFIG_INTEL_VSEC=m
CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
CONFIG_INTEL_WMI_THUNDERBOLT=m
@@ -3152,8 +3175,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_IONIC=m
CONFIG_IOSCHED_BFQ=y
@@ -3161,6 +3184,7 @@ CONFIG_IOSCHED_BFQ=y
CONFIG_IOSF_MBI=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3542,6 +3566,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD=m
@@ -3549,6 +3574,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3678,6 +3704,8 @@ CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+CONFIG_LENOVO_SE10_WDT=m
+CONFIG_LENOVO_WMI_CAMERA=m
CONFIG_LENOVO_YMC=m
CONFIG_LG_LAPTOP=m
CONFIG_LIB80211_CRYPT_CCMP=m
@@ -3907,6 +3935,7 @@ CONFIG_MEDIA_TEST_SUPPORT=y
# CONFIG_MEDIA_TUNER_MSI001 is not set
# CONFIG_MEDIA_TUNER_MXL301RF is not set
CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_MEEGOPAD_ANX7428=m
# CONFIG_MEFFICEON is not set
CONFIG_MEGARAID_LEGACY=m
CONFIG_MEGARAID_MAILBOX=m
@@ -3915,6 +3944,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4306,6 +4336,7 @@ CONFIG_MSE102X=m
CONFIG_MSI_EC=m
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+CONFIG_MSI_WMI_PLATFORM=m
# CONFIG_MSM_GCC_8939 is not set
# CONFIG_MSM_GCC_8953 is not set
# CONFIG_MSM_GPUCC_8998 is not set
@@ -4457,7 +4488,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5123,7 +5153,6 @@ CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
CONFIG_PAGE_TABLE_CHECK=y
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL_CHANGE_MESSAGE is not set
# CONFIG_PANEL is not set
@@ -5290,6 +5319,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -5517,7 +5547,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_VMW=m
@@ -5546,6 +5576,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5748,6 +5779,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5788,15 +5820,12 @@ CONFIG_RESET_GPIO=m
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RESET_TI_TPS380X=m
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5945,6 +5974,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5991,6 +6021,7 @@ CONFIG_RTLLIB=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -6010,6 +6041,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -6243,6 +6275,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -6326,6 +6359,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_LENOVO_EC=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LIS3LV02D=m
@@ -6484,6 +6518,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -6534,9 +6569,9 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6607,7 +6642,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -6618,6 +6652,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6833,6 +6868,7 @@ CONFIG_SND_SOC_AK5558=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_AMD_ACP3x=m
CONFIG_SND_SOC_AMD_ACP5x=m
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
CONFIG_SND_SOC_AMD_ACP=m
@@ -6862,6 +6898,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7064,6 +7101,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -7300,6 +7338,7 @@ CONFIG_SND_XEN_FRONTEND=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -7553,6 +7592,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8169,6 +8209,7 @@ CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -8459,6 +8500,7 @@ CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX412=m
CONFIG_VIDEO_IMX415=m
+CONFIG_VIDEO_INTEL_IPU6=m
CONFIG_VIDEO_IPU3_CIO2=m
CONFIG_VIDEO_IPU3_IMGU=m
CONFIG_VIDEO_IR_I2C=m
@@ -8485,7 +8527,7 @@ CONFIG_VIDEO_MT9V032=m
CONFIG_VIDEO_MT9V111=m
CONFIG_VIDEO_MXB=m
CONFIG_VIDEO_OG01A1B=m
-# CONFIG_VIDEO_OV01A10 is not set
+CONFIG_VIDEO_OV01A10=m
CONFIG_VIDEO_OV02A10=m
CONFIG_VIDEO_OV08D10=m
CONFIG_VIDEO_OV08X40=m
@@ -8495,7 +8537,7 @@ CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV2659=m
CONFIG_VIDEO_OV2680=m
CONFIG_VIDEO_OV2685=m
-# CONFIG_VIDEO_OV2740 is not set
+CONFIG_VIDEO_OV2740=m
CONFIG_VIDEO_OV4689=m
CONFIG_VIDEO_OV5640=m
CONFIG_VIDEO_OV5645=m
@@ -8553,7 +8595,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -8608,6 +8650,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -8823,6 +8866,7 @@ CONFIG_X86_PLATFORM_DRIVERS_HP=y
CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+CONFIG_X86_POSTED_MSI=y
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
@@ -8943,6 +8987,7 @@ CONFIG_YENTA=m
# CONFIG_YENTA_TOSHIBA is not set
CONFIG_YOGABOOK=m
CONFIG_YOGABOOK_WMI=m
+CONFIG_YT2_1380=m
CONFIG_Z3FOLD=y
CONFIG_ZBUD=y
# CONFIG_ZD1211RW_DEBUG is not set
diff --git a/SOURCES/kernel-x86_64-debug-rhel.config b/SOURCES/kernel-x86_64-debug-rhel.config
index 814d394..41c2975 100644
--- a/SOURCES/kernel-x86_64-debug-rhel.config
+++ b/SOURCES/kernel-x86_64-debug-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -59,6 +59,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -106,6 +107,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -128,12 +130,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -144,6 +148,7 @@ CONFIG_ADDRESS_MASKING=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -200,6 +205,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -226,6 +232,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -244,17 +251,21 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -291,10 +302,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -303,6 +318,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -413,6 +429,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -464,7 +481,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -624,6 +641,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -650,7 +668,6 @@ CONFIG_CACHEFILES=m
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -805,6 +822,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -905,8 +923,6 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -918,9 +934,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
@@ -1029,6 +1043,7 @@ CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1292,7 +1307,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
CONFIG_DL2K=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
@@ -1406,6 +1421,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1516,6 +1534,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1539,12 +1558,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1576,6 +1597,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1618,6 +1640,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1736,6 +1759,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_AMD64=m
@@ -1996,6 +2020,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ES=m
@@ -2044,7 +2069,6 @@ CONFIG_GACT_PROB=y
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2090,6 +2114,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2304,6 +2329,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2481,6 +2507,7 @@ CONFIG_I2C_VIAPRO=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2507,7 +2534,7 @@ CONFIG_IDLE_INJECT=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
# CONFIG_IE6XX_WDT is not set
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2607,7 +2634,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
+CONFIG_INFINIBAND_HFI1=m
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2623,7 +2650,7 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2799,8 +2826,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3053,6 +3080,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3061,10 +3089,10 @@ CONFIG_KERNEL_GZIP=y
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_JUMP=y
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3127,6 +3155,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3137,6 +3166,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3248,6 +3278,8 @@ CONFIG_LEGACY_TIOCSTI=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3455,10 +3487,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3835,6 +3869,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3941,7 +3976,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4249,7 +4283,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4507,7 +4541,6 @@ CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
CONFIG_PAGE_TABLE_CHECK=y
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL is not set
CONFIG_PANIC_ON_OOPS=y
@@ -4645,6 +4678,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4656,6 +4690,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4728,6 +4763,7 @@ CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4874,7 +4910,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_VMW=m
CONFIG_PTP_1588_CLOCK=y
@@ -4894,9 +4930,10 @@ CONFIG_PWM_LPSS_PLATFORM=m
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4937,7 +4974,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5092,8 +5129,6 @@ CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -5234,6 +5269,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5274,6 +5310,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5293,6 +5330,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5530,6 +5568,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_ADT7310 is not set
@@ -5613,6 +5652,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5763,6 +5803,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5810,6 +5851,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5873,7 +5915,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -5884,6 +5925,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
# CONFIG_SMSC37B787_WDT is not set
@@ -6081,6 +6123,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6105,6 +6148,7 @@ CONFIG_SND_SOC_AMD_YC_MACH=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6119,7 +6163,7 @@ CONFIG_SND_SOC_CS35L41_SPI=m
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L56_I2C is not set
CONFIG_SND_SOC_CS35L56_SDW=m
-# CONFIG_SND_SOC_CS35L56_SPI is not set
+CONFIG_SND_SOC_CS35L56_SPI=m
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
@@ -6304,6 +6348,7 @@ CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6535,6 +6580,7 @@ CONFIG_SND_XEN_FRONTEND=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6744,6 +6790,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7259,6 +7306,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7526,6 +7574,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7665,11 +7714,12 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_IOMMU=y
-# CONFIG_VIRTIO_MEM is not set
+CONFIG_VIRTIO_MEM=m
CONFIG_VIRTIO_MENU=y
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
# CONFIG_VIRTIO_MMIO is not set
@@ -7697,7 +7747,7 @@ CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMWARE_BALLOON=m
CONFIG_VMWARE_PVSCSI=m
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
@@ -7823,6 +7873,7 @@ CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+# CONFIG_X86_POSTED_MSI is not set
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
diff --git a/SOURCES/kernel-x86_64-fedora.config b/SOURCES/kernel-x86_64-fedora.config
index ef22a4f..44b4660 100644
--- a/SOURCES/kernel-x86_64-fedora.config
+++ b/SOURCES/kernel-x86_64-fedora.config
@@ -78,6 +78,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_QUICKSTART=m
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -125,6 +126,7 @@ CONFIG_AD5770R=m
CONFIG_AD7091R8=m
CONFIG_AD7124=m
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -147,12 +149,14 @@ CONFIG_AD7766=m
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
CONFIG_AD7949=m
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
CONFIG_AD9467=m
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -164,6 +168,7 @@ CONFIG_ADDRESS_MASKING=y
CONFIG_ADF4377=m
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
CONFIG_ADIN1110=m
CONFIG_ADIN_PHY=m
@@ -243,6 +248,7 @@ CONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
CONFIG_AIC7XXX_RESET_DELAY_MS=15000
CONFIG_AIO=y
+CONFIG_AIR_EN8811H_PHY=m
CONFIG_AIX_PARTITION=y
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -271,6 +277,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -292,6 +299,7 @@ CONFIG_ANDROID_BINDER_IPC=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_APDS9300 is not set
+CONFIG_APDS9306=m
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
@@ -381,6 +389,7 @@ CONFIG_ATH11K=m
CONFIG_ATH11K_PCI=m
# CONFIG_ATH11K_SPECTRAL is not set
# CONFIG_ATH11K_TRACING is not set
+# CONFIG_ATH12K_DEBUGFS is not set
# CONFIG_ATH12K_DEBUG is not set
CONFIG_ATH12K=m
# CONFIG_ATH12K_TRACING is not set
@@ -507,6 +516,7 @@ CONFIG_BALLOON_COMPACTION=y
CONFIG_BARCO_P50_GPIO=m
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
CONFIG_BATMAN_ADV_BATMAN_V=y
CONFIG_BATMAN_ADV_BLA=y
CONFIG_BATMAN_ADV_DAT=y
@@ -767,6 +777,7 @@ CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
+CONFIG_BT_INTEL_PCIE=m
CONFIG_BT_LEDS=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -803,7 +814,6 @@ CONFIG_CACHEFILES_ONDEMAND=y
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -1085,8 +1095,6 @@ CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_THERMAL=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
# CONFIG_CPU_IDLE_GOV_TEO is not set
@@ -1097,9 +1105,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
@@ -1460,6 +1466,7 @@ CONFIG_DELL_SMBIOS=m
CONFIG_DELL_SMBIOS_SMM=y
CONFIG_DELL_SMBIOS_WMI=y
CONFIG_DELL_SMO8800=m
+CONFIG_DELL_UART_BACKLIGHT=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_DDV=m
CONFIG_DELL_WMI_LED=m
@@ -1607,6 +1614,9 @@ CONFIG_DRM_CROS_EC_ANX7688=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
CONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+CONFIG_DRM_DISPLAY_DP_AUX_CEC=y
+CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set
@@ -1672,6 +1682,7 @@ CONFIG_DRM_LONTIUM_LT9611UXC=m
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
CONFIG_DRM_MGAG200=m
# CONFIG_DRM_MSM_GPU_SUDO is not set
+# CONFIG_DRM_MSM_VALIDATE_XML is not set
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
@@ -1713,6 +1724,7 @@ CONFIG_DRM_PANEL_JDI_R63452=m
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=m
CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
@@ -1736,6 +1748,7 @@ CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
+CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
CONFIG_DRM_PANEL_RONBO_RB070D30=m
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
@@ -1743,6 +1756,7 @@ CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1816,6 +1830,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
CONFIG_DRM_VMWGFX_MKSSTATS=y
+CONFIG_DRM_WERROR=y
# CONFIG_DRM_XE_DEBUG is not set
# CONFIG_DRM_XE_DEBUG_MEM is not set
# CONFIG_DRM_XE_DEBUG_SRIOV is not set
@@ -2045,6 +2060,7 @@ CONFIG_EROFS_FS_XATTR=y
CONFIG_EROFS_FS_ZIP_DEFLATE=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP=y
+CONFIG_EROFS_FS_ZIP_ZSTD=y
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -2187,6 +2203,7 @@ CONFIG_FILE_LOCKING=y
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
# CONFIG_FIREWIRE_KUNIT_DEVICE_ATTRIBUTE_TEST is not set
+CONFIG_FIREWIRE_KUNIT_PACKET_SERDES_TEST=m
CONFIG_FIREWIRE_KUNIT_UAPI_TEST=m
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_NET=m
@@ -2222,6 +2239,7 @@ CONFIG_FPGA_MGR_ICE40_SPI=m
CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m
CONFIG_FPGA_MGR_MACHXO2_SPI=m
# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+CONFIG_FPGA_MGR_XILINX_SELECTMAP=m
CONFIG_FPGA_MGR_XILINX_SPI=m
CONFIG_FPGA_MGR_ZYNQ_FPGA=m
CONFIG_FPGA_REGION=m
@@ -2262,6 +2280,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
CONFIG_FUEL_GAUGE_MM8013=m
CONFIG_FUJITSU_ES=m
@@ -2315,7 +2334,6 @@ CONFIG_GAMEPORT_NS558=m
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2366,6 +2384,7 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_FTGPIO010 is not set
CONFIG_GPIO_FXL6408=m
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+CONFIG_GPIO_GRANITERAPIDS=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2582,6 +2601,7 @@ CONFIG_HID_VIVALDI=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+CONFIG_HID_WINWING=m
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2767,6 +2787,7 @@ CONFIG_I2C_VIAPRO=m
CONFIG_I2C_VIRTIO=m
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+CONFIG_I2C_ZHAOXIN=m
# CONFIG_I3C is not set
# CONFIG_I40E_DCB is not set
CONFIG_I40E=m
@@ -2939,6 +2960,7 @@ CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USNIC=m
CONFIG_INFINIBAND_VMWARE_PVRDMA=m
# CONFIG_INFTL is not set
+# CONFIG_INIT_MLOCKED_ON_FREE_DEFAULT_ON is not set
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
@@ -3063,7 +3085,8 @@ CONFIG_INTEL_MEI=m
CONFIG_INTEL_MEI_ME=m
CONFIG_INTEL_MEI_PXP=m
CONFIG_INTEL_MEI_TXE=m
-# CONFIG_INTEL_MEI_VSC_HW is not set
+CONFIG_INTEL_MEI_VSC_HW=m
+CONFIG_INTEL_MEI_VSC=m
CONFIG_INTEL_MEI_WDT=m
CONFIG_INTEL_MRFLD_ADC=m
CONFIG_INTEL_MRFLD_PWRBTN=m
@@ -3110,7 +3133,7 @@ CONFIG_INTEL_TURBO_MAX_3=y
CONFIG_INTEL_TXT=y
CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
CONFIG_INTEL_VBTN=m
-# CONFIG_INTEL_VSC is not set
+CONFIG_INTEL_VSC=m
CONFIG_INTEL_VSEC=m
CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
CONFIG_INTEL_WMI_THUNDERBOLT=m
@@ -3141,6 +3164,7 @@ CONFIG_IOSCHED_BFQ=y
CONFIG_IOSF_MBI=y
CONFIG_IOSM=m
CONFIG_IO_STRICT_DEVMEM=y
+CONFIG_IO_URING=y
# CONFIG_IP5XXX_POWER is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_IPTABLES=m
@@ -3516,6 +3540,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
CONFIG_KVM_AMD=m
@@ -3523,6 +3548,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3652,6 +3678,8 @@ CONFIG_LED_TRIGGER_PHY=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+CONFIG_LENOVO_SE10_WDT=m
+CONFIG_LENOVO_WMI_CAMERA=m
CONFIG_LENOVO_YMC=m
CONFIG_LG_LAPTOP=m
CONFIG_LIB80211_CRYPT_CCMP=m
@@ -3881,6 +3909,7 @@ CONFIG_MEDIA_TEST_SUPPORT=y
# CONFIG_MEDIA_TUNER_MSI001 is not set
# CONFIG_MEDIA_TUNER_MXL301RF is not set
CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_MEEGOPAD_ANX7428=m
# CONFIG_MEFFICEON is not set
CONFIG_MEGARAID_LEGACY=m
CONFIG_MEGARAID_MAILBOX=m
@@ -3889,6 +3918,7 @@ CONFIG_MEGARAID_NEWGEN=y
CONFIG_MEGARAID_SAS=m
# CONFIG_MELAN is not set
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
CONFIG_MEMCPY_KUNIT_TEST=m
@@ -4280,6 +4310,7 @@ CONFIG_MSE102X=m
CONFIG_MSI_EC=m
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+CONFIG_MSI_WMI_PLATFORM=m
# CONFIG_MSM_GCC_8939 is not set
# CONFIG_MSM_GCC_8953 is not set
# CONFIG_MSM_GPUCC_8998 is not set
@@ -4431,7 +4462,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_GATE=m
CONFIG_NET_ACT_IFE=m
-CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
CONFIG_NET_ACT_NAT=m
@@ -5096,7 +5126,6 @@ CONFIG_PAGE_POOL_STATS=y
CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
# CONFIG_PAGE_TABLE_CHECK is not set
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL_CHANGE_MESSAGE is not set
# CONFIG_PANEL is not set
@@ -5263,6 +5292,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
# CONFIG_PER_VMA_LOCK_STATS is not set
+CONFIG_PFCP=m
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
# CONFIG_PHY_CADENCE_DPHY is not set
@@ -5489,7 +5519,7 @@ CONFIG_PTP_1588_CLOCK_IDT82P33=m
CONFIG_PTP_1588_CLOCK_IDTCM=m
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_PCH=m
CONFIG_PTP_1588_CLOCK_VMW=m
@@ -5518,6 +5548,7 @@ CONFIG_PWM=y
CONFIG_PWRSEQ_EMMC=m
CONFIG_PWRSEQ_SD8787=m
CONFIG_PWRSEQ_SIMPLE=m
+CONFIG_QAT_VFIO_PCI=m
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA7000_UART is not set
CONFIG_QCA807X_PHY=m
@@ -5720,6 +5751,7 @@ CONFIG_REGULATOR_RTQ2134=m
CONFIG_REGULATOR_RTQ2208=m
CONFIG_REGULATOR_RTQ6752=m
# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SUN20I is not set
CONFIG_REGULATOR_SY7636A=m
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
@@ -5760,15 +5792,12 @@ CONFIG_RESET_GPIO=m
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RESET_TI_TPS380X=m
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL=m
# CONFIG_RH_DISABLE_DEPRECATED is not set
-CONFIG_RH_FEDORA=y
CONFIG_RICHTEK_RTQ6056=m
CONFIG_RING_BUFFER_BENCHMARK=m
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
@@ -5917,6 +5946,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
CONFIG_RTC_DRV_RX8010=m
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SA1100 is not set
@@ -5963,6 +5993,7 @@ CONFIG_RTLLIB=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+CONFIG_RTW88_8723CS=m
CONFIG_RTW88_8723DE=m
CONFIG_RTW88_8723DS=m
CONFIG_RTW88_8723DU=m
@@ -5982,6 +6013,7 @@ CONFIG_RTW89_8851BE=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -6215,6 +6247,7 @@ CONFIG_SENSORS_ADM1031=m
CONFIG_SENSORS_ADM1266=m
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADP1050=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_ADS7871=m
CONFIG_SENSORS_ADT7310=m
@@ -6298,6 +6331,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_LENOVO_EC=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LIS3LV02D=m
@@ -6456,6 +6490,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_XDP710=m
# CONFIG_SENSORS_XDPE122 is not set
CONFIG_SENSORS_XDPE152=m
# CONFIG_SENSORS_XGENE is not set
@@ -6506,9 +6541,9 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_SERIAL_RP2 is not set
-CONFIG_SERIAL_SC16IS7XX_I2C=y
+CONFIG_SERIAL_SC16IS7XX_I2C=m
CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
+CONFIG_SERIAL_SC16IS7XX_SPI=m
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_SPRD is not set
@@ -6579,7 +6614,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -6590,6 +6624,7 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
# CONFIG_SMB_SERVER is not set
CONFIG_SMC_DIAG=m
+# CONFIG_SMC_LO is not set
CONFIG_SMC=m
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -6804,6 +6839,7 @@ CONFIG_SND_SOC_AK5558=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_AMD_ACP3x=m
CONFIG_SND_SOC_AMD_ACP5x=m
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
CONFIG_SND_SOC_AMD_ACP=m
@@ -6833,6 +6869,7 @@ CONFIG_SND_SOC_AW88395=m
CONFIG_SND_SOC_AW88399=m
CONFIG_SND_SOC_BD28623=m
CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
CONFIG_SND_SOC_CHV3_CODEC=m
CONFIG_SND_SOC_CHV3_I2S=m
CONFIG_SND_SOC_CROS_EC_CODEC=m
@@ -7035,6 +7072,7 @@ CONFIG_SND_SOC_PCM3060_SPI=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+CONFIG_SND_SOC_PCM6240=m
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -7270,6 +7308,7 @@ CONFIG_SND_XEN_FRONTEND=m
CONFIG_SND_YMFPCI=m
CONFIG_SNET_VDPA=m
# CONFIG_SOC_TI is not set
+CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -7523,6 +7562,7 @@ CONFIG_TCG_TIS_SPI=m
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -8139,6 +8179,7 @@ CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ONBOARD_DEV=m
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG_FSM is not set
@@ -8429,6 +8470,7 @@ CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX412=m
CONFIG_VIDEO_IMX415=m
+CONFIG_VIDEO_INTEL_IPU6=m
CONFIG_VIDEO_IPU3_CIO2=m
CONFIG_VIDEO_IPU3_IMGU=m
CONFIG_VIDEO_IR_I2C=m
@@ -8455,7 +8497,7 @@ CONFIG_VIDEO_MT9V032=m
CONFIG_VIDEO_MT9V111=m
CONFIG_VIDEO_MXB=m
CONFIG_VIDEO_OG01A1B=m
-# CONFIG_VIDEO_OV01A10 is not set
+CONFIG_VIDEO_OV01A10=m
CONFIG_VIDEO_OV02A10=m
CONFIG_VIDEO_OV08D10=m
CONFIG_VIDEO_OV08X40=m
@@ -8465,7 +8507,7 @@ CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV2659=m
CONFIG_VIDEO_OV2680=m
CONFIG_VIDEO_OV2685=m
-# CONFIG_VIDEO_OV2740 is not set
+CONFIG_VIDEO_OV2740=m
CONFIG_VIDEO_OV4689=m
CONFIG_VIDEO_OV5640=m
CONFIG_VIDEO_OV5645=m
@@ -8523,7 +8565,7 @@ CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_STM32_DMA2D=m
CONFIG_VIDEO_ST_MIPID02=m
CONFIG_VIDEO_ST_VGXY61=m
-# CONFIG_VIDEO_TC358743_CEC is not set
+CONFIG_VIDEO_TC358743_CEC=y
CONFIG_VIDEO_TC358743=m
CONFIG_VIDEO_TC358746=m
CONFIG_VIDEO_TDA1997X=m
@@ -8578,6 +8620,7 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
@@ -8793,6 +8836,7 @@ CONFIG_X86_PLATFORM_DRIVERS_HP=y
CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+CONFIG_X86_POSTED_MSI=y
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
@@ -8913,6 +8957,7 @@ CONFIG_YENTA=m
# CONFIG_YENTA_TOSHIBA is not set
CONFIG_YOGABOOK=m
CONFIG_YOGABOOK_WMI=m
+CONFIG_YT2_1380=m
CONFIG_Z3FOLD=y
CONFIG_ZBUD=y
# CONFIG_ZD1211RW_DEBUG is not set
diff --git a/SOURCES/kernel-x86_64-rhel.config b/SOURCES/kernel-x86_64-rhel.config
index f860263..d9c818d 100644
--- a/SOURCES/kernel-x86_64-rhel.config
+++ b/SOURCES/kernel-x86_64-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -59,6 +59,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -106,6 +107,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -128,12 +130,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -144,6 +148,7 @@ CONFIG_ADDRESS_MASKING=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -200,6 +205,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -226,6 +232,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -244,17 +251,21 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -291,10 +302,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -303,6 +318,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -413,6 +429,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -464,7 +481,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -624,6 +641,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -650,7 +668,6 @@ CONFIG_CACHEFILES=m
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -805,6 +822,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -905,8 +923,6 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -918,9 +934,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
@@ -1029,6 +1043,7 @@ CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1284,7 +1299,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
CONFIG_DL2K=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
@@ -1398,6 +1413,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1508,6 +1526,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1531,12 +1550,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1568,6 +1589,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1610,6 +1632,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1728,6 +1751,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_AMD64=m
@@ -1980,6 +2004,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ES=m
@@ -2028,7 +2053,6 @@ CONFIG_GACT_PROB=y
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2074,6 +2098,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2288,6 +2313,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2465,6 +2491,7 @@ CONFIG_I2C_VIAPRO=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2491,7 +2518,7 @@ CONFIG_IDLE_INJECT=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
# CONFIG_IE6XX_WDT is not set
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2591,7 +2618,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
+CONFIG_INFINIBAND_HFI1=m
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2607,7 +2634,7 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -3033,6 +3060,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3041,10 +3069,10 @@ CONFIG_KERNEL_GZIP=y
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_JUMP=y
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3107,6 +3135,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3117,6 +3146,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3228,6 +3258,8 @@ CONFIG_LEGACY_TIOCSTI=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3435,10 +3467,12 @@ CONFIG_MEDIA_TUNER_M88RS6000T=m
CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3815,6 +3849,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3921,7 +3956,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4229,7 +4263,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4486,7 +4520,6 @@ CONFIG_PAGE_POOL_STATS=y
CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
# CONFIG_PAGE_TABLE_CHECK is not set
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL is not set
CONFIG_PANIC_ON_OOPS=y
@@ -4624,6 +4657,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4635,6 +4669,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4707,6 +4742,7 @@ CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4852,7 +4888,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_VMW=m
CONFIG_PTP_1588_CLOCK=y
@@ -4872,9 +4908,10 @@ CONFIG_PWM_LPSS_PLATFORM=m
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4915,7 +4952,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5070,8 +5107,6 @@ CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -5212,6 +5247,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5252,6 +5288,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5271,6 +5308,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5508,6 +5546,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_ADT7310 is not set
@@ -5591,6 +5630,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5741,6 +5781,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5788,6 +5829,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5851,7 +5893,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -5862,6 +5903,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
# CONFIG_SMSC37B787_WDT is not set
@@ -6058,6 +6100,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6082,6 +6125,7 @@ CONFIG_SND_SOC_AMD_YC_MACH=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6096,7 +6140,7 @@ CONFIG_SND_SOC_CS35L41_SPI=m
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L56_I2C is not set
CONFIG_SND_SOC_CS35L56_SDW=m
-# CONFIG_SND_SOC_CS35L56_SPI is not set
+CONFIG_SND_SOC_CS35L56_SPI=m
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
@@ -6281,6 +6325,7 @@ CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6511,6 +6556,7 @@ CONFIG_SND_XEN_FRONTEND=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6720,6 +6766,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7235,6 +7282,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7502,6 +7550,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7641,11 +7690,12 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_IOMMU=y
-# CONFIG_VIRTIO_MEM is not set
+CONFIG_VIRTIO_MEM=m
CONFIG_VIRTIO_MENU=y
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
# CONFIG_VIRTIO_MMIO is not set
@@ -7673,7 +7723,7 @@ CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMWARE_BALLOON=m
CONFIG_VMWARE_PVSCSI=m
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
@@ -7799,6 +7849,7 @@ CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+# CONFIG_X86_POSTED_MSI is not set
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
diff --git a/SOURCES/kernel-x86_64-rt-debug-rhel.config b/SOURCES/kernel-x86_64-rt-debug-rhel.config
index 51230c9..b606b47 100644
--- a/SOURCES/kernel-x86_64-rt-debug-rhel.config
+++ b/SOURCES/kernel-x86_64-rt-debug-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -59,6 +59,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -106,6 +107,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -128,12 +130,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -144,6 +148,7 @@ CONFIG_ADDRESS_MASKING=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -200,6 +205,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -226,6 +232,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -244,17 +251,21 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -291,10 +302,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -303,6 +318,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -413,6 +429,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -464,7 +481,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -624,6 +641,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -650,7 +668,6 @@ CONFIG_CACHEFILES=m
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -805,6 +822,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -905,8 +923,6 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -918,9 +934,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
CONFIG_CRAMFS_BLOCKDEV=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
@@ -1030,6 +1044,7 @@ CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1294,7 +1309,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
CONFIG_DL2K=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
@@ -1408,6 +1423,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1518,6 +1536,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1541,12 +1560,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1578,6 +1599,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1620,6 +1642,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1774,6 +1797,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_AMD64=m
@@ -2034,6 +2058,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ES=m
@@ -2083,7 +2108,6 @@ CONFIG_GACT_PROB=y
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2129,6 +2153,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2344,6 +2369,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2521,6 +2547,7 @@ CONFIG_I2C_VIAPRO=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2547,7 +2574,7 @@ CONFIG_IDLE_INJECT=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
# CONFIG_IE6XX_WDT is not set
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2647,7 +2674,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
+CONFIG_INFINIBAND_HFI1=m
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2663,7 +2690,7 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -2839,8 +2866,8 @@ CONFIG_IOMMU_DEBUGFS=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
-CONFIG_IOMMUFD=m
-# CONFIG_IOMMUFD_TEST is not set
+CONFIG_IOMMUFD_TEST=y
+CONFIG_IOMMUFD=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# CONFIG_IOMMU_IO_PGTABLE_DART is not set
# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set
@@ -3093,6 +3120,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3101,10 +3129,10 @@ CONFIG_KERNEL_GZIP=y
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_JUMP=y
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3167,6 +3195,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3177,6 +3206,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3288,6 +3318,8 @@ CONFIG_LEGACY_TIOCSTI=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3500,10 +3532,12 @@ CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
# CONFIG_MEDIA_TUNER_TDA18250 is not set
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3880,6 +3914,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3986,7 +4021,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4294,7 +4328,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
CONFIG_NFP_DEBUG=y
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4552,7 +4586,6 @@ CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
CONFIG_PAGE_TABLE_CHECK=y
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL is not set
CONFIG_PANIC_ON_OOPS=y
@@ -4690,6 +4723,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4701,6 +4735,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4773,6 +4808,7 @@ CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4923,7 +4959,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_VMW=m
CONFIG_PTP_1588_CLOCK=y
@@ -4943,9 +4979,10 @@ CONFIG_PWM_LPSS_PLATFORM=m
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4986,7 +5023,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5144,8 +5181,6 @@ CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -5286,6 +5321,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5326,6 +5362,7 @@ CONFIG_RTL_CARDS=m
CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5345,6 +5382,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
CONFIG_RTW89_DEBUGFS=y
CONFIG_RTW89_DEBUGMSG=y
CONFIG_RTW89=m
@@ -5582,6 +5620,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_ADT7310 is not set
@@ -5665,6 +5704,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5815,6 +5855,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5862,6 +5903,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5925,7 +5967,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
# CONFIG_SLUB_CPU_PARTIAL is not set
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -5937,6 +5978,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
# CONFIG_SMSC37B787_WDT is not set
@@ -6134,6 +6176,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6158,6 +6201,7 @@ CONFIG_SND_SOC_AMD_YC_MACH=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6172,7 +6216,7 @@ CONFIG_SND_SOC_CS35L41_SPI=m
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L56_I2C is not set
CONFIG_SND_SOC_CS35L56_SDW=m
-# CONFIG_SND_SOC_CS35L56_SPI is not set
+CONFIG_SND_SOC_CS35L56_SPI=m
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
@@ -6357,6 +6401,7 @@ CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6588,6 +6633,7 @@ CONFIG_SND_XEN_FRONTEND=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6797,6 +6843,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7313,6 +7360,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7580,6 +7628,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7719,11 +7768,12 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_IOMMU=y
-# CONFIG_VIRTIO_MEM is not set
+CONFIG_VIRTIO_MEM=m
CONFIG_VIRTIO_MENU=y
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
# CONFIG_VIRTIO_MMIO is not set
@@ -7751,7 +7801,7 @@ CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMWARE_BALLOON=m
CONFIG_VMWARE_PVSCSI=m
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
@@ -7878,6 +7928,7 @@ CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+# CONFIG_X86_POSTED_MSI is not set
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
diff --git a/SOURCES/kernel-x86_64-rt-rhel.config b/SOURCES/kernel-x86_64-rt-rhel.config
index a677a68..6084234 100644
--- a/SOURCES/kernel-x86_64-rt-rhel.config
+++ b/SOURCES/kernel-x86_64-rt-rhel.config
@@ -2,7 +2,7 @@
# CONFIG_60XX_WDT is not set
CONFIG_64BIT=y
# CONFIG_6LOWPAN_DEBUGFS is not set
-CONFIG_6LOWPAN=m
+# CONFIG_6LOWPAN is not set
# CONFIG_6LOWPAN_NHC is not set
CONFIG_8139CP=m
# CONFIG_8139_OLD_RX_RESET is not set
@@ -59,6 +59,7 @@ CONFIG_ACPI_PLATFORM_PROFILE=m
CONFIG_ACPI_PRMT=y
CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
@@ -106,6 +107,7 @@ CONFIG_ACPI=y
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7150 is not set
+# CONFIG_AD7173 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
@@ -128,12 +130,14 @@ CONFIG_ACPI=y
# CONFIG_AD7816 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
+# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD8366 is not set
# CONFIG_AD8801 is not set
# CONFIG_AD9467 is not set
# CONFIG_AD9523 is not set
+# CONFIG_AD9739A is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_ADA4250 is not set
@@ -144,6 +148,7 @@ CONFIG_ADDRESS_MASKING=y
# CONFIG_ADF4377 is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADI_AXI_ADC is not set
+# CONFIG_ADI_AXI_DAC is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_ADIN1110 is not set
# CONFIG_ADIN_PHY is not set
@@ -200,6 +205,7 @@ CONFIG_AFS_FS=m
# CONFIG_AGP is not set
# CONFIG_AHCI_DWC is not set
CONFIG_AIO=y
+# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_AK09911 is not set
# CONFIG_AK8974 is not set
@@ -226,6 +232,7 @@ CONFIG_AMD_HSMP=m
CONFIG_AMD_IOMMU=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set
CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_AMD_MP2_STB=y
CONFIG_AMD_NUMA=y
CONFIG_AMD_PHY=m
CONFIG_AMD_PMC=m
@@ -244,17 +251,21 @@ CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y
# CONFIG_ANDROID_BINDER_IPC is not set
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_AP_DEBUG is not set
# CONFIG_APDS9300 is not set
+# CONFIG_APDS9306 is not set
CONFIG_APDS9802ALS=m
# CONFIG_APDS9960 is not set
CONFIG_APPLE_GMUX=m
# CONFIG_APPLE_MFI_FASTCHARGE is not set
CONFIG_APPLE_PROPERTIES=y
# CONFIG_APPLICOM is not set
+CONFIG_AP=y
CONFIG_AQTION=m
CONFIG_AQUANTIA_PHY=m
# CONFIG_AR5523 is not set
# CONFIG_ARCH_ACTIONS is not set
+# CONFIG_ARCH_AIROHA is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
@@ -291,10 +302,14 @@ CONFIG_ARM64_ERRATUM_2119858=y
CONFIG_ARM64_ERRATUM_2139208=y
CONFIG_ARM64_ERRATUM_2224489=y
CONFIG_ARM64_ERRATUM_2253138=y
+CONFIG_ARM64_ERRATUM_3194386=y
+CONFIG_ARM64_ERRATUM_3312417=y
+CONFIG_ARM64_PLATFORM_DEVICES=y
CONFIG_ARM64_USE_LSE_ATOMICS=y
# CONFIG_ARM64_VA_BITS_52 is not set
CONFIG_ARM_CMN=m
# CONFIG_ARM_MHU_V2 is not set
+# CONFIG_ARM_MHU_V3 is not set
# CONFIG_ARM_SCMI_POWER_CONTROL is not set
# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set
# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set
@@ -303,6 +318,7 @@ CONFIG_ARM_CMN=m
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set
CONFIG_ARM_SMCCC_SOC_ID=y
# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set
+# CONFIG_ARM_TSTEE is not set
# CONFIG_AS3935 is not set
# CONFIG_AS73211 is not set
CONFIG_ASN1=y
@@ -413,6 +429,7 @@ CONFIG_BALLOON_COMPACTION=y
# CONFIG_BARCO_P50_GPIO is not set
CONFIG_BAREUDP=m
CONFIG_BASE_FULL=y
+# CONFIG_BASE_SMALL is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_CW2015 is not set
@@ -464,7 +481,7 @@ CONFIG_BINFMT_SCRIPT=y
CONFIG_BITFIELD_KUNIT=m
CONFIG_BITS_TEST=m
CONFIG_BLK_CGROUP_FC_APPID=y
-# CONFIG_BLK_CGROUP_IOCOST is not set
+CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOLATENCY=y
# CONFIG_BLK_CGROUP_IOPRIO is not set
CONFIG_BLK_CGROUP=y
@@ -624,6 +641,7 @@ CONFIG_BT_HCIVHCI=m
CONFIG_BT_HIDP=m
# CONFIG_BT_HS is not set
CONFIG_BT_INTEL=m
+# CONFIG_BT_INTEL_PCIE is not set
# CONFIG_BT_LEDS is not set
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_LE=y
@@ -650,7 +668,6 @@ CONFIG_CACHEFILES=m
CONFIG_CACHESTAT_SYSCALL=y
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_CAIF is not set
-CONFIG_CALL_DEPTH_TRACKING=y
# CONFIG_CALL_THUNKS_DEBUG is not set
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_BCM=m
@@ -805,6 +822,7 @@ CONFIG_CLEANCACHE=y
CONFIG_CLK_FD_KUNIT_TEST=m
CONFIG_CLK_GATE_KUNIT_TEST=m
# CONFIG_CLK_ICST is not set
+# CONFIG_CLK_IMX95_BLK_CTL is not set
CONFIG_CLK_KUNIT_TEST=m
# CONFIG_CLK_QORIQ is not set
CONFIG_CLK_SP810=y
@@ -905,8 +923,6 @@ CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
-CONFIG_CPU_IBPB_ENTRY=y
-CONFIG_CPU_IBRS_ENTRY=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -918,9 +934,7 @@ CONFIG_CPUMASK_KUNIT_TEST=m
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_MITIGATIONS=y
CONFIG_CPUSETS=y
-CONFIG_CPU_SRSO=y
# CONFIG_CPU_THERMAL is not set
-CONFIG_CPU_UNRET_ENTRY=y
CONFIG_CRAMFS_BLOCKDEV=y
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS_MTD is not set
@@ -1030,6 +1044,7 @@ CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
CONFIG_CRYPTO_DEV_SP_CCP=y
CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_TEGRA is not set
# CONFIG_CRYPTO_DEV_VIRTIO is not set
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
CONFIG_CRYPTO_DH=y
@@ -1286,7 +1301,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DEVTMPFS=y
# CONFIG_DHT11 is not set
-CONFIG_DIMLIB=y
+CONFIG_DIMLIB=m
CONFIG_DL2K=m
# CONFIG_DLHL60D is not set
CONFIG_DLM_DEBUG=y
@@ -1400,6 +1415,9 @@ CONFIG_DRM_CIRRUS_QEMU=m
# CONFIG_DRM_DEBUG_SELFTEST is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_DISPLAY_DEBUG_DP_TUNNEL_STATE is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG is not set
CONFIG_DRM_DP_AUX_CHARDEV=y
CONFIG_DRM_DP_CEC=y
# CONFIG_DRM_ETNAVIV is not set
@@ -1510,6 +1528,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
@@ -1533,12 +1552,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
@@ -1570,6 +1591,7 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# CONFIG_DRM_PANFROST is not set
+# CONFIG_DRM_PANTHOR is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_PL111 is not set
@@ -1612,6 +1634,7 @@ CONFIG_DRM_VKMS=m
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
+# CONFIG_DRM_WERROR is not set
# CONFIG_DRM_XE is not set
# CONFIG_DRM_XEN_FRONTEND is not set
CONFIG_DRM=y
@@ -1766,6 +1789,7 @@ CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_EARLY_PRINTK_USB_XDBC=y
CONFIG_EARLY_PRINTK=y
# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EC_ACER_ASPIRE1 is not set
# CONFIG_ECHO is not set
# CONFIG_ECRYPT_FS is not set
CONFIG_EDAC_AMD64=m
@@ -2018,6 +2042,7 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_FTRACE_SYSCALLS=y
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
CONFIG_FTRACE=y
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_FUJITSU_ES=m
@@ -2067,7 +2092,6 @@ CONFIG_GACT_PROB=y
# CONFIG_GCC_PLUGIN_STACKLEAK is not set
# CONFIG_GCOV_KERNEL is not set
# CONFIG_GDB_SCRIPTS is not set
-# CONFIG_GDS_FORCE_MITIGATION is not set
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_GENERIC_CPU=y
@@ -2113,6 +2137,7 @@ CONFIG_GPIO_CDEV=y
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_HLWD is not set
@@ -2328,6 +2353,7 @@ CONFIG_HID_UCLOGIC=m
CONFIG_HID_WACOM=m
CONFIG_HID_WALTOP=m
CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
CONFIG_HID_XIAOMI=m
CONFIG_HID_XINMO=m
CONFIG_HID=y
@@ -2505,6 +2531,7 @@ CONFIG_I2C_VIAPRO=m
# CONFIG_I2C_VIRTIO is not set
# CONFIG_I2C_XILINX is not set
CONFIG_I2C=y
+# CONFIG_I2C_ZHAOXIN is not set
# CONFIG_I3C is not set
CONFIG_I40E_DCB=y
CONFIG_I40E=m
@@ -2531,7 +2558,7 @@ CONFIG_IDLE_INJECT=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_IDPF=m
# CONFIG_IE6XX_WDT is not set
-CONFIG_IEEE802154_6LOWPAN=m
+# CONFIG_IEEE802154_6LOWPAN is not set
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_ATUSB is not set
@@ -2631,7 +2658,7 @@ CONFIG_INFINIBAND_BNXT_RE=m
CONFIG_INFINIBAND_CXGB4=m
CONFIG_INFINIBAND_EFA=m
# CONFIG_INFINIBAND_ERDMA is not set
-# CONFIG_INFINIBAND_HFI1 is not set
+CONFIG_INFINIBAND_HFI1=m
# CONFIG_INFINIBAND_HNS is not set
CONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
@@ -2647,7 +2674,7 @@ CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_OPA_VNIC=m
CONFIG_INFINIBAND_QEDR=m
# CONFIG_INFINIBAND_QIB is not set
-# CONFIG_INFINIBAND_RDMAVT is not set
+CONFIG_INFINIBAND_RDMAVT=m
# CONFIG_INFINIBAND_RTRS_CLIENT is not set
# CONFIG_INFINIBAND_RTRS_SERVER is not set
CONFIG_INFINIBAND_SRP=m
@@ -3073,6 +3100,7 @@ CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_GZIP=y
+CONFIG_KERNEL_IMAGE_BASE=0x3FFE0000000
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
@@ -3081,10 +3109,10 @@ CONFIG_KERNEL_GZIP=y
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
+# CONFIG_KEXEC is not set
CONFIG_KEXEC_JUMP=y
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_SIG=y
-CONFIG_KEXEC=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
@@ -3147,6 +3175,7 @@ CONFIG_KUNIT_ALL_TESTS=m
CONFIG_KUNIT_DEBUGFS=y
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
CONFIG_KUNIT_EXAMPLE_TEST=m
+# CONFIG_KUNIT_FAULT_TEST is not set
CONFIG_KUNIT=m
CONFIG_KUNIT_TEST=m
# CONFIG_KUNPENG_HCCS is not set
@@ -3157,6 +3186,7 @@ CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_HYPERV=y
CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_KVM=m
CONFIG_KVM_MAX_NR_VCPUS=4096
CONFIG_KVM_MMU_AUDIT=y
@@ -3268,6 +3298,8 @@ CONFIG_LEGACY_TIOCSTI=y
# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
# CONFIG_LEGACY_VSYSCALL_NONE is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
+# CONFIG_LENOVO_SE10_WDT is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_LENOVO_YMC is not set
# CONFIG_LG_LAPTOP is not set
CONFIG_LIBCRC32C=y
@@ -3480,10 +3512,12 @@ CONFIG_MEDIA_TUNER_QM1D1C0042=m
CONFIG_MEDIA_TUNER_SI2157=m
# CONFIG_MEDIA_TUNER_TDA18250 is not set
CONFIG_MEDIA_USB_SUPPORT=y
+# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_NEWGEN is not set
CONFIG_MEGARAID_SAS=m
CONFIG_MELLANOX_PLATFORM=y
+# CONFIG_MEM_ALLOC_PROFILING is not set
CONFIG_MEMBARRIER=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG=y
@@ -3860,6 +3894,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_MSI_EC is not set
CONFIG_MSI_LAPTOP=m
CONFIG_MSI_WMI=m
+# CONFIG_MSI_WMI_PLATFORM is not set
CONFIG_MSPRO_BLOCK=m
CONFIG_MT7601U=m
# CONFIG_MT7603E is not set
@@ -3966,7 +4001,6 @@ CONFIG_NET_ACT_CT=m
CONFIG_NET_ACT_GACT=m
# CONFIG_NET_ACT_GATE is not set
# CONFIG_NET_ACT_IFE is not set
-# CONFIG_NET_ACT_IPT is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_MPLS=m
# CONFIG_NET_ACT_NAT is not set
@@ -4274,7 +4308,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NFP_APP_ABM_NIC=y
CONFIG_NFP_APP_FLOWER=y
# CONFIG_NFP_DEBUG is not set
-CONFIG_NFP=m
+# CONFIG_NFP is not set
CONFIG_NFP_NET_IPSEC=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_REJECT_IPV6=m
@@ -4531,7 +4565,6 @@ CONFIG_PAGE_POOL_STATS=y
CONFIG_PAGE_REPORTING=y
CONFIG_PAGE_SIZE_4KB=y
# CONFIG_PAGE_TABLE_CHECK is not set
-CONFIG_PAGE_TABLE_ISOLATION=y
CONFIG_PANASONIC_LAPTOP=m
# CONFIG_PANEL is not set
CONFIG_PANIC_ON_OOPS=y
@@ -4669,6 +4702,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=m
CONFIG_PERF_EVENTS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_PER_VMA_LOCK_STATS=y
+# CONFIG_PFCP is not set
# CONFIG_PHANTOM is not set
# CONFIG_PHONET is not set
CONFIG_PHY_BCM_SR_USB=m
@@ -4680,6 +4714,7 @@ CONFIG_PHY_BCM_SR_USB=m
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_CPCAP_USB is not set
# CONFIG_PHY_FSL_LYNX_28G is not set
+# CONFIG_PHY_FSL_SAMSUNG_HDMI_PHY is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HI3670_USB is not set
@@ -4752,6 +4787,7 @@ CONFIG_PINCTRL_METEORPOINT=m
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_SC7180 is not set
# CONFIG_PINCTRL_SC8180X is not set
+# CONFIG_PINCTRL_SCMI is not set
# CONFIG_PINCTRL_SDM660 is not set
# CONFIG_PINCTRL_SDM845 is not set
# CONFIG_PINCTRL_SM8150 is not set
@@ -4901,7 +4937,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_INES is not set
CONFIG_PTP_1588_CLOCK_KVM=m
-# CONFIG_PTP_1588_CLOCK_MOCK is not set
+CONFIG_PTP_1588_CLOCK_MOCK=m
# CONFIG_PTP_1588_CLOCK_OCP is not set
CONFIG_PTP_1588_CLOCK_VMW=m
CONFIG_PTP_1588_CLOCK=y
@@ -4921,9 +4957,10 @@ CONFIG_PWM_LPSS_PLATFORM=m
# CONFIG_PWM_PCA9685 is not set
# CONFIG_PWM_XILINX is not set
CONFIG_PWM=y
-# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_PWRSEQ_EMMC=m
# CONFIG_PWRSEQ_SD8787 is not set
-# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_PWRSEQ_SIMPLE=m
+# CONFIG_QAT_VFIO_PCI is not set
# CONFIG_QCA7000_SPI is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QCA808X_PHY is not set
@@ -4964,7 +5001,7 @@ CONFIG_QED=m
CONFIG_QED_SRIOV=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
# CONFIG_QLCNIC is not set
# CONFIG_QLGE is not set
# CONFIG_QNX4FS_FS is not set
@@ -5122,8 +5159,6 @@ CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set
CONFIG_RESOURCE_KUNIT_TEST=m
-CONFIG_RETHUNK=y
-CONFIG_RETPOLINE=y
# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
# CONFIG_RFKILL_GPIO is not set
@@ -5264,6 +5299,7 @@ CONFIG_RTC_DRV_RX4581=m
# CONFIG_RTC_DRV_RX6110 is not set
# CONFIG_RTC_DRV_RX8010 is not set
CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_RX8111 is not set
CONFIG_RTC_DRV_RX8581=m
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_SD3078 is not set
@@ -5304,6 +5340,7 @@ CONFIG_RTL_CARDS=m
# CONFIG_RTLWIFI_DEBUG is not set
CONFIG_RTLWIFI=m
# CONFIG_RTS5208 is not set
+# CONFIG_RTW88_8723CS is not set
CONFIG_RTW88_8723DE=m
# CONFIG_RTW88_8723DS is not set
# CONFIG_RTW88_8723DU is not set
@@ -5323,6 +5360,7 @@ CONFIG_RTW88=m
CONFIG_RTW89_8852AE=m
CONFIG_RTW89_8852BE=m
CONFIG_RTW89_8852CE=m
+# CONFIG_RTW89_8922AE is not set
# CONFIG_RTW89_DEBUGFS is not set
# CONFIG_RTW89_DEBUGMSG is not set
CONFIG_RTW89=m
@@ -5560,6 +5598,7 @@ CONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1266 is not set
CONFIG_SENSORS_ADM1275=m
CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADP1050 is not set
CONFIG_SENSORS_ADS7828=m
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_ADT7310 is not set
@@ -5643,6 +5682,7 @@ CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
CONFIG_SENSORS_K10TEMP=m
CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_LENOVO_EC is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LIS3_I2C=m
CONFIG_SENSORS_LM25066=m
@@ -5793,6 +5833,7 @@ CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
CONFIG_SENSORS_W83L785TS=m
CONFIG_SENSORS_W83L786NG=m
+# CONFIG_SENSORS_XDP710 is not set
# CONFIG_SENSORS_XDPE122 is not set
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XGENE is not set
@@ -5840,6 +5881,7 @@ CONFIG_SERIAL_JSM=m
CONFIG_SERIAL_MULTI_INSTANTIATE=m
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_SERIAL_RP2 is not set
+# CONFIG_SERIAL_SC16IS7XX_CORE is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SIFIVE is not set
@@ -5903,7 +5945,6 @@ CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP=m
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_SLIP_SMART=y
-CONFIG_SLS=y
# CONFIG_SLUB_CPU_PARTIAL is not set
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_DEBUG=y
@@ -5915,6 +5956,7 @@ CONFIG_SLUB=y
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_SMB_SERVER is not set
# CONFIG_SMC is not set
+# CONFIG_SMC_LO is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
# CONFIG_SMSC37B787_WDT is not set
@@ -6111,6 +6153,7 @@ CONFIG_SND_SEQ_UMP=y
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
CONFIG_SND_SOC_AMD_ACP6x=m
CONFIG_SND_SOC_AMD_ACP_COMMON=m
# CONFIG_SND_SOC_AMD_ACP is not set
@@ -6135,6 +6178,7 @@ CONFIG_SND_SOC_AMD_YC_MACH=m
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
+CONFIG_SND_SOC_CARD_KUNIT_TEST=m
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CHV3_I2S is not set
# CONFIG_SND_SOC_CROS_EC_CODEC is not set
@@ -6149,7 +6193,7 @@ CONFIG_SND_SOC_CS35L41_SPI=m
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L56_I2C is not set
CONFIG_SND_SOC_CS35L56_SDW=m
-# CONFIG_SND_SOC_CS35L56_SPI is not set
+CONFIG_SND_SOC_CS35L56_SPI=m
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
@@ -6334,6 +6378,7 @@ CONFIG_SND_SOC_NAU8825=m
CONFIG_SND_SOC_PCM512x_I2C=m
CONFIG_SND_SOC_PCM512x=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_QCOM is not set
# CONFIG_SND_SOC_QDSP6 is not set
@@ -6564,6 +6609,7 @@ CONFIG_SND_XEN_FRONTEND=m
# CONFIG_SNET_VDPA is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# CONFIG_SOC_TI is not set
+# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_SOFT_WATCHDOG=m
CONFIG_SOLARIS_X86_PARTITION=y
@@ -6773,6 +6819,7 @@ CONFIG_TCG_TIS_SPI=y
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
CONFIG_TCG_TIS=y
+CONFIG_TCG_TPM2_HMAC=y
CONFIG_TCG_TPM=y
CONFIG_TCG_VTPM_PROXY=m
# CONFIG_TCG_XEN is not set
@@ -7289,6 +7336,7 @@ CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ONBOARD_HUB=m
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
# CONFIG_USB_OTG is not set
@@ -7556,6 +7604,7 @@ CONFIG_VIDEO_HDPVR=m
# CONFIG_VIDEO_IMX355 is not set
# CONFIG_VIDEO_IMX412 is not set
# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
# CONFIG_VIDEO_IPU3_CIO2 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_IVTV_ALSA is not set
@@ -7695,11 +7744,12 @@ CONFIG_VIRT_DRIVERS=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_CONSOLE=m
+# CONFIG_VIRTIO_DEBUG is not set
CONFIG_VIRTIO_FS=m
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_IOMMU=y
-# CONFIG_VIRTIO_MEM is not set
+CONFIG_VIRTIO_MEM=m
CONFIG_VIRTIO_MENU=y
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
# CONFIG_VIRTIO_MMIO is not set
@@ -7727,7 +7777,7 @@ CONFIG_VMGENID=y
# CONFIG_VMLINUX_MAP is not set
CONFIG_VMWARE_BALLOON=m
CONFIG_VMWARE_PVSCSI=m
-# CONFIG_VMWARE_VMCI is not set
+CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VP_VDPA=m
@@ -7854,6 +7904,7 @@ CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=m
CONFIG_X86_PM_TIMER=y
+# CONFIG_X86_POSTED_MSI is not set
CONFIG_X86_POWERNOW_K8=m
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_SGX_KVM=y
diff --git a/SOURCES/kernel.changelog b/SOURCES/kernel.changelog
index de1e72f..c2a6705 100644
--- a/SOURCES/kernel.changelog
+++ b/SOURCES/kernel.changelog
@@ -1,388 +1,433 @@
-* Sat Jul 27 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.12-0]
-- Linux v6.9.12
+* Mon Aug 05 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.10.3-0]
+- Bluetooth: hci_event: Fix setting DISCOVERY_FINDING for passive scanning (Luiz Augusto von Dentz)
+- Linux v6.10.3
Resolves:
-* Thu Jul 25 2024 Augusto Caringi <acaringi@redhat.com> [6.9.11-0]
-- Linux v6.9.11
+* Sat Jul 27 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.10.2-0]
+- Linux v6.10.2
Resolves:
-* Thu Jul 18 2024 Augusto Caringi <acaringi@redhat.com> [6.9.10-0]
-- Linux v6.9.10
+* Wed Jul 24 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.10.1-0]
+- Initial set up for stable Fedora branch (Justin M. Forbes)
+- Reset RHEL_RELEASE for the 6.11 cycle (Justin M. Forbes)
+- redhat/configs: Enable CONFIG_VMWARE_VMCI/CONFIG_VMWARE_VMCI_VSOCKETS for RHEL (Vitaly Kuznetsov)
+- Linux v6.10.1
Resolves:
-* Thu Jul 11 2024 Augusto Caringi <acaringi@redhat.com> [6.9.9-0]
-- Linux v6.9.9
+* Mon Jul 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-64]
+- Linux v6.10.0
Resolves:
-* Fri Jul 05 2024 Augusto Caringi <acaringi@redhat.com> [6.9.8-0]
-- Add BugsFixed for 6.9 (Justin M. Forbes)
-- Turn on USB_SERIAL_F81232 for Fedora (Justin M. Forbes)
-- Linux v6.9.8
+* Sun Jul 14 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.4d145e3f830b.63]
+- Consolidate configs to common for 6.10 (Justin M. Forbes)
+- Linux v6.10.0-0.rc7.4d145e3f830b
Resolves:
-* Thu Jun 27 2024 Augusto Caringi <acaringi@redhat.com> [6.9.7-0]
-- ACPI: scan: Ignore camera graph port nodes on all Dell Tiger, Alder and Raptor Lake models (Hans de Goede)
-- Linux v6.9.7
+* Sat Jul 13 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.528dd46d0fc3.62]
+- redhat/configs: Enable CONFIG_PTP_1588_CLOCK_MOCK in kernel-modules-internal (Davide Caratti)
+- fedora: enabled XE GPU drivers on all arches (Peter Robinson)
+- Flip SND_SOC_CS35L56_SPI from off to module for RHEL (Justin M. Forbes)
+- Flip DIMLIB from built-in to module for RHEL (Justin M. Forbes)
+- Linux v6.10.0-0.rc7.528dd46d0fc3
Resolves:
-* Fri Jun 21 2024 Augusto Caringi <acaringi@redhat.com> [6.9.6-0]
-- Linux v6.9.6
+* Fri Jul 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.43db1e03c086.61]
+- Linux v6.10.0-0.rc7.43db1e03c086
Resolves:
-* Sun Jun 16 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.5-0]
-- Linux v6.9.5
+* Thu Jul 11 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.9d9a2f29aefd.60]
+- Linux v6.10.0-0.rc7.9d9a2f29aefd
Resolves:
-* Wed Jun 12 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.4-0]
-- Add libbpf workaround for F39 to patches (Justin M. Forbes)
-- Linux v6.9.4
+* Wed Jul 10 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.34afb82a3c67.59]
+- not upstream: drop openssl ENGINE API usage (Jan Stancek)
+- Linux v6.10.0-0.rc7.34afb82a3c67
Resolves:
-* Thu May 30 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.3-0]
-- Linux v6.9.3
+* Mon Jul 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.4376e966ecb7.58]
+- Also remove the zfcpdump BASE_SMALL config (Justin M. Forbes)
+- Linux v6.10.0-0.rc7.4376e966ecb7
Resolves:
-* Sun May 26 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.2-0]
-- redhat/configs: fedora: aarch64: Re-enable CUSE (Neal Gompa)
-- Linux v6.9.2
+* Mon Jul 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc7.57]
+- Linux v6.10.0-0.rc7
Resolves:
-* Tue May 21 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.1-0]
-- Fix mismatch in IO_URING since we dropped the RHEL patch (Justin M. Forbes)
-- Set up for stable Fedora (Justin M. Forbes)
-- Linux v6.9.1
+* Sun Jul 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.c6653f49e4fd.56]
+- Linux v6.10.0-0.rc6.c6653f49e4fd
Resolves:
-* Mon May 13 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.0-1]
-- Reset RHEL_RELEASE to 0 for 6.10 (Justin M. Forbes)
-- configs: move CONFIG_BLK_DEV_UBLK into rhel/configs/generic (Ming Lei)
-- configs: move CONFIG_BLK_SED_OPAL into redhat/configs/common/generic (Ming Lei)
-- RHEL-21097: rhel: aarch64 stop blocking a number of HW sensors (Peter Robinson)
-- redhat/configs: enable RTL8822BU for rhel (Jose Ignacio Tornos Martinez)
-- redhat/configs: remove CONFIG_DMA_PERNUMA_CMA and switch CONFIG_DMA_NUMA_CMA off (Jerry Snitselaar)
-- redhat: add IMA certificates (Jan Stancek)
-- redhat/kernel.spec: fix typo in move_kmod_list() variable (Jan Stancek)
+* Sat Jul 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.1dd28064d416.55]
+- Linux v6.10.0-0.rc6.1dd28064d416
Resolves:
-* Mon May 13 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-64]
-- Linux v6.9.0
+* Fri Jul 05 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.661e504db04c.54]
+- Linux v6.10.0-0.rc6.661e504db04c
Resolves:
-* Sat May 11 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.cf87f46fd34d.63]
-- Linux v6.9.0-0.rc7.cf87f46fd34d
+* Thu Jul 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.795c58e4c7fc.53]
+- Linux v6.10.0-0.rc6.795c58e4c7fc
Resolves:
-* Fri May 10 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.448b3fe5a0ea.62]
-- redhat: make filtermods.py less verbose by default (Jan Stancek)
-- Linux v6.9.0-0.rc7.448b3fe5a0ea
+* Wed Jul 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.e9d22f7a6655.52]
+- Linux v6.10.0-0.rc6.e9d22f7a6655
Resolves:
-* Thu May 09 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.45db3ab70092.61]
-- scsi: sd: condition probe_type under RHEL_DIFFERENCES (Eric Chanudet)
-- scsi: sd: remove unused sd_probe_types (Eric Chanudet)
-- Turn on INIT_ON_ALLOC_DEFAULT_ON for Fedora (Justin M. Forbes)
-- Linux v6.9.0-0.rc7.45db3ab70092
-Resolves:
+* Tue Jul 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.1dfe225e9af5.51]
+- redhat: Add cgroup kselftests to kernel-selftests-internal (Waiman Long) [RHEL-43556]
+- Revert "redhat/configs: Disable CONFIG_INFINIBAND_HFI1 and CONFIG_INFINIBAND_RDMAVT" (Kamal Heib)
+- Remove new for GITLAB_TOKEN (Don Zickus)
+- Set Fedora configs for 6.10 (Justin M. Forbes)
+- Fedora: minor driver updates (Peter Robinson)
+- Linux v6.10.0-0.rc6.1dfe225e9af5
+Resolves: RHEL-43556
-* Wed May 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.dccb07f2914c.60]
-- Consolidate configs to common for 6.9 (Justin M. Forbes)
-Resolves:
+* Mon Jul 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc6.50]
+- redhat/configs: Remove obsolete x86 CPU mitigations config files (Waiman Long)
+- redhat/configs: increase CONFIG_DEFAULT_MMAP_MIN_ADDR from 32K to 64K for aarch64 (Brian Masney)
+- redhat/configs: Re-enable CONFIG_KEXEC for Fedora (Philipp Rudo)
+- media: ipu-bridge: Add HIDs from out of tree IPU6 driver ipu-bridge copy (Hans de Goede)
+- media: ipu-bridge: Sort ipu_supported_sensors[] array by ACPI HID (Hans de Goede)
+- disable LR_WPAN for RHEL10 (Chris von Recklinghausen) [RHEL-40251]
+- Linux v6.10.0-0.rc6
+Resolves: RHEL-40251
-* Tue May 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.dccb07f2914c.59]
-- redhat/rhel_files: move tipc.ko and tipc_diag.ko to modules-extra (Xin Long) [RHEL-23931]
-- redhat: move amd-pstate-ut.ko to modules-internal (Jan Stancek)
-- redhat/configs: enable CONFIG_LEDS_TRIGGER_NETDEV also for RHEL (Michal Schmidt) [RHEL-32110]
-- redhat/configs: Remove CONFIG_AMD_IOMMU_V2 (Jerry Snitselaar)
-- Linux v6.9.0-0.rc7.dccb07f2914c
-Resolves: RHEL-23931, RHEL-32110
+* Sun Jun 30 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.8282d5af7be8.49]
+- Linux v6.10.0-0.rc5.8282d5af7be8
+Resolves:
-* Mon May 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc7.58]
-- Linux v6.9.0-0.rc7
+* Sat Jun 29 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.de0a9f448633.48]
+- Turn on USB_SERIAL_F81232 for Fedora (Justin M. Forbes)
+- Linux v6.10.0-0.rc5.de0a9f448633
Resolves:
-* Sat May 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.7367539ad4b0.57]
-- Set DEBUG_INFO_BTF_MODULES for Fedora (Justin M. Forbes)
-- Linux v6.9.0-0.rc6.7367539ad4b0
+* Fri Jun 28 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.5bbd9b249880.47]
+- Linux v6.10.0-0.rc5.5bbd9b249880
Resolves:
-* Fri May 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.f03359bca01b.56]
-- Linux v6.9.0-0.rc6.f03359bca01b
+* Thu Jun 27 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.afcd48134c58.46]
+- redhat/scripts/filtermods.py: show all parent/child kmods in report (Jan Stancek)
+- redhat/kernel.spec: capture filtermods.py return code (Jan Stancek)
+- redhat/kernel.spec: fix run of mod-denylist (Jan Stancek)
+- gitlab-ci: remove unused RHMAINTAINERS variable (Michael Hofmann)
+- gitlab-ci: use environments for jobs that need access to push/gitlab secrets (Michael Hofmann)
+- gitlab-ci: default to os-build for all maintenance jobs (Michael Hofmann)
+- gitlab-ci: use the common git repo setup cki-gating as well (Michael Hofmann)
+- gitlab-ci: help maintenance jobs to cope with missing private key (Michael Hofmann)
+- gitlab-ci: use a common git repo setup for all maintenance jobs (Michael Hofmann)
+- gitlab-ci: move repo setup script into script template holder (Michael Hofmann)
+- gitlab-ci: move maintenance job DIST variable into common template (Michael Hofmann)
+- gitlab-ci: move maintenance job rules into common template (Michael Hofmann)
+- gitlab-ci: move maintenance job retry field into common template (Michael Hofmann)
+- gitlab-ci: provide common non-secret schedule trigger variables (Michael Hofmann)
+- gitlab-ci: rename .scheduled_setup to .git_setup (Michael Hofmann)
+- gitlab-ci: move script snippets into separate template (Michael Hofmann)
+- gitlab-ci: rename maintenance jobs (Michael Hofmann)
+- gitlab-ci: introduce job template for maintenance jobs (Michael Hofmann)
+- Linux v6.10.0-0.rc5.afcd48134c58
Resolves:
-* Thu May 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.0106679839f7.55]
-- redhat: Use redhatsecureboot701 for ppc64le (Jan Stancek)
-- redhat: switch the kernel package to use certs from system-sb-certs (Jan Stancek)
-- redhat: replace redhatsecureboot303 signing key with redhatsecureboot601 (Jan Stancek)
-- redhat: drop certificates that were deprecated after GRUB's BootHole flaw (Jan Stancek)
-- redhat: correct file name of redhatsecurebootca1 (Jan Stancek)
-- redhat: align file names with names of signing keys for ppc and s390 (Jan Stancek)
+* Wed Jun 26 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.24ca36a562d6.45]
+- Turn on KASAN_HW_TAGS for Fedora aarch64 debug kernels (Justin M. Forbes)
+- Linux v6.10.0-0.rc5.24ca36a562d6
Resolves:
-* Thu May 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.0106679839f7.54]
-- Linux v6.9.0-0.rc6.0106679839f7
+* Tue Jun 25 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc5.44]
+- redhat: kernel.spec: add missing sound/soc/sof/sof-audio.h to kernel-devel package (Jaroslav Kysela)
Resolves:
-* Wed May 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.18daea77cca6.53]
-- redhat/configs: Enable CONFIG_DM_VDO in RHEL (Benjamin Marzinski)
-- redhat/configs: Enable DRM_NOUVEAU_GSP_DEFAULT everywhere (Neal Gompa)
-- Linux v6.9.0-0.rc6.18daea77cca6
+* Mon Jun 24 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.10.0-0.rc5.43]
+- redhat/kernel.spec: fix attributes of symvers file (Jan Stancek)
+- redhat: add filtermods rule for iommu tests (Jan Stancek)
+- Linux v6.10.0-0.rc5
Resolves:
-* Tue Apr 30 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.52]
-- kernel.spec: adjust for livepatching kselftests (Joe Lawrence)
-- redhat/configs: remove CONFIG_TEST_LIVEPATCH (Joe Lawrence)
-- Turn on CONFIG_RANDOM_KMALLOC_CACHES for Fedora (Justin M. Forbes)
-- Set Fedora configs for 6.9 (Justin M. Forbes)
+* Fri Jun 21 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc4.50736169ecc8.42]
+- fedora: arm: Enable basic support for S32G-VNP-RDB3 board (Enric Balletbo i Serra)
+- Linux v6.10.0-0.rc4.50736169ecc8
Resolves:
-* Mon Apr 29 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc6.51]
-- gitlab-ci: enable pipelines with c10s buildroot (Michael Hofmann)
-- Linux v6.9.0-0.rc6
+* Thu Jun 20 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc4.e5b3efbe1ab1.41]
+- Linux v6.10.0-0.rc4.e5b3efbe1ab1
Resolves:
-* Sun Apr 28 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.2c8159388952.50]
-- Linux v6.9.0-0.rc5.2c8159388952
+* Wed Jun 19 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc4.92e5605a199e.40]
+- redhat: make bnx2xx drivers unmaintained in rhel-10 (John Meneghini) [RHEL-36646 RHEL-41231]
+- Linux v6.10.0-0.rc4.92e5605a199e
+Resolves: RHEL-36646, RHEL-41231
+
+* Tue Jun 18 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc4.14d7c92f8df9.39]
+- redhat/configs: Disable CONFIG_NFP (Kamal Heib) [RHEL-36647]
+- Enable CONFIG_PWRSEQ_{SIMPLIE,EMMC} on aarch64 (Charles Mirabile)
+- Linux v6.10.0-0.rc4.14d7c92f8df9
+Resolves: RHEL-36647
+
+* Mon Jun 17 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc4.38]
+- Fix SERIAL_SC16IS7XX configs for Fedora (Justin M. Forbes)
+- Enable ALSA (CONFIG_SND) on aarch64 (Charles Mirabile) [RHEL-40411]
+- redhat: Remove DIST_BRANCH variable (Eder Zulian)
+- Linux v6.10.0-0.rc4
+Resolves: RHEL-40411
+
+* Sun Jun 16 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.a3e18a540541.37]
+- Linux v6.10.0-0.rc3.a3e18a540541
Resolves:
-* Sat Apr 27 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.5eb4573ea63d.49]
-- Linux v6.9.0-0.rc5.5eb4573ea63d
+* Sat Jun 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.44ef20baed8e.36]
+- Linux v6.10.0-0.rc3.44ef20baed8e
Resolves:
-* Fri Apr 26 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.c942a0cd3603.48]
-- Turn on ISM for Fedora (Justin M. Forbes)
-- Linux v6.9.0-0.rc5.c942a0cd3603
+* Fri Jun 14 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.d20f6b3d747c.35]
+- Linux v6.10.0-0.rc3.d20f6b3d747c
Resolves:
-* Thu Apr 25 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.e88c4cfcb7b8.47]
-- Linux v6.9.0-0.rc5.e88c4cfcb7b8
+* Thu Jun 13 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.2ccbdf43d5e7.34]
+- Linux v6.10.0-0.rc3.2ccbdf43d5e7
Resolves:
-* Wed Apr 24 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.9d1ddab261f3.46]
-- redhat/configs: enable CONFIG_TEST_LOCKUP for non-debug kernels (Čestmír Kalina)
-- redhat/rhel_files: add test_lockup.ko to modules-extra (Čestmír Kalina)
-- Turn off some Fedora UBSAN options to avoid false positives (Justin M. Forbes)
-- Linux v6.9.0-0.rc5.9d1ddab261f3
+* Wed Jun 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.2ef5971ff345.33]
+- gitlab-ci: merge ark-latest before tagging cki-gating (Michael Hofmann)
+- Linux v6.10.0-0.rc3.2ef5971ff345
Resolves:
-* Tue Apr 23 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.71b1543c83d6.45]
-- Linux v6.9.0-0.rc5.71b1543c83d6
+* Tue Jun 11 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.32]
+- gitlab-ci: do not merge ark-latest for gating pipelines for Rawhide (Michael Hofmann)
+- disable CONFIG_KVM_INTEL_PROVE_VE (Paolo Bonzini)
+- redhat: remove the merge subtrees script (Derek Barbosa)
+- redhat: rhdocs: delete .get_maintainer.conf (Derek Barbosa)
+- redhat: rhdocs: Remove the rhdocs directory (Derek Barbosa)
+- redhat/configs: Disable CONFIG_QLA3XXX (Kamal Heib) [RHEL-36646]
+Resolves: RHEL-36646
+
+* Mon Jun 10 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc3.31]
+- Linux v6.10.0-0.rc3
Resolves:
-* Mon Apr 22 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc5.44]
-- fedora: aarch64: Enable a QCom Robotics platforms requirements (Peter Robinson)
-- fedora: updates for 6.9 merge window (Peter Robinson)
-- gitlab-ci: rename GitLab jobs ark -> rawhide (Michael Hofmann)
-- Linux v6.9.0-0.rc5
+* Sun Jun 09 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.771ed66105de.30]
+- redhat/configs: fedora: Enable some drivers for IPU6 support (Hans de Goede)
+- Linux v6.10.0-0.rc2.771ed66105de
Resolves:
-* Sun Apr 21 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.977b1ef51866.43]
-- Linux v6.9.0-0.rc4.977b1ef51866
+* Sat Jun 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.dc772f8237f9.29]
+- Linux v6.10.0-0.rc2.dc772f8237f9
Resolves:
-* Sat Apr 20 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.13a2e429f644.42]
-- Linux v6.9.0-0.rc4.13a2e429f644
+* Fri Jun 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.8a92980606e3.28]
+- Linux v6.10.0-0.rc2.8a92980606e3
Resolves:
-* Fri Apr 19 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.2668e3ae2ef3.41]
-- gitlab-ci: harmonize DataWarehouse tree names (Michael Hofmann)
-- redhat/configs: Enable CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON for rhel (Jerry Snitselaar)
-- spec: make sure posttrans script doesn't fail if /boot is non-POSIX (glb)
-- Linux v6.9.0-0.rc4.2668e3ae2ef3
+* Thu Jun 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.2df0193e62cf.27]
+- redhat: add missing UKI_secureboot_cert hunk (Patrick Talbert)
+- Linux v6.10.0-0.rc2.2df0193e62cf
Resolves:
-* Thu Apr 18 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.8cd26fd90c1a.40]
-- Turn on UBSAN for Fedora (Justin M. Forbes)
-- Linux v6.9.0-0.rc4.8cd26fd90c1a
+* Wed Jun 05 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.32f88d65f01b.26]
+- redhat/kernel.spec: keep extra modules in original directories (Jan Stancek)
+- Linux v6.10.0-0.rc2.32f88d65f01b
Resolves:
-* Wed Apr 17 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.96fca68c4fbf.39]
-- Turn on XEN_BALLOON_MEMORY_HOTPLUG for Fedora (Justin M. Forbes)
+* Tue Jun 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.2ab795141095.25]
+- redhat/configs: Move CONFIG_BLK_CGROUP_IOCOST=y to common/generic (Waiman Long)
+- Turn on CONFIG_MFD_QCOM_PM8008 for Fedora aarch64 (Justin M. Forbes)
+- Linux v6.10.0-0.rc2.2ab795141095
Resolves:
-* Tue Apr 16 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.96fca68c4fbf.38]
-- Linux v6.9.0-0.rc4.96fca68c4fbf
+* Mon Jun 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc2.24]
+- Linux v6.10.0-0.rc2
Resolves:
-* Mon Apr 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc4.37]
-- Linux v6.9.0-0.rc4
+* Sun Jun 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.83814698cf48.23]
+- Linux v6.10.0-0.rc1.83814698cf48
Resolves:
-* Sun Apr 14 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.7efd0a74039f.36]
-- Linux v6.9.0-0.rc3.7efd0a74039f
+* Sat Jun 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.cc8ed4d0a848.22]
+- Linux v6.10.0-0.rc1.cc8ed4d0a848
Resolves:
-* Sat Apr 13 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.8f2c057754b2.35]
-- docs: point out that python3-pyyaml is now required (Thorsten Leemhuis)
-- Linux v6.9.0-0.rc3.8f2c057754b2
+* Fri May 31 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.4a4be1ad3a6e.21]
+- redhat: Build IMA CA certificate into the Fedora kernel (Coiby Xu)
+- Move CONFIG_RAS_FMPM to the proper location (Aristeu Rozanski)
+- redhat/configs: Remove CONFIG_NET_ACT_IPT (Ivan Vecera)
Resolves:
-* Fri Apr 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.586b5dfb51b9.34]
-- Use LLVM=1 for clang_lto build (Nikita Popov)
-- redhat: fix def_variants.yaml check (Jan Stancek)
-- Linux v6.9.0-0.rc3.586b5dfb51b9
+* Thu May 30 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.4a4be1ad3a6e.20]
+- Linux v6.10.0-0.rc1.4a4be1ad3a6e
Resolves:
-* Thu Apr 11 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.e8c39d0f57f3.33]
-- redhat: sanity check yaml files (Jan Stancek)
-- spec: rework filter-mods and mod-denylist (Jan Stancek)
-- Linux v6.9.0-0.rc3.e8c39d0f57f3
+* Wed May 29 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.e0cce98fe279.19]
+- gitlab-ci: add kernel-automotive pipelines (Michael Hofmann)
+- Enable CEC support for TC358743 (Peter Robinson)
+- fedora: arm: Enable ARCH_R9A09G057 (Peter Robinson)
+- fedora: updates for the 6.10 kernel (Peter Robinson)
+- fedora: arm: Enable the MAX96706 GMSL module (Peter Robinson)
+- Linux v6.10.0-0.rc1.e0cce98fe279
Resolves:
-* Wed Apr 10 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.2c71fdf02a95.32]
-- Linux v6.9.0-0.rc3.2c71fdf02a95
+* Tue May 28 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.2bfcfd584ff5.18]
+- Linux v6.10.0-0.rc1.2bfcfd584ff5
Resolves:
-* Tue Apr 09 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.20cb38a7af88.31]
-- Linux v6.9.0-0.rc3.20cb38a7af88
+* Mon May 27 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc1.17]
+- redhat: Switch UKI to using its own SecureBoot cert (from system-sb-certs) (Jan Stancek)
+- redhat: Add RHEL specifc .sbat section to UKI (Jan Stancek)
+- kernel.spec: add iommu selftests to kernel-selftests-internal (Eder Zulian) [RHEL-32895]
+- Linux v6.10.0-0.rc1
+Resolves: RHEL-32895
+
+* Sun May 26 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.c13320499ba0.16]
+- Linux v6.10.0-0.rc0.c13320499ba0
Resolves:
-* Mon Apr 08 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc3.30]
-- Linux v6.9.0-0.rc3
+* Sat May 25 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.56fb6f92854f.15]
+- Linux v6.10.0-0.rc0.56fb6f92854f
Resolves:
-* Sun Apr 07 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.f2f80ac80987.29]
-- Linux v6.9.0-0.rc2.f2f80ac80987
+* Fri May 24 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.6d69b6c12fce.14]
+- Linux v6.10.0-0.rc0.6d69b6c12fce
Resolves:
-* Sat Apr 06 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.6c6e47d69d82.28]
-- redhat/configs: remove CONFIG_INTEL_MENLOW as it is obsolete. (David Arcari)
-- Linux v6.9.0-0.rc2.6c6e47d69d82
+* Fri May 24 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.c760b3725e52.13]
+- redhat/configs: fedora: aarch64: Re-enable CUSE (Neal Gompa)
Resolves:
-* Fri Apr 05 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.8cb4a9a82b21.27]
-- Linux v6.9.0-0.rc2.8cb4a9a82b21
+* Thu May 23 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.c760b3725e52.12]
+- Linux v6.10.0-0.rc0.c760b3725e52
Resolves:
-* Thu Apr 04 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.c85af715cac0.26]
-- Linux v6.9.0-0.rc2.c85af715cac0
+* Wed May 22 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.29c73fc794c8.11]
+- redhat: pass correct RPM_VMLINUX_H to bpftool install (Jan Stancek)
+- rh_flags: Rename rh_features to rh_flags (Ricardo Robaina) [RHEL-32987]
+- kernel: rh_features: fix reading empty feature list from /proc (Ricardo Robaina) [RHEL-32987]
+- rh_features: move rh_features entry to sys/kernel (Ricardo Robaina) [RHEL-32987]
+- rh_features: convert to atomic allocation (Ricardo Robaina) [RHEL-32987]
+- add rh_features to /proc (Ricardo Robaina) [RHEL-32987]
+- add support for rh_features (Ricardo Robaina) [RHEL-32987]
+- Linux v6.10.0-0.rc0.29c73fc794c8
+Resolves: RHEL-32987
+
+* Tue May 21 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.8f6a15f095a6.10]
+- Drop kexec_load syscall support (Baoquan He)
+- Linux v6.10.0-0.rc0.8f6a15f095a6
Resolves:
-* Wed Apr 03 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.026e680b0a08.25]
-- arch/x86: Fix XSAVE check for x86_64-v2 check (Prarit Bhargava)
-- redhat/Makefile.variables: unquote a variable (Thorsten Leemhuis)
+* Mon May 20 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.eb6a9339efeb.9]
+- New configs in lib/kunit (Fedora Kernel Team)
+- Linux v6.10.0-0.rc0.eb6a9339efeb
Resolves:
-* Tue Apr 02 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.026e680b0a08.24]
-- redhat/configs: build in Tegra210 SPI driver (Mark Salter)
-- redhat/configs: aarch64: Enable ARM_FFA driver (Mark Salter)
-- Base automotive-devel on rt-devel (Don Zickus)
-- Linux v6.9.0-0.rc2.026e680b0a08
+* Sun May 19 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.0450d2083be6.8]
+- Linux v6.10.0-0.rc0.0450d2083be6
Resolves:
-* Mon Apr 01 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc2.23]
-- Linux v6.9.0-0.rc2
+* Sat May 18 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.4b377b4868ef.7]
+- Linux v6.10.0-0.rc0.4b377b4868ef
Resolves:
-* Sun Mar 31 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.712e14250dd2.22]
-- Linux v6.9.0-0.rc1.712e14250dd2
+* Fri May 17 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.ea5f6ad9ad96.6]
+- Turn off KUNIT_FAULT_TEST as it causes problems for CI (Justin M. Forbes)
+- Add a config entry in pending for CONFIG_DRM_MSM_VALIDATE_XML (Justin M. Forbes)
+- Linux v6.10.0-0.rc0.ea5f6ad9ad96
Resolves:
-* Sat Mar 30 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.486291a0e624.21]
-- redhat/configs: Enable CONFIG_AMDTEE for x86 (David Arcari)
-- redhat/configs: enable CONFIG_TEST_LOCKUP for debug kernel (Čestmír Kalina)
-- Linux v6.9.0-0.rc1.486291a0e624
+* Thu May 16 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.3c999d1ae3c7.5]
+- Flip CONFIG_SND_SOC_CS35L56_SPI in pending to avoid a mismatch (Justin M. Forbes)
+- Linux v6.10.0-0.rc0.3c999d1ae3c7
Resolves:
-* Fri Mar 29 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.317c7bc0ef03.20]
-- Linux v6.9.0-0.rc1.317c7bc0ef03
+* Wed May 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.1b294a1f3561.4]
+- Fix up a mismatch for RHEL (Justin M. Forbes)
+- Linux v6.10.0-0.rc0.1b294a1f3561
Resolves:
-* Thu Mar 28 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.8d025e2092e2.19]
-- Linux v6.9.0-0.rc1.8d025e2092e2
+* Wed May 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.a5131c3fdf26.3]
+- Reset changelog after rebase (Justin M. Forbes)
Resolves:
-* Wed Mar 27 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.7033999ecd7b.18]
+* Tue May 14 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.10.0-0.rc0.a5131c3fdf26.2]
+- Reset RHEL_RELEASE to 0 for 6.10 (Justin M. Forbes)
+- configs: move CONFIG_BLK_DEV_UBLK into rhel/configs/generic (Ming Lei)
+- configs: move CONFIG_BLK_SED_OPAL into redhat/configs/common/generic (Ming Lei)
+- RHEL-21097: rhel: aarch64 stop blocking a number of HW sensors (Peter Robinson)
+- redhat/configs: enable RTL8822BU for rhel (Jose Ignacio Tornos Martinez)
+- redhat/configs: remove CONFIG_DMA_PERNUMA_CMA and switch CONFIG_DMA_NUMA_CMA off (Jerry Snitselaar)
+- redhat: add IMA certificates (Jan Stancek)
+- redhat/kernel.spec: fix typo in move_kmod_list() variable (Jan Stancek)
+- redhat: make filtermods.py less verbose by default (Jan Stancek)
+- scsi: sd: condition probe_type under RHEL_DIFFERENCES (Eric Chanudet)
+- scsi: sd: remove unused sd_probe_types (Eric Chanudet)
+- Turn on INIT_ON_ALLOC_DEFAULT_ON for Fedora (Justin M. Forbes)
+- Consolidate configs to common for 6.9 (Justin M. Forbes)
+- redhat/rhel_files: move tipc.ko and tipc_diag.ko to modules-extra (Xin Long) [RHEL-23931]
+- redhat: move amd-pstate-ut.ko to modules-internal (Jan Stancek)
+- redhat/configs: enable CONFIG_LEDS_TRIGGER_NETDEV also for RHEL (Michal Schmidt) [RHEL-32110]
+- redhat/configs: Remove CONFIG_AMD_IOMMU_V2 (Jerry Snitselaar)
+- Set DEBUG_INFO_BTF_MODULES for Fedora (Justin M. Forbes)
+- redhat: Use redhatsecureboot701 for ppc64le (Jan Stancek)
+- redhat: switch the kernel package to use certs from system-sb-certs (Jan Stancek)
+- redhat: replace redhatsecureboot303 signing key with redhatsecureboot601 (Jan Stancek)
+- redhat: drop certificates that were deprecated after GRUB's BootHole flaw (Jan Stancek)
+- redhat: correct file name of redhatsecurebootca1 (Jan Stancek)
+- redhat: align file names with names of signing keys for ppc and s390 (Jan Stancek)
+- redhat/configs: Enable CONFIG_DM_VDO in RHEL (Benjamin Marzinski)
+- redhat/configs: Enable DRM_NOUVEAU_GSP_DEFAULT everywhere (Neal Gompa)
+- kernel.spec: adjust for livepatching kselftests (Joe Lawrence)
+- redhat/configs: remove CONFIG_TEST_LIVEPATCH (Joe Lawrence)
+- Turn on CONFIG_RANDOM_KMALLOC_CACHES for Fedora (Justin M. Forbes)
+- Set Fedora configs for 6.9 (Justin M. Forbes)
+- gitlab-ci: enable pipelines with c10s buildroot (Michael Hofmann)
+- Turn on ISM for Fedora (Justin M. Forbes)
+- redhat/configs: enable CONFIG_TEST_LOCKUP for non-debug kernels (Čestmír Kalina)
+- redhat/rhel_files: add test_lockup.ko to modules-extra (Čestmír Kalina)
+- Turn off some Fedora UBSAN options to avoid false positives (Justin M. Forbes)
+- fedora: aarch64: Enable a QCom Robotics platforms requirements (Peter Robinson)
+- fedora: updates for 6.9 merge window (Peter Robinson)
+- gitlab-ci: rename GitLab jobs ark -> rawhide (Michael Hofmann)
+- gitlab-ci: harmonize DataWarehouse tree names (Michael Hofmann)
+- redhat/configs: Enable CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON for rhel (Jerry Snitselaar)
+- spec: make sure posttrans script doesn't fail if /boot is non-POSIX (glb)
+- Turn on UBSAN for Fedora (Justin M. Forbes)
+- Turn on XEN_BALLOON_MEMORY_HOTPLUG for Fedora (Justin M. Forbes)
+- docs: point out that python3-pyyaml is now required (Thorsten Leemhuis)
+- Use LLVM=1 for clang_lto build (Nikita Popov)
+- redhat: fix def_variants.yaml check (Jan Stancek)
+- redhat: sanity check yaml files (Jan Stancek)
+- spec: rework filter-mods and mod-denylist (Jan Stancek)
+- redhat/configs: remove CONFIG_INTEL_MENLOW as it is obsolete. (David Arcari)
+- arch/x86: Fix XSAVE check for x86_64-v2 check (Prarit Bhargava)
+- redhat/Makefile.variables: unquote a variable (Thorsten Leemhuis)
+- redhat/configs: build in Tegra210 SPI driver (Mark Salter)
+- redhat/configs: aarch64: Enable ARM_FFA driver (Mark Salter)
+- Base automotive-devel on rt-devel (Don Zickus)
+- redhat/configs: Enable CONFIG_AMDTEE for x86 (David Arcari)
+- redhat/configs: enable CONFIG_TEST_LOCKUP for debug kernel (Čestmír Kalina)
- kernel.spec: fix libperf-debuginfo content (Jan Stancek)
- Turn on DM_VDO for Fedora (Justin M. Forbes)
- redhat: make libperf-devel require libperf %%{version}-%%{release} (Jan Stancek)
- kernel.spec: drop custom mode also for System.map ghost entry (Jan Stancek)
- Octopus merges are too conservative, serialize instead (Don Zickus)
- Add tracking branches for rt-devel (Don Zickus)
-- Linux v6.9.0-0.rc1.7033999ecd7b
-Resolves:
-
-* Tue Mar 26 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.928a87efa423.17]
- all: clean-up i915 (Peter Robinson)
- Turn on CONFIG_READ_ONLY_THP_FOR_FS for Fedora (Justin M. Forbes)
- redhat/kernel.spec.template: fix rtonly build (Jan Stancek)
- redhat/kernel.spec.template: add extra flags for tools build (Scott Weaver)
- Add iio-test-gts to mod-internal.list (Thorsten Leemhuis)
-- Linux v6.9.0-0.rc1.928a87efa423
-Resolves:
-
-* Mon Mar 25 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc1.16]
- redhat/kernel.spec.template: update license (Scott Weaver)
- Fix typo in maintaining.rst file (Augusto Caringi)
-- Linux v6.9.0-0.rc1
-Resolves:
-
-* Sun Mar 24 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.70293240c5ce.15]
-- Linux v6.9.0-0.rc0.70293240c5ce
-Resolves:
-
-* Sat Mar 23 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.bfa8f18691ed.14]
- Enable DRM_CDNS_DSI_J721E for fedora (Andrew Halaney)
-- Linux v6.9.0-0.rc0.bfa8f18691ed
-Resolves:
-
-* Fri Mar 22 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.8e938e398669.13]
-- Linux v6.9.0-0.rc0.8e938e398669
-Resolves:
-
-* Thu Mar 21 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.23956900041d.12]
-- Linux v6.9.0-0.rc0.23956900041d
-Resolves:
-
-* Wed Mar 20 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.a4145ce1e7bc.11]
- gitlab-ci: do not merge ark-latest for gating pipelines (Michael Hofmann)
- fedora: Enable MCP9600 (Peter Robinson)
- redhat/configs: Enable & consolidate BF-3 drivers config (Luiz Capitulino)
- redhat: Fix RT kernel kvm subpackage requires (Juri Lelli)
- Add new of_test module to mod-internal.list (Thorsten Leemhuis)
- Add new string kunit modules to mod-internal.list (Thorsten Leemhuis)
-- Linux v6.9.0-0.rc0.a4145ce1e7bc
-Resolves:
-
-* Tue Mar 19 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.b3603fcb79b1.10]
- redhat/kernel.spec.template: enable cross for base/RT (Peter Robinson)
- redhat/kernel.spec.template: Fix cross compiling (Peter Robinson)
- arch/x86/kernel/setup.c: fixup rh_check_supported (Scott Weaver)
-- Linux v6.9.0-0.rc0.b3603fcb79b1
-Resolves:
-
-* Mon Mar 18 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.f6cef5f8c37f.9]
-- Linux v6.9.0-0.rc0.f6cef5f8c37f
-Resolves:
-
-* Sun Mar 17 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.741e9d668aa5.8]
-- Linux v6.9.0-0.rc0.741e9d668aa5
-Resolves:
-
-* Sat Mar 16 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.66a27abac311.7]
- Enable CONFIG_USB_ONBOARD_HUB for RHEL (Charles Mirabile)
- redhat/Makefile.cross: Add CROSS_BASEONLY (Prarit Bhargava)
- gitlab-ci: fix ark-latest merging for parent pipelines running in forks (Michael Hofmann)
-- Linux v6.9.0-0.rc0.66a27abac311
-Resolves:
-
-* Fri Mar 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.e5eb28f6d1af.6]
-- Linux v6.9.0-0.rc0.e5eb28f6d1af
-Resolves:
-
-* Fri Mar 15 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.480e035fc4c7.5]
- lsm: update security_lock_kernel_down (Scott Weaver)
-Resolves:
-
-* Thu Mar 14 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.480e035fc4c7.4]
-- Linux v6.9.0-0.rc0.480e035fc4c7
-Resolves:
-
-* Wed Mar 13 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.b0546776ad3f.3]
- Fix changelog after rebase (Augusto Caringi)
-- Linux v6.9.0-0.rc0.b0546776ad3f
-Resolves:
-
-* Tue Mar 12 2024 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.9.0-0.rc0.855684c7d938.2]
- redhat: remove "END OF CHANGELOG" marker from kernel.changelog (Herton R. Krzesinski)
- gitlab-ci: enable all variants for rawhide/eln builder image gating (Michael Hofmann)
- Fedora: enable Microchip and their useful drivers (Peter Robinson)
@@ -2650,6 +2695,5 @@ Resolves:
- [initial commit] Add scripts (Laura Abbott)
- [initial commit] Add configs (Laura Abbott)
- [initial commit] Add Makefiles (Laura Abbott)
-- Linux v6.9.0-0.rc0.855684c7d938
-Resolves: rhbz#1471185, rhbz#1495307, rhbz#1509329, rhbz#1518076, rhbz#1518874, rhbz#1519554, rhbz#1546831, rhbz#1559877, rhbz#1561171, rhbz#1563590, rhbz#1565704, rhbz#1565717, rhbz#1572321, rhbz#1574502, rhbz#1590829, rhbz#1595918, rhbz#1598366, rhbz#1602033, rhbz#1609604, rhbz#1610493, rhbz#1613522, rhbz#1638087, rhbz#1652256, rhbz#1652266, rhbz#1663728, rhbz#1670017, rhbz#1722136, rhbz#1730649, rhbz#1802694, rhbz#1810301, rhbz#1821565, rhbz#1831065, rhbz#1855161, rhbz#1856174, rhbz#1856176, rhbz#1858592, rhbz#1858594, rhbz#1858596, rhbz#1858599, rhbz#1869674, rhbz#1871130, rhbz#1876435, rhbz#1876436, rhbz#1876977, rhbz#1877192, rhbz#1880486, rhbz#1890304, rhbz#1903201, rhbz#1915073, rhbz#1915290, rhbz#1930649, rhbz#1939095, rhbz#1940075, rhbz#1940794, rhbz#1943423, rhbz#1945002, rhbz#1945179, rhbz#1945477, rhbz#1947240, rhbz#1948340, rhbz#1952426, rhbz#1952863, rhbz#1953486, rhbz#1956988, rhbz#1957210, rhbz#1957219, rhbz#1957305, rhbz#1957636, rhbz#1957819, rhbz#1961178, rhbz#1962936, rhbz#1964537, rhbz#1967640, rhbz#1972795, rhbz#1976270, rhbz#1976835, rhbz#1976877, rhbz#1976884, rhbz#1977056, rhbz#1977529, rhbz#1978539, rhbz#1979379, rhbz#1981406, rhbz#1983298, rhbz#1986223, rhbz#1988254, rhbz#1988384, rhbz#1990040, rhbz#1993393, rhbz#1994858, rhbz#1998953, rhbz#2000835, rhbz#2002344, rhbz#2004233, rhbz#2004821, rhbz#2006813, rhbz#2007430, rhbz#2012226, rhbz#2014492, rhbz#2019377, rhbz#2020132, rhbz#2022578, rhbz#2023782, rhbz#2024595, rhbz#2025985, rhbz#2026319, rhbz#2027506, rhbz#2031547, rhbz#2032758, rhbz#2034670, rhbz#2038999, rhbz#2040643, rhbz#2041184, rhbz#2041186, rhbz#2041365, rhbz#2041990, rhbz#2042240, rhbz#2042241, rhbz#2043141, rhbz#2044155, rhbz#2053836, rhbz#2054579, rhbz#2062054, rhbz#2062909, rhbz#2071969, rhbz#2089765, rhbz#2115876, rhbz#2120968, rhbz#2122595, rhbz#2140017, rhbz#2142658, rhbz#2149273, rhbz#2153073, rhbz#2166911, rhbz#2188441, rhbz#2208834, rhbz#2216678, rhbz#2227793, rhbz#2231407, rhbz#2233269
-
+- Linux v6.10.0-0.rc0.a5131c3fdf26
+Resolves: RHEL-23931, RHEL-32110, rhbz#1471185, rhbz#1495307, rhbz#1509329, rhbz#1518076, rhbz#1518874, rhbz#1519554, rhbz#1546831, rhbz#1559877, rhbz#1561171, rhbz#1563590, rhbz#1565704, rhbz#1565717, rhbz#1572321, rhbz#1574502, rhbz#1590829, rhbz#1595918, rhbz#1598366, rhbz#1602033, rhbz#1609604, rhbz#1610493, rhbz#1613522, rhbz#1638087, rhbz#1652256, rhbz#1652266, rhbz#1663728, rhbz#1670017, rhbz#1722136, rhbz#1730649, rhbz#1802694, rhbz#1810301, rhbz#1821565, rhbz#1831065, rhbz#1855161, rhbz#1856174, rhbz#1856176, rhbz#1858592, rhbz#1858594, rhbz#1858596, rhbz#1858599, rhbz#1869674, rhbz#1871130, rhbz#1876435, rhbz#1876436, rhbz#1876977, rhbz#1877192, rhbz#1880486, rhbz#1890304, rhbz#1903201, rhbz#1915073, rhbz#1915290, rhbz#1930649, rhbz#1939095, rhbz#1940075, rhbz#1940794, rhbz#1943423, rhbz#1945002, rhbz#1945179, rhbz#1945477, rhbz#1947240, rhbz#1948340, rhbz#1952426, rhbz#1952863, rhbz#1953486, rhbz#1956988, rhbz#1957210, rhbz#1957219, rhbz#1957305, rhbz#1957636, rhbz#1957819, rhbz#1961178, rhbz#1962936, rhbz#1964537, rhbz#1967640, rhbz#1972795, rhbz#1976270, rhbz#1976835, rhbz#1976877, rhbz#1976884, rhbz#1977056, rhbz#1977529, rhbz#1978539, rhbz#1979379, rhbz#1981406, rhbz#1983298, rhbz#1986223, rhbz#1988254, rhbz#1988384, rhbz#1990040, rhbz#1993393, rhbz#1994858, rhbz#1998953, rhbz#2000835, rhbz#2002344, rhbz#2004233, rhbz#2004821, rhbz#2006813, rhbz#2007430, rhbz#2012226, rhbz#2014492, rhbz#2019377, rhbz#2020132, rhbz#2022578, rhbz#2023782, rhbz#2024595, rhbz#2025985, rhbz#2026319, rhbz#2027506, rhbz#2031547, rhbz#2032758, rhbz#2034670, rhbz#2038999, rhbz#2040643, rhbz#2041184, rhbz#2041186, rhbz#2041365, rhbz#2041990, rhbz#2042240, rhbz#2042241, rhbz#2043141, rhbz#2044155, rhbz#2053836, rhbz#2054579, rhbz#2062054, rhbz#2062909, rhbz#2071969, rhbz#2089765, rhbz#2115876, rhbz#2120968, rhbz#2122595, rhbz#2140017, rhbz#2142658, rhbz#2149273, rhbz#2153073, rhbz#2166911, rhbz#2188441, rhbz#2208834, rhbz#2216678, rhbz#2227793, rhbz#2231407, rhbz#2233269
diff --git a/SOURCES/lenovo-legion-laptop.patch b/SOURCES/lenovo-legion-laptop.patch
index 4bce3d3..6faae9b 100644
--- a/SOURCES/lenovo-legion-laptop.patch
+++ b/SOURCES/lenovo-legion-laptop.patch
@@ -15,7 +15,7 @@ diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 49c2c4cd8..b7d70c20e 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
-@@ -643,6 +643,16 @@ config THINKPAD_LMI
+@@ -667,6 +667,16 @@
To compile this driver as a module, choose M here: the module will
be called think-lmi.
@@ -31,19 +31,19 @@ index 49c2c4cd8..b7d70c20e 100644
+
source "drivers/platform/x86/intel/Kconfig"
- config MSI_EC
+ config ACPI_QUICKSTART
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index 52dfdf574..5f32dd9df 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
-@@ -65,6 +65,7 @@ obj-$(CONFIG_LENOVO_YMC) += lenovo-ymc.o
+@@ -66,6 +66,7 @@
obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
+obj-$(CONFIG_LEGION_LAPTOP) += legion-laptop.o
obj-$(CONFIG_YOGABOOK) += lenovo-yogabook.o
-
- # Intel
+ obj-$(CONFIG_YT2_1380) += lenovo-yoga-tab2-pro-1380-fastcharger.o
+ obj-$(CONFIG_LENOVO_WMI_CAMERA) += lenovo-wmi-camera.o
diff --git a/drivers/platform/x86/legion-laptop.c b/drivers/platform/x86/legion-laptop.c
new file mode 100644
index 000000000..5ec0a518f
diff --git a/SOURCES/linux-surface.patch b/SOURCES/linux-surface.patch
index 925163b..dd4d3b6 100644
--- a/SOURCES/linux-surface.patch
+++ b/SOURCES/linux-surface.patch
@@ -1,4 +1,4 @@
-From 24686c656a230f642f8ed6c09c184660c08cf46c Mon Sep 17 00:00:00 2001
+From fa4500c4ae1546dba5d5e4fbada8e6d0406adab0 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 9 Jun 2024 19:48:58 +0200
Subject: [PATCH] Revert "efi/x86: Set the PE/COFF header's NX compat flag
@@ -17,7 +17,7 @@ Patchset: secureboot
1 file changed, 4 insertions(+)
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
-index b5c79f43359bc..a1bbedd989e42 100644
+index b5c79f43359b..a1bbedd989e4 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -111,7 +111,11 @@ extra_header_fields:
@@ -33,9 +33,9 @@ index b5c79f43359bc..a1bbedd989e42 100644
.long 0 # SizeOfStackReserve
.long 0 # SizeOfStackCommit
--
-2.45.1
+2.45.2
-From a494cdb84ee162accff966a0012992e36e4b0c0a Mon Sep 17 00:00:00 2001
+From b161e7d8c1f16ef72ed5195aa97e6357e06bdc4e Mon Sep 17 00:00:00 2001
From: Tsuchiya Yuto <kitakar@gmail.com>
Date: Sun, 18 Oct 2020 16:42:44 +0900
Subject: [PATCH] (surface3-oemb) add DMI matches for Surface 3 with broken DMI
@@ -77,7 +77,7 @@ Patchset: surface3-oemb
3 files changed, 24 insertions(+)
diff --git a/drivers/platform/surface/surface3-wmi.c b/drivers/platform/surface/surface3-wmi.c
-index c15ed7a12784a..1ec8edb5aafaf 100644
+index c15ed7a12784..1ec8edb5aafa 100644
--- a/drivers/platform/surface/surface3-wmi.c
+++ b/drivers/platform/surface/surface3-wmi.c
@@ -37,6 +37,13 @@ static const struct dmi_system_id surface3_dmi_table[] = {
@@ -95,10 +95,10 @@ index c15ed7a12784a..1ec8edb5aafaf 100644
{ }
};
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
-index d0d24a53df746..43e06166a5d95 100644
+index 51187b1e0ed2..bfb83ce8d8f8 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
-@@ -3777,6 +3777,15 @@ static const struct dmi_system_id dmi_platform_data[] = {
+@@ -3790,6 +3790,15 @@ static const struct dmi_system_id dmi_platform_data[] = {
},
.driver_data = (void *)&intel_braswell_platform_data,
},
@@ -115,7 +115,7 @@ index d0d24a53df746..43e06166a5d95 100644
/*
* Match for the GPDwin which unfortunately uses somewhat
diff --git a/sound/soc/intel/common/soc-acpi-intel-cht-match.c b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
-index 5e2ec60e2954b..207868c699f29 100644
+index 5e2ec60e2954..207868c699f2 100644
--- a/sound/soc/intel/common/soc-acpi-intel-cht-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
@@ -27,6 +27,14 @@ static const struct dmi_system_id cht_table[] = {
@@ -134,9 +134,9 @@ index 5e2ec60e2954b..207868c699f29 100644
};
--
-2.45.1
+2.45.2
-From 1abf1feb3b521abe9f9c9e8d68d2014e90ecb20d Mon Sep 17 00:00:00 2001
+From 2497b1ba9fa349ddf764c38c46160a785a5f3475 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Tue, 3 Nov 2020 13:28:04 +0100
Subject: [PATCH] mwifiex: Add quirk resetting the PCI bridge on MS Surface
@@ -170,7 +170,7 @@ Patchset: mwifiex
3 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
-index 5f997becdbaa2..9a9929424513a 100644
+index 5f997becdbaa..9a9929424513 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -1702,9 +1702,21 @@ mwifiex_pcie_send_boot_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
@@ -196,7 +196,7 @@ index 5f997becdbaa2..9a9929424513a 100644
mwifiex_write_reg(adapter, reg->rx_rdptr, card->rxbd_rdptr | tx_wrap);
}
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
-index dd6d21f1dbfd7..f46b06f8d6435 100644
+index dd6d21f1dbfd..f46b06f8d643 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
@@ -13,7 +13,8 @@ static const struct dmi_system_id mwifiex_quirk_table[] = {
@@ -289,7 +289,7 @@ index dd6d21f1dbfd7..f46b06f8d6435 100644
static void mwifiex_pcie_set_power_d3cold(struct pci_dev *pdev)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
-index d6ff964aec5bf..5d30ae39d65ec 100644
+index d6ff964aec5b..5d30ae39d65e 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
+++ b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
@@ -4,6 +4,7 @@
@@ -301,9 +301,9 @@ index d6ff964aec5bf..5d30ae39d65ec 100644
void mwifiex_initialize_quirks(struct pcie_service_card *card);
int mwifiex_pcie_reset_d3cold_quirk(struct pci_dev *pdev);
--
-2.45.1
+2.45.2
-From 0574bff98f5f5af132783f8f72e8ef22e3f36097 Mon Sep 17 00:00:00 2001
+From 52c3a74193a1e37e241dc8a8cef0a71e843a29b5 Mon Sep 17 00:00:00 2001
From: Tsuchiya Yuto <kitakar@gmail.com>
Date: Sun, 4 Oct 2020 00:11:49 +0900
Subject: [PATCH] mwifiex: pcie: disable bridge_d3 for Surface gen4+
@@ -325,7 +325,7 @@ Patchset: mwifiex
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
-index 9a9929424513a..2273e30297766 100644
+index 9a9929424513..2273e3029776 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -377,6 +377,7 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
@@ -350,7 +350,7 @@ index 9a9929424513a..2273e30297766 100644
}
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
-index f46b06f8d6435..99b024ecbadea 100644
+index f46b06f8d643..99b024ecbade 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.c
@@ -14,7 +14,8 @@ static const struct dmi_system_id mwifiex_quirk_table[] = {
@@ -444,7 +444,7 @@ index f46b06f8d6435..99b024ecbadea 100644
static void mwifiex_pcie_set_power_d3cold(struct pci_dev *pdev)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
-index 5d30ae39d65ec..c14eb56eb9118 100644
+index 5d30ae39d65e..c14eb56eb911 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
+++ b/drivers/net/wireless/marvell/mwifiex/pcie_quirks.h
@@ -5,6 +5,7 @@
@@ -456,9 +456,9 @@ index 5d30ae39d65ec..c14eb56eb9118 100644
void mwifiex_initialize_quirks(struct pcie_service_card *card);
int mwifiex_pcie_reset_d3cold_quirk(struct pci_dev *pdev);
--
-2.45.1
+2.45.2
-From 8a4ee131ced8068371a8fa09da17d82414e6d835 Mon Sep 17 00:00:00 2001
+From 338d5143d47a9de3d5a25f1fa203f6b6a95864ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Thu, 25 Mar 2021 11:33:02 +0100
Subject: [PATCH] Bluetooth: btusb: Lower passive lescan interval on Marvell
@@ -494,7 +494,7 @@ Patchset: mwifiex
1 file changed, 15 insertions(+)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index fb716849b60f3..1e7b3798108f7 100644
+index 789c492df6fa..1e766b6c1f9a 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -65,6 +65,7 @@ static struct usb_driver btusb_driver;
@@ -513,7 +513,7 @@ index fb716849b60f3..1e7b3798108f7 100644
/* Intel Bluetooth devices */
{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_COMBINED },
-@@ -4417,6 +4419,19 @@ static int btusb_probe(struct usb_interface *intf,
+@@ -4448,6 +4450,19 @@ static int btusb_probe(struct usb_interface *intf,
if (id->driver_info & BTUSB_MARVELL)
hdev->set_bdaddr = btusb_set_bdaddr_marvell;
@@ -534,9 +534,9 @@ index fb716849b60f3..1e7b3798108f7 100644
(id->driver_info & BTUSB_MEDIATEK)) {
hdev->setup = btusb_mtk_setup;
--
-2.45.1
+2.45.2
-From fc56de38d725edc7c3856c2a2d369e1f170f202f Mon Sep 17 00:00:00 2001
+From 5030f889081c8676ae652623ad86b797b05d7221 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 27 Feb 2021 00:45:52 +0100
Subject: [PATCH] ath10k: Add module parameters to override board files
@@ -554,11 +554,11 @@ via a modprobe.d config.
Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
Patchset: ath10k
---
- drivers/net/wireless/ath/ath10k/core.c | 58 ++++++++++++++++++++++++++
- 1 file changed, 58 insertions(+)
+ drivers/net/wireless/ath/ath10k/core.c | 57 ++++++++++++++++++++++++++
+ 1 file changed, 57 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
-index fa5e2e6518313..8921b0ebf36b7 100644
+index bdf0552cd1c3..e062cc687689 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -39,6 +39,9 @@ static bool fw_diag_log;
@@ -591,7 +591,7 @@ index fa5e2e6518313..8921b0ebf36b7 100644
static const struct ath10k_hw_params ath10k_hw_params_list[] = {
{
.id = QCA988X_HW_2_0_VERSION,
-@@ -931,6 +940,42 @@ static int ath10k_init_configure_target(struct ath10k *ar)
+@@ -914,6 +923,42 @@ static int ath10k_init_configure_target(struct ath10k *ar)
return 0;
}
@@ -634,7 +634,7 @@ index fa5e2e6518313..8921b0ebf36b7 100644
static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
const char *dir,
const char *file)
-@@ -945,6 +990,19 @@ static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
+@@ -928,6 +973,18 @@ static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar,
if (dir == NULL)
dir = ".";
@@ -646,18 +646,17 @@ index fa5e2e6518313..8921b0ebf36b7 100644
+ * Unfortunately, that's not a solution that we can easily package. So
+ * we add module options to perform these overrides here.
+ */
-+
+ file = ath10k_override_board_fw_file(ar, file);
+ if (!file)
+ return ERR_PTR(-ENOENT);
+
- snprintf(filename, sizeof(filename), "%s/%s", dir, file);
- ret = firmware_request_nowarn(&fw, filename, ar->dev);
- ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot fw request '%s': %d\n",
+ if (ar->board_name) {
+ snprintf(filename, sizeof(filename), "%s/%s/%s",
+ dir, ar->board_name, file);
--
-2.45.1
+2.45.2
-From ee272e8a81f073b5475a3bb2c3085b55f181bc24 Mon Sep 17 00:00:00 2001
+From 318ef833ea6bf3a2ef7566bad79931b216bd7423 Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Thu, 30 Jul 2020 13:21:53 +0200
Subject: [PATCH] mei: me: Add Icelake device ID for iTouch
@@ -670,7 +669,7 @@ Patchset: ipts
2 files changed, 2 insertions(+)
diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
-index c3a6657dcd4a2..82eef2f4eb0a8 100644
+index c3a6657dcd4a..82eef2f4eb0a 100644
--- a/drivers/misc/mei/hw-me-regs.h
+++ b/drivers/misc/mei/hw-me-regs.h
@@ -92,6 +92,7 @@
@@ -682,7 +681,7 @@ index c3a6657dcd4a2..82eef2f4eb0a8 100644
#define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
-index 7f59dd38c32f5..a56ad5b3f7790 100644
+index 6589635f8ba3..a1df48a434e2 100644
--- a/drivers/misc/mei/pci-me.c
+++ b/drivers/misc/mei/pci-me.c
@@ -97,6 +97,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
@@ -694,9 +693,9 @@ index 7f59dd38c32f5..a56ad5b3f7790 100644
{MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
--
-2.45.1
+2.45.2
-From 8536601cfc6d7671f4c11cab4dca57674f59b349 Mon Sep 17 00:00:00 2001
+From ddcd34d797494f38ba7be0d9e46a919fda557576 Mon Sep 17 00:00:00 2001
From: Liban Hannan <liban.p@gmail.com>
Date: Tue, 12 Apr 2022 23:31:12 +0100
Subject: [PATCH] iommu: Use IOMMU passthrough mode for IPTS
@@ -720,10 +719,10 @@ Patchset: ipts
1 file changed, 29 insertions(+)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
-index e4a03588a8a0f..61bc54299a591 100644
+index f55ec1fd7942..8d95579436a9 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
-@@ -39,6 +39,11 @@
+@@ -40,6 +40,11 @@
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
@@ -735,7 +734,7 @@ index e4a03588a8a0f..61bc54299a591 100644
#define IOAPIC_RANGE_START (0xfee00000)
#define IOAPIC_RANGE_END (0xfeefffff)
#define IOVA_START_ADDR (0x1000)
-@@ -221,12 +226,14 @@ int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON);
+@@ -217,12 +222,14 @@ int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON);
int intel_iommu_enabled = 0;
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
@@ -750,7 +749,7 @@ index e4a03588a8a0f..61bc54299a591 100644
const struct iommu_ops intel_iommu_ops;
static const struct iommu_dirty_ops intel_dirty_ops;
-@@ -2401,6 +2408,9 @@ static int device_def_domain_type(struct device *dev)
+@@ -2195,6 +2202,9 @@ static int device_def_domain_type(struct device *dev)
if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
return IOMMU_DOMAIN_IDENTITY;
@@ -760,7 +759,7 @@ index e4a03588a8a0f..61bc54299a591 100644
}
return 0;
-@@ -2701,6 +2711,9 @@ static int __init init_dmars(void)
+@@ -2495,6 +2505,9 @@ static int __init init_dmars(void)
iommu_set_root_entry(iommu);
}
@@ -770,7 +769,7 @@ index e4a03588a8a0f..61bc54299a591 100644
check_tylersburg_isoch();
ret = si_domain_init(hw_pass_through);
-@@ -4871,6 +4884,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
+@@ -4617,6 +4630,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
disable_igfx_iommu = 1;
}
@@ -789,7 +788,7 @@ index e4a03588a8a0f..61bc54299a591 100644
/* G4x/GM45 integrated gfx dmar support is totally busted. */
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_igfx);
-@@ -4906,6 +4931,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
+@@ -4652,6 +4677,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
@@ -801,9 +800,9 @@ index e4a03588a8a0f..61bc54299a591 100644
{
if (risky_device(dev))
--
-2.45.1
+2.45.2
-From 664128ab9984f6c774d4064548d9b247041d2520 Mon Sep 17 00:00:00 2001
+From 6ff2cce19a707fb565e9aebf9fb2b00fe845a46a Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Sun, 11 Dec 2022 12:00:59 +0100
Subject: [PATCH] hid: Add support for Intel Precise Touch and Stylus
@@ -823,16 +822,16 @@ Patchset: ipts
drivers/hid/ipts/control.c | 486 +++++++++++++++++++++++++++++++++
drivers/hid/ipts/control.h | 126 +++++++++
drivers/hid/ipts/desc.h | 80 ++++++
- drivers/hid/ipts/eds1.c | 103 +++++++
+ drivers/hid/ipts/eds1.c | 104 +++++++
drivers/hid/ipts/eds1.h | 35 +++
- drivers/hid/ipts/eds2.c | 144 ++++++++++
+ drivers/hid/ipts/eds2.c | 145 ++++++++++
drivers/hid/ipts/eds2.h | 35 +++
drivers/hid/ipts/hid.c | 225 +++++++++++++++
drivers/hid/ipts/hid.h | 24 ++
drivers/hid/ipts/main.c | 126 +++++++++
drivers/hid/ipts/mei.c | 188 +++++++++++++
drivers/hid/ipts/mei.h | 66 +++++
- drivers/hid/ipts/receiver.c | 250 +++++++++++++++++
+ drivers/hid/ipts/receiver.c | 251 +++++++++++++++++
drivers/hid/ipts/receiver.h | 16 ++
drivers/hid/ipts/resources.c | 131 +++++++++
drivers/hid/ipts/resources.h | 41 +++
@@ -841,7 +840,7 @@ Patchset: ipts
drivers/hid/ipts/spec-hid.h | 34 +++
drivers/hid/ipts/thread.c | 84 ++++++
drivers/hid/ipts/thread.h | 59 ++++
- 28 files changed, 2850 insertions(+)
+ 28 files changed, 2853 insertions(+)
create mode 100644 drivers/hid/ipts/Kconfig
create mode 100644 drivers/hid/ipts/Makefile
create mode 100644 drivers/hid/ipts/cmd.c
@@ -870,10 +869,10 @@ Patchset: ipts
create mode 100644 drivers/hid/ipts/thread.h
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 4c682c6507040..a263e49b2ae29 100644
+index 08446c89eff6..ccddfba86004 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -1351,4 +1351,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
+@@ -1367,4 +1367,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
source "drivers/hid/surface-hid/Kconfig"
@@ -881,10 +880,10 @@ index 4c682c6507040..a263e49b2ae29 100644
+
endif # HID_SUPPORT
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 082a728eac600..f4bad1b8d813f 100644
+index ce71b53ea6c5..de41081b6a5a 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -170,3 +170,5 @@ obj-$(INTEL_ISH_FIRMWARE_DOWNLOADER) += intel-ish-hid/
+@@ -171,3 +171,5 @@ obj-$(INTEL_ISH_FIRMWARE_DOWNLOADER) += intel-ish-hid/
obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
obj-$(CONFIG_SURFACE_HID_CORE) += surface-hid/
@@ -892,7 +891,7 @@ index 082a728eac600..f4bad1b8d813f 100644
+obj-$(CONFIG_HID_IPTS) += ipts/
diff --git a/drivers/hid/ipts/Kconfig b/drivers/hid/ipts/Kconfig
new file mode 100644
-index 0000000000000..297401bd388dd
+index 000000000000..297401bd388d
--- /dev/null
+++ b/drivers/hid/ipts/Kconfig
@@ -0,0 +1,14 @@
@@ -912,7 +911,7 @@ index 0000000000000..297401bd388dd
+ module will be called ipts.
diff --git a/drivers/hid/ipts/Makefile b/drivers/hid/ipts/Makefile
new file mode 100644
-index 0000000000000..883896f68e6ad
+index 000000000000..883896f68e6a
--- /dev/null
+++ b/drivers/hid/ipts/Makefile
@@ -0,0 +1,16 @@
@@ -934,7 +933,7 @@ index 0000000000000..883896f68e6ad
+ipts-objs += thread.o
diff --git a/drivers/hid/ipts/cmd.c b/drivers/hid/ipts/cmd.c
new file mode 100644
-index 0000000000000..63a4934bbc5fa
+index 000000000000..63a4934bbc5f
--- /dev/null
+++ b/drivers/hid/ipts/cmd.c
@@ -0,0 +1,61 @@
@@ -1001,7 +1000,7 @@ index 0000000000000..63a4934bbc5fa
+}
diff --git a/drivers/hid/ipts/cmd.h b/drivers/hid/ipts/cmd.h
new file mode 100644
-index 0000000000000..2b4079075b642
+index 000000000000..2b4079075b64
--- /dev/null
+++ b/drivers/hid/ipts/cmd.h
@@ -0,0 +1,60 @@
@@ -1067,7 +1066,7 @@ index 0000000000000..2b4079075b642
+#endif /* IPTS_CMD_H */
diff --git a/drivers/hid/ipts/context.h b/drivers/hid/ipts/context.h
new file mode 100644
-index 0000000000000..ba33259f1f7c5
+index 000000000000..ba33259f1f7c
--- /dev/null
+++ b/drivers/hid/ipts/context.h
@@ -0,0 +1,52 @@
@@ -1125,7 +1124,7 @@ index 0000000000000..ba33259f1f7c5
+#endif /* IPTS_CONTEXT_H */
diff --git a/drivers/hid/ipts/control.c b/drivers/hid/ipts/control.c
new file mode 100644
-index 0000000000000..5360842d260ba
+index 000000000000..5360842d260b
--- /dev/null
+++ b/drivers/hid/ipts/control.c
@@ -0,0 +1,486 @@
@@ -1617,7 +1616,7 @@ index 0000000000000..5360842d260ba
+}
diff --git a/drivers/hid/ipts/control.h b/drivers/hid/ipts/control.h
new file mode 100644
-index 0000000000000..26629c5144edb
+index 000000000000..26629c5144ed
--- /dev/null
+++ b/drivers/hid/ipts/control.h
@@ -0,0 +1,126 @@
@@ -1749,7 +1748,7 @@ index 0000000000000..26629c5144edb
+#endif /* IPTS_CONTROL_H */
diff --git a/drivers/hid/ipts/desc.h b/drivers/hid/ipts/desc.h
new file mode 100644
-index 0000000000000..307438c7c80cd
+index 000000000000..307438c7c80c
--- /dev/null
+++ b/drivers/hid/ipts/desc.h
@@ -0,0 +1,80 @@
@@ -1835,10 +1834,10 @@ index 0000000000000..307438c7c80cd
+#endif /* IPTS_DESC_H */
diff --git a/drivers/hid/ipts/eds1.c b/drivers/hid/ipts/eds1.c
new file mode 100644
-index 0000000000000..ecbb3a8bdaf60
+index 000000000000..7b9f54388a9f
--- /dev/null
+++ b/drivers/hid/ipts/eds1.c
-@@ -0,0 +1,103 @@
+@@ -0,0 +1,104 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2023 Dorian Stoll
@@ -1855,6 +1854,7 @@ index 0000000000000..ecbb3a8bdaf60
+#include "context.h"
+#include "control.h"
+#include "desc.h"
++#include "eds1.h"
+#include "spec-device.h"
+
+int ipts_eds1_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
@@ -1944,7 +1944,7 @@ index 0000000000000..ecbb3a8bdaf60
+}
diff --git a/drivers/hid/ipts/eds1.h b/drivers/hid/ipts/eds1.h
new file mode 100644
-index 0000000000000..eeeb6575e3e89
+index 000000000000..eeeb6575e3e8
--- /dev/null
+++ b/drivers/hid/ipts/eds1.h
@@ -0,0 +1,35 @@
@@ -1985,10 +1985,10 @@ index 0000000000000..eeeb6575e3e89
+ enum hid_report_type report_type, enum hid_class_request request_type);
diff --git a/drivers/hid/ipts/eds2.c b/drivers/hid/ipts/eds2.c
new file mode 100644
-index 0000000000000..198dc65d78876
+index 000000000000..639940794615
--- /dev/null
+++ b/drivers/hid/ipts/eds2.c
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2023 Dorian Stoll
@@ -2006,6 +2006,7 @@ index 0000000000000..198dc65d78876
+#include "context.h"
+#include "control.h"
+#include "desc.h"
++#include "eds2.h"
+#include "spec-data.h"
+
+int ipts_eds2_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
@@ -2135,7 +2136,7 @@ index 0000000000000..198dc65d78876
+}
diff --git a/drivers/hid/ipts/eds2.h b/drivers/hid/ipts/eds2.h
new file mode 100644
-index 0000000000000..064e3716907ab
+index 000000000000..064e3716907a
--- /dev/null
+++ b/drivers/hid/ipts/eds2.h
@@ -0,0 +1,35 @@
@@ -2176,7 +2177,7 @@ index 0000000000000..064e3716907ab
+ enum hid_report_type report_type, enum hid_class_request request_type);
diff --git a/drivers/hid/ipts/hid.c b/drivers/hid/ipts/hid.c
new file mode 100644
-index 0000000000000..e34a1a4f9fa77
+index 000000000000..e34a1a4f9fa7
--- /dev/null
+++ b/drivers/hid/ipts/hid.c
@@ -0,0 +1,225 @@
@@ -2407,7 +2408,7 @@ index 0000000000000..e34a1a4f9fa77
+}
diff --git a/drivers/hid/ipts/hid.h b/drivers/hid/ipts/hid.h
new file mode 100644
-index 0000000000000..1ebe77447903a
+index 000000000000..1ebe77447903
--- /dev/null
+++ b/drivers/hid/ipts/hid.h
@@ -0,0 +1,24 @@
@@ -2437,7 +2438,7 @@ index 0000000000000..1ebe77447903a
+#endif /* IPTS_HID_H */
diff --git a/drivers/hid/ipts/main.c b/drivers/hid/ipts/main.c
new file mode 100644
-index 0000000000000..fb5b5c13ee3ea
+index 000000000000..fb5b5c13ee3e
--- /dev/null
+++ b/drivers/hid/ipts/main.c
@@ -0,0 +1,126 @@
@@ -2569,7 +2570,7 @@ index 0000000000000..fb5b5c13ee3ea
+MODULE_LICENSE("GPL");
diff --git a/drivers/hid/ipts/mei.c b/drivers/hid/ipts/mei.c
new file mode 100644
-index 0000000000000..1e0395ceae4a4
+index 000000000000..1e0395ceae4a
--- /dev/null
+++ b/drivers/hid/ipts/mei.c
@@ -0,0 +1,188 @@
@@ -2763,7 +2764,7 @@ index 0000000000000..1e0395ceae4a4
+}
diff --git a/drivers/hid/ipts/mei.h b/drivers/hid/ipts/mei.h
new file mode 100644
-index 0000000000000..973bade6b0fdd
+index 000000000000..973bade6b0fd
--- /dev/null
+++ b/drivers/hid/ipts/mei.h
@@ -0,0 +1,66 @@
@@ -2835,10 +2836,10 @@ index 0000000000000..973bade6b0fdd
+#endif /* IPTS_MEI_H */
diff --git a/drivers/hid/ipts/receiver.c b/drivers/hid/ipts/receiver.c
new file mode 100644
-index 0000000000000..ef66c3c9db807
+index 000000000000..977724c728c3
--- /dev/null
+++ b/drivers/hid/ipts/receiver.c
-@@ -0,0 +1,250 @@
+@@ -0,0 +1,251 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2020-2023 Dorian Stoll
@@ -2857,6 +2858,7 @@ index 0000000000000..ef66c3c9db807
+#include "context.h"
+#include "control.h"
+#include "hid.h"
++#include "receiver.h"
+#include "resources.h"
+#include "spec-device.h"
+#include "thread.h"
@@ -3091,7 +3093,7 @@ index 0000000000000..ef66c3c9db807
+}
diff --git a/drivers/hid/ipts/receiver.h b/drivers/hid/ipts/receiver.h
new file mode 100644
-index 0000000000000..3de7da62d40c1
+index 000000000000..3de7da62d40c
--- /dev/null
+++ b/drivers/hid/ipts/receiver.h
@@ -0,0 +1,16 @@
@@ -3113,7 +3115,7 @@ index 0000000000000..3de7da62d40c1
+#endif /* IPTS_RECEIVER_H */
diff --git a/drivers/hid/ipts/resources.c b/drivers/hid/ipts/resources.c
new file mode 100644
-index 0000000000000..cc14653b2a9f5
+index 000000000000..cc14653b2a9f
--- /dev/null
+++ b/drivers/hid/ipts/resources.c
@@ -0,0 +1,131 @@
@@ -3250,7 +3252,7 @@ index 0000000000000..cc14653b2a9f5
+}
diff --git a/drivers/hid/ipts/resources.h b/drivers/hid/ipts/resources.h
new file mode 100644
-index 0000000000000..2068e13285f0e
+index 000000000000..2068e13285f0
--- /dev/null
+++ b/drivers/hid/ipts/resources.h
@@ -0,0 +1,41 @@
@@ -3297,7 +3299,7 @@ index 0000000000000..2068e13285f0e
+#endif /* IPTS_RESOURCES_H */
diff --git a/drivers/hid/ipts/spec-data.h b/drivers/hid/ipts/spec-data.h
new file mode 100644
-index 0000000000000..e8dd98895a7ee
+index 000000000000..e8dd98895a7e
--- /dev/null
+++ b/drivers/hid/ipts/spec-data.h
@@ -0,0 +1,100 @@
@@ -3403,7 +3405,7 @@ index 0000000000000..e8dd98895a7ee
+#endif /* IPTS_SPEC_DATA_H */
diff --git a/drivers/hid/ipts/spec-device.h b/drivers/hid/ipts/spec-device.h
new file mode 100644
-index 0000000000000..41845f9d90257
+index 000000000000..41845f9d9025
--- /dev/null
+++ b/drivers/hid/ipts/spec-device.h
@@ -0,0 +1,290 @@
@@ -3699,7 +3701,7 @@ index 0000000000000..41845f9d90257
+#endif /* IPTS_SPEC_DEVICE_H */
diff --git a/drivers/hid/ipts/spec-hid.h b/drivers/hid/ipts/spec-hid.h
new file mode 100644
-index 0000000000000..5a58d4a0a610f
+index 000000000000..5a58d4a0a610
--- /dev/null
+++ b/drivers/hid/ipts/spec-hid.h
@@ -0,0 +1,34 @@
@@ -3739,7 +3741,7 @@ index 0000000000000..5a58d4a0a610f
+#endif /* IPTS_SPEC_HID_H */
diff --git a/drivers/hid/ipts/thread.c b/drivers/hid/ipts/thread.c
new file mode 100644
-index 0000000000000..355e92bea26f8
+index 000000000000..355e92bea26f
--- /dev/null
+++ b/drivers/hid/ipts/thread.c
@@ -0,0 +1,84 @@
@@ -3829,7 +3831,7 @@ index 0000000000000..355e92bea26f8
+}
diff --git a/drivers/hid/ipts/thread.h b/drivers/hid/ipts/thread.h
new file mode 100644
-index 0000000000000..1f966b8b32c45
+index 000000000000..1f966b8b32c4
--- /dev/null
+++ b/drivers/hid/ipts/thread.h
@@ -0,0 +1,59 @@
@@ -3893,62 +3895,9 @@ index 0000000000000..1f966b8b32c45
+
+#endif /* IPTS_THREAD_H */
--
-2.45.1
-
-From ee8823ff409dc4507cc2f7c8f8c474735b005938 Mon Sep 17 00:00:00 2001
-From: Jasmin Huber <jasmin@jasisonee.ch>
-Date: Mon, 15 Apr 2024 10:22:55 +0200
-Subject: [PATCH] Inlude headers to avoid compiler warnings 6.8 kernels compile
- with -Wmissing-prototypes.
+2.45.2
-Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
-Patchset: ipts
----
- drivers/hid/ipts/eds1.c | 1 +
- drivers/hid/ipts/eds2.c | 1 +
- drivers/hid/ipts/receiver.c | 1 +
- 3 files changed, 3 insertions(+)
-
-diff --git a/drivers/hid/ipts/eds1.c b/drivers/hid/ipts/eds1.c
-index ecbb3a8bdaf60..7b9f54388a9f6 100644
---- a/drivers/hid/ipts/eds1.c
-+++ b/drivers/hid/ipts/eds1.c
-@@ -14,6 +14,7 @@
- #include "context.h"
- #include "control.h"
- #include "desc.h"
-+#include "eds1.h"
- #include "spec-device.h"
-
- int ipts_eds1_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
-diff --git a/drivers/hid/ipts/eds2.c b/drivers/hid/ipts/eds2.c
-index 198dc65d78876..639940794615d 100644
---- a/drivers/hid/ipts/eds2.c
-+++ b/drivers/hid/ipts/eds2.c
-@@ -15,6 +15,7 @@
- #include "context.h"
- #include "control.h"
- #include "desc.h"
-+#include "eds2.h"
- #include "spec-data.h"
-
- int ipts_eds2_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
-diff --git a/drivers/hid/ipts/receiver.c b/drivers/hid/ipts/receiver.c
-index ef66c3c9db807..977724c728c3e 100644
---- a/drivers/hid/ipts/receiver.c
-+++ b/drivers/hid/ipts/receiver.c
-@@ -16,6 +16,7 @@
- #include "context.h"
- #include "control.h"
- #include "hid.h"
-+#include "receiver.h"
- #include "resources.h"
- #include "spec-device.h"
- #include "thread.h"
---
-2.45.1
-
-From 4b17942da35790b0e703a87267545f5a9f08e1cf Mon Sep 17 00:00:00 2001
+From 52e90ab224f06fd648ca85cd43a91670a9a4e683 Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Sun, 11 Dec 2022 12:03:38 +0100
Subject: [PATCH] iommu: intel: Disable source id verification for ITHC
@@ -3960,10 +3909,10 @@ Patchset: ithc
1 file changed, 16 insertions(+)
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
-index 566297bc87ddb..a8cd8f12d5937 100644
+index e4a70886678c..961a33b87c24 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
-@@ -386,6 +386,22 @@ static int set_msi_sid(struct irte *irte, struct pci_dev *dev)
+@@ -389,6 +389,22 @@ static int set_msi_sid(struct irte *irte, struct pci_dev *dev)
data.busmatch_count = 0;
pci_for_each_dma_alias(dev, set_msi_sid_cb, &data);
@@ -3987,45 +3936,59 @@ index 566297bc87ddb..a8cd8f12d5937 100644
* DMA alias provides us with a PCI device and alias. The only case
* where the it will return an alias on a different bus than the
--
-2.45.1
+2.45.2
-From 14baff1c79b6499868b48e6fb4ada851db35c941 Mon Sep 17 00:00:00 2001
+From a5da515376d209ea8610fed94888f48d9b64387f Mon Sep 17 00:00:00 2001
From: quo <tuple@list.ru>
Date: Sun, 11 Dec 2022 12:10:54 +0100
Subject: [PATCH] hid: Add support for Intel Touch Host Controller
-Based on quo/ithc-linux@0b8b45d
+Based on quo/ithc-linux@34539af4726d.
-Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
+Signed-off-by: Maximilian Stoll <luzmaximilian@gmail.com>
Patchset: ithc
---
- drivers/hid/Kconfig | 2 +
- drivers/hid/Makefile | 1 +
- drivers/hid/ithc/Kbuild | 6 +
- drivers/hid/ithc/Kconfig | 12 +
- drivers/hid/ithc/ithc-debug.c | 130 ++++++
- drivers/hid/ithc/ithc-dma.c | 373 +++++++++++++++++
- drivers/hid/ithc/ithc-dma.h | 69 ++++
- drivers/hid/ithc/ithc-main.c | 728 ++++++++++++++++++++++++++++++++++
- drivers/hid/ithc/ithc-regs.c | 96 +++++
- drivers/hid/ithc/ithc-regs.h | 189 +++++++++
- drivers/hid/ithc/ithc.h | 67 ++++
- 11 files changed, 1673 insertions(+)
+ drivers/hid/Kconfig | 2 +
+ drivers/hid/Makefile | 1 +
+ drivers/hid/ithc/Kbuild | 6 +
+ drivers/hid/ithc/Kconfig | 12 +
+ drivers/hid/ithc/ithc-debug.c | 149 ++++++++
+ drivers/hid/ithc/ithc-debug.h | 7 +
+ drivers/hid/ithc/ithc-dma.c | 312 ++++++++++++++++
+ drivers/hid/ithc/ithc-dma.h | 47 +++
+ drivers/hid/ithc/ithc-hid.c | 207 +++++++++++
+ drivers/hid/ithc/ithc-hid.h | 32 ++
+ drivers/hid/ithc/ithc-legacy.c | 254 +++++++++++++
+ drivers/hid/ithc/ithc-legacy.h | 8 +
+ drivers/hid/ithc/ithc-main.c | 431 ++++++++++++++++++++++
+ drivers/hid/ithc/ithc-quickspi.c | 607 +++++++++++++++++++++++++++++++
+ drivers/hid/ithc/ithc-quickspi.h | 39 ++
+ drivers/hid/ithc/ithc-regs.c | 154 ++++++++
+ drivers/hid/ithc/ithc-regs.h | 211 +++++++++++
+ drivers/hid/ithc/ithc.h | 89 +++++
+ 18 files changed, 2568 insertions(+)
create mode 100644 drivers/hid/ithc/Kbuild
create mode 100644 drivers/hid/ithc/Kconfig
create mode 100644 drivers/hid/ithc/ithc-debug.c
+ create mode 100644 drivers/hid/ithc/ithc-debug.h
create mode 100644 drivers/hid/ithc/ithc-dma.c
create mode 100644 drivers/hid/ithc/ithc-dma.h
+ create mode 100644 drivers/hid/ithc/ithc-hid.c
+ create mode 100644 drivers/hid/ithc/ithc-hid.h
+ create mode 100644 drivers/hid/ithc/ithc-legacy.c
+ create mode 100644 drivers/hid/ithc/ithc-legacy.h
create mode 100644 drivers/hid/ithc/ithc-main.c
+ create mode 100644 drivers/hid/ithc/ithc-quickspi.c
+ create mode 100644 drivers/hid/ithc/ithc-quickspi.h
create mode 100644 drivers/hid/ithc/ithc-regs.c
create mode 100644 drivers/hid/ithc/ithc-regs.h
create mode 100644 drivers/hid/ithc/ithc.h
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index a263e49b2ae29..03f0f5af289a4 100644
+index ccddfba86004..8e2ea8175bfb 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -1353,4 +1353,6 @@ source "drivers/hid/surface-hid/Kconfig"
+@@ -1369,4 +1369,6 @@ source "drivers/hid/surface-hid/Kconfig"
source "drivers/hid/ipts/Kconfig"
@@ -4033,29 +3996,29 @@ index a263e49b2ae29..03f0f5af289a4 100644
+
endif # HID_SUPPORT
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index f4bad1b8d813f..d32c194400aea 100644
+index de41081b6a5a..9d156f1b3910 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -172,3 +172,4 @@ obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
+@@ -173,3 +173,4 @@ obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
obj-$(CONFIG_SURFACE_HID_CORE) += surface-hid/
obj-$(CONFIG_HID_IPTS) += ipts/
+obj-$(CONFIG_HID_ITHC) += ithc/
diff --git a/drivers/hid/ithc/Kbuild b/drivers/hid/ithc/Kbuild
new file mode 100644
-index 0000000000000..aea83f2ac07b4
+index 000000000000..4937ba131297
--- /dev/null
+++ b/drivers/hid/ithc/Kbuild
@@ -0,0 +1,6 @@
+obj-$(CONFIG_HID_ITHC) := ithc.o
+
-+ithc-objs := ithc-main.o ithc-regs.o ithc-dma.o ithc-debug.o
++ithc-objs := ithc-main.o ithc-regs.o ithc-dma.o ithc-hid.o ithc-legacy.o ithc-quickspi.o ithc-debug.o
+
+ccflags-y := -std=gnu11 -Wno-declaration-after-statement
+
diff --git a/drivers/hid/ithc/Kconfig b/drivers/hid/ithc/Kconfig
new file mode 100644
-index 0000000000000..ede7130236096
+index 000000000000..ede713023609
--- /dev/null
+++ b/drivers/hid/ithc/Kconfig
@@ -0,0 +1,12 @@
@@ -4073,10 +4036,10 @@ index 0000000000000..ede7130236096
+ module will be called ithc.
diff --git a/drivers/hid/ithc/ithc-debug.c b/drivers/hid/ithc/ithc-debug.c
new file mode 100644
-index 0000000000000..1f1f1e33f2e5a
+index 000000000000..2d8c6afe9966
--- /dev/null
+++ b/drivers/hid/ithc/ithc-debug.c
-@@ -0,0 +1,130 @@
+@@ -0,0 +1,149 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+
+#include "ithc.h"
@@ -4164,10 +4127,11 @@ index 0000000000000..1f1f1e33f2e5a
+ case 'd': // dma command: cmd len data...
+ // get report descriptor: d 7 8 0 0
+ // enable multitouch: d 3 2 0x0105
-+ if (n < 2 || a[1] > (n - 2) * 4)
++ if (n < 1)
+ return -EINVAL;
-+ pci_info(ithc->pci, "debug dma command %u with %u bytes of data\n", a[0], a[1]);
-+ if (ithc_dma_tx(ithc, a[0], a[1], a + 2))
++ pci_info(ithc->pci, "debug dma command with %u bytes of data\n", n * 4);
++ struct ithc_data data = { .type = ITHC_DATA_RAW, .size = n * 4, .data = a };
++ if (ithc_dma_tx(ithc, &data))
+ pci_err(ithc->pci, "dma tx failed\n");
+ break;
+ default:
@@ -4177,6 +4141,23 @@ index 0000000000000..1f1f1e33f2e5a
+ return len;
+}
+
++static struct dentry *dbg_dir;
++
++void __init ithc_debug_init_module(void)
++{
++ struct dentry *d = debugfs_create_dir(DEVNAME, NULL);
++ if (IS_ERR(d))
++ pr_warn("failed to create debugfs dir (%li)\n", PTR_ERR(d));
++ else
++ dbg_dir = d;
++}
++
++void __exit ithc_debug_exit_module(void)
++{
++ debugfs_remove_recursive(dbg_dir);
++ dbg_dir = NULL;
++}
++
+static const struct file_operations ithc_debugfops_cmd = {
+ .owner = THIS_MODULE,
+ .write = ithc_debugfs_cmd_write,
@@ -4185,17 +4166,18 @@ index 0000000000000..1f1f1e33f2e5a
+static void ithc_debugfs_devres_release(struct device *dev, void *res)
+{
+ struct dentry **dbgm = res;
-+ if (*dbgm)
-+ debugfs_remove_recursive(*dbgm);
++ debugfs_remove_recursive(*dbgm);
+}
+
-+int ithc_debug_init(struct ithc *ithc)
++int ithc_debug_init_device(struct ithc *ithc)
+{
++ if (!dbg_dir)
++ return -ENOENT;
+ struct dentry **dbgm = devres_alloc(ithc_debugfs_devres_release, sizeof(*dbgm), GFP_KERNEL);
+ if (!dbgm)
+ return -ENOMEM;
+ devres_add(&ithc->pci->dev, dbgm);
-+ struct dentry *dbg = debugfs_create_dir(DEVNAME, NULL);
++ struct dentry *dbg = debugfs_create_dir(pci_name(ithc->pci), dbg_dir);
+ if (IS_ERR(dbg))
+ return PTR_ERR(dbg);
+ *dbgm = dbg;
@@ -4207,12 +4189,25 @@ index 0000000000000..1f1f1e33f2e5a
+ return 0;
+}
+
+diff --git a/drivers/hid/ithc/ithc-debug.h b/drivers/hid/ithc/ithc-debug.h
+new file mode 100644
+index 000000000000..38c53d916bdb
+--- /dev/null
++++ b/drivers/hid/ithc/ithc-debug.h
+@@ -0,0 +1,7 @@
++/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
++
++void ithc_debug_init_module(void);
++void ithc_debug_exit_module(void);
++int ithc_debug_init_device(struct ithc *ithc);
++void ithc_log_regs(struct ithc *ithc);
++
diff --git a/drivers/hid/ithc/ithc-dma.c b/drivers/hid/ithc/ithc-dma.c
new file mode 100644
-index 0000000000000..ffb8689b8a780
+index 000000000000..bf4eab33062b
--- /dev/null
+++ b/drivers/hid/ithc/ithc-dma.c
-@@ -0,0 +1,373 @@
+@@ -0,0 +1,312 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+
+#include "ithc.h"
@@ -4388,10 +4383,9 @@ index 0000000000000..ffb8689b8a780
+ mutex_init(&rx->mutex);
+
+ // Allocate buffers.
-+ u32 buf_size = DEVCFG_DMA_RX_SIZE(ithc->config.dma_buf_sizes);
-+ unsigned int num_pages = (buf_size + PAGE_SIZE - 1) / PAGE_SIZE;
++ unsigned int num_pages = (ithc->max_rx_size + PAGE_SIZE - 1) / PAGE_SIZE;
+ pci_dbg(ithc->pci, "allocating rx buffers: num = %u, size = %u, pages = %u\n",
-+ NUM_RX_BUF, buf_size, num_pages);
++ NUM_RX_BUF, ithc->max_rx_size, num_pages);
+ CHECK_RET(ithc_dma_prd_alloc, ithc, &rx->prds, NUM_RX_BUF, num_pages, DMA_FROM_DEVICE);
+ for (unsigned int i = 0; i < NUM_RX_BUF; i++)
+ CHECK_RET(ithc_dma_data_alloc, ithc, &rx->prds, &rx->bufs[i]);
@@ -4429,10 +4423,9 @@ index 0000000000000..ffb8689b8a780
+ mutex_init(&tx->mutex);
+
+ // Allocate buffers.
-+ tx->max_size = DEVCFG_DMA_TX_SIZE(ithc->config.dma_buf_sizes);
-+ unsigned int num_pages = (tx->max_size + PAGE_SIZE - 1) / PAGE_SIZE;
++ unsigned int num_pages = (ithc->max_tx_size + PAGE_SIZE - 1) / PAGE_SIZE;
+ pci_dbg(ithc->pci, "allocating tx buffers: size = %u, pages = %u\n",
-+ tx->max_size, num_pages);
++ ithc->max_tx_size, num_pages);
+ CHECK_RET(ithc_dma_prd_alloc, ithc, &tx->prds, 1, num_pages, DMA_TO_DEVICE);
+ CHECK_RET(ithc_dma_data_alloc, ithc, &tx->prds, &tx->buf);
+
@@ -4445,71 +4438,6 @@ index 0000000000000..ffb8689b8a780
+ return 0;
+}
+
-+static int ithc_dma_rx_process_buf(struct ithc *ithc, struct ithc_dma_data_buffer *data,
-+ u8 channel, u8 buf)
-+{
-+ if (buf >= NUM_RX_BUF) {
-+ pci_err(ithc->pci, "invalid dma ringbuffer index\n");
-+ return -EINVAL;
-+ }
-+ u32 len = data->data_size;
-+ struct ithc_dma_rx_header *hdr = data->addr;
-+ u8 *hiddata = (void *)(hdr + 1);
-+ if (len >= sizeof(*hdr) && hdr->code == DMA_RX_CODE_RESET) {
-+ // The THC sends a reset request when we need to reinitialize the device.
-+ // This usually only happens if we send an invalid command or put the device
-+ // in a bad state.
-+ CHECK(ithc_reset, ithc);
-+ } else if (len < sizeof(*hdr) || len != sizeof(*hdr) + hdr->data_size) {
-+ if (hdr->code == DMA_RX_CODE_INPUT_REPORT) {
-+ // When the CPU enters a low power state during DMA, we can get truncated
-+ // messages. For Surface devices, this will typically be a single touch
-+ // report that is only 1 byte, or a multitouch report that is 257 bytes.
-+ // See also ithc_set_active().
-+ } else {
-+ pci_err(ithc->pci, "invalid dma rx data! channel %u, buffer %u, size %u, code %u, data size %u\n",
-+ channel, buf, len, hdr->code, hdr->data_size);
-+ print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
-+ hdr, min(len, 0x400u), 0);
-+ }
-+ } else if (hdr->code == DMA_RX_CODE_REPORT_DESCRIPTOR && hdr->data_size > 8) {
-+ // Response to a 'get report descriptor' request.
-+ // The actual descriptor is preceded by 8 nul bytes.
-+ CHECK(hid_parse_report, ithc->hid, hiddata + 8, hdr->data_size - 8);
-+ WRITE_ONCE(ithc->hid_parse_done, true);
-+ wake_up(&ithc->wait_hid_parse);
-+ } else if (hdr->code == DMA_RX_CODE_INPUT_REPORT) {
-+ // Standard HID input report containing touch data.
-+ CHECK(hid_input_report, ithc->hid, HID_INPUT_REPORT, hiddata, hdr->data_size, 1);
-+ } else if (hdr->code == DMA_RX_CODE_FEATURE_REPORT) {
-+ // Response to a 'get feature' request.
-+ bool done = false;
-+ mutex_lock(&ithc->hid_get_feature_mutex);
-+ if (ithc->hid_get_feature_buf) {
-+ if (hdr->data_size < ithc->hid_get_feature_size)
-+ ithc->hid_get_feature_size = hdr->data_size;
-+ memcpy(ithc->hid_get_feature_buf, hiddata, ithc->hid_get_feature_size);
-+ ithc->hid_get_feature_buf = NULL;
-+ done = true;
-+ }
-+ mutex_unlock(&ithc->hid_get_feature_mutex);
-+ if (done) {
-+ wake_up(&ithc->wait_hid_get_feature);
-+ } else {
-+ // Received data without a matching request, or the request already
-+ // timed out. (XXX What's the correct thing to do here?)
-+ CHECK(hid_input_report, ithc->hid, HID_FEATURE_REPORT,
-+ hiddata, hdr->data_size, 1);
-+ }
-+ } else {
-+ pci_dbg(ithc->pci, "unhandled dma rx data! channel %u, buffer %u, size %u, code %u\n",
-+ channel, buf, len, hdr->code);
-+ print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
-+ hdr, min(len, 0x400u), 0);
-+ }
-+ return 0;
-+}
-+
+static int ithc_dma_rx_unlocked(struct ithc *ithc, u8 channel)
+{
+ // Process all filled RX buffers from the ringbuffer.
@@ -4531,7 +4459,16 @@ index 0000000000000..ffb8689b8a780
+ rx->num_received = ++n;
+
+ // process data
-+ CHECK(ithc_dma_rx_process_buf, ithc, b, channel, tail);
++ struct ithc_data d;
++ if ((ithc->use_quickspi ? ithc_quickspi_decode_rx : ithc_legacy_decode_rx)
++ (ithc, b->addr, b->data_size, &d) < 0) {
++ pci_err(ithc->pci, "invalid dma rx data! channel %u, buffer %u, size %u: %*ph\n",
++ channel, tail, b->data_size, min((int)b->data_size, 64), b->addr);
++ print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
++ b->addr, min(b->data_size, 0x400u), 0);
++ } else {
++ ithc_hid_process_data(ithc, &d);
++ }
+
+ // give the buffer back to the device
+ CHECK_RET(ithc_dma_data_buffer_put, ithc, &rx->prds, b, tail);
@@ -4546,31 +4483,28 @@ index 0000000000000..ffb8689b8a780
+ return ret;
+}
+
-+static int ithc_dma_tx_unlocked(struct ithc *ithc, u32 cmdcode, u32 datasize, void *data)
++static int ithc_dma_tx_unlocked(struct ithc *ithc, const struct ithc_data *data)
+{
-+ ithc_set_active(ithc, 100 * USEC_PER_MSEC);
-+
+ // Send a single TX buffer to the THC.
-+ pci_dbg(ithc->pci, "dma tx command %u, size %u\n", cmdcode, datasize);
-+ struct ithc_dma_tx_header *hdr;
-+ // Data must be padded to next 4-byte boundary.
-+ u8 padding = datasize & 3 ? 4 - (datasize & 3) : 0;
-+ unsigned int fullsize = sizeof(*hdr) + datasize + padding;
-+ if (fullsize > ithc->dma_tx.max_size || fullsize > PAGE_SIZE)
-+ return -EINVAL;
++ pci_dbg(ithc->pci, "dma tx data type %u, size %u\n", data->type, data->size);
+ CHECK_RET(ithc_dma_data_buffer_get, ithc, &ithc->dma_tx.prds, &ithc->dma_tx.buf, 0);
+
+ // Fill the TX buffer with header and data.
-+ ithc->dma_tx.buf.data_size = fullsize;
-+ hdr = ithc->dma_tx.buf.addr;
-+ hdr->code = cmdcode;
-+ hdr->data_size = datasize;
-+ u8 *dest = (void *)(hdr + 1);
-+ memcpy(dest, data, datasize);
-+ dest += datasize;
-+ for (u8 p = 0; p < padding; p++)
-+ *dest++ = 0;
++ ssize_t sz;
++ if (data->type == ITHC_DATA_RAW) {
++ sz = min(data->size, ithc->max_tx_size);
++ memcpy(ithc->dma_tx.buf.addr, data->data, sz);
++ } else {
++ sz = (ithc->use_quickspi ? ithc_quickspi_encode_tx : ithc_legacy_encode_tx)
++ (ithc, data, ithc->dma_tx.buf.addr, ithc->max_tx_size);
++ }
++ ithc->dma_tx.buf.data_size = sz < 0 ? 0 : sz;
+ CHECK_RET(ithc_dma_data_buffer_put, ithc, &ithc->dma_tx.prds, &ithc->dma_tx.buf, 0);
++ if (sz < 0) {
++ pci_err(ithc->pci, "failed to encode tx data type %i, size %u, error %i\n",
++ data->type, data->size, (int)sz);
++ return -EINVAL;
++ }
+
+ // Let the THC process the buffer.
+ bitsb_set(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_SEND);
@@ -4578,20 +4512,20 @@ index 0000000000000..ffb8689b8a780
+ writel(DMA_TX_STATUS_DONE, &ithc->regs->dma_tx.status);
+ return 0;
+}
-+int ithc_dma_tx(struct ithc *ithc, u32 cmdcode, u32 datasize, void *data)
++int ithc_dma_tx(struct ithc *ithc, const struct ithc_data *data)
+{
+ mutex_lock(&ithc->dma_tx.mutex);
-+ int ret = ithc_dma_tx_unlocked(ithc, cmdcode, datasize, data);
++ int ret = ithc_dma_tx_unlocked(ithc, data);
+ mutex_unlock(&ithc->dma_tx.mutex);
+ return ret;
+}
+
diff --git a/drivers/hid/ithc/ithc-dma.h b/drivers/hid/ithc/ithc-dma.h
new file mode 100644
-index 0000000000000..93652e4476bf8
+index 000000000000..1749a5819b3e
--- /dev/null
+++ b/drivers/hid/ithc/ithc-dma.h
-@@ -0,0 +1,69 @@
+@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
+
+#define PRD_SIZE_MASK 0xffffff
@@ -4605,27 +4539,6 @@ index 0000000000000..93652e4476bf8
+ u32 unused;
+};
+
-+#define DMA_RX_CODE_INPUT_REPORT 3
-+#define DMA_RX_CODE_FEATURE_REPORT 4
-+#define DMA_RX_CODE_REPORT_DESCRIPTOR 5
-+#define DMA_RX_CODE_RESET 7
-+
-+struct ithc_dma_rx_header {
-+ u32 code;
-+ u32 data_size;
-+ u32 _unknown[14];
-+};
-+
-+#define DMA_TX_CODE_SET_FEATURE 3
-+#define DMA_TX_CODE_GET_FEATURE 4
-+#define DMA_TX_CODE_OUTPUT_REPORT 5
-+#define DMA_TX_CODE_GET_REPORT_DESCRIPTOR 7
-+
-+struct ithc_dma_tx_header {
-+ u32 code;
-+ u32 data_size;
-+};
-+
+struct ithc_dma_prd_buffer {
+ void *addr;
+ dma_addr_t dma_addr;
@@ -4643,7 +4556,6 @@ index 0000000000000..93652e4476bf8
+
+struct ithc_dma_tx {
+ struct mutex mutex;
-+ u32 max_size;
+ struct ithc_dma_prd_buffer prds;
+ struct ithc_dma_data_buffer buf;
+};
@@ -4659,1474 +4571,11 @@ index 0000000000000..93652e4476bf8
+void ithc_dma_rx_enable(struct ithc *ithc, u8 channel);
+int ithc_dma_tx_init(struct ithc *ithc);
+int ithc_dma_rx(struct ithc *ithc, u8 channel);
-+int ithc_dma_tx(struct ithc *ithc, u32 cmdcode, u32 datasize, void *cmddata);
-+
-diff --git a/drivers/hid/ithc/ithc-main.c b/drivers/hid/ithc/ithc-main.c
-new file mode 100644
-index 0000000000000..87ed4aa70fda0
---- /dev/null
-+++ b/drivers/hid/ithc/ithc-main.c
-@@ -0,0 +1,728 @@
-+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
-+
-+#include "ithc.h"
-+
-+MODULE_DESCRIPTION("Intel Touch Host Controller driver");
-+MODULE_LICENSE("Dual BSD/GPL");
-+
-+// Lakefield
-+#define PCI_DEVICE_ID_INTEL_THC_LKF_PORT1 0x98d0
-+#define PCI_DEVICE_ID_INTEL_THC_LKF_PORT2 0x98d1
-+// Tiger Lake
-+#define PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT1 0xa0d0
-+#define PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT2 0xa0d1
-+#define PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT1 0x43d0
-+#define PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT2 0x43d1
-+// Alder Lake
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT1 0x7ad8
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT2 0x7ad9
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT1 0x51d0
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT2 0x51d1
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT1 0x54d0
-+#define PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT2 0x54d1
-+// Raptor Lake
-+#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT1 0x7a58
-+#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT2 0x7a59
-+// Meteor Lake
-+#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT1 0x7e48
-+#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT2 0x7e4a
-+
-+static const struct pci_device_id ithc_pci_tbl[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_LKF_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_LKF_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT2) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_MTL_PORT1) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_MTL_PORT2) },
-+ // XXX So far the THC seems to be the only Intel PCI device with PCI_CLASS_INPUT_PEN,
-+ // so instead of the device list we could just do:
-+ // { .vendor = PCI_VENDOR_ID_INTEL, .device = PCI_ANY_ID, .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, .class = PCI_CLASS_INPUT_PEN, .class_mask = ~0, },
-+ {}
-+};
-+MODULE_DEVICE_TABLE(pci, ithc_pci_tbl);
-+
-+// Module parameters
-+
-+static bool ithc_use_polling = false;
-+module_param_named(poll, ithc_use_polling, bool, 0);
-+MODULE_PARM_DESC(poll, "Use polling instead of interrupts");
-+
-+// Since all known devices seem to use only channel 1, by default we disable channel 0.
-+static bool ithc_use_rx0 = false;
-+module_param_named(rx0, ithc_use_rx0, bool, 0);
-+MODULE_PARM_DESC(rx0, "Use DMA RX channel 0");
-+
-+static bool ithc_use_rx1 = true;
-+module_param_named(rx1, ithc_use_rx1, bool, 0);
-+MODULE_PARM_DESC(rx1, "Use DMA RX channel 1");
-+
-+// Values below 250 seem to work well on the SP7+. If this is set too high, you may observe cursor stuttering.
-+static int ithc_dma_latency_us = 200;
-+module_param_named(dma_latency_us, ithc_dma_latency_us, int, 0);
-+MODULE_PARM_DESC(dma_latency_us, "Determines the CPU latency QoS value for DMA transfers (in microseconds), -1 to disable latency QoS");
-+
-+// Values above 1700 seem to work well on the SP7+. If this is set too low, you may observe cursor stuttering.
-+static unsigned int ithc_dma_early_us = 2000;
-+module_param_named(dma_early_us, ithc_dma_early_us, uint, 0);
-+MODULE_PARM_DESC(dma_early_us, "Determines how early the CPU latency QoS value is applied before the next expected IRQ (in microseconds)");
-+
-+static bool ithc_log_regs_enabled = false;
-+module_param_named(logregs, ithc_log_regs_enabled, bool, 0);
-+MODULE_PARM_DESC(logregs, "Log changes in register values (for debugging)");
-+
-+// Sysfs attributes
-+
-+static bool ithc_is_config_valid(struct ithc *ithc)
-+{
-+ return ithc->config.device_id == DEVCFG_DEVICE_ID_TIC;
-+}
-+
-+static ssize_t vendor_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct ithc *ithc = dev_get_drvdata(dev);
-+ if (!ithc || !ithc_is_config_valid(ithc))
-+ return -ENODEV;
-+ return sprintf(buf, "0x%04x", ithc->config.vendor_id);
-+}
-+static DEVICE_ATTR_RO(vendor);
-+static ssize_t product_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct ithc *ithc = dev_get_drvdata(dev);
-+ if (!ithc || !ithc_is_config_valid(ithc))
-+ return -ENODEV;
-+ return sprintf(buf, "0x%04x", ithc->config.product_id);
-+}
-+static DEVICE_ATTR_RO(product);
-+static ssize_t revision_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct ithc *ithc = dev_get_drvdata(dev);
-+ if (!ithc || !ithc_is_config_valid(ithc))
-+ return -ENODEV;
-+ return sprintf(buf, "%u", ithc->config.revision);
-+}
-+static DEVICE_ATTR_RO(revision);
-+static ssize_t fw_version_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct ithc *ithc = dev_get_drvdata(dev);
-+ if (!ithc || !ithc_is_config_valid(ithc))
-+ return -ENODEV;
-+ u32 v = ithc->config.fw_version;
-+ return sprintf(buf, "%i.%i.%i.%i", v >> 24, v >> 16 & 0xff, v >> 8 & 0xff, v & 0xff);
-+}
-+static DEVICE_ATTR_RO(fw_version);
-+
-+static const struct attribute_group *ithc_attribute_groups[] = {
-+ &(const struct attribute_group){
-+ .name = DEVNAME,
-+ .attrs = (struct attribute *[]){
-+ &dev_attr_vendor.attr,
-+ &dev_attr_product.attr,
-+ &dev_attr_revision.attr,
-+ &dev_attr_fw_version.attr,
-+ NULL
-+ },
-+ },
-+ NULL
-+};
-+
-+// HID setup
-+
-+static int ithc_hid_start(struct hid_device *hdev) { return 0; }
-+static void ithc_hid_stop(struct hid_device *hdev) { }
-+static int ithc_hid_open(struct hid_device *hdev) { return 0; }
-+static void ithc_hid_close(struct hid_device *hdev) { }
-+
-+static int ithc_hid_parse(struct hid_device *hdev)
-+{
-+ struct ithc *ithc = hdev->driver_data;
-+ u64 val = 0;
-+ WRITE_ONCE(ithc->hid_parse_done, false);
-+ for (int retries = 0; ; retries++) {
-+ CHECK_RET(ithc_dma_tx, ithc, DMA_TX_CODE_GET_REPORT_DESCRIPTOR, sizeof(val), &val);
-+ if (wait_event_timeout(ithc->wait_hid_parse, READ_ONCE(ithc->hid_parse_done),
-+ msecs_to_jiffies(200)))
-+ return 0;
-+ if (retries > 5) {
-+ pci_err(ithc->pci, "failed to read report descriptor\n");
-+ return -ETIMEDOUT;
-+ }
-+ pci_warn(ithc->pci, "failed to read report descriptor, retrying\n");
-+ }
-+}
-+
-+static int ithc_hid_raw_request(struct hid_device *hdev, unsigned char reportnum, __u8 *buf,
-+ size_t len, unsigned char rtype, int reqtype)
-+{
-+ struct ithc *ithc = hdev->driver_data;
-+ if (!buf || !len)
-+ return -EINVAL;
-+ u32 code;
-+ if (rtype == HID_OUTPUT_REPORT && reqtype == HID_REQ_SET_REPORT) {
-+ code = DMA_TX_CODE_OUTPUT_REPORT;
-+ } else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_SET_REPORT) {
-+ code = DMA_TX_CODE_SET_FEATURE;
-+ } else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_GET_REPORT) {
-+ code = DMA_TX_CODE_GET_FEATURE;
-+ } else {
-+ pci_err(ithc->pci, "unhandled hid request %i %i for report id %i\n",
-+ rtype, reqtype, reportnum);
-+ return -EINVAL;
-+ }
-+ buf[0] = reportnum;
-+
-+ if (reqtype == HID_REQ_GET_REPORT) {
-+ // Prepare for response.
-+ mutex_lock(&ithc->hid_get_feature_mutex);
-+ ithc->hid_get_feature_buf = buf;
-+ ithc->hid_get_feature_size = len;
-+ mutex_unlock(&ithc->hid_get_feature_mutex);
-+
-+ // Transmit 'get feature' request.
-+ int r = CHECK(ithc_dma_tx, ithc, code, 1, buf);
-+ if (!r) {
-+ r = wait_event_interruptible_timeout(ithc->wait_hid_get_feature,
-+ !ithc->hid_get_feature_buf, msecs_to_jiffies(1000));
-+ if (!r)
-+ r = -ETIMEDOUT;
-+ else if (r < 0)
-+ r = -EINTR;
-+ else
-+ r = 0;
-+ }
-+
-+ // If everything went ok, the buffer has been filled with the response data.
-+ // Return the response size.
-+ mutex_lock(&ithc->hid_get_feature_mutex);
-+ ithc->hid_get_feature_buf = NULL;
-+ if (!r)
-+ r = ithc->hid_get_feature_size;
-+ mutex_unlock(&ithc->hid_get_feature_mutex);
-+ return r;
-+ }
-+
-+ // 'Set feature', or 'output report'. These don't have a response.
-+ CHECK_RET(ithc_dma_tx, ithc, code, len, buf);
-+ return 0;
-+}
-+
-+static struct hid_ll_driver ithc_ll_driver = {
-+ .start = ithc_hid_start,
-+ .stop = ithc_hid_stop,
-+ .open = ithc_hid_open,
-+ .close = ithc_hid_close,
-+ .parse = ithc_hid_parse,
-+ .raw_request = ithc_hid_raw_request,
-+};
-+
-+static void ithc_hid_devres_release(struct device *dev, void *res)
-+{
-+ struct hid_device **hidm = res;
-+ if (*hidm)
-+ hid_destroy_device(*hidm);
-+}
-+
-+static int ithc_hid_init(struct ithc *ithc)
-+{
-+ struct hid_device **hidm = devres_alloc(ithc_hid_devres_release, sizeof(*hidm), GFP_KERNEL);
-+ if (!hidm)
-+ return -ENOMEM;
-+ devres_add(&ithc->pci->dev, hidm);
-+ struct hid_device *hid = hid_allocate_device();
-+ if (IS_ERR(hid))
-+ return PTR_ERR(hid);
-+ *hidm = hid;
-+
-+ strscpy(hid->name, DEVFULLNAME, sizeof(hid->name));
-+ strscpy(hid->phys, ithc->phys, sizeof(hid->phys));
-+ hid->ll_driver = &ithc_ll_driver;
-+ hid->bus = BUS_PCI;
-+ hid->vendor = ithc->config.vendor_id;
-+ hid->product = ithc->config.product_id;
-+ hid->version = 0x100;
-+ hid->dev.parent = &ithc->pci->dev;
-+ hid->driver_data = ithc;
-+
-+ ithc->hid = hid;
-+ return 0;
-+}
-+
-+// Interrupts/polling
-+
-+static enum hrtimer_restart ithc_activity_start_timer_callback(struct hrtimer *t)
-+{
-+ struct ithc *ithc = container_of(t, struct ithc, activity_start_timer);
-+ ithc_set_active(ithc, ithc_dma_early_us * 2 + USEC_PER_MSEC);
-+ return HRTIMER_NORESTART;
-+}
-+
-+static enum hrtimer_restart ithc_activity_end_timer_callback(struct hrtimer *t)
-+{
-+ struct ithc *ithc = container_of(t, struct ithc, activity_end_timer);
-+ cpu_latency_qos_update_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-+ return HRTIMER_NORESTART;
-+}
-+
-+void ithc_set_active(struct ithc *ithc, unsigned int duration_us)
-+{
-+ if (ithc_dma_latency_us < 0)
-+ return;
-+ // When CPU usage is very low, the CPU can enter various low power states (C2-C10).
-+ // This disrupts DMA, causing truncated DMA messages. ERROR_FLAG_DMA_RX_TIMEOUT will be
-+ // set when this happens. The amount of truncated messages can become very high, resulting
-+ // in user-visible effects (laggy/stuttering cursor). To avoid this, we use a CPU latency
-+ // QoS request to prevent the CPU from entering low power states during touch interactions.
-+ cpu_latency_qos_update_request(&ithc->activity_qos, ithc_dma_latency_us);
-+ hrtimer_start_range_ns(&ithc->activity_end_timer,
-+ ns_to_ktime(duration_us * NSEC_PER_USEC), duration_us * NSEC_PER_USEC, HRTIMER_MODE_REL);
-+}
-+
-+static int ithc_set_device_enabled(struct ithc *ithc, bool enable)
-+{
-+ u32 x = ithc->config.touch_cfg =
-+ (ithc->config.touch_cfg & ~(u32)DEVCFG_TOUCH_MASK) | DEVCFG_TOUCH_UNKNOWN_2 |
-+ (enable ? DEVCFG_TOUCH_ENABLE | DEVCFG_TOUCH_UNKNOWN_3 | DEVCFG_TOUCH_UNKNOWN_4 : 0);
-+ return ithc_spi_command(ithc, SPI_CMD_CODE_WRITE,
-+ offsetof(struct ithc_device_config, touch_cfg), sizeof(x), &x);
-+}
-+
-+static void ithc_disable_interrupts(struct ithc *ithc)
-+{
-+ writel(0, &ithc->regs->error_control);
-+ bitsb(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_IRQ, 0);
-+ bitsb(&ithc->regs->dma_rx[0].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_UNKNOWN_4 | DMA_RX_CONTROL_IRQ_DATA, 0);
-+ bitsb(&ithc->regs->dma_rx[1].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_UNKNOWN_4 | DMA_RX_CONTROL_IRQ_DATA, 0);
-+ bitsb(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_IRQ, 0);
-+}
-+
-+static void ithc_clear_dma_rx_interrupts(struct ithc *ithc, unsigned int channel)
-+{
-+ writel(DMA_RX_STATUS_ERROR | DMA_RX_STATUS_UNKNOWN_4 | DMA_RX_STATUS_HAVE_DATA,
-+ &ithc->regs->dma_rx[channel].status);
-+}
-+
-+static void ithc_clear_interrupts(struct ithc *ithc)
-+{
-+ writel(0xffffffff, &ithc->regs->error_flags);
-+ writel(ERROR_STATUS_DMA | ERROR_STATUS_SPI, &ithc->regs->error_status);
-+ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
-+ ithc_clear_dma_rx_interrupts(ithc, 0);
-+ ithc_clear_dma_rx_interrupts(ithc, 1);
-+ writel(DMA_TX_STATUS_DONE | DMA_TX_STATUS_ERROR | DMA_TX_STATUS_UNKNOWN_2,
-+ &ithc->regs->dma_tx.status);
-+}
-+
-+static void ithc_process(struct ithc *ithc)
-+{
-+ ithc_log_regs(ithc);
-+
-+ bool rx0 = ithc_use_rx0 && (readl(&ithc->regs->dma_rx[0].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
-+ bool rx1 = ithc_use_rx1 && (readl(&ithc->regs->dma_rx[1].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
-+
-+ // Track time between DMA rx transfers, so we can try to predict when we need to enable CPU latency QoS for the next transfer
-+ ktime_t t = ktime_get();
-+ ktime_t dt = ktime_sub(t, ithc->last_rx_time);
-+ if (rx0 || rx1) {
-+ ithc->last_rx_time = t;
-+ if (dt > ms_to_ktime(100)) {
-+ ithc->cur_rx_seq_count = 0;
-+ ithc->cur_rx_seq_errors = 0;
-+ }
-+ ithc->cur_rx_seq_count++;
-+ if (!ithc_use_polling && ithc_dma_latency_us >= 0) {
-+ // Disable QoS, since the DMA transfer has completed (we re-enable it after a delay below)
-+ cpu_latency_qos_update_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-+ hrtimer_try_to_cancel(&ithc->activity_end_timer);
-+ }
-+ }
-+
-+ // Read and clear error bits
-+ u32 err = readl(&ithc->regs->error_flags);
-+ if (err) {
-+ writel(err, &ithc->regs->error_flags);
-+ if (err & ~ERROR_FLAG_DMA_RX_TIMEOUT)
-+ pci_err(ithc->pci, "error flags: 0x%08x\n", err);
-+ if (err & ERROR_FLAG_DMA_RX_TIMEOUT) {
-+ // Only log an error if we see a significant number of these errors.
-+ ithc->cur_rx_seq_errors++;
-+ if (ithc->cur_rx_seq_errors && ithc->cur_rx_seq_errors % 50 == 0 && ithc->cur_rx_seq_errors > ithc->cur_rx_seq_count / 10)
-+ pci_err(ithc->pci, "High number of DMA RX timeouts/errors (%u/%u, dt=%lldus). Try adjusting dma_early_us and/or dma_latency_us.\n",
-+ ithc->cur_rx_seq_errors, ithc->cur_rx_seq_count, ktime_to_us(dt));
-+ }
-+ }
-+
-+ // Process DMA rx
-+ if (ithc_use_rx0) {
-+ ithc_clear_dma_rx_interrupts(ithc, 0);
-+ if (rx0)
-+ ithc_dma_rx(ithc, 0);
-+ }
-+ if (ithc_use_rx1) {
-+ ithc_clear_dma_rx_interrupts(ithc, 1);
-+ if (rx1)
-+ ithc_dma_rx(ithc, 1);
-+ }
-+
-+ // Start timer to re-enable QoS for next rx, but only if we've seen an ERROR_FLAG_DMA_RX_TIMEOUT
-+ if ((rx0 || rx1) && !ithc_use_polling && ithc_dma_latency_us >= 0 && ithc->cur_rx_seq_errors > 0) {
-+ ktime_t expires = ktime_add(t, ktime_sub_us(dt, ithc_dma_early_us));
-+ hrtimer_start_range_ns(&ithc->activity_start_timer, expires, 10 * NSEC_PER_USEC, HRTIMER_MODE_ABS);
-+ }
-+
-+ ithc_log_regs(ithc);
-+}
-+
-+static irqreturn_t ithc_interrupt_thread(int irq, void *arg)
-+{
-+ struct ithc *ithc = arg;
-+ pci_dbg(ithc->pci, "IRQ! err=%08x/%08x/%08x, cmd=%02x/%08x, rx0=%02x/%08x, rx1=%02x/%08x, tx=%02x/%08x\n",
-+ readl(&ithc->regs->error_control), readl(&ithc->regs->error_status), readl(&ithc->regs->error_flags),
-+ readb(&ithc->regs->spi_cmd.control), readl(&ithc->regs->spi_cmd.status),
-+ readb(&ithc->regs->dma_rx[0].control), readl(&ithc->regs->dma_rx[0].status),
-+ readb(&ithc->regs->dma_rx[1].control), readl(&ithc->regs->dma_rx[1].status),
-+ readb(&ithc->regs->dma_tx.control), readl(&ithc->regs->dma_tx.status));
-+ ithc_process(ithc);
-+ return IRQ_HANDLED;
-+}
-+
-+static int ithc_poll_thread(void *arg)
-+{
-+ struct ithc *ithc = arg;
-+ unsigned int sleep = 100;
-+ while (!kthread_should_stop()) {
-+ u32 n = ithc->dma_rx[1].num_received;
-+ ithc_process(ithc);
-+ // Decrease polling interval to 20ms if we received data, otherwise slowly
-+ // increase it up to 200ms.
-+ if (n != ithc->dma_rx[1].num_received) {
-+ ithc_set_active(ithc, 100 * USEC_PER_MSEC);
-+ sleep = 20;
-+ } else {
-+ sleep = min(200u, sleep + (sleep >> 4) + 1);
-+ }
-+ msleep_interruptible(sleep);
-+ }
-+ return 0;
-+}
-+
-+// Device initialization and shutdown
-+
-+static void ithc_disable(struct ithc *ithc)
-+{
-+ bitsl_set(&ithc->regs->control_bits, CONTROL_QUIESCE);
-+ CHECK(waitl, ithc, &ithc->regs->control_bits, CONTROL_IS_QUIESCED, CONTROL_IS_QUIESCED);
-+ bitsl(&ithc->regs->control_bits, CONTROL_NRESET, 0);
-+ bitsb(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_SEND, 0);
-+ bitsb(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_SEND, 0);
-+ bitsb(&ithc->regs->dma_rx[0].control, DMA_RX_CONTROL_ENABLE, 0);
-+ bitsb(&ithc->regs->dma_rx[1].control, DMA_RX_CONTROL_ENABLE, 0);
-+ ithc_disable_interrupts(ithc);
-+ ithc_clear_interrupts(ithc);
-+}
-+
-+static int ithc_init_device(struct ithc *ithc)
-+{
-+ ithc_log_regs(ithc);
-+ bool was_enabled = (readl(&ithc->regs->control_bits) & CONTROL_NRESET) != 0;
-+ ithc_disable(ithc);
-+ CHECK_RET(waitl, ithc, &ithc->regs->control_bits, CONTROL_READY, CONTROL_READY);
-+
-+ // Since we don't yet know which SPI config the device wants, use default speed and mode
-+ // initially for reading config data.
-+ ithc_set_spi_config(ithc, 10, 0);
-+
-+ // Setting the following bit seems to make reading the config more reliable.
-+ bitsl_set(&ithc->regs->dma_rx[0].unknown_init_bits, 0x80000000);
-+
-+ // If the device was previously enabled, wait a bit to make sure it's fully shut down.
-+ if (was_enabled)
-+ if (msleep_interruptible(100))
-+ return -EINTR;
-+
-+ // Take the touch device out of reset.
-+ bitsl(&ithc->regs->control_bits, CONTROL_QUIESCE, 0);
-+ CHECK_RET(waitl, ithc, &ithc->regs->control_bits, CONTROL_IS_QUIESCED, 0);
-+ for (int retries = 0; ; retries++) {
-+ ithc_log_regs(ithc);
-+ bitsl_set(&ithc->regs->control_bits, CONTROL_NRESET);
-+ if (!waitl(ithc, &ithc->regs->state, 0xf, 2))
-+ break;
-+ if (retries > 5) {
-+ pci_err(ithc->pci, "failed to reset device, state = 0x%08x\n", readl(&ithc->regs->state));
-+ return -ETIMEDOUT;
-+ }
-+ pci_warn(ithc->pci, "invalid state, retrying reset\n");
-+ bitsl(&ithc->regs->control_bits, CONTROL_NRESET, 0);
-+ if (msleep_interruptible(1000))
-+ return -EINTR;
-+ }
-+ ithc_log_regs(ithc);
-+
-+ // Waiting for the following status bit makes reading config much more reliable,
-+ // however the official driver does not seem to do this...
-+ CHECK(waitl, ithc, &ithc->regs->dma_rx[0].status, DMA_RX_STATUS_UNKNOWN_4, DMA_RX_STATUS_UNKNOWN_4);
-+
-+ // Read configuration data.
-+ for (int retries = 0; ; retries++) {
-+ ithc_log_regs(ithc);
-+ memset(&ithc->config, 0, sizeof(ithc->config));
-+ CHECK_RET(ithc_spi_command, ithc, SPI_CMD_CODE_READ, 0, sizeof(ithc->config), &ithc->config);
-+ u32 *p = (void *)&ithc->config;
-+ pci_info(ithc->pci, "config: %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
-+ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
-+ if (ithc_is_config_valid(ithc))
-+ break;
-+ if (retries > 10) {
-+ pci_err(ithc->pci, "failed to read config, unknown device ID 0x%08x\n",
-+ ithc->config.device_id);
-+ return -EIO;
-+ }
-+ pci_warn(ithc->pci, "failed to read config, retrying\n");
-+ if (msleep_interruptible(100))
-+ return -EINTR;
-+ }
-+ ithc_log_regs(ithc);
-+
-+ // Apply SPI config and enable touch device.
-+ CHECK_RET(ithc_set_spi_config, ithc,
-+ DEVCFG_SPI_MAX_FREQ(ithc->config.spi_config),
-+ DEVCFG_SPI_MODE(ithc->config.spi_config));
-+ CHECK_RET(ithc_set_device_enabled, ithc, true);
-+ ithc_log_regs(ithc);
-+ return 0;
-+}
-+
-+int ithc_reset(struct ithc *ithc)
-+{
-+ // FIXME This should probably do devres_release_group()+ithc_start().
-+ // But because this is called during DMA processing, that would have to be done
-+ // asynchronously (schedule_work()?). And with extra locking?
-+ pci_err(ithc->pci, "reset\n");
-+ CHECK(ithc_init_device, ithc);
-+ if (ithc_use_rx0)
-+ ithc_dma_rx_enable(ithc, 0);
-+ if (ithc_use_rx1)
-+ ithc_dma_rx_enable(ithc, 1);
-+ ithc_log_regs(ithc);
-+ pci_dbg(ithc->pci, "reset completed\n");
-+ return 0;
-+}
-+
-+static void ithc_stop(void *res)
-+{
-+ struct ithc *ithc = res;
-+ pci_dbg(ithc->pci, "stopping\n");
-+ ithc_log_regs(ithc);
-+
-+ if (ithc->poll_thread)
-+ CHECK(kthread_stop, ithc->poll_thread);
-+ if (ithc->irq >= 0)
-+ disable_irq(ithc->irq);
-+ CHECK(ithc_set_device_enabled, ithc, false);
-+ ithc_disable(ithc);
-+ hrtimer_cancel(&ithc->activity_start_timer);
-+ hrtimer_cancel(&ithc->activity_end_timer);
-+ cpu_latency_qos_remove_request(&ithc->activity_qos);
-+
-+ // Clear DMA config.
-+ for (unsigned int i = 0; i < 2; i++) {
-+ CHECK(waitl, ithc, &ithc->regs->dma_rx[i].status, DMA_RX_STATUS_ENABLED, 0);
-+ lo_hi_writeq(0, &ithc->regs->dma_rx[i].addr);
-+ writeb(0, &ithc->regs->dma_rx[i].num_bufs);
-+ writeb(0, &ithc->regs->dma_rx[i].num_prds);
-+ }
-+ lo_hi_writeq(0, &ithc->regs->dma_tx.addr);
-+ writeb(0, &ithc->regs->dma_tx.num_prds);
-+
-+ ithc_log_regs(ithc);
-+ pci_dbg(ithc->pci, "stopped\n");
-+}
-+
-+static void ithc_clear_drvdata(void *res)
-+{
-+ struct pci_dev *pci = res;
-+ pci_set_drvdata(pci, NULL);
-+}
-+
-+static int ithc_start(struct pci_dev *pci)
-+{
-+ pci_dbg(pci, "starting\n");
-+ if (pci_get_drvdata(pci)) {
-+ pci_err(pci, "device already initialized\n");
-+ return -EINVAL;
-+ }
-+ if (!devres_open_group(&pci->dev, ithc_start, GFP_KERNEL))
-+ return -ENOMEM;
-+
-+ // Allocate/init main driver struct.
-+ struct ithc *ithc = devm_kzalloc(&pci->dev, sizeof(*ithc), GFP_KERNEL);
-+ if (!ithc)
-+ return -ENOMEM;
-+ ithc->irq = -1;
-+ ithc->pci = pci;
-+ snprintf(ithc->phys, sizeof(ithc->phys), "pci-%s/" DEVNAME, pci_name(pci));
-+ init_waitqueue_head(&ithc->wait_hid_parse);
-+ init_waitqueue_head(&ithc->wait_hid_get_feature);
-+ mutex_init(&ithc->hid_get_feature_mutex);
-+ pci_set_drvdata(pci, ithc);
-+ CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_clear_drvdata, pci);
-+ if (ithc_log_regs_enabled)
-+ ithc->prev_regs = devm_kzalloc(&pci->dev, sizeof(*ithc->prev_regs), GFP_KERNEL);
-+
-+ // PCI initialization.
-+ CHECK_RET(pcim_enable_device, pci);
-+ pci_set_master(pci);
-+ CHECK_RET(pcim_iomap_regions, pci, BIT(0), DEVNAME " regs");
-+ CHECK_RET(dma_set_mask_and_coherent, &pci->dev, DMA_BIT_MASK(64));
-+ CHECK_RET(pci_set_power_state, pci, PCI_D0);
-+ ithc->regs = pcim_iomap_table(pci)[0];
-+
-+ // Allocate IRQ.
-+ if (!ithc_use_polling) {
-+ CHECK_RET(pci_alloc_irq_vectors, pci, 1, 1, PCI_IRQ_MSI | PCI_IRQ_MSIX);
-+ ithc->irq = CHECK(pci_irq_vector, pci, 0);
-+ if (ithc->irq < 0)
-+ return ithc->irq;
-+ }
-+
-+ // Initialize THC and touch device.
-+ CHECK_RET(ithc_init_device, ithc);
-+ CHECK(devm_device_add_groups, &pci->dev, ithc_attribute_groups);
-+ if (ithc_use_rx0)
-+ CHECK_RET(ithc_dma_rx_init, ithc, 0);
-+ if (ithc_use_rx1)
-+ CHECK_RET(ithc_dma_rx_init, ithc, 1);
-+ CHECK_RET(ithc_dma_tx_init, ithc);
-+
-+ cpu_latency_qos_add_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-+ hrtimer_init(&ithc->activity_start_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
-+ ithc->activity_start_timer.function = ithc_activity_start_timer_callback;
-+ hrtimer_init(&ithc->activity_end_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-+ ithc->activity_end_timer.function = ithc_activity_end_timer_callback;
-+
-+ // Add ithc_stop() callback AFTER setting up DMA buffers, so that polling/irqs/DMA are
-+ // disabled BEFORE the buffers are freed.
-+ CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_stop, ithc);
-+
-+ CHECK_RET(ithc_hid_init, ithc);
-+
-+ // Start polling/IRQ.
-+ if (ithc_use_polling) {
-+ pci_info(pci, "using polling instead of irq\n");
-+ // Use a thread instead of simple timer because we want to be able to sleep.
-+ ithc->poll_thread = kthread_run(ithc_poll_thread, ithc, DEVNAME "poll");
-+ if (IS_ERR(ithc->poll_thread)) {
-+ int err = PTR_ERR(ithc->poll_thread);
-+ ithc->poll_thread = NULL;
-+ return err;
-+ }
-+ } else {
-+ CHECK_RET(devm_request_threaded_irq, &pci->dev, ithc->irq, NULL,
-+ ithc_interrupt_thread, IRQF_TRIGGER_HIGH | IRQF_ONESHOT, DEVNAME, ithc);
-+ }
-+
-+ if (ithc_use_rx0)
-+ ithc_dma_rx_enable(ithc, 0);
-+ if (ithc_use_rx1)
-+ ithc_dma_rx_enable(ithc, 1);
-+
-+ // hid_add_device() can only be called after irq/polling is started and DMA is enabled,
-+ // because it calls ithc_hid_parse() which reads the report descriptor via DMA.
-+ CHECK_RET(hid_add_device, ithc->hid);
-+
-+ CHECK(ithc_debug_init, ithc);
-+
-+ pci_dbg(pci, "started\n");
-+ return 0;
-+}
-+
-+static int ithc_probe(struct pci_dev *pci, const struct pci_device_id *id)
-+{
-+ pci_dbg(pci, "device probe\n");
-+ return ithc_start(pci);
-+}
-+
-+static void ithc_remove(struct pci_dev *pci)
-+{
-+ pci_dbg(pci, "device remove\n");
-+ // all cleanup is handled by devres
-+}
-+
-+// For suspend/resume, we just deinitialize and reinitialize everything.
-+// TODO It might be cleaner to keep the HID device around, however we would then have to signal
-+// to userspace that the touch device has lost state and userspace needs to e.g. resend 'set
-+// feature' requests. Hidraw does not seem to have a facility to do that.
-+static int ithc_suspend(struct device *dev)
-+{
-+ struct pci_dev *pci = to_pci_dev(dev);
-+ pci_dbg(pci, "pm suspend\n");
-+ devres_release_group(dev, ithc_start);
-+ return 0;
-+}
-+
-+static int ithc_resume(struct device *dev)
-+{
-+ struct pci_dev *pci = to_pci_dev(dev);
-+ pci_dbg(pci, "pm resume\n");
-+ return ithc_start(pci);
-+}
-+
-+static int ithc_freeze(struct device *dev)
-+{
-+ struct pci_dev *pci = to_pci_dev(dev);
-+ pci_dbg(pci, "pm freeze\n");
-+ devres_release_group(dev, ithc_start);
-+ return 0;
-+}
-+
-+static int ithc_thaw(struct device *dev)
-+{
-+ struct pci_dev *pci = to_pci_dev(dev);
-+ pci_dbg(pci, "pm thaw\n");
-+ return ithc_start(pci);
-+}
-+
-+static int ithc_restore(struct device *dev)
-+{
-+ struct pci_dev *pci = to_pci_dev(dev);
-+ pci_dbg(pci, "pm restore\n");
-+ return ithc_start(pci);
-+}
-+
-+static struct pci_driver ithc_driver = {
-+ .name = DEVNAME,
-+ .id_table = ithc_pci_tbl,
-+ .probe = ithc_probe,
-+ .remove = ithc_remove,
-+ .driver.pm = &(const struct dev_pm_ops) {
-+ .suspend = ithc_suspend,
-+ .resume = ithc_resume,
-+ .freeze = ithc_freeze,
-+ .thaw = ithc_thaw,
-+ .restore = ithc_restore,
-+ },
-+ //.dev_groups = ithc_attribute_groups, // could use this (since 5.14), however the attributes won't have valid values until config has been read anyway
-+};
-+
-+static int __init ithc_init(void)
-+{
-+ return pci_register_driver(&ithc_driver);
-+}
-+
-+static void __exit ithc_exit(void)
-+{
-+ pci_unregister_driver(&ithc_driver);
-+}
-+
-+module_init(ithc_init);
-+module_exit(ithc_exit);
-+
-diff --git a/drivers/hid/ithc/ithc-regs.c b/drivers/hid/ithc/ithc-regs.c
-new file mode 100644
-index 0000000000000..e058721886e37
---- /dev/null
-+++ b/drivers/hid/ithc/ithc-regs.c
-@@ -0,0 +1,96 @@
-+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
-+
-+#include "ithc.h"
-+
-+#define reg_num(r) (0x1fff & (u16)(__force u64)(r))
-+
-+void bitsl(__iomem u32 *reg, u32 mask, u32 val)
-+{
-+ if (val & ~mask)
-+ pr_err("register 0x%x: invalid value 0x%x for bitmask 0x%x\n",
-+ reg_num(reg), val, mask);
-+ writel((readl(reg) & ~mask) | (val & mask), reg);
-+}
-+
-+void bitsb(__iomem u8 *reg, u8 mask, u8 val)
-+{
-+ if (val & ~mask)
-+ pr_err("register 0x%x: invalid value 0x%x for bitmask 0x%x\n",
-+ reg_num(reg), val, mask);
-+ writeb((readb(reg) & ~mask) | (val & mask), reg);
-+}
-+
-+int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val)
-+{
-+ pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
-+ reg_num(reg), mask, val);
-+ u32 x;
-+ if (readl_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
-+ pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
-+ reg_num(reg), mask, val);
-+ return -ETIMEDOUT;
-+ }
-+ pci_dbg(ithc->pci, "done waiting\n");
-+ return 0;
-+}
-+
-+int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val)
-+{
-+ pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
-+ reg_num(reg), mask, val);
-+ u8 x;
-+ if (readb_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
-+ pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
-+ reg_num(reg), mask, val);
-+ return -ETIMEDOUT;
-+ }
-+ pci_dbg(ithc->pci, "done waiting\n");
-+ return 0;
-+}
-+
-+int ithc_set_spi_config(struct ithc *ithc, u8 speed, u8 mode)
-+{
-+ pci_dbg(ithc->pci, "setting SPI speed to %i, mode %i\n", speed, mode);
-+ if (mode == 3)
-+ mode = 2;
-+ bitsl(&ithc->regs->spi_config,
-+ SPI_CONFIG_MODE(0xff) | SPI_CONFIG_SPEED(0xff) | SPI_CONFIG_UNKNOWN_18(0xff) | SPI_CONFIG_SPEED2(0xff),
-+ SPI_CONFIG_MODE(mode) | SPI_CONFIG_SPEED(speed) | SPI_CONFIG_UNKNOWN_18(0) | SPI_CONFIG_SPEED2(speed));
-+ return 0;
-+}
-+
-+int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data)
-+{
-+ pci_dbg(ithc->pci, "SPI command %u, size %u, offset %u\n", command, size, offset);
-+ if (size > sizeof(ithc->regs->spi_cmd.data))
-+ return -EINVAL;
-+
-+ // Wait if the device is still busy.
-+ CHECK_RET(waitl, ithc, &ithc->regs->spi_cmd.status, SPI_CMD_STATUS_BUSY, 0);
-+ // Clear result flags.
-+ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
-+
-+ // Init SPI command data.
-+ writeb(command, &ithc->regs->spi_cmd.code);
-+ writew(size, &ithc->regs->spi_cmd.size);
-+ writel(offset, &ithc->regs->spi_cmd.offset);
-+ u32 *p = data, n = (size + 3) / 4;
-+ for (u32 i = 0; i < n; i++)
-+ writel(p[i], &ithc->regs->spi_cmd.data[i]);
-+
-+ // Start transmission.
-+ bitsb_set(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_SEND);
-+ CHECK_RET(waitl, ithc, &ithc->regs->spi_cmd.status, SPI_CMD_STATUS_BUSY, 0);
-+
-+ // Read response.
-+ if ((readl(&ithc->regs->spi_cmd.status) & (SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR)) != SPI_CMD_STATUS_DONE)
-+ return -EIO;
-+ if (readw(&ithc->regs->spi_cmd.size) != size)
-+ return -EMSGSIZE;
-+ for (u32 i = 0; i < n; i++)
-+ p[i] = readl(&ithc->regs->spi_cmd.data[i]);
-+
-+ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
-+ return 0;
-+}
-+
-diff --git a/drivers/hid/ithc/ithc-regs.h b/drivers/hid/ithc/ithc-regs.h
-new file mode 100644
-index 0000000000000..d4007d9e2bacc
---- /dev/null
-+++ b/drivers/hid/ithc/ithc-regs.h
-@@ -0,0 +1,189 @@
-+/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
-+
-+#define CONTROL_QUIESCE BIT(1)
-+#define CONTROL_IS_QUIESCED BIT(2)
-+#define CONTROL_NRESET BIT(3)
-+#define CONTROL_READY BIT(29)
-+
-+#define SPI_CONFIG_MODE(x) (((x) & 3) << 2)
-+#define SPI_CONFIG_SPEED(x) (((x) & 7) << 4)
-+#define SPI_CONFIG_UNKNOWN_18(x) (((x) & 3) << 18)
-+#define SPI_CONFIG_SPEED2(x) (((x) & 0xf) << 20) // high bit = high speed mode?
-+
-+#define ERROR_CONTROL_UNKNOWN_0 BIT(0)
-+#define ERROR_CONTROL_DISABLE_DMA BIT(1) // clears DMA_RX_CONTROL_ENABLE when a DMA error occurs
-+#define ERROR_CONTROL_UNKNOWN_2 BIT(2)
-+#define ERROR_CONTROL_UNKNOWN_3 BIT(3)
-+#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_9 BIT(9)
-+#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_10 BIT(10)
-+#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_12 BIT(12)
-+#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_13 BIT(13)
-+#define ERROR_CONTROL_UNKNOWN_16(x) (((x) & 0xff) << 16) // spi error code irq?
-+#define ERROR_CONTROL_SET_DMA_STATUS BIT(29) // sets DMA_RX_STATUS_ERROR when a DMA error occurs
-+
-+#define ERROR_STATUS_DMA BIT(28)
-+#define ERROR_STATUS_SPI BIT(30)
-+
-+#define ERROR_FLAG_DMA_UNKNOWN_9 BIT(9)
-+#define ERROR_FLAG_DMA_UNKNOWN_10 BIT(10)
-+#define ERROR_FLAG_DMA_RX_TIMEOUT BIT(12) // set when we receive a truncated DMA message
-+#define ERROR_FLAG_DMA_UNKNOWN_13 BIT(13)
-+#define ERROR_FLAG_SPI_BUS_TURNAROUND BIT(16)
-+#define ERROR_FLAG_SPI_RESPONSE_TIMEOUT BIT(17)
-+#define ERROR_FLAG_SPI_INTRA_PACKET_TIMEOUT BIT(18)
-+#define ERROR_FLAG_SPI_INVALID_RESPONSE BIT(19)
-+#define ERROR_FLAG_SPI_HS_RX_TIMEOUT BIT(20)
-+#define ERROR_FLAG_SPI_TOUCH_IC_INIT BIT(21)
-+
-+#define SPI_CMD_CONTROL_SEND BIT(0) // cleared by device when sending is complete
-+#define SPI_CMD_CONTROL_IRQ BIT(1)
-+
-+#define SPI_CMD_CODE_READ 4
-+#define SPI_CMD_CODE_WRITE 6
-+
-+#define SPI_CMD_STATUS_DONE BIT(0)
-+#define SPI_CMD_STATUS_ERROR BIT(1)
-+#define SPI_CMD_STATUS_BUSY BIT(3)
-+
-+#define DMA_TX_CONTROL_SEND BIT(0) // cleared by device when sending is complete
-+#define DMA_TX_CONTROL_IRQ BIT(3)
-+
-+#define DMA_TX_STATUS_DONE BIT(0)
-+#define DMA_TX_STATUS_ERROR BIT(1)
-+#define DMA_TX_STATUS_UNKNOWN_2 BIT(2)
-+#define DMA_TX_STATUS_UNKNOWN_3 BIT(3) // busy?
-+
-+#define DMA_RX_CONTROL_ENABLE BIT(0)
-+#define DMA_RX_CONTROL_IRQ_UNKNOWN_1 BIT(1) // rx1 only?
-+#define DMA_RX_CONTROL_IRQ_ERROR BIT(3) // rx1 only?
-+#define DMA_RX_CONTROL_IRQ_UNKNOWN_4 BIT(4) // rx0 only?
-+#define DMA_RX_CONTROL_IRQ_DATA BIT(5)
-+
-+#define DMA_RX_CONTROL2_UNKNOWN_5 BIT(5) // rx0 only?
-+#define DMA_RX_CONTROL2_RESET BIT(7) // resets ringbuffer indices
-+
-+#define DMA_RX_WRAP_FLAG BIT(7)
-+
-+#define DMA_RX_STATUS_ERROR BIT(3)
-+#define DMA_RX_STATUS_UNKNOWN_4 BIT(4) // set in rx0 after using CONTROL_NRESET when it becomes possible to read config (can take >100ms)
-+#define DMA_RX_STATUS_HAVE_DATA BIT(5)
-+#define DMA_RX_STATUS_ENABLED BIT(8)
-+
-+// COUNTER_RESET can be written to counter registers to reset them to zero. However, in some cases this can mess up the THC.
-+#define COUNTER_RESET BIT(31)
-+
-+struct ithc_registers {
-+ /* 0000 */ u32 _unknown_0000[1024];
-+ /* 1000 */ u32 _unknown_1000;
-+ /* 1004 */ u32 _unknown_1004;
-+ /* 1008 */ u32 control_bits;
-+ /* 100c */ u32 _unknown_100c;
-+ /* 1010 */ u32 spi_config;
-+ /* 1014 */ u32 _unknown_1014[3];
-+ /* 1020 */ u32 error_control;
-+ /* 1024 */ u32 error_status; // write to clear
-+ /* 1028 */ u32 error_flags; // write to clear
-+ /* 102c */ u32 _unknown_102c[5];
-+ struct {
-+ /* 1040 */ u8 control;
-+ /* 1041 */ u8 code;
-+ /* 1042 */ u16 size;
-+ /* 1044 */ u32 status; // write to clear
-+ /* 1048 */ u32 offset;
-+ /* 104c */ u32 data[16];
-+ /* 108c */ u32 _unknown_108c;
-+ } spi_cmd;
-+ struct {
-+ /* 1090 */ u64 addr; // cannot be written with writeq(), must use lo_hi_writeq()
-+ /* 1098 */ u8 control;
-+ /* 1099 */ u8 _unknown_1099;
-+ /* 109a */ u8 _unknown_109a;
-+ /* 109b */ u8 num_prds;
-+ /* 109c */ u32 status; // write to clear
-+ } dma_tx;
-+ /* 10a0 */ u32 _unknown_10a0[7];
-+ /* 10bc */ u32 state; // is 0xe0000402 (dev config val 0) after CONTROL_NRESET, 0xe0000461 after first touch, 0xe0000401 after DMA_RX_CODE_RESET
-+ /* 10c0 */ u32 _unknown_10c0[8];
-+ /* 10e0 */ u32 _unknown_10e0_counters[3];
-+ /* 10ec */ u32 _unknown_10ec[5];
-+ struct {
-+ /* 1100/1200 */ u64 addr; // cannot be written with writeq(), must use lo_hi_writeq()
-+ /* 1108/1208 */ u8 num_bufs;
-+ /* 1109/1209 */ u8 num_prds;
-+ /* 110a/120a */ u16 _unknown_110a;
-+ /* 110c/120c */ u8 control;
-+ /* 110d/120d */ u8 head;
-+ /* 110e/120e */ u8 tail;
-+ /* 110f/120f */ u8 control2;
-+ /* 1110/1210 */ u32 status; // write to clear
-+ /* 1114/1214 */ u32 _unknown_1114;
-+ /* 1118/1218 */ u64 _unknown_1118_guc_addr;
-+ /* 1120/1220 */ u32 _unknown_1120_guc;
-+ /* 1124/1224 */ u32 _unknown_1124_guc;
-+ /* 1128/1228 */ u32 unknown_init_bits; // bit 2 = guc related, bit 3 = rx1 related, bit 4 = guc related
-+ /* 112c/122c */ u32 _unknown_112c;
-+ /* 1130/1230 */ u64 _unknown_1130_guc_addr;
-+ /* 1138/1238 */ u32 _unknown_1138_guc;
-+ /* 113c/123c */ u32 _unknown_113c;
-+ /* 1140/1240 */ u32 _unknown_1140_guc;
-+ /* 1144/1244 */ u32 _unknown_1144[23];
-+ /* 11a0/12a0 */ u32 _unknown_11a0_counters[6];
-+ /* 11b8/12b8 */ u32 _unknown_11b8[18];
-+ } dma_rx[2];
-+};
-+static_assert(sizeof(struct ithc_registers) == 0x1300);
-+
-+#define DEVCFG_DMA_RX_SIZE(x) ((((x) & 0x3fff) + 1) << 6)
-+#define DEVCFG_DMA_TX_SIZE(x) (((((x) >> 14) & 0x3ff) + 1) << 6)
-+
-+#define DEVCFG_TOUCH_MASK 0x3f
-+#define DEVCFG_TOUCH_ENABLE BIT(0)
-+#define DEVCFG_TOUCH_UNKNOWN_1 BIT(1)
-+#define DEVCFG_TOUCH_UNKNOWN_2 BIT(2)
-+#define DEVCFG_TOUCH_UNKNOWN_3 BIT(3)
-+#define DEVCFG_TOUCH_UNKNOWN_4 BIT(4)
-+#define DEVCFG_TOUCH_UNKNOWN_5 BIT(5)
-+#define DEVCFG_TOUCH_UNKNOWN_6 BIT(6)
-+
-+#define DEVCFG_DEVICE_ID_TIC 0x43495424 // "$TIC"
-+
-+#define DEVCFG_SPI_MAX_FREQ(x) (((x) >> 1) & 0xf) // high bit = use high speed mode?
-+#define DEVCFG_SPI_MODE(x) (((x) >> 6) & 3)
-+#define DEVCFG_SPI_UNKNOWN_8(x) (((x) >> 8) & 0x3f)
-+#define DEVCFG_SPI_NEEDS_HEARTBEAT BIT(20) // TODO implement heartbeat
-+#define DEVCFG_SPI_HEARTBEAT_INTERVAL(x) (((x) >> 21) & 7)
-+#define DEVCFG_SPI_UNKNOWN_25 BIT(25)
-+#define DEVCFG_SPI_UNKNOWN_26 BIT(26)
-+#define DEVCFG_SPI_UNKNOWN_27 BIT(27)
-+#define DEVCFG_SPI_DELAY(x) (((x) >> 28) & 7) // TODO use this
-+#define DEVCFG_SPI_USE_EXT_READ_CFG BIT(31) // TODO use this?
-+
-+struct ithc_device_config { // (Example values are from an SP7+.)
-+ u32 _unknown_00; // 00 = 0xe0000402 (0xe0000401 after DMA_RX_CODE_RESET)
-+ u32 _unknown_04; // 04 = 0x00000000
-+ u32 dma_buf_sizes; // 08 = 0x000a00ff
-+ u32 touch_cfg; // 0c = 0x0000001c
-+ u32 _unknown_10; // 10 = 0x0000001c
-+ u32 device_id; // 14 = 0x43495424 = "$TIC"
-+ u32 spi_config; // 18 = 0xfda00a2e
-+ u16 vendor_id; // 1c = 0x045e = Microsoft Corp.
-+ u16 product_id; // 1e = 0x0c1a
-+ u32 revision; // 20 = 0x00000001
-+ u32 fw_version; // 24 = 0x05008a8b = 5.0.138.139 (this value looks more random on newer devices)
-+ u32 _unknown_28; // 28 = 0x00000000
-+ u32 fw_mode; // 2c = 0x00000000 (for fw update?)
-+ u32 _unknown_30; // 30 = 0x00000000
-+ u32 _unknown_34; // 34 = 0x0404035e (u8,u8,u8,u8 = version?)
-+ u32 _unknown_38; // 38 = 0x000001c0 (0x000001c1 after DMA_RX_CODE_RESET)
-+ u32 _unknown_3c; // 3c = 0x00000002
-+};
-+
-+void bitsl(__iomem u32 *reg, u32 mask, u32 val);
-+void bitsb(__iomem u8 *reg, u8 mask, u8 val);
-+#define bitsl_set(reg, x) bitsl(reg, x, x)
-+#define bitsb_set(reg, x) bitsb(reg, x, x)
-+int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val);
-+int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val);
-+int ithc_set_spi_config(struct ithc *ithc, u8 speed, u8 mode);
-+int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data);
-+
-diff --git a/drivers/hid/ithc/ithc.h b/drivers/hid/ithc/ithc.h
-new file mode 100644
-index 0000000000000..028e55a4ec53e
---- /dev/null
-+++ b/drivers/hid/ithc/ithc.h
-@@ -0,0 +1,67 @@
-+/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
-+
-+#include <linux/module.h>
-+#include <linux/input.h>
-+#include <linux/hid.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/highmem.h>
-+#include <linux/pci.h>
-+#include <linux/io-64-nonatomic-lo-hi.h>
-+#include <linux/iopoll.h>
-+#include <linux/delay.h>
-+#include <linux/kthread.h>
-+#include <linux/miscdevice.h>
-+#include <linux/debugfs.h>
-+#include <linux/poll.h>
-+#include <linux/timer.h>
-+#include <linux/pm_qos.h>
-+
-+#define DEVNAME "ithc"
-+#define DEVFULLNAME "Intel Touch Host Controller"
-+
-+#undef pr_fmt
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#define CHECK(fn, ...) ({ int r = fn(__VA_ARGS__); if (r < 0) pci_err(ithc->pci, "%s: %s failed with %i\n", __func__, #fn, r); r; })
-+#define CHECK_RET(...) do { int r = CHECK(__VA_ARGS__); if (r < 0) return r; } while (0)
-+
-+#define NUM_RX_BUF 16
-+
-+struct ithc;
-+
-+#include "ithc-regs.h"
-+#include "ithc-dma.h"
-+
-+struct ithc {
-+ char phys[32];
-+ struct pci_dev *pci;
-+ int irq;
-+ struct task_struct *poll_thread;
-+
-+ struct pm_qos_request activity_qos;
-+ struct hrtimer activity_start_timer;
-+ struct hrtimer activity_end_timer;
-+ ktime_t last_rx_time;
-+ unsigned int cur_rx_seq_count;
-+ unsigned int cur_rx_seq_errors;
-+
-+ struct hid_device *hid;
-+ bool hid_parse_done;
-+ wait_queue_head_t wait_hid_parse;
-+ wait_queue_head_t wait_hid_get_feature;
-+ struct mutex hid_get_feature_mutex;
-+ void *hid_get_feature_buf;
-+ size_t hid_get_feature_size;
-+
-+ struct ithc_registers __iomem *regs;
-+ struct ithc_registers *prev_regs; // for debugging
-+ struct ithc_device_config config;
-+ struct ithc_dma_rx dma_rx[2];
-+ struct ithc_dma_tx dma_tx;
-+};
-+
-+int ithc_reset(struct ithc *ithc);
-+void ithc_set_active(struct ithc *ithc, unsigned int duration_us);
-+int ithc_debug_init(struct ithc *ithc);
-+void ithc_log_regs(struct ithc *ithc);
-+
---
-2.45.1
-
-From 2537922b2f0c1d0002a2afe6d0fc79695add8e60 Mon Sep 17 00:00:00 2001
-From: quo <tuple@list.ru>
-Date: Fri, 19 Apr 2024 22:11:09 +0200
-Subject: [PATCH] hid: ithc: Update from quo/ithc-linux
-
- - Added QuickSPI support for Surface Laptop Studio 2
- - Use Latency Tolerance Reporting instead of manual CPU latency adjustments
-
-Based on: https://github.com/quo/ithc-linux/commit/18afc6ffacd70b49fdee2eb1ab0a8acd159edb31
-
-Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
-Patchset: ithc
----
- drivers/hid/ithc/Kbuild | 2 +-
- drivers/hid/ithc/ithc-debug.c | 33 +-
- drivers/hid/ithc/ithc-debug.h | 7 +
- drivers/hid/ithc/ithc-dma.c | 125 ++-----
- drivers/hid/ithc/ithc-dma.h | 24 +-
- drivers/hid/ithc/ithc-hid.c | 207 +++++++++++
- drivers/hid/ithc/ithc-hid.h | 32 ++
- drivers/hid/ithc/ithc-legacy.c | 252 ++++++++++++++
- drivers/hid/ithc/ithc-legacy.h | 8 +
- drivers/hid/ithc/ithc-main.c | 386 ++++-----------------
- drivers/hid/ithc/ithc-quickspi.c | 578 +++++++++++++++++++++++++++++++
- drivers/hid/ithc/ithc-quickspi.h | 39 +++
- drivers/hid/ithc/ithc-regs.c | 72 +++-
- drivers/hid/ithc/ithc-regs.h | 143 ++++----
- drivers/hid/ithc/ithc.h | 71 ++--
- 15 files changed, 1441 insertions(+), 538 deletions(-)
- create mode 100644 drivers/hid/ithc/ithc-debug.h
- create mode 100644 drivers/hid/ithc/ithc-hid.c
- create mode 100644 drivers/hid/ithc/ithc-hid.h
- create mode 100644 drivers/hid/ithc/ithc-legacy.c
- create mode 100644 drivers/hid/ithc/ithc-legacy.h
- create mode 100644 drivers/hid/ithc/ithc-quickspi.c
- create mode 100644 drivers/hid/ithc/ithc-quickspi.h
-
-diff --git a/drivers/hid/ithc/Kbuild b/drivers/hid/ithc/Kbuild
-index aea83f2ac07b4..4937ba1312973 100644
---- a/drivers/hid/ithc/Kbuild
-+++ b/drivers/hid/ithc/Kbuild
-@@ -1,6 +1,6 @@
- obj-$(CONFIG_HID_ITHC) := ithc.o
-
--ithc-objs := ithc-main.o ithc-regs.o ithc-dma.o ithc-debug.o
-+ithc-objs := ithc-main.o ithc-regs.o ithc-dma.o ithc-hid.o ithc-legacy.o ithc-quickspi.o ithc-debug.o
-
- ccflags-y := -std=gnu11 -Wno-declaration-after-statement
-
-diff --git a/drivers/hid/ithc/ithc-debug.c b/drivers/hid/ithc/ithc-debug.c
-index 1f1f1e33f2e5a..2d8c6afe99663 100644
---- a/drivers/hid/ithc/ithc-debug.c
-+++ b/drivers/hid/ithc/ithc-debug.c
-@@ -85,10 +85,11 @@ static ssize_t ithc_debugfs_cmd_write(struct file *f, const char __user *buf, si
- case 'd': // dma command: cmd len data...
- // get report descriptor: d 7 8 0 0
- // enable multitouch: d 3 2 0x0105
-- if (n < 2 || a[1] > (n - 2) * 4)
-+ if (n < 1)
- return -EINVAL;
-- pci_info(ithc->pci, "debug dma command %u with %u bytes of data\n", a[0], a[1]);
-- if (ithc_dma_tx(ithc, a[0], a[1], a + 2))
-+ pci_info(ithc->pci, "debug dma command with %u bytes of data\n", n * 4);
-+ struct ithc_data data = { .type = ITHC_DATA_RAW, .size = n * 4, .data = a };
-+ if (ithc_dma_tx(ithc, &data))
- pci_err(ithc->pci, "dma tx failed\n");
- break;
- default:
-@@ -98,6 +99,23 @@ static ssize_t ithc_debugfs_cmd_write(struct file *f, const char __user *buf, si
- return len;
- }
-
-+static struct dentry *dbg_dir;
-+
-+void __init ithc_debug_init_module(void)
-+{
-+ struct dentry *d = debugfs_create_dir(DEVNAME, NULL);
-+ if (IS_ERR(d))
-+ pr_warn("failed to create debugfs dir (%li)\n", PTR_ERR(d));
-+ else
-+ dbg_dir = d;
-+}
-+
-+void __exit ithc_debug_exit_module(void)
-+{
-+ debugfs_remove_recursive(dbg_dir);
-+ dbg_dir = NULL;
-+}
-+
- static const struct file_operations ithc_debugfops_cmd = {
- .owner = THIS_MODULE,
- .write = ithc_debugfs_cmd_write,
-@@ -106,17 +124,18 @@ static const struct file_operations ithc_debugfops_cmd = {
- static void ithc_debugfs_devres_release(struct device *dev, void *res)
- {
- struct dentry **dbgm = res;
-- if (*dbgm)
-- debugfs_remove_recursive(*dbgm);
-+ debugfs_remove_recursive(*dbgm);
- }
-
--int ithc_debug_init(struct ithc *ithc)
-+int ithc_debug_init_device(struct ithc *ithc)
- {
-+ if (!dbg_dir)
-+ return -ENOENT;
- struct dentry **dbgm = devres_alloc(ithc_debugfs_devres_release, sizeof(*dbgm), GFP_KERNEL);
- if (!dbgm)
- return -ENOMEM;
- devres_add(&ithc->pci->dev, dbgm);
-- struct dentry *dbg = debugfs_create_dir(DEVNAME, NULL);
-+ struct dentry *dbg = debugfs_create_dir(pci_name(ithc->pci), dbg_dir);
- if (IS_ERR(dbg))
- return PTR_ERR(dbg);
- *dbgm = dbg;
-diff --git a/drivers/hid/ithc/ithc-debug.h b/drivers/hid/ithc/ithc-debug.h
-new file mode 100644
-index 0000000000000..38c53d916bdb5
---- /dev/null
-+++ b/drivers/hid/ithc/ithc-debug.h
-@@ -0,0 +1,7 @@
-+/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
-+
-+void ithc_debug_init_module(void);
-+void ithc_debug_exit_module(void);
-+int ithc_debug_init_device(struct ithc *ithc);
-+void ithc_log_regs(struct ithc *ithc);
-+
-diff --git a/drivers/hid/ithc/ithc-dma.c b/drivers/hid/ithc/ithc-dma.c
-index ffb8689b8a780..bf4eab33062b0 100644
---- a/drivers/hid/ithc/ithc-dma.c
-+++ b/drivers/hid/ithc/ithc-dma.c
-@@ -173,10 +173,9 @@ int ithc_dma_rx_init(struct ithc *ithc, u8 channel)
- mutex_init(&rx->mutex);
-
- // Allocate buffers.
-- u32 buf_size = DEVCFG_DMA_RX_SIZE(ithc->config.dma_buf_sizes);
-- unsigned int num_pages = (buf_size + PAGE_SIZE - 1) / PAGE_SIZE;
-+ unsigned int num_pages = (ithc->max_rx_size + PAGE_SIZE - 1) / PAGE_SIZE;
- pci_dbg(ithc->pci, "allocating rx buffers: num = %u, size = %u, pages = %u\n",
-- NUM_RX_BUF, buf_size, num_pages);
-+ NUM_RX_BUF, ithc->max_rx_size, num_pages);
- CHECK_RET(ithc_dma_prd_alloc, ithc, &rx->prds, NUM_RX_BUF, num_pages, DMA_FROM_DEVICE);
- for (unsigned int i = 0; i < NUM_RX_BUF; i++)
- CHECK_RET(ithc_dma_data_alloc, ithc, &rx->prds, &rx->bufs[i]);
-@@ -214,10 +213,9 @@ int ithc_dma_tx_init(struct ithc *ithc)
- mutex_init(&tx->mutex);
-
- // Allocate buffers.
-- tx->max_size = DEVCFG_DMA_TX_SIZE(ithc->config.dma_buf_sizes);
-- unsigned int num_pages = (tx->max_size + PAGE_SIZE - 1) / PAGE_SIZE;
-+ unsigned int num_pages = (ithc->max_tx_size + PAGE_SIZE - 1) / PAGE_SIZE;
- pci_dbg(ithc->pci, "allocating tx buffers: size = %u, pages = %u\n",
-- tx->max_size, num_pages);
-+ ithc->max_tx_size, num_pages);
- CHECK_RET(ithc_dma_prd_alloc, ithc, &tx->prds, 1, num_pages, DMA_TO_DEVICE);
- CHECK_RET(ithc_dma_data_alloc, ithc, &tx->prds, &tx->buf);
-
-@@ -230,71 +228,6 @@ int ithc_dma_tx_init(struct ithc *ithc)
- return 0;
- }
-
--static int ithc_dma_rx_process_buf(struct ithc *ithc, struct ithc_dma_data_buffer *data,
-- u8 channel, u8 buf)
--{
-- if (buf >= NUM_RX_BUF) {
-- pci_err(ithc->pci, "invalid dma ringbuffer index\n");
-- return -EINVAL;
-- }
-- u32 len = data->data_size;
-- struct ithc_dma_rx_header *hdr = data->addr;
-- u8 *hiddata = (void *)(hdr + 1);
-- if (len >= sizeof(*hdr) && hdr->code == DMA_RX_CODE_RESET) {
-- // The THC sends a reset request when we need to reinitialize the device.
-- // This usually only happens if we send an invalid command or put the device
-- // in a bad state.
-- CHECK(ithc_reset, ithc);
-- } else if (len < sizeof(*hdr) || len != sizeof(*hdr) + hdr->data_size) {
-- if (hdr->code == DMA_RX_CODE_INPUT_REPORT) {
-- // When the CPU enters a low power state during DMA, we can get truncated
-- // messages. For Surface devices, this will typically be a single touch
-- // report that is only 1 byte, or a multitouch report that is 257 bytes.
-- // See also ithc_set_active().
-- } else {
-- pci_err(ithc->pci, "invalid dma rx data! channel %u, buffer %u, size %u, code %u, data size %u\n",
-- channel, buf, len, hdr->code, hdr->data_size);
-- print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
-- hdr, min(len, 0x400u), 0);
-- }
-- } else if (hdr->code == DMA_RX_CODE_REPORT_DESCRIPTOR && hdr->data_size > 8) {
-- // Response to a 'get report descriptor' request.
-- // The actual descriptor is preceded by 8 nul bytes.
-- CHECK(hid_parse_report, ithc->hid, hiddata + 8, hdr->data_size - 8);
-- WRITE_ONCE(ithc->hid_parse_done, true);
-- wake_up(&ithc->wait_hid_parse);
-- } else if (hdr->code == DMA_RX_CODE_INPUT_REPORT) {
-- // Standard HID input report containing touch data.
-- CHECK(hid_input_report, ithc->hid, HID_INPUT_REPORT, hiddata, hdr->data_size, 1);
-- } else if (hdr->code == DMA_RX_CODE_FEATURE_REPORT) {
-- // Response to a 'get feature' request.
-- bool done = false;
-- mutex_lock(&ithc->hid_get_feature_mutex);
-- if (ithc->hid_get_feature_buf) {
-- if (hdr->data_size < ithc->hid_get_feature_size)
-- ithc->hid_get_feature_size = hdr->data_size;
-- memcpy(ithc->hid_get_feature_buf, hiddata, ithc->hid_get_feature_size);
-- ithc->hid_get_feature_buf = NULL;
-- done = true;
-- }
-- mutex_unlock(&ithc->hid_get_feature_mutex);
-- if (done) {
-- wake_up(&ithc->wait_hid_get_feature);
-- } else {
-- // Received data without a matching request, or the request already
-- // timed out. (XXX What's the correct thing to do here?)
-- CHECK(hid_input_report, ithc->hid, HID_FEATURE_REPORT,
-- hiddata, hdr->data_size, 1);
-- }
-- } else {
-- pci_dbg(ithc->pci, "unhandled dma rx data! channel %u, buffer %u, size %u, code %u\n",
-- channel, buf, len, hdr->code);
-- print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
-- hdr, min(len, 0x400u), 0);
-- }
-- return 0;
--}
--
- static int ithc_dma_rx_unlocked(struct ithc *ithc, u8 channel)
- {
- // Process all filled RX buffers from the ringbuffer.
-@@ -316,7 +249,16 @@ static int ithc_dma_rx_unlocked(struct ithc *ithc, u8 channel)
- rx->num_received = ++n;
-
- // process data
-- CHECK(ithc_dma_rx_process_buf, ithc, b, channel, tail);
-+ struct ithc_data d;
-+ if ((ithc->use_quickspi ? ithc_quickspi_decode_rx : ithc_legacy_decode_rx)
-+ (ithc, b->addr, b->data_size, &d) < 0) {
-+ pci_err(ithc->pci, "invalid dma rx data! channel %u, buffer %u, size %u: %*ph\n",
-+ channel, tail, b->data_size, min((int)b->data_size, 64), b->addr);
-+ print_hex_dump_debug(DEVNAME " data: ", DUMP_PREFIX_OFFSET, 32, 1,
-+ b->addr, min(b->data_size, 0x400u), 0);
-+ } else {
-+ ithc_hid_process_data(ithc, &d);
-+ }
-
- // give the buffer back to the device
- CHECK_RET(ithc_dma_data_buffer_put, ithc, &rx->prds, b, tail);
-@@ -331,31 +273,28 @@ int ithc_dma_rx(struct ithc *ithc, u8 channel)
- return ret;
- }
-
--static int ithc_dma_tx_unlocked(struct ithc *ithc, u32 cmdcode, u32 datasize, void *data)
-+static int ithc_dma_tx_unlocked(struct ithc *ithc, const struct ithc_data *data)
- {
-- ithc_set_active(ithc, 100 * USEC_PER_MSEC);
--
- // Send a single TX buffer to the THC.
-- pci_dbg(ithc->pci, "dma tx command %u, size %u\n", cmdcode, datasize);
-- struct ithc_dma_tx_header *hdr;
-- // Data must be padded to next 4-byte boundary.
-- u8 padding = datasize & 3 ? 4 - (datasize & 3) : 0;
-- unsigned int fullsize = sizeof(*hdr) + datasize + padding;
-- if (fullsize > ithc->dma_tx.max_size || fullsize > PAGE_SIZE)
-- return -EINVAL;
-+ pci_dbg(ithc->pci, "dma tx data type %u, size %u\n", data->type, data->size);
- CHECK_RET(ithc_dma_data_buffer_get, ithc, &ithc->dma_tx.prds, &ithc->dma_tx.buf, 0);
-
- // Fill the TX buffer with header and data.
-- ithc->dma_tx.buf.data_size = fullsize;
-- hdr = ithc->dma_tx.buf.addr;
-- hdr->code = cmdcode;
-- hdr->data_size = datasize;
-- u8 *dest = (void *)(hdr + 1);
-- memcpy(dest, data, datasize);
-- dest += datasize;
-- for (u8 p = 0; p < padding; p++)
-- *dest++ = 0;
-+ ssize_t sz;
-+ if (data->type == ITHC_DATA_RAW) {
-+ sz = min(data->size, ithc->max_tx_size);
-+ memcpy(ithc->dma_tx.buf.addr, data->data, sz);
-+ } else {
-+ sz = (ithc->use_quickspi ? ithc_quickspi_encode_tx : ithc_legacy_encode_tx)
-+ (ithc, data, ithc->dma_tx.buf.addr, ithc->max_tx_size);
-+ }
-+ ithc->dma_tx.buf.data_size = sz < 0 ? 0 : sz;
- CHECK_RET(ithc_dma_data_buffer_put, ithc, &ithc->dma_tx.prds, &ithc->dma_tx.buf, 0);
-+ if (sz < 0) {
-+ pci_err(ithc->pci, "failed to encode tx data type %i, size %u, error %i\n",
-+ data->type, data->size, (int)sz);
-+ return -EINVAL;
-+ }
-
- // Let the THC process the buffer.
- bitsb_set(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_SEND);
-@@ -363,10 +302,10 @@ static int ithc_dma_tx_unlocked(struct ithc *ithc, u32 cmdcode, u32 datasize, vo
- writel(DMA_TX_STATUS_DONE, &ithc->regs->dma_tx.status);
- return 0;
- }
--int ithc_dma_tx(struct ithc *ithc, u32 cmdcode, u32 datasize, void *data)
-+int ithc_dma_tx(struct ithc *ithc, const struct ithc_data *data)
- {
- mutex_lock(&ithc->dma_tx.mutex);
-- int ret = ithc_dma_tx_unlocked(ithc, cmdcode, datasize, data);
-+ int ret = ithc_dma_tx_unlocked(ithc, data);
- mutex_unlock(&ithc->dma_tx.mutex);
- return ret;
- }
-diff --git a/drivers/hid/ithc/ithc-dma.h b/drivers/hid/ithc/ithc-dma.h
-index 93652e4476bf8..1749a5819b3e7 100644
---- a/drivers/hid/ithc/ithc-dma.h
-+++ b/drivers/hid/ithc/ithc-dma.h
-@@ -11,27 +11,6 @@ struct ithc_phys_region_desc {
- u32 unused;
- };
-
--#define DMA_RX_CODE_INPUT_REPORT 3
--#define DMA_RX_CODE_FEATURE_REPORT 4
--#define DMA_RX_CODE_REPORT_DESCRIPTOR 5
--#define DMA_RX_CODE_RESET 7
--
--struct ithc_dma_rx_header {
-- u32 code;
-- u32 data_size;
-- u32 _unknown[14];
--};
--
--#define DMA_TX_CODE_SET_FEATURE 3
--#define DMA_TX_CODE_GET_FEATURE 4
--#define DMA_TX_CODE_OUTPUT_REPORT 5
--#define DMA_TX_CODE_GET_REPORT_DESCRIPTOR 7
--
--struct ithc_dma_tx_header {
-- u32 code;
-- u32 data_size;
--};
--
- struct ithc_dma_prd_buffer {
- void *addr;
- dma_addr_t dma_addr;
-@@ -49,7 +28,6 @@ struct ithc_dma_data_buffer {
-
- struct ithc_dma_tx {
- struct mutex mutex;
-- u32 max_size;
- struct ithc_dma_prd_buffer prds;
- struct ithc_dma_data_buffer buf;
- };
-@@ -65,5 +43,5 @@ int ithc_dma_rx_init(struct ithc *ithc, u8 channel);
- void ithc_dma_rx_enable(struct ithc *ithc, u8 channel);
- int ithc_dma_tx_init(struct ithc *ithc);
- int ithc_dma_rx(struct ithc *ithc, u8 channel);
--int ithc_dma_tx(struct ithc *ithc, u32 cmdcode, u32 datasize, void *cmddata);
+int ithc_dma_tx(struct ithc *ithc, const struct ithc_data *data);
-
++
diff --git a/drivers/hid/ithc/ithc-hid.c b/drivers/hid/ithc/ithc-hid.c
new file mode 100644
-index 0000000000000..065646ab499ef
+index 000000000000..065646ab499e
--- /dev/null
+++ b/drivers/hid/ithc/ithc-hid.c
@@ -0,0 +1,207 @@
@@ -6339,7 +4788,7 @@ index 0000000000000..065646ab499ef
+
diff --git a/drivers/hid/ithc/ithc-hid.h b/drivers/hid/ithc/ithc-hid.h
new file mode 100644
-index 0000000000000..599eb912c8c84
+index 000000000000..599eb912c8c8
--- /dev/null
+++ b/drivers/hid/ithc/ithc-hid.h
@@ -0,0 +1,32 @@
@@ -6377,10 +4826,10 @@ index 0000000000000..599eb912c8c84
+
diff --git a/drivers/hid/ithc/ithc-legacy.c b/drivers/hid/ithc/ithc-legacy.c
new file mode 100644
-index 0000000000000..5c1da11e3f1d2
+index 000000000000..8883987fb352
--- /dev/null
+++ b/drivers/hid/ithc/ithc-legacy.c
-@@ -0,0 +1,252 @@
+@@ -0,0 +1,254 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+
+#include "ithc.h"
@@ -6465,8 +4914,10 @@ index 0000000000000..5c1da11e3f1d2
+ // Setting the following bit seems to make reading the config more reliable.
+ bitsl_set(&ithc->regs->dma_rx[0].init_unknown, INIT_UNKNOWN_31);
+
-+ // Setting this bit may be necessary on some ADL devices.
++ // Setting this bit may be necessary on ADL devices.
+ switch (ithc->pci->device) {
++ case PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT1:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT2:
+ case PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT1:
+ case PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT2:
+ case PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT1:
@@ -6635,7 +5086,7 @@ index 0000000000000..5c1da11e3f1d2
+
diff --git a/drivers/hid/ithc/ithc-legacy.h b/drivers/hid/ithc/ithc-legacy.h
new file mode 100644
-index 0000000000000..28d6924620722
+index 000000000000..28d692462072
--- /dev/null
+++ b/drivers/hid/ithc/ithc-legacy.h
@@ -0,0 +1,8 @@
@@ -6648,379 +5099,178 @@ index 0000000000000..28d6924620722
+ size_t maxlen);
+
diff --git a/drivers/hid/ithc/ithc-main.c b/drivers/hid/ithc/ithc-main.c
-index 87ed4aa70fda0..2acf02e41d40f 100644
---- a/drivers/hid/ithc/ithc-main.c
+new file mode 100644
+index 000000000000..ac56c253674b
+--- /dev/null
+++ b/drivers/hid/ithc/ithc-main.c
-@@ -5,28 +5,6 @@
- MODULE_DESCRIPTION("Intel Touch Host Controller driver");
- MODULE_LICENSE("Dual BSD/GPL");
-
--// Lakefield
--#define PCI_DEVICE_ID_INTEL_THC_LKF_PORT1 0x98d0
--#define PCI_DEVICE_ID_INTEL_THC_LKF_PORT2 0x98d1
--// Tiger Lake
--#define PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT1 0xa0d0
--#define PCI_DEVICE_ID_INTEL_THC_TGL_LP_PORT2 0xa0d1
--#define PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT1 0x43d0
--#define PCI_DEVICE_ID_INTEL_THC_TGL_H_PORT2 0x43d1
--// Alder Lake
--#define PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT1 0x7ad8
--#define PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT2 0x7ad9
--#define PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT1 0x51d0
--#define PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT2 0x51d1
--#define PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT1 0x54d0
--#define PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT2 0x54d1
--// Raptor Lake
--#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT1 0x7a58
--#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT2 0x7a59
--// Meteor Lake
--#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT1 0x7e48
--#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT2 0x7e4a
--
- static const struct pci_device_id ithc_pci_tbl[] = {
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_LKF_PORT1) },
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_THC_LKF_PORT2) },
-@@ -66,15 +44,13 @@ static bool ithc_use_rx1 = true;
- module_param_named(rx1, ithc_use_rx1, bool, 0);
- MODULE_PARM_DESC(rx1, "Use DMA RX channel 1");
-
--// Values below 250 seem to work well on the SP7+. If this is set too high, you may observe cursor stuttering.
--static int ithc_dma_latency_us = 200;
--module_param_named(dma_latency_us, ithc_dma_latency_us, int, 0);
--MODULE_PARM_DESC(dma_latency_us, "Determines the CPU latency QoS value for DMA transfers (in microseconds), -1 to disable latency QoS");
+@@ -0,0 +1,431 @@
++// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
++
++#include "ithc.h"
++
++MODULE_DESCRIPTION("Intel Touch Host Controller driver");
++MODULE_LICENSE("Dual BSD/GPL");
++
++static const struct pci_device_id ithc_pci_tbl[] = {
++ {
++ .vendor = PCI_VENDOR_ID_INTEL,
++ .device = PCI_ANY_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .class = PCI_CLASS_INPUT_PEN << 8,
++ .class_mask = ~0,
++ },
++ {}
++};
++MODULE_DEVICE_TABLE(pci, ithc_pci_tbl);
++
++// Module parameters
++
++static bool ithc_use_polling = false;
++module_param_named(poll, ithc_use_polling, bool, 0);
++MODULE_PARM_DESC(poll, "Use polling instead of interrupts");
++
++// Since all known devices seem to use only channel 1, by default we disable channel 0.
++static bool ithc_use_rx0 = false;
++module_param_named(rx0, ithc_use_rx0, bool, 0);
++MODULE_PARM_DESC(rx0, "Use DMA RX channel 0");
++
++static bool ithc_use_rx1 = true;
++module_param_named(rx1, ithc_use_rx1, bool, 0);
++MODULE_PARM_DESC(rx1, "Use DMA RX channel 1");
++
+static int ithc_active_ltr_us = -1;
+module_param_named(activeltr, ithc_active_ltr_us, int, 0);
+MODULE_PARM_DESC(activeltr, "Active LTR value override (in microseconds)");
-
--// Values above 1700 seem to work well on the SP7+. If this is set too low, you may observe cursor stuttering.
--static unsigned int ithc_dma_early_us = 2000;
--module_param_named(dma_early_us, ithc_dma_early_us, uint, 0);
--MODULE_PARM_DESC(dma_early_us, "Determines how early the CPU latency QoS value is applied before the next expected IRQ (in microseconds)");
++
+static int ithc_idle_ltr_us = -1;
+module_param_named(idleltr, ithc_idle_ltr_us, int, 0);
+MODULE_PARM_DESC(idleltr, "Idle LTR value override (in microseconds)");
-
- static bool ithc_log_regs_enabled = false;
- module_param_named(logregs, ithc_log_regs_enabled, bool, 0);
-@@ -82,44 +58,30 @@ MODULE_PARM_DESC(logregs, "Log changes in register values (for debugging)");
-
- // Sysfs attributes
-
--static bool ithc_is_config_valid(struct ithc *ithc)
--{
-- return ithc->config.device_id == DEVCFG_DEVICE_ID_TIC;
--}
--
- static ssize_t vendor_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct ithc *ithc = dev_get_drvdata(dev);
-- if (!ithc || !ithc_is_config_valid(ithc))
-+ if (!ithc || !ithc->have_config)
- return -ENODEV;
-- return sprintf(buf, "0x%04x", ithc->config.vendor_id);
-+ return sprintf(buf, "0x%04x", ithc->vendor_id);
- }
- static DEVICE_ATTR_RO(vendor);
- static ssize_t product_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct ithc *ithc = dev_get_drvdata(dev);
-- if (!ithc || !ithc_is_config_valid(ithc))
-+ if (!ithc || !ithc->have_config)
- return -ENODEV;
-- return sprintf(buf, "0x%04x", ithc->config.product_id);
-+ return sprintf(buf, "0x%04x", ithc->product_id);
- }
- static DEVICE_ATTR_RO(product);
- static ssize_t revision_show(struct device *dev, struct device_attribute *attr, char *buf)
- {
- struct ithc *ithc = dev_get_drvdata(dev);
-- if (!ithc || !ithc_is_config_valid(ithc))
-+ if (!ithc || !ithc->have_config)
- return -ENODEV;
-- return sprintf(buf, "%u", ithc->config.revision);
-+ return sprintf(buf, "%u", ithc->product_rev);
- }
- static DEVICE_ATTR_RO(revision);
--static ssize_t fw_version_show(struct device *dev, struct device_attribute *attr, char *buf)
--{
-- struct ithc *ithc = dev_get_drvdata(dev);
-- if (!ithc || !ithc_is_config_valid(ithc))
-- return -ENODEV;
-- u32 v = ithc->config.fw_version;
-- return sprintf(buf, "%i.%i.%i.%i", v >> 24, v >> 16 & 0xff, v >> 8 & 0xff, v & 0xff);
--}
--static DEVICE_ATTR_RO(fw_version);
-
- static const struct attribute_group *ithc_attribute_groups[] = {
- &(const struct attribute_group){
-@@ -128,185 +90,26 @@ static const struct attribute_group *ithc_attribute_groups[] = {
- &dev_attr_vendor.attr,
- &dev_attr_product.attr,
- &dev_attr_revision.attr,
-- &dev_attr_fw_version.attr,
- NULL
- },
- },
- NULL
- };
-
--// HID setup
--
--static int ithc_hid_start(struct hid_device *hdev) { return 0; }
--static void ithc_hid_stop(struct hid_device *hdev) { }
--static int ithc_hid_open(struct hid_device *hdev) { return 0; }
--static void ithc_hid_close(struct hid_device *hdev) { }
--
--static int ithc_hid_parse(struct hid_device *hdev)
--{
-- struct ithc *ithc = hdev->driver_data;
-- u64 val = 0;
-- WRITE_ONCE(ithc->hid_parse_done, false);
-- for (int retries = 0; ; retries++) {
-- CHECK_RET(ithc_dma_tx, ithc, DMA_TX_CODE_GET_REPORT_DESCRIPTOR, sizeof(val), &val);
-- if (wait_event_timeout(ithc->wait_hid_parse, READ_ONCE(ithc->hid_parse_done),
-- msecs_to_jiffies(200)))
-- return 0;
-- if (retries > 5) {
-- pci_err(ithc->pci, "failed to read report descriptor\n");
-- return -ETIMEDOUT;
-- }
-- pci_warn(ithc->pci, "failed to read report descriptor, retrying\n");
-- }
--}
--
--static int ithc_hid_raw_request(struct hid_device *hdev, unsigned char reportnum, __u8 *buf,
-- size_t len, unsigned char rtype, int reqtype)
--{
-- struct ithc *ithc = hdev->driver_data;
-- if (!buf || !len)
-- return -EINVAL;
-- u32 code;
-- if (rtype == HID_OUTPUT_REPORT && reqtype == HID_REQ_SET_REPORT) {
-- code = DMA_TX_CODE_OUTPUT_REPORT;
-- } else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_SET_REPORT) {
-- code = DMA_TX_CODE_SET_FEATURE;
-- } else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_GET_REPORT) {
-- code = DMA_TX_CODE_GET_FEATURE;
-- } else {
-- pci_err(ithc->pci, "unhandled hid request %i %i for report id %i\n",
-- rtype, reqtype, reportnum);
-- return -EINVAL;
-- }
-- buf[0] = reportnum;
--
-- if (reqtype == HID_REQ_GET_REPORT) {
-- // Prepare for response.
-- mutex_lock(&ithc->hid_get_feature_mutex);
-- ithc->hid_get_feature_buf = buf;
-- ithc->hid_get_feature_size = len;
-- mutex_unlock(&ithc->hid_get_feature_mutex);
--
-- // Transmit 'get feature' request.
-- int r = CHECK(ithc_dma_tx, ithc, code, 1, buf);
-- if (!r) {
-- r = wait_event_interruptible_timeout(ithc->wait_hid_get_feature,
-- !ithc->hid_get_feature_buf, msecs_to_jiffies(1000));
-- if (!r)
-- r = -ETIMEDOUT;
-- else if (r < 0)
-- r = -EINTR;
-- else
-- r = 0;
-- }
--
-- // If everything went ok, the buffer has been filled with the response data.
-- // Return the response size.
-- mutex_lock(&ithc->hid_get_feature_mutex);
-- ithc->hid_get_feature_buf = NULL;
-- if (!r)
-- r = ithc->hid_get_feature_size;
-- mutex_unlock(&ithc->hid_get_feature_mutex);
-- return r;
-- }
--
-- // 'Set feature', or 'output report'. These don't have a response.
-- CHECK_RET(ithc_dma_tx, ithc, code, len, buf);
-- return 0;
--}
--
--static struct hid_ll_driver ithc_ll_driver = {
-- .start = ithc_hid_start,
-- .stop = ithc_hid_stop,
-- .open = ithc_hid_open,
-- .close = ithc_hid_close,
-- .parse = ithc_hid_parse,
-- .raw_request = ithc_hid_raw_request,
--};
--
--static void ithc_hid_devres_release(struct device *dev, void *res)
--{
-- struct hid_device **hidm = res;
-- if (*hidm)
-- hid_destroy_device(*hidm);
--}
--
--static int ithc_hid_init(struct ithc *ithc)
--{
-- struct hid_device **hidm = devres_alloc(ithc_hid_devres_release, sizeof(*hidm), GFP_KERNEL);
-- if (!hidm)
-- return -ENOMEM;
-- devres_add(&ithc->pci->dev, hidm);
-- struct hid_device *hid = hid_allocate_device();
-- if (IS_ERR(hid))
-- return PTR_ERR(hid);
-- *hidm = hid;
--
-- strscpy(hid->name, DEVFULLNAME, sizeof(hid->name));
-- strscpy(hid->phys, ithc->phys, sizeof(hid->phys));
-- hid->ll_driver = &ithc_ll_driver;
-- hid->bus = BUS_PCI;
-- hid->vendor = ithc->config.vendor_id;
-- hid->product = ithc->config.product_id;
-- hid->version = 0x100;
-- hid->dev.parent = &ithc->pci->dev;
-- hid->driver_data = ithc;
--
-- ithc->hid = hid;
-- return 0;
--}
--
- // Interrupts/polling
-
--static enum hrtimer_restart ithc_activity_start_timer_callback(struct hrtimer *t)
--{
-- struct ithc *ithc = container_of(t, struct ithc, activity_start_timer);
-- ithc_set_active(ithc, ithc_dma_early_us * 2 + USEC_PER_MSEC);
-- return HRTIMER_NORESTART;
--}
--
--static enum hrtimer_restart ithc_activity_end_timer_callback(struct hrtimer *t)
--{
-- struct ithc *ithc = container_of(t, struct ithc, activity_end_timer);
-- cpu_latency_qos_update_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-- return HRTIMER_NORESTART;
--}
--
--void ithc_set_active(struct ithc *ithc, unsigned int duration_us)
--{
-- if (ithc_dma_latency_us < 0)
-- return;
-- // When CPU usage is very low, the CPU can enter various low power states (C2-C10).
-- // This disrupts DMA, causing truncated DMA messages. ERROR_FLAG_DMA_RX_TIMEOUT will be
-- // set when this happens. The amount of truncated messages can become very high, resulting
-- // in user-visible effects (laggy/stuttering cursor). To avoid this, we use a CPU latency
-- // QoS request to prevent the CPU from entering low power states during touch interactions.
-- cpu_latency_qos_update_request(&ithc->activity_qos, ithc_dma_latency_us);
-- hrtimer_start_range_ns(&ithc->activity_end_timer,
-- ns_to_ktime(duration_us * NSEC_PER_USEC), duration_us * NSEC_PER_USEC, HRTIMER_MODE_REL);
--}
--
--static int ithc_set_device_enabled(struct ithc *ithc, bool enable)
--{
-- u32 x = ithc->config.touch_cfg =
-- (ithc->config.touch_cfg & ~(u32)DEVCFG_TOUCH_MASK) | DEVCFG_TOUCH_UNKNOWN_2 |
-- (enable ? DEVCFG_TOUCH_ENABLE | DEVCFG_TOUCH_UNKNOWN_3 | DEVCFG_TOUCH_UNKNOWN_4 : 0);
-- return ithc_spi_command(ithc, SPI_CMD_CODE_WRITE,
-- offsetof(struct ithc_device_config, touch_cfg), sizeof(x), &x);
--}
--
- static void ithc_disable_interrupts(struct ithc *ithc)
- {
- writel(0, &ithc->regs->error_control);
- bitsb(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_IRQ, 0);
-- bitsb(&ithc->regs->dma_rx[0].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_UNKNOWN_4 | DMA_RX_CONTROL_IRQ_DATA, 0);
-- bitsb(&ithc->regs->dma_rx[1].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_UNKNOWN_4 | DMA_RX_CONTROL_IRQ_DATA, 0);
++
++static unsigned int ithc_idle_delay_ms = 1000;
++module_param_named(idledelay, ithc_idle_delay_ms, uint, 0);
++MODULE_PARM_DESC(idleltr, "Minimum idle time before applying idle LTR value (in milliseconds)");
++
++static bool ithc_log_regs_enabled = false;
++module_param_named(logregs, ithc_log_regs_enabled, bool, 0);
++MODULE_PARM_DESC(logregs, "Log changes in register values (for debugging)");
++
++// Interrupts/polling
++
++static void ithc_disable_interrupts(struct ithc *ithc)
++{
++ writel(0, &ithc->regs->error_control);
++ bitsb(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_IRQ, 0);
+ bitsb(&ithc->regs->dma_rx[0].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_READY | DMA_RX_CONTROL_IRQ_DATA, 0);
+ bitsb(&ithc->regs->dma_rx[1].control, DMA_RX_CONTROL_IRQ_UNKNOWN_1 | DMA_RX_CONTROL_IRQ_ERROR | DMA_RX_CONTROL_IRQ_READY | DMA_RX_CONTROL_IRQ_DATA, 0);
- bitsb(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_IRQ, 0);
- }
-
- static void ithc_clear_dma_rx_interrupts(struct ithc *ithc, unsigned int channel)
- {
-- writel(DMA_RX_STATUS_ERROR | DMA_RX_STATUS_UNKNOWN_4 | DMA_RX_STATUS_HAVE_DATA,
++ bitsb(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_IRQ, 0);
++}
++
++static void ithc_clear_dma_rx_interrupts(struct ithc *ithc, unsigned int channel)
++{
+ writel(DMA_RX_STATUS_ERROR | DMA_RX_STATUS_READY | DMA_RX_STATUS_HAVE_DATA,
- &ithc->regs->dma_rx[channel].status);
- }
-
-@@ -325,39 +128,22 @@ static void ithc_process(struct ithc *ithc)
- {
- ithc_log_regs(ithc);
-
-+ // The THC automatically transitions from LTR idle to active at the start of a DMA transfer.
-+ // It does not appear to automatically go back to idle, so we switch it back here, since
-+ // the DMA transfer should be complete.
++ &ithc->regs->dma_rx[channel].status);
++}
++
++static void ithc_clear_interrupts(struct ithc *ithc)
++{
++ writel(0xffffffff, &ithc->regs->error_flags);
++ writel(ERROR_STATUS_DMA | ERROR_STATUS_SPI, &ithc->regs->error_status);
++ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
++ ithc_clear_dma_rx_interrupts(ithc, 0);
++ ithc_clear_dma_rx_interrupts(ithc, 1);
++ writel(DMA_TX_STATUS_DONE | DMA_TX_STATUS_ERROR | DMA_TX_STATUS_UNKNOWN_2,
++ &ithc->regs->dma_tx.status);
++}
++
++static void ithc_idle_timer_callback(struct timer_list *t)
++{
++ struct ithc *ithc = container_of(t, struct ithc, idle_timer);
+ ithc_set_ltr_idle(ithc);
++}
+
- bool rx0 = ithc_use_rx0 && (readl(&ithc->regs->dma_rx[0].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
- bool rx1 = ithc_use_rx1 && (readl(&ithc->regs->dma_rx[1].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
-
-- // Track time between DMA rx transfers, so we can try to predict when we need to enable CPU latency QoS for the next transfer
-- ktime_t t = ktime_get();
-- ktime_t dt = ktime_sub(t, ithc->last_rx_time);
-- if (rx0 || rx1) {
-- ithc->last_rx_time = t;
-- if (dt > ms_to_ktime(100)) {
-- ithc->cur_rx_seq_count = 0;
-- ithc->cur_rx_seq_errors = 0;
-- }
-- ithc->cur_rx_seq_count++;
-- if (!ithc_use_polling && ithc_dma_latency_us >= 0) {
-- // Disable QoS, since the DMA transfer has completed (we re-enable it after a delay below)
-- cpu_latency_qos_update_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-- hrtimer_try_to_cancel(&ithc->activity_end_timer);
-- }
-- }
--
- // Read and clear error bits
- u32 err = readl(&ithc->regs->error_flags);
- if (err) {
- writel(err, &ithc->regs->error_flags);
- if (err & ~ERROR_FLAG_DMA_RX_TIMEOUT)
- pci_err(ithc->pci, "error flags: 0x%08x\n", err);
-- if (err & ERROR_FLAG_DMA_RX_TIMEOUT) {
-- // Only log an error if we see a significant number of these errors.
-- ithc->cur_rx_seq_errors++;
-- if (ithc->cur_rx_seq_errors && ithc->cur_rx_seq_errors % 50 == 0 && ithc->cur_rx_seq_errors > ithc->cur_rx_seq_count / 10)
-- pci_err(ithc->pci, "High number of DMA RX timeouts/errors (%u/%u, dt=%lldus). Try adjusting dma_early_us and/or dma_latency_us.\n",
-- ithc->cur_rx_seq_errors, ithc->cur_rx_seq_count, ktime_to_us(dt));
-- }
++static void ithc_process(struct ithc *ithc)
++{
++ ithc_log_regs(ithc);
++
++ // The THC automatically transitions from LTR idle to active at the start of a DMA transfer.
++ // It does not appear to automatically go back to idle, so we switch it back after a delay.
++ mod_timer(&ithc->idle_timer, jiffies + msecs_to_jiffies(ithc_idle_delay_ms));
++
++ bool rx0 = ithc_use_rx0 && (readl(&ithc->regs->dma_rx[0].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
++ bool rx1 = ithc_use_rx1 && (readl(&ithc->regs->dma_rx[1].status) & (DMA_RX_STATUS_ERROR | DMA_RX_STATUS_HAVE_DATA)) != 0;
++
++ // Read and clear error bits
++ u32 err = readl(&ithc->regs->error_flags);
++ if (err) {
++ writel(err, &ithc->regs->error_flags);
++ if (err & ~ERROR_FLAG_DMA_RX_TIMEOUT)
++ pci_err(ithc->pci, "error flags: 0x%08x\n", err);
+ if (err & ERROR_FLAG_DMA_RX_TIMEOUT)
+ pci_err(ithc->pci, "DMA RX timeout/error (try decreasing activeltr/idleltr if this happens frequently)\n");
- }
-
- // Process DMA rx
-@@ -372,12 +158,6 @@ static void ithc_process(struct ithc *ithc)
- ithc_dma_rx(ithc, 1);
- }
-
-- // Start timer to re-enable QoS for next rx, but only if we've seen an ERROR_FLAG_DMA_RX_TIMEOUT
-- if ((rx0 || rx1) && !ithc_use_polling && ithc_dma_latency_us >= 0 && ithc->cur_rx_seq_errors > 0) {
-- ktime_t expires = ktime_add(t, ktime_sub_us(dt, ithc_dma_early_us));
-- hrtimer_start_range_ns(&ithc->activity_start_timer, expires, 10 * NSEC_PER_USEC, HRTIMER_MODE_ABS);
-- }
--
- ithc_log_regs(ithc);
- }
-
-@@ -403,12 +183,8 @@ static int ithc_poll_thread(void *arg)
- ithc_process(ithc);
- // Decrease polling interval to 20ms if we received data, otherwise slowly
- // increase it up to 200ms.
-- if (n != ithc->dma_rx[1].num_received) {
-- ithc_set_active(ithc, 100 * USEC_PER_MSEC);
-- sleep = 20;
-- } else {
-- sleep = min(200u, sleep + (sleep >> 4) + 1);
-- }
++ }
++
++ // Process DMA rx
++ if (ithc_use_rx0) {
++ ithc_clear_dma_rx_interrupts(ithc, 0);
++ if (rx0)
++ ithc_dma_rx(ithc, 0);
++ }
++ if (ithc_use_rx1) {
++ ithc_clear_dma_rx_interrupts(ithc, 1);
++ if (rx1)
++ ithc_dma_rx(ithc, 1);
++ }
++
++ ithc_log_regs(ithc);
++}
++
++static irqreturn_t ithc_interrupt_thread(int irq, void *arg)
++{
++ struct ithc *ithc = arg;
++ pci_dbg(ithc->pci, "IRQ! err=%08x/%08x/%08x, cmd=%02x/%08x, rx0=%02x/%08x, rx1=%02x/%08x, tx=%02x/%08x\n",
++ readl(&ithc->regs->error_control), readl(&ithc->regs->error_status), readl(&ithc->regs->error_flags),
++ readb(&ithc->regs->spi_cmd.control), readl(&ithc->regs->spi_cmd.status),
++ readb(&ithc->regs->dma_rx[0].control), readl(&ithc->regs->dma_rx[0].status),
++ readb(&ithc->regs->dma_rx[1].control), readl(&ithc->regs->dma_rx[1].status),
++ readb(&ithc->regs->dma_tx.control), readl(&ithc->regs->dma_tx.status));
++ ithc_process(ithc);
++ return IRQ_HANDLED;
++}
++
++static int ithc_poll_thread(void *arg)
++{
++ struct ithc *ithc = arg;
++ unsigned int sleep = 100;
++ while (!kthread_should_stop()) {
++ u32 n = ithc->dma_rx[1].num_received;
++ ithc_process(ithc);
++ // Decrease polling interval to 20ms if we received data, otherwise slowly
++ // increase it up to 200ms.
+ sleep = n != ithc->dma_rx[1].num_received ? 20
+ : min(200u, sleep + (sleep >> 4) + 1);
- msleep_interruptible(sleep);
- }
- return 0;
-@@ -431,73 +207,44 @@ static void ithc_disable(struct ithc *ithc)
-
- static int ithc_init_device(struct ithc *ithc)
- {
++ msleep_interruptible(sleep);
++ }
++ return 0;
++}
++
++// Device initialization and shutdown
++
++static void ithc_disable(struct ithc *ithc)
++{
++ bitsl_set(&ithc->regs->control_bits, CONTROL_QUIESCE);
++ CHECK(waitl, ithc, &ithc->regs->control_bits, CONTROL_IS_QUIESCED, CONTROL_IS_QUIESCED);
++ bitsl(&ithc->regs->control_bits, CONTROL_NRESET, 0);
++ bitsb(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_SEND, 0);
++ bitsb(&ithc->regs->dma_tx.control, DMA_TX_CONTROL_SEND, 0);
++ bitsb(&ithc->regs->dma_rx[0].control, DMA_RX_CONTROL_ENABLE, 0);
++ bitsb(&ithc->regs->dma_rx[1].control, DMA_RX_CONTROL_ENABLE, 0);
++ ithc_disable_interrupts(ithc);
++ ithc_clear_interrupts(ithc);
++}
++
++static int ithc_init_device(struct ithc *ithc)
++{
+ // Read ACPI config for QuickSPI mode
+ struct ithc_acpi_config cfg = { 0 };
+ CHECK_RET(ithc_read_acpi_config, ithc, &cfg);
@@ -7031,49 +5281,24 @@ index 87ed4aa70fda0..2acf02e41d40f 100644
+ ithc->use_quickspi = cfg.has_config;
+
+ // Shut down device
- ithc_log_regs(ithc);
- bool was_enabled = (readl(&ithc->regs->control_bits) & CONTROL_NRESET) != 0;
- ithc_disable(ithc);
- CHECK_RET(waitl, ithc, &ithc->regs->control_bits, CONTROL_READY, CONTROL_READY);
--
-- // Since we don't yet know which SPI config the device wants, use default speed and mode
-- // initially for reading config data.
-- ithc_set_spi_config(ithc, 10, 0);
--
-- // Setting the following bit seems to make reading the config more reliable.
-- bitsl_set(&ithc->regs->dma_rx[0].unknown_init_bits, 0x80000000);
+ ithc_log_regs(ithc);
-
- // If the device was previously enabled, wait a bit to make sure it's fully shut down.
- if (was_enabled)
- if (msleep_interruptible(100))
- return -EINTR;
-
-- // Take the touch device out of reset.
-- bitsl(&ithc->regs->control_bits, CONTROL_QUIESCE, 0);
-- CHECK_RET(waitl, ithc, &ithc->regs->control_bits, CONTROL_IS_QUIESCED, 0);
-- for (int retries = 0; ; retries++) {
-- ithc_log_regs(ithc);
-- bitsl_set(&ithc->regs->control_bits, CONTROL_NRESET);
-- if (!waitl(ithc, &ithc->regs->state, 0xf, 2))
-- break;
-- if (retries > 5) {
-- pci_err(ithc->pci, "failed to reset device, state = 0x%08x\n", readl(&ithc->regs->state));
-- return -ETIMEDOUT;
-- }
-- pci_warn(ithc->pci, "invalid state, retrying reset\n");
-- bitsl(&ithc->regs->control_bits, CONTROL_NRESET, 0);
-- if (msleep_interruptible(1000))
-- return -EINTR;
-- }
-- ithc_log_regs(ithc);
++ bool was_enabled = (readl(&ithc->regs->control_bits) & CONTROL_NRESET) != 0;
++ ithc_disable(ithc);
++ CHECK_RET(waitl, ithc, &ithc->regs->control_bits, CONTROL_READY, CONTROL_READY);
++ ithc_log_regs(ithc);
++
++ // If the device was previously enabled, wait a bit to make sure it's fully shut down.
++ if (was_enabled)
++ if (msleep_interruptible(100))
++ return -EINTR;
++
+ // Set Latency Tolerance Reporting config. The device will automatically
+ // apply these values depending on whether it is active or idle.
+ // If active value is too high, DMA buffer data can become truncated.
-+ // By default, we set the active LTR value to 100us, and idle to 100ms.
++ // By default, we set the active LTR value to 50us, and idle to 100ms.
+ u64 active_ltr_ns = ithc_active_ltr_us >= 0 ? (u64)ithc_active_ltr_us * 1000
+ : cfg.has_config && cfg.has_active_ltr ? (u64)cfg.active_ltr << 10
-+ : 100 * 1000;
++ : 50 * 1000;
+ u64 idle_ltr_ns = ithc_idle_ltr_us >= 0 ? (u64)ithc_idle_ltr_us * 1000
+ : cfg.has_config && cfg.has_idle_ltr ? (u64)cfg.idle_ltr << 10
+ : 100 * 1000 * 1000;
@@ -7083,137 +5308,239 @@ index 87ed4aa70fda0..2acf02e41d40f 100644
+ CHECK_RET(ithc_quickspi_init, ithc, &cfg);
+ else
+ CHECK_RET(ithc_legacy_init, ithc);
-
-- // Waiting for the following status bit makes reading config much more reliable,
-- // however the official driver does not seem to do this...
-- CHECK(waitl, ithc, &ithc->regs->dma_rx[0].status, DMA_RX_STATUS_UNKNOWN_4, DMA_RX_STATUS_UNKNOWN_4);
--
-- // Read configuration data.
-- for (int retries = 0; ; retries++) {
-- ithc_log_regs(ithc);
-- memset(&ithc->config, 0, sizeof(ithc->config));
-- CHECK_RET(ithc_spi_command, ithc, SPI_CMD_CODE_READ, 0, sizeof(ithc->config), &ithc->config);
-- u32 *p = (void *)&ithc->config;
-- pci_info(ithc->pci, "config: %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
-- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
-- if (ithc_is_config_valid(ithc))
-- break;
-- if (retries > 10) {
-- pci_err(ithc->pci, "failed to read config, unknown device ID 0x%08x\n",
-- ithc->config.device_id);
-- return -EIO;
-- }
-- pci_warn(ithc->pci, "failed to read config, retrying\n");
-- if (msleep_interruptible(100))
-- return -EINTR;
-- }
-- ithc_log_regs(ithc);
--
-- // Apply SPI config and enable touch device.
-- CHECK_RET(ithc_set_spi_config, ithc,
-- DEVCFG_SPI_MAX_FREQ(ithc->config.spi_config),
-- DEVCFG_SPI_MODE(ithc->config.spi_config));
-- CHECK_RET(ithc_set_device_enabled, ithc, true);
-- ithc_log_regs(ithc);
- return 0;
- }
-
-@@ -527,11 +274,11 @@ static void ithc_stop(void *res)
- CHECK(kthread_stop, ithc->poll_thread);
- if (ithc->irq >= 0)
- disable_irq(ithc->irq);
-- CHECK(ithc_set_device_enabled, ithc, false);
++
++ return 0;
++}
++
++int ithc_reset(struct ithc *ithc)
++{
++ // FIXME This should probably do devres_release_group()+ithc_start().
++ // But because this is called during DMA processing, that would have to be done
++ // asynchronously (schedule_work()?). And with extra locking?
++ pci_err(ithc->pci, "reset\n");
++ CHECK(ithc_init_device, ithc);
++ if (ithc_use_rx0)
++ ithc_dma_rx_enable(ithc, 0);
++ if (ithc_use_rx1)
++ ithc_dma_rx_enable(ithc, 1);
++ ithc_log_regs(ithc);
++ pci_dbg(ithc->pci, "reset completed\n");
++ return 0;
++}
++
++static void ithc_stop(void *res)
++{
++ struct ithc *ithc = res;
++ pci_dbg(ithc->pci, "stopping\n");
++ ithc_log_regs(ithc);
++
++ if (ithc->poll_thread)
++ CHECK(kthread_stop, ithc->poll_thread);
++ if (ithc->irq >= 0)
++ disable_irq(ithc->irq);
+ if (ithc->use_quickspi)
+ ithc_quickspi_exit(ithc);
+ else
+ ithc_legacy_exit(ithc);
- ithc_disable(ithc);
-- hrtimer_cancel(&ithc->activity_start_timer);
-- hrtimer_cancel(&ithc->activity_end_timer);
-- cpu_latency_qos_remove_request(&ithc->activity_qos);
-
- // Clear DMA config.
- for (unsigned int i = 0; i < 2; i++) {
-@@ -570,9 +317,6 @@ static int ithc_start(struct pci_dev *pci)
- ithc->irq = -1;
- ithc->pci = pci;
- snprintf(ithc->phys, sizeof(ithc->phys), "pci-%s/" DEVNAME, pci_name(pci));
-- init_waitqueue_head(&ithc->wait_hid_parse);
-- init_waitqueue_head(&ithc->wait_hid_get_feature);
-- mutex_init(&ithc->hid_get_feature_mutex);
- pci_set_drvdata(pci, ithc);
- CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_clear_drvdata, pci);
- if (ithc_log_regs_enabled)
-@@ -596,6 +340,9 @@ static int ithc_start(struct pci_dev *pci)
-
- // Initialize THC and touch device.
- CHECK_RET(ithc_init_device, ithc);
++ ithc_disable(ithc);
++ del_timer_sync(&ithc->idle_timer);
++
++ // Clear DMA config.
++ for (unsigned int i = 0; i < 2; i++) {
++ CHECK(waitl, ithc, &ithc->regs->dma_rx[i].status, DMA_RX_STATUS_ENABLED, 0);
++ lo_hi_writeq(0, &ithc->regs->dma_rx[i].addr);
++ writeb(0, &ithc->regs->dma_rx[i].num_bufs);
++ writeb(0, &ithc->regs->dma_rx[i].num_prds);
++ }
++ lo_hi_writeq(0, &ithc->regs->dma_tx.addr);
++ writeb(0, &ithc->regs->dma_tx.num_prds);
++
++ ithc_log_regs(ithc);
++ pci_dbg(ithc->pci, "stopped\n");
++}
++
++static void ithc_clear_drvdata(void *res)
++{
++ struct pci_dev *pci = res;
++ pci_set_drvdata(pci, NULL);
++}
++
++static int ithc_start(struct pci_dev *pci)
++{
++ pci_dbg(pci, "starting\n");
++ if (pci_get_drvdata(pci)) {
++ pci_err(pci, "device already initialized\n");
++ return -EINVAL;
++ }
++ if (!devres_open_group(&pci->dev, ithc_start, GFP_KERNEL))
++ return -ENOMEM;
++
++ // Allocate/init main driver struct.
++ struct ithc *ithc = devm_kzalloc(&pci->dev, sizeof(*ithc), GFP_KERNEL);
++ if (!ithc)
++ return -ENOMEM;
++ ithc->irq = -1;
++ ithc->pci = pci;
++ snprintf(ithc->phys, sizeof(ithc->phys), "pci-%s/" DEVNAME, pci_name(pci));
++ pci_set_drvdata(pci, ithc);
++ CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_clear_drvdata, pci);
++ if (ithc_log_regs_enabled)
++ ithc->prev_regs = devm_kzalloc(&pci->dev, sizeof(*ithc->prev_regs), GFP_KERNEL);
++
++ // PCI initialization.
++ CHECK_RET(pcim_enable_device, pci);
++ pci_set_master(pci);
++ CHECK_RET(pcim_iomap_regions, pci, BIT(0), DEVNAME " regs");
++ CHECK_RET(dma_set_mask_and_coherent, &pci->dev, DMA_BIT_MASK(64));
++ CHECK_RET(pci_set_power_state, pci, PCI_D0);
++ ithc->regs = pcim_iomap_table(pci)[0];
++
++ // Allocate IRQ.
++ if (!ithc_use_polling) {
++ CHECK_RET(pci_alloc_irq_vectors, pci, 1, 1, PCI_IRQ_MSI | PCI_IRQ_MSIX);
++ ithc->irq = CHECK(pci_irq_vector, pci, 0);
++ if (ithc->irq < 0)
++ return ithc->irq;
++ }
++
++ // Initialize THC and touch device.
++ CHECK_RET(ithc_init_device, ithc);
+
+ // Initialize HID and DMA.
+ CHECK_RET(ithc_hid_init, ithc);
- CHECK(devm_device_add_groups, &pci->dev, ithc_attribute_groups);
- if (ithc_use_rx0)
- CHECK_RET(ithc_dma_rx_init, ithc, 0);
-@@ -603,18 +350,10 @@ static int ithc_start(struct pci_dev *pci)
- CHECK_RET(ithc_dma_rx_init, ithc, 1);
- CHECK_RET(ithc_dma_tx_init, ithc);
-
-- cpu_latency_qos_add_request(&ithc->activity_qos, PM_QOS_DEFAULT_VALUE);
-- hrtimer_init(&ithc->activity_start_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
-- ithc->activity_start_timer.function = ithc_activity_start_timer_callback;
-- hrtimer_init(&ithc->activity_end_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-- ithc->activity_end_timer.function = ithc_activity_end_timer_callback;
--
- // Add ithc_stop() callback AFTER setting up DMA buffers, so that polling/irqs/DMA are
- // disabled BEFORE the buffers are freed.
- CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_stop, ithc);
-
-- CHECK_RET(ithc_hid_init, ithc);
--
- // Start polling/IRQ.
- if (ithc_use_polling) {
- pci_info(pci, "using polling instead of irq\n");
-@@ -637,9 +376,11 @@ static int ithc_start(struct pci_dev *pci)
-
- // hid_add_device() can only be called after irq/polling is started and DMA is enabled,
- // because it calls ithc_hid_parse() which reads the report descriptor via DMA.
-- CHECK_RET(hid_add_device, ithc->hid);
++ if (ithc_use_rx0)
++ CHECK_RET(ithc_dma_rx_init, ithc, 0);
++ if (ithc_use_rx1)
++ CHECK_RET(ithc_dma_rx_init, ithc, 1);
++ CHECK_RET(ithc_dma_tx_init, ithc);
++
++ timer_setup(&ithc->idle_timer, ithc_idle_timer_callback, 0);
++
++ // Add ithc_stop() callback AFTER setting up DMA buffers, so that polling/irqs/DMA are
++ // disabled BEFORE the buffers are freed.
++ CHECK_RET(devm_add_action_or_reset, &pci->dev, ithc_stop, ithc);
++
++ // Start polling/IRQ.
++ if (ithc_use_polling) {
++ pci_info(pci, "using polling instead of irq\n");
++ // Use a thread instead of simple timer because we want to be able to sleep.
++ ithc->poll_thread = kthread_run(ithc_poll_thread, ithc, DEVNAME "poll");
++ if (IS_ERR(ithc->poll_thread)) {
++ int err = PTR_ERR(ithc->poll_thread);
++ ithc->poll_thread = NULL;
++ return err;
++ }
++ } else {
++ CHECK_RET(devm_request_threaded_irq, &pci->dev, ithc->irq, NULL,
++ ithc_interrupt_thread, IRQF_TRIGGER_HIGH | IRQF_ONESHOT, DEVNAME, ithc);
++ }
++
++ if (ithc_use_rx0)
++ ithc_dma_rx_enable(ithc, 0);
++ if (ithc_use_rx1)
++ ithc_dma_rx_enable(ithc, 1);
++
++ // hid_add_device() can only be called after irq/polling is started and DMA is enabled,
++ // because it calls ithc_hid_parse() which reads the report descriptor via DMA.
+ CHECK_RET(hid_add_device, ithc->hid.dev);
+
+ CHECK(ithc_debug_init_device, ithc);
-
-- CHECK(ithc_debug_init, ithc);
++
+ ithc_set_ltr_idle(ithc);
-
- pci_dbg(pci, "started\n");
- return 0;
-@@ -710,17 +451,20 @@ static struct pci_driver ithc_driver = {
- .thaw = ithc_thaw,
- .restore = ithc_restore,
- },
++
++ pci_dbg(pci, "started\n");
++ return 0;
++}
++
++static int ithc_probe(struct pci_dev *pci, const struct pci_device_id *id)
++{
++ pci_dbg(pci, "device probe\n");
++ return ithc_start(pci);
++}
++
++static void ithc_remove(struct pci_dev *pci)
++{
++ pci_dbg(pci, "device remove\n");
++ // all cleanup is handled by devres
++}
++
++// For suspend/resume, we just deinitialize and reinitialize everything.
++// TODO It might be cleaner to keep the HID device around, however we would then have to signal
++// to userspace that the touch device has lost state and userspace needs to e.g. resend 'set
++// feature' requests. Hidraw does not seem to have a facility to do that.
++static int ithc_suspend(struct device *dev)
++{
++ struct pci_dev *pci = to_pci_dev(dev);
++ pci_dbg(pci, "pm suspend\n");
++ devres_release_group(dev, ithc_start);
++ return 0;
++}
++
++static int ithc_resume(struct device *dev)
++{
++ struct pci_dev *pci = to_pci_dev(dev);
++ pci_dbg(pci, "pm resume\n");
++ return ithc_start(pci);
++}
++
++static int ithc_freeze(struct device *dev)
++{
++ struct pci_dev *pci = to_pci_dev(dev);
++ pci_dbg(pci, "pm freeze\n");
++ devres_release_group(dev, ithc_start);
++ return 0;
++}
++
++static int ithc_thaw(struct device *dev)
++{
++ struct pci_dev *pci = to_pci_dev(dev);
++ pci_dbg(pci, "pm thaw\n");
++ return ithc_start(pci);
++}
++
++static int ithc_restore(struct device *dev)
++{
++ struct pci_dev *pci = to_pci_dev(dev);
++ pci_dbg(pci, "pm restore\n");
++ return ithc_start(pci);
++}
++
++static struct pci_driver ithc_driver = {
++ .name = DEVNAME,
++ .id_table = ithc_pci_tbl,
++ .probe = ithc_probe,
++ .remove = ithc_remove,
++ .driver.pm = &(const struct dev_pm_ops) {
++ .suspend = ithc_suspend,
++ .resume = ithc_resume,
++ .freeze = ithc_freeze,
++ .thaw = ithc_thaw,
++ .restore = ithc_restore,
++ },
+ .driver.probe_type = PROBE_PREFER_ASYNCHRONOUS,
- //.dev_groups = ithc_attribute_groups, // could use this (since 5.14), however the attributes won't have valid values until config has been read anyway
- };
-
- static int __init ithc_init(void)
- {
++};
++
++static int __init ithc_init(void)
++{
+ ithc_debug_init_module();
- return pci_register_driver(&ithc_driver);
- }
-
- static void __exit ithc_exit(void)
- {
- pci_unregister_driver(&ithc_driver);
++ return pci_register_driver(&ithc_driver);
++}
++
++static void __exit ithc_exit(void)
++{
++ pci_unregister_driver(&ithc_driver);
+ ithc_debug_exit_module();
- }
-
- module_init(ithc_init);
++}
++
++module_init(ithc_init);
++module_exit(ithc_exit);
++
diff --git a/drivers/hid/ithc/ithc-quickspi.c b/drivers/hid/ithc/ithc-quickspi.c
new file mode 100644
-index 0000000000000..760e55ead0788
+index 000000000000..e2d1690b8cf8
--- /dev/null
+++ b/drivers/hid/ithc/ithc-quickspi.c
-@@ -0,0 +1,578 @@
+@@ -0,0 +1,607 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+
+// Some public THC/QuickSPI documentation can be found in:
@@ -7473,6 +5800,14 @@ index 0000000000000..760e55ead0788
+ spi_frequency, limit_packet_size, tx_delay, active_ltr, idle_ltr);
+}
+
++static void set_opcode(struct ithc *ithc, size_t i, u8 opcode)
++{
++ writeb(opcode, &ithc->regs->opcode[i].header);
++ writeb(opcode, &ithc->regs->opcode[i].single);
++ writeb(opcode, &ithc->regs->opcode[i].dual);
++ writeb(opcode, &ithc->regs->opcode[i].quad);
++}
++
+static int ithc_quickspi_init_regs(struct ithc *ithc, const struct ithc_acpi_config *cfg)
+{
+ pci_dbg(ithc->pci, "initializing QuickSPI registers\n");
@@ -7495,26 +5830,47 @@ index 0000000000000..760e55ead0788
+ // SPI addresses and opcodes
+ if (cfg->has_input_report_header_address)
+ writel(cfg->input_report_header_address, &ithc->regs->spi_header_addr);
-+ if (cfg->has_input_report_body_address)
++ if (cfg->has_input_report_body_address) {
+ writel(cfg->input_report_body_address, &ithc->regs->dma_rx[0].spi_addr);
++ writel(cfg->input_report_body_address, &ithc->regs->dma_rx[1].spi_addr);
++ }
+ if (cfg->has_output_report_body_address)
+ writel(cfg->output_report_body_address, &ithc->regs->dma_tx.spi_addr);
+
-+ if (cfg->has_read_opcode) {
-+ writeb(cfg->read_opcode, &ithc->regs->read_opcode);
-+ writeb(cfg->read_opcode, &ithc->regs->read_opcode_single);
-+ writeb(cfg->read_opcode, &ithc->regs->read_opcode_dual);
-+ writeb(cfg->read_opcode, &ithc->regs->read_opcode_quad);
-+ }
-+ if (cfg->has_write_opcode) {
-+ writeb(cfg->write_opcode, &ithc->regs->write_opcode);
-+ writeb(cfg->write_opcode, &ithc->regs->write_opcode_single);
-+ writeb(cfg->write_opcode, &ithc->regs->write_opcode_dual);
-+ writeb(cfg->write_opcode, &ithc->regs->write_opcode_quad);
++ switch (ithc->pci->device) {
++ // LKF/TGL don't support QuickSPI.
++ // For ADL, opcode layout is RX/TX/unused.
++ case PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT1:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_S_PORT2:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT1:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_P_PORT2:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT1:
++ case PCI_DEVICE_ID_INTEL_THC_ADL_M_PORT2:
++ if (cfg->has_read_opcode) {
++ set_opcode(ithc, 0, cfg->read_opcode);
++ }
++ if (cfg->has_write_opcode) {
++ set_opcode(ithc, 1, cfg->write_opcode);
++ }
++ break;
++ // For MTL, opcode layout was changed to RX/RX/TX.
++ // (RPL layout is unknown.)
++ default:
++ if (cfg->has_read_opcode) {
++ set_opcode(ithc, 0, cfg->read_opcode);
++ set_opcode(ithc, 1, cfg->read_opcode);
++ }
++ if (cfg->has_write_opcode) {
++ set_opcode(ithc, 2, cfg->write_opcode);
++ }
++ break;
+ }
++
+ ithc_log_regs(ithc);
+
+ // The rest...
++ bitsl_set(&ithc->regs->dma_rx[0].init_unknown, INIT_UNKNOWN_31);
++
+ bitsl(&ithc->regs->quickspi_config1,
+ QUICKSPI_CONFIG1_UNKNOWN_0(0xff) | QUICKSPI_CONFIG1_UNKNOWN_5(0xff) |
+ QUICKSPI_CONFIG1_UNKNOWN_10(0xff) | QUICKSPI_CONFIG1_UNKNOWN_16(0xffff),
@@ -7794,7 +6150,7 @@ index 0000000000000..760e55ead0788
+
diff --git a/drivers/hid/ithc/ithc-quickspi.h b/drivers/hid/ithc/ithc-quickspi.h
new file mode 100644
-index 0000000000000..74d882f6b2f0a
+index 000000000000..74d882f6b2f0
--- /dev/null
+++ b/drivers/hid/ithc/ithc-quickspi.h
@@ -0,0 +1,39 @@
@@ -7838,51 +6194,69 @@ index 0000000000000..74d882f6b2f0a
+ size_t maxlen);
+
diff --git a/drivers/hid/ithc/ithc-regs.c b/drivers/hid/ithc/ithc-regs.c
-index e058721886e37..c0f13506af205 100644
---- a/drivers/hid/ithc/ithc-regs.c
+new file mode 100644
+index 000000000000..c0f13506af20
+--- /dev/null
+++ b/drivers/hid/ithc/ithc-regs.c
-@@ -22,46 +22,104 @@ void bitsb(__iomem u8 *reg, u8 mask, u8 val)
-
- int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val)
- {
+@@ -0,0 +1,154 @@
++// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
++
++#include "ithc.h"
++
++#define reg_num(r) (0x1fff & (u16)(__force u64)(r))
++
++void bitsl(__iomem u32 *reg, u32 mask, u32 val)
++{
++ if (val & ~mask)
++ pr_err("register 0x%x: invalid value 0x%x for bitmask 0x%x\n",
++ reg_num(reg), val, mask);
++ writel((readl(reg) & ~mask) | (val & mask), reg);
++}
++
++void bitsb(__iomem u8 *reg, u8 mask, u8 val)
++{
++ if (val & ~mask)
++ pr_err("register 0x%x: invalid value 0x%x for bitmask 0x%x\n",
++ reg_num(reg), val, mask);
++ writeb((readb(reg) & ~mask) | (val & mask), reg);
++}
++
++int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val)
++{
+ ithc_log_regs(ithc);
- pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
- reg_num(reg), mask, val);
- u32 x;
- if (readl_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
++ pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
++ reg_num(reg), mask, val);
++ u32 x;
++ if (readl_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
+ ithc_log_regs(ithc);
- pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
- reg_num(reg), mask, val);
- return -ETIMEDOUT;
- }
++ pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%08x val 0x%08x\n",
++ reg_num(reg), mask, val);
++ return -ETIMEDOUT;
++ }
+ ithc_log_regs(ithc);
- pci_dbg(ithc->pci, "done waiting\n");
- return 0;
- }
-
- int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val)
- {
++ pci_dbg(ithc->pci, "done waiting\n");
++ return 0;
++}
++
++int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val)
++{
+ ithc_log_regs(ithc);
- pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
- reg_num(reg), mask, val);
- u8 x;
- if (readb_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
++ pci_dbg(ithc->pci, "waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
++ reg_num(reg), mask, val);
++ u8 x;
++ if (readb_poll_timeout(reg, x, (x & mask) == val, 200, 1000*1000)) {
+ ithc_log_regs(ithc);
- pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
- reg_num(reg), mask, val);
- return -ETIMEDOUT;
- }
++ pci_err(ithc->pci, "timed out waiting for reg 0x%04x mask 0x%02x val 0x%02x\n",
++ reg_num(reg), mask, val);
++ return -ETIMEDOUT;
++ }
+ ithc_log_regs(ithc);
- pci_dbg(ithc->pci, "done waiting\n");
- return 0;
- }
-
--int ithc_set_spi_config(struct ithc *ithc, u8 speed, u8 mode)
++ pci_dbg(ithc->pci, "done waiting\n");
++ return 0;
++}
++
+static void calc_ltr(u64 *ns, unsigned int *val, unsigned int *scale)
- {
-- pci_dbg(ithc->pci, "setting SPI speed to %i, mode %i\n", speed, mode);
-- if (mode == 3)
-- mode = 2;
++{
+ unsigned int s = 0;
+ u64 v = *ns;
+ while (v > 0x3ff) {
@@ -7934,32 +6308,59 @@ index e058721886e37..c0f13506af205 100644
+ pci_dbg(ithc->pci, "setting SPI frequency to %i Hz, %s read, %s write\n",
+ SPI_CLK_FREQ_BASE / (clkdiv * (clkdiv8 ? 8 : 1)),
+ modes[read_mode], modes[write_mode]);
- bitsl(&ithc->regs->spi_config,
-- SPI_CONFIG_MODE(0xff) | SPI_CONFIG_SPEED(0xff) | SPI_CONFIG_UNKNOWN_18(0xff) | SPI_CONFIG_SPEED2(0xff),
-- SPI_CONFIG_MODE(mode) | SPI_CONFIG_SPEED(speed) | SPI_CONFIG_UNKNOWN_18(0) | SPI_CONFIG_SPEED2(speed));
++ bitsl(&ithc->regs->spi_config,
+ SPI_CONFIG_READ_MODE(0xff) | SPI_CONFIG_READ_CLKDIV(0xff) |
+ SPI_CONFIG_WRITE_MODE(0xff) | SPI_CONFIG_WRITE_CLKDIV(0xff) |
+ SPI_CONFIG_CLKDIV_8,
+ SPI_CONFIG_READ_MODE(read_mode) | SPI_CONFIG_READ_CLKDIV(clkdiv) |
+ SPI_CONFIG_WRITE_MODE(write_mode) | SPI_CONFIG_WRITE_CLKDIV(clkdiv) |
+ (clkdiv8 ? SPI_CONFIG_CLKDIV_8 : 0));
- return 0;
- }
-
- int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data)
- {
-- pci_dbg(ithc->pci, "SPI command %u, size %u, offset %u\n", command, size, offset);
++ return 0;
++}
++
++int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data)
++{
+ pci_dbg(ithc->pci, "SPI command %u, size %u, offset 0x%x\n", command, size, offset);
- if (size > sizeof(ithc->regs->spi_cmd.data))
- return -EINVAL;
-
++ if (size > sizeof(ithc->regs->spi_cmd.data))
++ return -EINVAL;
++
++ // Wait if the device is still busy.
++ CHECK_RET(waitl, ithc, &ithc->regs->spi_cmd.status, SPI_CMD_STATUS_BUSY, 0);
++ // Clear result flags.
++ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
++
++ // Init SPI command data.
++ writeb(command, &ithc->regs->spi_cmd.code);
++ writew(size, &ithc->regs->spi_cmd.size);
++ writel(offset, &ithc->regs->spi_cmd.offset);
++ u32 *p = data, n = (size + 3) / 4;
++ for (u32 i = 0; i < n; i++)
++ writel(p[i], &ithc->regs->spi_cmd.data[i]);
++
++ // Start transmission.
++ bitsb_set(&ithc->regs->spi_cmd.control, SPI_CMD_CONTROL_SEND);
++ CHECK_RET(waitl, ithc, &ithc->regs->spi_cmd.status, SPI_CMD_STATUS_BUSY, 0);
++
++ // Read response.
++ if ((readl(&ithc->regs->spi_cmd.status) & (SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR)) != SPI_CMD_STATUS_DONE)
++ return -EIO;
++ if (readw(&ithc->regs->spi_cmd.size) != size)
++ return -EMSGSIZE;
++ for (u32 i = 0; i < n; i++)
++ p[i] = readl(&ithc->regs->spi_cmd.data[i]);
++
++ writel(SPI_CMD_STATUS_DONE | SPI_CMD_STATUS_ERROR, &ithc->regs->spi_cmd.status);
++ return 0;
++}
++
diff --git a/drivers/hid/ithc/ithc-regs.h b/drivers/hid/ithc/ithc-regs.h
-index d4007d9e2bacc..a9d2364546442 100644
---- a/drivers/hid/ithc/ithc-regs.h
+new file mode 100644
+index 000000000000..4f541fe533fa
+--- /dev/null
+++ b/drivers/hid/ithc/ithc-regs.h
-@@ -1,14 +1,34 @@
- /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
-
+@@ -0,0 +1,211 @@
++/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
++
+#define LTR_CONFIG_ENABLE_ACTIVE BIT(0)
+#define LTR_CONFIG_TOGGLE BIT(1)
+#define LTR_CONFIG_ENABLE_IDLE BIT(2)
@@ -7971,16 +6372,12 @@ index d4007d9e2bacc..a9d2364546442 100644
+#define LTR_CONFIG_STATUS_ACTIVE BIT(30)
+#define LTR_CONFIG_STATUS_IDLE BIT(31)
+
- #define CONTROL_QUIESCE BIT(1)
- #define CONTROL_IS_QUIESCED BIT(2)
- #define CONTROL_NRESET BIT(3)
++#define CONTROL_QUIESCE BIT(1)
++#define CONTROL_IS_QUIESCED BIT(2)
++#define CONTROL_NRESET BIT(3)
+#define CONTROL_UNKNOWN_24(x) (((x) & 3) << 24)
- #define CONTROL_READY BIT(29)
-
--#define SPI_CONFIG_MODE(x) (((x) & 3) << 2)
--#define SPI_CONFIG_SPEED(x) (((x) & 7) << 4)
--#define SPI_CONFIG_UNKNOWN_18(x) (((x) & 3) << 18)
--#define SPI_CONFIG_SPEED2(x) (((x) & 0xf) << 20) // high bit = high speed mode?
++#define CONTROL_READY BIT(29)
++
+#define SPI_CONFIG_READ_MODE(x) (((x) & 3) << 2)
+#define SPI_CONFIG_READ_CLKDIV(x) (((x) & 7) << 4)
+#define SPI_CONFIG_READ_PACKET_SIZE(x) (((x) & 0x1ff) << 7)
@@ -7993,13 +6390,50 @@ index d4007d9e2bacc..a9d2364546442 100644
+#define SPI_MODE_SINGLE 0
+#define SPI_MODE_DUAL 1
+#define SPI_MODE_QUAD 2
-
- #define ERROR_CONTROL_UNKNOWN_0 BIT(0)
- #define ERROR_CONTROL_DISABLE_DMA BIT(1) // clears DMA_RX_CONTROL_ENABLE when a DMA error occurs
-@@ -53,33 +73,71 @@
- #define DMA_TX_STATUS_UNKNOWN_2 BIT(2)
- #define DMA_TX_STATUS_UNKNOWN_3 BIT(3) // busy?
-
++
++#define ERROR_CONTROL_UNKNOWN_0 BIT(0)
++#define ERROR_CONTROL_DISABLE_DMA BIT(1) // clears DMA_RX_CONTROL_ENABLE when a DMA error occurs
++#define ERROR_CONTROL_UNKNOWN_2 BIT(2)
++#define ERROR_CONTROL_UNKNOWN_3 BIT(3)
++#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_9 BIT(9)
++#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_10 BIT(10)
++#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_12 BIT(12)
++#define ERROR_CONTROL_IRQ_DMA_UNKNOWN_13 BIT(13)
++#define ERROR_CONTROL_UNKNOWN_16(x) (((x) & 0xff) << 16) // spi error code irq?
++#define ERROR_CONTROL_SET_DMA_STATUS BIT(29) // sets DMA_RX_STATUS_ERROR when a DMA error occurs
++
++#define ERROR_STATUS_DMA BIT(28)
++#define ERROR_STATUS_SPI BIT(30)
++
++#define ERROR_FLAG_DMA_UNKNOWN_9 BIT(9)
++#define ERROR_FLAG_DMA_UNKNOWN_10 BIT(10)
++#define ERROR_FLAG_DMA_RX_TIMEOUT BIT(12) // set when we receive a truncated DMA message
++#define ERROR_FLAG_DMA_UNKNOWN_13 BIT(13)
++#define ERROR_FLAG_SPI_BUS_TURNAROUND BIT(16)
++#define ERROR_FLAG_SPI_RESPONSE_TIMEOUT BIT(17)
++#define ERROR_FLAG_SPI_INTRA_PACKET_TIMEOUT BIT(18)
++#define ERROR_FLAG_SPI_INVALID_RESPONSE BIT(19)
++#define ERROR_FLAG_SPI_HS_RX_TIMEOUT BIT(20)
++#define ERROR_FLAG_SPI_TOUCH_IC_INIT BIT(21)
++
++#define SPI_CMD_CONTROL_SEND BIT(0) // cleared by device when sending is complete
++#define SPI_CMD_CONTROL_IRQ BIT(1)
++
++#define SPI_CMD_CODE_READ 4
++#define SPI_CMD_CODE_WRITE 6
++
++#define SPI_CMD_STATUS_DONE BIT(0)
++#define SPI_CMD_STATUS_ERROR BIT(1)
++#define SPI_CMD_STATUS_BUSY BIT(3)
++
++#define DMA_TX_CONTROL_SEND BIT(0) // cleared by device when sending is complete
++#define DMA_TX_CONTROL_IRQ BIT(3)
++
++#define DMA_TX_STATUS_DONE BIT(0)
++#define DMA_TX_STATUS_ERROR BIT(1)
++#define DMA_TX_STATUS_UNKNOWN_2 BIT(2)
++#define DMA_TX_STATUS_UNKNOWN_3 BIT(3) // busy?
++
+#define INPUT_HEADER_VERSION(x) ((x) & 0xf)
+#define INPUT_HEADER_REPORT_LENGTH(x) (((x) >> 8) & 0x3fff)
+#define INPUT_HEADER_SYNC(x) ((x) >> 24)
@@ -8021,195 +6455,157 @@ index d4007d9e2bacc..a9d2364546442 100644
+#define QUICKSPI_CONFIG2_ENABLE_WRITE_STREAMING_MODE BIT(27)
+#define QUICKSPI_CONFIG2_IRQ_POLARITY BIT(28)
+
- #define DMA_RX_CONTROL_ENABLE BIT(0)
- #define DMA_RX_CONTROL_IRQ_UNKNOWN_1 BIT(1) // rx1 only?
- #define DMA_RX_CONTROL_IRQ_ERROR BIT(3) // rx1 only?
--#define DMA_RX_CONTROL_IRQ_UNKNOWN_4 BIT(4) // rx0 only?
++#define DMA_RX_CONTROL_ENABLE BIT(0)
++#define DMA_RX_CONTROL_IRQ_UNKNOWN_1 BIT(1) // rx1 only?
++#define DMA_RX_CONTROL_IRQ_ERROR BIT(3) // rx1 only?
+#define DMA_RX_CONTROL_IRQ_READY BIT(4) // rx0 only
- #define DMA_RX_CONTROL_IRQ_DATA BIT(5)
-
++#define DMA_RX_CONTROL_IRQ_DATA BIT(5)
++
+#define DMA_RX_CONTROL2_UNKNOWN_4 BIT(4) // rx1 only?
- #define DMA_RX_CONTROL2_UNKNOWN_5 BIT(5) // rx0 only?
- #define DMA_RX_CONTROL2_RESET BIT(7) // resets ringbuffer indices
-
- #define DMA_RX_WRAP_FLAG BIT(7)
-
- #define DMA_RX_STATUS_ERROR BIT(3)
--#define DMA_RX_STATUS_UNKNOWN_4 BIT(4) // set in rx0 after using CONTROL_NRESET when it becomes possible to read config (can take >100ms)
++#define DMA_RX_CONTROL2_UNKNOWN_5 BIT(5) // rx0 only?
++#define DMA_RX_CONTROL2_RESET BIT(7) // resets ringbuffer indices
++
++#define DMA_RX_WRAP_FLAG BIT(7)
++
++#define DMA_RX_STATUS_ERROR BIT(3)
+#define DMA_RX_STATUS_READY BIT(4) // set in rx0 after using CONTROL_NRESET when it becomes possible to read config (can take >100ms)
- #define DMA_RX_STATUS_HAVE_DATA BIT(5)
- #define DMA_RX_STATUS_ENABLED BIT(8)
-
++#define DMA_RX_STATUS_HAVE_DATA BIT(5)
++#define DMA_RX_STATUS_ENABLED BIT(8)
++
+#define INIT_UNKNOWN_GUC_2 BIT(2)
+#define INIT_UNKNOWN_3 BIT(3)
+#define INIT_UNKNOWN_GUC_4 BIT(4)
+#define INIT_UNKNOWN_5 BIT(5)
+#define INIT_UNKNOWN_31 BIT(31)
+
- // COUNTER_RESET can be written to counter registers to reset them to zero. However, in some cases this can mess up the THC.
- #define COUNTER_RESET BIT(31)
-
- struct ithc_registers {
-- /* 0000 */ u32 _unknown_0000[1024];
++// COUNTER_RESET can be written to counter registers to reset them to zero. However, in some cases this can mess up the THC.
++#define COUNTER_RESET BIT(31)
++
++struct ithc_registers {
+ /* 0000 */ u32 _unknown_0000[5];
+ /* 0014 */ u32 ltr_config;
+ /* 0018 */ u32 _unknown_0018[1018];
- /* 1000 */ u32 _unknown_1000;
- /* 1004 */ u32 _unknown_1004;
- /* 1008 */ u32 control_bits;
- /* 100c */ u32 _unknown_100c;
- /* 1010 */ u32 spi_config;
-- /* 1014 */ u32 _unknown_1014[3];
-+ /* 1014 */ u8 read_opcode; // maybe for header?
-+ /* 1015 */ u8 read_opcode_quad;
-+ /* 1016 */ u8 read_opcode_dual;
-+ /* 1017 */ u8 read_opcode_single;
-+ /* 1018 */ u8 write_opcode; // not used?
-+ /* 1019 */ u8 write_opcode_quad;
-+ /* 101a */ u8 write_opcode_dual;
-+ /* 101b */ u8 write_opcode_single;
-+ /* 101c */ u32 _unknown_101c;
- /* 1020 */ u32 error_control;
- /* 1024 */ u32 error_status; // write to clear
- /* 1028 */ u32 error_flags; // write to clear
-@@ -100,12 +158,19 @@ struct ithc_registers {
- /* 109a */ u8 _unknown_109a;
- /* 109b */ u8 num_prds;
- /* 109c */ u32 status; // write to clear
++ /* 1000 */ u32 _unknown_1000;
++ /* 1004 */ u32 _unknown_1004;
++ /* 1008 */ u32 control_bits;
++ /* 100c */ u32 _unknown_100c;
++ /* 1010 */ u32 spi_config;
++ struct {
++ /* 1014/1018/101c */ u8 header;
++ /* 1015/1019/101d */ u8 quad;
++ /* 1016/101a/101e */ u8 dual;
++ /* 1017/101b/101f */ u8 single;
++ } opcode[3];
++ /* 1020 */ u32 error_control;
++ /* 1024 */ u32 error_status; // write to clear
++ /* 1028 */ u32 error_flags; // write to clear
++ /* 102c */ u32 _unknown_102c[5];
++ struct {
++ /* 1040 */ u8 control;
++ /* 1041 */ u8 code;
++ /* 1042 */ u16 size;
++ /* 1044 */ u32 status; // write to clear
++ /* 1048 */ u32 offset;
++ /* 104c */ u32 data[16];
++ /* 108c */ u32 _unknown_108c;
++ } spi_cmd;
++ struct {
++ /* 1090 */ u64 addr; // cannot be written with writeq(), must use lo_hi_writeq()
++ /* 1098 */ u8 control;
++ /* 1099 */ u8 _unknown_1099;
++ /* 109a */ u8 _unknown_109a;
++ /* 109b */ u8 num_prds;
++ /* 109c */ u32 status; // write to clear
+ /* 10a0 */ u32 _unknown_10a0[5];
+ /* 10b4 */ u32 spi_addr;
- } dma_tx;
-- /* 10a0 */ u32 _unknown_10a0[7];
-- /* 10bc */ u32 state; // is 0xe0000402 (dev config val 0) after CONTROL_NRESET, 0xe0000461 after first touch, 0xe0000401 after DMA_RX_CODE_RESET
++ } dma_tx;
+ /* 10b8 */ u32 spi_header_addr;
+ union {
+ /* 10bc */ u32 irq_cause; // in legacy THC mode
+ /* 10bc */ u32 input_header; // in QuickSPI mode (see HIDSPI spec)
+ };
- /* 10c0 */ u32 _unknown_10c0[8];
- /* 10e0 */ u32 _unknown_10e0_counters[3];
-- /* 10ec */ u32 _unknown_10ec[5];
++ /* 10c0 */ u32 _unknown_10c0[8];
++ /* 10e0 */ u32 _unknown_10e0_counters[3];
+ /* 10ec */ u32 quickspi_config1;
+ /* 10f0 */ u32 quickspi_config2;
+ /* 10f4 */ u32 _unknown_10f4[3];
- struct {
- /* 1100/1200 */ u64 addr; // cannot be written with writeq(), must use lo_hi_writeq()
- /* 1108/1208 */ u8 num_bufs;
-@@ -120,70 +185,30 @@ struct ithc_registers {
- /* 1118/1218 */ u64 _unknown_1118_guc_addr;
- /* 1120/1220 */ u32 _unknown_1120_guc;
- /* 1124/1224 */ u32 _unknown_1124_guc;
-- /* 1128/1228 */ u32 unknown_init_bits; // bit 2 = guc related, bit 3 = rx1 related, bit 4 = guc related
++ struct {
++ /* 1100/1200 */ u64 addr; // cannot be written with writeq(), must use lo_hi_writeq()
++ /* 1108/1208 */ u8 num_bufs;
++ /* 1109/1209 */ u8 num_prds;
++ /* 110a/120a */ u16 _unknown_110a;
++ /* 110c/120c */ u8 control;
++ /* 110d/120d */ u8 head;
++ /* 110e/120e */ u8 tail;
++ /* 110f/120f */ u8 control2;
++ /* 1110/1210 */ u32 status; // write to clear
++ /* 1114/1214 */ u32 _unknown_1114;
++ /* 1118/1218 */ u64 _unknown_1118_guc_addr;
++ /* 1120/1220 */ u32 _unknown_1120_guc;
++ /* 1124/1224 */ u32 _unknown_1124_guc;
+ /* 1128/1228 */ u32 init_unknown;
- /* 112c/122c */ u32 _unknown_112c;
- /* 1130/1230 */ u64 _unknown_1130_guc_addr;
- /* 1138/1238 */ u32 _unknown_1138_guc;
- /* 113c/123c */ u32 _unknown_113c;
- /* 1140/1240 */ u32 _unknown_1140_guc;
-- /* 1144/1244 */ u32 _unknown_1144[23];
++ /* 112c/122c */ u32 _unknown_112c;
++ /* 1130/1230 */ u64 _unknown_1130_guc_addr;
++ /* 1138/1238 */ u32 _unknown_1138_guc;
++ /* 113c/123c */ u32 _unknown_113c;
++ /* 1140/1240 */ u32 _unknown_1140_guc;
+ /* 1144/1244 */ u32 _unknown_1144[11];
+ /* 1170/1270 */ u32 spi_addr;
+ /* 1174/1274 */ u32 _unknown_1174[11];
- /* 11a0/12a0 */ u32 _unknown_11a0_counters[6];
- /* 11b8/12b8 */ u32 _unknown_11b8[18];
- } dma_rx[2];
- };
- static_assert(sizeof(struct ithc_registers) == 0x1300);
-
--#define DEVCFG_DMA_RX_SIZE(x) ((((x) & 0x3fff) + 1) << 6)
--#define DEVCFG_DMA_TX_SIZE(x) (((((x) >> 14) & 0x3ff) + 1) << 6)
--
--#define DEVCFG_TOUCH_MASK 0x3f
--#define DEVCFG_TOUCH_ENABLE BIT(0)
--#define DEVCFG_TOUCH_UNKNOWN_1 BIT(1)
--#define DEVCFG_TOUCH_UNKNOWN_2 BIT(2)
--#define DEVCFG_TOUCH_UNKNOWN_3 BIT(3)
--#define DEVCFG_TOUCH_UNKNOWN_4 BIT(4)
--#define DEVCFG_TOUCH_UNKNOWN_5 BIT(5)
--#define DEVCFG_TOUCH_UNKNOWN_6 BIT(6)
--
--#define DEVCFG_DEVICE_ID_TIC 0x43495424 // "$TIC"
--
--#define DEVCFG_SPI_MAX_FREQ(x) (((x) >> 1) & 0xf) // high bit = use high speed mode?
--#define DEVCFG_SPI_MODE(x) (((x) >> 6) & 3)
--#define DEVCFG_SPI_UNKNOWN_8(x) (((x) >> 8) & 0x3f)
--#define DEVCFG_SPI_NEEDS_HEARTBEAT BIT(20) // TODO implement heartbeat
--#define DEVCFG_SPI_HEARTBEAT_INTERVAL(x) (((x) >> 21) & 7)
--#define DEVCFG_SPI_UNKNOWN_25 BIT(25)
--#define DEVCFG_SPI_UNKNOWN_26 BIT(26)
--#define DEVCFG_SPI_UNKNOWN_27 BIT(27)
--#define DEVCFG_SPI_DELAY(x) (((x) >> 28) & 7) // TODO use this
--#define DEVCFG_SPI_USE_EXT_READ_CFG BIT(31) // TODO use this?
--
--struct ithc_device_config { // (Example values are from an SP7+.)
-- u32 _unknown_00; // 00 = 0xe0000402 (0xe0000401 after DMA_RX_CODE_RESET)
-- u32 _unknown_04; // 04 = 0x00000000
-- u32 dma_buf_sizes; // 08 = 0x000a00ff
-- u32 touch_cfg; // 0c = 0x0000001c
-- u32 _unknown_10; // 10 = 0x0000001c
-- u32 device_id; // 14 = 0x43495424 = "$TIC"
-- u32 spi_config; // 18 = 0xfda00a2e
-- u16 vendor_id; // 1c = 0x045e = Microsoft Corp.
-- u16 product_id; // 1e = 0x0c1a
-- u32 revision; // 20 = 0x00000001
-- u32 fw_version; // 24 = 0x05008a8b = 5.0.138.139 (this value looks more random on newer devices)
-- u32 _unknown_28; // 28 = 0x00000000
-- u32 fw_mode; // 2c = 0x00000000 (for fw update?)
-- u32 _unknown_30; // 30 = 0x00000000
-- u32 _unknown_34; // 34 = 0x0404035e (u8,u8,u8,u8 = version?)
-- u32 _unknown_38; // 38 = 0x000001c0 (0x000001c1 after DMA_RX_CODE_RESET)
-- u32 _unknown_3c; // 3c = 0x00000002
--};
--
- void bitsl(__iomem u32 *reg, u32 mask, u32 val);
- void bitsb(__iomem u8 *reg, u8 mask, u8 val);
- #define bitsl_set(reg, x) bitsl(reg, x, x)
- #define bitsb_set(reg, x) bitsb(reg, x, x)
- int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val);
- int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val);
--int ithc_set_spi_config(struct ithc *ithc, u8 speed, u8 mode);
++ /* 11a0/12a0 */ u32 _unknown_11a0_counters[6];
++ /* 11b8/12b8 */ u32 _unknown_11b8[18];
++ } dma_rx[2];
++};
++static_assert(sizeof(struct ithc_registers) == 0x1300);
++
++void bitsl(__iomem u32 *reg, u32 mask, u32 val);
++void bitsb(__iomem u8 *reg, u8 mask, u8 val);
++#define bitsl_set(reg, x) bitsl(reg, x, x)
++#define bitsb_set(reg, x) bitsb(reg, x, x)
++int waitl(struct ithc *ithc, __iomem u32 *reg, u32 mask, u32 val);
++int waitb(struct ithc *ithc, __iomem u8 *reg, u8 mask, u8 val);
+
+void ithc_set_ltr_config(struct ithc *ithc, u64 active_ltr_ns, u64 idle_ltr_ns);
+void ithc_set_ltr_idle(struct ithc *ithc);
+int ithc_set_spi_config(struct ithc *ithc, u8 clkdiv, bool clkdiv8, u8 read_mode, u8 write_mode);
- int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data);
-
++int ithc_spi_command(struct ithc *ithc, u8 command, u32 offset, u32 size, void *data);
++
diff --git a/drivers/hid/ithc/ithc.h b/drivers/hid/ithc/ithc.h
-index 028e55a4ec53e..e90c380444325 100644
---- a/drivers/hid/ithc/ithc.h
+new file mode 100644
+index 000000000000..aec320d4e945
+--- /dev/null
+++ b/drivers/hid/ithc/ithc.h
-@@ -1,20 +1,19 @@
- /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
-
--#include <linux/module.h>
--#include <linux/input.h>
--#include <linux/hid.h>
+@@ -0,0 +1,89 @@
++/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
++
+#include <linux/acpi.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
- #include <linux/dma-mapping.h>
++#include <linux/dma-mapping.h>
+#include <linux/hid.h>
- #include <linux/highmem.h>
--#include <linux/pci.h>
++#include <linux/highmem.h>
+#include <linux/input.h>
- #include <linux/io-64-nonatomic-lo-hi.h>
- #include <linux/iopoll.h>
--#include <linux/delay.h>
- #include <linux/kthread.h>
- #include <linux/miscdevice.h>
--#include <linux/debugfs.h>
++#include <linux/io-64-nonatomic-lo-hi.h>
++#include <linux/iopoll.h>
++#include <linux/kthread.h>
++#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/pci.h>
- #include <linux/poll.h>
--#include <linux/timer.h>
--#include <linux/pm_qos.h>
-
- #define DEVNAME "ithc"
- #define DEVFULLNAME "Intel Touch Host Controller"
-@@ -27,10 +26,37 @@
-
- #define NUM_RX_BUF 16
-
++#include <linux/poll.h>
++#include <linux/timer.h>
++#include <linux/vmalloc.h>
++
++#define DEVNAME "ithc"
++#define DEVFULLNAME "Intel Touch Host Controller"
++
++#undef pr_fmt
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#define CHECK(fn, ...) ({ int r = fn(__VA_ARGS__); if (r < 0) pci_err(ithc->pci, "%s: %s failed with %i\n", __func__, #fn, r); r; })
++#define CHECK_RET(...) do { int r = CHECK(__VA_ARGS__); if (r < 0) return r; } while (0)
++
++#define NUM_RX_BUF 16
++
+// PCI device IDs:
+// Lakefield
+#define PCI_DEVICE_ID_INTEL_THC_LKF_PORT1 0x98d0
@@ -8230,44 +6626,31 @@ index 028e55a4ec53e..e90c380444325 100644
+#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT1 0x7a58
+#define PCI_DEVICE_ID_INTEL_THC_RPL_S_PORT2 0x7a59
+// Meteor Lake
-+#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT1 0x7e48
-+#define PCI_DEVICE_ID_INTEL_THC_MTL_PORT2 0x7e4a
++#define PCI_DEVICE_ID_INTEL_THC_MTL_S_PORT1 0x7f59
++#define PCI_DEVICE_ID_INTEL_THC_MTL_S_PORT2 0x7f5b
++#define PCI_DEVICE_ID_INTEL_THC_MTL_MP_PORT1 0x7e49
++#define PCI_DEVICE_ID_INTEL_THC_MTL_MP_PORT2 0x7e4b
+
- struct ithc;
-
- #include "ithc-regs.h"
++struct ithc;
++
++#include "ithc-regs.h"
+#include "ithc-hid.h"
- #include "ithc-dma.h"
++#include "ithc-dma.h"
+#include "ithc-legacy.h"
+#include "ithc-quickspi.h"
+#include "ithc-debug.h"
-
- struct ithc {
- char phys[32];
-@@ -38,30 +64,21 @@ struct ithc {
- int irq;
- struct task_struct *poll_thread;
-
-- struct pm_qos_request activity_qos;
-- struct hrtimer activity_start_timer;
-- struct hrtimer activity_end_timer;
-- ktime_t last_rx_time;
-- unsigned int cur_rx_seq_count;
-- unsigned int cur_rx_seq_errors;
--
-- struct hid_device *hid;
-- bool hid_parse_done;
-- wait_queue_head_t wait_hid_parse;
-- wait_queue_head_t wait_hid_get_feature;
-- struct mutex hid_get_feature_mutex;
-- void *hid_get_feature_buf;
-- size_t hid_get_feature_size;
--
- struct ithc_registers __iomem *regs;
- struct ithc_registers *prev_regs; // for debugging
-- struct ithc_device_config config;
- struct ithc_dma_rx dma_rx[2];
- struct ithc_dma_tx dma_tx;
++
++struct ithc {
++ char phys[32];
++ struct pci_dev *pci;
++ int irq;
++ struct task_struct *poll_thread;
++ struct timer_list idle_timer;
++
++ struct ithc_registers __iomem *regs;
++ struct ithc_registers *prev_regs; // for debugging
++ struct ithc_dma_rx dma_rx[2];
++ struct ithc_dma_tx dma_tx;
+ struct ithc_hid hid;
+
+ bool use_quickspi;
@@ -8278,234 +6661,14 @@ index 028e55a4ec53e..e90c380444325 100644
+ u32 max_rx_size;
+ u32 max_tx_size;
+ u32 legacy_touch_cfg;
- };
-
- int ithc_reset(struct ithc *ithc);
--void ithc_set_active(struct ithc *ithc, unsigned int duration_us);
--int ithc_debug_init(struct ithc *ithc);
--void ithc_log_regs(struct ithc *ithc);
-
---
-2.45.1
-
-From b4563a0da733d5759de36d9e555ce81324dca286 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Thu, 9 May 2024 16:15:49 +0200
-Subject: [PATCH] serial: Clear UPF_DEAD before calling
- tty_port_register_device_attr_serdev()
-
-If a serdev_device_driver is already loaded for a serdev_tty_port when it
-gets registered by tty_port_register_device_attr_serdev() then that
-driver's probe() method will be called immediately.
-
-The serdev_device_driver's probe() method should then be able to call
-serdev_device_open() successfully, but because UPF_DEAD is still dead
-serdev_device_open() will fail with -ENXIO in this scenario:
-
- serdev_device_open()
- ctrl->ops->open() /* this callback being ttyport_open() */
- tty->ops->open() /* this callback being uart_open() */
- tty_port_open()
- port->ops->activate() /* this callback being uart_port_activate() */
- Find bit UPF_DEAD is set in uport->flags and fail with errno -ENXIO.
-
-Fix this be clearing UPF_DEAD before tty_port_register_device_attr_serdev()
-note this only moves up the UPD_DEAD clearing a small bit, before:
-
- tty_port_register_device_attr_serdev();
- mutex_unlock(&tty_port.mutex);
- uart_port.flags &= ~UPF_DEAD;
- mutex_unlock(&port_mutex);
-
-after:
-
- uart_port.flags &= ~UPF_DEAD;
- tty_port_register_device_attr_serdev();
- mutex_unlock(&tty_port.mutex);
- mutex_unlock(&port_mutex);
-
-Reported-by: Weifeng Liu <weifeng.liu.z@gmail.com>
-Closes: https://lore.kernel.org/platform-driver-x86/20240505130800.2546640-1-weifeng.liu.z@gmail.com/
-Tested-by: Weifeng Liu <weifeng.liu.z@gmail.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-Link: https://lore.kernel.org/r/20240509141549.63704-1-hdegoede@redhat.com
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Patchset: surface-sam
----
- drivers/tty/serial/serial_core.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
-index c476d884356db..b47a277978a0b 100644
---- a/drivers/tty/serial/serial_core.c
-+++ b/drivers/tty/serial/serial_core.c
-@@ -3211,6 +3211,9 @@ static int serial_core_add_one_port(struct uart_driver *drv, struct uart_port *u
- if (uport->attr_group)
- uport->tty_groups[1] = uport->attr_group;
-
-+ /* Ensure serdev drivers can call serdev_device_open() right away */
-+ uport->flags &= ~UPF_DEAD;
++};
++
++int ithc_reset(struct ithc *ithc);
+
- /*
- * Register the port whether it's detected or not. This allows
- * setserial to be used to alter this port's parameters.
-@@ -3221,6 +3224,7 @@ static int serial_core_add_one_port(struct uart_driver *drv, struct uart_port *u
- if (!IS_ERR(tty_dev)) {
- device_set_wakeup_capable(tty_dev, 1);
- } else {
-+ uport->flags |= UPF_DEAD;
- dev_err(uport->dev, "Cannot register tty device on line %d\n",
- uport->line);
- }
-@@ -3426,8 +3430,6 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port)
- if (ret)
- goto err_unregister_port_dev;
-
-- port->flags &= ~UPF_DEAD;
--
- mutex_unlock(&port_mutex);
-
- return 0;
---
-2.45.1
-
-From 0864ded554efe90dd9603b61e82c604481ee5125 Mon Sep 17 00:00:00 2001
-From: Weifeng Liu <weifeng.liu.z@gmail.com>
-Date: Sun, 5 May 2024 21:07:50 +0800
-Subject: [PATCH] platform/surface: aggregator: Log critical errors during SAM
- probing
-
-Emits messages upon errors during probing of SAM. Hopefully this could
-provide useful context to user for the purpose of diagnosis when
-something miserable happen.
-
-Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
-Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>
-Link: https://lore.kernel.org/r/20240505130800.2546640-3-weifeng.liu.z@gmail.com
-Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-Patchset: surface-sam
----
- drivers/platform/surface/aggregator/core.c | 42 ++++++++++++++--------
- 1 file changed, 28 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/platform/surface/aggregator/core.c b/drivers/platform/surface/aggregator/core.c
-index ba550eaa06fcf..797d0645bd77f 100644
---- a/drivers/platform/surface/aggregator/core.c
-+++ b/drivers/platform/surface/aggregator/core.c
-@@ -618,15 +618,17 @@ static const struct acpi_gpio_mapping ssam_acpi_gpios[] = {
-
- static int ssam_serial_hub_probe(struct serdev_device *serdev)
- {
-- struct acpi_device *ssh = ACPI_COMPANION(&serdev->dev);
-+ struct device *dev = &serdev->dev;
-+ struct acpi_device *ssh = ACPI_COMPANION(dev);
- struct ssam_controller *ctrl;
- acpi_status astatus;
- int status;
-
-- if (gpiod_count(&serdev->dev, NULL) < 0)
-- return -ENODEV;
-+ status = gpiod_count(dev, NULL);
-+ if (status < 0)
-+ return dev_err_probe(dev, status, "no GPIO found\n");
-
-- status = devm_acpi_dev_add_driver_gpios(&serdev->dev, ssam_acpi_gpios);
-+ status = devm_acpi_dev_add_driver_gpios(dev, ssam_acpi_gpios);
- if (status)
- return status;
-
-@@ -637,8 +639,10 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
-
- /* Initialize controller. */
- status = ssam_controller_init(ctrl, serdev);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "failed to initialize ssam controller\n");
- goto err_ctrl_init;
-+ }
-
- ssam_controller_lock(ctrl);
-
-@@ -646,12 +650,14 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
- serdev_device_set_drvdata(serdev, ctrl);
- serdev_device_set_client_ops(serdev, &ssam_serdev_ops);
- status = serdev_device_open(serdev);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "failed to open serdev device\n");
- goto err_devopen;
-+ }
-
- astatus = ssam_serdev_setup_via_acpi(ssh->handle, serdev);
- if (ACPI_FAILURE(astatus)) {
-- status = -ENXIO;
-+ status = dev_err_probe(dev, -ENXIO, "failed to setup serdev\n");
- goto err_devinit;
- }
-
-@@ -667,25 +673,33 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
- * states.
- */
- status = ssam_log_firmware_version(ctrl);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "failed to get firmware version\n");
- goto err_initrq;
-+ }
-
- status = ssam_ctrl_notif_d0_entry(ctrl);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "D0-entry notification failed\n");
- goto err_initrq;
-+ }
-
- status = ssam_ctrl_notif_display_on(ctrl);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "display-on notification failed\n");
- goto err_initrq;
-+ }
-
-- status = sysfs_create_group(&serdev->dev.kobj, &ssam_sam_group);
-+ status = sysfs_create_group(&dev->kobj, &ssam_sam_group);
- if (status)
- goto err_initrq;
-
- /* Set up IRQ. */
- status = ssam_irq_setup(ctrl);
-- if (status)
-+ if (status) {
-+ dev_err_probe(dev, status, "failed to setup IRQ\n");
- goto err_irq;
-+ }
-
- /* Finally, set main controller reference. */
- status = ssam_try_set_controller(ctrl);
-@@ -702,7 +716,7 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
- * resumed. In short, this causes some spurious unwanted wake-ups.
- * For now let's thus default power/wakeup to false.
- */
-- device_set_wakeup_capable(&serdev->dev, true);
-+ device_set_wakeup_capable(dev, true);
- acpi_dev_clear_dependencies(ssh);
-
- return 0;
-@@ -710,7 +724,7 @@ static int ssam_serial_hub_probe(struct serdev_device *serdev)
- err_mainref:
- ssam_irq_free(ctrl);
- err_irq:
-- sysfs_remove_group(&serdev->dev.kobj, &ssam_sam_group);
-+ sysfs_remove_group(&dev->kobj, &ssam_sam_group);
- err_initrq:
- ssam_controller_lock(ctrl);
- ssam_controller_shutdown(ctrl);
--
-2.45.1
+2.45.2
-From d44985653441ba783a830bd5efde2fcf3a3ea271 Mon Sep 17 00:00:00 2001
+From 5180e4810b868e0d3da85577b776a929cecf1d65 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 19 Apr 2024 20:41:47 +0200
Subject: [PATCH] platform/surface: aggregator: Fix warning when controller is
@@ -8544,7 +6707,7 @@ Patchset: surface-sam
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
-index 7fc602e01487d..7e89f547999b2 100644
+index 7fc602e01487..7e89f547999b 100644
--- a/drivers/platform/surface/aggregator/controller.c
+++ b/drivers/platform/surface/aggregator/controller.c
@@ -1354,7 +1354,8 @@ void ssam_controller_destroy(struct ssam_controller *ctrl)
@@ -8558,9 +6721,9 @@ index 7fc602e01487d..7e89f547999b2 100644
/*
* Note: New events could still have been received after the previous
--
-2.45.1
+2.45.2
-From 6b6f860bbef0ba3f10f8dc151ac4e27d0a34c223 Mon Sep 17 00:00:00 2001
+From 144dbc865c07df0290009d509b31635aac53a907 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 22 Oct 2023 14:57:11 +0200
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -8577,10 +6740,10 @@ Patchset: surface-sam
1 file changed, 3 insertions(+)
diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 035d6b4105cd6..74688a2ed4b2e 100644
+index 1c4d74db08c9..f826489dc69d 100644
--- a/drivers/platform/surface/surface_aggregator_registry.c
+++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -374,6 +374,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+@@ -395,6 +395,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
/* Surface Laptop Go 2 */
{ "MSHW0290", (unsigned long)ssam_node_group_slg1 },
@@ -8591,9 +6754,9 @@ index 035d6b4105cd6..74688a2ed4b2e 100644
{ "MSHW0123", (unsigned long)ssam_node_group_sls },
--
-2.45.1
+2.45.2
-From 31b312c25822404e52a81de2525da5c7bae12864 Mon Sep 17 00:00:00 2001
+From 7b906ae84a56322a5098c77a774f5fb00b4318a5 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Mon, 20 Nov 2023 19:47:00 +0100
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -8611,10 +6774,10 @@ Patchset: surface-sam
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 74688a2ed4b2e..f02a933160ff2 100644
+index f826489dc69d..ef59a7b66667 100644
--- a/drivers/platform/surface/surface_aggregator_registry.c
+++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -253,8 +253,8 @@ static const struct software_node *ssam_node_group_sl5[] = {
+@@ -273,8 +273,8 @@ static const struct software_node *ssam_node_group_sl5[] = {
NULL,
};
@@ -8625,7 +6788,7 @@ index 74688a2ed4b2e..f02a933160ff2 100644
&ssam_node_root,
&ssam_node_bat_ac,
&ssam_node_bat_main,
-@@ -269,6 +269,20 @@ static const struct software_node *ssam_node_group_sls[] = {
+@@ -289,6 +289,20 @@ static const struct software_node *ssam_node_group_sls[] = {
NULL,
};
@@ -8646,7 +6809,7 @@ index 74688a2ed4b2e..f02a933160ff2 100644
/* Devices for Surface Laptop Go. */
static const struct software_node *ssam_node_group_slg1[] = {
&ssam_node_root,
-@@ -377,8 +391,11 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+@@ -398,8 +412,11 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
/* Surface Laptop Go 3 */
{ "MSHW0440", (unsigned long)ssam_node_group_slg1 },
@@ -8661,9 +6824,9 @@ index 74688a2ed4b2e..f02a933160ff2 100644
{ },
};
--
-2.45.1
+2.45.2
-From 42f6d14bda5e69c2b5a8d27cfcbd063a5922f876 Mon Sep 17 00:00:00 2001
+From d602c3714f0cc654b90de7800f844d6201eaa66b Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 9 Jun 2024 20:05:57 +0200
Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -8681,10 +6844,10 @@ Patchset: surface-sam
1 file changed, 19 insertions(+)
diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index f02a933160ff2..34df1bdad83bd 100644
+index ef59a7b66667..70a2ea5a1957 100644
--- a/drivers/platform/surface/surface_aggregator_registry.c
+++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -253,6 +253,22 @@ static const struct software_node *ssam_node_group_sl5[] = {
+@@ -273,6 +273,22 @@ static const struct software_node *ssam_node_group_sl5[] = {
NULL,
};
@@ -8707,7 +6870,7 @@ index f02a933160ff2..34df1bdad83bd 100644
/* Devices for Surface Laptop Studio 1. */
static const struct software_node *ssam_node_group_sls1[] = {
&ssam_node_root,
-@@ -382,6 +398,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+@@ -403,6 +419,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
/* Surface Laptop 5 */
{ "MSHW0350", (unsigned long)ssam_node_group_sl5 },
@@ -8718,9 +6881,9 @@ index f02a933160ff2..34df1bdad83bd 100644
{ "MSHW0118", (unsigned long)ssam_node_group_slg1 },
--
-2.45.1
+2.45.2
-From 88fda328aea3bb7077cd39f854148276dcffcea3 Mon Sep 17 00:00:00 2001
+From 4bde7be038c7dced1b596c7d41e6f0bb3043d301 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 30 Dec 2023 18:07:54 +0100
Subject: [PATCH] hwmon: Add thermal sensor driver for Surface Aggregator
@@ -8742,10 +6905,10 @@ Patchset: surface-sam
create mode 100644 drivers/hwmon/surface_temp.c
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index 83945397b6eb1..338ef73c96a3a 100644
+index e14ae18a973b..76eabe3e4435 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
-@@ -2070,6 +2070,16 @@ config SENSORS_SURFACE_FAN
+@@ -2093,6 +2093,16 @@ config SENSORS_SURFACE_FAN
Select M or Y here, if you want to be able to read the fan's speed.
@@ -8763,10 +6926,10 @@ index 83945397b6eb1..338ef73c96a3a 100644
tristate "Texas Instruments ADC128D818"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
-index 5c31808f6378d..de8bc99719e63 100644
+index e3f25475d1f0..eff74ab7f720 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
-@@ -208,6 +208,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
+@@ -209,6 +209,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
obj-$(CONFIG_SENSORS_STTS751) += stts751.o
obj-$(CONFIG_SENSORS_SURFACE_FAN)+= surface_fan.o
@@ -8776,7 +6939,7 @@ index 5c31808f6378d..de8bc99719e63 100644
obj-$(CONFIG_SENSORS_TC74) += tc74.o
diff --git a/drivers/hwmon/surface_temp.c b/drivers/hwmon/surface_temp.c
new file mode 100644
-index 0000000000000..48c3e826713f6
+index 000000000000..48c3e826713f
--- /dev/null
+++ b/drivers/hwmon/surface_temp.c
@@ -0,0 +1,165 @@
@@ -8946,9 +7109,9 @@ index 0000000000000..48c3e826713f6
+MODULE_DESCRIPTION("Thermal sensor subsystem driver for Surface System Aggregator Module");
+MODULE_LICENSE("GPL");
--
-2.45.1
+2.45.2
-From 17f0ec6ef1bc95e152af3a9f2b05ea669c75d24a Mon Sep 17 00:00:00 2001
+From ae82a35c632785771ebe2ad7f48006a1eb8f6a91 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 30 Dec 2023 18:12:23 +0100
Subject: [PATCH] hwmon: surface_temp: Add support for sensor names
@@ -8966,7 +7129,7 @@ Patchset: surface-sam
1 file changed, 96 insertions(+), 17 deletions(-)
diff --git a/drivers/hwmon/surface_temp.c b/drivers/hwmon/surface_temp.c
-index 48c3e826713f6..4c08926139dbf 100644
+index 48c3e826713f..4c08926139db 100644
--- a/drivers/hwmon/surface_temp.c
+++ b/drivers/hwmon/surface_temp.c
@@ -17,6 +17,27 @@
@@ -9141,379 +7304,121 @@ index 48c3e826713f6..4c08926139dbf 100644
"surface_thermal", ssam_temp, &ssam_temp_hwmon_chip_info,
NULL);
--
-2.45.1
+2.45.2
-From 54bfa02fe865b9f22d79b112a5244ce81e4961f1 Mon Sep 17 00:00:00 2001
+From 6a80e0b93ce1d8cf9d1b7e383b4b951fb4908294 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
-Date: Sat, 30 Dec 2023 18:21:12 +0100
-Subject: [PATCH] platform/surface: aggregator_registry: Add support for
- thermal sensors on the Surface Pro 9
+Date: Mon, 10 Jun 2024 21:47:47 +0200
+Subject: [PATCH] platform/surface: aggregator_registry: Add fan and thermal
+ sensor support for Surface Laptop 5
-The Surface Pro 9 has thermal sensors connected via the Surface
-Aggregator Module. Add a device node to support those.
-
-Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
Patchset: surface-sam
---
- drivers/platform/surface/surface_aggregator_registry.c | 7 +++++++
- 1 file changed, 7 insertions(+)
+ drivers/platform/surface/surface_aggregator_registry.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 34df1bdad83bd..c0bf0cadcd258 100644
+index 70a2ea5a1957..6b568804f70b 100644
--- a/drivers/platform/surface/surface_aggregator_registry.c
+++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -74,6 +74,12 @@ static const struct software_node ssam_node_tmp_pprof = {
- .parent = &ssam_node_root,
- };
-
-+/* Thermal sensors. */
-+static const struct software_node ssam_node_tmp_sensors = {
-+ .name = "ssam:01:03:01:00:02",
-+ .parent = &ssam_node_root,
-+};
-+
- /* Fan speed function. */
- static const struct software_node ssam_node_fan_speed = {
- .name = "ssam:01:05:01:01:01",
-@@ -341,6 +347,7 @@ static const struct software_node *ssam_node_group_sp9[] = {
+@@ -265,7 +265,9 @@ static const struct software_node *ssam_node_group_sl5[] = {
+ &ssam_node_root,
&ssam_node_bat_ac,
&ssam_node_bat_main,
- &ssam_node_tmp_pprof,
+- &ssam_node_tmp_perf_profile,
++ &ssam_node_tmp_perf_profile_with_fan,
+ &ssam_node_tmp_sensors,
- &ssam_node_fan_speed,
- &ssam_node_pos_tablet_switch,
- &ssam_node_hid_kip_keyboard,
++ &ssam_node_fan_speed,
+ &ssam_node_hid_main_keyboard,
+ &ssam_node_hid_main_touchpad,
+ &ssam_node_hid_main_iid5,
--
-2.45.1
+2.45.2
-From 06c4b5ac6b6357227e45c53643729140d794b48d Mon Sep 17 00:00:00 2001
-From: Ivor Wanders <ivor@iwanders.net>
-Date: Sat, 16 Dec 2023 15:56:39 -0500
-Subject: [PATCH] platform/surface: platform_profile: add fan profile switching
-
-Change naming from tmp to platform profile to clarify the module may
-interact with both the TMP and FAN subystems. Add functionality that
-switches the fan profile when the platform profile is changed.
+From 3175ecd829a778ffef35956d8785877bb76fe4b0 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Mon, 10 Jun 2024 21:48:02 +0200
+Subject: [PATCH] platform/surface: aggregator_registry: Add fan and thermal
+ sensor support for Surface Laptop Studio 2
-Signed-off-by: Ivor Wanders <ivor@iwanders.net>
Patchset: surface-sam
---
- .../surface/surface_aggregator_registry.c | 38 +++++---
- .../surface/surface_platform_profile.c | 86 ++++++++++++++++---
- 2 files changed, 100 insertions(+), 24 deletions(-)
+ drivers/platform/surface/surface_aggregator_registry.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index c0bf0cadcd258..07a4c4e1120d3 100644
+index 6b568804f70b..9046df95c043 100644
--- a/drivers/platform/surface/surface_aggregator_registry.c
+++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -68,8 +68,8 @@ static const struct software_node ssam_node_bat_sb3base = {
- .parent = &ssam_node_hub_base,
- };
-
--/* Platform profile / performance-mode device. */
--static const struct software_node ssam_node_tmp_pprof = {
-+/* Platform profile / performance-mode device without a fan. */
-+static const struct software_node ssam_node_tmp_perf_profile = {
- .name = "ssam:01:03:01:00:01",
- .parent = &ssam_node_root,
- };
-@@ -86,6 +86,20 @@ static const struct software_node ssam_node_fan_speed = {
- .parent = &ssam_node_root,
- };
-
-+/* Platform profile / performance-mode device with a fan, such that
-+ * the fan controller profile can also be switched.
-+ */
-+static const struct property_entry ssam_node_tmp_perf_profile_has_fan[] = {
-+ PROPERTY_ENTRY_BOOL("has_fan"),
-+ { }
-+};
-+
-+static const struct software_node ssam_node_tmp_perf_profile_with_fan = {
-+ .name = "ssam:01:03:01:00:01",
-+ .parent = &ssam_node_root,
-+ .properties = ssam_node_tmp_perf_profile_has_fan,
-+};
-+
- /* Tablet-mode switch via KIP subsystem. */
- static const struct software_node ssam_node_kip_tablet_switch = {
- .name = "ssam:01:0e:01:00:01",
-@@ -214,7 +228,7 @@ static const struct software_node ssam_node_pos_tablet_switch = {
- */
- static const struct software_node *ssam_node_group_gen5[] = {
- &ssam_node_root,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- NULL,
- };
-
-@@ -225,7 +239,7 @@ static const struct software_node *ssam_node_group_sb3[] = {
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
- &ssam_node_bat_sb3base,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- &ssam_node_bas_dtx,
- &ssam_node_hid_base_keyboard,
- &ssam_node_hid_base_touchpad,
-@@ -239,7 +253,7 @@ static const struct software_node *ssam_node_group_sl3[] = {
- &ssam_node_root,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- &ssam_node_hid_main_keyboard,
- &ssam_node_hid_main_touchpad,
- &ssam_node_hid_main_iid5,
-@@ -251,7 +265,7 @@ static const struct software_node *ssam_node_group_sl5[] = {
+@@ -312,7 +312,9 @@ static const struct software_node *ssam_node_group_sls2[] = {
&ssam_node_root,
&ssam_node_bat_ac,
&ssam_node_bat_main,
- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- &ssam_node_hid_main_keyboard,
- &ssam_node_hid_main_touchpad,
- &ssam_node_hid_main_iid5,
-@@ -280,7 +294,7 @@ static const struct software_node *ssam_node_group_sls1[] = {
- &ssam_node_root,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- &ssam_node_pos_tablet_switch,
- &ssam_node_hid_sam_keyboard,
- &ssam_node_hid_sam_penstash,
-@@ -296,7 +310,7 @@ static const struct software_node *ssam_node_group_sls2[] = {
- &ssam_node_root,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
++ &ssam_node_tmp_perf_profile_with_fan,
++ &ssam_node_tmp_sensors,
++ &ssam_node_fan_speed,
&ssam_node_pos_tablet_switch,
&ssam_node_hid_sam_keyboard,
&ssam_node_hid_sam_penstash,
-@@ -310,7 +324,7 @@ static const struct software_node *ssam_node_group_slg1[] = {
- &ssam_node_root,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- NULL,
- };
-
-@@ -319,7 +333,7 @@ static const struct software_node *ssam_node_group_sp7[] = {
- &ssam_node_root,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
+--
+2.45.2
+
+From aeef49471d7ec17f243c685b85c0c870c99e9e3d Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Fri, 28 Jun 2024 22:31:37 +0200
+Subject: [PATCH] platform/surface: aggregator_registry: Add Support for
+ Surface Pro 10
+
+Patchset: surface-sam
+---
+ .../surface/surface_aggregator_registry.c | 22 +++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 9046df95c043..058f4edd8b66 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -377,6 +377,25 @@ static const struct software_node *ssam_node_group_sp9[] = {
NULL,
};
-@@ -329,7 +343,7 @@ static const struct software_node *ssam_node_group_sp8[] = {
- &ssam_node_hub_kip,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
-+ &ssam_node_tmp_perf_profile,
- &ssam_node_kip_tablet_switch,
- &ssam_node_hid_kip_keyboard,
- &ssam_node_hid_kip_penstash,
-@@ -346,7 +360,7 @@ static const struct software_node *ssam_node_group_sp9[] = {
- &ssam_node_hub_kip,
- &ssam_node_bat_ac,
- &ssam_node_bat_main,
-- &ssam_node_tmp_pprof,
++/* Devices for Surface Pro 10 */
++static const struct software_node *ssam_node_group_sp10[] = {
++ &ssam_node_root,
++ &ssam_node_hub_kip,
++ &ssam_node_bat_ac,
++ &ssam_node_bat_main,
+ &ssam_node_tmp_perf_profile_with_fan,
- &ssam_node_tmp_sensors,
- &ssam_node_fan_speed,
- &ssam_node_pos_tablet_switch,
-diff --git a/drivers/platform/surface/surface_platform_profile.c b/drivers/platform/surface/surface_platform_profile.c
-index a5a3941b3f43a..e54d0a8f7daa5 100644
---- a/drivers/platform/surface/surface_platform_profile.c
-+++ b/drivers/platform/surface/surface_platform_profile.c
-@@ -1,7 +1,7 @@
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * Surface Platform Profile / Performance Mode driver for Surface System
-- * Aggregator Module (thermal subsystem).
-+ * Aggregator Module (thermal and fan subsystem).
- *
- * Copyright (C) 2021-2022 Maximilian Luz <luzmaximilian@gmail.com>
- */
-@@ -14,6 +14,7 @@
-
- #include <linux/surface_aggregator/device.h>
-
-+// Enum for the platform performance profile sent to the TMP module.
- enum ssam_tmp_profile {
- SSAM_TMP_PROFILE_NORMAL = 1,
- SSAM_TMP_PROFILE_BATTERY_SAVER = 2,
-@@ -21,15 +22,26 @@ enum ssam_tmp_profile {
- SSAM_TMP_PROFILE_BEST_PERFORMANCE = 4,
- };
-
-+// Enum for the fan profile sent to the FAN module. This fan profile is
-+// only sent to the EC if the 'has_fan' property is set. The integers are
-+// not a typo, they differ from the performance profile indices.
-+enum ssam_fan_profile {
-+ SSAM_FAN_PROFILE_NORMAL = 2,
-+ SSAM_FAN_PROFILE_BATTERY_SAVER = 1,
-+ SSAM_FAN_PROFILE_BETTER_PERFORMANCE = 3,
-+ SSAM_FAN_PROFILE_BEST_PERFORMANCE = 4,
++ &ssam_node_tmp_sensors,
++ &ssam_node_fan_speed,
++ &ssam_node_pos_tablet_switch,
++ &ssam_node_hid_kip_keyboard,
++ &ssam_node_hid_kip_penstash,
++ &ssam_node_hid_kip_touchpad,
++ &ssam_node_hid_kip_fwupd,
++ &ssam_node_hid_sam_sensors,
++ &ssam_node_hid_sam_ucm_ucsi,
++ NULL,
+};
+
- struct ssam_tmp_profile_info {
- __le32 profile;
- __le16 unknown1;
- __le16 unknown2;
- } __packed;
-
--struct ssam_tmp_profile_device {
-+struct ssam_platform_profile_device {
- struct ssam_device *sdev;
- struct platform_profile_handler handler;
-+ bool has_fan;
- };
-
- SSAM_DEFINE_SYNC_REQUEST_CL_R(__ssam_tmp_profile_get, struct ssam_tmp_profile_info, {
-@@ -42,6 +54,13 @@ SSAM_DEFINE_SYNC_REQUEST_CL_W(__ssam_tmp_profile_set, __le32, {
- .command_id = 0x03,
- });
-
-+SSAM_DEFINE_SYNC_REQUEST_W(__ssam_fan_profile_set, char, {
-+ .target_category = SSAM_SSH_TC_FAN,
-+ .target_id = SSAM_SSH_TID_SAM,
-+ .command_id = 0x0e,
-+ .instance_id = 0x01,
-+});
-+
- static int ssam_tmp_profile_get(struct ssam_device *sdev, enum ssam_tmp_profile *p)
- {
- struct ssam_tmp_profile_info info;
-@@ -62,7 +81,14 @@ static int ssam_tmp_profile_set(struct ssam_device *sdev, enum ssam_tmp_profile
- return ssam_retry(__ssam_tmp_profile_set, sdev, &profile_le);
- }
-
--static int convert_ssam_to_profile(struct ssam_device *sdev, enum ssam_tmp_profile p)
-+static int ssam_fan_profile_set(struct ssam_device *sdev, enum ssam_fan_profile p)
-+{
-+ char profile = p;
-+
-+ return ssam_retry(__ssam_fan_profile_set, sdev->ctrl, &profile);
-+}
-+
-+static int convert_ssam_tmp_to_profile(struct ssam_device *sdev, enum ssam_tmp_profile p)
- {
- switch (p) {
- case SSAM_TMP_PROFILE_NORMAL:
-@@ -83,7 +109,8 @@ static int convert_ssam_to_profile(struct ssam_device *sdev, enum ssam_tmp_profi
- }
- }
-
--static int convert_profile_to_ssam(struct ssam_device *sdev, enum platform_profile_option p)
-+
-+static int convert_profile_to_ssam_tmp(struct ssam_device *sdev, enum platform_profile_option p)
- {
- switch (p) {
- case PLATFORM_PROFILE_LOW_POWER:
-@@ -105,20 +132,42 @@ static int convert_profile_to_ssam(struct ssam_device *sdev, enum platform_profi
- }
- }
-
-+static int convert_profile_to_ssam_fan(struct ssam_device *sdev, enum platform_profile_option p)
-+{
-+ switch (p) {
-+ case PLATFORM_PROFILE_LOW_POWER:
-+ return SSAM_FAN_PROFILE_BATTERY_SAVER;
-+
-+ case PLATFORM_PROFILE_BALANCED:
-+ return SSAM_FAN_PROFILE_NORMAL;
-+
-+ case PLATFORM_PROFILE_BALANCED_PERFORMANCE:
-+ return SSAM_FAN_PROFILE_BETTER_PERFORMANCE;
-+
-+ case PLATFORM_PROFILE_PERFORMANCE:
-+ return SSAM_FAN_PROFILE_BEST_PERFORMANCE;
-+
-+ default:
-+ /* This should have already been caught by platform_profile_store(). */
-+ WARN(true, "unsupported platform profile");
-+ return -EOPNOTSUPP;
-+ }
-+}
-+
- static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
- enum platform_profile_option *profile)
- {
-- struct ssam_tmp_profile_device *tpd;
-+ struct ssam_platform_profile_device *tpd;
- enum ssam_tmp_profile tp;
- int status;
-
-- tpd = container_of(pprof, struct ssam_tmp_profile_device, handler);
-+ tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
-
- status = ssam_tmp_profile_get(tpd->sdev, &tp);
- if (status)
- return status;
-- status = convert_ssam_to_profile(tpd->sdev, tp);
-+ status = convert_ssam_tmp_to_profile(tpd->sdev, tp);
- if (status < 0)
- return status;
-
-@@ -129,21 +178,32 @@ static int ssam_platform_profile_get(struct platform_profile_handler *pprof,
- static int ssam_platform_profile_set(struct platform_profile_handler *pprof,
- enum platform_profile_option profile)
- {
-- struct ssam_tmp_profile_device *tpd;
-+ struct ssam_platform_profile_device *tpd;
- int tp;
-
-- tpd = container_of(pprof, struct ssam_tmp_profile_device, handler);
-+ tpd = container_of(pprof, struct ssam_platform_profile_device, handler);
-+
-+ tp = convert_profile_to_ssam_tmp(tpd->sdev, profile);
-+ if (tp < 0)
-+ return tp;
+ /* -- SSAM platform/meta-hub driver. ---------------------------------------- */
-- tp = convert_profile_to_ssam(tpd->sdev, profile);
-+ tp = ssam_tmp_profile_set(tpd->sdev, tp);
- if (tp < 0)
- return tp;
+@@ -399,6 +418,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+ /* Surface Pro 9 */
+ { "MSHW0343", (unsigned long)ssam_node_group_sp9 },
-- return ssam_tmp_profile_set(tpd->sdev, tp);
-+ if (tpd->has_fan) {
-+ tp = convert_profile_to_ssam_fan(tpd->sdev, profile);
-+ if (tp < 0)
-+ return tp;
-+ tp = ssam_fan_profile_set(tpd->sdev, tp);
-+ }
++ /* Surface Pro 10 */
++ { "MSHW0510", (unsigned long)ssam_node_group_sp10 },
+
-+ return tp;
- }
-
- static int surface_platform_profile_probe(struct ssam_device *sdev)
- {
-- struct ssam_tmp_profile_device *tpd;
-+ struct ssam_platform_profile_device *tpd;
-
- tpd = devm_kzalloc(&sdev->dev, sizeof(*tpd), GFP_KERNEL);
- if (!tpd)
-@@ -154,6 +214,8 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
- tpd->handler.profile_get = ssam_platform_profile_get;
- tpd->handler.profile_set = ssam_platform_profile_set;
+ /* Surface Book 2 */
+ { "MSHW0107", (unsigned long)ssam_node_group_gen5 },
-+ tpd->has_fan = device_property_read_bool(&sdev->dev, "has_fan");
-+
- set_bit(PLATFORM_PROFILE_LOW_POWER, tpd->handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED, tpd->handler.choices);
- set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
--
-2.45.1
+2.45.2
-From bf55987e82f9ae913b51a6a269fc1a397930f049 Mon Sep 17 00:00:00 2001
+From 56def3328ab5c84c33a87c062448f1f97e545282 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 25 Jul 2020 17:19:53 +0200
Subject: [PATCH] i2c: acpi: Implement RawBytes read access
@@ -9570,10 +7475,10 @@ Patchset: surface-sam-over-hid
1 file changed, 35 insertions(+)
diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
-index d6037a3286690..a290ebc77aea2 100644
+index 14ae0cfc325e..a3a9f81fb47f 100644
--- a/drivers/i2c/i2c-core-acpi.c
+++ b/drivers/i2c/i2c-core-acpi.c
-@@ -628,6 +628,28 @@ static int acpi_gsb_i2c_write_bytes(struct i2c_client *client,
+@@ -639,6 +639,28 @@ static int acpi_gsb_i2c_write_bytes(struct i2c_client *client,
return (ret == 1) ? 0 : -EIO;
}
@@ -9602,7 +7507,7 @@ index d6037a3286690..a290ebc77aea2 100644
static acpi_status
i2c_acpi_space_handler(u32 function, acpi_physical_address command,
u32 bits, u64 *value64,
-@@ -729,6 +751,19 @@ i2c_acpi_space_handler(u32 function, acpi_physical_address command,
+@@ -740,6 +762,19 @@ i2c_acpi_space_handler(u32 function, acpi_physical_address command,
}
break;
@@ -9623,9 +7528,9 @@ index d6037a3286690..a290ebc77aea2 100644
dev_warn(&adapter->dev, "protocol 0x%02x not supported for client 0x%02x\n",
accessor_type, client->addr);
--
-2.45.1
+2.45.2
-From ebfda7ad73dd90971be10e9d6f59c51c781accbb Mon Sep 17 00:00:00 2001
+From 99ca5a4092ea27b42c256940694e13a8f2abd457 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 13 Feb 2021 16:41:18 +0100
Subject: [PATCH] platform/surface: Add driver for Surface Book 1 dGPU switch
@@ -9648,7 +7553,7 @@ Patchset: surface-sam-over-hid
create mode 100644 drivers/platform/surface/surfacebook1_dgpu_switch.c
diff --git a/drivers/platform/surface/Kconfig b/drivers/platform/surface/Kconfig
-index b629e82af97c0..68656e8f309ed 100644
+index b629e82af97c..68656e8f309e 100644
--- a/drivers/platform/surface/Kconfig
+++ b/drivers/platform/surface/Kconfig
@@ -149,6 +149,13 @@ config SURFACE_AGGREGATOR_TABLET_SWITCH
@@ -9666,7 +7571,7 @@ index b629e82af97c0..68656e8f309ed 100644
tristate "Surface DTX (Detachment System) Driver"
depends on SURFACE_AGGREGATOR
diff --git a/drivers/platform/surface/Makefile b/drivers/platform/surface/Makefile
-index 53344330939bf..7efcd0cdb5329 100644
+index 53344330939b..7efcd0cdb532 100644
--- a/drivers/platform/surface/Makefile
+++ b/drivers/platform/surface/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_SURFACE_AGGREGATOR_CDEV) += surface_aggregator_cdev.o
@@ -9679,7 +7584,7 @@ index 53344330939bf..7efcd0cdb5329 100644
obj-$(CONFIG_SURFACE_HOTPLUG) += surface_hotplug.o
diff --git a/drivers/platform/surface/surfacebook1_dgpu_switch.c b/drivers/platform/surface/surfacebook1_dgpu_switch.c
new file mode 100644
-index 0000000000000..8b816ed8f35c6
+index 000000000000..8b816ed8f35c
--- /dev/null
+++ b/drivers/platform/surface/surfacebook1_dgpu_switch.c
@@ -0,0 +1,162 @@
@@ -9846,9 +7751,9 @@ index 0000000000000..8b816ed8f35c6
+MODULE_DESCRIPTION("Discrete GPU Power-Switch for Surface Book 1");
+MODULE_LICENSE("GPL");
--
-2.45.1
+2.45.2
-From 1e315f586b0b2bc375b96bb538a3be4c0b09d1ea Mon Sep 17 00:00:00 2001
+From 1afbbb29ce7bd15bbf4f812cbc034514bb667b43 Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Tue, 5 Oct 2021 00:05:09 +1100
Subject: [PATCH] Input: soc_button_array - support AMD variant Surface devices
@@ -9870,7 +7775,7 @@ Patchset: surface-button
1 file changed, 8 insertions(+), 25 deletions(-)
diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
-index f6d060377d189..b8603f74eb286 100644
+index f6d060377d18..b8603f74eb28 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -540,8 +540,8 @@ static const struct soc_device_data soc_device_MSHW0028 = {
@@ -9923,9 +7828,9 @@ index f6d060377d189..b8603f74eb286 100644
/*
--
-2.45.1
+2.45.2
-From ac551644781bce2145c901b16779114b273c4d49 Mon Sep 17 00:00:00 2001
+From 888fc8298e984f1cb23ac66e91a02d2e7f174919 Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Tue, 5 Oct 2021 00:22:57 +1100
Subject: [PATCH] platform/surface: surfacepro3_button: don't load on amd
@@ -9946,7 +7851,7 @@ Patchset: surface-button
1 file changed, 6 insertions(+), 24 deletions(-)
diff --git a/drivers/platform/surface/surfacepro3_button.c b/drivers/platform/surface/surfacepro3_button.c
-index 2755601f979cd..4240c98ca2265 100644
+index 2755601f979c..4240c98ca226 100644
--- a/drivers/platform/surface/surfacepro3_button.c
+++ b/drivers/platform/surface/surfacepro3_button.c
@@ -149,7 +149,8 @@ static int surface_button_resume(struct device *dev)
@@ -9995,9 +7900,582 @@ index 2755601f979cd..4240c98ca2265 100644
--
-2.45.1
+2.45.2
+
+From 201768f64dd2128028bed46940ecd9ea85483973 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Sat, 18 Feb 2023 01:02:49 +0100
+Subject: [PATCH] USB: quirks: Add USB_QUIRK_DELAY_INIT for Surface Go 3
+ Type-Cover
+
+The touchpad on the Type-Cover of the Surface Go 3 is sometimes not
+being initialized properly. Apply USB_QUIRK_DELAY_INIT to fix this
+issue.
+
+More specifically, the device in question is a fairly standard modern
+touchpad with pointer and touchpad input modes. During setup, the device
+needs to be switched from pointer- to touchpad-mode (which is done in
+hid-multitouch) to fully utilize it as intended. Unfortunately, however,
+this seems to occasionally fail silently, leaving the device in
+pointer-mode. Applying USB_QUIRK_DELAY_INIT seems to fix this.
+
+Link: https://github.com/linux-surface/linux-surface/issues/1059
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-typecover
+---
+ drivers/usb/core/quirks.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
+index 13171454f959..a83beefd25f3 100644
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -223,6 +223,9 @@ static const struct usb_device_id usb_quirk_list[] = {
+ /* Microsoft Surface Dock Ethernet (RTL8153 GigE) */
+ { USB_DEVICE(0x045e, 0x07c6), .driver_info = USB_QUIRK_NO_LPM },
+
++ /* Microsoft Surface Go 3 Type-Cover */
++ { USB_DEVICE(0x045e, 0x09b5), .driver_info = USB_QUIRK_DELAY_INIT },
++
+ /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
+ { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
+
+--
+2.45.2
+
+From 9ae353f19e719e680d93710ec61aef6edefab6f1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
+Date: Thu, 5 Nov 2020 13:09:45 +0100
+Subject: [PATCH] hid/multitouch: Turn off Type Cover keyboard backlight when
+ suspending
+
+The Type Cover for Microsoft Surface devices supports a special usb
+control request to disable or enable the built-in keyboard backlight.
+On Windows, this request happens when putting the device into suspend or
+resuming it, without it the backlight of the Type Cover will remain
+enabled for some time even though the computer is suspended, which looks
+weird to the user.
+
+So add support for this special usb control request to hid-multitouch,
+which is the driver that's handling the Type Cover.
+
+The reason we have to use a pm_notifier for this instead of the usual
+suspend/resume methods is that those won't get called in case the usb
+device is already autosuspended.
+
+Also, if the device is autosuspended, we have to briefly autoresume it
+in order to send the request. Doing that should be fine, the usb-core
+driver does something similar during suspend inside choose_wakeup().
+
+To make sure we don't send that request to every device but only to
+devices which support it, add a new quirk
+MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER to hid-multitouch. For now this quirk
+is only enabled for the usb id of the Surface Pro 2017 Type Cover, which
+is where I confirmed that it's working.
+
+Patchset: surface-typecover
+---
+ drivers/hid/hid-multitouch.c | 100 ++++++++++++++++++++++++++++++++++-
+ 1 file changed, 98 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 56fc78841f24..a266449065a0 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -34,7 +34,10 @@
+ #include <linux/device.h>
+ #include <linux/hid.h>
+ #include <linux/module.h>
++#include <linux/pm_runtime.h>
+ #include <linux/slab.h>
++#include <linux/suspend.h>
++#include <linux/usb.h>
+ #include <linux/input/mt.h>
+ #include <linux/jiffies.h>
+ #include <linux/string.h>
+@@ -47,6 +50,7 @@ MODULE_DESCRIPTION("HID multitouch panels");
+ MODULE_LICENSE("GPL");
+
+ #include "hid-ids.h"
++#include "usbhid/usbhid.h"
+
+ /* quirks to control the device */
+ #define MT_QUIRK_NOT_SEEN_MEANS_UP BIT(0)
+@@ -72,12 +76,15 @@ MODULE_LICENSE("GPL");
+ #define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
+ #define MT_QUIRK_DISABLE_WAKEUP BIT(21)
+ #define MT_QUIRK_ORIENTATION_INVERT BIT(22)
++#define MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT BIT(23)
+
+ #define MT_INPUTMODE_TOUCHSCREEN 0x02
+ #define MT_INPUTMODE_TOUCHPAD 0x03
+
+ #define MT_BUTTONTYPE_CLICKPAD 0
+
++#define MS_TYPE_COVER_FEATURE_REPORT_USAGE 0xff050086
++
+ enum latency_mode {
+ HID_LATENCY_NORMAL = 0,
+ HID_LATENCY_HIGH = 1,
+@@ -168,6 +175,8 @@ struct mt_device {
+
+ struct list_head applications;
+ struct list_head reports;
++
++ struct notifier_block pm_notifier;
+ };
+
+ static void mt_post_parse_default_settings(struct mt_device *td,
+@@ -212,6 +221,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
+ #define MT_CLS_GOOGLE 0x0111
+ #define MT_CLS_RAZER_BLADE_STEALTH 0x0112
+ #define MT_CLS_SMART_TECH 0x0113
++#define MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER 0x0114
+
+ #define MT_DEFAULT_MAXCONTACT 10
+ #define MT_MAX_MAXCONTACT 250
+@@ -396,6 +406,16 @@ static const struct mt_class mt_classes[] = {
+ MT_QUIRK_CONTACT_CNT_ACCURATE |
+ MT_QUIRK_SEPARATE_APP_REPORT,
+ },
++ { .name = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
++ .quirks = MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT |
++ MT_QUIRK_ALWAYS_VALID |
++ MT_QUIRK_IGNORE_DUPLICATES |
++ MT_QUIRK_HOVERING |
++ MT_QUIRK_CONTACT_CNT_ACCURATE |
++ MT_QUIRK_STICKY_FINGERS |
++ MT_QUIRK_WIN8_PTP_BUTTONS,
++ .export_all_inputs = true
++ },
+ { }
+ };
+
+@@ -1720,6 +1740,69 @@ static void mt_expired_timeout(struct timer_list *t)
+ clear_bit_unlock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
+ }
+
++static void get_type_cover_backlight_field(struct hid_device *hdev,
++ struct hid_field **field)
++{
++ struct hid_report_enum *rep_enum;
++ struct hid_report *rep;
++ struct hid_field *cur_field;
++ int i, j;
++
++ rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
++ list_for_each_entry(rep, &rep_enum->report_list, list) {
++ for (i = 0; i < rep->maxfield; i++) {
++ cur_field = rep->field[i];
++
++ for (j = 0; j < cur_field->maxusage; j++) {
++ if (cur_field->usage[j].hid
++ == MS_TYPE_COVER_FEATURE_REPORT_USAGE) {
++ *field = cur_field;
++ return;
++ }
++ }
++ }
++ }
++}
++
++static void update_keyboard_backlight(struct hid_device *hdev, bool enabled)
++{
++ struct usb_device *udev = hid_to_usb_dev(hdev);
++ struct hid_field *field = NULL;
++
++ /* Wake up the device in case it's already suspended */
++ pm_runtime_get_sync(&udev->dev);
++
++ get_type_cover_backlight_field(hdev, &field);
++ if (!field) {
++ hid_err(hdev, "couldn't find backlight field\n");
++ goto out;
++ }
++
++ field->value[field->index] = enabled ? 0x01ff00ff : 0x00ff00ff;
++ hid_hw_request(hdev, field->report, HID_REQ_SET_REPORT);
++
++out:
++ pm_runtime_put_sync(&udev->dev);
++}
++
++static int mt_pm_notifier(struct notifier_block *notifier,
++ unsigned long pm_event,
++ void *unused)
++{
++ struct mt_device *td =
++ container_of(notifier, struct mt_device, pm_notifier);
++ struct hid_device *hdev = td->hdev;
++
++ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT) {
++ if (pm_event == PM_SUSPEND_PREPARE)
++ update_keyboard_backlight(hdev, 0);
++ else if (pm_event == PM_POST_SUSPEND)
++ update_keyboard_backlight(hdev, 1);
++ }
++
++ return NOTIFY_DONE;
++}
++
+ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
+ {
+ int ret, i;
+@@ -1743,6 +1826,9 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
+ td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
+ hid_set_drvdata(hdev, td);
+
++ td->pm_notifier.notifier_call = mt_pm_notifier;
++ register_pm_notifier(&td->pm_notifier);
++
+ INIT_LIST_HEAD(&td->applications);
+ INIT_LIST_HEAD(&td->reports);
+
+@@ -1781,15 +1867,19 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
+ timer_setup(&td->release_timer, mt_expired_timeout, 0);
+
+ ret = hid_parse(hdev);
+- if (ret != 0)
++ if (ret != 0) {
++ unregister_pm_notifier(&td->pm_notifier);
+ return ret;
++ }
+
+ if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
+ mt_fix_const_fields(hdev, HID_DG_CONTACTID);
+
+ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
+- if (ret)
++ if (ret) {
++ unregister_pm_notifier(&td->pm_notifier);
+ return ret;
++ }
+
+ ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
+ if (ret)
+@@ -1839,6 +1929,7 @@ static void mt_remove(struct hid_device *hdev)
+ {
+ struct mt_device *td = hid_get_drvdata(hdev);
+
++ unregister_pm_notifier(&td->pm_notifier);
+ del_timer_sync(&td->release_timer);
+
+ sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
+@@ -2235,6 +2326,11 @@ static const struct hid_device_id mt_devices[] = {
+ MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
+ USB_DEVICE_ID_XIROKU_CSR2) },
+
++ /* Microsoft Surface type cover */
++ { .driver_data = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
++ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY,
++ USB_VENDOR_ID_MICROSOFT, 0x09c0) },
++
+ /* Google MT devices */
+ { .driver_data = MT_CLS_GOOGLE,
+ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
+--
+2.45.2
+
+From 922102cc310758a2655f9bb3eb9a413bc551b1a7 Mon Sep 17 00:00:00 2001
+From: PJungkamp <p.jungkamp@gmail.com>
+Date: Fri, 25 Feb 2022 12:04:25 +0100
+Subject: [PATCH] hid/multitouch: Add support for surface pro type cover tablet
+ switch
+
+The Surface Pro Type Cover has several non standard HID usages in it's
+hid report descriptor.
+I noticed that, upon folding the typecover back, a vendor specific range
+of 4 32 bit integer hid usages is transmitted.
+Only the first byte of the message seems to convey reliable information
+about the keyboard state.
+
+0x22 => Normal (keys enabled)
+0x33 => Folded back (keys disabled)
+0x53 => Rotated left/right side up (keys disabled)
+0x13 => Cover closed (keys disabled)
+0x43 => Folded back and Tablet upside down (keys disabled)
+This list may not be exhaustive.
+
+The tablet mode switch will be disabled for a value of 0x22 and enabled
+on any other value.
+
+Patchset: surface-typecover
+---
+ drivers/hid/hid-multitouch.c | 148 +++++++++++++++++++++++++++++------
+ 1 file changed, 122 insertions(+), 26 deletions(-)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index a266449065a0..060c706e936a 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -77,6 +77,7 @@ MODULE_LICENSE("GPL");
+ #define MT_QUIRK_DISABLE_WAKEUP BIT(21)
+ #define MT_QUIRK_ORIENTATION_INVERT BIT(22)
+ #define MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT BIT(23)
++#define MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH BIT(24)
+
+ #define MT_INPUTMODE_TOUCHSCREEN 0x02
+ #define MT_INPUTMODE_TOUCHPAD 0x03
+@@ -84,6 +85,8 @@ MODULE_LICENSE("GPL");
+ #define MT_BUTTONTYPE_CLICKPAD 0
+
+ #define MS_TYPE_COVER_FEATURE_REPORT_USAGE 0xff050086
++#define MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE 0xff050072
++#define MS_TYPE_COVER_APPLICATION 0xff050050
+
+ enum latency_mode {
+ HID_LATENCY_NORMAL = 0,
+@@ -408,6 +411,7 @@ static const struct mt_class mt_classes[] = {
+ },
+ { .name = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
+ .quirks = MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT |
++ MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH |
+ MT_QUIRK_ALWAYS_VALID |
+ MT_QUIRK_IGNORE_DUPLICATES |
+ MT_QUIRK_HOVERING |
+@@ -1389,6 +1393,9 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ field->application != HID_CP_CONSUMER_CONTROL &&
+ field->application != HID_GD_WIRELESS_RADIO_CTLS &&
+ field->application != HID_GD_SYSTEM_MULTIAXIS &&
++ !(field->application == MS_TYPE_COVER_APPLICATION &&
++ application->quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH &&
++ usage->hid == MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE) &&
+ !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
+ application->quirks & MT_QUIRK_ASUS_CUSTOM_UP))
+ return -1;
+@@ -1416,6 +1423,21 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ return 1;
+ }
+
++ /*
++ * The Microsoft Surface Pro Typecover has a non-standard HID
++ * tablet mode switch on a vendor specific usage page with vendor
++ * specific usage.
++ */
++ if (field->application == MS_TYPE_COVER_APPLICATION &&
++ application->quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH &&
++ usage->hid == MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE) {
++ usage->type = EV_SW;
++ usage->code = SW_TABLET_MODE;
++ *max = SW_MAX;
++ *bit = hi->input->swbit;
++ return 1;
++ }
++
+ if (rdata->is_mt_collection)
+ return mt_touch_input_mapping(hdev, hi, field, usage, bit, max,
+ application);
+@@ -1437,6 +1459,7 @@ static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
+ {
+ struct mt_device *td = hid_get_drvdata(hdev);
+ struct mt_report_data *rdata;
++ struct input_dev *input;
+
+ rdata = mt_find_report_data(td, field->report);
+ if (rdata && rdata->is_mt_collection) {
+@@ -1444,6 +1467,19 @@ static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
+ return -1;
+ }
+
++ /*
++ * We own an input device which acts as a tablet mode switch for
++ * the Surface Pro Typecover.
++ */
++ if (field->application == MS_TYPE_COVER_APPLICATION &&
++ rdata->application->quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH &&
++ usage->hid == MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE) {
++ input = hi->input;
++ input_set_capability(input, EV_SW, SW_TABLET_MODE);
++ input_report_switch(input, SW_TABLET_MODE, 0);
++ return -1;
++ }
++
+ /* let hid-core decide for the others */
+ return 0;
+ }
+@@ -1453,11 +1489,21 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,
+ {
+ struct mt_device *td = hid_get_drvdata(hid);
+ struct mt_report_data *rdata;
++ struct input_dev *input;
+
+ rdata = mt_find_report_data(td, field->report);
+ if (rdata && rdata->is_mt_collection)
+ return mt_touch_event(hid, field, usage, value);
+
++ if (field->application == MS_TYPE_COVER_APPLICATION &&
++ rdata->application->quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH &&
++ usage->hid == MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE) {
++ input = field->hidinput->input;
++ input_report_switch(input, SW_TABLET_MODE, (value & 0xFF) != 0x22);
++ input_sync(input);
++ return 1;
++ }
++
+ return 0;
+ }
+
+@@ -1610,6 +1656,42 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app)
+ app->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
+ }
+
++static int get_type_cover_field(struct hid_report_enum *rep_enum,
++ struct hid_field **field, int usage)
++{
++ struct hid_report *rep;
++ struct hid_field *cur_field;
++ int i, j;
++
++ list_for_each_entry(rep, &rep_enum->report_list, list) {
++ for (i = 0; i < rep->maxfield; i++) {
++ cur_field = rep->field[i];
++ if (cur_field->application != MS_TYPE_COVER_APPLICATION)
++ continue;
++ for (j = 0; j < cur_field->maxusage; j++) {
++ if (cur_field->usage[j].hid == usage) {
++ *field = cur_field;
++ return true;
++ }
++ }
++ }
++ }
++ return false;
++}
++
++static void request_type_cover_tablet_mode_switch(struct hid_device *hdev)
++{
++ struct hid_field *field;
++
++ if (get_type_cover_field(&hdev->report_enum[HID_INPUT_REPORT],
++ &field,
++ MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE)) {
++ hid_hw_request(hdev, field->report, HID_REQ_GET_REPORT);
++ } else {
++ hid_err(hdev, "couldn't find tablet mode field\n");
++ }
++}
++
+ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
+ {
+ struct mt_device *td = hid_get_drvdata(hdev);
+@@ -1658,6 +1740,13 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
+ /* force BTN_STYLUS to allow tablet matching in udev */
+ __set_bit(BTN_STYLUS, hi->input->keybit);
+ break;
++ case MS_TYPE_COVER_APPLICATION:
++ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH) {
++ suffix = "Tablet Mode Switch";
++ request_type_cover_tablet_mode_switch(hdev);
++ break;
++ }
++ fallthrough;
+ default:
+ suffix = "UNKNOWN";
+ break;
+@@ -1740,30 +1829,6 @@ static void mt_expired_timeout(struct timer_list *t)
+ clear_bit_unlock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
+ }
+
+-static void get_type_cover_backlight_field(struct hid_device *hdev,
+- struct hid_field **field)
+-{
+- struct hid_report_enum *rep_enum;
+- struct hid_report *rep;
+- struct hid_field *cur_field;
+- int i, j;
+-
+- rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
+- list_for_each_entry(rep, &rep_enum->report_list, list) {
+- for (i = 0; i < rep->maxfield; i++) {
+- cur_field = rep->field[i];
+-
+- for (j = 0; j < cur_field->maxusage; j++) {
+- if (cur_field->usage[j].hid
+- == MS_TYPE_COVER_FEATURE_REPORT_USAGE) {
+- *field = cur_field;
+- return;
+- }
+- }
+- }
+- }
+-}
+-
+ static void update_keyboard_backlight(struct hid_device *hdev, bool enabled)
+ {
+ struct usb_device *udev = hid_to_usb_dev(hdev);
+@@ -1772,8 +1837,9 @@ static void update_keyboard_backlight(struct hid_device *hdev, bool enabled)
+ /* Wake up the device in case it's already suspended */
+ pm_runtime_get_sync(&udev->dev);
+
+- get_type_cover_backlight_field(hdev, &field);
+- if (!field) {
++ if (!get_type_cover_field(&hdev->report_enum[HID_FEATURE_REPORT],
++ &field,
++ MS_TYPE_COVER_FEATURE_REPORT_USAGE)) {
+ hid_err(hdev, "couldn't find backlight field\n");
+ goto out;
+ }
+@@ -1907,13 +1973,24 @@ static int mt_suspend(struct hid_device *hdev, pm_message_t state)
+
+ static int mt_reset_resume(struct hid_device *hdev)
+ {
++ struct mt_device *td = hid_get_drvdata(hdev);
++
+ mt_release_contacts(hdev);
+ mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
++
++ /* Request an update on the typecover folding state on resume
++ * after reset.
++ */
++ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH)
++ request_type_cover_tablet_mode_switch(hdev);
++
+ return 0;
+ }
+
+ static int mt_resume(struct hid_device *hdev)
+ {
++ struct mt_device *td = hid_get_drvdata(hdev);
++
+ /* Some Elan legacy devices require SET_IDLE to be set on resume.
+ * It should be safe to send it to other devices too.
+ * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
+@@ -1922,12 +1999,31 @@ static int mt_resume(struct hid_device *hdev)
+
+ mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
+
++ /* Request an update on the typecover folding state on resume. */
++ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH)
++ request_type_cover_tablet_mode_switch(hdev);
++
+ return 0;
+ }
+
+ static void mt_remove(struct hid_device *hdev)
+ {
+ struct mt_device *td = hid_get_drvdata(hdev);
++ struct hid_field *field;
++ struct input_dev *input;
++
++ /* Reset tablet mode switch on disconnect. */
++ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH) {
++ if (get_type_cover_field(&hdev->report_enum[HID_INPUT_REPORT],
++ &field,
++ MS_TYPE_COVER_TABLET_MODE_SWITCH_USAGE)) {
++ input = field->hidinput->input;
++ input_report_switch(input, SW_TABLET_MODE, 0);
++ input_sync(input);
++ } else {
++ hid_err(hdev, "couldn't find tablet mode field\n");
++ }
++ }
+
+ unregister_pm_notifier(&td->pm_notifier);
+ del_timer_sync(&td->release_timer);
+--
+2.45.2
-From 9e0b83c9668c3d0e8e5ce9c254697056940a205d Mon Sep 17 00:00:00 2001
+From dc75889e49675c868d33320a996c33d183fee94a Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 19 Feb 2023 22:12:24 +0100
Subject: [PATCH] PCI: Add quirk to prevent calling shutdown mehtod
@@ -10022,7 +8500,7 @@ Patchset: surface-shutdown
3 files changed, 40 insertions(+)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
-index af2996d0d17ff..3ce0fb61257dc 100644
+index af2996d0d17f..3ce0fb61257d 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -505,6 +505,9 @@ static void pci_device_shutdown(struct device *dev)
@@ -10036,13 +8514,13 @@ index af2996d0d17ff..3ce0fb61257dc 100644
if (drv && drv->shutdown)
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index eff7f5df08e27..d1cb4ff3ebc57 100644
+index 568410e64ce6..f59d8fb36335 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -6253,3 +6253,39 @@ static void pci_fixup_d3cold_delay_1sec(struct pci_dev *pdev)
- pdev->d3cold_delay = 1000;
- }
- DECLARE_PCI_FIXUP_FINAL(0x5555, 0x0004, pci_fixup_d3cold_delay_1sec);
+@@ -6273,3 +6273,39 @@ static void pci_mask_replay_timer_timeout(struct pci_dev *pdev)
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9750, pci_mask_replay_timer_timeout);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9755, pci_mask_replay_timer_timeout);
+ #endif
+
+static const struct dmi_system_id no_shutdown_dmi_table[] = {
+ /*
@@ -10080,7 +8558,7 @@ index eff7f5df08e27..d1cb4ff3ebc57 100644
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x466d, quirk_no_shutdown); // Thunderbolt 4 NHI
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x46a8, quirk_no_shutdown); // GPU
diff --git a/include/linux/pci.h b/include/linux/pci.h
-index 16493426a04ff..0eb821624056d 100644
+index cafc5ab1cbcb..64bb5aca2c13 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -465,6 +465,7 @@ struct pci_dev {
@@ -10092,9 +8570,9 @@ index 16493426a04ff..0eb821624056d 100644
atomic_t enable_cnt; /* pci_enable_device has been called */
--
-2.45.1
+2.45.2
-From 739ab84095d8ea8ec8fe05447706c6eb2ffa3f35 Mon Sep 17 00:00:00 2001
+From 41732ed4458eb3b08b4a658f1cd617d83c90cec6 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 12 Mar 2023 01:41:57 +0100
Subject: [PATCH] platform/surface: gpe: Add support for Surface Pro 9
@@ -10108,7 +8586,7 @@ Patchset: surface-gpe
1 file changed, 17 insertions(+)
diff --git a/drivers/platform/surface/surface_gpe.c b/drivers/platform/surface/surface_gpe.c
-index 62fd4004db31a..103fc4468262a 100644
+index 62fd4004db31..103fc4468262 100644
--- a/drivers/platform/surface/surface_gpe.c
+++ b/drivers/platform/surface/surface_gpe.c
@@ -41,6 +41,11 @@ static const struct property_entry lid_device_props_l4F[] = {
@@ -10143,9 +8621,9 @@ index 62fd4004db31a..103fc4468262a 100644
.ident = "Surface Book 1",
.matches = {
--
-2.45.1
+2.45.2
-From 44ed44fe421e484bcf2de223d7e8077302635772 Mon Sep 17 00:00:00 2001
+From 2d145df171e42d90ac54b0bdc42e77337e99679a Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Sun, 10 Oct 2021 20:56:57 +0200
Subject: [PATCH] ACPI: delay enumeration of devices with a _DEP pointing to an
@@ -10205,10 +8683,10 @@ Patchset: cameras
1 file changed, 3 insertions(+)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index d1464324de951..5d865a34dd9db 100644
+index 503773707e01..a292a20c4315 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
-@@ -2181,6 +2181,9 @@ static acpi_status acpi_bus_check_add_2(acpi_handle handle, u32 lvl_not_used,
+@@ -2176,6 +2176,9 @@ static acpi_status acpi_bus_check_add_2(acpi_handle handle, u32 lvl_not_used,
static void acpi_default_enumeration(struct acpi_device *device)
{
@@ -10219,9 +8697,9 @@ index d1464324de951..5d865a34dd9db 100644
* Do not enumerate devices with enumeration_by_parent flag set as
* they will be enumerated by their respective parents.
--
-2.45.1
+2.45.2
-From d9d5afcea9880a957d6a8d975a122b4f54ec28c2 Mon Sep 17 00:00:00 2001
+From f0e749b5b8f19dca95eaf7b24c925f7684669993 Mon Sep 17 00:00:00 2001
From: zouxiaoh <xiaohong.zou@intel.com>
Date: Fri, 25 Jun 2021 08:52:59 +0800
Subject: [PATCH] iommu: intel-ipu: use IOMMU passthrough mode for Intel IPUs
@@ -10247,10 +8725,10 @@ Patchset: cameras
1 file changed, 30 insertions(+)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
-index 61bc54299a591..a61af0f4e9fce 100644
+index 8d95579436a9..cbfb59ed5985 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
-@@ -44,6 +44,13 @@
+@@ -45,6 +45,13 @@
((pdev)->vendor == PCI_VENDOR_ID_INTEL && (pdev)->device == 0x34E4) \
)
@@ -10264,7 +8742,7 @@ index 61bc54299a591..a61af0f4e9fce 100644
#define IOAPIC_RANGE_START (0xfee00000)
#define IOAPIC_RANGE_END (0xfeefffff)
#define IOVA_START_ADDR (0x1000)
-@@ -227,12 +234,14 @@ int intel_iommu_enabled = 0;
+@@ -223,12 +230,14 @@ int intel_iommu_enabled = 0;
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
static int dmar_map_ipts = 1;
@@ -10279,7 +8757,7 @@ index 61bc54299a591..a61af0f4e9fce 100644
#define IDENTMAP_IPTS 16
const struct iommu_ops intel_iommu_ops;
-@@ -2409,6 +2418,9 @@ static int device_def_domain_type(struct device *dev)
+@@ -2203,6 +2212,9 @@ static int device_def_domain_type(struct device *dev)
if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
return IOMMU_DOMAIN_IDENTITY;
@@ -10289,7 +8767,7 @@ index 61bc54299a591..a61af0f4e9fce 100644
if ((iommu_identity_mapping & IDENTMAP_IPTS) && IS_IPTS(pdev))
return IOMMU_DOMAIN_IDENTITY;
}
-@@ -2711,6 +2723,9 @@ static int __init init_dmars(void)
+@@ -2505,6 +2517,9 @@ static int __init init_dmars(void)
iommu_set_root_entry(iommu);
}
@@ -10299,7 +8777,7 @@ index 61bc54299a591..a61af0f4e9fce 100644
if (!dmar_map_ipts)
iommu_identity_mapping |= IDENTMAP_IPTS;
-@@ -4884,6 +4899,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
+@@ -4630,6 +4645,18 @@ static void quirk_iommu_igfx(struct pci_dev *dev)
disable_igfx_iommu = 1;
}
@@ -10318,7 +8796,7 @@ index 61bc54299a591..a61af0f4e9fce 100644
static void quirk_iommu_ipts(struct pci_dev *dev)
{
if (!IS_IPTS(dev))
-@@ -4931,6 +4958,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
+@@ -4677,6 +4704,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1632, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163A, quirk_iommu_igfx);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
@@ -10329,9 +8807,9 @@ index 61bc54299a591..a61af0f4e9fce 100644
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9D3E, quirk_iommu_ipts);
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x34E4, quirk_iommu_ipts);
--
-2.45.1
+2.45.2
-From bbf2fb14fae6c6bda12e156ff9d027913ab7860f Mon Sep 17 00:00:00 2001
+From 197059f84ca0575efb65a4667023e9e14c53fe87 Mon Sep 17 00:00:00 2001
From: Daniel Scally <djrscally@gmail.com>
Date: Sun, 10 Oct 2021 20:57:02 +0200
Subject: [PATCH] platform/x86: int3472: Enable I2c daisy chain
@@ -10348,7 +8826,7 @@ Patchset: cameras
1 file changed, 7 insertions(+)
diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c
-index 1e107fd49f828..e3e1696e7f0ee 100644
+index 1e107fd49f82..e3e1696e7f0e 100644
--- a/drivers/platform/x86/intel/int3472/tps68470.c
+++ b/drivers/platform/x86/intel/int3472/tps68470.c
@@ -46,6 +46,13 @@ static int tps68470_chip_init(struct device *dev, struct regmap *regmap)
@@ -10366,9 +8844,9 @@ index 1e107fd49f828..e3e1696e7f0ee 100644
return 0;
--
-2.45.1
+2.45.2
-From bc2732708fc2a71f7fe3808aa84cc6eabbdd1285 Mon Sep 17 00:00:00 2001
+From cff4d571011727ee47c29f21c9b1d255ca4efe8e Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Thu, 2 Mar 2023 12:59:39 +0000
Subject: [PATCH] platform/x86: int3472: Remap reset GPIO for INT347E
@@ -10390,7 +8868,7 @@ Patchset: cameras
1 file changed, 14 insertions(+)
diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
-index 07b302e093407..1d3097bc7e487 100644
+index 07b302e09340..1d3097bc7e48 100644
--- a/drivers/platform/x86/intel/int3472/discrete.c
+++ b/drivers/platform/x86/intel/int3472/discrete.c
@@ -83,12 +83,26 @@ static int skl_int3472_map_gpio_to_sensor(struct int3472_discrete_device *int347
@@ -10421,9 +8899,9 @@ index 07b302e093407..1d3097bc7e487 100644
agpio, func, polarity);
if (ret)
--
-2.45.1
+2.45.2
-From 0180b848e145642574d2a91175f92050dcec1ec7 Mon Sep 17 00:00:00 2001
+From 31cab2b99a833eab39602f61e3f3f801884f8980 Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Tue, 21 Mar 2023 13:45:26 +0000
Subject: [PATCH] media: i2c: Clarify that gain is Analogue gain in OV7251
@@ -10438,7 +8916,7 @@ Patchset: cameras
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c
-index 30f61e04ecaf5..9c1292ca85522 100644
+index 30f61e04ecaf..9c1292ca8552 100644
--- a/drivers/media/i2c/ov7251.c
+++ b/drivers/media/i2c/ov7251.c
@@ -1051,7 +1051,7 @@ static int ov7251_s_ctrl(struct v4l2_ctrl *ctrl)
@@ -10460,9 +8938,9 @@ index 30f61e04ecaf5..9c1292ca85522 100644
V4L2_CID_TEST_PATTERN,
ARRAY_SIZE(ov7251_test_pattern_menu) - 1,
--
-2.45.1
+2.45.2
-From 67553f37af4ea73f824108a08666b537c68972e5 Mon Sep 17 00:00:00 2001
+From b17d182f347660c7c2e873d0a2e21b57ce44858c Mon Sep 17 00:00:00 2001
From: Daniel Scally <dan.scally@ideasonboard.com>
Date: Wed, 22 Mar 2023 11:01:42 +0000
Subject: [PATCH] media: v4l2-core: Acquire privacy led in
@@ -10481,10 +8959,10 @@ Patchset: cameras
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c
-index 3ec323bd528b1..b55570a0142cb 100644
+index c477723c07bf..83413048eb35 100644
--- a/drivers/media/v4l2-core/v4l2-async.c
+++ b/drivers/media/v4l2-core/v4l2-async.c
-@@ -796,6 +796,10 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd)
+@@ -795,6 +795,10 @@ int __v4l2_async_register_subdev(struct v4l2_subdev *sd, struct module *module)
INIT_LIST_HEAD(&sd->asc_list);
@@ -10496,7 +8974,7 @@ index 3ec323bd528b1..b55570a0142cb 100644
* No reference taken. The reference is held by the device (struct
* v4l2_subdev.dev), and async sub-device does not exist independently
diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
-index 89c7192148dfb..44eca113e7727 100644
+index 89c7192148df..44eca113e772 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -1219,10 +1219,6 @@ int v4l2_async_register_subdev_sensor(struct v4l2_subdev *sd)
@@ -10511,9 +8989,9 @@ index 89c7192148dfb..44eca113e7727 100644
if (ret < 0)
goto out_cleanup;
--
-2.45.1
+2.45.2
-From 82dff76b0fc0e6d8fec20339edcb52fcb3eb1fac Mon Sep 17 00:00:00 2001
+From c51c33aa1cdbea15c1b493b300f66408d8306bd9 Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:16 +0800
Subject: [PATCH] platform: x86: int3472: Add MFD cell for tps68470 LED
@@ -10529,7 +9007,7 @@ Patchset: cameras
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c
-index e3e1696e7f0ee..423dc555093f7 100644
+index e3e1696e7f0e..423dc555093f 100644
--- a/drivers/platform/x86/intel/int3472/tps68470.c
+++ b/drivers/platform/x86/intel/int3472/tps68470.c
@@ -17,7 +17,7 @@
@@ -10552,9 +9030,9 @@ index e3e1696e7f0ee..423dc555093f7 100644
for (i = 0; i < board_data->n_gpiod_lookups; i++)
gpiod_add_lookup_table(board_data->tps68470_gpio_lookup_tables[i]);
--
-2.45.1
+2.45.2
-From ac5b449b3e7da53dfff6ab59dc32d9714eb2f106 Mon Sep 17 00:00:00 2001
+From b37b24f5e18fd586452ec4a7cc978c3360074e42 Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:17 +0800
Subject: [PATCH] include: mfd: tps68470: Add masks for LEDA and LEDB
@@ -10572,7 +9050,7 @@ Patchset: cameras
1 file changed, 5 insertions(+)
diff --git a/include/linux/mfd/tps68470.h b/include/linux/mfd/tps68470.h
-index 7807fa329db00..2d2abb25b944f 100644
+index 7807fa329db0..2d2abb25b944 100644
--- a/include/linux/mfd/tps68470.h
+++ b/include/linux/mfd/tps68470.h
@@ -34,6 +34,7 @@
@@ -10593,9 +9071,9 @@ index 7807fa329db00..2d2abb25b944f 100644
+
#endif /* __LINUX_MFD_TPS68470_H */
--
-2.45.1
+2.45.2
-From 3bdaa0c3e0b7dfa3b441e7d19d3f08ff3708e354 Mon Sep 17 00:00:00 2001
+From 8ef5b1010e49d11964f2dd7da3c3271f5f9bf503 Mon Sep 17 00:00:00 2001
From: Kate Hsuan <hpa@redhat.com>
Date: Tue, 21 Mar 2023 23:37:18 +0800
Subject: [PATCH] leds: tps68470: Add LED control for tps68470
@@ -10618,7 +9096,7 @@ Patchset: cameras
create mode 100644 drivers/leds/leds-tps68470.c
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
-index 05e6af88b88cd..c120eb0b5aa8e 100644
+index 05e6af88b88c..c120eb0b5aa8 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -909,6 +909,18 @@ config LEDS_TPS6105X
@@ -10641,7 +9119,7 @@ index 05e6af88b88cd..c120eb0b5aa8e 100644
tristate "LED support for SGI Octane machines"
depends on LEDS_CLASS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
-index effdfc6f1e951..6ce609b2cdac6 100644
+index effdfc6f1e95..6ce609b2cdac 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -86,6 +86,7 @@ obj-$(CONFIG_LEDS_TCA6507) += leds-tca6507.o
@@ -10654,7 +9132,7 @@ index effdfc6f1e951..6ce609b2cdac6 100644
obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o
diff --git a/drivers/leds/leds-tps68470.c b/drivers/leds/leds-tps68470.c
new file mode 100644
-index 0000000000000..35aeb5db89c8f
+index 000000000000..35aeb5db89c8
--- /dev/null
+++ b/drivers/leds/leds-tps68470.c
@@ -0,0 +1,185 @@
@@ -10844,9 +9322,9 @@ index 0000000000000..35aeb5db89c8f
+MODULE_DESCRIPTION("LED driver for TPS68470 PMIC");
+MODULE_LICENSE("GPL v2");
--
-2.45.1
+2.45.2
-From 05501de0dab9bc531918dcf2b8aa7e679760fd7b Mon Sep 17 00:00:00 2001
+From ca688e057ec8149ccd01d2c7876b707aa33bdbc8 Mon Sep 17 00:00:00 2001
From: mojyack <mojyack@gmail.com>
Date: Sat, 3 Feb 2024 12:59:53 +0900
Subject: [PATCH] media: staging: ipu3-imgu: Fix multiple calls of s_stream on
@@ -10860,7 +9338,7 @@ Patchset: cameras
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
-index 3df58eb3e8822..81aff2d5d8988 100644
+index 3df58eb3e882..81aff2d5d898 100644
--- a/drivers/staging/media/ipu3/ipu3-v4l2.c
+++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
@@ -538,18 +538,18 @@ static void imgu_vb2_stop_streaming(struct vb2_queue *vq)
@@ -10891,9 +9369,9 @@ index 3df58eb3e8822..81aff2d5d8988 100644
r = imgu_s_stream(imgu, false);
if (!r)
--
-2.45.1
+2.45.2
-From c85328d7df3de31a574e42f66192c6a944f48bde Mon Sep 17 00:00:00 2001
+From d267b727836905eaefc1541eb743479338827db5 Mon Sep 17 00:00:00 2001
From: mojyack <mojyack@gmail.com>
Date: Tue, 26 Mar 2024 05:55:44 +0900
Subject: [PATCH] media: i2c: dw9719: fix probe error on surface go 2
@@ -10909,7 +9387,7 @@ Patchset: cameras
1 file changed, 3 insertions(+)
diff --git a/drivers/media/i2c/dw9719.c b/drivers/media/i2c/dw9719.c
-index c626ed845928c..0094cfda57ea8 100644
+index c626ed845928..0094cfda57ea 100644
--- a/drivers/media/i2c/dw9719.c
+++ b/drivers/media/i2c/dw9719.c
@@ -82,6 +82,9 @@ static int dw9719_power_up(struct dw9719_device *dw9719)
@@ -10923,9 +9401,9 @@ index c626ed845928c..0094cfda57ea8 100644
cci_write(dw9719->regmap, DW9719_CONTROL, 1, &ret);
--
-2.45.1
+2.45.2
-From e0b584d3054d7c69d2e1b4f2ca54e42b79ee5446 Mon Sep 17 00:00:00 2001
+From 68bfb06084548d1f7d23fc2c5e7c4b70262078b3 Mon Sep 17 00:00:00 2001
From: Sachi King <nakato@nakato.io>
Date: Sat, 29 May 2021 17:47:38 +1000
Subject: [PATCH] ACPI: Add quirk for Surface Laptop 4 AMD missing irq 7
@@ -10948,7 +9426,7 @@ Patchset: amd-gpio
1 file changed, 17 insertions(+)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index 4bf82dbd2a6b5..7a8cb090c6568 100644
+index 4bf82dbd2a6b..7a8cb090c656 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -22,6 +22,7 @@
@@ -10990,9 +9468,9 @@ index 4bf82dbd2a6b5..7a8cb090c6568 100644
mp_config_acpi_legacy_irqs();
--
-2.45.1
+2.45.2
-From dafa7b45eecb1e02dc857158566d2fb3087fa71f Mon Sep 17 00:00:00 2001
+From f72f4d6bc2d6e1f1ec68422cffaed5e77820c6c5 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Thu, 3 Jun 2021 14:04:26 +0200
Subject: [PATCH] ACPI: Add AMD 13" Surface Laptop 4 model to irq 7 override
@@ -11007,7 +9485,7 @@ Patchset: amd-gpio
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index 7a8cb090c6568..0faafc323e673 100644
+index 7a8cb090c656..0faafc323e67 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1219,12 +1219,19 @@ static void __init mp_config_acpi_legacy_irqs(void)
@@ -11032,9 +9510,9 @@ index 7a8cb090c6568..0faafc323e673 100644
};
--
-2.45.1
+2.45.2
-From e3e62473f885786f1b57421f5fed86ac5ba402ac Mon Sep 17 00:00:00 2001
+From ca8843e551ab3528c958bc8efaa51356dbdc23de Mon Sep 17 00:00:00 2001
From: "Bart Groeneveld | GPX Solutions B.V" <bart@gpxbv.nl>
Date: Mon, 5 Dec 2022 16:08:46 +0100
Subject: [PATCH] acpi: allow usage of acpi_tad on HW-reduced platforms
@@ -11057,7 +9535,7 @@ Patchset: rtc
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/drivers/acpi/acpi_tad.c b/drivers/acpi/acpi_tad.c
-index 1d670dbe4d1dd..71c9e375ca1ca 100644
+index 1d670dbe4d1d..71c9e375ca1c 100644
--- a/drivers/acpi/acpi_tad.c
+++ b/drivers/acpi/acpi_tad.c
@@ -432,6 +432,14 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
@@ -11142,5 +9620,5 @@ index 1d670dbe4d1dd..71c9e375ca1ca 100644
ret = sysfs_create_group(&dev->kobj, &acpi_tad_dc_attr_group);
if (ret)
--
-2.45.1
+2.45.2
diff --git a/SOURCES/patch-6.9-redhat.patch b/SOURCES/patch-6.10-redhat.patch
index d311b03..108e8a4 100644
--- a/SOURCES/patch-6.9-redhat.patch
+++ b/SOURCES/patch-6.10-redhat.patch
@@ -1,10 +1,11 @@
- Kconfig | 2 +
- Kconfig.redhat | 17 +++
Makefile | 12 ++
+ arch/arm/Kconfig | 4 +-
+ arch/arm64/Kconfig | 2 +-
arch/s390/include/asm/ipl.h | 1 +
arch/s390/kernel/ipl.c | 5 +
arch/s390/kernel/setup.c | 4 +
arch/x86/kernel/setup.c | 22 ++-
+ certs/extract-cert.c | 25 +---
crypto/drbg.c | 18 ++-
crypto/rng.c | 149 ++++++++++++++++++---
drivers/acpi/apei/hest.c | 8 ++
@@ -21,6 +22,7 @@
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 +++
drivers/input/rmi4/rmi_driver.c | 124 ++++++++++-------
drivers/iommu/iommu.c | 22 +++
+ drivers/media/pci/intel/ipu-bridge.c | 40 ++++--
drivers/pci/quirks.c | 24 ++++
drivers/scsi/sd.c | 10 ++
drivers/usb/core/hub.c | 7 +
@@ -31,48 +33,18 @@
include/linux/rmi.h | 1 +
include/linux/security.h | 5 +
kernel/module/signing.c | 9 +-
+ net/bluetooth/hci_core.c | 7 -
+ net/bluetooth/hci_event.c | 5 +-
+ scripts/sign-file.c | 29 +---
scripts/tags.sh | 2 +
security/integrity/platform_certs/load_uefi.c | 6 +-
security/lockdown/Kconfig | 13 ++
security/lockdown/lockdown.c | 1 +
security/security.c | 12 ++
- 38 files changed, 762 insertions(+), 192 deletions(-)
+ 43 files changed, 782 insertions(+), 265 deletions(-)
-diff --git a/Kconfig b/Kconfig
-index 745bc773f567..f57ff40109d7 100644
---- a/Kconfig
-+++ b/Kconfig
-@@ -30,3 +30,5 @@ source "lib/Kconfig"
- source "lib/Kconfig.debug"
-
- source "Documentation/Kconfig"
-+
-+source "Kconfig.redhat"
-diff --git a/Kconfig.redhat b/Kconfig.redhat
-new file mode 100644
-index 000000000000..733a26bd887a
---- /dev/null
-+++ b/Kconfig.redhat
-@@ -0,0 +1,17 @@
-+# SPDX-License-Identifier: GPL-2.0-only
-+#
-+# Red Hat specific options
-+#
-+
-+menu "Red Hat options"
-+
-+config RH_DISABLE_DEPRECATED
-+ bool "Remove support for deprecated features"
-+ help
-+ Red Hat may choose to deprecate certain features in its kernels.
-+ Enable this option to remove support for hardware that is no
-+ longer supported.
-+
-+ Unless you want a restricted kernel, say N here.
-+
-+endmenu
diff --git a/Makefile b/Makefile
-index d9243ad053f9..bc887a5bce4c 100644
+index c0af6d8aeb05..33ffe9e302df 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
@@ -94,6 +66,35 @@ index d9243ad053f9..bc887a5bce4c 100644
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
#
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index ee5115252aac..7f3796df8404 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -1224,9 +1224,9 @@ config HIGHMEM
+ If unsure, say n.
+
+ config HIGHPTE
+- bool "Allocate 2nd-level pagetables from highmem" if EXPERT
++ bool "Allocate 2nd-level pagetables from highmem"
+ depends on HIGHMEM
+- default y
++ default n
+ help
+ The VM uses one page of physical memory for each page table.
+ For systems with a lot of processes, this can use a lot of
+diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
+index 5d91259ee7b5..3a9f1962da72 100644
+--- a/arch/arm64/Kconfig
++++ b/arch/arm64/Kconfig
+@@ -1368,7 +1368,7 @@ endchoice
+
+ config ARM64_FORCE_52BIT
+ bool "Force 52-bit virtual addresses for userspace"
+- depends on ARM64_VA_BITS_52 && EXPERT
++ depends on ARM64_VA_BITS_52
+ help
+ For systems with 52-bit userspace VAs enabled, the kernel will attempt
+ to maintain compatibility with older software by providing 48-bit VAs
diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h
index b0d00032479d..afb9544fb007 100644
--- a/arch/s390/include/asm/ipl.h
@@ -107,10 +108,10 @@ index b0d00032479d..afb9544fb007 100644
/*
* DIAG 308 support
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
-index 469e8d3fbfbf..3ce742cd61c3 100644
+index 3a7d6e172211..8163a2173247 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
-@@ -2519,3 +2519,8 @@ int ipl_report_free(struct ipl_report *report)
+@@ -2479,3 +2479,8 @@ int ipl_report_free(struct ipl_report *report)
}
#endif
@@ -120,7 +121,7 @@ index 469e8d3fbfbf..3ce742cd61c3 100644
+ return !!ipl_secure_flag;
+}
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
-index 7ecd27c62d56..cad68dfba646 100644
+index 610e6f794511..4fc7aca3f572 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -49,6 +49,7 @@
@@ -142,10 +143,10 @@ index 7ecd27c62d56..cad68dfba646 100644
/* boot_command_line has been already set up in early.c */
*cmdline_p = boot_command_line;
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index e125e059e2c4..9cfd28e580e0 100644
+index 05c5aa951da7..da521c6f1cf2 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
-@@ -20,6 +20,7 @@
+@@ -21,6 +21,7 @@
#include <linux/root_dev.h>
#include <linux/hugetlb.h>
#include <linux/tboot.h>
@@ -153,7 +154,7 @@ index e125e059e2c4..9cfd28e580e0 100644
#include <linux/usb/xhci-dbgp.h>
#include <linux/static_call.h>
#include <linux/swiotlb.h>
-@@ -901,6 +902,13 @@ void __init setup_arch(char **cmdline_p)
+@@ -902,6 +903,13 @@ void __init setup_arch(char **cmdline_p)
if (efi_enabled(EFI_BOOT))
efi_init();
@@ -167,7 +168,7 @@ index e125e059e2c4..9cfd28e580e0 100644
reserve_ibft_region();
x86_init.resources.dmi_setup();
-@@ -1063,19 +1071,7 @@ void __init setup_arch(char **cmdline_p)
+@@ -1064,19 +1072,7 @@ void __init setup_arch(char **cmdline_p)
/* Allocate bigger log buffer */
setup_log_buf(1);
@@ -188,6 +189,49 @@ index e125e059e2c4..9cfd28e580e0 100644
reserve_initrd();
+diff --git a/certs/extract-cert.c b/certs/extract-cert.c
+index 70e9ec89d87d..f5fb74916cee 100644
+--- a/certs/extract-cert.c
++++ b/certs/extract-cert.c
+@@ -21,7 +21,6 @@
+ #include <openssl/bio.h>
+ #include <openssl/pem.h>
+ #include <openssl/err.h>
+-#include <openssl/engine.h>
+
+ /*
+ * OpenSSL 3.0 deprecates the OpenSSL's ENGINE API.
+@@ -122,28 +121,8 @@ int main(int argc, char **argv)
+ fclose(f);
+ exit(0);
+ } else if (!strncmp(cert_src, "pkcs11:", 7)) {
+- ENGINE *e;
+- struct {
+- const char *cert_id;
+- X509 *cert;
+- } parms;
+-
+- parms.cert_id = cert_src;
+- parms.cert = NULL;
+-
+- ENGINE_load_builtin_engines();
+- drain_openssl_errors();
+- e = ENGINE_by_id("pkcs11");
+- ERR(!e, "Load PKCS#11 ENGINE");
+- if (ENGINE_init(e))
+- drain_openssl_errors();
+- else
+- ERR(1, "ENGINE_init");
+- if (key_pass)
+- ERR(!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0), "Set PKCS#11 PIN");
+- ENGINE_ctrl_cmd(e, "LOAD_CERT_CTRL", 0, &parms, NULL, 1);
+- ERR(!parms.cert, "Get X.509 from PKCS#11");
+- write_cert(parms.cert);
++ fprintf(stderr, "Error: pkcs11 not implemented\n");
++ exit(1);
+ } else {
+ BIO *b;
+ X509 *x509;
diff --git a/crypto/drbg.c b/crypto/drbg.c
index 3addce90930c..730b03de596a 100644
--- a/crypto/drbg.c
@@ -244,7 +288,7 @@ index 3addce90930c..730b03de596a 100644
/*
diff --git a/crypto/rng.c b/crypto/rng.c
-index 279dffdebf59..d24dd37205cd 100644
+index 9d8804e46422..5ccb0485ff4b 100644
--- a/crypto/rng.c
+++ b/crypto/rng.c
@@ -12,10 +12,13 @@
@@ -272,7 +316,7 @@ index 279dffdebf59..d24dd37205cd 100644
struct crypto_rng *crypto_default_rng;
EXPORT_SYMBOL_GPL(crypto_default_rng);
static int crypto_default_rng_refcnt;
-@@ -136,31 +141,37 @@ struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask)
+@@ -106,31 +111,37 @@ struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask)
}
EXPORT_SYMBOL_GPL(crypto_alloc_rng);
@@ -319,7 +363,7 @@ index 279dffdebf59..d24dd37205cd 100644
mutex_unlock(&crypto_default_rng_lock);
return err;
-@@ -176,24 +187,33 @@ void crypto_put_default_rng(void)
+@@ -146,24 +157,33 @@ void crypto_put_default_rng(void)
EXPORT_SYMBOL_GPL(crypto_put_default_rng);
#if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE)
@@ -359,7 +403,7 @@ index 279dffdebf59..d24dd37205cd 100644
EXPORT_SYMBOL_GPL(crypto_del_default_rng);
#endif
-@@ -251,5 +271,102 @@ void crypto_unregister_rngs(struct rng_alg *algs, int count)
+@@ -217,5 +237,102 @@ void crypto_unregister_rngs(struct rng_alg *algs, int count)
}
EXPORT_SYMBOL_GPL(crypto_unregister_rngs);
@@ -525,10 +569,10 @@ index 1687483ff319..390b67f19181 100644
return ctx.rc;
}
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index d1464324de95..a3b2f99a2d78 100644
+index 503773707e01..2fead21fcb07 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
-@@ -1798,6 +1798,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
+@@ -1793,6 +1793,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
return false;
@@ -600,7 +644,7 @@ index bbf7029e224b..cf7faa970dd6 100644
dmi_decode_ipmi((const struct dmi_header *) dev->device_data);
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index b0eedc4595b3..a9024c1dd68a 100644
+index e12b531f5c2f..082707f8dff8 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -35,6 +35,7 @@
@@ -611,7 +655,7 @@ index b0eedc4595b3..a9024c1dd68a 100644
#include <linux/delay.h>
#define IPMI_DRIVER_VERSION "39.2"
-@@ -5511,8 +5512,21 @@ static int __init ipmi_init_msghandler_mod(void)
+@@ -5510,8 +5511,21 @@ static int __init ipmi_init_msghandler_mod(void)
{
int rv;
@@ -1135,7 +1179,7 @@ index d4af17fdba46..154f0403cbf4 100644
data->xport.ops = &hid_rmi_ops;
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
-index a0bdfabddbc6..cd824ceebd0f 100644
+index bf01f01964cf..703896981e8a 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
@@ -10,6 +10,7 @@
@@ -1163,7 +1207,7 @@ index a0bdfabddbc6..cd824ceebd0f 100644
MODULE_DEVICE_TABLE(amba, etm4_ids);
static struct amba_driver etm4x_amba_driver = {
-@@ -2413,6 +2424,11 @@ static int __init etm4x_init(void)
+@@ -2412,6 +2423,11 @@ static int __init etm4x_init(void)
{
int ret;
@@ -1175,7 +1219,7 @@ index a0bdfabddbc6..cd824ceebd0f 100644
ret = etm4_pm_setup();
/* etm4_pm_setup() does its own cleanup - exit on error */
-@@ -2439,6 +2455,9 @@ static int __init etm4x_init(void)
+@@ -2438,6 +2454,9 @@ static int __init etm4x_init(void)
static void __exit etm4x_exit(void)
{
@@ -1378,7 +1422,7 @@ index ef9ea295f9e0..0103334e8f32 100644
if (data->f01_container->dev.driver) {
/* Driver already bound, so enable ATTN now. */
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
-index 659a77f7bb83..e8dc1fd50e21 100644
+index 9df7cc75c1bc..60d541ae39e8 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -8,6 +8,7 @@
@@ -1389,7 +1433,7 @@ index 659a77f7bb83..e8dc1fd50e21 100644
#include <linux/kernel.h>
#include <linux/bits.h>
#include <linux/bug.h>
-@@ -2913,6 +2914,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
+@@ -2916,6 +2917,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
}
EXPORT_SYMBOL_GPL(iommu_dev_disable_feature);
@@ -1417,8 +1461,70 @@ index 659a77f7bb83..e8dc1fd50e21 100644
/**
* iommu_setup_default_domain - Set the default_domain for the group
* @group: Group to change
+diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel/ipu-bridge.c
+index 61750cc98d70..a0e9a71580b5 100644
+--- a/drivers/media/pci/intel/ipu-bridge.c
++++ b/drivers/media/pci/intel/ipu-bridge.c
+@@ -43,28 +43,46 @@
+ * becoming apparent in the future.
+ *
+ * Do not add an entry for a sensor that is not actually supported.
++ *
++ * Please keep the list sorted by ACPI HID.
+ */
+ static const struct ipu_sensor_config ipu_supported_sensors[] = {
++ /* Himax HM11B1 */
++ IPU_SENSOR_CONFIG("HIMX11B1", 1, 384000000),
++ /* Himax HM2170 */
++ IPU_SENSOR_CONFIG("HIMX2170", 1, 384000000),
++ /* Himax HM2172 */
++ IPU_SENSOR_CONFIG("HIMX2172", 1, 384000000),
++ /* GalaxyCore GC0310 */
++ IPU_SENSOR_CONFIG("INT0310", 0),
+ /* Omnivision OV5693 */
+ IPU_SENSOR_CONFIG("INT33BE", 1, 419200000),
++ /* Omnivision OV2740 */
++ IPU_SENSOR_CONFIG("INT3474", 1, 180000000),
+ /* Omnivision OV8865 */
+ IPU_SENSOR_CONFIG("INT347A", 1, 360000000),
+ /* Omnivision OV7251 */
+ IPU_SENSOR_CONFIG("INT347E", 1, 319200000),
++ /* Hynix Hi-556 */
++ IPU_SENSOR_CONFIG("INT3537", 1, 437000000),
++ /* Omnivision OV01A10 / OV01A1S */
++ IPU_SENSOR_CONFIG("OVTI01A0", 1, 400000000),
++ IPU_SENSOR_CONFIG("OVTI01AS", 1, 400000000),
++ /* Omnivision OV02C10 */
++ IPU_SENSOR_CONFIG("OVTI02C1", 1, 400000000),
++ /* Omnivision OV02E10 */
++ IPU_SENSOR_CONFIG("OVTI02E1", 1, 360000000),
++ /* Omnivision OV08A10 */
++ IPU_SENSOR_CONFIG("OVTI08A1", 1, 500000000),
++ /* Omnivision OV08x40 */
++ IPU_SENSOR_CONFIG("OVTI08F4", 1, 400000000),
++ /* Omnivision OV13B10 */
++ IPU_SENSOR_CONFIG("OVTI13B1", 1, 560000000),
++ IPU_SENSOR_CONFIG("OVTIDB10", 1, 560000000),
+ /* Omnivision OV2680 */
+ IPU_SENSOR_CONFIG("OVTI2680", 1, 331200000),
+- /* Omnivision ov8856 */
++ /* Omnivision OV8856 */
+ IPU_SENSOR_CONFIG("OVTI8856", 3, 180000000, 360000000, 720000000),
+- /* Omnivision ov2740 */
+- IPU_SENSOR_CONFIG("INT3474", 1, 180000000),
+- /* Hynix hi556 */
+- IPU_SENSOR_CONFIG("INT3537", 1, 437000000),
+- /* Omnivision ov13b10 */
+- IPU_SENSOR_CONFIG("OVTIDB10", 1, 560000000),
+- /* GalaxyCore GC0310 */
+- IPU_SENSOR_CONFIG("INT0310", 0),
+- /* Omnivision ov01a10 */
+- IPU_SENSOR_CONFIG("OVTI01A0", 1, 400000000),
+ };
+
+ static const struct ipu_property_names prop_names = {
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index eff7f5df08e2..b58145ce7775 100644
+index 568410e64ce6..6afbaee83950 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4433,6 +4433,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
@@ -1453,7 +1559,7 @@ index eff7f5df08e2..b58145ce7775 100644
* Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero)
* class code. Fix it.
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index a4638ea92571..aff13cdce015 100644
+index 1b7561abe05d..13f23905fb25 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -120,6 +120,14 @@ static const char *sd_cache_types[] = {
@@ -1471,7 +1577,7 @@ index a4638ea92571..aff13cdce015 100644
static void sd_set_flush_flag(struct scsi_disk *sdkp)
{
bool wc = false, fua = false;
-@@ -4262,6 +4270,8 @@ static int __init init_sd(void)
+@@ -4252,6 +4260,8 @@ static int __init init_sd(void)
goto err_out_class;
}
@@ -1481,10 +1587,10 @@ index a4638ea92571..aff13cdce015 100644
if (err)
goto err_out_driver;
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 008053039875..f948a5c96006 100644
+index 4b93c0bd1d4b..b98906237306 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5845,6 +5845,13 @@ static void hub_event(struct work_struct *work)
+@@ -5844,6 +5844,13 @@ static void hub_event(struct work_struct *work)
(u16) hub->change_bits[0],
(u16) hub->event_bits[0]);
@@ -1511,7 +1617,7 @@ index b164da5e129e..59021b8609a7 100644
/*
* Miscellaneous stuff.
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index d59b0947fba0..8b1e2e71d485 100644
+index 418e555459da..fdd941287ae1 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -45,6 +45,8 @@ struct screen_info;
@@ -1564,7 +1670,7 @@ index d59b0947fba0..8b1e2e71d485 100644
/*
* Variable Attributes
-@@ -1134,13 +1149,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
+@@ -1133,13 +1148,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
extern void efi_call_virt_check_flags(unsigned long flags, const void *caller);
extern unsigned long efi_call_virt_save_flags(void);
@@ -1579,10 +1685,10 @@ index d59b0947fba0..8b1e2e71d485 100644
enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var)
{
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
-index 7e539f6f8c67..3c3e56566457 100644
+index 855db460e08b..7a8c28cd7510 100644
--- a/include/linux/lsm_hook_defs.h
+++ b/include/linux/lsm_hook_defs.h
-@@ -436,6 +436,8 @@ LSM_HOOK(int, 0, bpf_token_capable, const struct bpf_token *token, int cap)
+@@ -438,6 +438,8 @@ LSM_HOOK(int, 0, bpf_token_capable, const struct bpf_token *token, int cap)
#endif /* CONFIG_BPF_SYSCALL */
LSM_HOOK(int, 0, locked_down, enum lockdown_reason what)
@@ -1632,7 +1738,7 @@ index ab7eea01ab42..fff7c5f737fc 100644
int rmi_register_transport_device(struct rmi_transport_dev *xport);
diff --git a/include/linux/security.h b/include/linux/security.h
-index 5122e3ad83b1..b5f0081bc894 100644
+index de3af33e6ff5..0a37270070e4 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -507,6 +507,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
@@ -1677,6 +1783,95 @@ index a2ff4242e623..f0d2be1ee4f1 100644
}
int module_sig_check(struct load_info *info, int flags)
+diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
+index 7ae118a6d947..6ecb110bf46b 100644
+--- a/net/bluetooth/hci_core.c
++++ b/net/bluetooth/hci_core.c
+@@ -120,13 +120,6 @@ void hci_discovery_set_state(struct hci_dev *hdev, int state)
+ case DISCOVERY_STARTING:
+ break;
+ case DISCOVERY_FINDING:
+- /* If discovery was not started then it was initiated by the
+- * MGMT interface so no MGMT event shall be generated either
+- */
+- if (old_state != DISCOVERY_STARTING) {
+- hdev->discovery.state = old_state;
+- return;
+- }
+ mgmt_discovering(hdev, 1);
+ break;
+ case DISCOVERY_RESOLVING:
+diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
+index 4611a67d7dcc..a78f6d706cd4 100644
+--- a/net/bluetooth/hci_event.c
++++ b/net/bluetooth/hci_event.c
+@@ -1722,9 +1722,10 @@ static void le_set_scan_enable_complete(struct hci_dev *hdev, u8 enable)
+ switch (enable) {
+ case LE_SCAN_ENABLE:
+ hci_dev_set_flag(hdev, HCI_LE_SCAN);
+- if (hdev->le_scan_type == LE_SCAN_ACTIVE)
++ if (hdev->le_scan_type == LE_SCAN_ACTIVE) {
+ clear_pending_adv_report(hdev);
+- hci_discovery_set_state(hdev, DISCOVERY_FINDING);
++ hci_discovery_set_state(hdev, DISCOVERY_FINDING);
++ }
+ break;
+
+ case LE_SCAN_DISABLE:
+diff --git a/scripts/sign-file.c b/scripts/sign-file.c
+index 3edb156ae52c..0114ae1dbf7f 100644
+--- a/scripts/sign-file.c
++++ b/scripts/sign-file.c
+@@ -27,7 +27,6 @@
+ #include <openssl/evp.h>
+ #include <openssl/pem.h>
+ #include <openssl/err.h>
+-#include <openssl/engine.h>
+
+ /*
+ * OpenSSL 3.0 deprecates the OpenSSL's ENGINE API.
+@@ -99,16 +98,6 @@ static void display_openssl_errors(int l)
+ }
+ }
+
+-static void drain_openssl_errors(void)
+-{
+- const char *file;
+- int line;
+-
+- if (ERR_peek_error() == 0)
+- return;
+- while (ERR_get_error_line(&file, &line)) {}
+-}
+-
+ #define ERR(cond, fmt, ...) \
+ do { \
+ bool __cond = (cond); \
+@@ -144,22 +133,8 @@ static EVP_PKEY *read_private_key(const char *private_key_name)
+ EVP_PKEY *private_key;
+
+ if (!strncmp(private_key_name, "pkcs11:", 7)) {
+- ENGINE *e;
+-
+- ENGINE_load_builtin_engines();
+- drain_openssl_errors();
+- e = ENGINE_by_id("pkcs11");
+- ERR(!e, "Load PKCS#11 ENGINE");
+- if (ENGINE_init(e))
+- drain_openssl_errors();
+- else
+- ERR(1, "ENGINE_init");
+- if (key_pass)
+- ERR(!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0),
+- "Set PKCS#11 PIN");
+- private_key = ENGINE_load_private_key(e, private_key_name,
+- NULL, NULL);
+- ERR(!private_key, "%s", private_key_name);
++ fprintf(stderr, "Error: pkcs11 not implemented\n");
++ exit(1);
+ } else {
+ BIO *b;
+
diff --git a/scripts/tags.sh b/scripts/tags.sh
index 191e0461d6d5..e6f418b3e948 100755
--- a/scripts/tags.sh
@@ -1751,10 +1946,10 @@ index cd84d8ea1dfb..e4c70a0312bc 100644
const struct lsm_id lockdown_lsmid = {
diff --git a/security/security.c b/security/security.c
-index 4fd3c839353e..d52cb3bb720d 100644
+index 8cee5b6c6e6d..489e25946bf9 100644
--- a/security/security.c
+++ b/security/security.c
-@@ -5569,6 +5569,18 @@ int security_locked_down(enum lockdown_reason what)
+@@ -5596,6 +5596,18 @@ int security_locked_down(enum lockdown_reason what)
}
EXPORT_SYMBOL(security_locked_down);
diff --git a/SOURCES/patch-6.8-redhat.patch b/SOURCES/patch-6.8-redhat.patch
deleted file mode 100644
index a10719e..0000000
--- a/SOURCES/patch-6.8-redhat.patch
+++ /dev/null
@@ -1,1575 +0,0 @@
- Makefile | 20 ++-
- arch/s390/include/asm/ipl.h | 1 +
- arch/s390/kernel/ipl.c | 5 +
- arch/s390/kernel/setup.c | 4 +
- arch/x86/kernel/setup.c | 22 ++-
- drivers/acpi/apei/hest.c | 8 +
- drivers/acpi/irq.c | 17 +-
- drivers/acpi/scan.c | 9 ++
- drivers/ata/libahci.c | 18 +++
- drivers/char/ipmi/ipmi_dmi.c | 15 ++
- drivers/char/ipmi/ipmi_msghandler.c | 16 +-
- drivers/firmware/efi/Makefile | 1 +
- drivers/firmware/efi/efi.c | 124 +++++++++++----
- drivers/firmware/efi/secureboot.c | 38 +++++
- drivers/firmware/sysfb.c | 18 ++-
- drivers/gpu/drm/nouveau/nouveau_dp.c | 10 ++
- drivers/hid/hid-rmi.c | 66 --------
- drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 +++
- drivers/input/rmi4/rmi_driver.c | 124 +++++++++------
- drivers/iommu/iommu.c | 22 +++
- drivers/pci/quirks.c | 24 +++
- drivers/scsi/sd.c | 10 ++
- drivers/usb/core/hub.c | 7 +
- fs/xfs/xfs_iomap.c | 4 +-
- include/linux/efi.h | 22 ++-
- include/linux/lsm_hook_defs.h | 2 +
- include/linux/module.h | 1 +
- include/linux/rh_kabi.h | 172 +++++++++++++++++++++
- include/linux/rmi.h | 1 +
- include/linux/security.h | 5 +
- kernel/module/main.c | 2 +
- kernel/module/signing.c | 9 +-
- scripts/mod/modpost.c | 8 +
- scripts/tags.sh | 2 +
- security/integrity/platform_certs/load_uefi.c | 6 +-
- security/lockdown/Kconfig | 13 ++
- security/lockdown/lockdown.c | 1 +
- security/security.c | 12 ++
- 38 files changed, 681 insertions(+), 177 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 5447d5041e42..7eb038dc13ec 100644
---- a/Makefile
-+++ b/Makefile
-@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
- PHONY := __all
- __all:
-
-+# Set RHEL variables
-+# Note that this ifdef'ery is required to handle when building with
-+# the O= mechanism (relocate the object file results) due to upstream
-+# commit 67d7c302 which broke our RHEL include file
-+ifneq ($(realpath source),)
-+include $(realpath source)/Makefile.rhelver
-+else
-+ifneq ($(realpath Makefile.rhelver),)
-+include Makefile.rhelver
-+endif
-+endif
-+
- # We are using a recursive build, so we need to do a little thinking
- # to get the ordering right.
- #
-@@ -1247,7 +1259,13 @@ define filechk_version.h
- ((c) > 255 ? 255 : (c)))'; \
- echo \#define LINUX_VERSION_MAJOR $(VERSION); \
- echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
-- echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
-+ echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL); \
-+ echo '#define RHEL_MAJOR $(RHEL_MAJOR)'; \
-+ echo '#define RHEL_MINOR $(RHEL_MINOR)'; \
-+ echo '#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))'; \
-+ echo '#define RHEL_RELEASE_CODE \
-+ $(shell expr $(RHEL_MAJOR) \* 256 + $(RHEL_MINOR))'; \
-+ echo '#define RHEL_RELEASE "$(RHEL_RELEASE)"'
- endef
-
- $(version_h): PATCHLEVEL := $(or $(PATCHLEVEL), 0)
-diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h
-index b0d00032479d..afb9544fb007 100644
---- a/arch/s390/include/asm/ipl.h
-+++ b/arch/s390/include/asm/ipl.h
-@@ -139,6 +139,7 @@ int ipl_report_add_component(struct ipl_report *report, struct kexec_buf *kbuf,
- unsigned char flags, unsigned short cert);
- int ipl_report_add_certificate(struct ipl_report *report, void *key,
- unsigned long addr, unsigned long len);
-+bool ipl_get_secureboot(void);
-
- /*
- * DIAG 308 support
-diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
-index ba75f6bee774..7d37ce1772f1 100644
---- a/arch/s390/kernel/ipl.c
-+++ b/arch/s390/kernel/ipl.c
-@@ -2520,3 +2520,8 @@ int ipl_report_free(struct ipl_report *report)
- }
-
- #endif
-+
-+bool ipl_get_secureboot(void)
-+{
-+ return !!ipl_secure_flag;
-+}
-diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
-index d1f3b56e7afc..eaefd0d7cfff 100644
---- a/arch/s390/kernel/setup.c
-+++ b/arch/s390/kernel/setup.c
-@@ -49,6 +49,7 @@
- #include <linux/memory.h>
- #include <linux/compat.h>
- #include <linux/start_kernel.h>
-+#include <linux/security.h>
- #include <linux/hugetlb.h>
- #include <linux/kmemleak.h>
-
-@@ -891,6 +892,9 @@ void __init setup_arch(char **cmdline_p)
-
- log_component_list();
-
-+ if (ipl_get_secureboot())
-+ security_lock_kernel_down("Secure IPL mode", LOCKDOWN_INTEGRITY_MAX);
-+
- /* Have one command line that is parsed and saved in /proc/cmdline */
- /* boot_command_line has been already set up in early.c */
- *cmdline_p = boot_command_line;
-diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 3998109195da..cedcd208de44 100644
---- a/arch/x86/kernel/setup.c
-+++ b/arch/x86/kernel/setup.c
-@@ -20,6 +20,7 @@
- #include <linux/root_dev.h>
- #include <linux/hugetlb.h>
- #include <linux/tboot.h>
-+#include <linux/security.h>
- #include <linux/usb/xhci-dbgp.h>
- #include <linux/static_call.h>
- #include <linux/swiotlb.h>
-@@ -901,6 +902,13 @@ void __init setup_arch(char **cmdline_p)
- if (efi_enabled(EFI_BOOT))
- efi_init();
-
-+ efi_set_secure_boot(boot_params.secure_boot);
-+
-+#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT
-+ if (efi_enabled(EFI_SECURE_BOOT))
-+ security_lock_kernel_down("EFI Secure Boot mode", LOCKDOWN_INTEGRITY_MAX);
-+#endif
-+
- reserve_ibft_region();
- x86_init.resources.dmi_setup();
-
-@@ -1065,19 +1073,7 @@ void __init setup_arch(char **cmdline_p)
- /* Allocate bigger log buffer */
- setup_log_buf(1);
-
-- if (efi_enabled(EFI_BOOT)) {
-- switch (boot_params.secure_boot) {
-- case efi_secureboot_mode_disabled:
-- pr_info("Secure boot disabled\n");
-- break;
-- case efi_secureboot_mode_enabled:
-- pr_info("Secure boot enabled\n");
-- break;
-- default:
-- pr_info("Secure boot could not be determined\n");
-- break;
-- }
-- }
-+ efi_set_secure_boot(boot_params.secure_boot);
-
- reserve_initrd();
-
-diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
-index 6aef1ee5e1bd..8f146b1b4972 100644
---- a/drivers/acpi/apei/hest.c
-+++ b/drivers/acpi/apei/hest.c
-@@ -96,6 +96,14 @@ static int apei_hest_parse(apei_hest_func_t func, void *data)
- if (hest_disable || !hest_tab)
- return -EINVAL;
-
-+#ifdef CONFIG_ARM64
-+ /* Ignore broken firmware */
-+ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) &&
-+ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) &&
-+ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM)
-+ return -EINVAL;
-+#endif
-+
- hest_hdr = (struct acpi_hest_header *)(hest_tab + 1);
- for (i = 0; i < hest_tab->error_source_count; i++) {
- len = hest_esrc_len(hest_hdr);
-diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c
-index 1687483ff319..390b67f19181 100644
---- a/drivers/acpi/irq.c
-+++ b/drivers/acpi/irq.c
-@@ -143,6 +143,7 @@ struct acpi_irq_parse_one_ctx {
- unsigned int index;
- unsigned long *res_flags;
- struct irq_fwspec *fwspec;
-+ bool skip_producer_check;
- };
-
- /**
-@@ -216,7 +217,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
- return AE_CTRL_TERMINATE;
- case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
- eirq = &ares->data.extended_irq;
-- if (eirq->producer_consumer == ACPI_PRODUCER)
-+ if (!ctx->skip_producer_check &&
-+ eirq->producer_consumer == ACPI_PRODUCER)
- return AE_OK;
- if (ctx->index >= eirq->interrupt_count) {
- ctx->index -= eirq->interrupt_count;
-@@ -252,8 +254,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
- static int acpi_irq_parse_one(acpi_handle handle, unsigned int index,
- struct irq_fwspec *fwspec, unsigned long *flags)
- {
-- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec };
-+ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false };
-
-+ /*
-+ * Firmware on arm64-based HPE m400 platform incorrectly marks
-+ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER.
-+ * Don't do the producer/consumer check for that device.
-+ */
-+ if (IS_ENABLED(CONFIG_ARM64)) {
-+ struct acpi_device *adev = acpi_get_acpi_dev(handle);
-+
-+ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08"))
-+ ctx.skip_producer_check = true;
-+ }
- acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx);
- return ctx.rc;
- }
-diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index eb4ca85d16ff..be8278b39b22 100644
---- a/drivers/acpi/scan.c
-+++ b/drivers/acpi/scan.c
-@@ -1757,6 +1757,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
- if (!acpi_match_device_ids(device, ignore_serial_bus_ids))
- return false;
-
-+ /*
-+ * Firmware on some arm64 X-Gene platforms will make the UART
-+ * device appear as both a UART and a slave of that UART. Just
-+ * bail out here for X-Gene UARTs.
-+ */
-+ if (IS_ENABLED(CONFIG_ARM64) &&
-+ !strcmp(acpi_device_hid(device), "APMC0D08"))
-+ return false;
-+
- INIT_LIST_HEAD(&resource_list);
- acpi_dev_get_resources(device, &resource_list,
- acpi_check_serial_bus_slave,
-diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
-index 1a63200ea437..a911e976a596 100644
---- a/drivers/ata/libahci.c
-+++ b/drivers/ata/libahci.c
-@@ -729,6 +729,24 @@ int ahci_stop_engine(struct ata_port *ap)
- tmp &= ~PORT_CMD_START;
- writel(tmp, port_mmio + PORT_CMD);
-
-+#ifdef CONFIG_ARM64
-+ /* Rev Ax of Cavium CN99XX needs a hack for port stop */
-+ if (dev_is_pci(ap->host->dev) &&
-+ to_pci_dev(ap->host->dev)->vendor == 0x14e4 &&
-+ to_pci_dev(ap->host->dev)->device == 0x9027 &&
-+ midr_is_cpu_model_range(read_cpuid_id(),
-+ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN),
-+ MIDR_CPU_VAR_REV(0, 0),
-+ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) {
-+ tmp = readl(hpriv->mmio + 0x8000);
-+ udelay(100);
-+ writel(tmp | (1 << 26), hpriv->mmio + 0x8000);
-+ udelay(100);
-+ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000);
-+ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n");
-+ }
-+#endif
-+
- /* wait for engine to stop. This could be as long as 500 msec */
- tmp = ata_wait_register(ap, port_mmio + PORT_CMD,
- PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500);
-diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c
-index bbf7029e224b..cf7faa970dd6 100644
---- a/drivers/char/ipmi/ipmi_dmi.c
-+++ b/drivers/char/ipmi/ipmi_dmi.c
-@@ -215,6 +215,21 @@ static int __init scan_for_dmi_ipmi(void)
- {
- const struct dmi_device *dev = NULL;
-
-+#ifdef CONFIG_ARM64
-+ /* RHEL-only
-+ * If this is ARM-based HPE m400, return now, because that platform
-+ * reports the host-side ipmi address as intel port-io space, which
-+ * does not exist in the ARM architecture.
-+ */
-+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME);
-+
-+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) {
-+ pr_debug("%s does not support host ipmi\n", dmistr);
-+ return 0;
-+ }
-+ /* END RHEL-only */
-+#endif
-+
- while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev)))
- dmi_decode_ipmi((const struct dmi_header *) dev->device_data);
-
-diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index b0eedc4595b3..a9024c1dd68a 100644
---- a/drivers/char/ipmi/ipmi_msghandler.c
-+++ b/drivers/char/ipmi/ipmi_msghandler.c
-@@ -35,6 +35,7 @@
- #include <linux/uuid.h>
- #include <linux/nospec.h>
- #include <linux/vmalloc.h>
-+#include <linux/dmi.h>
- #include <linux/delay.h>
-
- #define IPMI_DRIVER_VERSION "39.2"
-@@ -5511,8 +5512,21 @@ static int __init ipmi_init_msghandler_mod(void)
- {
- int rv;
-
-- pr_info("version " IPMI_DRIVER_VERSION "\n");
-+#ifdef CONFIG_ARM64
-+ /* RHEL-only
-+ * If this is ARM-based HPE m400, return now, because that platform
-+ * reports the host-side ipmi address as intel port-io space, which
-+ * does not exist in the ARM architecture.
-+ */
-+ const char *dmistr = dmi_get_system_info(DMI_PRODUCT_NAME);
-
-+ if (dmistr && (strcmp("ProLiant m400 Server", dmistr) == 0)) {
-+ pr_debug("%s does not support host ipmi\n", dmistr);
-+ return -ENOSYS;
-+ }
-+ /* END RHEL-only */
-+#endif
-+ pr_info("version " IPMI_DRIVER_VERSION "\n");
- mutex_lock(&ipmi_interfaces_mutex);
- rv = ipmi_register_driver();
- mutex_unlock(&ipmi_interfaces_mutex);
-diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
-index a2d0009560d0..4f3486e6a84b 100644
---- a/drivers/firmware/efi/Makefile
-+++ b/drivers/firmware/efi/Makefile
-@@ -25,6 +25,7 @@ subdir-$(CONFIG_EFI_STUB) += libstub
- obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o
- obj-$(CONFIG_EFI_TEST) += test/
- obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o
-+obj-$(CONFIG_EFI) += secureboot.o
- obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o
- obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o
- obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o
-diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
-index 1ea14e86a741..ae3518be391e 100644
---- a/drivers/firmware/efi/efi.c
-+++ b/drivers/firmware/efi/efi.c
-@@ -33,6 +33,7 @@
- #include <linux/memblock.h>
- #include <linux/security.h>
- #include <linux/notifier.h>
-+#include <linux/bsearch.h>
-
- #include <asm/early_ioremap.h>
-
-@@ -992,40 +993,101 @@ int efi_mem_type(unsigned long phys_addr)
- return -EINVAL;
- }
-
-+struct efi_error_code {
-+ efi_status_t status;
-+ int errno;
-+ const char *description;
-+};
-+
-+static const struct efi_error_code efi_error_codes[] = {
-+ { EFI_SUCCESS, 0, "Success"},
-+#if 0
-+ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"},
-+#endif
-+ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"},
-+ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"},
-+ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"},
-+ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"},
-+ { EFI_NOT_READY, -EAGAIN, "Not Ready"},
-+ { EFI_DEVICE_ERROR, -EIO, "Device Error"},
-+ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"},
-+ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"},
-+#if 0
-+ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"},
-+ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"},
-+ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"},
-+ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"},
-+#endif
-+ { EFI_NOT_FOUND, -ENOENT, "Not Found"},
-+#if 0
-+ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"},
-+ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"},
-+ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"},
-+ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"},
-+ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"},
-+ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"},
-+#endif
-+ { EFI_ABORTED, -EINTR, "Aborted"},
-+#if 0
-+ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"},
-+ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"},
-+ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"},
-+ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"},
-+#endif
-+ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"},
-+#if 0
-+ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"},
-+ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"},
-+ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"},
-+ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"},
-+ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"},
-+
-+ // warnings
-+ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"},
-+ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"},
-+ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"},
-+ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"},
-+#endif
-+};
-+
-+static int
-+efi_status_cmp_bsearch(const void *key, const void *item)
-+{
-+ u64 status = (u64)(uintptr_t)key;
-+ struct efi_error_code *code = (struct efi_error_code *)item;
-+
-+ if (status < code->status)
-+ return -1;
-+ if (status > code->status)
-+ return 1;
-+ return 0;
-+}
-+
- int efi_status_to_err(efi_status_t status)
- {
-- int err;
--
-- switch (status) {
-- case EFI_SUCCESS:
-- err = 0;
-- break;
-- case EFI_INVALID_PARAMETER:
-- err = -EINVAL;
-- break;
-- case EFI_OUT_OF_RESOURCES:
-- err = -ENOSPC;
-- break;
-- case EFI_DEVICE_ERROR:
-- err = -EIO;
-- break;
-- case EFI_WRITE_PROTECTED:
-- err = -EROFS;
-- break;
-- case EFI_SECURITY_VIOLATION:
-- err = -EACCES;
-- break;
-- case EFI_NOT_FOUND:
-- err = -ENOENT;
-- break;
-- case EFI_ABORTED:
-- err = -EINTR;
-- break;
-- default:
-- err = -EINVAL;
-- }
-+ struct efi_error_code *found;
-+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code);
-
-- return err;
-+ found = bsearch((void *)(uintptr_t)status, efi_error_codes,
-+ sizeof(struct efi_error_code), num,
-+ efi_status_cmp_bsearch);
-+ if (!found)
-+ return -EINVAL;
-+ return found->errno;
-+}
-+
-+const char *
-+efi_status_to_str(efi_status_t status)
-+{
-+ struct efi_error_code *found;
-+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code);
-+
-+ found = bsearch((void *)(uintptr_t)status, efi_error_codes,
-+ sizeof(struct efi_error_code), num,
-+ efi_status_cmp_bsearch);
-+ if (!found)
-+ return "Unknown error code";
-+ return found->description;
- }
- EXPORT_SYMBOL_GPL(efi_status_to_err);
-
-diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c
-new file mode 100644
-index 000000000000..de0a3714a5d4
---- /dev/null
-+++ b/drivers/firmware/efi/secureboot.c
-@@ -0,0 +1,38 @@
-+/* Core kernel secure boot support.
-+ *
-+ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public Licence
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the Licence, or (at your option) any later version.
-+ */
-+
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#include <linux/efi.h>
-+#include <linux/kernel.h>
-+#include <linux/printk.h>
-+
-+/*
-+ * Decide what to do when UEFI secure boot mode is enabled.
-+ */
-+void __init efi_set_secure_boot(enum efi_secureboot_mode mode)
-+{
-+ if (efi_enabled(EFI_BOOT)) {
-+ switch (mode) {
-+ case efi_secureboot_mode_disabled:
-+ pr_info("Secure boot disabled\n");
-+ break;
-+ case efi_secureboot_mode_enabled:
-+ set_bit(EFI_SECURE_BOOT, &efi.flags);
-+ pr_info("Secure boot enabled\n");
-+ break;
-+ default:
-+ pr_warn("Secure boot could not be determined (mode %u)\n",
-+ mode);
-+ break;
-+ }
-+ }
-+}
-diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
-index 3c197db42c9d..16e4a2e90fae 100644
---- a/drivers/firmware/sysfb.c
-+++ b/drivers/firmware/sysfb.c
-@@ -34,6 +34,22 @@
- #include <linux/screen_info.h>
- #include <linux/sysfb.h>
-
-+static int skip_simpledrm;
-+
-+static int __init simpledrm_disable(char *opt)
-+{
-+ if (!opt)
-+ return -EINVAL;
-+
-+ get_option(&opt, &skip_simpledrm);
-+
-+ if (skip_simpledrm)
-+ pr_info("The simpledrm driver will not be probed\n");
-+
-+ return 0;
-+}
-+early_param("nvidia-drm.modeset", simpledrm_disable);
-+
- static struct platform_device *pd;
- static DEFINE_MUTEX(disable_lock);
- static bool disabled;
-@@ -85,7 +101,7 @@ static __init int sysfb_init(void)
-
- /* try to create a simple-framebuffer device */
- compatible = sysfb_parse_mode(si, &mode);
-- if (compatible) {
-+ if (compatible && !skip_simpledrm) {
- pd = sysfb_create_simplefb(si, &mode);
- if (!IS_ERR(pd))
- goto unlock_mutex;
-diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c
-index 3f72bc38bd2c..a72c45809484 100644
---- a/drivers/gpu/drm/nouveau/nouveau_dp.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
-@@ -235,6 +235,9 @@ nouveau_dp_detect(struct nouveau_connector *nv_connector,
- return NOUVEAU_DP_NONE;
- }
-
-+ // Ensure that the aux bus is enabled for probing
-+ drm_dp_dpcd_set_powered(&nv_connector->aux, true);
-+
- mutex_lock(&nv_encoder->dp.hpd_irq_lock);
- if (mstm) {
- /* If we're not ready to handle MST state changes yet, just
-@@ -296,6 +299,13 @@ nouveau_dp_detect(struct nouveau_connector *nv_connector,
- if (mstm && !mstm->suspended && ret != NOUVEAU_DP_MST)
- nv50_mstm_remove(mstm);
-
-+ /* GSP doesn't like when we try to do aux transactions on a port it considers disconnected,
-+ * and since we don't really have a usecase for that anyway - just disable the aux bus here
-+ * if we've decided the connector is disconnected
-+ */
-+ if (ret == NOUVEAU_DP_NONE)
-+ drm_dp_dpcd_set_powered(&nv_connector->aux, false);
-+
- mutex_unlock(&nv_encoder->dp.hpd_irq_lock);
- return ret;
- }
-diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
-index d4af17fdba46..154f0403cbf4 100644
---- a/drivers/hid/hid-rmi.c
-+++ b/drivers/hid/hid-rmi.c
-@@ -321,21 +321,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
- {
- struct rmi_data *hdata = hid_get_drvdata(hdev);
- struct rmi_device *rmi_dev = hdata->xport.rmi_dev;
-- unsigned long flags;
-
- if (!(test_bit(RMI_STARTED, &hdata->flags)))
- return 0;
-
-- pm_wakeup_event(hdev->dev.parent, 0);
--
-- local_irq_save(flags);
--
- rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2);
-
-- generic_handle_irq(hdata->rmi_irq);
--
-- local_irq_restore(flags);
--
- return 1;
- }
-
-@@ -589,56 +580,6 @@ static const struct rmi_transport_ops hid_rmi_ops = {
- .reset = rmi_hid_reset,
- };
-
--static void rmi_irq_teardown(void *data)
--{
-- struct rmi_data *hdata = data;
-- struct irq_domain *domain = hdata->domain;
--
-- if (!domain)
-- return;
--
-- irq_dispose_mapping(irq_find_mapping(domain, 0));
--
-- irq_domain_remove(domain);
-- hdata->domain = NULL;
-- hdata->rmi_irq = 0;
--}
--
--static int rmi_irq_map(struct irq_domain *h, unsigned int virq,
-- irq_hw_number_t hw_irq_num)
--{
-- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq);
--
-- return 0;
--}
--
--static const struct irq_domain_ops rmi_irq_ops = {
-- .map = rmi_irq_map,
--};
--
--static int rmi_setup_irq_domain(struct hid_device *hdev)
--{
-- struct rmi_data *hdata = hid_get_drvdata(hdev);
-- int ret;
--
-- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1,
-- &rmi_irq_ops, hdata);
-- if (!hdata->domain)
-- return -ENOMEM;
--
-- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata);
-- if (ret)
-- return ret;
--
-- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0);
-- if (hdata->rmi_irq <= 0) {
-- hid_err(hdev, "Can't allocate an IRQ\n");
-- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO;
-- }
--
-- return 0;
--}
--
- static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
- {
- struct rmi_data *data = NULL;
-@@ -711,18 +652,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
-
- mutex_init(&data->page_mutex);
-
-- ret = rmi_setup_irq_domain(hdev);
-- if (ret) {
-- hid_err(hdev, "failed to allocate IRQ domain\n");
-- return ret;
-- }
--
- if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)
- rmi_hid_pdata.gpio_data.disable = true;
-
- data->xport.dev = hdev->dev.parent;
- data->xport.pdata = rmi_hid_pdata;
-- data->xport.pdata.irq = data->rmi_irq;
- data->xport.proto_name = "hid";
- data->xport.ops = &hid_rmi_ops;
-
-diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
-index 2e2cabc5f50a..8b44d990f978 100644
---- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
-+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
-@@ -10,6 +10,7 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/device.h>
-+#include <linux/dmi.h>
- #include <linux/io.h>
- #include <linux/err.h>
- #include <linux/fs.h>
-@@ -2343,6 +2344,16 @@ static const struct amba_id etm4_ids[] = {
- {},
- };
-
-+static const struct dmi_system_id broken_coresight[] = {
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "HPE"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Apollo 70"),
-+ },
-+ },
-+ { } /* terminating entry */
-+};
-+
- MODULE_DEVICE_TABLE(amba, etm4_ids);
-
- static struct amba_driver etm4x_amba_driver = {
-@@ -2412,6 +2423,11 @@ static int __init etm4x_init(void)
- {
- int ret;
-
-+ if (dmi_check_system(broken_coresight)) {
-+ pr_info("ETM4 disabled due to firmware bug\n");
-+ return 0;
-+ }
-+
- ret = etm4_pm_setup();
-
- /* etm4_pm_setup() does its own cleanup - exit on error */
-@@ -2438,6 +2454,9 @@ static int __init etm4x_init(void)
-
- static void __exit etm4x_exit(void)
- {
-+ if (dmi_check_system(broken_coresight))
-+ return;
-+
- amba_driver_unregister(&etm4x_amba_driver);
- platform_driver_unregister(&etm4_platform_driver);
- etm4_pm_clear();
-diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
-index ef9ea295f9e0..0103334e8f32 100644
---- a/drivers/input/rmi4/rmi_driver.c
-+++ b/drivers/input/rmi4/rmi_driver.c
-@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status,
- attn_data.data = fifo_data;
-
- kfifo_put(&drvdata->attn_fifo, attn_data);
-+
-+ schedule_work(&drvdata->attn_work);
- }
- EXPORT_SYMBOL_GPL(rmi_set_attn_data);
-
--static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
-+static void attn_callback(struct work_struct *work)
- {
-- struct rmi_device *rmi_dev = dev_id;
-- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
-+ struct rmi_driver_data *drvdata = container_of(work,
-+ struct rmi_driver_data,
-+ attn_work);
- struct rmi4_attn_data attn_data = {0};
- int ret, count;
-
- count = kfifo_get(&drvdata->attn_fifo, &attn_data);
-- if (count) {
-- *(drvdata->irq_status) = attn_data.irq_status;
-- drvdata->attn_data = attn_data;
-- }
-+ if (!count)
-+ return;
-
-- ret = rmi_process_interrupt_requests(rmi_dev);
-+ *(drvdata->irq_status) = attn_data.irq_status;
-+ drvdata->attn_data = attn_data;
-+
-+ ret = rmi_process_interrupt_requests(drvdata->rmi_dev);
- if (ret)
-- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
-+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev,
- "Failed to process interrupt request: %d\n", ret);
-
-- if (count) {
-- kfree(attn_data.data);
-- drvdata->attn_data.data = NULL;
-- }
-+ kfree(attn_data.data);
-+ drvdata->attn_data.data = NULL;
-
- if (!kfifo_is_empty(&drvdata->attn_fifo))
-- return rmi_irq_fn(irq, dev_id);
-+ schedule_work(&drvdata->attn_work);
-+}
-+
-+static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
-+{
-+ struct rmi_device *rmi_dev = dev_id;
-+ int ret;
-+
-+ ret = rmi_process_interrupt_requests(rmi_dev);
-+ if (ret)
-+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev,
-+ "Failed to process interrupt request: %d\n", ret);
-
- return IRQ_HANDLED;
- }
-@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id)
- static int rmi_irq_init(struct rmi_device *rmi_dev)
- {
- struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev);
-- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
- int irq_flags = irq_get_trigger_type(pdata->irq);
- int ret;
-
-@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev)
- return ret;
- }
-
-- data->enabled = true;
--
- return 0;
- }
-
-@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake)
- if (data->enabled)
- goto out;
-
-- enable_irq(irq);
-- data->enabled = true;
-- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {
-- retval = disable_irq_wake(irq);
-- if (retval)
-- dev_warn(&rmi_dev->dev,
-- "Failed to disable irq for wake: %d\n",
-- retval);
-- }
-+ if (irq) {
-+ enable_irq(irq);
-+ data->enabled = true;
-+ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) {
-+ retval = disable_irq_wake(irq);
-+ if (retval)
-+ dev_warn(&rmi_dev->dev,
-+ "Failed to disable irq for wake: %d\n",
-+ retval);
-+ }
-
-- /*
-- * Call rmi_process_interrupt_requests() after enabling irq,
-- * otherwise we may lose interrupt on edge-triggered systems.
-- */
-- irq_flags = irq_get_trigger_type(pdata->irq);
-- if (irq_flags & IRQ_TYPE_EDGE_BOTH)
-- rmi_process_interrupt_requests(rmi_dev);
-+ /*
-+ * Call rmi_process_interrupt_requests() after enabling irq,
-+ * otherwise we may lose interrupt on edge-triggered systems.
-+ */
-+ irq_flags = irq_get_trigger_type(pdata->irq);
-+ if (irq_flags & IRQ_TYPE_EDGE_BOTH)
-+ rmi_process_interrupt_requests(rmi_dev);
-+ } else {
-+ data->enabled = true;
-+ }
-
- out:
- mutex_unlock(&data->enabled_mutex);
-@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake)
- goto out;
-
- data->enabled = false;
-- disable_irq(irq);
-- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {
-- retval = enable_irq_wake(irq);
-- if (retval)
-- dev_warn(&rmi_dev->dev,
-- "Failed to enable irq for wake: %d\n",
-- retval);
-- }
--
-- /* make sure the fifo is clean */
-- while (!kfifo_is_empty(&data->attn_fifo)) {
-- count = kfifo_get(&data->attn_fifo, &attn_data);
-- if (count)
-- kfree(attn_data.data);
-+ if (irq) {
-+ disable_irq(irq);
-+ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) {
-+ retval = enable_irq_wake(irq);
-+ if (retval)
-+ dev_warn(&rmi_dev->dev,
-+ "Failed to enable irq for wake: %d\n",
-+ retval);
-+ }
-+ } else {
-+ /* make sure the fifo is clean */
-+ while (!kfifo_is_empty(&data->attn_fifo)) {
-+ count = kfifo_get(&data->attn_fifo, &attn_data);
-+ if (count)
-+ kfree(attn_data.data);
-+ }
- }
-
- out:
-@@ -978,6 +994,8 @@ static int rmi_driver_remove(struct device *dev)
-
- rmi_disable_irq(rmi_dev, false);
-
-+ cancel_work_sync(&data->attn_work);
-+
- rmi_f34_remove_sysfs(rmi_dev);
- rmi_free_function_list(rmi_dev);
-
-@@ -1223,9 +1241,15 @@ static int rmi_driver_probe(struct device *dev)
- }
- }
-
-- retval = rmi_irq_init(rmi_dev);
-- if (retval < 0)
-- goto err_destroy_functions;
-+ if (pdata->irq) {
-+ retval = rmi_irq_init(rmi_dev);
-+ if (retval < 0)
-+ goto err_destroy_functions;
-+ }
-+
-+ data->enabled = true;
-+
-+ INIT_WORK(&data->attn_work, attn_callback);
-
- if (data->f01_container->dev.driver) {
- /* Driver already bound, so enable ATTN now. */
-diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
-index e606d250d1d5..26a50a344ab2 100644
---- a/drivers/iommu/iommu.c
-+++ b/drivers/iommu/iommu.c
-@@ -8,6 +8,7 @@
-
- #include <linux/amba/bus.h>
- #include <linux/device.h>
-+#include <linux/dmi.h>
- #include <linux/kernel.h>
- #include <linux/bits.h>
- #include <linux/bug.h>
-@@ -3106,6 +3107,27 @@ int iommu_dev_disable_feature(struct device *dev, enum iommu_dev_features feat)
- }
- EXPORT_SYMBOL_GPL(iommu_dev_disable_feature);
-
-+#ifdef CONFIG_ARM64
-+static int __init iommu_quirks(void)
-+{
-+ const char *vendor, *name;
-+
-+ vendor = dmi_get_system_info(DMI_SYS_VENDOR);
-+ name = dmi_get_system_info(DMI_PRODUCT_NAME);
-+
-+ if (vendor &&
-+ (strncmp(vendor, "GIGABYTE", 8) == 0 && name &&
-+ (strncmp(name, "R120", 4) == 0 ||
-+ strncmp(name, "R270", 4) == 0))) {
-+ pr_warn("Gigabyte %s detected, force iommu passthrough mode", name);
-+ iommu_def_domain_type = IOMMU_DOMAIN_IDENTITY;
-+ }
-+
-+ return 0;
-+}
-+arch_initcall(iommu_quirks);
-+#endif
-+
- /**
- * iommu_setup_default_domain - Set the default_domain for the group
- * @group: Group to change
-diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index eff7f5df08e2..b58145ce7775 100644
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -4433,6 +4433,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084,
- quirk_bridge_cavm_thrx2_pcie_root);
-
-+/*
-+ * PCI BAR 5 is not setup correctly for the on-board AHCI controller
-+ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by
-+ * using BAR 4's resources which are populated correctly and NOT
-+ * actually used by the AHCI controller.
-+ */
-+static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev)
-+{
-+ struct resource *r = &dev->resource[4];
-+
-+ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0))
-+ return;
-+
-+ /* Set BAR5 resource to BAR4 */
-+ dev->resource[5] = *r;
-+
-+ /* Update BAR5 in pci config space */
-+ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start);
-+
-+ /* Clear BAR4's resource */
-+ memset(r, 0, sizeof(*r));
-+}
-+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars);
-+
- /*
- * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero)
- * class code. Fix it.
-diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 35200a7a7355..738378291882 100644
---- a/drivers/scsi/sd.c
-+++ b/drivers/scsi/sd.c
-@@ -118,6 +118,14 @@ static const char *sd_cache_types[] = {
- "write back, no read (daft)"
- };
-
-+static const char *sd_probe_types[] = { "async", "sync" };
-+
-+static char sd_probe_type[6] = "async";
-+module_param_string(probe, sd_probe_type, sizeof(sd_probe_type),
-+ S_IRUGO|S_IWUSR);
-+MODULE_PARM_DESC(probe, "async or sync. Setting to 'sync' disables asynchronous "
-+ "device number assignments (sda, sdb, ...).");
-+
- static void sd_set_flush_flag(struct scsi_disk *sdkp)
- {
- bool wc = false, fua = false;
-@@ -4084,6 +4092,8 @@ static int __init init_sd(void)
- goto err_out_class;
- }
-
-+ if (!strcmp(sd_probe_type, "sync"))
-+ sd_template.gendrv.probe_type = PROBE_FORCE_SYNCHRONOUS;
- err = scsi_register_driver(&sd_template.gendrv);
- if (err)
- goto err_out_driver;
-diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 48e1e43780eb..e0d40a9e1101 100644
---- a/drivers/usb/core/hub.c
-+++ b/drivers/usb/core/hub.c
-@@ -5816,6 +5816,13 @@ static void hub_event(struct work_struct *work)
- (u16) hub->change_bits[0],
- (u16) hub->event_bits[0]);
-
-+ /* Don't disconnect USB-SATA on TrimSlice */
-+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) {
-+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) &&
-+ (hub->event_bits[0] == 0x2))
-+ hub->event_bits[0] = 0;
-+ }
-+
- /* Lock the device, then check to see if we were
- * disconnected while waiting for the lock to succeed. */
- usb_lock_device(hdev);
-diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
-index 18c8f168b153..055cdec2e9ad 100644
---- a/fs/xfs/xfs_iomap.c
-+++ b/fs/xfs/xfs_iomap.c
-@@ -1323,7 +1323,7 @@ xfs_seek_iomap_begin(
- if (cow_fsb != NULLFILEOFF && cow_fsb <= offset_fsb) {
- if (data_fsb < cow_fsb + cmap.br_blockcount)
- end_fsb = min(end_fsb, data_fsb);
-- xfs_trim_extent(&cmap, offset_fsb, end_fsb);
-+ xfs_trim_extent(&cmap, offset_fsb, end_fsb - offset_fsb);
- seq = xfs_iomap_inode_sequence(ip, IOMAP_F_SHARED);
- error = xfs_bmbt_to_iomap(ip, iomap, &cmap, flags,
- IOMAP_F_SHARED, seq);
-@@ -1348,7 +1348,7 @@ xfs_seek_iomap_begin(
- imap.br_state = XFS_EXT_NORM;
- done:
- seq = xfs_iomap_inode_sequence(ip, 0);
-- xfs_trim_extent(&imap, offset_fsb, end_fsb);
-+ xfs_trim_extent(&imap, offset_fsb, end_fsb - offset_fsb);
- error = xfs_bmbt_to_iomap(ip, iomap, &imap, flags, 0, seq);
- out_unlock:
- xfs_iunlock(ip, lockmode);
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index c74f47711f0b..e7bbf3b7a938 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -45,6 +45,8 @@ struct screen_info;
- #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1)))
- #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1)))
-
-+#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1)))
-+
- typedef unsigned long efi_status_t;
- typedef u8 efi_bool_t;
- typedef u16 efi_char16_t; /* UNICODE character */
-@@ -865,6 +867,14 @@ static inline int efi_range_is_wc(unsigned long start, unsigned long len)
- #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
- #define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */
- #define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */
-+#define EFI_SECURE_BOOT 13 /* Are we in Secure Boot mode? */
-+
-+enum efi_secureboot_mode {
-+ efi_secureboot_mode_unset,
-+ efi_secureboot_mode_unknown,
-+ efi_secureboot_mode_disabled,
-+ efi_secureboot_mode_enabled,
-+};
-
- #ifdef CONFIG_EFI
- /*
-@@ -876,6 +886,8 @@ static inline bool efi_enabled(int feature)
- }
- extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused);
-
-+extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode);
-+
- bool __pure __efi_soft_reserve_enabled(void);
-
- static inline bool __pure efi_soft_reserve_enabled(void)
-@@ -897,6 +909,8 @@ static inline bool efi_enabled(int feature)
- static inline void
- efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {}
-
-+static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {}
-+
- static inline bool efi_soft_reserve_enabled(void)
- {
- return false;
-@@ -911,6 +925,7 @@ static inline void efi_find_mirror(void) {}
- #endif
-
- extern int efi_status_to_err(efi_status_t status);
-+extern const char *efi_status_to_str(efi_status_t status);
-
- /*
- * Variable Attributes
-@@ -1127,13 +1142,6 @@ static inline bool efi_runtime_disabled(void) { return true; }
- extern void efi_call_virt_check_flags(unsigned long flags, const void *caller);
- extern unsigned long efi_call_virt_save_flags(void);
-
--enum efi_secureboot_mode {
-- efi_secureboot_mode_unset,
-- efi_secureboot_mode_unknown,
-- efi_secureboot_mode_disabled,
-- efi_secureboot_mode_enabled,
--};
--
- static inline
- enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var)
- {
-diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
-index f9b5baf1b5f4..60df2a4b2815 100644
---- a/include/linux/lsm_hook_defs.h
-+++ b/include/linux/lsm_hook_defs.h
-@@ -411,6 +411,8 @@ LSM_HOOK(void, LSM_RET_VOID, bpf_prog_free_security, struct bpf_prog_aux *aux)
- #endif /* CONFIG_BPF_SYSCALL */
-
- LSM_HOOK(int, 0, locked_down, enum lockdown_reason what)
-+LSM_HOOK(int, 0, lock_kernel_down, const char *where, enum lockdown_reason level)
-+
-
- #ifdef CONFIG_PERF_EVENTS
- LSM_HOOK(int, 0, perf_event_open, struct perf_event_attr *attr, int type)
-diff --git a/include/linux/module.h b/include/linux/module.h
-index 96bc462872c0..3ce91ff5db5a 100644
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -418,6 +418,7 @@ struct module {
- struct module_attribute *modinfo_attrs;
- const char *version;
- const char *srcversion;
-+ const char *rhelversion;
- struct kobject *holders_dir;
-
- /* Exported symbols */
-diff --git a/include/linux/rh_kabi.h b/include/linux/rh_kabi.h
-new file mode 100644
-index 000000000000..e0d3353802bb
---- /dev/null
-+++ b/include/linux/rh_kabi.h
-@@ -0,0 +1,172 @@
-+/*
-+ * rh_kabi.h - Red Hat kABI abstraction header
-+ *
-+ * Copyright (c) 2014 Don Zickus
-+ * Copyright (c) 2015-2017 Jiri Benc
-+ * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa
-+ * Copyright (c) 2016-2018 Prarit Bhargava
-+ * Copyright (c) 2017 Paolo Abeni, Larry Woodman
-+ *
-+ * This file is released under the GPLv2.
-+ * See the file COPYING for more details.
-+ *
-+ * These kabi macros hide the changes from the kabi checker and from the
-+ * process that computes the exported symbols' checksums.
-+ * They have 2 variants: one (defined under __GENKSYMS__) used when
-+ * generating the checksums, and the other used when building the kernel's
-+ * binaries.
-+ *
-+ * The use of these macros does not guarantee that the usage and modification
-+ * of code is correct. As with all Red Hat only changes, an engineer must
-+ * explain why the use of the macro is valid in the patch containing the
-+ * changes.
-+ *
-+ */
-+
-+#ifndef _LINUX_RH_KABI_H
-+#define _LINUX_RH_KABI_H
-+
-+#include <linux/compiler.h>
-+#include <linux/stringify.h>
-+
-+/*
-+ * RH_KABI_CONST
-+ * Adds a new const modifier to a function parameter preserving the old
-+ * checksum.
-+ *
-+ * RH_KABI_DEPRECATE
-+ * Mark the element as deprecated and make it unusable by modules while
-+ * preserving kABI checksums.
-+ *
-+ * RH_KABI_DEPRECATE_FN
-+ * Mark the function pointer as deprecated and make it unusable by modules
-+ * while preserving kABI checksums.
-+ *
-+ * RH_KABI_EXTEND
-+ * Simple macro for adding a new element to a struct.
-+ *
-+ * Warning: only use if a hole exists for _all_ arches. Use pahole to verify.
-+ *
-+ * RH_KABI_FILL_HOLE
-+ * Simple macro for filling a hole in a struct.
-+ *
-+ * RH_KABI_RENAME
-+ * Simple macro for renaming an element without changing its type. This
-+ * macro can be used in bitfields, for example.
-+ *
-+ * NOTE: does not include the final ';'
-+ *
-+ * RH_KABI_REPLACE
-+ * Simple replacement of _orig with a union of _orig and _new.
-+ *
-+ * The RH_KABI_REPLACE* macros attempt to add the ability to use the '_new'
-+ * element while preserving size alignment with the '_orig' element.
-+ *
-+ * The #ifdef __GENKSYMS__ preserves the kABI agreement, while the anonymous
-+ * union structure preserves the size alignment (assuming the '_new' element
-+ * is not bigger than the '_orig' element).
-+ *
-+ * RH_KABI_REPLACE_UNSAFE
-+ * Unsafe version of RH_KABI_REPLACE. Only use for typedefs.
-+ *
-+ * RH_KABI_FORCE_CHANGE
-+ * Force change of the symbol checksum. The argument of the macro is a
-+ * version for cases we need to do this more than once.
-+ *
-+ * This macro does the opposite: it changes the symbol checksum without
-+ * actually changing anything about the exported symbol. It is useful for
-+ * symbols that are not whitelisted, we're changing them in an
-+ * incompatible way and want to prevent 3rd party modules to silently
-+ * corrupt memory. Instead, by changing the symbol checksum, such modules
-+ * won't be loaded by the kernel. This macro should only be used as a
-+ * last resort when all other KABI workarounds have failed.
-+ *
-+ * NOTE
-+ * Don't use ';' after these macros as it messes up the kABI checker by
-+ * changing what the resulting token string looks like. Instead let this
-+ * macro add the ';' so it can be properly hidden from the kABI checker
-+ * (mainly for RH_KABI_EXTEND, but applied to all macros for uniformity).
-+ *
-+ */
-+#ifdef __GENKSYMS__
-+
-+# define RH_KABI_CONST
-+# define RH_KABI_EXTEND(_new)
-+# define RH_KABI_FILL_HOLE(_new)
-+# define RH_KABI_FORCE_CHANGE(ver) __attribute__((rh_kabi_change ## ver))
-+# define RH_KABI_RENAME(_orig, _new) _orig
-+
-+# define _RH_KABI_DEPRECATE(_type, _orig) _type _orig
-+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args)
-+# define _RH_KABI_REPLACE(_orig, _new) _orig
-+# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _orig
-+
-+#else
-+
-+# define RH_KABI_ALIGN_WARNING ". Disable CONFIG_RH_KABI_SIZE_ALIGN_CHECKS if debugging."
-+
-+# define RH_KABI_CONST const
-+# define RH_KABI_EXTEND(_new) _new;
-+# define RH_KABI_FILL_HOLE(_new) _new;
-+# define RH_KABI_FORCE_CHANGE(ver)
-+# define RH_KABI_RENAME(_orig, _new) _new
-+
-+
-+#if IS_BUILTIN(CONFIG_RH_KABI_SIZE_ALIGN_CHECKS)
-+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new) \
-+ union { \
-+ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \
-+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) RH_KABI_ALIGN_WARNING); \
-+ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \
-+ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) RH_KABI_ALIGN_WARNING); \
-+ }
-+#else
-+# define __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new)
-+#endif
-+
-+# define _RH_KABI_DEPRECATE(_type, _orig) _type rh_reserved_##_orig
-+# define _RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \
-+ _type (* rh_reserved_##_orig)(_args)
-+# define _RH_KABI_REPLACE(_orig, _new) \
-+ union { \
-+ _new; \
-+ struct { \
-+ _orig; \
-+ } __UNIQUE_ID(rh_kabi_hide); \
-+ __RH_KABI_CHECK_SIZE_ALIGN(_orig, _new); \
-+ }
-+# define _RH_KABI_REPLACE_UNSAFE(_orig, _new) _new
-+
-+#endif /* __GENKSYMS__ */
-+
-+/* semicolon added wrappers for the RH_KABI_REPLACE macros */
-+# define RH_KABI_DEPRECATE(_type, _orig) _RH_KABI_DEPRECATE(_type, _orig);
-+# define RH_KABI_DEPRECATE_FN(_type, _orig, _args...) \
-+ _RH_KABI_DEPRECATE_FN(_type, _orig, _args);
-+# define RH_KABI_REPLACE(_orig, _new) _RH_KABI_REPLACE(_orig, _new);
-+# define RH_KABI_REPLACE_UNSAFE(_orig, _new) _RH_KABI_REPLACE_UNSAFE(_orig, _new);
-+/*
-+ * Macro for breaking up a random element into two smaller chunks using an
-+ * anonymous struct inside an anonymous union.
-+ */
-+# define RH_KABI_REPLACE2(orig, _new1, _new2) RH_KABI_REPLACE(orig, struct{ _new1; _new2;})
-+
-+# define RH_KABI_RESERVE(n) _RH_KABI_RESERVE(n);
-+/*
-+ * Simple wrappers to replace standard Red Hat reserved elements.
-+ */
-+# define RH_KABI_USE(n, _new) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), _new)
-+/*
-+ * Macros for breaking up a reserved element into two smaller chunks using
-+ * an anonymous struct inside an anonymous union.
-+ */
-+# define RH_KABI_USE2(n, _new1, _new2) RH_KABI_REPLACE(_RH_KABI_RESERVE(n), struct{ _new1; _new2; })
-+
-+/*
-+ * We tried to standardize on Red Hat reserved names. These wrappers
-+ * leverage those common names making it easier to read and find in the
-+ * code.
-+ */
-+# define _RH_KABI_RESERVE(n) unsigned long rh_reserved##n
-+
-+#endif /* _LINUX_RH_KABI_H */
-diff --git a/include/linux/rmi.h b/include/linux/rmi.h
-index ab7eea01ab42..fff7c5f737fc 100644
---- a/include/linux/rmi.h
-+++ b/include/linux/rmi.h
-@@ -364,6 +364,7 @@ struct rmi_driver_data {
-
- struct rmi4_attn_data attn_data;
- DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16);
-+ struct work_struct attn_work;
- };
-
- int rmi_register_transport_device(struct rmi_transport_dev *xport);
-diff --git a/include/linux/security.h b/include/linux/security.h
-index 3180d823e023..110bca09a1c3 100644
---- a/include/linux/security.h
-+++ b/include/linux/security.h
-@@ -494,6 +494,7 @@ int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen);
- int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen);
- int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen);
- int security_locked_down(enum lockdown_reason what);
-+int security_lock_kernel_down(const char *where, enum lockdown_reason level);
- int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len,
- void *val, size_t val_len, u64 id, u64 flags);
- #else /* CONFIG_SECURITY */
-@@ -1433,6 +1434,10 @@ static inline int security_locked_down(enum lockdown_reason what)
- {
- return 0;
- }
-+static inline int security_lock_kernel_down(const char *where, enum lockdown_reason level)
-+{
-+ return 0;
-+}
- static inline int lsm_fill_user_ctx(struct lsm_ctx __user *uctx,
- u32 *uctx_len, void *val, size_t val_len,
- u64 id, u64 flags)
-diff --git a/kernel/module/main.c b/kernel/module/main.c
-index b0b99348e1a8..c35cc48d782c 100644
---- a/kernel/module/main.c
-+++ b/kernel/module/main.c
-@@ -528,6 +528,7 @@ static struct module_attribute modinfo_##field = { \
-
- MODINFO_ATTR(version);
- MODINFO_ATTR(srcversion);
-+MODINFO_ATTR(rhelversion);
-
- static struct {
- char name[MODULE_NAME_LEN + 1];
-@@ -980,6 +981,7 @@ struct module_attribute *modinfo_attrs[] = {
- &module_uevent,
- &modinfo_version,
- &modinfo_srcversion,
-+ &modinfo_rhelversion,
- &modinfo_initstate,
- &modinfo_coresize,
- #ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
-diff --git a/kernel/module/signing.c b/kernel/module/signing.c
-index a2ff4242e623..f0d2be1ee4f1 100644
---- a/kernel/module/signing.c
-+++ b/kernel/module/signing.c
-@@ -61,10 +61,17 @@ int mod_verify_sig(const void *mod, struct load_info *info)
- modlen -= sig_len + sizeof(ms);
- info->len = modlen;
-
-- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
-+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
- VERIFY_USE_SECONDARY_KEYRING,
- VERIFYING_MODULE_SIGNATURE,
- NULL, NULL);
-+ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) {
-+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
-+ VERIFY_USE_PLATFORM_KEYRING,
-+ VERIFYING_MODULE_SIGNATURE,
-+ NULL, NULL);
-+ }
-+ return ret;
- }
-
- int module_sig_check(struct load_info *info, int flags)
-diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index ce686ebf5591..0d28efddb253 100644
---- a/scripts/mod/modpost.c
-+++ b/scripts/mod/modpost.c
-@@ -22,6 +22,7 @@
- #include <errno.h>
- #include "modpost.h"
- #include "../../include/linux/license.h"
-+#include "../../include/generated/uapi/linux/version.h"
-
- static bool module_enabled;
- /* Are we using CONFIG_MODVERSIONS? */
-@@ -1997,6 +1998,12 @@ static void write_buf(struct buffer *b, const char *fname)
- }
- }
-
-+static void add_rhelversion(struct buffer *b, struct module *mod)
-+{
-+ buf_printf(b, "MODULE_INFO(rhelversion, \"%d.%d\");\n", RHEL_MAJOR,
-+ RHEL_MINOR);
-+}
-+
- static void write_if_changed(struct buffer *b, const char *fname)
- {
- char *tmp;
-@@ -2057,6 +2064,7 @@ static void write_mod_c_file(struct module *mod)
- add_depends(&buf, mod);
- add_moddevtable(&buf, mod);
- add_srcversion(&buf, mod);
-+ add_rhelversion(&buf, mod);
-
- ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
- if (ret >= sizeof(fname)) {
-diff --git a/scripts/tags.sh b/scripts/tags.sh
-index 191e0461d6d5..e6f418b3e948 100755
---- a/scripts/tags.sh
-+++ b/scripts/tags.sh
-@@ -16,6 +16,8 @@ fi
- ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )"
- # tags and cscope files should also ignore MODVERSION *.mod.c files
- ignore="$ignore ( -name *.mod.c ) -prune -o"
-+# RHEL tags and cscope should also ignore redhat/rpm
-+ignore="$ignore ( -path redhat/rpm ) -prune -o"
-
- # ignore arbitrary directories
- if [ -n "${IGNORE_DIRS}" ]; then
-diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c
-index d1fdd113450a..182e8090cfe8 100644
---- a/security/integrity/platform_certs/load_uefi.c
-+++ b/security/integrity/platform_certs/load_uefi.c
-@@ -74,7 +74,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid,
- return NULL;
-
- if (*status != EFI_BUFFER_TOO_SMALL) {
-- pr_err("Couldn't get size: 0x%lx\n", *status);
-+ pr_err("Couldn't get size: %s (0x%lx)\n",
-+ efi_status_to_str(*status), *status);
- return NULL;
- }
-
-@@ -85,7 +86,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid,
- *status = efi.get_variable(name, guid, NULL, &lsize, db);
- if (*status != EFI_SUCCESS) {
- kfree(db);
-- pr_err("Error reading db var: 0x%lx\n", *status);
-+ pr_err("Error reading db var: %s (0x%lx)\n",
-+ efi_status_to_str(*status), *status);
- return NULL;
- }
-
-diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig
-index e84ddf484010..d0501353a4b9 100644
---- a/security/lockdown/Kconfig
-+++ b/security/lockdown/Kconfig
-@@ -16,6 +16,19 @@ config SECURITY_LOCKDOWN_LSM_EARLY
- subsystem is fully initialised. If enabled, lockdown will
- unconditionally be called before any other LSMs.
-
-+config LOCK_DOWN_IN_EFI_SECURE_BOOT
-+ bool "Lock down the kernel in EFI Secure Boot mode"
-+ default n
-+ depends on EFI && SECURITY_LOCKDOWN_LSM_EARLY
-+ help
-+ UEFI Secure Boot provides a mechanism for ensuring that the firmware
-+ will only load signed bootloaders and kernels. Secure boot mode may
-+ be determined from EFI variables provided by the system firmware if
-+ not indicated by the boot parameters.
-+
-+ Enabling this option results in kernel lockdown being triggered if
-+ EFI Secure Boot is set.
-+
- choice
- prompt "Kernel default lockdown mode"
- default LOCK_DOWN_KERNEL_FORCE_NONE
-diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c
-index cd84d8ea1dfb..e4c70a0312bc 100644
---- a/security/lockdown/lockdown.c
-+++ b/security/lockdown/lockdown.c
-@@ -74,6 +74,7 @@ static int lockdown_is_locked_down(enum lockdown_reason what)
-
- static struct security_hook_list lockdown_hooks[] __ro_after_init = {
- LSM_HOOK_INIT(locked_down, lockdown_is_locked_down),
-+ LSM_HOOK_INIT(lock_kernel_down, lock_kernel_down),
- };
-
- const struct lsm_id lockdown_lsmid = {
-diff --git a/security/security.c b/security/security.c
-index a344b8fa5530..51b5bea3b0c7 100644
---- a/security/security.c
-+++ b/security/security.c
-@@ -5517,6 +5517,18 @@ int security_locked_down(enum lockdown_reason what)
- }
- EXPORT_SYMBOL(security_locked_down);
-
-+/**
-+ * security_lock_kernel_down() - Put the kernel into lock-down mode.
-+ *
-+ * @where: Where the lock-down is originating from (e.g. command line option)
-+ * @level: The lock-down level (can only increase)
-+ */
-+int security_lock_kernel_down(const char *where, enum lockdown_reason level)
-+{
-+ return call_int_hook(lock_kernel_down, 0, where, level);
-+}
-+EXPORT_SYMBOL(security_lock_kernel_down);
-+
- #ifdef CONFIG_PERF_EVENTS
- /**
- * security_perf_event_open() - Check if a perf event open is allowed
diff --git a/SOURCES/platform-chrome-cros_ec_lpc-add-support-for-AMD-Framework-Laptops.patch b/SOURCES/platform-chrome-cros_ec_lpc-add-support-for-AMD-Framework-Laptops.patch
deleted file mode 100644
index a64df27..0000000
--- a/SOURCES/platform-chrome-cros_ec_lpc-add-support-for-AMD-Framework-Laptops.patch
+++ /dev/null
@@ -1,564 +0,0 @@
-From: "Dustin L. Howett" <dustin@howett.net>
-Subject: [PATCH v3 1/4] platform/chrome: cros_ec_lpc: introduce a priv struct
- for the lpc device
-Date: Tue, 2 Apr 2024 19:47:10 -0500
-
-lpc_driver_data stores the MMIO port base for EC mapped memory.
-cros_ec_lpc_readmem uses this port base instead of hardcoding
-EC_LPC_ADDR_MEMMAP.
-
-Signed-off-by: Dustin L. Howett <dustin@howett.net>
----
- drivers/platform/chrome/cros_ec_lpc.c | 25 +++++++++++++++++++++----
- 1 file changed, 21 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
-index f0f3d3d56157..5e2856c5185b 100644
---- a/drivers/platform/chrome/cros_ec_lpc.c
-+++ b/drivers/platform/chrome/cros_ec_lpc.c
-@@ -34,6 +34,14 @@
- /* True if ACPI device is present */
- static bool cros_ec_lpc_acpi_device_found;
-
-+/**
-+ * struct cros_ec_lpc - LPC device-specific data
-+ * @mmio_memory_base: The first I/O port addressing EC mapped memory.
-+ */
-+struct cros_ec_lpc {
-+ u16 mmio_memory_base;
-+};
-+
- /**
- * struct lpc_driver_ops - LPC driver operations
- * @read: Copy length bytes from EC address offset into buffer dest. Returns
-@@ -290,6 +298,7 @@ static int cros_ec_cmd_xfer_lpc(struct cros_ec_device *ec,
- static int cros_ec_lpc_readmem(struct cros_ec_device *ec, unsigned int offset,
- unsigned int bytes, void *dest)
- {
-+ struct cros_ec_lpc *ec_lpc = ec->priv;
- int i = offset;
- char *s = dest;
- int cnt = 0;
-@@ -299,13 +308,13 @@ static int cros_ec_lpc_readmem(struct cros_ec_device *ec, unsigned int offset,
-
- /* fixed length */
- if (bytes) {
-- cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + offset, bytes, s);
-+ cros_ec_lpc_ops.read(ec_lpc->mmio_memory_base + offset, bytes, s);
- return bytes;
- }
-
- /* string */
- for (; i < EC_MEMMAP_SIZE; i++, s++) {
-- cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + i, 1, s);
-+ cros_ec_lpc_ops.read(ec_lpc->mmio_memory_base + i, 1, s);
- cnt++;
- if (!*s)
- break;
-@@ -353,9 +362,16 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
- struct acpi_device *adev;
- acpi_status status;
- struct cros_ec_device *ec_dev;
-+ struct cros_ec_lpc *ec_lpc;
- u8 buf[2] = {};
- int irq, ret;
-
-+ ec_lpc = devm_kzalloc(dev, sizeof(*ec_lpc), GFP_KERNEL);
-+ if (!ec_lpc)
-+ return -ENOMEM;
-+
-+ ec_lpc->mmio_memory_base = EC_LPC_ADDR_MEMMAP;
-+
- /*
- * The Framework Laptop (and possibly other non-ChromeOS devices)
- * only exposes the eight I/O ports that are required for the Microchip EC.
-@@ -380,7 +396,7 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
- cros_ec_lpc_ops.write = cros_ec_lpc_mec_write_bytes;
- cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID, 2, buf);
- if (buf[0] != 'E' || buf[1] != 'C') {
-- if (!devm_request_region(dev, EC_LPC_ADDR_MEMMAP, EC_MEMMAP_SIZE,
-+ if (!devm_request_region(dev, ec_lpc->mmio_memory_base, EC_MEMMAP_SIZE,
- dev_name(dev))) {
- dev_err(dev, "couldn't reserve memmap region\n");
- return -EBUSY;
-@@ -389,7 +405,7 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
- /* Re-assign read/write operations for the non MEC variant */
- cros_ec_lpc_ops.read = cros_ec_lpc_read_bytes;
- cros_ec_lpc_ops.write = cros_ec_lpc_write_bytes;
-- cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID, 2,
-+ cros_ec_lpc_ops.read(ec_lpc->mmio_memory_base + EC_MEMMAP_ID, 2,
- buf);
- if (buf[0] != 'E' || buf[1] != 'C') {
- dev_err(dev, "EC ID not detected\n");
-@@ -423,6 +439,7 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
- ec_dev->din_size = sizeof(struct ec_host_response) +
- sizeof(struct ec_response_get_protocol_info);
- ec_dev->dout_size = sizeof(struct ec_host_request);
-+ ec_dev->priv = ec_lpc;
-
- /*
- * Some boards do not have an IRQ allotted for cros_ec_lpc,
-
-From patchwork Wed Apr 3 00:47:11 2024
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Dustin Howett <dustin@howett.net>
-X-Patchwork-Id: 13614856
-Received: from mail-yb1-f175.google.com (mail-yb1-f175.google.com
- [209.85.219.175])
- (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
- (No client certificate requested)
- by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B41BD27D
- for <chrome-platform@lists.linux.dev>; Wed, 3 Apr 2024 00:47:30 +0000 (UTC)
-Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=209.85.219.175
-ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
- t=1712105252; cv=none;
- b=KzVQkN5mO4kYxC99UujzH9Kwjx7a/o1kKeK1FsRl5VI/O1n6NN8uX+pFElVJ/6YvmAti2BHvcqHiwXanoPDZtawjdIO8IGbEgxbwbPRxUmRvUEOKwfso34i5DQlKNFQapsFYiHYr0aWvn+nlrgYzGl7PSHdzp2CMgf1naMdQ8A8=
-ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
- s=arc-20240116; t=1712105252; c=relaxed/simple;
- bh=HXnZp8eJBUARVEVrVWITWA25zr6AzVh0UVSiZ0BpyzY=;
- h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
- MIME-Version;
- b=W7OUqjwTgtPwa9ErQgujvl4KkJdxF3/sZUht1LVvm3dw1VnOlkSRqKPDQ3cBUJnCNGt3I3skqvoQPBGze2Po7v0S3if4KYnGwaXhfzQx6EgRy/h/UciLesq0gzOCzqYhiCM69jPx5UeiV3+sYldko2iQs5I7Nye86pN6GG+ly08=
-ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net;
- spf=none smtp.mailfrom=howett.net;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b=ei6knZFe;
- arc=none smtp.client-ip=209.85.219.175
-Authentication-Results: smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- spf=none smtp.mailfrom=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b="ei6knZFe"
-Received: by mail-yb1-f175.google.com with SMTP id
- 3f1490d57ef6-dc74435c428so5590615276.2
- for <chrome-platform@lists.linux.dev>;
- Tue, 02 Apr 2024 17:47:30 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=howett-net.20230601.gappssmtp.com; s=20230601; t=1712105250;
- x=1712710050; darn=lists.linux.dev;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:from:to:cc:subject:date
- :message-id:reply-to;
- bh=pCPD8SBdw4TxfzxAbhu7UH7fJa0bl/484BhCG5m0IPs=;
- b=ei6knZFekbJaufHGawdGO88Ss75DtMtcU4jKEv7xqCglcgD+sxcjJpQqG8ffX76UM1
- KlI8Ys8z56lza3jA0j+RtqutvMAzSHJRvAkjIJN5wxbXFlEPGiYT0XmyhrzYdUQCv22J
- v8+/yVmJsIDnVYrSIEIf83YLcZEOdEomKxCKZ5FHPYj2NcchB+h4LgOLDscXWMH2rw6d
- Nks/Zq11ls93Eqh+oMNZ719k/L00cg/v4ZFf0d4cu/+K5VZu+EWR5HPFtJu69BzYi0AZ
- WU+TKjeraYhy20zZ3yjkdzTBwIUaMR27XcQ9fnDOfPgYhUkmDVkDTwFsNuRib8S1bts6
- PvIQ==
-X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=1e100.net; s=20230601; t=1712105250; x=1712710050;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
- :subject:date:message-id:reply-to;
- bh=pCPD8SBdw4TxfzxAbhu7UH7fJa0bl/484BhCG5m0IPs=;
- b=G4YrI0d66EWrGBxA4KCcXzIdwgAJD8acLXXg4uod/3exp0WsDY0cB2AgJLHfVdT/w3
- eA+3nPsRn553SGFWGzMJGksL+U/L4icnjBuaRUj0lKQ3ScnNuihptV89khfboi5QoRdh
- 9JcSemvIXeIxBjMSvEoil++c5FtDGOKesABjHj7jaVlrSXjJa7lS5h+1HPsGb09PuWnY
- YIvHuoreEUnRKUtebtcuiCUERe01/vKyioCHTOBerztIivkSvPmJrpTnIx/4Nks+iL04
- 1KcAhmgsn0y5XD4bUBP8ESIHyj8hKbH3qNOAKVT/hYoK+eGNCWfgXXFXzJ1W221bOUVk
- 8x/w==
-X-Forwarded-Encrypted: i=1;
- AJvYcCWzPhALUZGXc8U0QXCOcy23tjrB1N2QU323rfU2f8hE5GWNj8wQzmDyZeh1eapv9y+X9LrcxYpQDxl1/9zLfRaXm7+Nv8bfNMXekLGm8FrP
-X-Gm-Message-State: AOJu0YzeSomM2OuIqEdLtbO59NHIDq2YCKSXgw+yUq4/d5MzDxWhsxym
- 7fVTZRV19VeVUknbWWhRurrfyoUy4EXAHog+SxcEumE/wvBRmZ30aMVKyCJGKg==
-X-Google-Smtp-Source:
- AGHT+IGlmMEqSaylN2czHLC7hbud+jofzhydnmXZgE4zIhXgIE35vbHx8zJvo5SA4U7lc/wP335xew==
-X-Received: by 2002:a5b:183:0:b0:dcd:24b6:1ae7 with SMTP id
- r3-20020a5b0183000000b00dcd24b61ae7mr11463402ybl.63.1712105250093;
- Tue, 02 Apr 2024 17:47:30 -0700 (PDT)
-Received: from tycho.delfino.n.howett.net
- (99-107-94-179.lightspeed.stlsmo.sbcglobal.net. [99.107.94.179])
- by smtp.googlemail.com with ESMTPSA id
- h15-20020a05620a13ef00b00789effdd500sm4700834qkl.76.2024.04.02.17.47.29
- (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
- Tue, 02 Apr 2024 17:47:29 -0700 (PDT)
-From: "Dustin L. Howett" <dustin@howett.net>
-To: Tzung-Bi Shih <tzungbi@kernel.org>,
- Guenter Roeck <groeck@chromium.org>,
- chrome-platform@lists.linux.dev
-Cc: "Dustin L. Howett" <dustin@howett.net>
-Subject: [PATCH v3 2/4] platform/chrome: cros_ec_lpc: pass driver_data from
- DMI to the device
-Date: Tue, 2 Apr 2024 19:47:11 -0500
-Message-ID: <20240403004713.130365-3-dustin@howett.net>
-X-Mailer: git-send-email 2.43.0
-In-Reply-To: <20240403004713.130365-1-dustin@howett.net>
-References: <20231126192452.97824-1-dustin@howett.net>
- <20240403004713.130365-1-dustin@howett.net>
-Precedence: bulk
-X-Mailing-List: chrome-platform@lists.linux.dev
-List-Id: <chrome-platform.lists.linux.dev>
-List-Subscribe: <mailto:chrome-platform+subscribe@lists.linux.dev>
-List-Unsubscribe: <mailto:chrome-platform+unsubscribe@lists.linux.dev>
-MIME-Version: 1.0
-
-lpc_driver_data will be stored in drvdata until probe is complete.
-
-Signed-off-by: Dustin L. Howett <dustin@howett.net>
----
- drivers/platform/chrome/cros_ec_lpc.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
-index 5e2856c5185b..b3aa60e0feb3 100644
---- a/drivers/platform/chrome/cros_ec_lpc.c
-+++ b/drivers/platform/chrome/cros_ec_lpc.c
-@@ -627,14 +627,16 @@ static int __init cros_ec_lpc_init(void)
- {
- int ret;
- acpi_status status;
-+ const struct dmi_system_id *dmi_match;
-
- status = acpi_get_devices(ACPI_DRV_NAME, cros_ec_lpc_parse_device,
- &cros_ec_lpc_acpi_device_found, NULL);
- if (ACPI_FAILURE(status))
- pr_warn(DRV_NAME ": Looking for %s failed\n", ACPI_DRV_NAME);
-
-- if (!cros_ec_lpc_acpi_device_found &&
-- !dmi_check_system(cros_ec_lpc_dmi_table)) {
-+ dmi_match = dmi_first_match(cros_ec_lpc_dmi_table);
-+
-+ if (!cros_ec_lpc_acpi_device_found && !dmi_match) {
- pr_err(DRV_NAME ": unsupported system.\n");
- return -ENODEV;
- }
-@@ -647,6 +649,9 @@ static int __init cros_ec_lpc_init(void)
- }
-
- if (!cros_ec_lpc_acpi_device_found) {
-+ /* Pass the DMI match's driver data down to the platform device */
-+ platform_set_drvdata(&cros_ec_lpc_device, dmi_match->driver_data);
-+
- /* Register the device, and it'll get hooked up automatically */
- ret = platform_device_register(&cros_ec_lpc_device);
- if (ret) {
-
-From patchwork Wed Apr 3 00:47:12 2024
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Dustin Howett <dustin@howett.net>
-X-Patchwork-Id: 13614857
-Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com
- [209.85.222.177])
- (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
- (No client certificate requested)
- by smtp.subspace.kernel.org (Postfix) with ESMTPS id F03B8522A
- for <chrome-platform@lists.linux.dev>; Wed, 3 Apr 2024 00:47:31 +0000 (UTC)
-Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=209.85.222.177
-ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
- t=1712105253; cv=none;
- b=FViy0RqrzRC2xk/KW08YIS4XgSK3pxfOhhtyaBuNELR6a2J3mCG+i+8qKGHdFPXUn75VIesXtRN2eUSS1gqiQ9m7jWHygAsRMaB5wnRs8fhn0WR8dk3S7D3sBUTwqEVG3mvzP2z8/656QY5xPmAoWdhWbLt1kLe4pOU1ncbM/j4=
-ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
- s=arc-20240116; t=1712105253; c=relaxed/simple;
- bh=ypOZTAcjlL+1cFLM3zOXHHIuCrcmEC4EJUNjNg4fUuU=;
- h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
- MIME-Version;
- b=hETliVQfEth7Os0i/QfZEZhcMcjDnxXDmr2tgkC18f3rwsU1sMIVQYpRiSSN8VUEABMvYttB4sv5s5KSFQACv1beBx8bldflHoj7KnOwN9ctNMZ8mNgulIjIHLRS1GyQfbzGJWWW/XCVYIXv5Qc131PZndxt3ddCfuCVw+cKY5Y=
-ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net;
- spf=none smtp.mailfrom=howett.net;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b=xgyj4hNm;
- arc=none smtp.client-ip=209.85.222.177
-Authentication-Results: smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- spf=none smtp.mailfrom=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b="xgyj4hNm"
-Received: by mail-qk1-f177.google.com with SMTP id
- af79cd13be357-789d0c90cadso373609285a.3
- for <chrome-platform@lists.linux.dev>;
- Tue, 02 Apr 2024 17:47:31 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=howett-net.20230601.gappssmtp.com; s=20230601; t=1712105251;
- x=1712710051; darn=lists.linux.dev;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:from:to:cc:subject:date
- :message-id:reply-to;
- bh=y7t4ZRkpXwioaVpNshtIgWzx1ezII8HKHitPdK2X1SE=;
- b=xgyj4hNmqa+0PjwFmlaeUwolLQUabrd2fxGqfPrhp2TpDLEuXNpqzNUqo3xtWfamKJ
- 30mpYHXnPyavgcm5LAedH+kb1yw8jG2z9sKxLjhKo9QZKfY+pq+rbNP7xmlIRmZTiSfn
- SSRevLJoYq4wXfNAZDtJ7tS4Duf1f72vILFtU1H6GUGk8jhDgv01zcOT3TefxTRs/Yqc
- taDMWVQ3rMRAArictNvbDgyDTi3w06qu/efkfrFPBIvUUswreKvWgrQi1/RaFO8lJC15
- BHONF5bUU2pEarFj+99+7baj+qqJw02KkO3AAGVy7Xx8Z81vMI7fO05h1+uO00WKVxBZ
- bexg==
-X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=1e100.net; s=20230601; t=1712105251; x=1712710051;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
- :subject:date:message-id:reply-to;
- bh=y7t4ZRkpXwioaVpNshtIgWzx1ezII8HKHitPdK2X1SE=;
- b=mA5Ia+75ensGkiF2IzkjqJo6E2DS4+E9nix97R8d0YGZHUVllJNLTtI4CRlo1QAP8n
- m0h4YBzyHQrl9NXfTVOYI0KSZS/MlVCUbcWHmL2nCxyic5yGl5KWYNaaLFoj1AqtyZXL
- 0JD5l15M8m1IHC9pmPiZMkJqyhTh0oC6I7zqxRlmwOM2R6qwT6OXMrLfXVdo/G9xm5Yg
- SBI6a4yHrAj2tLydKt/sQgKcfz2gQjH1N5Ea5EYBeubI6xKaQPBuJ0PXt6N3L1AWdUy4
- FeoxcYMlGodDJBPw38fepMHmGQpYIq7SFFhONUihFY6pmlmE08yVWsyEUCEDxNdEchiJ
- Y6ZQ==
-X-Forwarded-Encrypted: i=1;
- AJvYcCWTtde26X56o732BAANiVUKfwOrIwPu9oA2StpMKYPiLunnpivAeBlpD6JmtlVb4DyblAr8+QTELqk4axQMMbt7YwQNdXVQzpBtg9Wrr/6z
-X-Gm-Message-State: AOJu0YzlRL5fUowkX4Nebh0cvxMV4EJHccPhwA60yqXdkfqsFLZA55jO
- d+oyoXenPFVKGFRNbRM9CCA47+VZ9wAglwsND5Z5GQ5dfcetDrPRJdtWd/qqJA==
-X-Google-Smtp-Source:
- AGHT+IHrUuP+QVWBFq+CVkqAjuL3mAWNmHkZihWsfqU0ClwJW8476gQip5ymF1yGxM4686CCkqqS6g==
-X-Received: by 2002:a05:620a:8325:b0:78a:6bf6:9186 with SMTP id
- pa37-20020a05620a832500b0078a6bf69186mr14758801qkn.66.1712105250885;
- Tue, 02 Apr 2024 17:47:30 -0700 (PDT)
-Received: from tycho.delfino.n.howett.net
- (99-107-94-179.lightspeed.stlsmo.sbcglobal.net. [99.107.94.179])
- by smtp.googlemail.com with ESMTPSA id
- h15-20020a05620a13ef00b00789effdd500sm4700834qkl.76.2024.04.02.17.47.30
- (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
- Tue, 02 Apr 2024 17:47:30 -0700 (PDT)
-From: "Dustin L. Howett" <dustin@howett.net>
-To: Tzung-Bi Shih <tzungbi@kernel.org>,
- Guenter Roeck <groeck@chromium.org>,
- chrome-platform@lists.linux.dev
-Cc: "Dustin L. Howett" <dustin@howett.net>
-Subject: [PATCH v3 3/4] platform/chrome: cros_ec_lpc: add a "quirks" system
-Date: Tue, 2 Apr 2024 19:47:12 -0500
-Message-ID: <20240403004713.130365-4-dustin@howett.net>
-X-Mailer: git-send-email 2.43.0
-In-Reply-To: <20240403004713.130365-1-dustin@howett.net>
-References: <20231126192452.97824-1-dustin@howett.net>
- <20240403004713.130365-1-dustin@howett.net>
-Precedence: bulk
-X-Mailing-List: chrome-platform@lists.linux.dev
-List-Id: <chrome-platform.lists.linux.dev>
-List-Subscribe: <mailto:chrome-platform+subscribe@lists.linux.dev>
-List-Unsubscribe: <mailto:chrome-platform+unsubscribe@lists.linux.dev>
-MIME-Version: 1.0
-
-Some devices ship a ChromeOS EC in a non-standard configuration. Quirks
-allow cros_ec_lpc to account for these non-standard configurations.
-
-It only supports one quirk right now:
-- CROS_EC_LPC_QUIRK_REMAP_MEMORY: use a different port I/O base for
- MMIO to the EC's memory region
-
-Signed-off-by: Dustin L. Howett <dustin@howett.net>
----
- drivers/platform/chrome/cros_ec_lpc.c | 31 +++++++++++++++++++++++++++
- 1 file changed, 31 insertions(+)
-
-diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
-index b3aa60e0feb3..087131f159d4 100644
---- a/drivers/platform/chrome/cros_ec_lpc.c
-+++ b/drivers/platform/chrome/cros_ec_lpc.c
-@@ -34,6 +34,24 @@
- /* True if ACPI device is present */
- static bool cros_ec_lpc_acpi_device_found;
-
-+/*
-+ * Indicates that lpc_driver_data.quirk_mmio_memory_base should
-+ * be used as the base port for EC mapped memory.
-+ */
-+#define CROS_EC_LPC_QUIRK_REMAP_MEMORY BIT(0)
-+
-+/**
-+ * struct lpc_driver_data - driver data attached to a DMI device ID to indicate
-+ * hardware quirks.
-+ * @quirks: a bitfield composed of quirks from CROS_EC_LPC_QUIRK_*
-+ * @quirk_mmio_memory_base: The first I/O port addressing EC mapped memory (used
-+ * when quirk ...REMAP_MEMORY is set.)
-+ */
-+struct lpc_driver_data {
-+ u32 quirks;
-+ u16 quirk_mmio_memory_base;
-+};
-+
- /**
- * struct cros_ec_lpc - LPC device-specific data
- * @mmio_memory_base: The first I/O port addressing EC mapped memory.
-@@ -363,8 +381,10 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
- acpi_status status;
- struct cros_ec_device *ec_dev;
- struct cros_ec_lpc *ec_lpc;
-+ struct lpc_driver_data *driver_data;
- u8 buf[2] = {};
- int irq, ret;
-+ u32 quirks;
-
- ec_lpc = devm_kzalloc(dev, sizeof(*ec_lpc), GFP_KERNEL);
- if (!ec_lpc)
-@@ -372,6 +392,17 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
-
- ec_lpc->mmio_memory_base = EC_LPC_ADDR_MEMMAP;
-
-+ driver_data = platform_get_drvdata(pdev);
-+ if (driver_data) {
-+ quirks = driver_data->quirks;
-+
-+ if (quirks)
-+ dev_info(dev, "loaded with quirks %8.08x\n", quirks);
-+
-+ if (quirks & CROS_EC_LPC_QUIRK_REMAP_MEMORY)
-+ ec_lpc->mmio_memory_base = driver_data->quirk_mmio_memory_base;
-+ }
-+
- /*
- * The Framework Laptop (and possibly other non-ChromeOS devices)
- * only exposes the eight I/O ports that are required for the Microchip EC.
-
-From patchwork Wed Apr 3 00:47:13 2024
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Dustin Howett <dustin@howett.net>
-X-Patchwork-Id: 13614858
-Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com
- [209.85.222.177])
- (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
- (No client certificate requested)
- by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1F415C96
- for <chrome-platform@lists.linux.dev>; Wed, 3 Apr 2024 00:47:32 +0000 (UTC)
-Authentication-Results: smtp.subspace.kernel.org;
- arc=none smtp.client-ip=209.85.222.177
-ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
- t=1712105254; cv=none;
- b=Zilq6iRa6iZxAcTq9qRONZeVOQewDwWpt83TVFsWrzq12TB/VRjRi96wUGam0oJwWqvBnch8qrIdpXTxzgPcBHd7w14HaJGuf7lE6nFYH7kb6iFvEzVrTfp5non1qPLG4EvNToAIFWpyTVR3M1rClMj6BQnQ49T1zXhq/i0iTH0=
-ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
- s=arc-20240116; t=1712105254; c=relaxed/simple;
- bh=OlukQvyyNfN4YIbp8bemDIn20AsxSDov4u4d3Obh+Mk=;
- h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
- MIME-Version;
- b=cg2M9XQOa8HFTAqBuPCekH1JHttXbww0LGRAW+xfEkSdDoSNYxVeqduRhm/spvltKL6bhWfqrQOZs4KNPeOwVMb4o57w7cJVaF1Rxl1g+eNpu9L00gZGc1ptvjaPRfRKrTT11pAlsOgSl1+rI0hZDE4T5Nh3thEBNOqeZPyNBzQ=
-ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net;
- spf=none smtp.mailfrom=howett.net;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b=nb39EBaL;
- arc=none smtp.client-ip=209.85.222.177
-Authentication-Results: smtp.subspace.kernel.org;
- dmarc=none (p=none dis=none) header.from=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- spf=none smtp.mailfrom=howett.net
-Authentication-Results: smtp.subspace.kernel.org;
- dkim=pass (2048-bit key) header.d=howett-net.20230601.gappssmtp.com
- header.i=@howett-net.20230601.gappssmtp.com header.b="nb39EBaL"
-Received: by mail-qk1-f177.google.com with SMTP id
- af79cd13be357-789f00aba19so439188785a.0
- for <chrome-platform@lists.linux.dev>;
- Tue, 02 Apr 2024 17:47:32 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=howett-net.20230601.gappssmtp.com; s=20230601; t=1712105252;
- x=1712710052; darn=lists.linux.dev;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:from:to:cc:subject:date
- :message-id:reply-to;
- bh=s3Nw5roggFkXaKz2IEG0OPqSG8qSsWdEBfGv+6eMYWo=;
- b=nb39EBaL6LnSt+YkfeY6JO/6RpHzZTWR7yiHGWERKiU5wYDJnm65vlFp3WDvkJ6P7J
- MYYrloWmDGU9ksVdi78A0gLDkAIfTUTTGiLdiOT2NJme1/Qmrs0DPP/JIm1b8NUscKC8
- 3HCeMdYn7Wmfjn6BGv6P6wua9wWleYYtMh7OFp5ajYcuLdFpBILDLXXIWJz20aKlLGSh
- 7C1I7LsADy2ml6jAlFfvSkaGVuHBPzhrFIOGuPj6nQ5WiJ9AsFQRc52JQAp8cZiXVxXN
- cHwpbacPgCSSmmAWmUsBdKrXEHJiKm0LTWETYcsV3HG/CNroaUk68bWzhyuKcLIs+FYk
- hfzQ==
-X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=1e100.net; s=20230601; t=1712105252; x=1712710052;
- h=content-transfer-encoding:mime-version:references:in-reply-to
- :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
- :subject:date:message-id:reply-to;
- bh=s3Nw5roggFkXaKz2IEG0OPqSG8qSsWdEBfGv+6eMYWo=;
- b=PLaeupvcUGXZmZ6HP3jjhtuRxI/VjEB9TWGTrloJizW12LisisprUVRgUzvjrdwZvs
- JP+WaJG1It5Pu3x8+wj+6EPKp1Cb5CUSr9PwC8WahLh0MkLrF7Agp9pbggmzN6wBiRuh
- FMqlUiVKSTotXbncKac1XOvmYV/XVkpodQP+iD+z2dB1ZQBcEvfrPUlEWuwAIa7D2A7+
- 5VZoP+7/EFFY42nxohQsj+3uo47YYshqBxU8CnRIeIeO+soSivoO2kOU635+Y7VenAB6
- zWAtl5relsbU5/UHX1nf2m8Aqa+31b57pp78s4UtZM0ZBHgfjC0jMxYzkayH+ntHcIZj
- ZwNQ==
-X-Forwarded-Encrypted: i=1;
- AJvYcCU2si3J861FhnrxnNypSGdlrg4CSVWMfxdVhVAidB953t3R0DGX9XPv2zpikzPugteiz4tfFGttTTMWbv9NKUo8zW+QFJ0OYVvs5DOT8wdD
-X-Gm-Message-State: AOJu0YwAXOrfRGxiMFwv4hwIYy2Rr5HdzKa+rlG4bJyKR432+uzZ2Eri
- Ow4uX7cm6bGifkDJ0K0tBg2tQh9/8AqiG7JO/5JOXW0+19ib0NERA7dEvSJVxA==
-X-Google-Smtp-Source:
- AGHT+IHtl/pm04ij4N1py7LYLFWgPgavv51ceutzsiKLffSTV8UYDRU4tZoRNRLnDy5+Poa+Uv4Ddw==
-X-Received: by 2002:a05:620a:2046:b0:789:fb28:70f5 with SMTP id
- d6-20020a05620a204600b00789fb2870f5mr1164655qka.55.1712105251791;
- Tue, 02 Apr 2024 17:47:31 -0700 (PDT)
-Received: from tycho.delfino.n.howett.net
- (99-107-94-179.lightspeed.stlsmo.sbcglobal.net. [99.107.94.179])
- by smtp.googlemail.com with ESMTPSA id
- h15-20020a05620a13ef00b00789effdd500sm4700834qkl.76.2024.04.02.17.47.31
- (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
- Tue, 02 Apr 2024 17:47:31 -0700 (PDT)
-From: "Dustin L. Howett" <dustin@howett.net>
-To: Tzung-Bi Shih <tzungbi@kernel.org>,
- Guenter Roeck <groeck@chromium.org>,
- chrome-platform@lists.linux.dev
-Cc: "Dustin L. Howett" <dustin@howett.net>
-Subject: [PATCH v3 4/4] platform/chrome: cros_ec_lpc: add quirks for the
- Framework Laptop (AMD)
-Date: Tue, 2 Apr 2024 19:47:13 -0500
-Message-ID: <20240403004713.130365-5-dustin@howett.net>
-X-Mailer: git-send-email 2.43.0
-In-Reply-To: <20240403004713.130365-1-dustin@howett.net>
-References: <20231126192452.97824-1-dustin@howett.net>
- <20240403004713.130365-1-dustin@howett.net>
-Precedence: bulk
-X-Mailing-List: chrome-platform@lists.linux.dev
-List-Id: <chrome-platform.lists.linux.dev>
-List-Subscribe: <mailto:chrome-platform+subscribe@lists.linux.dev>
-List-Unsubscribe: <mailto:chrome-platform+unsubscribe@lists.linux.dev>
-MIME-Version: 1.0
-
-The original Framework Laptop 13 platform (Intel 11th, 12th, and 13th
-Generation at this time) uses a Microchip embedded controller in a
-standard configuration.
-
-The newer devices in this product line--Framework Laptop 13 and 16 (AMD
-Ryzen)--use a NPCX embedded controller. However, they deviate from the
-configuration of ChromeOS platforms built with the NPCX EC.
-
-* The MMIO region for EC memory begins at port 0xE00 rather than the
- expected 0x900.
-
-cros_ec_lpc's quirks system is used to address this issue.
-
-Signed-off-by: Dustin L. Howett <dustin@howett.net>
----
- drivers/platform/chrome/cros_ec_lpc.c | 16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
-index 087131f159d4..beaf714e8568 100644
---- a/drivers/platform/chrome/cros_ec_lpc.c
-+++ b/drivers/platform/chrome/cros_ec_lpc.c
-@@ -527,6 +527,11 @@ static const struct acpi_device_id cros_ec_lpc_acpi_device_ids[] = {
- };
- MODULE_DEVICE_TABLE(acpi, cros_ec_lpc_acpi_device_ids);
-
-+static const struct lpc_driver_data framework_laptop_amd_lpc_driver_data __initconst = {
-+ .quirks = CROS_EC_LPC_QUIRK_REMAP_MEMORY,
-+ .quirk_mmio_memory_base = 0xE00,
-+};
-+
- static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
- {
- /*
-@@ -581,7 +586,16 @@ static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
- },
- /* A small number of non-Chromebook/box machines also use the ChromeOS EC */
- {
-- /* the Framework Laptop */
-+ /* the Framework Laptop 13 (AMD Ryzen) and 16 (AMD Ryzen) */
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "AMD Ryzen"),
-+ DMI_MATCH(DMI_PRODUCT_FAMILY, "Laptop"),
-+ },
-+ .driver_data = (void *)&framework_laptop_amd_lpc_driver_data,
-+ },
-+ {
-+ /* the Framework Laptop (Intel 11th, 12th, 13th Generation) */
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
- DMI_MATCH(DMI_PRODUCT_NAME, "Laptop"),
diff --git a/SOURCES/rpminspect.yaml b/SOURCES/rpminspect.yaml
index eac3a55..d6287e6 100644
--- a/SOURCES/rpminspect.yaml
+++ b/SOURCES/rpminspect.yaml
@@ -23,7 +23,7 @@ emptyrpm:
patches:
ignore_list:
- linux-kernel-test.patch
- - patch-6.9-redhat.patch
+ - patch-6.10-redhat.patch
runpath:
ignore:
diff --git a/SOURCES/scx-kernel.patch b/SOURCES/scx-kernel.patch
index 7ff03ff..1522e45 100644
--- a/SOURCES/scx-kernel.patch
+++ b/SOURCES/scx-kernel.patch
@@ -1,175 +1,3 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jan200101 <sentrycraft123@gmail.com>
-Date: Wed, 17 Jul 2024 14:30:16 +0200
-Subject: [PATCH] scx
-
-Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
----
- Documentation/scheduler/index.rst | 1 +
- Documentation/scheduler/sched-ext.rst | 316 +
- MAINTAINERS | 13 +
- include/asm-generic/vmlinux.lds.h | 1 +
- include/linux/cgroup.h | 4 +-
- include/linux/sched.h | 5 +
- include/linux/sched/ext.h | 206 +
- include/linux/sched/task.h | 3 +-
- include/trace/events/sched_ext.h | 32 +
- include/uapi/linux/sched.h | 1 +
- init/init_task.c | 12 +
- kernel/Kconfig.preempt | 26 +-
- kernel/fork.c | 17 +-
- kernel/sched/build_policy.c | 10 +
- kernel/sched/core.c | 250 +-
- kernel/sched/cpufreq_schedutil.c | 50 +-
- kernel/sched/debug.c | 3 +
- kernel/sched/ext.c | 6537 +++++++++++++++++
- kernel/sched/ext.h | 69 +
- kernel/sched/fair.c | 27 +-
- kernel/sched/idle.c | 2 +
- kernel/sched/sched.h | 171 +-
- lib/dump_stack.c | 1 +
- tools/Makefile | 10 +-
- tools/sched_ext/.gitignore | 2 +
- tools/sched_ext/Makefile | 246 +
- tools/sched_ext/README.md | 258 +
- .../sched_ext/include/bpf-compat/gnu/stubs.h | 11 +
- tools/sched_ext/include/scx/common.bpf.h | 401 +
- tools/sched_ext/include/scx/common.h | 75 +
- tools/sched_ext/include/scx/compat.bpf.h | 28 +
- tools/sched_ext/include/scx/compat.h | 187 +
- tools/sched_ext/include/scx/user_exit_info.h | 111 +
- tools/sched_ext/scx_central.bpf.c | 361 +
- tools/sched_ext/scx_central.c | 135 +
- tools/sched_ext/scx_qmap.bpf.c | 706 ++
- tools/sched_ext/scx_qmap.c | 144 +
- tools/sched_ext/scx_show_state.py | 39 +
- tools/sched_ext/scx_simple.bpf.c | 156 +
- tools/sched_ext/scx_simple.c | 107 +
- tools/testing/selftests/sched_ext/.gitignore | 6 +
- tools/testing/selftests/sched_ext/Makefile | 218 +
- tools/testing/selftests/sched_ext/config | 9 +
- .../selftests/sched_ext/create_dsq.bpf.c | 58 +
- .../testing/selftests/sched_ext/create_dsq.c | 57 +
- .../sched_ext/ddsp_bogus_dsq_fail.bpf.c | 42 +
- .../selftests/sched_ext/ddsp_bogus_dsq_fail.c | 57 +
- .../sched_ext/ddsp_vtimelocal_fail.bpf.c | 39 +
- .../sched_ext/ddsp_vtimelocal_fail.c | 56 +
- .../selftests/sched_ext/dsp_local_on.bpf.c | 65 +
- .../selftests/sched_ext/dsp_local_on.c | 58 +
- .../sched_ext/enq_last_no_enq_fails.bpf.c | 21 +
- .../sched_ext/enq_last_no_enq_fails.c | 60 +
- .../sched_ext/enq_select_cpu_fails.bpf.c | 43 +
- .../sched_ext/enq_select_cpu_fails.c | 61 +
- tools/testing/selftests/sched_ext/exit.bpf.c | 84 +
- tools/testing/selftests/sched_ext/exit.c | 55 +
- tools/testing/selftests/sched_ext/exit_test.h | 20 +
- .../testing/selftests/sched_ext/hotplug.bpf.c | 61 +
- tools/testing/selftests/sched_ext/hotplug.c | 168 +
- .../selftests/sched_ext/hotplug_test.h | 15 +
- .../sched_ext/init_enable_count.bpf.c | 53 +
- .../selftests/sched_ext/init_enable_count.c | 166 +
- .../testing/selftests/sched_ext/maximal.bpf.c | 132 +
- tools/testing/selftests/sched_ext/maximal.c | 51 +
- .../selftests/sched_ext/maybe_null.bpf.c | 36 +
- .../testing/selftests/sched_ext/maybe_null.c | 49 +
- .../sched_ext/maybe_null_fail_dsp.bpf.c | 25 +
- .../sched_ext/maybe_null_fail_yld.bpf.c | 28 +
- .../testing/selftests/sched_ext/minimal.bpf.c | 21 +
- tools/testing/selftests/sched_ext/minimal.c | 58 +
- .../selftests/sched_ext/prog_run.bpf.c | 32 +
- tools/testing/selftests/sched_ext/prog_run.c | 78 +
- .../testing/selftests/sched_ext/reload_loop.c | 75 +
- tools/testing/selftests/sched_ext/runner.c | 201 +
- tools/testing/selftests/sched_ext/scx_test.h | 131 +
- .../selftests/sched_ext/select_cpu_dfl.bpf.c | 40 +
- .../selftests/sched_ext/select_cpu_dfl.c | 72 +
- .../sched_ext/select_cpu_dfl_nodispatch.bpf.c | 89 +
- .../sched_ext/select_cpu_dfl_nodispatch.c | 72 +
- .../sched_ext/select_cpu_dispatch.bpf.c | 41 +
- .../selftests/sched_ext/select_cpu_dispatch.c | 70 +
- .../select_cpu_dispatch_bad_dsq.bpf.c | 37 +
- .../sched_ext/select_cpu_dispatch_bad_dsq.c | 56 +
- .../select_cpu_dispatch_dbl_dsp.bpf.c | 38 +
- .../sched_ext/select_cpu_dispatch_dbl_dsp.c | 56 +
- .../sched_ext/select_cpu_vtime.bpf.c | 92 +
- .../selftests/sched_ext/select_cpu_vtime.c | 59 +
- .../selftests/sched_ext/test_example.c | 49 +
- tools/testing/selftests/sched_ext/util.c | 71 +
- tools/testing/selftests/sched_ext/util.h | 13 +
- 91 files changed, 13860 insertions(+), 118 deletions(-)
- create mode 100644 Documentation/scheduler/sched-ext.rst
- create mode 100644 include/linux/sched/ext.h
- create mode 100644 include/trace/events/sched_ext.h
- create mode 100644 kernel/sched/ext.c
- create mode 100644 kernel/sched/ext.h
- create mode 100644 tools/sched_ext/.gitignore
- create mode 100644 tools/sched_ext/Makefile
- create mode 100644 tools/sched_ext/README.md
- create mode 100644 tools/sched_ext/include/bpf-compat/gnu/stubs.h
- create mode 100644 tools/sched_ext/include/scx/common.bpf.h
- create mode 100644 tools/sched_ext/include/scx/common.h
- create mode 100644 tools/sched_ext/include/scx/compat.bpf.h
- create mode 100644 tools/sched_ext/include/scx/compat.h
- create mode 100644 tools/sched_ext/include/scx/user_exit_info.h
- create mode 100644 tools/sched_ext/scx_central.bpf.c
- create mode 100644 tools/sched_ext/scx_central.c
- create mode 100644 tools/sched_ext/scx_qmap.bpf.c
- create mode 100644 tools/sched_ext/scx_qmap.c
- create mode 100644 tools/sched_ext/scx_show_state.py
- create mode 100644 tools/sched_ext/scx_simple.bpf.c
- create mode 100644 tools/sched_ext/scx_simple.c
- create mode 100644 tools/testing/selftests/sched_ext/.gitignore
- create mode 100644 tools/testing/selftests/sched_ext/Makefile
- create mode 100644 tools/testing/selftests/sched_ext/config
- create mode 100644 tools/testing/selftests/sched_ext/create_dsq.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/create_dsq.c
- create mode 100644 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.c
- create mode 100644 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.c
- create mode 100644 tools/testing/selftests/sched_ext/dsp_local_on.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/dsp_local_on.c
- create mode 100644 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.c
- create mode 100644 tools/testing/selftests/sched_ext/enq_select_cpu_fails.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/enq_select_cpu_fails.c
- create mode 100644 tools/testing/selftests/sched_ext/exit.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/exit.c
- create mode 100644 tools/testing/selftests/sched_ext/exit_test.h
- create mode 100644 tools/testing/selftests/sched_ext/hotplug.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/hotplug.c
- create mode 100644 tools/testing/selftests/sched_ext/hotplug_test.h
- create mode 100644 tools/testing/selftests/sched_ext/init_enable_count.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/init_enable_count.c
- create mode 100644 tools/testing/selftests/sched_ext/maximal.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/maximal.c
- create mode 100644 tools/testing/selftests/sched_ext/maybe_null.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/maybe_null.c
- create mode 100644 tools/testing/selftests/sched_ext/maybe_null_fail_dsp.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/maybe_null_fail_yld.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/minimal.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/minimal.c
- create mode 100644 tools/testing/selftests/sched_ext/prog_run.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/prog_run.c
- create mode 100644 tools/testing/selftests/sched_ext/reload_loop.c
- create mode 100644 tools/testing/selftests/sched_ext/runner.c
- create mode 100644 tools/testing/selftests/sched_ext/scx_test.h
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dfl.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_vtime.bpf.c
- create mode 100644 tools/testing/selftests/sched_ext/select_cpu_vtime.c
- create mode 100644 tools/testing/selftests/sched_ext/test_example.c
- create mode 100644 tools/testing/selftests/sched_ext/util.c
- create mode 100644 tools/testing/selftests/sched_ext/util.h
-
diff --git a/Documentation/scheduler/index.rst b/Documentation/scheduler/index.rst
index 43bd8a145b7a..0611dc3dda8e 100644
--- a/Documentation/scheduler/index.rst
@@ -505,10 +333,10 @@ index 000000000000..a707d2181a77
+possible, they are subject to change without warning between kernel
+versions.
diff --git a/MAINTAINERS b/MAINTAINERS
-index 3121709d99e3..bf3b77e96dc4 100644
+index 958e935449e5..17d2679d291a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -19623,6 +19623,19 @@ F: include/linux/wait.h
+@@ -19917,6 +19917,19 @@ F: include/linux/wait.h
F: include/uapi/linux/sched.h
F: kernel/sched/
@@ -528,11 +356,36 @@ index 3121709d99e3..bf3b77e96dc4 100644
SCSI LIBSAS SUBSYSTEM
R: John Garry <john.g.garry@oracle.com>
R: Jason Yan <yanaijie@huawei.com>
+diff --git a/Makefile b/Makefile
+index c0af6d8aeb05..99cb65a24af6 100644
+--- a/Makefile
++++ b/Makefile
+@@ -2,7 +2,7 @@
+ VERSION = 6
+ PATCHLEVEL = 10
+ SUBLEVEL = 3
+-EXTRAVERSION =
++EXTRAVERSION = -scx1
+ NAME = Baby Opossum Posse
+
+ # *DOCUMENTATION*
+diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
+index e5974b8239c9..167e877b8bef 100644
+--- a/drivers/tty/sysrq.c
++++ b/drivers/tty/sysrq.c
+@@ -531,6 +531,7 @@ static const struct sysrq_key_op *sysrq_key_table[62] = {
+ NULL, /* P */
+ NULL, /* Q */
+ &sysrq_replay_logs_op, /* R */
++ /* S: May be registered by sched_ext for resetting */
+ NULL, /* S */
+ NULL, /* T */
+ NULL, /* U */
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
-index f7749d0f2562..05bfe4acba1d 100644
+index 70bf1004076b..a8417d31e348 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
-@@ -131,6 +131,7 @@
+@@ -133,6 +133,7 @@
*(__dl_sched_class) \
*(__rt_sched_class) \
*(__fair_sched_class) \
@@ -541,7 +394,7 @@ index f7749d0f2562..05bfe4acba1d 100644
__sched_class_lowest = .;
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
-index 34aaf0e87def..bcebf8096e91 100644
+index 2150ca60394b..3cdaec701600 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -29,8 +29,6 @@
@@ -563,7 +416,7 @@ index 34aaf0e87def..bcebf8096e91 100644
CSS_TASK_ITER_PROCS = (1U << 0), /* walk only threadgroup leaders */
CSS_TASK_ITER_THREADED = (1U << 1), /* walk all threaded css_sets in the domain */
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 3c2abbc587b4..dc07eb0d3290 100644
+index 76214d7c819d..0f3a107bcd02 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -80,6 +80,8 @@ struct task_group;
@@ -575,7 +428,7 @@ index 3c2abbc587b4..dc07eb0d3290 100644
/*
* Task state bitmask. NOTE! These bits are also
* encoded in fs/proc/array.c: get_task_state().
-@@ -798,6 +800,9 @@ struct task_struct {
+@@ -802,6 +804,9 @@ struct task_struct {
struct sched_rt_entity rt;
struct sched_dl_entity dl;
struct sched_dl_entity *dl_server;
@@ -587,10 +440,10 @@ index 3c2abbc587b4..dc07eb0d3290 100644
#ifdef CONFIG_SCHED_CORE
diff --git a/include/linux/sched/ext.h b/include/linux/sched/ext.h
new file mode 100644
-index 000000000000..593d2f4909dd
+index 000000000000..26e1c33bc844
--- /dev/null
+++ b/include/linux/sched/ext.h
-@@ -0,0 +1,206 @@
+@@ -0,0 +1,204 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * BPF extensible scheduler class: Documentation/scheduler/sched-ext.rst
@@ -699,16 +552,14 @@ index 000000000000..593d2f4909dd
+ * mechanism. See scx_kf_allow().
+ */
+enum scx_kf_mask {
-+ SCX_KF_UNLOCKED = 0, /* not sleepable, not rq locked */
-+ /* all non-sleepables may be nested inside SLEEPABLE */
-+ SCX_KF_SLEEPABLE = 1 << 0, /* sleepable init operations */
++ SCX_KF_UNLOCKED = 0, /* sleepable and not rq locked */
+ /* ENQUEUE and DISPATCH may be nested inside CPU_RELEASE */
-+ SCX_KF_CPU_RELEASE = 1 << 1, /* ops.cpu_release() */
++ SCX_KF_CPU_RELEASE = 1 << 0, /* ops.cpu_release() */
+ /* ops.dequeue (in REST) may be nested inside DISPATCH */
-+ SCX_KF_DISPATCH = 1 << 2, /* ops.dispatch() */
-+ SCX_KF_ENQUEUE = 1 << 3, /* ops.enqueue() and ops.select_cpu() */
-+ SCX_KF_SELECT_CPU = 1 << 4, /* ops.select_cpu() */
-+ SCX_KF_REST = 1 << 5, /* other rq-locked operations */
++ SCX_KF_DISPATCH = 1 << 1, /* ops.dispatch() */
++ SCX_KF_ENQUEUE = 1 << 2, /* ops.enqueue() and ops.select_cpu() */
++ SCX_KF_SELECT_CPU = 1 << 3, /* ops.select_cpu() */
++ SCX_KF_REST = 1 << 4, /* other rq-locked operations */
+
+ __SCX_KF_RQ_LOCKED = SCX_KF_CPU_RELEASE | SCX_KF_DISPATCH |
+ SCX_KF_ENQUEUE | SCX_KF_SELECT_CPU | SCX_KF_REST,
@@ -837,7 +688,7 @@ index 000000000000..fe19da7315a9
+ ),
+
+ TP_fast_assign(
-+ __assign_str(line, line);
++ __assign_str(line);
+ ),
+
+ TP_printk("%s",
@@ -862,7 +713,7 @@ index 3bac0a8ceab2..359a14cc76a4 100644
/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
#define SCHED_RESET_ON_FORK 0x40000000
diff --git a/init/init_task.c b/init/init_task.c
-index 4daee6d761c8..ce882dbd2635 100644
+index eeb110c65fe2..e222722e790b 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -6,6 +6,7 @@
@@ -873,7 +724,7 @@ index 4daee6d761c8..ce882dbd2635 100644
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/mm.h>
-@@ -97,6 +98,17 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = {
+@@ -98,6 +99,17 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = {
#endif
#ifdef CONFIG_CGROUP_SCHED
.sched_task_group = &root_task_group,
@@ -926,7 +777,7 @@ index c2f1fd95a821..f3d140c3acc1 100644
+ Documentation/scheduler/sched-ext.rst
+ https://github.com/sched-ext/scx
diff --git a/kernel/fork.c b/kernel/fork.c
-index aebb3e6c96dc..5d1f9de254d6 100644
+index 99076dbe27d8..741d962db0d9 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -23,6 +23,7 @@
@@ -1041,7 +892,7 @@ index d9dc9ab3773f..e7d539bb721e 100644
+# include "ext.c"
+#endif
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index d211d40a2edc..e5a6766b3a45 100644
+index ebf21373f663..fb6276f74ee6 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -168,7 +168,10 @@ static inline int __task_prio(const struct task_struct *p)
@@ -1068,7 +919,7 @@ index d211d40a2edc..e5a6766b3a45 100644
return false;
}
-@@ -1255,11 +1263,14 @@ bool sched_can_stop_tick(struct rq *rq)
+@@ -1254,11 +1262,14 @@ bool sched_can_stop_tick(struct rq *rq)
return true;
/*
@@ -1087,45 +938,18 @@ index d211d40a2edc..e5a6766b3a45 100644
return false;
/*
-@@ -1327,27 +1338,24 @@ int tg_nop(struct task_group *tg, void *data)
- static void set_load_weight(struct task_struct *p, bool update_load)
- {
- int prio = p->static_prio - MAX_RT_PRIO;
-- struct load_weight *load = &p->se.load;
-+ struct load_weight lw;
-
-- /*
-- * SCHED_IDLE tasks get minimal weight:
-- */
- if (task_has_idle_policy(p)) {
-- load->weight = scale_load(WEIGHT_IDLEPRIO);
-- load->inv_weight = WMULT_IDLEPRIO;
-- return;
-+ lw.weight = scale_load(WEIGHT_IDLEPRIO);
-+ lw.inv_weight = WMULT_IDLEPRIO;
-+ } else {
-+ lw.weight = scale_load(sched_prio_to_weight[prio]);
-+ lw.inv_weight = sched_prio_to_wmult[prio];
- }
-
- /*
+@@ -1340,8 +1351,8 @@ static void set_load_weight(struct task_struct *p, bool update_load)
* SCHED_OTHER tasks have to update their load when changing their
* weight
*/
-- if (update_load && p->sched_class == &fair_sched_class) {
-- reweight_task(p, prio);
-- } else {
-- load->weight = scale_load(sched_prio_to_weight[prio]);
-- load->inv_weight = sched_prio_to_wmult[prio];
-- }
+- if (update_load && p->sched_class == &fair_sched_class)
+- reweight_task(p, &lw);
+ if (update_load && p->sched_class->reweight_task)
+ p->sched_class->reweight_task(task_rq(p), p, &lw);
-+ else
-+ p->se.load = lw;
+ else
+ p->se.load = lw;
}
-
- #ifdef CONFIG_UCLAMP_TASK
-@@ -2214,6 +2222,17 @@ inline int task_curr(const struct task_struct *p)
+@@ -2210,6 +2221,17 @@ inline int task_curr(const struct task_struct *p)
return cpu_curr(task_cpu(p)) == p;
}
@@ -1143,7 +967,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* switched_from, switched_to and prio_changed must _NOT_ drop rq->lock,
* use the balance_callback list if you want balancing.
-@@ -2221,9 +2240,9 @@ inline int task_curr(const struct task_struct *p)
+@@ -2217,9 +2239,9 @@ inline int task_curr(const struct task_struct *p)
* this means any call to check_class_changed() must be followed by a call to
* balance_callback().
*/
@@ -1156,7 +980,7 @@ index d211d40a2edc..e5a6766b3a45 100644
{
if (prev_class != p->sched_class) {
if (prev_class->switched_from)
-@@ -3986,6 +4005,15 @@ bool cpus_share_resources(int this_cpu, int that_cpu)
+@@ -3982,6 +4004,15 @@ bool cpus_share_resources(int this_cpu, int that_cpu)
static inline bool ttwu_queue_cond(struct task_struct *p, int cpu)
{
@@ -1172,7 +996,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* Do not complicate things with the async wake_list while the CPU is
* in hotplug state.
-@@ -4553,6 +4581,10 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
+@@ -4549,6 +4580,10 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
p->rt.on_rq = 0;
p->rt.on_list = 0;
@@ -1183,7 +1007,7 @@ index d211d40a2edc..e5a6766b3a45 100644
#ifdef CONFIG_PREEMPT_NOTIFIERS
INIT_HLIST_HEAD(&p->preempt_notifiers);
#endif
-@@ -4794,10 +4826,18 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
+@@ -4789,10 +4824,18 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
if (dl_prio(p->prio))
return -EAGAIN;
@@ -1204,7 +1028,7 @@ index d211d40a2edc..e5a6766b3a45 100644
init_entity_runnable_average(&p->se);
-@@ -4817,7 +4857,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
+@@ -4812,7 +4855,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
return 0;
}
@@ -1213,7 +1037,7 @@ index d211d40a2edc..e5a6766b3a45 100644
{
unsigned long flags;
-@@ -4979,6 +4979,13 @@
+@@ -4974,6 +4974,13 @@
if (p->sched_class->task_fork)
p->sched_class->task_fork(p);
raw_spin_unlock_irqrestore(&p->pi_lock, flags);
@@ -1227,7 +1051,7 @@ index d211d40a2edc..e5a6766b3a45 100644
}
void sched_post_fork(struct task_struct *p)
-@@ -4987,6 +4994,7 @@
+@@ -4982,6 +4989,7 @@
sched_post_fork_bore(p);
#endif // CONFIG_SCHED_BORE
uclamp_post_fork(p);
@@ -1235,7 +1059,7 @@ index d211d40a2edc..e5a6766b3a45 100644
}
unsigned long to_ratio(u64 period, u64 runtime)
-@@ -5687,6 +5735,7 @@ void scheduler_tick(void)
+@@ -5685,6 +5736,7 @@ void sched_tick(void)
calc_global_load_tick(rq);
sched_core_tick(rq);
task_tick_mm_cid(rq, curr);
@@ -1243,20 +1067,20 @@ index d211d40a2edc..e5a6766b3a45 100644
rq_unlock(rq, &rf);
-@@ -5699,8 +5748,10 @@ void scheduler_tick(void)
+@@ -5697,8 +5749,10 @@ void sched_tick(void)
wq_worker_tick(curr);
#ifdef CONFIG_SMP
- rq->idle_balance = idle_cpu(cpu);
-- trigger_load_balance(rq);
+- sched_balance_trigger(rq);
+ if (!scx_switched_all()) {
+ rq->idle_balance = idle_cpu(cpu);
-+ trigger_load_balance(rq);
++ sched_balance_trigger(rq);
+ }
#endif
}
-@@ -5991,7 +6042,19 @@ static void put_prev_task_balance(struct rq *rq, struct task_struct *prev,
+@@ -5989,7 +6043,19 @@ static void put_prev_task_balance(struct rq *rq, struct task_struct *prev,
struct rq_flags *rf)
{
#ifdef CONFIG_SMP
@@ -1276,7 +1100,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* We must do the balancing pass before put_prev_task(), such
* that when we release the rq->lock the task is in the same
-@@ -6000,7 +6063,7 @@ static void put_prev_task_balance(struct rq *rq, struct task_struct *prev,
+@@ -5998,7 +6064,7 @@ static void put_prev_task_balance(struct rq *rq, struct task_struct *prev,
* We can terminate the balance pass as soon as we know there is
* a runnable task of @class priority or higher.
*/
@@ -1285,7 +1109,7 @@ index d211d40a2edc..e5a6766b3a45 100644
if (class->balance(rq, prev, rf))
break;
}
-@@ -6018,6 +6081,9 @@ __pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
+@@ -6016,6 +6082,9 @@ __pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
const struct sched_class *class;
struct task_struct *p;
@@ -1295,7 +1119,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* Optimization: we know that if all tasks are in the fair class we can
* call that function directly, but only if the @prev task wasn't of a
-@@ -6058,10 +6124,15 @@ __pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
+@@ -6056,10 +6125,15 @@ __pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf)
if (prev->dl_server)
prev->dl_server = NULL;
@@ -1313,7 +1137,7 @@ index d211d40a2edc..e5a6766b3a45 100644
}
BUG(); /* The idle class should always have a runnable task. */
-@@ -6091,7 +6162,7 @@ static inline struct task_struct *pick_task(struct rq *rq)
+@@ -6089,7 +6163,7 @@ static inline struct task_struct *pick_task(struct rq *rq)
const struct sched_class *class;
struct task_struct *p;
@@ -1322,7 +1146,7 @@ index d211d40a2edc..e5a6766b3a45 100644
p = class->pick_task(rq);
if (p)
return p;
-@@ -7081,12 +7152,16 @@ int default_wake_function(wait_queue_entry_t *curr, unsigned mode, int wake_flag
+@@ -7080,12 +7154,16 @@ int default_wake_function(wait_queue_entry_t *curr, unsigned mode, int wake_flag
}
EXPORT_SYMBOL(default_wake_function);
@@ -1340,7 +1164,7 @@ index d211d40a2edc..e5a6766b3a45 100644
else
p->sched_class = &fair_sched_class;
-@@ -7247,6 +7322,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
+@@ -7246,6 +7324,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
}
__setscheduler_prio(p, prio);
@@ -1348,7 +1172,7 @@ index d211d40a2edc..e5a6766b3a45 100644
if (queued)
enqueue_task(rq, p, queue_flag);
-@@ -7468,6 +7544,25 @@ int sched_core_idle_cpu(int cpu)
+@@ -7467,6 +7546,25 @@ int sched_core_idle_cpu(int cpu)
#endif
#ifdef CONFIG_SMP
@@ -1361,20 +1185,20 @@ index d211d40a2edc..e5a6766b3a45 100644
+{
+ u64 now = rq_clock_pelt(rq);
+ const struct sched_class *curr_class = rq->curr->sched_class;
-+ unsigned long hw_pressure = arch_scale_thermal_pressure(cpu_of(rq));
++ unsigned long hw_pressure = arch_scale_hw_pressure(cpu_of(rq));
+
+ lockdep_assert_rq_held(rq);
+
+ return update_rt_rq_load_avg(now, rq, curr_class == &rt_sched_class) |
+ update_dl_rq_load_avg(now, rq, curr_class == &dl_sched_class) |
-+ update_thermal_load_avg(now, rq, hw_pressure) |
++ update_hw_load_avg(now, rq, hw_pressure) |
+ update_irq_load_avg(rq, 0);
+}
+
/*
* This function computes an effective utilization for the given CPU, to be
* used for frequency selection given the linear relation: f = u * f_max.
-@@ -7790,6 +7885,10 @@ static int __sched_setscheduler(struct task_struct *p,
+@@ -7789,6 +7887,10 @@ static int __sched_setscheduler(struct task_struct *p,
goto unlock;
}
@@ -1385,7 +1209,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* If not changing anything there's no need to proceed further,
* but store a possible modification of reset_on_fork.
-@@ -7892,6 +7991,7 @@ static int __sched_setscheduler(struct task_struct *p,
+@@ -7891,6 +7993,7 @@ static int __sched_setscheduler(struct task_struct *p,
__setscheduler_prio(p, newprio);
}
__setscheduler_uclamp(p, attr);
@@ -1393,7 +1217,7 @@ index d211d40a2edc..e5a6766b3a45 100644
if (queued) {
/*
-@@ -9067,6 +9167,7 @@ SYSCALL_DEFINE1(sched_get_priority_max, int, policy)
+@@ -9066,6 +9169,7 @@ SYSCALL_DEFINE1(sched_get_priority_max, int, policy)
case SCHED_NORMAL:
case SCHED_BATCH:
case SCHED_IDLE:
@@ -1401,7 +1225,7 @@ index d211d40a2edc..e5a6766b3a45 100644
ret = 0;
break;
}
-@@ -9094,6 +9195,7 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
+@@ -9093,6 +9197,7 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
case SCHED_NORMAL:
case SCHED_BATCH:
case SCHED_IDLE:
@@ -1409,7 +1233,7 @@ index d211d40a2edc..e5a6766b3a45 100644
ret = 0;
}
return ret;
-@@ -9189,6 +9291,7 @@ void sched_show_task(struct task_struct *p)
+@@ -9188,6 +9293,7 @@ void sched_show_task(struct task_struct *p)
print_worker_info(KERN_INFO, p);
print_stop_info(KERN_INFO, p);
@@ -1417,7 +1241,7 @@ index d211d40a2edc..e5a6766b3a45 100644
show_stack(p, NULL, KERN_INFO);
put_task_stack(p);
}
-@@ -9681,6 +9784,8 @@ int sched_cpu_activate(unsigned int cpu)
+@@ -9680,6 +9786,8 @@ int sched_cpu_activate(unsigned int cpu)
cpuset_cpu_active();
}
@@ -1426,7 +1250,7 @@ index d211d40a2edc..e5a6766b3a45 100644
/*
* Put the rq online, if not already. This happens:
*
-@@ -9741,6 +9846,8 @@ int sched_cpu_deactivate(unsigned int cpu)
+@@ -9740,6 +9848,8 @@ int sched_cpu_deactivate(unsigned int cpu)
}
rq_unlock_irqrestore(rq, &rf);
@@ -1435,7 +1259,7 @@ index d211d40a2edc..e5a6766b3a45 100644
#ifdef CONFIG_SCHED_SMT
/*
* When going down, decrement the number of cores with SMT present.
-@@ -10062,11 +10062,15 @@
+@@ -10061,11 +10061,15 @@
int i;
/* Make sure the linker didn't screw up */
@@ -1455,7 +1279,7 @@ index d211d40a2edc..e5a6766b3a45 100644
#endif
#ifdef CONFIG_SCHED_BORE
-@@ -10097,6 +10208,7 @@ void __init sched_init(void)
+@@ -10096,6 +10210,7 @@ void __init sched_init(void)
balance_push_set(smp_processor_id(), false);
#endif
init_sched_fair_class();
@@ -1463,7 +1287,7 @@ index d211d40a2edc..e5a6766b3a45 100644
psi_init();
-@@ -10523,11 +10635,6 @@ void sched_move_task(struct task_struct *tsk)
+@@ -10522,11 +10637,6 @@ void sched_move_task(struct task_struct *tsk)
}
}
@@ -1475,7 +1299,7 @@ index d211d40a2edc..e5a6766b3a45 100644
static struct cgroup_subsys_state *
cpu_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
{
-@@ -11294,29 +11401,27 @@ static int cpu_local_stat_show(struct seq_file *sf,
+@@ -11293,29 +11403,27 @@ static int cpu_local_stat_show(struct seq_file *sf,
}
#ifdef CONFIG_FAIR_GROUP_SCHED
@@ -1517,7 +1341,7 @@ index d211d40a2edc..e5a6766b3a45 100644
return sched_group_set_shares(css_tg(css), scale_load(weight));
}
-@@ -11324,7 +11429,7 @@ static int cpu_weight_write_u64(struct cgroup_subsys_state *css,
+@@ -11323,7 +11431,7 @@ static int cpu_weight_write_u64(struct cgroup_subsys_state *css,
static s64 cpu_weight_nice_read_s64(struct cgroup_subsys_state *css,
struct cftype *cft)
{
@@ -1526,7 +1350,7 @@ index d211d40a2edc..e5a6766b3a45 100644
int last_delta = INT_MAX;
int prio, delta;
-@@ -12065,3 +12170,38 @@ void sched_mm_cid_fork(struct task_struct *t)
+@@ -12064,3 +12172,38 @@ void sched_mm_cid_fork(struct task_struct *t)
t->mm_cid_active = 1;
}
#endif
@@ -1655,10 +1479,10 @@ index eece6244f9d2..e683e5d08daa 100644
cpufreq_driver_adjust_perf(sg_cpu->cpu, sg_cpu->bw_min,
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
-index 8d5d98a5834d..6f306e1c9c3e 100644
+index c1eb9a1afd13..c057ef46c5f8 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
-@@ -1089,6 +1089,9 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
+@@ -1090,6 +1090,9 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
P(dl.runtime);
P(dl.deadline);
}
@@ -1670,10 +1494,10 @@ index 8d5d98a5834d..6f306e1c9c3e 100644
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
new file mode 100644
-index 000000000000..b9fd7b7d4a86
+index 000000000000..0dac88d0e578
--- /dev/null
+++ b/kernel/sched/ext.c
-@@ -0,0 +1,6537 @@
+@@ -0,0 +1,6532 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * BPF extensible scheduler class: Documentation/scheduler/sched-ext.rst
@@ -2705,16 +2529,12 @@ index 000000000000..b9fd7b7d4a86
+ return false;
+ }
+
-+ if (unlikely((mask & SCX_KF_SLEEPABLE) && in_interrupt())) {
-+ scx_ops_error("sleepable kfunc called from non-sleepable context");
-+ return false;
-+ }
-+
+ /*
+ * Enforce nesting boundaries. e.g. A kfunc which can be called from
+ * DISPATCH must not be called if we're running DEQUEUE which is nested
-+ * inside ops.dispatch(). We don't need to check the SCX_KF_SLEEPABLE
-+ * boundary thanks to the above in_interrupt() check.
++ * inside ops.dispatch(). We don't need to check boundaries for any
++ * blocking kfuncs as the verifier ensures they're only called from
++ * sleepable progs.
+ */
+ if (unlikely(highest_bit(mask) == SCX_KF_CPU_RELEASE &&
+ (current->scx.kf_mask & higher_bits(SCX_KF_CPU_RELEASE)))) {
@@ -4900,9 +4720,9 @@ index 000000000000..b9fd7b7d4a86
+ atomic_long_inc(&scx_hotplug_seq);
+
+ if (online && SCX_HAS_OP(cpu_online))
-+ SCX_CALL_OP(SCX_KF_SLEEPABLE, cpu_online, cpu);
++ SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_online, cpu);
+ else if (!online && SCX_HAS_OP(cpu_offline))
-+ SCX_CALL_OP(SCX_KF_SLEEPABLE, cpu_offline, cpu);
++ SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_offline, cpu);
+ else
+ scx_ops_exit(SCX_ECODE_ACT_RESTART | SCX_ECODE_RSN_HOTPLUG,
+ "cpu %d going %s, exiting scheduler", cpu,
@@ -5066,7 +4886,7 @@ index 000000000000..b9fd7b7d4a86
+ .fork = fork,
+ };
+
-+ ret = SCX_CALL_OP_RET(SCX_KF_SLEEPABLE, init_task, p, &args);
++ ret = SCX_CALL_OP_RET(SCX_KF_UNLOCKED, init_task, p, &args);
+ if (unlikely(ret)) {
+ ret = ops_sanitize_err("init_task", ret);
+ return ret;
@@ -6324,7 +6144,7 @@ index 000000000000..b9fd7b7d4a86
+ cpus_read_lock();
+
+ if (scx_ops.init) {
-+ ret = SCX_CALL_OP_RET(SCX_KF_SLEEPABLE, init);
++ ret = SCX_CALL_OP_RET(SCX_KF_UNLOCKED, init);
+ if (ret) {
+ ret = ops_sanitize_err("init", ret);
+ goto err_disable_unlock_cpus;
@@ -6733,7 +6553,7 @@ index 000000000000..b9fd7b7d4a86
+
+static int bpf_scx_init(struct btf *btf)
+{
-+ u32 type_id;
++ s32 type_id;
+
+ type_id = btf_find_by_name_kind(btf, "task_struct", BTF_KIND_STRUCT);
+ if (type_id < 0)
@@ -7100,14 +6920,11 @@ index 000000000000..b9fd7b7d4a86
+ * @dsq_id: DSQ to create
+ * @node: NUMA node to allocate from
+ *
-+ * Create a custom DSQ identified by @dsq_id. Can be called from ops.init() and
-+ * ops.init_task().
++ * Create a custom DSQ identified by @dsq_id. Can be called from any sleepable
++ * scx callback, and any BPF_PROG_TYPE_SYSCALL prog.
+ */
+__bpf_kfunc s32 scx_bpf_create_dsq(u64 dsq_id, s32 node)
+{
-+ if (!scx_kf_allowed(SCX_KF_SLEEPABLE))
-+ return -EINVAL;
-+
+ if (unlikely(node >= (int)nr_node_ids ||
+ (node < 0 && node != NUMA_NO_NODE)))
+ return -EINVAL;
@@ -8166,6 +7983,8 @@ index 000000000000..b9fd7b7d4a86
+ */
+ if ((ret = register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS,
+ &scx_kfunc_set_sleepable)) ||
++ (ret = register_btf_kfunc_id_set(BPF_PROG_TYPE_SYSCALL,
++ &scx_kfunc_set_sleepable)) ||
+ (ret = register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS,
+ &scx_kfunc_set_select_cpu)) ||
+ (ret = register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS,
@@ -8287,28 +8106,20 @@ index 000000000000..32d3a51f591a
+static inline void scx_update_idle(struct rq *rq, bool idle) {}
+#endif
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index 213c94d027a4..ee4fe81ba456 100644
+index 483c137b9d3d..ab17954001ae 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -4074,6 +4074,17 @@
- load->inv_weight = sched_prio_to_wmult[prio];
+@@ -3835,7 +3835,8 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se,
+ }
}
+-void reweight_task(struct task_struct *p, const struct load_weight *lw)
+static void reweight_task_fair(struct rq *rq, struct task_struct *p,
+ const struct load_weight *lw)
-+{
-+ struct sched_entity *se = &p->se;
-+ struct cfs_rq *cfs_rq = cfs_rq_of(se);
-+ struct load_weight *load = &se->load;
-+
-+ reweight_entity(cfs_rq, se, lw->weight);
-+ load->inv_weight = lw->inv_weight;
-+}
-+
- static inline int throttled_hierarchy(struct cfs_rq *cfs_rq);
-
- #ifdef CONFIG_FAIR_GROUP_SCHED
-@@ -8348,7 +8348,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
+ {
+ struct sched_entity *se = &p->se;
+ struct cfs_rq *cfs_rq = cfs_rq_of(se);
+@@ -8390,7 +8391,7 @@ static void check_preempt_wakeup_fair(struct rq *rq, struct task_struct *p, int
* Batch and idle tasks do not preempt non-idle tasks (their preemption
* is driven by the tick):
*/
@@ -8317,13 +8128,13 @@ index 213c94d027a4..ee4fe81ba456 100644
return;
find_matching_se(&se, &pse);
-@@ -9309,28 +9309,18 @@ static inline void update_blocked_load_status(struct rq *rq, bool has_blocked) {
+@@ -9347,28 +9348,18 @@ static inline void update_blocked_load_status(struct rq *rq, bool has_blocked) {
static bool __update_blocked_others(struct rq *rq, bool *done)
{
- const struct sched_class *curr_class;
- u64 now = rq_clock_pelt(rq);
-- unsigned long thermal_pressure;
+- unsigned long hw_pressure;
- bool decayed;
+ bool updated;
@@ -8333,11 +8144,11 @@ index 213c94d027a4..ee4fe81ba456 100644
*/
- curr_class = rq->curr->sched_class;
-
-- thermal_pressure = arch_scale_thermal_pressure(cpu_of(rq));
+- hw_pressure = arch_scale_hw_pressure(cpu_of(rq));
-
- decayed = update_rt_rq_load_avg(now, rq, curr_class == &rt_sched_class) |
- update_dl_rq_load_avg(now, rq, curr_class == &dl_sched_class) |
-- update_thermal_load_avg(rq_clock_thermal(rq), rq, thermal_pressure) |
+- update_hw_load_avg(now, rq, hw_pressure) |
- update_irq_load_avg(rq, 0);
+ updated = update_other_load_avgs(rq);
@@ -8349,7 +8160,7 @@ index 213c94d027a4..ee4fe81ba456 100644
}
#ifdef CONFIG_FAIR_GROUP_SCHED
-@@ -13156,6 +13146,7 @@ DEFINE_SCHED_CLASS(fair) = {
+@@ -13207,6 +13198,7 @@ DEFINE_SCHED_CLASS(fair) = {
.task_tick = task_tick_fair,
.task_fork = task_fork_fair,
@@ -8376,10 +8187,10 @@ index 6135fbe83d68..3b6540cc436a 100644
}
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index ae50f212775e..9ce5074e8a8d 100644
+index 38aeedd8a6cc..f952a4b99ead 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -173,9 +173,19 @@ static inline int idle_policy(int policy)
+@@ -187,9 +187,19 @@ static inline int idle_policy(int policy)
{
return policy == SCHED_IDLE;
}
@@ -8400,7 +8211,7 @@ index ae50f212775e..9ce5074e8a8d 100644
}
static inline int rt_policy(int policy)
-@@ -223,6 +233,24 @@ static inline void update_avg(u64 *avg, u64 sample)
+@@ -237,6 +247,24 @@ static inline void update_avg(u64 *avg, u64 sample)
#define shr_bound(val, shift) \
(val >> min_t(typeof(shift), shift, BITS_PER_TYPE(typeof(val)) - 1))
@@ -8425,7 +8236,7 @@ index ae50f212775e..9ce5074e8a8d 100644
/*
* !! For sched_setattr_nocheck() (kernel) only !!
*
-@@ -461,6 +489,11 @@ static inline int walk_tg_tree(tg_visitor down, tg_visitor up, void *data)
+@@ -475,6 +503,11 @@ static inline int walk_tg_tree(tg_visitor down, tg_visitor up, void *data)
return walk_tg_tree_from(&root_task_group, down, up, data);
}
@@ -8437,7 +8248,7 @@ index ae50f212775e..9ce5074e8a8d 100644
extern int tg_nop(struct task_group *tg, void *data);
#ifdef CONFIG_FAIR_GROUP_SCHED
-@@ -569,6 +602,12 @@ do { \
+@@ -583,6 +616,12 @@ do { \
# define u64_u32_load(var) u64_u32_load_copy(var, var##_copy)
# define u64_u32_store(var, val) u64_u32_store_copy(var, var##_copy, val)
@@ -8450,7 +8261,7 @@ index ae50f212775e..9ce5074e8a8d 100644
/* CFS-related fields in a runqueue */
struct cfs_rq {
struct load_weight load;
-@@ -677,6 +716,42 @@ struct cfs_rq {
+@@ -691,6 +730,42 @@ struct cfs_rq {
#endif /* CONFIG_FAIR_GROUP_SCHED */
};
@@ -8493,7 +8304,7 @@ index ae50f212775e..9ce5074e8a8d 100644
static inline int rt_bandwidth_enabled(void)
{
return sysctl_sched_rt_runtime >= 0;
-@@ -969,12 +1044,6 @@ struct uclamp_rq {
+@@ -988,12 +1063,6 @@ struct uclamp_rq {
DECLARE_STATIC_KEY_FALSE(sched_uclamp_used);
#endif /* CONFIG_UCLAMP_TASK */
@@ -8506,7 +8317,7 @@ index ae50f212775e..9ce5074e8a8d 100644
/*
* This is the main, per-CPU runqueue data structure.
*
-@@ -1017,6 +1086,9 @@ struct rq {
+@@ -1036,6 +1105,9 @@ struct rq {
struct cfs_rq cfs;
struct rt_rq rt;
struct dl_rq dl;
@@ -8516,7 +8327,7 @@ index ae50f212775e..9ce5074e8a8d 100644
#ifdef CONFIG_FAIR_GROUP_SCHED
/* list of leaf cfs_rq on this CPU: */
-@@ -2276,6 +2348,8 @@ struct sched_class {
+@@ -2278,6 +2350,8 @@ struct sched_class {
void (*put_prev_task)(struct rq *rq, struct task_struct *p);
void (*set_next_task)(struct rq *rq, struct task_struct *p, bool first);
@@ -8525,7 +8336,7 @@ index ae50f212775e..9ce5074e8a8d 100644
#ifdef CONFIG_SMP
int (*balance)(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);
int (*select_task_rq)(struct task_struct *p, int task_cpu, int flags);
-@@ -2303,8 +2377,11 @@ struct sched_class {
+@@ -2305,8 +2379,11 @@ struct sched_class {
* cannot assume the switched_from/switched_to pair is serialized by
* rq->lock. They are however serialized by p->pi_lock.
*/
@@ -8537,7 +8348,7 @@ index ae50f212775e..9ce5074e8a8d 100644
void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
int oldprio);
-@@ -2353,19 +2430,54 @@ const struct sched_class name##_sched_class \
+@@ -2355,19 +2432,54 @@ const struct sched_class name##_sched_class \
extern struct sched_class __sched_class_highest[];
extern struct sched_class __sched_class_lowest[];
@@ -8598,11 +8409,11 @@ index ae50f212775e..9ce5074e8a8d 100644
static inline bool sched_stop_runnable(struct rq *rq)
{
-@@ -2462,7 +2574,7 @@ extern void init_sched_dl_class(void);
+@@ -2464,7 +2576,7 @@ extern void init_sched_dl_class(void);
extern void init_sched_rt_class(void);
extern void init_sched_fair_class(void);
--extern void reweight_task(struct task_struct *p, int prio);
+-extern void reweight_task(struct task_struct *p, const struct load_weight *lw);
+extern void __setscheduler_prio(struct task_struct *p, int prio);
extern void resched_curr(struct rq *rq);
@@ -8680,7 +8491,7 @@ diff --git a/tools/Makefile b/tools/Makefile
index 276f5d0d53a4..278d24723b74 100644
--- a/tools/Makefile
+++ b/tools/Makefile
-@@ -28,6 +28,7 @@ help:
+@@ -28,6 +28,7 @@ include scripts/Makefile.include
@echo ' pci - PCI tools'
@echo ' perf - Linux performance measurement and analysis tool'
@echo ' selftests - various kernel selftests'
@@ -8698,7 +8509,7 @@ index 276f5d0d53a4..278d24723b74 100644
selftests: FORCE
$(call descend,testing/$@)
-@@ -184,6 +188,9 @@ perf_clean:
+@@ -184,6 +188,9 @@ install: acpi_install counter_install cpupower_install gpio_install \
$(Q)mkdir -p $(PERF_O) .
$(Q)$(MAKE) --no-print-directory -C perf O=$(PERF_O) subdir= clean
@@ -13840,10 +13651,10 @@ index 000000000000..6c5db8ebbf8a
+REGISTER_SCX_TEST(&minimal)
diff --git a/tools/testing/selftests/sched_ext/prog_run.bpf.c b/tools/testing/selftests/sched_ext/prog_run.bpf.c
new file mode 100644
-index 000000000000..fd2c8f12af16
+index 000000000000..6a4d7c48e3f2
--- /dev/null
+++ b/tools/testing/selftests/sched_ext/prog_run.bpf.c
-@@ -0,0 +1,32 @@
+@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * A scheduler that validates that we can invoke sched_ext kfuncs in
@@ -13862,6 +13673,7 @@ index 000000000000..fd2c8f12af16
+SEC("syscall")
+int BPF_PROG(prog_run_syscall)
+{
++ scx_bpf_create_dsq(0, -1);
+ scx_bpf_exit(0xdeadbeef, "Exited from PROG_RUN");
+ return 0;
+}
diff --git a/SOURCES/steam-deck.patch b/SOURCES/steam-deck.patch
index 25a3e52..fb06952 100644
--- a/SOURCES/steam-deck.patch
+++ b/SOURCES/steam-deck.patch
@@ -21,10 +21,10 @@ diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 8b93856de432..af335d9150e9 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
-@@ -2260,5 +2260,16 @@ config MFD_RSMU_SPI
+@@ -2334,5 +2334,16 @@
Additional drivers must be enabled in order to use the functionality
of the device.
-
+
+config MFD_STEAMDECK
+ tristate "Valve Steam Deck"
+ select MFD_CORE
@@ -42,10 +42,10 @@ diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 7ed3ef4a698c..d01254ef0106 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
-@@ -280,3 +280,5 @@ rsmu-i2c-objs := rsmu_core.o rsmu_i2c.o
- rsmu-spi-objs := rsmu_core.o rsmu_spi.o
- obj-$(CONFIG_MFD_RSMU_I2C) += rsmu-i2c.o
- obj-$(CONFIG_MFD_RSMU_SPI) += rsmu-spi.o
+@@ -282,3 +282,5 @@
+
+ obj-$(CONFIG_MFD_RSMU_I2C) += rsmu_i2c.o rsmu_core.o
+ obj-$(CONFIG_MFD_RSMU_SPI) += rsmu_spi.o rsmu_core.o
+
+obj-$(CONFIG_MFD_STEAMDECK) += steamdeck.o
diff --git a/drivers/mfd/steamdeck.c b/drivers/mfd/steamdeck.c
diff --git a/SOURCES/t2linux.patch b/SOURCES/t2linux.patch
index 9fbe2e2..566de6c 100644
--- a/SOURCES/t2linux.patch
+++ b/SOURCES/t2linux.patch
@@ -1,35 +1,86 @@
-From fb72b7575a091284a3e2bd0a955aa2c61a6f5bc4 Mon Sep 17 00:00:00 2001
-From: Aditya Garg <gargaditya08@live.com>
-Date: Thu, 14 Mar 2024 06:51:34 +0000
-Subject: [PATCH] Add apple-bce driver
+From c8abbeaccc5bbcc5a1239c15298e453a90c76add Mon Sep 17 00:00:00 2001
+From: Peter Jung <admin@ptr1337.dev>
+Date: Sat, 3 Aug 2024 09:34:40 +0200
+Subject: [PATCH 11/12] t2
+Signed-off-by: Peter Jung <admin@ptr1337.dev>
---
- drivers/staging/apple-bce/Makefile | 28 +
- drivers/staging/apple-bce/apple_bce.c | 443 ++++++++++
- drivers/staging/apple-bce/apple_bce.h | 38 +
- drivers/staging/apple-bce/audio/audio.c | 711 ++++++++++++++++
- drivers/staging/apple-bce/audio/audio.h | 125 +++
- drivers/staging/apple-bce/audio/description.h | 42 +
- drivers/staging/apple-bce/audio/pcm.c | 308 +++++++
- drivers/staging/apple-bce/audio/pcm.h | 16 +
- drivers/staging/apple-bce/audio/protocol.c | 347 ++++++++
- drivers/staging/apple-bce/audio/protocol.h | 147 ++++
- .../staging/apple-bce/audio/protocol_bce.c | 226 ++++++
- .../staging/apple-bce/audio/protocol_bce.h | 72 ++
- drivers/staging/apple-bce/mailbox.c | 151 ++++
- drivers/staging/apple-bce/mailbox.h | 53 ++
- drivers/staging/apple-bce/queue.c | 390 +++++++++
- drivers/staging/apple-bce/queue.h | 177 ++++
- drivers/staging/apple-bce/queue_dma.c | 220 +++++
- drivers/staging/apple-bce/queue_dma.h | 50 ++
- drivers/staging/apple-bce/vhci/command.h | 204 +++++
- drivers/staging/apple-bce/vhci/queue.c | 268 +++++++
- drivers/staging/apple-bce/vhci/queue.h | 76 ++
- drivers/staging/apple-bce/vhci/transfer.c | 661 +++++++++++++++
- drivers/staging/apple-bce/vhci/transfer.h | 73 ++
- drivers/staging/apple-bce/vhci/vhci.c | 759 ++++++++++++++++++
- drivers/staging/apple-bce/vhci/vhci.h | 52 ++
- 25 files changed, 5637 insertions(+)
+ .../ABI/testing/sysfs-driver-hid-appletb-kbd | 13 +
+ Documentation/core-api/printk-formats.rst | 32 +
+ MAINTAINERS | 12 +
+ drivers/acpi/video_detect.c | 16 +
+ drivers/firmware/efi/libstub/Makefile | 2 +-
+ drivers/firmware/efi/libstub/arm64.c | 3 +-
+ drivers/firmware/efi/libstub/efistub.h | 9 +-
+ drivers/firmware/efi/libstub/smbios.c | 43 +-
+ drivers/firmware/efi/libstub/x86-stub.c | 71 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 +
+ drivers/gpu/drm/drm_format_helper.c | 54 +
+ drivers/gpu/drm/i915/display/intel_ddi.c | 4 +
+ drivers/gpu/drm/i915/display/intel_fbdev.c | 6 +-
+ drivers/gpu/drm/i915/display/intel_quirks.c | 15 +
+ drivers/gpu/drm/i915/display/intel_quirks.h | 1 +
+ .../gpu/drm/tests/drm_format_helper_test.c | 81 ++
+ drivers/gpu/drm/tiny/Kconfig | 12 +
+ drivers/gpu/drm/tiny/Makefile | 1 +
+ drivers/gpu/drm/tiny/appletbdrm.c | 624 +++++++++
+ drivers/gpu/vga/vga_switcheroo.c | 7 +-
+ drivers/hid/Kconfig | 22 +
+ drivers/hid/Makefile | 2 +
+ drivers/hid/hid-apple.c | 87 ++
+ drivers/hid/hid-appletb-bl.c | 193 +++
+ drivers/hid/hid-appletb-kbd.c | 289 +++++
+ drivers/hid/hid-core.c | 25 +
+ drivers/hid/hid-google-hammer.c | 27 +-
+ drivers/hid/hid-multitouch.c | 60 +-
+ drivers/hid/hid-quirks.c | 8 +-
+ drivers/hwmon/applesmc.c | 1138 ++++++++++++-----
+ drivers/input/mouse/bcm5974.c | 138 ++
+ drivers/pci/vgaarb.c | 1 +
+ drivers/platform/x86/apple-gmux.c | 18 +
+ drivers/staging/Kconfig | 2 +
+ drivers/staging/Makefile | 1 +
+ drivers/staging/apple-bce/Kconfig | 18 +
+ drivers/staging/apple-bce/Makefile | 28 +
+ drivers/staging/apple-bce/apple_bce.c | 445 +++++++
+ drivers/staging/apple-bce/apple_bce.h | 38 +
+ drivers/staging/apple-bce/audio/audio.c | 711 ++++++++++
+ drivers/staging/apple-bce/audio/audio.h | 125 ++
+ drivers/staging/apple-bce/audio/description.h | 42 +
+ drivers/staging/apple-bce/audio/pcm.c | 308 +++++
+ drivers/staging/apple-bce/audio/pcm.h | 16 +
+ drivers/staging/apple-bce/audio/protocol.c | 347 +++++
+ drivers/staging/apple-bce/audio/protocol.h | 147 +++
+ .../staging/apple-bce/audio/protocol_bce.c | 226 ++++
+ .../staging/apple-bce/audio/protocol_bce.h | 72 ++
+ drivers/staging/apple-bce/mailbox.c | 151 +++
+ drivers/staging/apple-bce/mailbox.h | 53 +
+ drivers/staging/apple-bce/queue.c | 390 ++++++
+ drivers/staging/apple-bce/queue.h | 177 +++
+ drivers/staging/apple-bce/queue_dma.c | 220 ++++
+ drivers/staging/apple-bce/queue_dma.h | 50 +
+ drivers/staging/apple-bce/vhci/command.h | 204 +++
+ drivers/staging/apple-bce/vhci/queue.c | 268 ++++
+ drivers/staging/apple-bce/vhci/queue.h | 76 ++
+ drivers/staging/apple-bce/vhci/transfer.c | 661 ++++++++++
+ drivers/staging/apple-bce/vhci/transfer.h | 73 ++
+ drivers/staging/apple-bce/vhci/vhci.c | 759 +++++++++++
+ drivers/staging/apple-bce/vhci/vhci.h | 52 +
+ drivers/usb/core/driver.c | 14 +
+ drivers/usb/storage/uas.c | 5 +-
+ include/drm/drm_format_helper.h | 3 +
+ include/linux/efi.h | 5 +-
+ include/linux/hid.h | 2 +
+ include/linux/usb.h | 3 +
+ lib/test_printf.c | 20 +-
+ lib/vsprintf.c | 36 +-
+ scripts/checkpatch.pl | 2 +-
+ 70 files changed, 8374 insertions(+), 393 deletions(-)
+ create mode 100644 Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
+ create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c
+ create mode 100644 drivers/hid/hid-appletb-bl.c
+ create mode 100644 drivers/hid/hid-appletb-kbd.c
+ create mode 100644 drivers/staging/apple-bce/Kconfig
create mode 100644 drivers/staging/apple-bce/Makefile
create mode 100644 drivers/staging/apple-bce/apple_bce.c
create mode 100644 drivers/staging/apple-bce/apple_bce.h
@@ -56,14 +107,4567 @@ Subject: [PATCH] Add apple-bce driver
create mode 100644 drivers/staging/apple-bce/vhci/vhci.c
create mode 100644 drivers/staging/apple-bce/vhci/vhci.h
+diff --git a/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd b/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
+new file mode 100644
+index 000000000000..2a19584d091e
+--- /dev/null
++++ b/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
+@@ -0,0 +1,13 @@
++What: /sys/bus/hid/drivers/hid-appletb-kbd/<dev>/mode
++Date: September, 2023
++KernelVersion: 6.5
++Contact: linux-input@vger.kernel.org
++Description:
++ The set of keys displayed on the Touch Bar.
++ Valid values are:
++ == =================
++ 0 Escape key only
++ 1 Function keys
++ 2 Media/brightness keys
++ 3 None
++ == =================
+diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
+index 4451ef501936..c726a846f752 100644
+--- a/Documentation/core-api/printk-formats.rst
++++ b/Documentation/core-api/printk-formats.rst
+@@ -632,6 +632,38 @@ Examples::
+ %p4cc Y10 little-endian (0x20303159)
+ %p4cc NV12 big-endian (0xb231564e)
+
++Generic FourCC code
++-------------------
++
++::
++ %p4c[hnbl] gP00 (0x67503030)
++
++Print a generic FourCC code, as both ASCII characters and its numerical
++value as hexadecimal.
++
++The additional ``h``, ``r``, ``b``, and ``l`` specifiers are used to specify
++host, reversed, big or little endian order data respectively. Host endian
++order means the data is interpreted as a 32-bit integer and the most
++significant byte is printed first; that is, the character code as printed
++matches the byte order stored in memory on big-endian systems, and is reversed
++on little-endian systems.
++
++Passed by reference.
++
++Examples for a little-endian machine, given &(u32)0x67503030::
++
++ %p4ch gP00 (0x67503030)
++ %p4cl gP00 (0x67503030)
++ %p4cb 00Pg (0x30305067)
++ %p4cr 00Pg (0x30305067)
++
++Examples for a big-endian machine, given &(u32)0x67503030::
++
++ %p4ch gP00 (0x67503030)
++ %p4cl 00Pg (0x30305067)
++ %p4cb gP00 (0x67503030)
++ %p4cr 00Pg (0x30305067)
++
+ Rust
+ ----
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 4112729fc23a..064156d69e75 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -6728,6 +6728,12 @@ S: Supported
+ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
+ F: drivers/gpu/drm/sun4i/sun8i*
+
++DRM DRIVER FOR APPLE TOUCH BARS
++M: Kerem Karabay <kekrby@gmail.com>
++L: dri-devel@lists.freedesktop.org
++S: Maintained
++F: drivers/gpu/drm/tiny/appletbdrm.c
++
+ DRM DRIVER FOR ARM PL111 CLCD
+ S: Orphan
+ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
+@@ -9733,6 +9739,12 @@ F: include/linux/pm.h
+ F: include/linux/suspend.h
+ F: kernel/power/
+
++HID APPLE TOUCH BAR DRIVERS
++M: Kerem Karabay <kekrby@gmail.com>
++L: linux-input@vger.kernel.org
++S: Maintained
++F: drivers/hid/hid-appletb-*
++
+ HID CORE LAYER
+ M: Jiri Kosina <jikos@kernel.org>
+ M: Benjamin Tissoires <bentiss@kernel.org>
+diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
+index 2cc3821b2b16..c11cbe5b6eaa 100644
+--- a/drivers/acpi/video_detect.c
++++ b/drivers/acpi/video_detect.c
+@@ -539,6 +539,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,2"),
+ },
+ },
++ {
++ .callback = video_detect_force_native,
++ /* Apple MacBook Air 9,1 */
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir9,1"),
++ },
++ },
+ {
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1217249 */
+ .callback = video_detect_force_native,
+@@ -548,6 +556,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro12,1"),
+ },
+ },
++ {
++ .callback = video_detect_force_native,
++ /* Apple MacBook Pro 16,2 */
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro16,2"),
++ },
++ },
+ {
+ .callback = video_detect_force_native,
+ /* Dell Inspiron N4010 */
+diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
+index 06f0428a723c..1f32d6cf98d6 100644
+--- a/drivers/firmware/efi/libstub/Makefile
++++ b/drivers/firmware/efi/libstub/Makefile
+@@ -76,7 +76,7 @@ lib-$(CONFIG_EFI_GENERIC_STUB) += efi-stub.o string.o intrinsics.o systable.o \
+
+ lib-$(CONFIG_ARM) += arm32-stub.o
+ lib-$(CONFIG_ARM64) += kaslr.o arm64.o arm64-stub.o smbios.o
+-lib-$(CONFIG_X86) += x86-stub.o
++lib-$(CONFIG_X86) += x86-stub.o smbios.o
+ lib-$(CONFIG_X86_64) += x86-5lvl.o
+ lib-$(CONFIG_RISCV) += kaslr.o riscv.o riscv-stub.o
+ lib-$(CONFIG_LOONGARCH) += loongarch.o loongarch-stub.o
+diff --git a/drivers/firmware/efi/libstub/arm64.c b/drivers/firmware/efi/libstub/arm64.c
+index 446e35eaf3d9..e57cd3de0a00 100644
+--- a/drivers/firmware/efi/libstub/arm64.c
++++ b/drivers/firmware/efi/libstub/arm64.c
+@@ -39,8 +39,7 @@ static bool system_needs_vamap(void)
+ static char const emag[] = "eMAG";
+
+ default:
+- version = efi_get_smbios_string(&record->header, 4,
+- processor_version);
++ version = efi_get_smbios_string(record, processor_version);
+ if (!version || (strncmp(version, altra, sizeof(altra) - 1) &&
+ strncmp(version, emag, sizeof(emag) - 1)))
+ break;
+diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
+index 27abb4ce0291..d33ccbc4a2c6 100644
+--- a/drivers/firmware/efi/libstub/efistub.h
++++ b/drivers/firmware/efi/libstub/efistub.h
+@@ -1204,14 +1204,13 @@ struct efi_smbios_type4_record {
+ u16 thread_enabled;
+ };
+
+-#define efi_get_smbios_string(__record, __type, __name) ({ \
+- int off = offsetof(struct efi_smbios_type ## __type ## _record, \
+- __name); \
+- __efi_get_smbios_string((__record), __type, off); \
++#define efi_get_smbios_string(__record, __field) ({ \
++ __typeof__(__record) __rec = __record; \
++ __efi_get_smbios_string(&__rec->header, &__rec->__field); \
+ })
+
+ const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
+- u8 type, int offset);
++ const u8 *offset);
+
+ void efi_remap_image(unsigned long image_base, unsigned alloc_size,
+ unsigned long code_size);
+diff --git a/drivers/firmware/efi/libstub/smbios.c b/drivers/firmware/efi/libstub/smbios.c
+index c217de2cc8d5..f31410d7e7e1 100644
+--- a/drivers/firmware/efi/libstub/smbios.c
++++ b/drivers/firmware/efi/libstub/smbios.c
+@@ -6,20 +6,31 @@
+
+ #include "efistub.h"
+
+-typedef struct efi_smbios_protocol efi_smbios_protocol_t;
+-
+-struct efi_smbios_protocol {
+- efi_status_t (__efiapi *add)(efi_smbios_protocol_t *, efi_handle_t,
+- u16 *, struct efi_smbios_record *);
+- efi_status_t (__efiapi *update_string)(efi_smbios_protocol_t *, u16 *,
+- unsigned long *, u8 *);
+- efi_status_t (__efiapi *remove)(efi_smbios_protocol_t *, u16);
+- efi_status_t (__efiapi *get_next)(efi_smbios_protocol_t *, u16 *, u8 *,
+- struct efi_smbios_record **,
+- efi_handle_t *);
+-
+- u8 major_version;
+- u8 minor_version;
++typedef union efi_smbios_protocol efi_smbios_protocol_t;
++
++union efi_smbios_protocol {
++ struct {
++ efi_status_t (__efiapi *add)(efi_smbios_protocol_t *, efi_handle_t,
++ u16 *, struct efi_smbios_record *);
++ efi_status_t (__efiapi *update_string)(efi_smbios_protocol_t *, u16 *,
++ unsigned long *, u8 *);
++ efi_status_t (__efiapi *remove)(efi_smbios_protocol_t *, u16);
++ efi_status_t (__efiapi *get_next)(efi_smbios_protocol_t *, u16 *, u8 *,
++ struct efi_smbios_record **,
++ efi_handle_t *);
++
++ u8 major_version;
++ u8 minor_version;
++ };
++ struct {
++ u32 add;
++ u32 update_string;
++ u32 remove;
++ u32 get_next;
++
++ u8 major_version;
++ u8 minor_version;
++ } mixed_mode;
+ };
+
+ const struct efi_smbios_record *efi_get_smbios_record(u8 type)
+@@ -38,7 +49,7 @@ const struct efi_smbios_record *efi_get_smbios_record(u8 type)
+ }
+
+ const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
+- u8 type, int offset)
++ const u8 *offset)
+ {
+ const u8 *strtable;
+
+@@ -46,7 +57,7 @@ const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
+ return NULL;
+
+ strtable = (u8 *)record + record->length;
+- for (int i = 1; i < ((u8 *)record)[offset]; i++) {
++ for (int i = 1; i < *offset; i++) {
+ int len = strlen(strtable);
+
+ if (!len)
+diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
+index 99d39eda5134..0a2342c0bc16 100644
+--- a/drivers/firmware/efi/libstub/x86-stub.c
++++ b/drivers/firmware/efi/libstub/x86-stub.c
+@@ -225,6 +225,68 @@ static void retrieve_apple_device_properties(struct boot_params *boot_params)
+ }
+ }
+
++static bool apple_match_product_name(void)
++{
++ static const char type1_product_matches[][15] = {
++ "MacBookPro11,3",
++ "MacBookPro11,5",
++ "MacBookPro13,3",
++ "MacBookPro14,3",
++ "MacBookPro15,1",
++ "MacBookPro15,3",
++ "MacBookPro16,1",
++ "MacBookPro16,4",
++ };
++ const struct efi_smbios_type1_record *record;
++ const u8 *product;
++
++ record = (struct efi_smbios_type1_record *)efi_get_smbios_record(1);
++ if (!record)
++ return false;
++
++ product = efi_get_smbios_string(record, product_name);
++ if (!product)
++ return false;
++
++ for (int i = 0; i < ARRAY_SIZE(type1_product_matches); i++) {
++ if (!strcmp(product, type1_product_matches[i]))
++ return true;
++ }
++
++ return false;
++}
++
++static void apple_set_os(void)
++{
++ struct {
++ unsigned long version;
++ efi_status_t (__efiapi *set_os_version)(const char *);
++ efi_status_t (__efiapi *set_os_vendor)(const char *);
++ } *set_os;
++ efi_status_t status;
++
++ if (!efi_is_64bit() || !apple_match_product_name())
++ return;
++
++ status = efi_bs_call(locate_protocol, &APPLE_SET_OS_PROTOCOL_GUID, NULL,
++ (void **)&set_os);
++ if (status != EFI_SUCCESS)
++ return;
++
++ if (set_os->version >= 2) {
++ status = set_os->set_os_vendor("Apple Inc.");
++ if (status != EFI_SUCCESS)
++ efi_err("Failed to set OS vendor via apple_set_os\n");
++ }
++
++ if (set_os->version > 0) {
++ /* The version being set doesn't seem to matter */
++ status = set_os->set_os_version("Mac OS X 10.9");
++ if (status != EFI_SUCCESS)
++ efi_err("Failed to set OS version via apple_set_os\n");
++ }
++}
++
+ efi_status_t efi_adjust_memory_range_protection(unsigned long start,
+ unsigned long size)
+ {
+@@ -335,9 +397,12 @@ static const efi_char16_t apple[] = L"Apple";
+
+ static void setup_quirks(struct boot_params *boot_params)
+ {
+- if (IS_ENABLED(CONFIG_APPLE_PROPERTIES) &&
+- !memcmp(efistub_fw_vendor(), apple, sizeof(apple)))
+- retrieve_apple_device_properties(boot_params);
++ if (!memcmp(efistub_fw_vendor(), apple, sizeof(apple))) {
++ if (IS_ENABLED(CONFIG_APPLE_PROPERTIES))
++ retrieve_apple_device_properties(boot_params);
++
++ apple_set_os();
++ }
+ }
+
+ /*
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+index bb0b636d0d75..a05ed98da785 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+@@ -2211,6 +2211,9 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
+ int ret, retry = 0, i;
+ bool supports_atomic = false;
+
++ if (vga_switcheroo_client_probe_defer(pdev))
++ return -EPROBE_DEFER;
++
+ /* skip devices which are owned by radeon */
+ for (i = 0; i < ARRAY_SIZE(amdgpu_unsupported_pciidlist); i++) {
+ if (amdgpu_unsupported_pciidlist[i] == pdev->device)
+diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c
+index b1be458ed4dd..28c0e76a1e88 100644
+--- a/drivers/gpu/drm/drm_format_helper.c
++++ b/drivers/gpu/drm/drm_format_helper.c
+@@ -702,6 +702,57 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi
+ }
+ EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888);
+
++static void drm_fb_xrgb8888_to_bgr888_line(void *dbuf, const void *sbuf, unsigned int pixels)
++{
++ u8 *dbuf8 = dbuf;
++ const __le32 *sbuf32 = sbuf;
++ unsigned int x;
++ u32 pix;
++
++ for (x = 0; x < pixels; x++) {
++ pix = le32_to_cpu(sbuf32[x]);
++ /* write red-green-blue to output in little endianness */
++ *dbuf8++ = (pix & 0x00FF0000) >> 16;
++ *dbuf8++ = (pix & 0x0000FF00) >> 8;
++ *dbuf8++ = (pix & 0x000000FF) >> 0;
++ }
++}
++
++/**
++ * drm_fb_xrgb8888_to_bgr888 - Convert XRGB8888 to BGR888 clip buffer
++ * @dst: Array of BGR888 destination buffers
++ * @dst_pitch: Array of numbers of bytes between the start of two consecutive scanlines
++ * within @dst; can be NULL if scanlines are stored next to each other.
++ * @src: Array of XRGB8888 source buffers
++ * @fb: DRM framebuffer
++ * @clip: Clip rectangle area to copy
++ * @state: Transform and conversion state
++ *
++ * This function copies parts of a framebuffer to display memory and converts the
++ * color format during the process. Destination and framebuffer formats must match. The
++ * parameters @dst, @dst_pitch and @src refer to arrays. Each array must have at
++ * least as many entries as there are planes in @fb's format. Each entry stores the
++ * value for the format's respective color plane at the same index.
++ *
++ * This function does not apply clipping on @dst (i.e. the destination is at the
++ * top-left corner).
++ *
++ * Drivers can use this function for BGR888 devices that don't natively
++ * support XRGB8888.
++ */
++void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
++ const struct iosys_map *src, const struct drm_framebuffer *fb,
++ const struct drm_rect *clip, struct drm_format_conv_state *state)
++{
++ static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
++ 3,
++ };
++
++ drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false, state,
++ drm_fb_xrgb8888_to_bgr888_line);
++}
++EXPORT_SYMBOL(drm_fb_xrgb8888_to_bgr888);
++
+ static void drm_fb_xrgb8888_to_argb8888_line(void *dbuf, const void *sbuf, unsigned int pixels)
+ {
+ __le32 *dbuf32 = dbuf;
+@@ -1035,6 +1086,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
+ } else if (dst_format == DRM_FORMAT_RGB888) {
+ drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip, state);
+ return 0;
++ } else if (dst_format == DRM_FORMAT_BGR888) {
++ drm_fb_xrgb8888_to_bgr888(dst, dst_pitch, src, fb, clip, state);
++ return 0;
+ } else if (dst_format == DRM_FORMAT_ARGB8888) {
+ drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip, state);
+ return 0;
+diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
+index 6bff169fa8d4..8d80ae00b838 100644
+--- a/drivers/gpu/drm/i915/display/intel_ddi.c
++++ b/drivers/gpu/drm/i915/display/intel_ddi.c
+@@ -4648,6 +4648,7 @@ intel_ddi_init_hdmi_connector(struct intel_digital_port *dig_port)
+
+ static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dig_port)
+ {
++ struct intel_display *display = to_intel_display(dig_port);
+ struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
+
+ if (dig_port->base.port != PORT_A)
+@@ -4656,6 +4657,9 @@ static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dig_port)
+ if (dig_port->saved_port_bits & DDI_A_4_LANES)
+ return false;
+
++ if (intel_has_quirk(display, QUIRK_DDI_A_FORCE_4_LANES))
++ return true;
++
+ /* Broxton/Geminilake: Bspec says that DDI_A_4_LANES is the only
+ * supported configuration
+ */
+diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
+index bda702c2cab8..1647e141ae78 100644
+--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
+@@ -196,10 +196,10 @@ static int intelfb_create(struct drm_fb_helper *helper,
+ return ret;
+
+ if (intel_fb &&
+- (sizes->fb_width > intel_fb->base.width ||
+- sizes->fb_height > intel_fb->base.height)) {
++ (sizes->fb_width != intel_fb->base.width ||
++ sizes->fb_height != intel_fb->base.height)) {
+ drm_dbg_kms(&dev_priv->drm,
+- "BIOS fb too small (%dx%d), we require (%dx%d),"
++ "BIOS fb not valid (%dx%d), we require (%dx%d),"
+ " releasing it\n",
+ intel_fb->base.width, intel_fb->base.height,
+ sizes->fb_width, sizes->fb_height);
+diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c
+index 14d5fefc9c5b..727639b8f6a6 100644
+--- a/drivers/gpu/drm/i915/display/intel_quirks.c
++++ b/drivers/gpu/drm/i915/display/intel_quirks.c
+@@ -59,6 +59,18 @@ static void quirk_increase_ddi_disabled_time(struct intel_display *display)
+ drm_info(display->drm, "Applying Increase DDI Disabled quirk\n");
+ }
+
++/*
++ * In some cases, the firmware might not set the lane count to 4 (for example,
++ * when booting in some dual GPU Macs with the dGPU as the default GPU), this
++ * quirk is used to force it as otherwise it might not be possible to compute a
++ * valid link configuration.
++ */
++static void quirk_ddi_a_force_4_lanes(struct intel_display *display)
++{
++ intel_set_quirk(display, QUIRK_DDI_A_FORCE_4_LANES);
++ drm_info(display->drm, "Applying DDI A Forced 4 Lanes quirk\n");
++}
++
+ static void quirk_no_pps_backlight_power_hook(struct intel_display *display)
+ {
+ intel_set_quirk(display, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK);
+@@ -201,6 +213,9 @@ static struct intel_quirk intel_quirks[] = {
+ { 0x3184, 0x1019, 0xa94d, quirk_increase_ddi_disabled_time },
+ /* HP Notebook - 14-r206nv */
+ { 0x0f31, 0x103c, 0x220f, quirk_invert_brightness },
++
++ /* Apple MacBookPro15,1 */
++ { 0x3e9b, 0x106b, 0x0176, quirk_ddi_a_force_4_lanes },
+ };
+
+ void intel_init_quirks(struct intel_display *display)
+diff --git a/drivers/gpu/drm/i915/display/intel_quirks.h b/drivers/gpu/drm/i915/display/intel_quirks.h
+index 151c8f4ae576..46e7feba88f4 100644
+--- a/drivers/gpu/drm/i915/display/intel_quirks.h
++++ b/drivers/gpu/drm/i915/display/intel_quirks.h
+@@ -17,6 +17,7 @@ enum intel_quirk_id {
+ QUIRK_INVERT_BRIGHTNESS,
+ QUIRK_LVDS_SSC_DISABLE,
+ QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK,
++ QUIRK_DDI_A_FORCE_4_LANES,
+ };
+
+ void intel_init_quirks(struct intel_display *display);
+diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c
+index 08992636ec05..35cd3405d045 100644
+--- a/drivers/gpu/drm/tests/drm_format_helper_test.c
++++ b/drivers/gpu/drm/tests/drm_format_helper_test.c
+@@ -60,6 +60,11 @@ struct convert_to_rgb888_result {
+ const u8 expected[TEST_BUF_SIZE];
+ };
+
++struct convert_to_bgr888_result {
++ unsigned int dst_pitch;
++ const u8 expected[TEST_BUF_SIZE];
++};
++
+ struct convert_to_argb8888_result {
+ unsigned int dst_pitch;
+ const u32 expected[TEST_BUF_SIZE];
+@@ -107,6 +112,7 @@ struct convert_xrgb8888_case {
+ struct convert_to_argb1555_result argb1555_result;
+ struct convert_to_rgba5551_result rgba5551_result;
+ struct convert_to_rgb888_result rgb888_result;
++ struct convert_to_bgr888_result bgr888_result;
+ struct convert_to_argb8888_result argb8888_result;
+ struct convert_to_xrgb2101010_result xrgb2101010_result;
+ struct convert_to_argb2101010_result argb2101010_result;
+@@ -151,6 +157,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
+ .expected = { 0x00, 0x00, 0xFF },
+ },
++ .bgr888_result = {
++ .dst_pitch = TEST_USE_DEFAULT_PITCH,
++ .expected = { 0xFF, 0x00, 0x00 },
++ },
+ .argb8888_result = {
+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
+ .expected = { 0xFFFF0000 },
+@@ -217,6 +227,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
+ .expected = { 0x00, 0x00, 0xFF },
+ },
++ .bgr888_result = {
++ .dst_pitch = TEST_USE_DEFAULT_PITCH,
++ .expected = { 0xFF, 0x00, 0x00 },
++ },
+ .argb8888_result = {
+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
+ .expected = { 0xFFFF0000 },
+@@ -330,6 +344,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ },
+ },
++ .bgr888_result = {
++ .dst_pitch = TEST_USE_DEFAULT_PITCH,
++ .expected = {
++ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ },
++ },
+ .argb8888_result = {
+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
+ .expected = {
+@@ -468,6 +491,17 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ },
++ .bgr888_result = {
++ .dst_pitch = 15,
++ .expected = {
++ 0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05, 0xA8, 0xF3, 0x03,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xA8, 0x03, 0x03, 0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ },
++ },
+ .argb8888_result = {
+ .dst_pitch = 20,
+ .expected = {
+@@ -914,6 +948,52 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)
+ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
+ }
+
++static void drm_test_fb_xrgb8888_to_bgr888(struct kunit *test)
++{
++ const struct convert_xrgb8888_case *params = test->param_value;
++ const struct convert_to_bgr888_result *result = &params->bgr888_result;
++ size_t dst_size;
++ u8 *buf = NULL;
++ __le32 *xrgb8888 = NULL;
++ struct iosys_map dst, src;
++
++ struct drm_framebuffer fb = {
++ .format = drm_format_info(DRM_FORMAT_XRGB8888),
++ .pitches = { params->pitch, 0, 0 },
++ };
++
++ dst_size = conversion_buf_size(DRM_FORMAT_BGR888, result->dst_pitch,
++ &params->clip, 0);
++ KUNIT_ASSERT_GT(test, dst_size, 0);
++
++ buf = kunit_kzalloc(test, dst_size, GFP_KERNEL);
++ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
++ iosys_map_set_vaddr(&dst, buf);
++
++ xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);
++ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);
++ iosys_map_set_vaddr(&src, xrgb8888);
++
++ /*
++ * BGR888 expected results are already in little-endian
++ * order, so there's no need to convert the test output.
++ */
++ drm_fb_xrgb8888_to_bgr888(&dst, &result->dst_pitch, &src, &fb, &params->clip,
++ &fmtcnv_state);
++ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
++
++ buf = dst.vaddr; /* restore original value of buf */
++ memset(buf, 0, dst_size);
++
++ int blit_result = 0;
++
++ blit_result = drm_fb_blit(&dst, &result->dst_pitch, DRM_FORMAT_BGR888, &src, &fb, &params->clip,
++ &fmtcnv_state);
++
++ KUNIT_EXPECT_FALSE(test, blit_result);
++ KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
++}
++
+ static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test)
+ {
+ const struct convert_xrgb8888_case *params = test->param_value;
+@@ -1851,6 +1931,7 @@ static struct kunit_case drm_format_helper_test_cases[] = {
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb1555, convert_xrgb8888_gen_params),
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgba5551, convert_xrgb8888_gen_params),
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params),
++ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_bgr888, convert_xrgb8888_gen_params),
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb8888, convert_xrgb8888_gen_params),
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params),
+ KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb2101010, convert_xrgb8888_gen_params),
+diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
+index f6889f649bc1..559a97bce12c 100644
+--- a/drivers/gpu/drm/tiny/Kconfig
++++ b/drivers/gpu/drm/tiny/Kconfig
+@@ -1,5 +1,17 @@
+ # SPDX-License-Identifier: GPL-2.0-only
+
++config DRM_APPLETBDRM
++ tristate "DRM support for Apple Touch Bars"
++ depends on DRM && USB && MMU
++ select DRM_KMS_HELPER
++ select DRM_GEM_SHMEM_HELPER
++ help
++ Say Y here if you want support for the display of Touch Bars on x86
++ MacBook Pros.
++
++ To compile this driver as a module, choose M here: the
++ module will be called appletbdrm.
++
+ config DRM_ARCPGU
+ tristate "ARC PGU"
+ depends on DRM && OF
+diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
+index 76dde89a044b..9a1b412e764a 100644
+--- a/drivers/gpu/drm/tiny/Makefile
++++ b/drivers/gpu/drm/tiny/Makefile
+@@ -1,5 +1,6 @@
+ # SPDX-License-Identifier: GPL-2.0-only
+
++obj-$(CONFIG_DRM_APPLETBDRM) += appletbdrm.o
+ obj-$(CONFIG_DRM_ARCPGU) += arcpgu.o
+ obj-$(CONFIG_DRM_BOCHS) += bochs.o
+ obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus.o
+diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
+new file mode 100644
+index 000000000000..b9440ce0064e
+--- /dev/null
++++ b/drivers/gpu/drm/tiny/appletbdrm.c
+@@ -0,0 +1,624 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Apple Touch Bar DRM Driver
++ *
++ * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
++ */
++
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#include <asm/unaligned.h>
++
++#include <linux/usb.h>
++#include <linux/module.h>
++
++#include <drm/drm_drv.h>
++#include <drm/drm_fourcc.h>
++#include <drm/drm_probe_helper.h>
++#include <drm/drm_atomic_helper.h>
++#include <drm/drm_damage_helper.h>
++#include <drm/drm_format_helper.h>
++#include <drm/drm_gem_shmem_helper.h>
++#include <drm/drm_gem_atomic_helper.h>
++#include <drm/drm_simple_kms_helper.h>
++#include <drm/drm_gem_framebuffer_helper.h>
++
++#define _APPLETBDRM_FOURCC(s) (((s)[0] << 24) | ((s)[1] << 16) | ((s)[2] << 8) | (s)[3])
++#define APPLETBDRM_FOURCC(s) _APPLETBDRM_FOURCC(#s)
++
++#define APPLETBDRM_PIXEL_FORMAT APPLETBDRM_FOURCC(RGBA) /* The actual format is BGR888 */
++#define APPLETBDRM_BITS_PER_PIXEL 24
++
++#define APPLETBDRM_MSG_CLEAR_DISPLAY APPLETBDRM_FOURCC(CLRD)
++#define APPLETBDRM_MSG_GET_INFORMATION APPLETBDRM_FOURCC(GINF)
++#define APPLETBDRM_MSG_UPDATE_COMPLETE APPLETBDRM_FOURCC(UDCL)
++#define APPLETBDRM_MSG_SIGNAL_READINESS APPLETBDRM_FOURCC(REDY)
++
++#define APPLETBDRM_BULK_MSG_TIMEOUT 1000
++
++#define drm_to_adev(_drm) container_of(_drm, struct appletbdrm_device, drm)
++#define adev_to_udev(adev) interface_to_usbdev(to_usb_interface(adev->dev))
++
++struct appletbdrm_device {
++ struct device *dev;
++
++ u8 in_ep;
++ u8 out_ep;
++
++ u32 width;
++ u32 height;
++
++ struct drm_device drm;
++ struct drm_display_mode mode;
++ struct drm_connector connector;
++ struct drm_simple_display_pipe pipe;
++
++ bool readiness_signal_received;
++};
++
++struct appletbdrm_request_header {
++ __le16 unk_00;
++ __le16 unk_02;
++ __le32 unk_04;
++ __le32 unk_08;
++ __le32 size;
++} __packed;
++
++struct appletbdrm_response_header {
++ u8 unk_00[16];
++ u32 msg;
++} __packed;
++
++struct appletbdrm_simple_request {
++ struct appletbdrm_request_header header;
++ u32 msg;
++ u8 unk_14[8];
++ __le32 size;
++} __packed;
++
++struct appletbdrm_information {
++ struct appletbdrm_response_header header;
++ u8 unk_14[12];
++ __le32 width;
++ __le32 height;
++ u8 bits_per_pixel;
++ __le32 bytes_per_row;
++ __le32 orientation;
++ __le32 bitmap_info;
++ u32 pixel_format;
++ __le32 width_inches; /* floating point */
++ __le32 height_inches; /* floating point */
++} __packed;
++
++struct appletbdrm_frame {
++ __le16 begin_x;
++ __le16 begin_y;
++ __le16 width;
++ __le16 height;
++ __le32 buf_size;
++ u8 buf[];
++} __packed;
++
++struct appletbdrm_fb_request_footer {
++ u8 unk_00[12];
++ __le32 unk_0c;
++ u8 unk_10[12];
++ __le32 unk_1c;
++ __le64 timestamp;
++ u8 unk_28[12];
++ __le32 unk_34;
++ u8 unk_38[20];
++ __le32 unk_4c;
++} __packed;
++
++struct appletbdrm_fb_request {
++ struct appletbdrm_request_header header;
++ __le16 unk_10;
++ u8 msg_id;
++ u8 unk_13[29];
++ /*
++ * Contents of `data`:
++ * - struct appletbdrm_frame frames[];
++ * - struct appletbdrm_fb_request_footer footer;
++ * - padding to make the total size a multiple of 16
++ */
++ u8 data[];
++} __packed;
++
++struct appletbdrm_fb_request_response {
++ struct appletbdrm_response_header header;
++ u8 unk_14[12];
++ __le64 timestamp;
++} __packed;
++
++static int appletbdrm_send_request(struct appletbdrm_device *adev,
++ struct appletbdrm_request_header *request, size_t size)
++{
++ struct usb_device *udev = adev_to_udev(adev);
++ struct drm_device *drm = &adev->drm;
++ int ret, actual_size;
++
++ ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
++ request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
++ if (ret) {
++ drm_err(drm, "Failed to send message (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ if (actual_size != size) {
++ drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
++ actual_size, size);
++ return -EIO;
++ }
++
++ return ret;
++}
++
++static int appletbdrm_read_response(struct appletbdrm_device *adev,
++ struct appletbdrm_response_header *response,
++ size_t size, u32 expected_response)
++{
++ struct usb_device *udev = adev_to_udev(adev);
++ struct drm_device *drm = &adev->drm;
++ int ret, actual_size;
++
++retry:
++ ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
++ response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
++ if (ret) {
++ drm_err(drm, "Failed to read response (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ /*
++ * The device responds to the first request sent in a particular
++ * timeframe after the USB device configuration is set with a readiness
++ * signal, in which case the response should be read again
++ */
++ if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
++ if (!adev->readiness_signal_received) {
++ adev->readiness_signal_received = true;
++ goto retry;
++ }
++
++ drm_err(drm, "Encountered unexpected readiness signal\n");
++ return -EIO;
++ }
++
++ if (actual_size != size) {
++ drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
++ actual_size, size);
++ return -EIO;
++ }
++
++ if (response->msg != expected_response) {
++ drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
++ &expected_response, &response->msg);
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
++{
++ struct appletbdrm_simple_request *request;
++ int ret;
++
++ request = kzalloc(sizeof(*request), GFP_KERNEL);
++ if (!request)
++ return -ENOMEM;
++
++ request->header.unk_00 = cpu_to_le16(2);
++ request->header.unk_02 = cpu_to_le16(0x1512);
++ request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
++ request->msg = msg;
++ request->size = request->header.size;
++
++ ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
++
++ kfree(request);
++
++ return ret;
++}
++
++static int appletbdrm_clear_display(struct appletbdrm_device *adev)
++{
++ return appletbdrm_send_msg(adev, APPLETBDRM_MSG_CLEAR_DISPLAY);
++}
++
++static int appletbdrm_signal_readiness(struct appletbdrm_device *adev)
++{
++ return appletbdrm_send_msg(adev, APPLETBDRM_MSG_SIGNAL_READINESS);
++}
++
++static int appletbdrm_get_information(struct appletbdrm_device *adev)
++{
++ struct appletbdrm_information *info;
++ struct drm_device *drm = &adev->drm;
++ u8 bits_per_pixel;
++ u32 pixel_format;
++ int ret;
++
++ info = kzalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return -ENOMEM;
++
++ ret = appletbdrm_send_msg(adev, APPLETBDRM_MSG_GET_INFORMATION);
++ if (ret)
++ return ret;
++
++ ret = appletbdrm_read_response(adev, &info->header, sizeof(*info),
++ APPLETBDRM_MSG_GET_INFORMATION);
++ if (ret)
++ goto free_info;
++
++ bits_per_pixel = info->bits_per_pixel;
++ pixel_format = get_unaligned(&info->pixel_format);
++
++ adev->width = get_unaligned_le32(&info->width);
++ adev->height = get_unaligned_le32(&info->height);
++
++ if (bits_per_pixel != APPLETBDRM_BITS_PER_PIXEL) {
++ drm_err(drm, "Encountered unexpected bits per pixel value (%d)\n", bits_per_pixel);
++ ret = -EINVAL;
++ goto free_info;
++ }
++
++ if (pixel_format != APPLETBDRM_PIXEL_FORMAT) {
++ drm_err(drm, "Encountered unknown pixel format (%p4ch)\n", &pixel_format);
++ ret = -EINVAL;
++ goto free_info;
++ }
++
++free_info:
++ kfree(info);
++
++ return ret;
++}
++
++static u32 rect_size(struct drm_rect *rect)
++{
++ return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
++}
++
++static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
++ struct drm_plane_state *old_state,
++ struct drm_plane_state *state)
++{
++ struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
++ struct appletbdrm_fb_request_response *response;
++ struct appletbdrm_fb_request_footer *footer;
++ struct drm_atomic_helper_damage_iter iter;
++ struct drm_framebuffer *fb = state->fb;
++ struct appletbdrm_fb_request *request;
++ struct drm_device *drm = &adev->drm;
++ struct appletbdrm_frame *frame;
++ u64 timestamp = ktime_get_ns();
++ struct drm_rect damage;
++ size_t frames_size = 0;
++ size_t request_size;
++ int ret;
++
++ drm_atomic_helper_damage_iter_init(&iter, old_state, state);
++ drm_atomic_for_each_plane_damage(&iter, &damage) {
++ frames_size += struct_size(frame, buf, rect_size(&damage));
++ }
++
++ if (!frames_size)
++ return 0;
++
++ request_size = ALIGN(sizeof(*request) + frames_size + sizeof(*footer), 16);
++
++ request = kzalloc(request_size, GFP_KERNEL);
++ if (!request)
++ return -ENOMEM;
++
++ response = kzalloc(sizeof(*response), GFP_KERNEL);
++ if (!response) {
++ ret = -ENOMEM;
++ goto free_request;
++ }
++
++ ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
++ if (ret) {
++ drm_err(drm, "Failed to start CPU framebuffer access (%pe)\n", ERR_PTR(ret));
++ goto free_response;
++ }
++
++ request->header.unk_00 = cpu_to_le16(2);
++ request->header.unk_02 = cpu_to_le16(0x12);
++ request->header.unk_04 = cpu_to_le32(9);
++ request->header.size = cpu_to_le32(request_size - sizeof(request->header));
++ request->unk_10 = cpu_to_le16(1);
++ request->msg_id = timestamp & 0xff;
++
++ frame = (struct appletbdrm_frame *)request->data;
++
++ drm_atomic_helper_damage_iter_init(&iter, old_state, state);
++ drm_atomic_for_each_plane_damage(&iter, &damage) {
++ struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
++ u32 buf_size = rect_size(&damage);
++
++ /*
++ * The coordinates need to be translated to the coordinate
++ * system the device expects, see the comment in
++ * appletbdrm_setup_mode_config
++ */
++ frame->begin_x = cpu_to_le16(damage.y1);
++ frame->begin_y = cpu_to_le16(adev->height - damage.x2);
++ frame->width = cpu_to_le16(drm_rect_height(&damage));
++ frame->height = cpu_to_le16(drm_rect_width(&damage));
++ frame->buf_size = cpu_to_le32(buf_size);
++
++ ret = drm_fb_blit(&dst, NULL, DRM_FORMAT_BGR888,
++ &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
++ if (ret) {
++ drm_err(drm, "Failed to copy damage clip (%pe)\n", ERR_PTR(ret));
++ goto end_fb_cpu_access;
++ }
++
++ frame = (void *)frame + struct_size(frame, buf, buf_size);
++ }
++
++ footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
++
++ footer->unk_0c = cpu_to_le32(0xfffe);
++ footer->unk_1c = cpu_to_le32(0x80001);
++ footer->unk_34 = cpu_to_le32(0x80002);
++ footer->unk_4c = cpu_to_le32(0xffff);
++ footer->timestamp = cpu_to_le64(timestamp);
++
++ ret = appletbdrm_send_request(adev, &request->header, request_size);
++ if (ret)
++ goto end_fb_cpu_access;
++
++ ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
++ APPLETBDRM_MSG_UPDATE_COMPLETE);
++ if (ret)
++ goto end_fb_cpu_access;
++
++ if (response->timestamp != footer->timestamp) {
++ drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
++ le64_to_cpu(response->timestamp), timestamp);
++ goto end_fb_cpu_access;
++ }
++
++end_fb_cpu_access:
++ drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
++free_response:
++ kfree(response);
++free_request:
++ kfree(request);
++
++ return ret;
++}
++
++static int appletbdrm_connector_helper_get_modes(struct drm_connector *connector)
++{
++ struct appletbdrm_device *adev = drm_to_adev(connector->dev);
++
++ return drm_connector_helper_get_modes_fixed(connector, &adev->mode);
++}
++
++static enum drm_mode_status appletbdrm_pipe_mode_valid(struct drm_simple_display_pipe *pipe,
++ const struct drm_display_mode *mode)
++{
++ struct drm_crtc *crtc = &pipe->crtc;
++ struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
++
++ return drm_crtc_helper_mode_valid_fixed(crtc, mode, &adev->mode);
++}
++
++static void appletbdrm_pipe_disable(struct drm_simple_display_pipe *pipe)
++{
++ struct appletbdrm_device *adev = drm_to_adev(pipe->crtc.dev);
++ int idx;
++
++ if (!drm_dev_enter(&adev->drm, &idx))
++ return;
++
++ appletbdrm_clear_display(adev);
++
++ drm_dev_exit(idx);
++}
++
++static void appletbdrm_pipe_update(struct drm_simple_display_pipe *pipe,
++ struct drm_plane_state *old_state)
++{
++ struct drm_crtc *crtc = &pipe->crtc;
++ struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
++ int idx;
++
++ if (!crtc->state->active || !drm_dev_enter(&adev->drm, &idx))
++ return;
++
++ appletbdrm_flush_damage(adev, old_state, pipe->plane.state);
++
++ drm_dev_exit(idx);
++}
++
++static const u32 appletbdrm_formats[] = {
++ DRM_FORMAT_BGR888,
++ DRM_FORMAT_XRGB8888, /* emulated */
++};
++
++static const struct drm_mode_config_funcs appletbdrm_mode_config_funcs = {
++ .fb_create = drm_gem_fb_create_with_dirty,
++ .atomic_check = drm_atomic_helper_check,
++ .atomic_commit = drm_atomic_helper_commit,
++};
++
++static const struct drm_connector_funcs appletbdrm_connector_funcs = {
++ .reset = drm_atomic_helper_connector_reset,
++ .destroy = drm_connector_cleanup,
++ .fill_modes = drm_helper_probe_single_connector_modes,
++ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
++ .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
++};
++
++static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs = {
++ .get_modes = appletbdrm_connector_helper_get_modes,
++};
++
++static const struct drm_simple_display_pipe_funcs appletbdrm_pipe_funcs = {
++ DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS,
++ .update = appletbdrm_pipe_update,
++ .disable = appletbdrm_pipe_disable,
++ .mode_valid = appletbdrm_pipe_mode_valid,
++};
++
++DEFINE_DRM_GEM_FOPS(appletbdrm_drm_fops);
++
++static const struct drm_driver appletbdrm_drm_driver = {
++ DRM_GEM_SHMEM_DRIVER_OPS,
++ .name = "appletbdrm",
++ .desc = "Apple Touch Bar DRM Driver",
++ .date = "20230910",
++ .major = 1,
++ .minor = 0,
++ .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
++ .fops = &appletbdrm_drm_fops,
++};
++
++static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
++{
++ struct drm_connector *connector = &adev->connector;
++ struct drm_device *drm = &adev->drm;
++ struct device *dev = adev->dev;
++ int ret;
++
++ ret = drmm_mode_config_init(drm);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");
++
++ /*
++ * The coordinate system used by the device is different from the
++ * coordinate system of the framebuffer in that the x and y axes are
++ * swapped, and that the y axis is inverted; so what the device reports
++ * as the height is actually the width of the framebuffer and vice
++ * versa
++ */
++ drm->mode_config.min_width = 0;
++ drm->mode_config.min_height = 0;
++ drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
++ drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
++ drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
++ drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
++
++ adev->mode = (struct drm_display_mode) {
++ DRM_MODE_INIT(60, adev->height, adev->width,
++ DRM_MODE_RES_MM(adev->height, 218),
++ DRM_MODE_RES_MM(adev->width, 218))
++ };
++
++ ret = drm_connector_init(drm, connector,
++ &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to initialize connector\n");
++
++ drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
++
++ ret = drm_connector_set_panel_orientation(connector,
++ DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
++
++ connector->display_info.non_desktop = true;
++ ret = drm_object_property_set_value(&connector->base,
++ drm->mode_config.non_desktop_property, true);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
++
++ ret = drm_simple_display_pipe_init(drm, &adev->pipe, &appletbdrm_pipe_funcs,
++ appletbdrm_formats, ARRAY_SIZE(appletbdrm_formats),
++ NULL, &adev->connector);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
++
++ drm_plane_enable_fb_damage_clips(&adev->pipe.plane);
++
++ drm_mode_config_reset(drm);
++
++ ret = drm_dev_register(drm, 0);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to register DRM device\n");
++
++ return 0;
++}
++
++static int appletbdrm_probe(struct usb_interface *intf,
++ const struct usb_device_id *id)
++{
++ struct usb_endpoint_descriptor *bulk_in, *bulk_out;
++ struct device *dev = &intf->dev;
++ struct appletbdrm_device *adev;
++ int ret;
++
++ ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, &bulk_out, NULL, NULL);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
++
++ adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct appletbdrm_device, drm);
++ if (IS_ERR(adev))
++ return PTR_ERR(adev);
++
++ adev->dev = dev;
++ adev->in_ep = bulk_in->bEndpointAddress;
++ adev->out_ep = bulk_out->bEndpointAddress;
++
++ usb_set_intfdata(intf, adev);
++
++ ret = appletbdrm_get_information(adev);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to get display information\n");
++
++ ret = appletbdrm_signal_readiness(adev);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to signal readiness\n");
++
++ ret = appletbdrm_clear_display(adev);
++ if (ret)
++ return dev_err_probe(dev, ret, "Failed to clear display\n");
++
++ return appletbdrm_setup_mode_config(adev);
++}
++
++static void appletbdrm_disconnect(struct usb_interface *intf)
++{
++ struct appletbdrm_device *adev = usb_get_intfdata(intf);
++ struct drm_device *drm = &adev->drm;
++
++ drm_dev_unplug(drm);
++ drm_atomic_helper_shutdown(drm);
++}
++
++static void appletbdrm_shutdown(struct usb_interface *intf)
++{
++ struct appletbdrm_device *adev = usb_get_intfdata(intf);
++
++ /*
++ * The framebuffer needs to be cleared on shutdown since its content
++ * persists across boots
++ */
++ drm_atomic_helper_shutdown(&adev->drm);
++}
++
++static const struct usb_device_id appletbdrm_usb_id_table[] = {
++ { USB_DEVICE_INTERFACE_CLASS(0x05ac, 0x8302, USB_CLASS_AUDIO_VIDEO) },
++ {}
++};
++MODULE_DEVICE_TABLE(usb, appletbdrm_usb_id_table);
++
++static struct usb_driver appletbdrm_usb_driver = {
++ .name = "appletbdrm",
++ .probe = appletbdrm_probe,
++ .disconnect = appletbdrm_disconnect,
++ .shutdown = appletbdrm_shutdown,
++ .id_table = appletbdrm_usb_id_table,
++};
++module_usb_driver(appletbdrm_usb_driver);
++
++MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
++MODULE_DESCRIPTION("Apple Touch Bar DRM Driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
+index 365e6ddbe90f..cf357cd3389d 100644
+--- a/drivers/gpu/vga/vga_switcheroo.c
++++ b/drivers/gpu/vga/vga_switcheroo.c
+@@ -438,12 +438,7 @@ find_active_client(struct list_head *head)
+ bool vga_switcheroo_client_probe_defer(struct pci_dev *pdev)
+ {
+ if ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
+- /*
+- * apple-gmux is needed on pre-retina MacBook Pro
+- * to probe the panel if pdev is the inactive GPU.
+- */
+- if (apple_gmux_present() && pdev != vga_default_device() &&
+- !vgasr_priv.handler_flags)
++ if (apple_gmux_present() && !vgasr_priv.handler_flags)
+ return true;
+ }
+
+diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
+index 08446c89eff6..35ef5d4ef068 100644
+--- a/drivers/hid/Kconfig
++++ b/drivers/hid/Kconfig
+@@ -148,6 +148,27 @@ config HID_APPLEIR
+
+ Say Y here if you want support for Apple infrared remote control.
+
++config HID_APPLETB_BL
++ tristate "Apple Touch Bar Backlight"
++ depends on BACKLIGHT_CLASS_DEVICE
++ help
++ Say Y here if you want support for the backlight of Touch Bars on x86
++ MacBook Pros.
++
++ To compile this driver as a module, choose M here: the
++ module will be called hid-appletb-bl.
++
++config HID_APPLETB_KBD
++ tristate "Apple Touch Bar Keyboard Mode"
++ depends on USB_HID
++ help
++ Say Y here if you want support for the keyboard mode (escape,
++ function, media and brightness keys) of Touch Bars on x86 MacBook
++ Pros.
++
++ To compile this driver as a module, choose M here: the
++ module will be called hid-appletb-kbd.
++
+ config HID_ASUS
+ tristate "Asus"
+ depends on USB_HID
+@@ -723,6 +744,7 @@ config HID_MULTITOUCH
+ Say Y here if you have one of the following devices:
+ - 3M PCT touch screens
+ - ActionStar dual touch panels
++ - Touch Bars on x86 MacBook Pros
+ - Atmel panels
+ - Cando dual touch panels
+ - Chunghwa panels
+diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
+index ce71b53ea6c5..fecec1d61393 100644
+--- a/drivers/hid/Makefile
++++ b/drivers/hid/Makefile
+@@ -29,6 +29,8 @@ obj-$(CONFIG_HID_ALPS) += hid-alps.o
+ obj-$(CONFIG_HID_ACRUX) += hid-axff.o
+ obj-$(CONFIG_HID_APPLE) += hid-apple.o
+ obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o
++obj-$(CONFIG_HID_APPLETB_BL) += hid-appletb-bl.o
++obj-$(CONFIG_HID_APPLETB_KBD) += hid-appletb-kbd.o
+ obj-$(CONFIG_HID_CREATIVE_SB0540) += hid-creative-sb0540.o
+ obj-$(CONFIG_HID_ASUS) += hid-asus.o
+ obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
+diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
+index bd022e004356..6dedb84d7cc3 100644
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -8,6 +8,8 @@
+ * Copyright (c) 2006-2007 Jiri Kosina
+ * Copyright (c) 2008 Jiri Slaby <jirislaby@gmail.com>
+ * Copyright (c) 2019 Paul Pawlowski <paul@mrarm.io>
++ * Copyright (c) 2023 Orlando Chamberlain <orlandoch.dev@gmail.com>
++ * Copyright (c) 2024 Aditya Garg <gargaditya08@live.com>
+ */
+
+ /*
+@@ -23,6 +25,7 @@
+ #include <linux/timer.h>
+ #include <linux/string.h>
+ #include <linux/leds.h>
++#include <dt-bindings/leds/common.h>
+
+ #include "hid-ids.h"
+
+@@ -38,12 +41,17 @@
+ #define APPLE_RDESC_BATTERY BIT(9)
+ #define APPLE_BACKLIGHT_CTL BIT(10)
+ #define APPLE_IS_NON_APPLE BIT(11)
++#define APPLE_MAGIC_BACKLIGHT BIT(12)
+
+ #define APPLE_FLAG_FKEY 0x01
+
+ #define HID_COUNTRY_INTERNATIONAL_ISO 13
+ #define APPLE_BATTERY_TIMEOUT_MS 60000
+
++#define HID_USAGE_MAGIC_BL 0xff00000f
++#define APPLE_MAGIC_REPORT_ID_POWER 3
++#define APPLE_MAGIC_REPORT_ID_BRIGHTNESS 1
++
+ static unsigned int fnmode = 3;
+ module_param(fnmode, uint, 0644);
+ MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, "
+@@ -81,6 +89,12 @@ struct apple_sc_backlight {
+ struct hid_device *hdev;
+ };
+
++struct apple_magic_backlight {
++ struct led_classdev cdev;
++ struct hid_report *brightness;
++ struct hid_report *power;
++};
++
+ struct apple_sc {
+ struct hid_device *hdev;
+ unsigned long quirks;
+@@ -822,6 +836,66 @@ static int apple_backlight_init(struct hid_device *hdev)
+ return ret;
+ }
+
++static void apple_magic_backlight_report_set(struct hid_report *rep, s32 value, u8 rate)
++{
++ rep->field[0]->value[0] = value;
++ rep->field[1]->value[0] = 0x5e; /* Mimic Windows */
++ rep->field[1]->value[0] |= rate << 8;
++
++ hid_hw_request(rep->device, rep, HID_REQ_SET_REPORT);
++}
++
++static void apple_magic_backlight_set(struct apple_magic_backlight *backlight,
++ int brightness, char rate)
++{
++ apple_magic_backlight_report_set(backlight->power, brightness ? 1 : 0, rate);
++ if (brightness)
++ apple_magic_backlight_report_set(backlight->brightness, brightness, rate);
++}
++
++static int apple_magic_backlight_led_set(struct led_classdev *led_cdev,
++ enum led_brightness brightness)
++{
++ struct apple_magic_backlight *backlight = container_of(led_cdev,
++ struct apple_magic_backlight, cdev);
++
++ apple_magic_backlight_set(backlight, brightness, 1);
++ return 0;
++}
++
++static int apple_magic_backlight_init(struct hid_device *hdev)
++{
++ struct apple_magic_backlight *backlight;
++ struct hid_report_enum *report_enum;
++
++ /*
++ * Ensure this usb endpoint is for the keyboard backlight, not touchbar
++ * backlight.
++ */
++ if (hdev->collection[0].usage != HID_USAGE_MAGIC_BL)
++ return -ENODEV;
++
++ backlight = devm_kzalloc(&hdev->dev, sizeof(*backlight), GFP_KERNEL);
++ if (!backlight)
++ return -ENOMEM;
++
++ report_enum = &hdev->report_enum[HID_FEATURE_REPORT];
++ backlight->brightness = report_enum->report_id_hash[APPLE_MAGIC_REPORT_ID_BRIGHTNESS];
++ backlight->power = report_enum->report_id_hash[APPLE_MAGIC_REPORT_ID_POWER];
++
++ if (!backlight->brightness || !backlight->power)
++ return -ENODEV;
++
++ backlight->cdev.name = ":white:" LED_FUNCTION_KBD_BACKLIGHT;
++ backlight->cdev.max_brightness = backlight->brightness->field[0]->logical_maximum;
++ backlight->cdev.brightness_set_blocking = apple_magic_backlight_led_set;
++
++ apple_magic_backlight_set(backlight, 0, 0);
++
++ return devm_led_classdev_register(&hdev->dev, &backlight->cdev);
++
++}
++
+ static int apple_probe(struct hid_device *hdev,
+ const struct hid_device_id *id)
+ {
+@@ -860,7 +934,18 @@ static int apple_probe(struct hid_device *hdev,
+ if (quirks & APPLE_BACKLIGHT_CTL)
+ apple_backlight_init(hdev);
+
++ if (quirks & APPLE_MAGIC_BACKLIGHT) {
++ ret = apple_magic_backlight_init(hdev);
++ if (ret)
++ goto out_err;
++ }
++
+ return 0;
++
++out_err:
++ del_timer_sync(&asc->battery_timer);
++ hid_hw_stop(hdev);
++ return ret;
+ }
+
+ static void apple_remove(struct hid_device *hdev)
+@@ -1073,6 +1158,8 @@ static const struct hid_device_id apple_devices[] = {
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
+ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021),
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT),
++ .driver_data = APPLE_MAGIC_BACKLIGHT },
+
+ { }
+ };
+diff --git a/drivers/hid/hid-appletb-bl.c b/drivers/hid/hid-appletb-bl.c
+new file mode 100644
+index 000000000000..0c5e4b776851
+--- /dev/null
++++ b/drivers/hid/hid-appletb-bl.c
+@@ -0,0 +1,193 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Apple Touch Bar Backlight Driver
++ *
++ * Copyright (c) 2017-2018 Ronald Tschalär
++ * Copyright (c) 2022-2023 Kerem Karabay <kekrby@gmail.com>
++ */
++
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#include <linux/hid.h>
++#include <linux/backlight.h>
++
++#include "hid-ids.h"
++
++#define APPLETB_BL_ON 1
++#define APPLETB_BL_DIM 3
++#define APPLETB_BL_OFF 4
++
++#define HID_UP_APPLEVENDOR_TB_BL 0xff120000
++
++#define HID_VD_APPLE_TB_BRIGHTNESS 0xff120001
++#define HID_USAGE_AUX1 0xff120020
++#define HID_USAGE_BRIGHTNESS 0xff120021
++
++struct appletb_bl {
++ struct hid_field *aux1_field, *brightness_field;
++ struct backlight_device *bdev;
++
++ bool full_on;
++};
++
++const u8 appletb_bl_brightness_map[] = {
++ APPLETB_BL_OFF,
++ APPLETB_BL_DIM,
++ APPLETB_BL_ON
++};
++
++static int appletb_bl_set_brightness(struct appletb_bl *bl, u8 brightness)
++{
++ struct hid_report *report = bl->brightness_field->report;
++ struct hid_device *hdev = report->device;
++ int ret;
++
++ ret = hid_set_field(bl->aux1_field, 0, 1);
++ if (ret) {
++ hid_err(hdev, "Failed to set auxiliary field (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ ret = hid_set_field(bl->brightness_field, 0, brightness);
++ if (ret) {
++ hid_err(hdev, "Failed to set brightness field (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ if (!bl->full_on) {
++ ret = hid_hw_power(hdev, PM_HINT_FULLON);
++ if (ret < 0) {
++ hid_err(hdev, "Device didn't power on (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ bl->full_on = true;
++ }
++
++ hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
++
++ if (brightness == APPLETB_BL_OFF) {
++ hid_hw_power(hdev, PM_HINT_NORMAL);
++ bl->full_on = false;
++ }
++
++ return 0;
++}
++
++static int appletb_bl_update_status(struct backlight_device *bdev)
++{
++ struct appletb_bl *bl = bl_get_data(bdev);
++ u16 brightness;
++
++ if (bdev->props.state & BL_CORE_SUSPENDED)
++ brightness = 0;
++ else
++ brightness = backlight_get_brightness(bdev);
++
++ return appletb_bl_set_brightness(bl, appletb_bl_brightness_map[brightness]);
++}
++
++static const struct backlight_ops appletb_bl_backlight_ops = {
++ .options = BL_CORE_SUSPENDRESUME,
++ .update_status = appletb_bl_update_status,
++};
++
++static int appletb_bl_probe(struct hid_device *hdev, const struct hid_device_id *id)
++{
++ struct hid_field *aux1_field, *brightness_field;
++ struct backlight_properties bl_props = { 0 };
++ struct device *dev = &hdev->dev;
++ struct appletb_bl *bl;
++ int ret;
++
++ ret = hid_parse(hdev);
++ if (ret)
++ return dev_err_probe(dev, ret, "HID parse failed\n");
++
++ aux1_field = hid_find_field(hdev, HID_FEATURE_REPORT,
++ HID_VD_APPLE_TB_BRIGHTNESS, HID_USAGE_AUX1);
++
++ brightness_field = hid_find_field(hdev, HID_FEATURE_REPORT,
++ HID_VD_APPLE_TB_BRIGHTNESS, HID_USAGE_BRIGHTNESS);
++
++ if (!aux1_field || !brightness_field)
++ return -ENODEV;
++
++ if (aux1_field->report != brightness_field->report)
++ return dev_err_probe(dev, -ENODEV, "Encountered unexpected report structure\n");
++
++ bl = devm_kzalloc(dev, sizeof(*bl), GFP_KERNEL);
++ if (!bl)
++ return -ENOMEM;
++
++ ret = hid_hw_start(hdev, HID_CONNECT_DRIVER);
++ if (ret)
++ return dev_err_probe(dev, ret, "HID hardware start failed\n");
++
++ ret = hid_hw_open(hdev);
++ if (ret) {
++ dev_err_probe(dev, ret, "HID hardware open failed\n");
++ goto stop_hw;
++ }
++
++ bl->aux1_field = aux1_field;
++ bl->brightness_field = brightness_field;
++
++ ret = appletb_bl_set_brightness(bl, APPLETB_BL_OFF);
++ if (ret) {
++ dev_err_probe(dev, ret, "Failed to set touch bar brightness to off\n");
++ goto close_hw;
++ }
++
++ bl_props.type = BACKLIGHT_RAW;
++ bl_props.max_brightness = ARRAY_SIZE(appletb_bl_brightness_map) - 1;
++
++ bl->bdev = devm_backlight_device_register(dev, "appletb_backlight", dev, bl,
++ &appletb_bl_backlight_ops, &bl_props);
++ if (IS_ERR(bl->bdev)) {
++ ret = PTR_ERR(bl->bdev);
++ dev_err_probe(dev, ret, "Failed to register backlight device\n");
++ goto close_hw;
++ }
++
++ hid_set_drvdata(hdev, bl);
++
++ return 0;
++
++close_hw:
++ hid_hw_close(hdev);
++stop_hw:
++ hid_hw_stop(hdev);
++
++ return ret;
++}
++
++static void appletb_bl_remove(struct hid_device *hdev)
++{
++ struct appletb_bl *bl = hid_get_drvdata(hdev);
++
++ appletb_bl_set_brightness(bl, APPLETB_BL_OFF);
++
++ hid_hw_close(hdev);
++ hid_hw_stop(hdev);
++}
++
++static const struct hid_device_id appletb_bl_hid_ids[] = {
++ /* MacBook Pro's 2018, 2019, with T2 chip: iBridge DFR Brightness */
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
++ { }
++};
++MODULE_DEVICE_TABLE(hid, appletb_bl_hid_ids);
++
++static struct hid_driver appletb_bl_hid_driver = {
++ .name = "hid-appletb-bl",
++ .id_table = appletb_bl_hid_ids,
++ .probe = appletb_bl_probe,
++ .remove = appletb_bl_remove,
++};
++module_hid_driver(appletb_bl_hid_driver);
++
++MODULE_AUTHOR("Ronald Tschalär");
++MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
++MODULE_DESCRIPTION("MacBookPro Touch Bar Backlight Driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/hid/hid-appletb-kbd.c b/drivers/hid/hid-appletb-kbd.c
+new file mode 100644
+index 000000000000..bc004c40805f
+--- /dev/null
++++ b/drivers/hid/hid-appletb-kbd.c
+@@ -0,0 +1,289 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Apple Touch Bar Keyboard Mode Driver
++ *
++ * Copyright (c) 2017-2018 Ronald Tschalär
++ * Copyright (c) 2022-2023 Kerem Karabay <kekrby@gmail.com>
++ */
++
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#include <linux/hid.h>
++#include <linux/usb.h>
++#include <linux/input.h>
++#include <linux/sysfs.h>
++#include <linux/bitops.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/input/sparse-keymap.h>
++
++#include "hid-ids.h"
++
++#define APPLETB_KBD_MODE_ESC 0
++#define APPLETB_KBD_MODE_FN 1
++#define APPLETB_KBD_MODE_SPCL 2
++#define APPLETB_KBD_MODE_OFF 3
++#define APPLETB_KBD_MODE_MAX APPLETB_KBD_MODE_OFF
++
++#define HID_USAGE_MODE 0x00ff0004
++
++struct appletb_kbd {
++ struct hid_field *mode_field;
++
++ u8 saved_mode;
++ u8 current_mode;
++};
++
++static const struct key_entry appletb_kbd_keymap[] = {
++ { KE_KEY, KEY_ESC, { KEY_ESC } },
++ { KE_KEY, KEY_F1, { KEY_BRIGHTNESSDOWN } },
++ { KE_KEY, KEY_F2, { KEY_BRIGHTNESSUP } },
++ { KE_KEY, KEY_F3, { KEY_RESERVED } },
++ { KE_KEY, KEY_F4, { KEY_RESERVED } },
++ { KE_KEY, KEY_F5, { KEY_KBDILLUMDOWN } },
++ { KE_KEY, KEY_F6, { KEY_KBDILLUMUP } },
++ { KE_KEY, KEY_F7, { KEY_PREVIOUSSONG } },
++ { KE_KEY, KEY_F8, { KEY_PLAYPAUSE } },
++ { KE_KEY, KEY_F9, { KEY_NEXTSONG } },
++ { KE_KEY, KEY_F10, { KEY_MUTE } },
++ { KE_KEY, KEY_F11, { KEY_VOLUMEDOWN } },
++ { KE_KEY, KEY_F12, { KEY_VOLUMEUP } },
++ { KE_END, 0 }
++};
++
++static int appletb_kbd_set_mode(struct appletb_kbd *kbd, u8 mode)
++{
++ struct hid_report *report = kbd->mode_field->report;
++ struct hid_device *hdev = report->device;
++ int ret;
++
++ ret = hid_hw_power(hdev, PM_HINT_FULLON);
++ if (ret) {
++ hid_err(hdev, "Device didn't resume (%pe)\n", ERR_PTR(ret));
++ return ret;
++ }
++
++ ret = hid_set_field(kbd->mode_field, 0, mode);
++ if (ret) {
++ hid_err(hdev, "Failed to set mode field to %u (%pe)\n", mode, ERR_PTR(ret));
++ goto power_normal;
++ }
++
++ hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
++
++ kbd->current_mode = mode;
++
++power_normal:
++ hid_hw_power(hdev, PM_HINT_NORMAL);
++
++ return ret;
++}
++
++static ssize_t mode_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct appletb_kbd *kbd = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", kbd->current_mode);
++}
++
++static ssize_t mode_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t size)
++{
++ struct appletb_kbd *kbd = dev_get_drvdata(dev);
++ u8 mode;
++ int ret;
++
++ ret = kstrtou8(buf, 0, &mode);
++ if (ret)
++ return ret;
++
++ if (mode > APPLETB_KBD_MODE_MAX)
++ return -EINVAL;
++
++ ret = appletb_kbd_set_mode(kbd, mode);
++
++ return ret < 0 ? ret : size;
++}
++static DEVICE_ATTR_RW(mode);
++
++struct attribute *appletb_kbd_attrs[] = {
++ &dev_attr_mode.attr,
++ NULL
++};
++ATTRIBUTE_GROUPS(appletb_kbd);
++
++static int appletb_tb_key_to_slot(unsigned int code)
++{
++ switch (code) {
++ case KEY_ESC:
++ return 0;
++ case KEY_F1 ... KEY_F10:
++ return code - KEY_F1 + 1;
++ case KEY_F11 ... KEY_F12:
++ return code - KEY_F11 + 11;
++
++ default:
++ return -EINVAL;
++ }
++}
++
++static int appletb_kbd_hid_event(struct hid_device *hdev, struct hid_field *field,
++ struct hid_usage *usage, __s32 value)
++{
++ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
++ struct key_entry *translation;
++ struct input_dev *input;
++ int slot;
++
++ if ((usage->hid & HID_USAGE_PAGE) != HID_UP_KEYBOARD || usage->type != EV_KEY)
++ return 0;
++
++ input = field->hidinput->input;
++
++ /*
++ * Skip non-touch-bar keys.
++ *
++ * Either the touch bar itself or usbhid generate a slew of key-down
++ * events for all the meta keys. None of which we're at all interested
++ * in.
++ */
++ slot = appletb_tb_key_to_slot(usage->code);
++ if (slot < 0)
++ return 0;
++
++ translation = sparse_keymap_entry_from_scancode(input, usage->code);
++
++ if (translation && kbd->current_mode == APPLETB_KBD_MODE_SPCL) {
++ input_event(input, usage->type, translation->keycode, value);
++
++ return 1;
++ }
++
++ return kbd->current_mode == APPLETB_KBD_MODE_OFF;
++}
++
++static int appletb_kbd_input_configured(struct hid_device *hdev, struct hid_input *hidinput)
++{
++ struct input_dev *input = hidinput->input;
++
++ /*
++ * Clear various input capabilities that are blindly set by the hid
++ * driver (usbkbd.c)
++ */
++ memset(input->evbit, 0, sizeof(input->evbit));
++ memset(input->keybit, 0, sizeof(input->keybit));
++ memset(input->ledbit, 0, sizeof(input->ledbit));
++
++ __set_bit(EV_REP, input->evbit);
++
++ return sparse_keymap_setup(input, appletb_kbd_keymap, NULL);
++}
++
++static int appletb_kbd_probe(struct hid_device *hdev, const struct hid_device_id *id)
++{
++ struct appletb_kbd *kbd;
++ struct device *dev = &hdev->dev;
++ struct hid_field *mode_field;
++ int ret;
++
++ ret = hid_parse(hdev);
++ if (ret)
++ return dev_err_probe(dev, ret, "HID parse failed\n");
++
++ mode_field = hid_find_field(hdev, HID_OUTPUT_REPORT,
++ HID_GD_KEYBOARD, HID_USAGE_MODE);
++ if (!mode_field)
++ return -ENODEV;
++
++ kbd = devm_kzalloc(dev, sizeof(*kbd), GFP_KERNEL);
++ if (!kbd)
++ return -ENOMEM;
++
++ kbd->mode_field = mode_field;
++
++ ret = hid_hw_start(hdev, HID_CONNECT_HIDINPUT);
++ if (ret)
++ return dev_err_probe(dev, ret, "HID hw start failed\n");
++
++ ret = hid_hw_open(hdev);
++ if (ret) {
++ dev_err_probe(dev, ret, "HID hw open failed\n");
++ goto stop_hw;
++ }
++
++ ret = appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
++ if (ret) {
++ dev_err_probe(dev, ret, "Failed to set touchbar mode\n");
++ goto close_hw;
++ }
++
++ hid_set_drvdata(hdev, kbd);
++
++ return 0;
++
++close_hw:
++ hid_hw_close(hdev);
++stop_hw:
++ hid_hw_stop(hdev);
++ return ret;
++}
++
++static void appletb_kbd_remove(struct hid_device *hdev)
++{
++ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
++
++ appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
++
++ hid_hw_close(hdev);
++ hid_hw_stop(hdev);
++}
++
++#ifdef CONFIG_PM
++static int appletb_kbd_suspend(struct hid_device *hdev, pm_message_t msg)
++{
++ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
++
++ kbd->saved_mode = kbd->current_mode;
++ appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
++
++ return 0;
++}
++
++static int appletb_kbd_reset_resume(struct hid_device *hdev)
++{
++ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
++
++ appletb_kbd_set_mode(kbd, kbd->saved_mode);
++
++ return 0;
++}
++#endif
++
++static const struct hid_device_id appletb_kbd_hid_ids[] = {
++ /* MacBook Pro's 2018, 2019, with T2 chip: iBridge Display */
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
++ { }
++};
++MODULE_DEVICE_TABLE(hid, appletb_kbd_hid_ids);
++
++static struct hid_driver appletb_kbd_hid_driver = {
++ .name = "hid-appletb-kbd",
++ .id_table = appletb_kbd_hid_ids,
++ .probe = appletb_kbd_probe,
++ .remove = appletb_kbd_remove,
++ .event = appletb_kbd_hid_event,
++ .input_configured = appletb_kbd_input_configured,
++#ifdef CONFIG_PM
++ .suspend = appletb_kbd_suspend,
++ .reset_resume = appletb_kbd_reset_resume,
++#endif
++ .driver.dev_groups = appletb_kbd_groups,
++};
++module_hid_driver(appletb_kbd_hid_driver);
++
++MODULE_AUTHOR("Ronald Tschalär");
++MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
++MODULE_DESCRIPTION("MacBookPro Touch Bar Keyboard Mode Driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 74efda212c55..f4379efdbf30 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1912,6 +1912,31 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
+ }
+ EXPORT_SYMBOL_GPL(hid_set_field);
+
++struct hid_field *hid_find_field(struct hid_device *hdev, unsigned int report_type,
++ unsigned int application, unsigned int usage)
++{
++ struct list_head *report_list = &hdev->report_enum[report_type].report_list;
++ struct hid_report *report;
++ int i, j;
++
++ list_for_each_entry(report, report_list, list) {
++ if (report->application != application)
++ continue;
++
++ for (i = 0; i < report->maxfield; i++) {
++ struct hid_field *field = report->field[i];
++
++ for (j = 0; j < field->maxusage; j++) {
++ if (field->usage[j].hid == usage)
++ return field;
++ }
++ }
++ }
++
++ return NULL;
++}
++EXPORT_SYMBOL_GPL(hid_find_field);
++
+ static struct hid_report *hid_get_report(struct hid_report_enum *report_enum,
+ const u8 *data)
+ {
+diff --git a/drivers/hid/hid-google-hammer.c b/drivers/hid/hid-google-hammer.c
+index 25331695ae32..3380694ba18c 100644
+--- a/drivers/hid/hid-google-hammer.c
++++ b/drivers/hid/hid-google-hammer.c
+@@ -418,38 +418,15 @@ static int hammer_event(struct hid_device *hid, struct hid_field *field,
+ return 0;
+ }
+
+-static bool hammer_has_usage(struct hid_device *hdev, unsigned int report_type,
+- unsigned application, unsigned usage)
+-{
+- struct hid_report_enum *re = &hdev->report_enum[report_type];
+- struct hid_report *report;
+- int i, j;
+-
+- list_for_each_entry(report, &re->report_list, list) {
+- if (report->application != application)
+- continue;
+-
+- for (i = 0; i < report->maxfield; i++) {
+- struct hid_field *field = report->field[i];
+-
+- for (j = 0; j < field->maxusage; j++)
+- if (field->usage[j].hid == usage)
+- return true;
+- }
+- }
+-
+- return false;
+-}
+-
+ static bool hammer_has_folded_event(struct hid_device *hdev)
+ {
+- return hammer_has_usage(hdev, HID_INPUT_REPORT,
++ return !!hid_find_field(hdev, HID_INPUT_REPORT,
+ HID_GD_KEYBOARD, HID_USAGE_KBD_FOLDED);
+ }
+
+ static bool hammer_has_backlight_control(struct hid_device *hdev)
+ {
+- return hammer_has_usage(hdev, HID_OUTPUT_REPORT,
++ return !!hid_find_field(hdev, HID_OUTPUT_REPORT,
+ HID_GD_KEYBOARD, HID_AD_BRIGHTNESS);
+ }
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 56fc78841f24..0fed955364c3 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -78,6 +78,7 @@
+ #define MT_QUIRK_ORIENTATION_INVERT BIT(22)
+ #define MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT BIT(23)
+ #define MT_QUIRK_HAS_TYPE_COVER_TABLET_MODE_SWITCH BIT(24)
++#define MT_QUIRK_TOUCH_IS_TIPSTATE BIT(25)
+
+ #define MT_INPUTMODE_TOUCHSCREEN 0x02
+ #define MT_INPUTMODE_TOUCHPAD 0x03
+@@ -145,6 +146,7 @@ struct mt_class {
+ __s32 sn_height; /* Signal/noise ratio for height events */
+ __s32 sn_pressure; /* Signal/noise ratio for pressure events */
+ __u8 maxcontacts;
++ bool is_direct; /* true for touchscreens */
+ bool is_indirect; /* true for touchpads */
+ bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
+ };
+@@ -225,6 +225,7 @@
+ #define MT_CLS_RAZER_BLADE_STEALTH 0x0112
+ #define MT_CLS_SMART_TECH 0x0113
+ #define MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER 0x0114
++#define MT_CLS_APPLE_TOUCHBAR 0x0115
+
+ #define MT_DEFAULT_MAXCONTACT 10
+ #define MT_MAX_MAXCONTACT 250
+@@ -420,6 +420,13 @@
+ MT_QUIRK_WIN8_PTP_BUTTONS,
+ .export_all_inputs = true
+ },
++ { .name = MT_CLS_APPLE_TOUCHBAR,
++ .quirks = MT_QUIRK_HOVERING |
++ MT_QUIRK_TOUCH_IS_TIPSTATE |
++ MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE,
++ .is_direct = true,
++ .maxcontacts = 11,
++ },
+ { }
+ };
+
+@@ -489,9 +499,6 @@ static void mt_feature_mapping(struct hid_device *hdev,
+ if (!td->maxcontacts &&
+ field->logical_maximum <= MT_MAX_MAXCONTACT)
+ td->maxcontacts = field->logical_maximum;
+- if (td->mtclass.maxcontacts)
+- /* check if the maxcontacts is given by the class */
+- td->maxcontacts = td->mtclass.maxcontacts;
+
+ break;
+ case HID_DG_BUTTONTYPE:
+@@ -565,13 +572,13 @@ static struct mt_application *mt_allocate_application(struct mt_device *td,
+ mt_application->application = application;
+ INIT_LIST_HEAD(&mt_application->mt_usages);
+
+- if (application == HID_DG_TOUCHSCREEN)
++ if (application == HID_DG_TOUCHSCREEN && !td->mtclass.is_indirect)
+ mt_application->mt_flags |= INPUT_MT_DIRECT;
+
+ /*
+ * Model touchscreens providing buttons as touchpads.
+ */
+- if (application == HID_DG_TOUCHPAD) {
++ if (application == HID_DG_TOUCHPAD && !td->mtclass.is_direct) {
+ mt_application->mt_flags |= INPUT_MT_POINTER;
+ td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
+ }
+@@ -635,7 +642,9 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
+
+ if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
+ for (n = 0; n < field->report_count; n++) {
+- if (field->usage[n].hid == HID_DG_CONTACTID) {
++ unsigned int hid = field->usage[n].hid;
++
++ if (hid == HID_DG_CONTACTID || hid == HID_DG_TRANSDUCER_INDEX) {
+ rdata->is_mt_collection = true;
+ break;
+ }
+@@ -807,6 +816,15 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+
+ MT_STORE_FIELD(confidence_state);
+ return 1;
++ case HID_DG_TOUCH:
++ /*
++ * Legacy devices use TIPSWITCH and not TOUCH.
++ * Let's just ignore this field unless the quirk is set.
++ */
++ if (!(cls->quirks & MT_QUIRK_TOUCH_IS_TIPSTATE))
++ return -1;
++
++ fallthrough;
+ case HID_DG_TIPSWITCH:
+ if (field->application != HID_GD_SYSTEM_MULTIAXIS)
+ input_set_capability(hi->input,
+@@ -814,6 +832,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ MT_STORE_FIELD(tip_state);
+ return 1;
+ case HID_DG_CONTACTID:
++ case HID_DG_TRANSDUCER_INDEX:
+ MT_STORE_FIELD(contactid);
+ app->touches_by_report++;
+ return 1;
+@@ -869,10 +888,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ case HID_DG_CONTACTMAX:
+ /* contact max are global to the report */
+ return -1;
+- case HID_DG_TOUCH:
+- /* Legacy devices use TIPSWITCH and not TOUCH.
+- * Let's just ignore this field. */
+- return -1;
+ }
+ /* let hid-input decide for the others */
+ return 0;
+@@ -1300,6 +1315,10 @@ static int mt_touch_input_configured(struct hid_device *hdev,
+ struct input_dev *input = hi->input;
+ int ret;
+
++ /* check if the maxcontacts is given by the class */
++ if (cls->maxcontacts)
++ td->maxcontacts = cls->maxcontacts;
++
+ if (!td->maxcontacts)
+ td->maxcontacts = MT_DEFAULT_MAXCONTACT;
+
+@@ -1307,6 +1326,9 @@ static int mt_touch_input_configured(struct hid_device *hdev,
+ if (td->serial_maybe)
+ mt_post_parse_default_settings(td, app);
+
++ if (cls->is_direct)
++ app->mt_flags |= INPUT_MT_DIRECT;
++
+ if (cls->is_indirect)
+ app->mt_flags |= INPUT_MT_POINTER;
+
+@@ -1882,6 +1882,17 @@
+ }
+ }
+
++ ret = hid_parse(hdev);
++ if (ret != 0) {
++ unregister_pm_notifier(&td->pm_notifier);
++ return ret;
++ }
++
++ if (mtclass->name == MT_CLS_APPLE_TOUCHBAR &&
++ !hid_find_field(hdev, HID_INPUT_REPORT,
++ HID_DG_TOUCHPAD, HID_DG_TRANSDUCER_INDEX))
++ return -ENODEV;
++
+ td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
+ if (!td) {
+ dev_err(&hdev->dev, "cannot allocate multitouch data\n");
+@@ -1932,12 +1943,6 @@
+
+ timer_setup(&td->release_timer, mt_expired_timeout, 0);
+
+- ret = hid_parse(hdev);
+- if (ret != 0) {
+- unregister_pm_notifier(&td->pm_notifier);
+- return ret;
+- }
+-
+ if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
+ mt_fix_const_fields(hdev, HID_DG_CONTACTID);
+
+@@ -2427,6 +2427,11 @@
+ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY,
+ USB_VENDOR_ID_MICROSOFT, 0x09c0) },
+
++ /* Apple Touch Bars */
++ { .driver_data = MT_CLS_APPLE_TOUCHBAR,
++ HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
++ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
++
+ /* Google MT devices */
+ { .driver_data = MT_CLS_GOOGLE,
+ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
+diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
+index e0bbf0c6345d..7c576d6540fe 100644
+--- a/drivers/hid/hid-quirks.c
++++ b/drivers/hid/hid-quirks.c
+@@ -328,8 +328,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021) },
+- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
+- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
+ #endif
+ #if IS_ENABLED(CONFIG_HID_APPLEIR)
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
+@@ -338,6 +336,12 @@ static const struct hid_device_id hid_have_special_driver[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
+ #endif
++#if IS_ENABLED(CONFIG_HID_APPLETB_BL)
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
++#endif
++#if IS_ENABLED(CONFIG_HID_APPLETB_KBD)
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
++#endif
+ #if IS_ENABLED(CONFIG_HID_ASUS)
+ { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
+ { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index fc6d6a9053ce..698f44794453 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -6,6 +6,7 @@
+ *
+ * Copyright (C) 2007 Nicolas Boichat <nicolas@boichat.ch>
+ * Copyright (C) 2010 Henrik Rydberg <rydberg@euromail.se>
++ * Copyright (C) 2019 Paul Pawlowski <paul@mrarm.io>
+ *
+ * Based on hdaps.c driver:
+ * Copyright (C) 2005 Robert Love <rml@novell.com>
+@@ -18,7 +19,7 @@
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+ #include <linux/delay.h>
+-#include <linux/platform_device.h>
++#include <linux/acpi.h>
+ #include <linux/input.h>
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+@@ -35,12 +36,24 @@
+ #include <linux/bits.h>
+
+ /* data port used by Apple SMC */
+-#define APPLESMC_DATA_PORT 0x300
++#define APPLESMC_DATA_PORT 0
+ /* command/status port used by Apple SMC */
+-#define APPLESMC_CMD_PORT 0x304
++#define APPLESMC_CMD_PORT 4
+
+ #define APPLESMC_NR_PORTS 32 /* 0x300-0x31f */
+
++#define APPLESMC_IOMEM_KEY_DATA 0
++#define APPLESMC_IOMEM_KEY_STATUS 0x4005
++#define APPLESMC_IOMEM_KEY_NAME 0x78
++#define APPLESMC_IOMEM_KEY_DATA_LEN 0x7D
++#define APPLESMC_IOMEM_KEY_SMC_ID 0x7E
++#define APPLESMC_IOMEM_KEY_CMD 0x7F
++#define APPLESMC_IOMEM_MIN_SIZE 0x4006
++
++#define APPLESMC_IOMEM_KEY_TYPE_CODE 0
++#define APPLESMC_IOMEM_KEY_TYPE_DATA_LEN 5
++#define APPLESMC_IOMEM_KEY_TYPE_FLAGS 6
++
+ #define APPLESMC_MAX_DATA_LENGTH 32
+
+ /* Apple SMC status bits */
+@@ -74,6 +87,7 @@
+ #define FAN_ID_FMT "F%dID" /* r-o char[16] */
+
+ #define TEMP_SENSOR_TYPE "sp78"
++#define FLOAT_TYPE "flt "
+
+ /* List of keys used to read/write fan speeds */
+ static const char *const fan_speed_fmt[] = {
+@@ -83,6 +97,7 @@ static const char *const fan_speed_fmt[] = {
+ "F%dSf", /* safe speed - not all models */
+ "F%dTg", /* target speed (manual: rw) */
+ };
++#define FAN_MANUAL_FMT "F%dMd"
+
+ #define INIT_TIMEOUT_MSECS 5000 /* wait up to 5s for device init ... */
+ #define INIT_WAIT_MSECS 50 /* ... in 50ms increments */
+@@ -119,7 +134,7 @@ struct applesmc_entry {
+ };
+
+ /* Register lookup and registers common to all SMCs */
+-static struct applesmc_registers {
++struct applesmc_registers {
+ struct mutex mutex; /* register read/write mutex */
+ unsigned int key_count; /* number of SMC registers */
+ unsigned int fan_count; /* number of fans */
+@@ -133,26 +148,38 @@ static struct applesmc_registers {
+ bool init_complete; /* true when fully initialized */
+ struct applesmc_entry *cache; /* cached key entries */
+ const char **index; /* temperature key index */
+-} smcreg = {
+- .mutex = __MUTEX_INITIALIZER(smcreg.mutex),
+ };
+
+-static const int debug;
+-static struct platform_device *pdev;
+-static s16 rest_x;
+-static s16 rest_y;
+-static u8 backlight_state[2];
++struct applesmc_device {
++ struct acpi_device *dev;
++ struct device *ldev;
++ struct applesmc_registers reg;
+
+-static struct device *hwmon_dev;
+-static struct input_dev *applesmc_idev;
++ bool port_base_set, iomem_base_set;
++ u16 port_base;
++ u8 *__iomem iomem_base;
++ u32 iomem_base_addr, iomem_base_size;
+
+-/*
+- * Last index written to key_at_index sysfs file, and value to use for all other
+- * key_at_index_* sysfs files.
+- */
+-static unsigned int key_at_index;
++ s16 rest_x;
++ s16 rest_y;
++
++ u8 backlight_state[2];
++
++ struct device *hwmon_dev;
++ struct input_dev *idev;
++
++ /*
++ * Last index written to key_at_index sysfs file, and value to use for all other
++ * key_at_index_* sysfs files.
++ */
++ unsigned int key_at_index;
+
+-static struct workqueue_struct *applesmc_led_wq;
++ struct workqueue_struct *backlight_wq;
++ struct work_struct backlight_work;
++ struct led_classdev backlight_dev;
++};
++
++static const int debug;
+
+ /*
+ * Wait for specific status bits with a mask on the SMC.
+@@ -162,7 +189,7 @@ static struct workqueue_struct *applesmc_led_wq;
+ * run out past 500ms.
+ */
+
+-static int wait_status(u8 val, u8 mask)
++static int port_wait_status(struct applesmc_device *smc, u8 val, u8 mask)
+ {
+ u8 status;
+ int us;
+@@ -170,7 +197,7 @@ static int wait_status(u8 val, u8 mask)
+
+ us = APPLESMC_MIN_WAIT;
+ for (i = 0; i < 24 ; i++) {
+- status = inb(APPLESMC_CMD_PORT);
++ status = inb(smc->port_base + APPLESMC_CMD_PORT);
+ if ((status & mask) == val)
+ return 0;
+ usleep_range(us, us * 2);
+@@ -180,13 +207,13 @@ static int wait_status(u8 val, u8 mask)
+ return -EIO;
+ }
+
+-/* send_byte - Write to SMC data port. Callers must hold applesmc_lock. */
++/* port_send_byte - Write to SMC data port. Callers must hold applesmc_lock. */
+
+-static int send_byte(u8 cmd, u16 port)
++static int port_send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
+ {
+ int status;
+
+- status = wait_status(0, SMC_STATUS_IB_CLOSED);
++ status = port_wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
+ if (status)
+ return status;
+ /*
+@@ -195,24 +222,25 @@ static int send_byte(u8 cmd, u16 port)
+ * this extra read may not happen if status returns both
+ * simultaneously and this would appear to be required.
+ */
+- status = wait_status(SMC_STATUS_BUSY, SMC_STATUS_BUSY);
++ status = port_wait_status(smc, SMC_STATUS_BUSY, SMC_STATUS_BUSY);
+ if (status)
+ return status;
+
+- outb(cmd, port);
++ outb(cmd, smc->port_base + port);
+ return 0;
+ }
+
+-/* send_command - Write a command to the SMC. Callers must hold applesmc_lock. */
++/* port_send_command - Write a command to the SMC. Callers must hold applesmc_lock. */
+
+-static int send_command(u8 cmd)
++static int port_send_command(struct applesmc_device *smc, u8 cmd)
+ {
+ int ret;
+
+- ret = wait_status(0, SMC_STATUS_IB_CLOSED);
++ ret = port_wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
+ if (ret)
+ return ret;
+- outb(cmd, APPLESMC_CMD_PORT);
++
++ outb(cmd, smc->port_base + APPLESMC_CMD_PORT);
+ return 0;
+ }
+
+@@ -222,110 +250,304 @@ static int send_command(u8 cmd)
+ * If busy is stuck high after the command then the SMC is jammed.
+ */
+
+-static int smc_sane(void)
++static int port_smc_sane(struct applesmc_device *smc)
+ {
+ int ret;
+
+- ret = wait_status(0, SMC_STATUS_BUSY);
++ ret = port_wait_status(smc, 0, SMC_STATUS_BUSY);
+ if (!ret)
+ return ret;
+- ret = send_command(APPLESMC_READ_CMD);
++ ret = port_send_command(smc, APPLESMC_READ_CMD);
+ if (ret)
+ return ret;
+- return wait_status(0, SMC_STATUS_BUSY);
++ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
+ }
+
+-static int send_argument(const char *key)
++static int port_send_argument(struct applesmc_device *smc, const char *key)
+ {
+ int i;
+
+ for (i = 0; i < 4; i++)
+- if (send_byte(key[i], APPLESMC_DATA_PORT))
++ if (port_send_byte(smc, key[i], APPLESMC_DATA_PORT))
+ return -EIO;
+ return 0;
+ }
+
+-static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
++static int port_read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
++ u8 *buffer, u8 len)
+ {
+ u8 status, data = 0;
+ int i;
+ int ret;
+
+- ret = smc_sane();
++ ret = port_smc_sane(smc);
+ if (ret)
+ return ret;
+
+- if (send_command(cmd) || send_argument(key)) {
++ if (port_send_command(smc, cmd) || port_send_argument(smc, key)) {
+ pr_warn("%.4s: read arg fail\n", key);
+ return -EIO;
+ }
+
+ /* This has no effect on newer (2012) SMCs */
+- if (send_byte(len, APPLESMC_DATA_PORT)) {
++ if (port_send_byte(smc, len, APPLESMC_DATA_PORT)) {
+ pr_warn("%.4s: read len fail\n", key);
+ return -EIO;
+ }
+
+ for (i = 0; i < len; i++) {
+- if (wait_status(SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY,
++ if (port_wait_status(smc,
++ SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY,
+ SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY)) {
+ pr_warn("%.4s: read data[%d] fail\n", key, i);
+ return -EIO;
+ }
+- buffer[i] = inb(APPLESMC_DATA_PORT);
++ buffer[i] = inb(smc->port_base + APPLESMC_DATA_PORT);
+ }
+
+ /* Read the data port until bit0 is cleared */
+ for (i = 0; i < 16; i++) {
+ udelay(APPLESMC_MIN_WAIT);
+- status = inb(APPLESMC_CMD_PORT);
++ status = inb(smc->port_base + APPLESMC_CMD_PORT);
+ if (!(status & SMC_STATUS_AWAITING_DATA))
+ break;
+- data = inb(APPLESMC_DATA_PORT);
++ data = inb(smc->port_base + APPLESMC_DATA_PORT);
+ }
+ if (i)
+ pr_warn("flushed %d bytes, last value is: %d\n", i, data);
+
+- return wait_status(0, SMC_STATUS_BUSY);
++ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
+ }
+
+-static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
++static int port_write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
++ const u8 *buffer, u8 len)
+ {
+ int i;
+ int ret;
+
+- ret = smc_sane();
++ ret = port_smc_sane(smc);
+ if (ret)
+ return ret;
+
+- if (send_command(cmd) || send_argument(key)) {
++ if (port_send_command(smc, cmd) || port_send_argument(smc, key)) {
+ pr_warn("%s: write arg fail\n", key);
+ return -EIO;
+ }
+
+- if (send_byte(len, APPLESMC_DATA_PORT)) {
++ if (port_send_byte(smc, len, APPLESMC_DATA_PORT)) {
+ pr_warn("%.4s: write len fail\n", key);
+ return -EIO;
+ }
+
+ for (i = 0; i < len; i++) {
+- if (send_byte(buffer[i], APPLESMC_DATA_PORT)) {
++ if (port_send_byte(smc, buffer[i], APPLESMC_DATA_PORT)) {
+ pr_warn("%s: write data fail\n", key);
+ return -EIO;
+ }
+ }
+
+- return wait_status(0, SMC_STATUS_BUSY);
++ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
+ }
+
+-static int read_register_count(unsigned int *count)
++static int port_get_smc_key_info(struct applesmc_device *smc,
++ const char *key, struct applesmc_entry *info)
+ {
+- __be32 be;
+ int ret;
++ u8 raw[6];
+
+- ret = read_smc(APPLESMC_READ_CMD, KEY_COUNT_KEY, (u8 *)&be, 4);
++ ret = port_read_smc(smc, APPLESMC_GET_KEY_TYPE_CMD, key, raw, 6);
+ if (ret)
+ return ret;
++ info->len = raw[0];
++ memcpy(info->type, &raw[1], 4);
++ info->flags = raw[5];
++ return 0;
++}
++
++
++/*
++ * MMIO based communication.
++ * TODO: Use updated mechanism for cmd timeout/retry
++ */
++
++static void iomem_clear_status(struct applesmc_device *smc)
++{
++ if (ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS))
++ iowrite8(0, smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
++}
++
++static int iomem_wait_read(struct applesmc_device *smc)
++{
++ u8 status;
++ int us;
++ int i;
++
++ us = APPLESMC_MIN_WAIT;
++ for (i = 0; i < 24 ; i++) {
++ status = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
++ if (status & 0x20)
++ return 0;
++ usleep_range(us, us * 2);
++ if (i > 9)
++ us <<= 1;
++ }
++
++ dev_warn(smc->ldev, "%s... timeout\n", __func__);
++ return -EIO;
++}
++
++static int iomem_read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
++ u8 *buffer, u8 len)
++{
++ u8 err, remote_len;
++ u32 key_int = *((u32 *) key);
++
++ iomem_clear_status(smc);
++ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
++ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
++ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++
++ if (iomem_wait_read(smc))
++ return -EIO;
++
++ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++ if (err != 0) {
++ dev_warn(smc->ldev, "read_smc_mmio(%x %8x/%.4s) failed: %u\n",
++ cmd, key_int, key, err);
++ return -EIO;
++ }
++
++ if (cmd == APPLESMC_READ_CMD) {
++ remote_len = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_DATA_LEN);
++ if (remote_len != len) {
++ dev_warn(smc->ldev,
++ "read_smc_mmio(%x %8x/%.4s) failed: buffer length mismatch (remote = %u, requested = %u)\n",
++ cmd, key_int, key, remote_len, len);
++ return -EINVAL;
++ }
++ } else {
++ remote_len = len;
++ }
++
++ memcpy_fromio(buffer, smc->iomem_base + APPLESMC_IOMEM_KEY_DATA,
++ remote_len);
++
++ dev_dbg(smc->ldev, "read_smc_mmio(%x %8x/%.4s): buflen=%u reslen=%u\n",
++ cmd, key_int, key, len, remote_len);
++ print_hex_dump_bytes("read_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, remote_len);
++ return 0;
++}
++
++static int iomem_get_smc_key_type(struct applesmc_device *smc, const char *key,
++ struct applesmc_entry *e)
++{
++ u8 err;
++ u8 cmd = APPLESMC_GET_KEY_TYPE_CMD;
++ u32 key_int = *((u32 *) key);
++
++ iomem_clear_status(smc);
++ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
++ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
++ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++
++ if (iomem_wait_read(smc))
++ return -EIO;
++
++ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++ if (err != 0) {
++ dev_warn(smc->ldev, "get_smc_key_type_mmio(%.4s) failed: %u\n", key, err);
++ return -EIO;
++ }
++
++ e->len = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_DATA_LEN);
++ *((uint32_t *) e->type) = ioread32(
++ smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_CODE);
++ e->flags = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_FLAGS);
++
++ dev_dbg(smc->ldev, "get_smc_key_type_mmio(%.4s): len=%u type=%.4s flags=%x\n",
++ key, e->len, e->type, e->flags);
++ return 0;
++}
++
++static int iomem_write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
++ const u8 *buffer, u8 len)
++{
++ u8 err;
++ u32 key_int = *((u32 *) key);
++
++ iomem_clear_status(smc);
++ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
++ memcpy_toio(smc->iomem_base + APPLESMC_IOMEM_KEY_DATA, buffer, len);
++ iowrite32(len, smc->iomem_base + APPLESMC_IOMEM_KEY_DATA_LEN);
++ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
++ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++
++ if (iomem_wait_read(smc))
++ return -EIO;
++
++ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
++ if (err != 0) {
++ dev_warn(smc->ldev, "write_smc_mmio(%x %.4s) failed: %u\n", cmd, key, err);
++ print_hex_dump_bytes("write_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, len);
++ return -EIO;
++ }
++
++ dev_dbg(smc->ldev, "write_smc_mmio(%x %.4s): buflen=%u\n", cmd, key, len);
++ print_hex_dump_bytes("write_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, len);
++ return 0;
++}
++
++
++static int read_smc(struct applesmc_device *smc, const char *key,
++ u8 *buffer, u8 len)
++{
++ if (smc->iomem_base_set)
++ return iomem_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
++ else
++ return port_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
++}
++
++static int write_smc(struct applesmc_device *smc, const char *key,
++ const u8 *buffer, u8 len)
++{
++ if (smc->iomem_base_set)
++ return iomem_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
++ else
++ return port_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
++}
++
++static int get_smc_key_by_index(struct applesmc_device *smc,
++ unsigned int index, char *key)
++{
++ __be32 be;
++
++ be = cpu_to_be32(index);
++ if (smc->iomem_base_set)
++ return iomem_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
++ (const char *) &be, (u8 *) key, 4);
++ else
++ return port_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
++ (const char *) &be, (u8 *) key, 4);
++}
++
++static int get_smc_key_info(struct applesmc_device *smc, const char *key,
++ struct applesmc_entry *info)
++{
++ if (smc->iomem_base_set)
++ return iomem_get_smc_key_type(smc, key, info);
++ else
++ return port_get_smc_key_info(smc, key, info);
++}
++
++static int read_register_count(struct applesmc_device *smc,
++ unsigned int *count)
++{
++ __be32 be;
++ int ret;
++
++ ret = read_smc(smc, KEY_COUNT_KEY, (u8 *)&be, 4);
++ if (ret < 0)
++ return ret;
+
+ *count = be32_to_cpu(be);
+ return 0;
+@@ -338,76 +560,73 @@ static int read_register_count(unsigned int *count)
+ * All functions below are concurrency safe - callers should NOT hold lock.
+ */
+
+-static int applesmc_read_entry(const struct applesmc_entry *entry,
+- u8 *buf, u8 len)
++static int applesmc_read_entry(struct applesmc_device *smc,
++ const struct applesmc_entry *entry, u8 *buf, u8 len)
+ {
+ int ret;
+
+ if (entry->len != len)
+ return -EINVAL;
+- mutex_lock(&smcreg.mutex);
+- ret = read_smc(APPLESMC_READ_CMD, entry->key, buf, len);
+- mutex_unlock(&smcreg.mutex);
++ mutex_lock(&smc->reg.mutex);
++ ret = read_smc(smc, entry->key, buf, len);
++ mutex_unlock(&smc->reg.mutex);
+
+ return ret;
+ }
+
+-static int applesmc_write_entry(const struct applesmc_entry *entry,
+- const u8 *buf, u8 len)
++static int applesmc_write_entry(struct applesmc_device *smc,
++ const struct applesmc_entry *entry, const u8 *buf, u8 len)
+ {
+ int ret;
+
+ if (entry->len != len)
+ return -EINVAL;
+- mutex_lock(&smcreg.mutex);
+- ret = write_smc(APPLESMC_WRITE_CMD, entry->key, buf, len);
+- mutex_unlock(&smcreg.mutex);
++ mutex_lock(&smc->reg.mutex);
++ ret = write_smc(smc, entry->key, buf, len);
++ mutex_unlock(&smc->reg.mutex);
+ return ret;
+ }
+
+-static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
++static const struct applesmc_entry *applesmc_get_entry_by_index(
++ struct applesmc_device *smc, int index)
+ {
+- struct applesmc_entry *cache = &smcreg.cache[index];
+- u8 key[4], info[6];
+- __be32 be;
++ struct applesmc_entry *cache = &smc->reg.cache[index];
++ char key[4];
+ int ret = 0;
+
+ if (cache->valid)
+ return cache;
+
+- mutex_lock(&smcreg.mutex);
++ mutex_lock(&smc->reg.mutex);
+
+ if (cache->valid)
+ goto out;
+- be = cpu_to_be32(index);
+- ret = read_smc(APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
++ ret = get_smc_key_by_index(smc, index, key);
+ if (ret)
+ goto out;
+- ret = read_smc(APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
++ memcpy(cache->key, key, 4);
++
++ ret = get_smc_key_info(smc, key, cache);
+ if (ret)
+ goto out;
+-
+- memcpy(cache->key, key, 4);
+- cache->len = info[0];
+- memcpy(cache->type, &info[1], 4);
+- cache->flags = info[5];
+ cache->valid = true;
+
+ out:
+- mutex_unlock(&smcreg.mutex);
++ mutex_unlock(&smc->reg.mutex);
+ if (ret)
+ return ERR_PTR(ret);
+ return cache;
+ }
+
+-static int applesmc_get_lower_bound(unsigned int *lo, const char *key)
++static int applesmc_get_lower_bound(struct applesmc_device *smc,
++ unsigned int *lo, const char *key)
+ {
+- int begin = 0, end = smcreg.key_count;
++ int begin = 0, end = smc->reg.key_count;
+ const struct applesmc_entry *entry;
+
+ while (begin != end) {
+ int middle = begin + (end - begin) / 2;
+- entry = applesmc_get_entry_by_index(middle);
++ entry = applesmc_get_entry_by_index(smc, middle);
+ if (IS_ERR(entry)) {
+ *lo = 0;
+ return PTR_ERR(entry);
+@@ -422,16 +641,17 @@ static int applesmc_get_lower_bound(unsigned int *lo, const char *key)
+ return 0;
+ }
+
+-static int applesmc_get_upper_bound(unsigned int *hi, const char *key)
++static int applesmc_get_upper_bound(struct applesmc_device *smc,
++ unsigned int *hi, const char *key)
+ {
+- int begin = 0, end = smcreg.key_count;
++ int begin = 0, end = smc->reg.key_count;
+ const struct applesmc_entry *entry;
+
+ while (begin != end) {
+ int middle = begin + (end - begin) / 2;
+- entry = applesmc_get_entry_by_index(middle);
++ entry = applesmc_get_entry_by_index(smc, middle);
+ if (IS_ERR(entry)) {
+- *hi = smcreg.key_count;
++ *hi = smc->reg.key_count;
+ return PTR_ERR(entry);
+ }
+ if (strcmp(key, entry->key) < 0)
+@@ -444,50 +664,54 @@ static int applesmc_get_upper_bound(unsigned int *hi, const char *key)
+ return 0;
+ }
+
+-static const struct applesmc_entry *applesmc_get_entry_by_key(const char *key)
++static const struct applesmc_entry *applesmc_get_entry_by_key(
++ struct applesmc_device *smc, const char *key)
+ {
+ int begin, end;
+ int ret;
+
+- ret = applesmc_get_lower_bound(&begin, key);
++ ret = applesmc_get_lower_bound(smc, &begin, key);
+ if (ret)
+ return ERR_PTR(ret);
+- ret = applesmc_get_upper_bound(&end, key);
++ ret = applesmc_get_upper_bound(smc, &end, key);
+ if (ret)
+ return ERR_PTR(ret);
+ if (end - begin != 1)
+ return ERR_PTR(-EINVAL);
+
+- return applesmc_get_entry_by_index(begin);
++ return applesmc_get_entry_by_index(smc, begin);
+ }
+
+-static int applesmc_read_key(const char *key, u8 *buffer, u8 len)
++static int applesmc_read_key(struct applesmc_device *smc,
++ const char *key, u8 *buffer, u8 len)
+ {
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_key(key);
++ entry = applesmc_get_entry_by_key(smc, key);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+
+- return applesmc_read_entry(entry, buffer, len);
++ return applesmc_read_entry(smc, entry, buffer, len);
+ }
+
+-static int applesmc_write_key(const char *key, const u8 *buffer, u8 len)
++static int applesmc_write_key(struct applesmc_device *smc,
++ const char *key, const u8 *buffer, u8 len)
+ {
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_key(key);
++ entry = applesmc_get_entry_by_key(smc, key);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+
+- return applesmc_write_entry(entry, buffer, len);
++ return applesmc_write_entry(smc, entry, buffer, len);
+ }
+
+-static int applesmc_has_key(const char *key, bool *value)
++static int applesmc_has_key(struct applesmc_device *smc,
++ const char *key, bool *value)
+ {
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_key(key);
++ entry = applesmc_get_entry_by_key(smc, key);
+ if (IS_ERR(entry) && PTR_ERR(entry) != -EINVAL)
+ return PTR_ERR(entry);
+
+@@ -498,12 +722,13 @@ static int applesmc_has_key(const char *key, bool *value)
+ /*
+ * applesmc_read_s16 - Read 16-bit signed big endian register
+ */
+-static int applesmc_read_s16(const char *key, s16 *value)
++static int applesmc_read_s16(struct applesmc_device *smc,
++ const char *key, s16 *value)
+ {
+ u8 buffer[2];
+ int ret;
+
+- ret = applesmc_read_key(key, buffer, 2);
++ ret = applesmc_read_key(smc, key, buffer, 2);
+ if (ret)
+ return ret;
+
+@@ -511,31 +736,68 @@ static int applesmc_read_s16(const char *key, s16 *value)
+ return 0;
+ }
+
++/**
++ * applesmc_float_to_u32 - Retrieve the integral part of a float.
++ * This is needed because Apple made fans use float values in the T2.
++ * The fractional point is not significantly useful though, and the integral
++ * part can be easily extracted.
++ */
++static inline u32 applesmc_float_to_u32(u32 d)
++{
++ u8 sign = (u8) ((d >> 31) & 1);
++ s32 exp = (s32) ((d >> 23) & 0xff) - 0x7f;
++ u32 fr = d & ((1u << 23) - 1);
++
++ if (sign || exp < 0)
++ return 0;
++
++ return (u32) ((1u << exp) + (fr >> (23 - exp)));
++}
++
++/**
++ * applesmc_u32_to_float - Convert an u32 into a float.
++ * See applesmc_float_to_u32 for a rationale.
++ */
++static inline u32 applesmc_u32_to_float(u32 d)
++{
++ u32 dc = d, bc = 0, exp;
++
++ if (!d)
++ return 0;
++
++ while (dc >>= 1)
++ ++bc;
++ exp = 0x7f + bc;
++
++ return (u32) ((exp << 23) |
++ ((d << (23 - (exp - 0x7f))) & ((1u << 23) - 1)));
++}
+ /*
+ * applesmc_device_init - initialize the accelerometer. Can sleep.
+ */
+-static void applesmc_device_init(void)
++static void applesmc_device_init(struct applesmc_device *smc)
+ {
+ int total;
+ u8 buffer[2];
+
+- if (!smcreg.has_accelerometer)
++ if (!smc->reg.has_accelerometer)
+ return;
+
+ for (total = INIT_TIMEOUT_MSECS; total > 0; total -= INIT_WAIT_MSECS) {
+- if (!applesmc_read_key(MOTION_SENSOR_KEY, buffer, 2) &&
++ if (!applesmc_read_key(smc, MOTION_SENSOR_KEY, buffer, 2) &&
+ (buffer[0] != 0x00 || buffer[1] != 0x00))
+ return;
+ buffer[0] = 0xe0;
+ buffer[1] = 0x00;
+- applesmc_write_key(MOTION_SENSOR_KEY, buffer, 2);
++ applesmc_write_key(smc, MOTION_SENSOR_KEY, buffer, 2);
+ msleep(INIT_WAIT_MSECS);
+ }
+
+ pr_warn("failed to init the device\n");
+ }
+
+-static int applesmc_init_index(struct applesmc_registers *s)
++static int applesmc_init_index(struct applesmc_device *smc,
++ struct applesmc_registers *s)
+ {
+ const struct applesmc_entry *entry;
+ unsigned int i;
+@@ -548,7 +810,7 @@ static int applesmc_init_index(struct applesmc_registers *s)
+ return -ENOMEM;
+
+ for (i = s->temp_begin; i < s->temp_end; i++) {
+- entry = applesmc_get_entry_by_index(i);
++ entry = applesmc_get_entry_by_index(smc, i);
+ if (IS_ERR(entry))
+ continue;
+ if (strcmp(entry->type, TEMP_SENSOR_TYPE))
+@@ -562,9 +824,9 @@ static int applesmc_init_index(struct applesmc_registers *s)
+ /*
+ * applesmc_init_smcreg_try - Try to initialize register cache. Idempotent.
+ */
+-static int applesmc_init_smcreg_try(void)
++static int applesmc_init_smcreg_try(struct applesmc_device *smc)
+ {
+- struct applesmc_registers *s = &smcreg;
++ struct applesmc_registers *s = &smc->reg;
+ bool left_light_sensor = false, right_light_sensor = false;
+ unsigned int count;
+ u8 tmp[1];
+@@ -573,7 +835,7 @@ static int applesmc_init_smcreg_try(void)
+ if (s->init_complete)
+ return 0;
+
+- ret = read_register_count(&count);
++ ret = read_register_count(smc, &count);
+ if (ret)
+ return ret;
+
+@@ -590,35 +852,35 @@ static int applesmc_init_smcreg_try(void)
+ if (!s->cache)
+ return -ENOMEM;
+
+- ret = applesmc_read_key(FANS_COUNT, tmp, 1);
++ ret = applesmc_read_key(smc, FANS_COUNT, tmp, 1);
+ if (ret)
+ return ret;
+ s->fan_count = tmp[0];
+ if (s->fan_count > 10)
+ s->fan_count = 10;
+
+- ret = applesmc_get_lower_bound(&s->temp_begin, "T");
++ ret = applesmc_get_lower_bound(smc, &s->temp_begin, "T");
+ if (ret)
+ return ret;
+- ret = applesmc_get_lower_bound(&s->temp_end, "U");
++ ret = applesmc_get_lower_bound(smc, &s->temp_end, "U");
+ if (ret)
+ return ret;
+ s->temp_count = s->temp_end - s->temp_begin;
+
+- ret = applesmc_init_index(s);
++ ret = applesmc_init_index(smc, s);
+ if (ret)
+ return ret;
+
+- ret = applesmc_has_key(LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
++ ret = applesmc_has_key(smc, LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
+ if (ret)
+ return ret;
+- ret = applesmc_has_key(LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
++ ret = applesmc_has_key(smc, LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
+ if (ret)
+ return ret;
+- ret = applesmc_has_key(MOTION_SENSOR_KEY, &s->has_accelerometer);
++ ret = applesmc_has_key(smc, MOTION_SENSOR_KEY, &s->has_accelerometer);
+ if (ret)
+ return ret;
+- ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight);
++ ret = applesmc_has_key(smc, BACKLIGHT_KEY, &s->has_key_backlight);
+ if (ret)
+ return ret;
+
+@@ -634,13 +896,13 @@ static int applesmc_init_smcreg_try(void)
+ return 0;
+ }
+
+-static void applesmc_destroy_smcreg(void)
++static void applesmc_destroy_smcreg(struct applesmc_device *smc)
+ {
+- kfree(smcreg.index);
+- smcreg.index = NULL;
+- kfree(smcreg.cache);
+- smcreg.cache = NULL;
+- smcreg.init_complete = false;
++ kfree(smc->reg.index);
++ smc->reg.index = NULL;
++ kfree(smc->reg.cache);
++ smc->reg.cache = NULL;
++ smc->reg.init_complete = false;
+ }
+
+ /*
+@@ -649,12 +911,12 @@ static void applesmc_destroy_smcreg(void)
+ * Retries until initialization is successful, or the operation times out.
+ *
+ */
+-static int applesmc_init_smcreg(void)
++static int applesmc_init_smcreg(struct applesmc_device *smc)
+ {
+ int ms, ret;
+
+ for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) {
+- ret = applesmc_init_smcreg_try();
++ ret = applesmc_init_smcreg_try(smc);
+ if (!ret) {
+ if (ms)
+ pr_info("init_smcreg() took %d ms\n", ms);
+@@ -663,50 +925,223 @@ static int applesmc_init_smcreg(void)
+ msleep(INIT_WAIT_MSECS);
+ }
+
+- applesmc_destroy_smcreg();
++ applesmc_destroy_smcreg(smc);
+
+ return ret;
+ }
+
+ /* Device model stuff */
+-static int applesmc_probe(struct platform_device *dev)
++
++static int applesmc_init_resources(struct applesmc_device *smc);
++static void applesmc_free_resources(struct applesmc_device *smc);
++static int applesmc_create_modules(struct applesmc_device *smc);
++static void applesmc_destroy_modules(struct applesmc_device *smc);
++
++static int applesmc_add(struct acpi_device *dev)
+ {
++ struct applesmc_device *smc;
+ int ret;
+
+- ret = applesmc_init_smcreg();
++ smc = kzalloc(sizeof(struct applesmc_device), GFP_KERNEL);
++ if (!smc)
++ return -ENOMEM;
++ smc->dev = dev;
++ smc->ldev = &dev->dev;
++ mutex_init(&smc->reg.mutex);
++
++ dev_set_drvdata(&dev->dev, smc);
++
++ ret = applesmc_init_resources(smc);
+ if (ret)
+- return ret;
++ goto out_mem;
++
++ ret = applesmc_init_smcreg(smc);
++ if (ret)
++ goto out_res;
++
++ applesmc_device_init(smc);
++
++ ret = applesmc_create_modules(smc);
++ if (ret)
++ goto out_reg;
++
++ return 0;
++
++out_reg:
++ applesmc_destroy_smcreg(smc);
++out_res:
++ applesmc_free_resources(smc);
++out_mem:
++ dev_set_drvdata(&dev->dev, NULL);
++ mutex_destroy(&smc->reg.mutex);
++ kfree(smc);
++
++ return ret;
++}
++
++static void applesmc_remove(struct acpi_device *dev)
++{
++ struct applesmc_device *smc = dev_get_drvdata(&dev->dev);
++
++ applesmc_destroy_modules(smc);
++ applesmc_destroy_smcreg(smc);
++ applesmc_free_resources(smc);
+
+- applesmc_device_init();
++ mutex_destroy(&smc->reg.mutex);
++ kfree(smc);
++
++ return;
++}
++
++static acpi_status applesmc_walk_resources(struct acpi_resource *res,
++ void *data)
++{
++ struct applesmc_device *smc = data;
++
++ switch (res->type) {
++ case ACPI_RESOURCE_TYPE_IO:
++ if (!smc->port_base_set) {
++ if (res->data.io.address_length < APPLESMC_NR_PORTS)
++ return AE_ERROR;
++ smc->port_base = res->data.io.minimum;
++ smc->port_base_set = true;
++ }
++ return AE_OK;
++
++ case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
++ if (!smc->iomem_base_set) {
++ if (res->data.fixed_memory32.address_length <
++ APPLESMC_IOMEM_MIN_SIZE) {
++ dev_warn(smc->ldev, "found iomem but it's too small: %u\n",
++ res->data.fixed_memory32.address_length);
++ return AE_OK;
++ }
++ smc->iomem_base_addr = res->data.fixed_memory32.address;
++ smc->iomem_base_size = res->data.fixed_memory32.address_length;
++ smc->iomem_base_set = true;
++ }
++ return AE_OK;
++
++ case ACPI_RESOURCE_TYPE_END_TAG:
++ if (smc->port_base_set)
++ return AE_OK;
++ else
++ return AE_NOT_FOUND;
++
++ default:
++ return AE_OK;
++ }
++}
++
++static int applesmc_try_enable_iomem(struct applesmc_device *smc);
++
++static int applesmc_init_resources(struct applesmc_device *smc)
++{
++ int ret;
++
++ ret = acpi_walk_resources(smc->dev->handle, METHOD_NAME__CRS,
++ applesmc_walk_resources, smc);
++ if (ACPI_FAILURE(ret))
++ return -ENXIO;
++
++ if (!request_region(smc->port_base, APPLESMC_NR_PORTS, "applesmc"))
++ return -ENXIO;
++
++ if (smc->iomem_base_set) {
++ if (applesmc_try_enable_iomem(smc))
++ smc->iomem_base_set = false;
++ }
++
++ return 0;
++}
++
++static int applesmc_try_enable_iomem(struct applesmc_device *smc)
++{
++ u8 test_val, ldkn_version;
++
++ dev_dbg(smc->ldev, "Trying to enable iomem based communication\n");
++ smc->iomem_base = ioremap(smc->iomem_base_addr, smc->iomem_base_size);
++ if (!smc->iomem_base)
++ goto out;
++
++ /* Apple's driver does this check for some reason */
++ test_val = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
++ if (test_val == 0xff) {
++ dev_warn(smc->ldev,
++ "iomem enable failed: initial status is 0xff (is %x)\n",
++ test_val);
++ goto out_iomem;
++ }
++
++ if (read_smc(smc, "LDKN", &ldkn_version, 1)) {
++ dev_warn(smc->ldev, "iomem enable failed: ldkn read failed\n");
++ goto out_iomem;
++ }
++
++ if (ldkn_version < 2) {
++ dev_warn(smc->ldev,
++ "iomem enable failed: ldkn version %u is less than minimum (2)\n",
++ ldkn_version);
++ goto out_iomem;
++ }
+
+ return 0;
++
++out_iomem:
++ iounmap(smc->iomem_base);
++
++out:
++ return -ENXIO;
++}
++
++static void applesmc_free_resources(struct applesmc_device *smc)
++{
++ if (smc->iomem_base_set)
++ iounmap(smc->iomem_base);
++ release_region(smc->port_base, APPLESMC_NR_PORTS);
+ }
+
+ /* Synchronize device with memorized backlight state */
+ static int applesmc_pm_resume(struct device *dev)
+ {
+- if (smcreg.has_key_backlight)
+- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++
++ if (smc->reg.has_key_backlight)
++ applesmc_write_key(smc, BACKLIGHT_KEY, smc->backlight_state, 2);
++
+ return 0;
+ }
+
+ /* Reinitialize device on resume from hibernation */
+ static int applesmc_pm_restore(struct device *dev)
+ {
+- applesmc_device_init();
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++
++ applesmc_device_init(smc);
++
+ return applesmc_pm_resume(dev);
+ }
+
++static const struct acpi_device_id applesmc_ids[] = {
++ {"APP0001", 0},
++ {"", 0},
++};
++
+ static const struct dev_pm_ops applesmc_pm_ops = {
+ .resume = applesmc_pm_resume,
+ .restore = applesmc_pm_restore,
+ };
+
+-static struct platform_driver applesmc_driver = {
+- .probe = applesmc_probe,
+- .driver = {
+- .name = "applesmc",
+- .pm = &applesmc_pm_ops,
++static struct acpi_driver applesmc_driver = {
++ .name = "applesmc",
++ .class = "applesmc",
++ .ids = applesmc_ids,
++ .ops = {
++ .add = applesmc_add,
++ .remove = applesmc_remove
++ },
++ .drv = {
++ .pm = &applesmc_pm_ops
+ },
+ };
+
+@@ -714,25 +1149,26 @@ static struct platform_driver applesmc_driver = {
+ * applesmc_calibrate - Set our "resting" values. Callers must
+ * hold applesmc_lock.
+ */
+-static void applesmc_calibrate(void)
++static void applesmc_calibrate(struct applesmc_device *smc)
+ {
+- applesmc_read_s16(MOTION_SENSOR_X_KEY, &rest_x);
+- applesmc_read_s16(MOTION_SENSOR_Y_KEY, &rest_y);
+- rest_x = -rest_x;
++ applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &smc->rest_x);
++ applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &smc->rest_y);
++ smc->rest_x = -smc->rest_x;
+ }
+
+ static void applesmc_idev_poll(struct input_dev *idev)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(&idev->dev);
+ s16 x, y;
+
+- if (applesmc_read_s16(MOTION_SENSOR_X_KEY, &x))
++ if (applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &x))
+ return;
+- if (applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y))
++ if (applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &y))
+ return;
+
+ x = -x;
+- input_report_abs(idev, ABS_X, x - rest_x);
+- input_report_abs(idev, ABS_Y, y - rest_y);
++ input_report_abs(idev, ABS_X, x - smc->rest_x);
++ input_report_abs(idev, ABS_Y, y - smc->rest_y);
+ input_sync(idev);
+ }
+
+@@ -747,16 +1183,17 @@ static ssize_t applesmc_name_show(struct device *dev,
+ static ssize_t applesmc_position_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ int ret;
+ s16 x, y, z;
+
+- ret = applesmc_read_s16(MOTION_SENSOR_X_KEY, &x);
++ ret = applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &x);
+ if (ret)
+ goto out;
+- ret = applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y);
++ ret = applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &y);
+ if (ret)
+ goto out;
+- ret = applesmc_read_s16(MOTION_SENSOR_Z_KEY, &z);
++ ret = applesmc_read_s16(smc, MOTION_SENSOR_Z_KEY, &z);
+ if (ret)
+ goto out;
+
+@@ -770,6 +1207,7 @@ static ssize_t applesmc_position_show(struct device *dev,
+ static ssize_t applesmc_light_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ const struct applesmc_entry *entry;
+ static int data_length;
+ int ret;
+@@ -777,7 +1215,7 @@ static ssize_t applesmc_light_show(struct device *dev,
+ u8 buffer[10];
+
+ if (!data_length) {
+- entry = applesmc_get_entry_by_key(LIGHT_SENSOR_LEFT_KEY);
++ entry = applesmc_get_entry_by_key(smc, LIGHT_SENSOR_LEFT_KEY);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+ if (entry->len > 10)
+@@ -786,7 +1224,7 @@ static ssize_t applesmc_light_show(struct device *dev,
+ pr_info("light sensor data length set to %d\n", data_length);
+ }
+
+- ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
++ ret = applesmc_read_key(smc, LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
+ if (ret)
+ goto out;
+ /* newer macbooks report a single 10-bit bigendian value */
+@@ -796,7 +1234,7 @@ static ssize_t applesmc_light_show(struct device *dev,
+ }
+ left = buffer[2];
+
+- ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
++ ret = applesmc_read_key(smc, LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
+ if (ret)
+ goto out;
+ right = buffer[2];
+@@ -812,7 +1250,8 @@ static ssize_t applesmc_light_show(struct device *dev,
+ static ssize_t applesmc_show_sensor_label(struct device *dev,
+ struct device_attribute *devattr, char *sysfsbuf)
+ {
+- const char *key = smcreg.index[to_index(devattr)];
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ const char *key = smc->reg.index[to_index(devattr)];
+
+ return sysfs_emit(sysfsbuf, "%s\n", key);
+ }
+@@ -821,12 +1260,13 @@ static ssize_t applesmc_show_sensor_label(struct device *dev,
+ static ssize_t applesmc_show_temperature(struct device *dev,
+ struct device_attribute *devattr, char *sysfsbuf)
+ {
+- const char *key = smcreg.index[to_index(devattr)];
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ const char *key = smc->reg.index[to_index(devattr)];
+ int ret;
+ s16 value;
+ int temp;
+
+- ret = applesmc_read_s16(key, &value);
++ ret = applesmc_read_s16(smc, key, &value);
+ if (ret)
+ return ret;
+
+@@ -838,6 +1278,8 @@ static ssize_t applesmc_show_temperature(struct device *dev,
+ static ssize_t applesmc_show_fan_speed(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ const struct applesmc_entry *entry;
+ int ret;
+ unsigned int speed = 0;
+ char newkey[5];
+@@ -846,11 +1288,21 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
+ scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
+ to_index(attr));
+
+- ret = applesmc_read_key(newkey, buffer, 2);
++ entry = applesmc_get_entry_by_key(smc, newkey);
++ if (IS_ERR(entry))
++ return PTR_ERR(entry);
++
++ if (!strcmp(entry->type, FLOAT_TYPE)) {
++ ret = applesmc_read_entry(smc, entry, (u8 *) &speed, 4);
++ speed = applesmc_float_to_u32(speed);
++ } else {
++ ret = applesmc_read_entry(smc, entry, buffer, 2);
++ speed = ((buffer[0] << 8 | buffer[1]) >> 2);
++ }
++
+ if (ret)
+ return ret;
+
+- speed = ((buffer[0] << 8 | buffer[1]) >> 2);
+ return sysfs_emit(sysfsbuf, "%u\n", speed);
+ }
+
+@@ -858,6 +1310,8 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
+ struct device_attribute *attr,
+ const char *sysfsbuf, size_t count)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ const struct applesmc_entry *entry;
+ int ret;
+ unsigned long speed;
+ char newkey[5];
+@@ -869,9 +1323,18 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
+ scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
+ to_index(attr));
+
+- buffer[0] = (speed >> 6) & 0xff;
+- buffer[1] = (speed << 2) & 0xff;
+- ret = applesmc_write_key(newkey, buffer, 2);
++ entry = applesmc_get_entry_by_key(smc, newkey);
++ if (IS_ERR(entry))
++ return PTR_ERR(entry);
++
++ if (!strcmp(entry->type, FLOAT_TYPE)) {
++ speed = applesmc_u32_to_float(speed);
++ ret = applesmc_write_entry(smc, entry, (u8 *) &speed, 4);
++ } else {
++ buffer[0] = (speed >> 6) & 0xff;
++ buffer[1] = (speed << 2) & 0xff;
++ ret = applesmc_write_key(smc, newkey, buffer, 2);
++ }
+
+ if (ret)
+ return ret;
+@@ -882,15 +1345,30 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
+ static ssize_t applesmc_show_fan_manual(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ int ret;
+ u16 manual = 0;
+ u8 buffer[2];
++ char newkey[5];
++ bool has_newkey = false;
++
++ scnprintf(newkey, sizeof(newkey), FAN_MANUAL_FMT, to_index(attr));
++
++ ret = applesmc_has_key(smc, newkey, &has_newkey);
++ if (ret)
++ return ret;
++
++ if (has_newkey) {
++ ret = applesmc_read_key(smc, newkey, buffer, 1);
++ manual = buffer[0];
++ } else {
++ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
++ manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
++ }
+
+- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
+ if (ret)
+ return ret;
+
+- manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
+ return sysfs_emit(sysfsbuf, "%d\n", manual);
+ }
+
+@@ -898,29 +1376,42 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
+ struct device_attribute *attr,
+ const char *sysfsbuf, size_t count)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ int ret;
+ u8 buffer[2];
++ char newkey[5];
++ bool has_newkey = false;
+ unsigned long input;
+ u16 val;
+
+ if (kstrtoul(sysfsbuf, 10, &input) < 0)
+ return -EINVAL;
+
+- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
++ scnprintf(newkey, sizeof(newkey), FAN_MANUAL_FMT, to_index(attr));
++
++ ret = applesmc_has_key(smc, newkey, &has_newkey);
+ if (ret)
+- goto out;
++ return ret;
+
+- val = (buffer[0] << 8 | buffer[1]);
++ if (has_newkey) {
++ buffer[0] = input & 1;
++ ret = applesmc_write_key(smc, newkey, buffer, 1);
++ } else {
++ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
++ val = (buffer[0] << 8 | buffer[1]);
++ if (ret)
++ goto out;
+
+- if (input)
+- val = val | (0x01 << to_index(attr));
+- else
+- val = val & ~(0x01 << to_index(attr));
++ if (input)
++ val = val | (0x01 << to_index(attr));
++ else
++ val = val & ~(0x01 << to_index(attr));
+
+- buffer[0] = (val >> 8) & 0xFF;
+- buffer[1] = val & 0xFF;
++ buffer[0] = (val >> 8) & 0xFF;
++ buffer[1] = val & 0xFF;
+
+- ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
++ ret = applesmc_write_key(smc, FANS_MANUAL, buffer, 2);
++ }
+
+ out:
+ if (ret)
+@@ -932,13 +1423,14 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
+ static ssize_t applesmc_show_fan_position(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ int ret;
+ char newkey[5];
+ u8 buffer[17];
+
+ scnprintf(newkey, sizeof(newkey), FAN_ID_FMT, to_index(attr));
+
+- ret = applesmc_read_key(newkey, buffer, 16);
++ ret = applesmc_read_key(smc, newkey, buffer, 16);
+ buffer[16] = 0;
+
+ if (ret)
+@@ -950,43 +1442,79 @@ static ssize_t applesmc_show_fan_position(struct device *dev,
+ static ssize_t applesmc_calibrate_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
+- return sysfs_emit(sysfsbuf, "(%d,%d)\n", rest_x, rest_y);
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++
++ return sysfs_emit(sysfsbuf, "(%d,%d)\n", smc->rest_x, smc->rest_y);
+ }
+
+ static ssize_t applesmc_calibrate_store(struct device *dev,
+ struct device_attribute *attr, const char *sysfsbuf, size_t count)
+ {
+- applesmc_calibrate();
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++
++ applesmc_calibrate(smc);
+
+ return count;
+ }
+
+ static void applesmc_backlight_set(struct work_struct *work)
+ {
+- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
++ struct applesmc_device *smc = container_of(work, struct applesmc_device, backlight_work);
++
++ applesmc_write_key(smc, BACKLIGHT_KEY, smc->backlight_state, 2);
+ }
+-static DECLARE_WORK(backlight_work, &applesmc_backlight_set);
+
+ static void applesmc_brightness_set(struct led_classdev *led_cdev,
+ enum led_brightness value)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(led_cdev->dev);
+ int ret;
+
+- backlight_state[0] = value;
+- ret = queue_work(applesmc_led_wq, &backlight_work);
++ smc->backlight_state[0] = value;
++ ret = queue_work(smc->backlight_wq, &smc->backlight_work);
+
+ if (debug && (!ret))
+ dev_dbg(led_cdev->dev, "work was already on the queue.\n");
+ }
+
++static ssize_t applesmc_BCLM_store(struct device *dev,
++ struct device_attribute *attr, char *sysfsbuf, size_t count)
++{
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ u8 val;
++
++ if (kstrtou8(sysfsbuf, 10, &val) < 0)
++ return -EINVAL;
++
++ if (val < 0 || val > 100)
++ return -EINVAL;
++
++ if (applesmc_write_key(smc, "BCLM", &val, 1))
++ return -ENODEV;
++ return count;
++}
++
++static ssize_t applesmc_BCLM_show(struct device *dev,
++ struct device_attribute *attr, char *sysfsbuf)
++{
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++ u8 val;
++
++ if (applesmc_read_key(smc, "BCLM", &val, 1))
++ return -ENODEV;
++
++ return sysfs_emit(sysfsbuf, "%d\n", val);
++}
++
+ static ssize_t applesmc_key_count_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ int ret;
+ u8 buffer[4];
+ u32 count;
+
+- ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4);
++ ret = applesmc_read_key(smc, KEY_COUNT_KEY, buffer, 4);
+ if (ret)
+ return ret;
+
+@@ -998,13 +1526,14 @@ static ssize_t applesmc_key_count_show(struct device *dev,
+ static ssize_t applesmc_key_at_index_read_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ const struct applesmc_entry *entry;
+ int ret;
+
+- entry = applesmc_get_entry_by_index(key_at_index);
++ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+- ret = applesmc_read_entry(entry, sysfsbuf, entry->len);
++ ret = applesmc_read_entry(smc, entry, sysfsbuf, entry->len);
+ if (ret)
+ return ret;
+
+@@ -1014,9 +1543,10 @@ static ssize_t applesmc_key_at_index_read_show(struct device *dev,
+ static ssize_t applesmc_key_at_index_data_length_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_index(key_at_index);
++ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+
+@@ -1026,9 +1556,10 @@ static ssize_t applesmc_key_at_index_data_length_show(struct device *dev,
+ static ssize_t applesmc_key_at_index_type_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_index(key_at_index);
++ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+
+@@ -1038,9 +1569,10 @@ static ssize_t applesmc_key_at_index_type_show(struct device *dev,
+ static ssize_t applesmc_key_at_index_name_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ const struct applesmc_entry *entry;
+
+- entry = applesmc_get_entry_by_index(key_at_index);
++ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
+ if (IS_ERR(entry))
+ return PTR_ERR(entry);
+
+@@ -1050,28 +1582,25 @@ static ssize_t applesmc_key_at_index_name_show(struct device *dev,
+ static ssize_t applesmc_key_at_index_show(struct device *dev,
+ struct device_attribute *attr, char *sysfsbuf)
+ {
+- return sysfs_emit(sysfsbuf, "%d\n", key_at_index);
++ struct applesmc_device *smc = dev_get_drvdata(dev);
++
++ return sysfs_emit(sysfsbuf, "%d\n", smc->key_at_index);
+ }
+
+ static ssize_t applesmc_key_at_index_store(struct device *dev,
+ struct device_attribute *attr, const char *sysfsbuf, size_t count)
+ {
++ struct applesmc_device *smc = dev_get_drvdata(dev);
+ unsigned long newkey;
+
+ if (kstrtoul(sysfsbuf, 10, &newkey) < 0
+- || newkey >= smcreg.key_count)
++ || newkey >= smc->reg.key_count)
+ return -EINVAL;
+
+- key_at_index = newkey;
++ smc->key_at_index = newkey;
+ return count;
+ }
+
+-static struct led_classdev applesmc_backlight = {
+- .name = "smc::kbd_backlight",
+- .default_trigger = "nand-disk",
+- .brightness_set = applesmc_brightness_set,
+-};
+-
+ static struct applesmc_node_group info_group[] = {
+ { "name", applesmc_name_show },
+ { "key_count", applesmc_key_count_show },
+@@ -1111,19 +1640,25 @@ static struct applesmc_node_group temp_group[] = {
+ { }
+ };
+
++static struct applesmc_node_group BCLM_group[] = {
++ { "battery_charge_limit", applesmc_BCLM_show, applesmc_BCLM_store },
++ { }
++};
++
+ /* Module stuff */
+
+ /*
+ * applesmc_destroy_nodes - remove files and free associated memory
+ */
+-static void applesmc_destroy_nodes(struct applesmc_node_group *groups)
++static void applesmc_destroy_nodes(struct applesmc_device *smc,
++ struct applesmc_node_group *groups)
+ {
+ struct applesmc_node_group *grp;
+ struct applesmc_dev_attr *node;
+
+ for (grp = groups; grp->nodes; grp++) {
+ for (node = grp->nodes; node->sda.dev_attr.attr.name; node++)
+- sysfs_remove_file(&pdev->dev.kobj,
++ sysfs_remove_file(&smc->dev->dev.kobj,
+ &node->sda.dev_attr.attr);
+ kfree(grp->nodes);
+ grp->nodes = NULL;
+@@ -1133,7 +1668,8 @@ static void applesmc_destroy_nodes(struct applesmc_node_group *groups)
+ /*
+ * applesmc_create_nodes - create a two-dimensional group of sysfs files
+ */
+-static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
++static int applesmc_create_nodes(struct applesmc_device *smc,
++ struct applesmc_node_group *groups, int num)
+ {
+ struct applesmc_node_group *grp;
+ struct applesmc_dev_attr *node;
+@@ -1157,7 +1693,7 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
+ sysfs_attr_init(attr);
+ attr->name = node->name;
+ attr->mode = 0444 | (grp->store ? 0200 : 0);
+- ret = sysfs_create_file(&pdev->dev.kobj, attr);
++ ret = sysfs_create_file(&smc->dev->dev.kobj, attr);
+ if (ret) {
+ attr->name = NULL;
+ goto out;
+@@ -1167,57 +1703,56 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
+
+ return 0;
+ out:
+- applesmc_destroy_nodes(groups);
++ applesmc_destroy_nodes(smc, groups);
+ return ret;
+ }
+
+ /* Create accelerometer resources */
+-static int applesmc_create_accelerometer(void)
++static int applesmc_create_accelerometer(struct applesmc_device *smc)
+ {
+ int ret;
+-
+- if (!smcreg.has_accelerometer)
++ if (!smc->reg.has_accelerometer)
+ return 0;
+
+- ret = applesmc_create_nodes(accelerometer_group, 1);
++ ret = applesmc_create_nodes(smc, accelerometer_group, 1);
+ if (ret)
+ goto out;
+
+- applesmc_idev = input_allocate_device();
+- if (!applesmc_idev) {
++ smc->idev = input_allocate_device();
++ if (!smc->idev) {
+ ret = -ENOMEM;
+ goto out_sysfs;
+ }
+
+ /* initial calibrate for the input device */
+- applesmc_calibrate();
++ applesmc_calibrate(smc);
+
+ /* initialize the input device */
+- applesmc_idev->name = "applesmc";
+- applesmc_idev->id.bustype = BUS_HOST;
+- applesmc_idev->dev.parent = &pdev->dev;
+- input_set_abs_params(applesmc_idev, ABS_X,
++ smc->idev->name = "applesmc";
++ smc->idev->id.bustype = BUS_HOST;
++ smc->idev->dev.parent = &smc->dev->dev;
++ input_set_abs_params(smc->idev, ABS_X,
+ -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
+- input_set_abs_params(applesmc_idev, ABS_Y,
++ input_set_abs_params(smc->idev, ABS_Y,
+ -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
+
+- ret = input_setup_polling(applesmc_idev, applesmc_idev_poll);
++ ret = input_setup_polling(smc->idev, applesmc_idev_poll);
+ if (ret)
+ goto out_idev;
+
+- input_set_poll_interval(applesmc_idev, APPLESMC_POLL_INTERVAL);
++ input_set_poll_interval(smc->idev, APPLESMC_POLL_INTERVAL);
+
+- ret = input_register_device(applesmc_idev);
++ ret = input_register_device(smc->idev);
+ if (ret)
+ goto out_idev;
+
+ return 0;
+
+ out_idev:
+- input_free_device(applesmc_idev);
++ input_free_device(smc->idev);
+
+ out_sysfs:
+- applesmc_destroy_nodes(accelerometer_group);
++ applesmc_destroy_nodes(smc, accelerometer_group);
+
+ out:
+ pr_warn("driver init failed (ret=%d)!\n", ret);
+@@ -1225,44 +1760,55 @@ static int applesmc_create_accelerometer(void)
+ }
+
+ /* Release all resources used by the accelerometer */
+-static void applesmc_release_accelerometer(void)
++static void applesmc_release_accelerometer(struct applesmc_device *smc)
+ {
+- if (!smcreg.has_accelerometer)
++ if (!smc->reg.has_accelerometer)
+ return;
+- input_unregister_device(applesmc_idev);
+- applesmc_destroy_nodes(accelerometer_group);
++ input_unregister_device(smc->idev);
++ applesmc_destroy_nodes(smc, accelerometer_group);
+ }
+
+-static int applesmc_create_light_sensor(void)
++static int applesmc_create_light_sensor(struct applesmc_device *smc)
+ {
+- if (!smcreg.num_light_sensors)
++ if (!smc->reg.num_light_sensors)
+ return 0;
+- return applesmc_create_nodes(light_sensor_group, 1);
++ return applesmc_create_nodes(smc, light_sensor_group, 1);
+ }
+
+-static void applesmc_release_light_sensor(void)
++static void applesmc_release_light_sensor(struct applesmc_device *smc)
+ {
+- if (!smcreg.num_light_sensors)
++ if (!smc->reg.num_light_sensors)
+ return;
+- applesmc_destroy_nodes(light_sensor_group);
++ applesmc_destroy_nodes(smc, light_sensor_group);
+ }
+
+-static int applesmc_create_key_backlight(void)
++static int applesmc_create_key_backlight(struct applesmc_device *smc)
+ {
+- if (!smcreg.has_key_backlight)
++ int ret;
++
++ if (!smc->reg.has_key_backlight)
+ return 0;
+- applesmc_led_wq = create_singlethread_workqueue("applesmc-led");
+- if (!applesmc_led_wq)
++ smc->backlight_wq = create_singlethread_workqueue("applesmc-led");
++ if (!smc->backlight_wq)
+ return -ENOMEM;
+- return led_classdev_register(&pdev->dev, &applesmc_backlight);
++
++ INIT_WORK(&smc->backlight_work, applesmc_backlight_set);
++ smc->backlight_dev.name = "smc::kbd_backlight";
++ smc->backlight_dev.default_trigger = "nand-disk";
++ smc->backlight_dev.brightness_set = applesmc_brightness_set;
++ ret = led_classdev_register(&smc->dev->dev, &smc->backlight_dev);
++ if (ret)
++ destroy_workqueue(smc->backlight_wq);
++
++ return ret;
+ }
+
+-static void applesmc_release_key_backlight(void)
++static void applesmc_release_key_backlight(struct applesmc_device *smc)
+ {
+- if (!smcreg.has_key_backlight)
++ if (!smc->reg.has_key_backlight)
+ return;
+- led_classdev_unregister(&applesmc_backlight);
+- destroy_workqueue(applesmc_led_wq);
++ led_classdev_unregister(&smc->backlight_dev);
++ destroy_workqueue(smc->backlight_wq);
+ }
+
+ static int applesmc_dmi_match(const struct dmi_system_id *id)
+@@ -1291,6 +1837,10 @@ static const struct dmi_system_id applesmc_whitelist[] __initconst = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini") },
+ },
++ { applesmc_dmi_match, "Apple iMacPro", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "iMacPro") },
++ },
+ { applesmc_dmi_match, "Apple MacPro", {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacPro") },
+@@ -1306,90 +1856,91 @@ static const struct dmi_system_id applesmc_whitelist[] __initconst = {
+ { .ident = NULL }
+ };
+
+-static int __init applesmc_init(void)
++static int applesmc_create_modules(struct applesmc_device *smc)
+ {
+ int ret;
+
+- if (!dmi_check_system(applesmc_whitelist)) {
+- pr_warn("supported laptop not found!\n");
+- ret = -ENODEV;
+- goto out;
+- }
+-
+- if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
+- "applesmc")) {
+- ret = -ENXIO;
+- goto out;
+- }
+-
+- ret = platform_driver_register(&applesmc_driver);
+- if (ret)
+- goto out_region;
+-
+- pdev = platform_device_register_simple("applesmc", APPLESMC_DATA_PORT,
+- NULL, 0);
+- if (IS_ERR(pdev)) {
+- ret = PTR_ERR(pdev);
+- goto out_driver;
+- }
+-
+- /* create register cache */
+- ret = applesmc_init_smcreg();
++ ret = applesmc_create_nodes(smc, info_group, 1);
+ if (ret)
+- goto out_device;
+-
+- ret = applesmc_create_nodes(info_group, 1);
++ goto out;
++ ret = applesmc_create_nodes(smc, BCLM_group, 1);
+ if (ret)
+- goto out_smcreg;
++ goto out_info;
+
+- ret = applesmc_create_nodes(fan_group, smcreg.fan_count);
++ ret = applesmc_create_nodes(smc, fan_group, smc->reg.fan_count);
+ if (ret)
+- goto out_info;
++ goto out_bclm;
+
+- ret = applesmc_create_nodes(temp_group, smcreg.index_count);
++ ret = applesmc_create_nodes(smc, temp_group, smc->reg.index_count);
+ if (ret)
+ goto out_fans;
+
+- ret = applesmc_create_accelerometer();
++ ret = applesmc_create_accelerometer(smc);
+ if (ret)
+ goto out_temperature;
+
+- ret = applesmc_create_light_sensor();
++ ret = applesmc_create_light_sensor(smc);
+ if (ret)
+ goto out_accelerometer;
+
+- ret = applesmc_create_key_backlight();
++ ret = applesmc_create_key_backlight(smc);
+ if (ret)
+ goto out_light_sysfs;
+
+- hwmon_dev = hwmon_device_register(&pdev->dev);
+- if (IS_ERR(hwmon_dev)) {
+- ret = PTR_ERR(hwmon_dev);
++ smc->hwmon_dev = hwmon_device_register(&smc->dev->dev);
++ if (IS_ERR(smc->hwmon_dev)) {
++ ret = PTR_ERR(smc->hwmon_dev);
+ goto out_light_ledclass;
+ }
+
+ return 0;
+
+ out_light_ledclass:
+- applesmc_release_key_backlight();
++ applesmc_release_key_backlight(smc);
+ out_light_sysfs:
+- applesmc_release_light_sensor();
++ applesmc_release_light_sensor(smc);
+ out_accelerometer:
+- applesmc_release_accelerometer();
++ applesmc_release_accelerometer(smc);
+ out_temperature:
+- applesmc_destroy_nodes(temp_group);
++ applesmc_destroy_nodes(smc, temp_group);
+ out_fans:
+- applesmc_destroy_nodes(fan_group);
++ applesmc_destroy_nodes(smc, fan_group);
++out_bclm:
++ applesmc_destroy_nodes(smc, BCLM_group);
+ out_info:
+- applesmc_destroy_nodes(info_group);
+-out_smcreg:
+- applesmc_destroy_smcreg();
+-out_device:
+- platform_device_unregister(pdev);
+-out_driver:
+- platform_driver_unregister(&applesmc_driver);
+-out_region:
+- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
++ applesmc_destroy_nodes(smc, info_group);
++out:
++ return ret;
++}
++
++static void applesmc_destroy_modules(struct applesmc_device *smc)
++{
++ hwmon_device_unregister(smc->hwmon_dev);
++ applesmc_release_key_backlight(smc);
++ applesmc_release_light_sensor(smc);
++ applesmc_release_accelerometer(smc);
++ applesmc_destroy_nodes(smc, temp_group);
++ applesmc_destroy_nodes(smc, fan_group);
++ applesmc_destroy_nodes(smc, BCLM_group);
++ applesmc_destroy_nodes(smc, info_group);
++}
++
++static int __init applesmc_init(void)
++{
++ int ret;
++
++ if (!dmi_check_system(applesmc_whitelist)) {
++ pr_warn("supported laptop not found!\n");
++ ret = -ENODEV;
++ goto out;
++ }
++
++ ret = acpi_bus_register_driver(&applesmc_driver);
++ if (ret)
++ goto out;
++
++ return 0;
++
+ out:
+ pr_warn("driver init failed (ret=%d)!\n", ret);
+ return ret;
+@@ -1397,23 +1948,14 @@ static int __init applesmc_init(void)
+
+ static void __exit applesmc_exit(void)
+ {
+- hwmon_device_unregister(hwmon_dev);
+- applesmc_release_key_backlight();
+- applesmc_release_light_sensor();
+- applesmc_release_accelerometer();
+- applesmc_destroy_nodes(temp_group);
+- applesmc_destroy_nodes(fan_group);
+- applesmc_destroy_nodes(info_group);
+- applesmc_destroy_smcreg();
+- platform_device_unregister(pdev);
+- platform_driver_unregister(&applesmc_driver);
+- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
++ acpi_bus_unregister_driver(&applesmc_driver);
+ }
+
+ module_init(applesmc_init);
+ module_exit(applesmc_exit);
+
+ MODULE_AUTHOR("Nicolas Boichat");
++MODULE_AUTHOR("Paul Pawlowski");
+ MODULE_DESCRIPTION("Apple SMC");
+ MODULE_LICENSE("GPL v2");
+ MODULE_DEVICE_TABLE(dmi, applesmc_whitelist);
+diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
+index ca150618d32f..4e692b272ae9 100644
+--- a/drivers/input/mouse/bcm5974.c
++++ b/drivers/input/mouse/bcm5974.c
+@@ -83,6 +83,24 @@
+ #define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO 0x0273
+ #define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS 0x0274
+
++/* T2-Attached Devices */
++/* MacbookAir8,1 (2018) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K 0x027a
++/* MacbookPro15,2 (2018) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132 0x027b
++/* MacbookPro15,1 (2018) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680 0x027c
++/* MacbookPro15,4 (2019) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213 0x027d
++/* MacbookPro16,2 (2020) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K 0x027e
++/* MacbookPro16,3 (2020) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223 0x027f
++/* MacbookAir9,1 (2020) */
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K 0x0280
++/* MacbookPro16,1 (2019)*/
++#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F 0x0340
++
+ #define BCM5974_DEVICE(prod) { \
+ .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
+ USB_DEVICE_ID_MATCH_INT_CLASS | \
+@@ -147,6 +165,22 @@ static const struct usb_device_id bcm5974_table[] = {
+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI),
+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ISO),
+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_JIS),
++ /* MacbookAir8,1 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K),
++ /* MacbookPro15,2 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132),
++ /* MacbookPro15,1 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680),
++ /* MacbookPro15,4 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213),
++ /* MacbookPro16,2 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K),
++ /* MacbookPro16,3 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223),
++ /* MacbookAir9,1 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K),
++ /* MacbookPro16,1 */
++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F),
+ /* Terminating entry */
+ {}
+ };
+@@ -483,6 +517,110 @@ static const struct bcm5974_config bcm5974_config_table[] = {
+ { SN_COORD, -203, 6803 },
+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
+ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -6243, 6749 },
++ { SN_COORD, -170, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -6243, 6749 },
++ { SN_COORD, -170, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -7456, 7976 },
++ { SN_COORD, -1768, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -6243, 6749 },
++ { SN_COORD, -170, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -7823, 8329 },
++ { SN_COORD, -370, 7925 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -6243, 6749 },
++ { SN_COORD, -170, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -6243, 6749 },
++ { SN_COORD, -170, 7685 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
++ {
++ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F,
++ 0,
++ 0,
++ HAS_INTEGRATED_BUTTON,
++ 0, sizeof(struct bt_data),
++ 0x83, DATAFORMAT(TYPE4),
++ { SN_PRESSURE, 0, 300 },
++ { SN_WIDTH, 0, 2048 },
++ { SN_COORD, -8916, 9918 },
++ { SN_COORD, -1934, 9835 },
++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
++ },
+ {}
+ };
+
+diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c
+index 78748e8d2dba..2b2b558cebe6 100644
+--- a/drivers/pci/vgaarb.c
++++ b/drivers/pci/vgaarb.c
+@@ -143,6 +143,7 @@ void vga_set_default_device(struct pci_dev *pdev)
+ pci_dev_put(vga_default);
+ vga_default = pci_dev_get(pdev);
+ }
++EXPORT_SYMBOL_GPL(vga_set_default_device);
+
+ /**
+ * vga_remove_vgacon - deactivate VGA console
+diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
+index 1417e230edbd..e69785af8e1d 100644
+--- a/drivers/platform/x86/apple-gmux.c
++++ b/drivers/platform/x86/apple-gmux.c
+@@ -21,6 +21,7 @@
+ #include <linux/delay.h>
+ #include <linux/pci.h>
+ #include <linux/vga_switcheroo.h>
++#include <linux/vgaarb.h>
+ #include <linux/debugfs.h>
+ #include <acpi/video.h>
+ #include <asm/io.h>
+@@ -107,6 +108,10 @@ struct apple_gmux_config {
+
+ # define MMIO_GMUX_MAX_BRIGHTNESS 0xffff
+
++static bool force_igd;
++module_param(force_igd, bool, 0);
++MODULE_PARM_DESC(force_idg, "Switch gpu to igd on module load. Make sure that you have apple-set-os set up and the iGPU is in `lspci -s 00:02.0`. (default: false) (bool)");
++
+ static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port)
+ {
+ return inb(gmux_data->iostart + port);
+@@ -945,6 +950,19 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
+ gmux_enable_interrupts(gmux_data);
+ gmux_read_switch_state(gmux_data);
+
++ if (force_igd) {
++ struct pci_dev *pdev;
++
++ pdev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(2, 0));
++ if (pdev) {
++ pr_info("Switching to IGD");
++ gmux_switchto(VGA_SWITCHEROO_IGD);
++ vga_set_default_device(pdev);
++ } else {
++ pr_err("force_idg is true, but couldn't find iGPU at 00:02.0! Is apple-set-os working?");
++ }
++ }
++
+ /*
+ * Retina MacBook Pros cannot switch the panel's AUX separately
+ * and need eDP pre-calibration. They are distinguishable from
+diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
+index db4a392841b1..580df4ce4f9f 100644
+--- a/drivers/staging/Kconfig
++++ b/drivers/staging/Kconfig
+@@ -66,4 +66,6 @@ source "drivers/staging/fieldbus/Kconfig"
+
+ source "drivers/staging/vme_user/Kconfig"
+
++source "drivers/staging/apple-bce/Kconfig"
++
+ endif # STAGING
+diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
+index 5390879b5d1b..528be2d3b546 100644
+--- a/drivers/staging/Makefile
++++ b/drivers/staging/Makefile
+@@ -22,3 +22,4 @@ obj-$(CONFIG_GREYBUS) += greybus/
+ obj-$(CONFIG_BCM2835_VCHIQ) += vc04_services/
+ obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/
+ obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/
++obj-$(CONFIG_APPLE_BCE) += apple-bce/
+diff --git a/drivers/staging/apple-bce/Kconfig b/drivers/staging/apple-bce/Kconfig
+new file mode 100644
+index 000000000000..fe92bc441e89
+--- /dev/null
++++ b/drivers/staging/apple-bce/Kconfig
+@@ -0,0 +1,18 @@
++config APPLE_BCE
++ tristate "Apple BCE driver (VHCI and Audio support)"
++ default m
++ depends on X86
++ select SOUND
++ select SND
++ select SND_PCM
++ select SND_JACK
++ help
++ VHCI and audio support on Apple MacBooks with the T2 Chip.
++ This driver is divided in three components:
++ - BCE (Buffer Copy Engine): which establishes a basic communication
++ channel with the T2 chip. This component is required by the other two:
++ - VHCI (Virtual Host Controller Interface): Access to keyboard, mouse
++ and other system devices depend on this virtual USB host controller
++ - Audio: a driver for the T2 audio interface.
++
++ If "M" is selected, the module will be called apple-bce.'
diff --git a/drivers/staging/apple-bce/Makefile b/drivers/staging/apple-bce/Makefile
new file mode 100644
-index 000000000..a6a656f06
+index 000000000000..8cfbd3f64af6
--- /dev/null
+++ b/drivers/staging/apple-bce/Makefile
@@ -0,0 +1,28 @@
+modname := apple-bce
-+obj-m += $(modname).o
++obj-$(CONFIG_APPLE_BCE) += $(modname).o
+
+apple-bce-objs := apple_bce.o mailbox.o queue.o queue_dma.o vhci/vhci.o vhci/queue.o vhci/transfer.o audio/audio.o audio/protocol.o audio/protocol_bce.o audio/pcm.o
+
@@ -92,10 +4696,10 @@ index 000000000..a6a656f06
+ $(MAKE) -C $(KDIR) M=$(PWD) modules_install
diff --git a/drivers/staging/apple-bce/apple_bce.c b/drivers/staging/apple-bce/apple_bce.c
new file mode 100644
-index 000000000..ad89632df
+index 000000000000..4fd2415d7028
--- /dev/null
+++ b/drivers/staging/apple-bce/apple_bce.c
-@@ -0,0 +1,443 @@
+@@ -0,0 +1,445 @@
+#include "apple_bce.h"
+#include <linux/module.h>
+#include <linux/crc32.h>
@@ -471,6 +5075,8 @@ index 000000000..ad89632df
+ { 0, },
+};
+
++MODULE_DEVICE_TABLE(pci, apple_bce_ids);
++
+struct dev_pm_ops apple_bce_pci_driver_pm = {
+ .suspend = apple_bce_suspend,
+ .resume = apple_bce_resume
@@ -541,7 +5147,7 @@ index 000000000..ad89632df
+module_exit(apple_bce_module_exit);
diff --git a/drivers/staging/apple-bce/apple_bce.h b/drivers/staging/apple-bce/apple_bce.h
new file mode 100644
-index 000000000..f13ab8d57
+index 000000000000..f13ab8d5742e
--- /dev/null
+++ b/drivers/staging/apple-bce/apple_bce.h
@@ -0,0 +1,38 @@
@@ -586,7 +5192,7 @@ index 000000000..f13ab8d57
\ No newline at end of file
diff --git a/drivers/staging/apple-bce/audio/audio.c b/drivers/staging/apple-bce/audio/audio.c
new file mode 100644
-index 000000000..bd16ddd16
+index 000000000000..bd16ddd16c1d
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/audio.c
@@ -0,0 +1,711 @@
@@ -1303,7 +5909,7 @@ index 000000000..bd16ddd16
+MODULE_PARM_DESC(id, "ID string for Apple Internal Audio soundcard.");
diff --git a/drivers/staging/apple-bce/audio/audio.h b/drivers/staging/apple-bce/audio/audio.h
new file mode 100644
-index 000000000..004bc1e22
+index 000000000000..004bc1e22ea4
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/audio.h
@@ -0,0 +1,125 @@
@@ -1434,7 +6040,7 @@ index 000000000..004bc1e22
+#endif //AAUDIO_H
diff --git a/drivers/staging/apple-bce/audio/description.h b/drivers/staging/apple-bce/audio/description.h
new file mode 100644
-index 000000000..dfef3ab68
+index 000000000000..dfef3ab68f27
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/description.h
@@ -0,0 +1,42 @@
@@ -1482,7 +6088,7 @@ index 000000000..dfef3ab68
+#endif //AAUDIO_DESCRIPTION_H
diff --git a/drivers/staging/apple-bce/audio/pcm.c b/drivers/staging/apple-bce/audio/pcm.c
new file mode 100644
-index 000000000..1026e10a9
+index 000000000000..1026e10a9ac5
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/pcm.c
@@ -0,0 +1,308 @@
@@ -1796,7 +6402,7 @@ index 000000000..1026e10a9
+}
diff --git a/drivers/staging/apple-bce/audio/pcm.h b/drivers/staging/apple-bce/audio/pcm.h
new file mode 100644
-index 000000000..ea5f35fbe
+index 000000000000..ea5f35fbe408
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/pcm.h
@@ -0,0 +1,16 @@
@@ -1818,7 +6424,7 @@ index 000000000..ea5f35fbe
+#endif //AAUDIO_PCM_H
diff --git a/drivers/staging/apple-bce/audio/protocol.c b/drivers/staging/apple-bce/audio/protocol.c
new file mode 100644
-index 000000000..2314813ae
+index 000000000000..2314813aeead
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/protocol.c
@@ -0,0 +1,347 @@
@@ -2172,7 +6778,7 @@ index 000000000..2314813ae
\ No newline at end of file
diff --git a/drivers/staging/apple-bce/audio/protocol.h b/drivers/staging/apple-bce/audio/protocol.h
new file mode 100644
-index 000000000..3427486f3
+index 000000000000..3427486f3f57
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/protocol.h
@@ -0,0 +1,147 @@
@@ -2325,7 +6931,7 @@ index 000000000..3427486f3
+#endif //AAUDIO_PROTOCOL_H
diff --git a/drivers/staging/apple-bce/audio/protocol_bce.c b/drivers/staging/apple-bce/audio/protocol_bce.c
new file mode 100644
-index 000000000..28f2dfd44
+index 000000000000..28f2dfd44d67
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/protocol_bce.c
@@ -0,0 +1,226 @@
@@ -2557,7 +7163,7 @@ index 000000000..28f2dfd44
+}
diff --git a/drivers/staging/apple-bce/audio/protocol_bce.h b/drivers/staging/apple-bce/audio/protocol_bce.h
new file mode 100644
-index 000000000..14d26c05d
+index 000000000000..14d26c05ddf9
--- /dev/null
+++ b/drivers/staging/apple-bce/audio/protocol_bce.h
@@ -0,0 +1,72 @@
@@ -2635,7 +7241,7 @@ index 000000000..14d26c05d
+#endif //AAUDIO_PROTOCOL_BCE_H
diff --git a/drivers/staging/apple-bce/mailbox.c b/drivers/staging/apple-bce/mailbox.c
new file mode 100644
-index 000000000..e24bd3521
+index 000000000000..e24bd35215c0
--- /dev/null
+++ b/drivers/staging/apple-bce/mailbox.c
@@ -0,0 +1,151 @@
@@ -2793,7 +7399,7 @@ index 000000000..e24bd3521
\ No newline at end of file
diff --git a/drivers/staging/apple-bce/mailbox.h b/drivers/staging/apple-bce/mailbox.h
new file mode 100644
-index 000000000..f3323f95b
+index 000000000000..f3323f95ba51
--- /dev/null
+++ b/drivers/staging/apple-bce/mailbox.h
@@ -0,0 +1,53 @@
@@ -2852,7 +7458,7 @@ index 000000000..f3323f95b
+#endif //BCEDRIVER_MAILBOX_H
diff --git a/drivers/staging/apple-bce/queue.c b/drivers/staging/apple-bce/queue.c
new file mode 100644
-index 000000000..bc9cd3bc6
+index 000000000000..bc9cd3bc6f0c
--- /dev/null
+++ b/drivers/staging/apple-bce/queue.c
@@ -0,0 +1,390 @@
@@ -3249,7 +7855,7 @@ index 000000000..bc9cd3bc6
\ No newline at end of file
diff --git a/drivers/staging/apple-bce/queue.h b/drivers/staging/apple-bce/queue.h
new file mode 100644
-index 000000000..8368ac5df
+index 000000000000..8368ac5dfca8
--- /dev/null
+++ b/drivers/staging/apple-bce/queue.h
@@ -0,0 +1,177 @@
@@ -3432,7 +8038,7 @@ index 000000000..8368ac5df
+#endif //BCEDRIVER_MAILBOX_H
diff --git a/drivers/staging/apple-bce/queue_dma.c b/drivers/staging/apple-bce/queue_dma.c
new file mode 100644
-index 000000000..b23661328
+index 000000000000..b236613285c0
--- /dev/null
+++ b/drivers/staging/apple-bce/queue_dma.c
@@ -0,0 +1,220 @@
@@ -3659,7 +8265,7 @@ index 000000000..b23661328
\ No newline at end of file
diff --git a/drivers/staging/apple-bce/queue_dma.h b/drivers/staging/apple-bce/queue_dma.h
new file mode 100644
-index 000000000..f8a57e50e
+index 000000000000..f8a57e50e7a3
--- /dev/null
+++ b/drivers/staging/apple-bce/queue_dma.h
@@ -0,0 +1,50 @@
@@ -3715,7 +8321,7 @@ index 000000000..f8a57e50e
+#endif //BCE_QUEUE_DMA_H
diff --git a/drivers/staging/apple-bce/vhci/command.h b/drivers/staging/apple-bce/vhci/command.h
new file mode 100644
-index 000000000..26619e0bc
+index 000000000000..26619e0bccfa
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/command.h
@@ -0,0 +1,204 @@
@@ -3925,7 +8531,7 @@ index 000000000..26619e0bc
+#endif //BCE_VHCI_COMMAND_H
diff --git a/drivers/staging/apple-bce/vhci/queue.c b/drivers/staging/apple-bce/vhci/queue.c
new file mode 100644
-index 000000000..7b0b50271
+index 000000000000..7b0b5027157b
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/queue.c
@@ -0,0 +1,268 @@
@@ -4199,7 +8805,7 @@ index 000000000..7b0b50271
+}
diff --git a/drivers/staging/apple-bce/vhci/queue.h b/drivers/staging/apple-bce/vhci/queue.h
new file mode 100644
-index 000000000..adb705b6b
+index 000000000000..adb705b6ba1d
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/queue.h
@@ -0,0 +1,76 @@
@@ -4281,7 +8887,7 @@ index 000000000..adb705b6b
+#endif //BCE_VHCI_QUEUE_H
diff --git a/drivers/staging/apple-bce/vhci/transfer.c b/drivers/staging/apple-bce/vhci/transfer.c
new file mode 100644
-index 000000000..8226363d6
+index 000000000000..8226363d69c8
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/transfer.c
@@ -0,0 +1,661 @@
@@ -4948,7 +9554,7 @@ index 000000000..8226363d6
+}
diff --git a/drivers/staging/apple-bce/vhci/transfer.h b/drivers/staging/apple-bce/vhci/transfer.h
new file mode 100644
-index 000000000..89ecad6bc
+index 000000000000..89ecad6bcf8f
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/transfer.h
@@ -0,0 +1,73 @@
@@ -5027,7 +9633,7 @@ index 000000000..89ecad6bc
+#endif //BCEDRIVER_TRANSFER_H
diff --git a/drivers/staging/apple-bce/vhci/vhci.c b/drivers/staging/apple-bce/vhci/vhci.c
new file mode 100644
-index 000000000..eb26f5500
+index 000000000000..eb26f55000d8
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/vhci.c
@@ -0,0 +1,759 @@
@@ -5792,7 +10398,7 @@ index 000000000..eb26f5500
+MODULE_PARM_DESC(vhci_port_mask, "Specifies which VHCI ports are enabled");
diff --git a/drivers/staging/apple-bce/vhci/vhci.h b/drivers/staging/apple-bce/vhci/vhci.h
new file mode 100644
-index 000000000..6c2e22622
+index 000000000000..6c2e22622f4c
--- /dev/null
+++ b/drivers/staging/apple-bce/vhci/vhci.h
@@ -0,0 +1,52 @@
@@ -5848,206 +10454,106 @@ index 000000000..6c2e22622
+struct bce_vhci *bce_vhci_from_hcd(struct usb_hcd *hcd);
+
+#endif //BCE_VHCI_H
---
-2.43.2
-
-From dc27d4db5787546ae5eacf3483f3b87f2d4fb1c1 Mon Sep 17 00:00:00 2001
-From: Redecorating <69827514+Redecorating@users.noreply.github.com>
-Date: Mon, 7 Nov 2022 14:56:34 +0530
-Subject: [PATCH] Put apple-bce in drivers/staging
-
----
- drivers/staging/Kconfig | 2 ++
- drivers/staging/Makefile | 1 +
- drivers/staging/apple-bce/Kconfig | 18 ++++++++++++++++++
- drivers/staging/apple-bce/Makefile | 2 +-
- 4 files changed, 22 insertions(+), 1 deletion(-)
- create mode 100644 drivers/staging/apple-bce/Kconfig
-
-diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
-index 5cfabd537..3b8e61d26 100644
---- a/drivers/staging/Kconfig
-+++ b/drivers/staging/Kconfig
-@@ -80,4 +80,6 @@ source "drivers/staging/qlge/Kconfig"
-
- source "drivers/staging/vme_user/Kconfig"
-
-+source "drivers/staging/apple-bce/Kconfig"
-+
- endif # STAGING
-diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
-index f8c3aa9c2..1e148d6c3 100644
---- a/drivers/staging/Makefile
-+++ b/drivers/staging/Makefile
-@@ -29,3 +29,4 @@ obj-$(CONFIG_PI433) += pi433/
- obj-$(CONFIG_PI433) += pi433/
- obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/
- obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/
-+obj-$(CONFIG_APPLE_BCE) += apple-bce/
-diff --git a/drivers/staging/apple-bce/Kconfig b/drivers/staging/apple-bce/Kconfig
-new file mode 100644
-index 000000000..fe92bc441
---- /dev/null
-+++ b/drivers/staging/apple-bce/Kconfig
-@@ -0,0 +1,18 @@
-+config APPLE_BCE
-+ tristate "Apple BCE driver (VHCI and Audio support)"
-+ default m
-+ depends on X86
-+ select SOUND
-+ select SND
-+ select SND_PCM
-+ select SND_JACK
-+ help
-+ VHCI and audio support on Apple MacBooks with the T2 Chip.
-+ This driver is divided in three components:
-+ - BCE (Buffer Copy Engine): which establishes a basic communication
-+ channel with the T2 chip. This component is required by the other two:
-+ - VHCI (Virtual Host Controller Interface): Access to keyboard, mouse
-+ and other system devices depend on this virtual USB host controller
-+ - Audio: a driver for the T2 audio interface.
-+
-+ If "M" is selected, the module will be called apple-bce.'
-diff --git a/drivers/staging/apple-bce/Makefile b/drivers/staging/apple-bce/Makefile
-index a6a656f06..8cfbd3f64 100644
---- a/drivers/staging/apple-bce/Makefile
-+++ b/drivers/staging/apple-bce/Makefile
-@@ -1,5 +1,5 @@
- modname := apple-bce
--obj-m += $(modname).o
-+obj-$(CONFIG_APPLE_BCE) += $(modname).o
-
- apple-bce-objs := apple_bce.o mailbox.o queue.o queue_dma.o vhci/vhci.o vhci/queue.o vhci/transfer.o audio/audio.o audio/protocol.o audio/protocol_bce.o audio/pcm.o
-
---
-2.34.1
-From 153b587ed53135eaf244144f6f8bdd5a0fe6b69e Mon Sep 17 00:00:00 2001
-From: Redecorating <69827514+Redecorating@users.noreply.github.com>
-Date: Fri, 24 Dec 2021 18:12:25 +1100
-Subject: [PATCH 1/1] add modalias to apple-bce
-
----
- drivers/staging/apple-bce/apple_bce.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/staging/apple-bce/apple_bce.c b/drivers/staging/apple-bce/apple_bce.c
-index ad89632df..5e2f2f3b9 100644
---- a/drivers/staging/apple-bce/apple_bce.c
-+++ b/drivers/staging/apple-bce/apple_bce.c
-@@ -439,5 +439,6 @@ MODULE_LICENSE("GPL");
- MODULE_AUTHOR("MrARM");
- MODULE_DESCRIPTION("Apple BCE Driver");
- MODULE_VERSION("0.01");
-+MODULE_ALIAS("pci:v0000106Bd00001801sv*sd*bc*sc*i*");
- module_init(apple_bce_module_init);
- module_exit(apple_bce_module_exit);
---
-2.43.0
-
-From 75ca57b64ce6846622d8aefac5a76fc638a2123d Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Sun, 5 Mar 2023 19:12:53 +0300
-Subject: [PATCH 01/12] HID: core: add helper for finding a field with a
- certain usage
-
-This helper will allow HID drivers to easily determine if they should
-bind to a hid_device by checking for the prescence of a certain field
-when its ID is not enough, which can be the case on USB devices with
-multiple interfaces and/or configurations.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/hid-core.c | 25 +++++++++++++++++++++++++
- drivers/hid/hid-google-hammer.c | 27 ++-------------------------
- include/linux/hid.h | 2 ++
- 3 files changed, 29 insertions(+), 25 deletions(-)
-
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 8992e3c1e..6395bdc2e 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -1906,6 +1906,31 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
+diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
+index e02ba15f6e34..b35734d03109 100644
+--- a/drivers/usb/core/driver.c
++++ b/drivers/usb/core/driver.c
+@@ -517,6 +517,19 @@ static int usb_unbind_interface(struct device *dev)
+ return 0;
}
- EXPORT_SYMBOL_GPL(hid_set_field);
-+struct hid_field *hid_find_field(struct hid_device *hdev, unsigned int report_type,
-+ unsigned int application, unsigned int usage)
++static void usb_shutdown_interface(struct device *dev)
+{
-+ struct list_head *report_list = &hdev->report_enum[report_type].report_list;
-+ struct hid_report *report;
-+ int i, j;
-+
-+ list_for_each_entry(report, report_list, list) {
-+ if (report->application != application)
-+ continue;
-+
-+ for (i = 0; i < report->maxfield; i++) {
-+ struct hid_field *field = report->field[i];
++ struct usb_interface *intf = to_usb_interface(dev);
++ struct usb_driver *driver;
+
-+ for (j = 0; j < field->maxusage; j++) {
-+ if (field->usage[j].hid == usage)
-+ return field;
-+ }
-+ }
-+ }
++ if (!dev->driver)
++ return;
+
-+ return NULL;
++ driver = to_usb_driver(dev->driver);
++ if (driver->shutdown)
++ driver->shutdown(intf);
+}
-+EXPORT_SYMBOL_GPL(hid_find_field);
+
- static struct hid_report *hid_get_report(struct hid_report_enum *report_enum,
- const u8 *data)
+ /**
+ * usb_driver_claim_interface - bind a driver to an interface
+ * @driver: the driver to be bound
+@@ -1059,6 +1072,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
+ new_driver->driver.bus = &usb_bus_type;
+ new_driver->driver.probe = usb_probe_interface;
+ new_driver->driver.remove = usb_unbind_interface;
++ new_driver->driver.shutdown = usb_shutdown_interface;
+ new_driver->driver.owner = owner;
+ new_driver->driver.mod_name = mod_name;
+ new_driver->driver.dev_groups = new_driver->dev_groups;
+diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
+index b610a2de4ae5..0cdbcf82554f 100644
+--- a/drivers/usb/storage/uas.c
++++ b/drivers/usb/storage/uas.c
+@@ -1232,9 +1232,8 @@ static void uas_disconnect(struct usb_interface *intf)
+ * hang on reboot when the device is still in uas mode. Note the reset is
+ * necessary as some devices won't revert to usb-storage mode without it.
+ */
+-static void uas_shutdown(struct device *dev)
++static void uas_shutdown(struct usb_interface *intf)
{
-diff --git a/drivers/hid/hid-google-hammer.c b/drivers/hid/hid-google-hammer.c
-index c6bdb9c4e..fba3652aa 100644
---- a/drivers/hid/hid-google-hammer.c
-+++ b/drivers/hid/hid-google-hammer.c
-@@ -419,38 +419,15 @@ static int hammer_event(struct hid_device *hid, struct hid_field *field,
- return 0;
- }
+- struct usb_interface *intf = to_usb_interface(dev);
+ struct usb_device *udev = interface_to_usbdev(intf);
+ struct Scsi_Host *shost = usb_get_intfdata(intf);
+ struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
+@@ -1257,7 +1256,7 @@ static struct usb_driver uas_driver = {
+ .suspend = uas_suspend,
+ .resume = uas_resume,
+ .reset_resume = uas_reset_resume,
+- .driver.shutdown = uas_shutdown,
++ .shutdown = uas_shutdown,
+ .id_table = uas_usb_ids,
+ };
--static bool hammer_has_usage(struct hid_device *hdev, unsigned int report_type,
-- unsigned application, unsigned usage)
--{
-- struct hid_report_enum *re = &hdev->report_enum[report_type];
-- struct hid_report *report;
-- int i, j;
--
-- list_for_each_entry(report, &re->report_list, list) {
-- if (report->application != application)
-- continue;
--
-- for (i = 0; i < report->maxfield; i++) {
-- struct hid_field *field = report->field[i];
--
-- for (j = 0; j < field->maxusage; j++)
-- if (field->usage[j].hid == usage)
-- return true;
-- }
-- }
--
-- return false;
--}
--
- static bool hammer_has_folded_event(struct hid_device *hdev)
- {
-- return hammer_has_usage(hdev, HID_INPUT_REPORT,
-+ return !!hid_find_field(hdev, HID_INPUT_REPORT,
- HID_GD_KEYBOARD, HID_USAGE_KBD_FOLDED);
- }
+diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h
+index 428d81afe215..aa1604d92c1a 100644
+--- a/include/drm/drm_format_helper.h
++++ b/include/drm/drm_format_helper.h
+@@ -96,6 +96,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_
+ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,
+ const struct iosys_map *src, const struct drm_framebuffer *fb,
+ const struct drm_rect *clip, struct drm_format_conv_state *state);
++void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
++ const struct iosys_map *src, const struct drm_framebuffer *fb,
++ const struct drm_rect *clip, struct drm_format_conv_state *state);
+ void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,
+ const struct iosys_map *src, const struct drm_framebuffer *fb,
+ const struct drm_rect *clip, struct drm_format_conv_state *state);
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index 418e555459da..3a6c04a9f9aa 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -74,10 +74,10 @@ typedef void *efi_handle_t;
+ */
+ typedef guid_t efi_guid_t __aligned(__alignof__(u32));
- static bool hammer_has_backlight_control(struct hid_device *hdev)
- {
-- return hammer_has_usage(hdev, HID_OUTPUT_REPORT,
-+ return !!hid_find_field(hdev, HID_OUTPUT_REPORT,
- HID_GD_KEYBOARD, HID_AD_BRIGHTNESS);
- }
+-#define EFI_GUID(a, b, c, d...) (efi_guid_t){ { \
++#define EFI_GUID(a, b, c, d...) ((efi_guid_t){ { \
+ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
+ (b) & 0xff, ((b) >> 8) & 0xff, \
+- (c) & 0xff, ((c) >> 8) & 0xff, d } }
++ (c) & 0xff, ((c) >> 8) & 0xff, d } })
+ /*
+ * Generic EFI table header
+@@ -385,6 +385,7 @@ void efi_native_runtime_setup(void);
+ #define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
+ #define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
+ #define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)
++#define APPLE_SET_OS_PROTOCOL_GUID EFI_GUID(0xc5c5da95, 0x7d5c, 0x45e6, 0xb2, 0xf1, 0x3f, 0xd5, 0x2b, 0xb1, 0x00, 0x77)
+ #define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
+ #define EFI_TCG2_FINAL_EVENTS_TABLE_GUID EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, 0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
+ #define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 39e21e381..9520fdfdd 100644
+index 8e06d89698e6..6cdb5a451453 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
-@@ -913,6 +913,8 @@ extern void hidinput_report_event(struct hid_device *hid, struct hid_report *rep
+@@ -940,6 +940,8 @@ extern void hidinput_report_event(struct hid_device *hid, struct hid_report *rep
extern int hidinput_connect(struct hid_device *hid, unsigned int force);
extern void hidinput_disconnect(struct hid_device *);
@@ -6056,1065 +10562,32 @@ index 39e21e381..9520fdfdd 100644
int hid_set_field(struct hid_field *, unsigned, __s32);
int hid_input_report(struct hid_device *hid, enum hid_report_type type, u8 *data, u32 size,
int interrupt);
---
-2.42.0
-
-From 05cd738ce1c0e1a930a1dab02528fd9f1c702c38 Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Sun, 5 Mar 2023 18:52:43 +0300
-Subject: [PATCH 02/12] HID: hid-appletb-bl: add driver for the backlight of
- Apple Touch Bars
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This commit adds a driver for the backlight of Apple Touch Bars on x86
-Macs. Note that currently only T2 Macs are supported.
-
-This driver is based on previous work done by Ronald Tschalär
-<ronald@innovation.ch>.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/Kconfig | 10 ++
- drivers/hid/Makefile | 1 +
- drivers/hid/hid-appletb-bl.c | 193 +++++++++++++++++++++++++++++++++++
- drivers/hid/hid-quirks.c | 4 +-
- 5 files changed, 213 insertions(+), 1 deletion(-)
- create mode 100644 drivers/hid/hid-appletb-bl.c
-
-diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index e11c1c803..cf19a3b33 100644
---- a/drivers/hid/Kconfig
-+++ b/drivers/hid/Kconfig
-@@ -148,6 +148,16 @@ config HID_APPLEIR
-
- Say Y here if you want support for Apple infrared remote control.
-
-+config HID_APPLETB_BL
-+ tristate "Apple Touch Bar Backlight"
-+ depends on BACKLIGHT_CLASS_DEVICE
-+ help
-+ Say Y here if you want support for the backlight of Touch Bars on x86
-+ MacBook Pros.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called hid-appletb-bl.
-+
- config HID_ASUS
- tristate "Asus"
- depends on USB_HID
-diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 7a9e16015..bc86e38b2 100644
---- a/drivers/hid/Makefile
-+++ b/drivers/hid/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_HID_ALPS) += hid-alps.o
- obj-$(CONFIG_HID_ACRUX) += hid-axff.o
- obj-$(CONFIG_HID_APPLE) += hid-apple.o
- obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o
-+obj-$(CONFIG_HID_APPLETB_BL) += hid-appletb-bl.o
- obj-$(CONFIG_HID_CREATIVE_SB0540) += hid-creative-sb0540.o
- obj-$(CONFIG_HID_ASUS) += hid-asus.o
- obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
-diff --git a/drivers/hid/hid-appletb-bl.c b/drivers/hid/hid-appletb-bl.c
-new file mode 100644
-index 000000000..0c5e4b776
---- /dev/null
-+++ b/drivers/hid/hid-appletb-bl.c
-@@ -0,0 +1,193 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Apple Touch Bar Backlight Driver
-+ *
-+ * Copyright (c) 2017-2018 Ronald Tschalär
-+ * Copyright (c) 2022-2023 Kerem Karabay <kekrby@gmail.com>
-+ */
-+
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#include <linux/hid.h>
-+#include <linux/backlight.h>
-+
-+#include "hid-ids.h"
-+
-+#define APPLETB_BL_ON 1
-+#define APPLETB_BL_DIM 3
-+#define APPLETB_BL_OFF 4
-+
-+#define HID_UP_APPLEVENDOR_TB_BL 0xff120000
-+
-+#define HID_VD_APPLE_TB_BRIGHTNESS 0xff120001
-+#define HID_USAGE_AUX1 0xff120020
-+#define HID_USAGE_BRIGHTNESS 0xff120021
-+
-+struct appletb_bl {
-+ struct hid_field *aux1_field, *brightness_field;
-+ struct backlight_device *bdev;
-+
-+ bool full_on;
-+};
-+
-+const u8 appletb_bl_brightness_map[] = {
-+ APPLETB_BL_OFF,
-+ APPLETB_BL_DIM,
-+ APPLETB_BL_ON
-+};
-+
-+static int appletb_bl_set_brightness(struct appletb_bl *bl, u8 brightness)
-+{
-+ struct hid_report *report = bl->brightness_field->report;
-+ struct hid_device *hdev = report->device;
-+ int ret;
-+
-+ ret = hid_set_field(bl->aux1_field, 0, 1);
-+ if (ret) {
-+ hid_err(hdev, "Failed to set auxiliary field (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ ret = hid_set_field(bl->brightness_field, 0, brightness);
-+ if (ret) {
-+ hid_err(hdev, "Failed to set brightness field (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ if (!bl->full_on) {
-+ ret = hid_hw_power(hdev, PM_HINT_FULLON);
-+ if (ret < 0) {
-+ hid_err(hdev, "Device didn't power on (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ bl->full_on = true;
-+ }
-+
-+ hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
-+
-+ if (brightness == APPLETB_BL_OFF) {
-+ hid_hw_power(hdev, PM_HINT_NORMAL);
-+ bl->full_on = false;
-+ }
-+
-+ return 0;
-+}
-+
-+static int appletb_bl_update_status(struct backlight_device *bdev)
-+{
-+ struct appletb_bl *bl = bl_get_data(bdev);
-+ u16 brightness;
-+
-+ if (bdev->props.state & BL_CORE_SUSPENDED)
-+ brightness = 0;
-+ else
-+ brightness = backlight_get_brightness(bdev);
-+
-+ return appletb_bl_set_brightness(bl, appletb_bl_brightness_map[brightness]);
-+}
-+
-+static const struct backlight_ops appletb_bl_backlight_ops = {
-+ .options = BL_CORE_SUSPENDRESUME,
-+ .update_status = appletb_bl_update_status,
-+};
-+
-+static int appletb_bl_probe(struct hid_device *hdev, const struct hid_device_id *id)
-+{
-+ struct hid_field *aux1_field, *brightness_field;
-+ struct backlight_properties bl_props = { 0 };
-+ struct device *dev = &hdev->dev;
-+ struct appletb_bl *bl;
-+ int ret;
-+
-+ ret = hid_parse(hdev);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "HID parse failed\n");
-+
-+ aux1_field = hid_find_field(hdev, HID_FEATURE_REPORT,
-+ HID_VD_APPLE_TB_BRIGHTNESS, HID_USAGE_AUX1);
-+
-+ brightness_field = hid_find_field(hdev, HID_FEATURE_REPORT,
-+ HID_VD_APPLE_TB_BRIGHTNESS, HID_USAGE_BRIGHTNESS);
-+
-+ if (!aux1_field || !brightness_field)
-+ return -ENODEV;
-+
-+ if (aux1_field->report != brightness_field->report)
-+ return dev_err_probe(dev, -ENODEV, "Encountered unexpected report structure\n");
-+
-+ bl = devm_kzalloc(dev, sizeof(*bl), GFP_KERNEL);
-+ if (!bl)
-+ return -ENOMEM;
-+
-+ ret = hid_hw_start(hdev, HID_CONNECT_DRIVER);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "HID hardware start failed\n");
-+
-+ ret = hid_hw_open(hdev);
-+ if (ret) {
-+ dev_err_probe(dev, ret, "HID hardware open failed\n");
-+ goto stop_hw;
-+ }
-+
-+ bl->aux1_field = aux1_field;
-+ bl->brightness_field = brightness_field;
-+
-+ ret = appletb_bl_set_brightness(bl, APPLETB_BL_OFF);
-+ if (ret) {
-+ dev_err_probe(dev, ret, "Failed to set touch bar brightness to off\n");
-+ goto close_hw;
-+ }
-+
-+ bl_props.type = BACKLIGHT_RAW;
-+ bl_props.max_brightness = ARRAY_SIZE(appletb_bl_brightness_map) - 1;
-+
-+ bl->bdev = devm_backlight_device_register(dev, "appletb_backlight", dev, bl,
-+ &appletb_bl_backlight_ops, &bl_props);
-+ if (IS_ERR(bl->bdev)) {
-+ ret = PTR_ERR(bl->bdev);
-+ dev_err_probe(dev, ret, "Failed to register backlight device\n");
-+ goto close_hw;
-+ }
-+
-+ hid_set_drvdata(hdev, bl);
-+
-+ return 0;
-+
-+close_hw:
-+ hid_hw_close(hdev);
-+stop_hw:
-+ hid_hw_stop(hdev);
-+
-+ return ret;
-+}
-+
-+static void appletb_bl_remove(struct hid_device *hdev)
-+{
-+ struct appletb_bl *bl = hid_get_drvdata(hdev);
-+
-+ appletb_bl_set_brightness(bl, APPLETB_BL_OFF);
-+
-+ hid_hw_close(hdev);
-+ hid_hw_stop(hdev);
-+}
-+
-+static const struct hid_device_id appletb_bl_hid_ids[] = {
-+ /* MacBook Pro's 2018, 2019, with T2 chip: iBridge DFR Brightness */
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(hid, appletb_bl_hid_ids);
-+
-+static struct hid_driver appletb_bl_hid_driver = {
-+ .name = "hid-appletb-bl",
-+ .id_table = appletb_bl_hid_ids,
-+ .probe = appletb_bl_probe,
-+ .remove = appletb_bl_remove,
-+};
-+module_hid_driver(appletb_bl_hid_driver);
-+
-+MODULE_AUTHOR("Ronald Tschalär");
-+MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
-+MODULE_DESCRIPTION("MacBookPro Touch Bar Backlight Driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
-index 3983b4f28..82e7a80c9 100644
---- a/drivers/hid/hid-quirks.c
-+++ b/drivers/hid/hid-quirks.c
-@@ -325,7 +325,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
- #endif
- #if IS_ENABLED(CONFIG_HID_APPLEIR)
-@@ -335,6 +334,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
- #endif
-+#if IS_ENABLED(CONFIG_HID_APPLETB_BL)
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
-+#endif
- #if IS_ENABLED(CONFIG_HID_ASUS)
- { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
- { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
---
-2.42.0
-
-From 514b4f088b7ed916c634ca6f61de72c5f86268dd Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Sun, 5 Mar 2023 18:17:23 +0300
-Subject: [PATCH 03/12] HID: hid-appletb-kbd: add driver for the keyboard mode
- of Apple Touch Bars
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The Touch Bars found on x86 Macs support two USB configurations: one
-where the device presents itself as a HID keyboard and can display
-predefined sets of keys, and one where the operating system has full
-control over what is displayed. This commit adds a driver for the
-display functionality of the first configuration.
-
-Note that currently only T2 Macs are supported.
-
-This driver is based on previous work done by Ronald Tschalär
-<ronald@innovation.ch>.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- .../ABI/testing/sysfs-driver-hid-appletb-kbd | 13 +
- drivers/hid/Kconfig | 11 +
- drivers/hid/Makefile | 1 +
- drivers/hid/hid-appletb-kbd.c | 289 ++++++++++++++++++
- drivers/hid/hid-quirks.c | 4 +-
- 5 files changed, 317 insertions(+), 1 deletion(-)
- create mode 100644 Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
- create mode 100644 drivers/hid/hid-appletb-kbd.c
-
-diff --git a/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd b/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
-new file mode 100644
-index 000000000..2a19584d0
---- /dev/null
-+++ b/Documentation/ABI/testing/sysfs-driver-hid-appletb-kbd
-@@ -0,0 +1,13 @@
-+What: /sys/bus/hid/drivers/hid-appletb-kbd/<dev>/mode
-+Date: September, 2023
-+KernelVersion: 6.5
-+Contact: linux-input@vger.kernel.org
-+Description:
-+ The set of keys displayed on the Touch Bar.
-+ Valid values are:
-+ == =================
-+ 0 Escape key only
-+ 1 Function keys
-+ 2 Media/brightness keys
-+ 3 None
-+ == =================
-diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index cf19a3b33..852de13aa 100644
---- a/drivers/hid/Kconfig
-+++ b/drivers/hid/Kconfig
-@@ -158,6 +158,17 @@ config HID_APPLETB_BL
- To compile this driver as a module, choose M here: the
- module will be called hid-appletb-bl.
-
-+config HID_APPLETB_KBD
-+ tristate "Apple Touch Bar Keyboard Mode"
-+ depends on USB_HID
-+ help
-+ Say Y here if you want support for the keyboard mode (escape,
-+ function, media and brightness keys) of Touch Bars on x86 MacBook
-+ Pros.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called hid-appletb-kbd.
-+
- config HID_ASUS
- tristate "Asus"
- depends on USB_HID
-diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index bc86e38b2..5b60015fd 100644
---- a/drivers/hid/Makefile
-+++ b/drivers/hid/Makefile
-@@ -30,6 +30,7 @@ obj-$(CONFIG_HID_ACRUX) += hid-axff.o
- obj-$(CONFIG_HID_APPLE) += hid-apple.o
- obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o
- obj-$(CONFIG_HID_APPLETB_BL) += hid-appletb-bl.o
-+obj-$(CONFIG_HID_APPLETB_KBD) += hid-appletb-kbd.o
- obj-$(CONFIG_HID_CREATIVE_SB0540) += hid-creative-sb0540.o
- obj-$(CONFIG_HID_ASUS) += hid-asus.o
- obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
-diff --git a/drivers/hid/hid-appletb-kbd.c b/drivers/hid/hid-appletb-kbd.c
-new file mode 100644
-index 000000000..bc004c408
---- /dev/null
-+++ b/drivers/hid/hid-appletb-kbd.c
-@@ -0,0 +1,289 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Apple Touch Bar Keyboard Mode Driver
-+ *
-+ * Copyright (c) 2017-2018 Ronald Tschalär
-+ * Copyright (c) 2022-2023 Kerem Karabay <kekrby@gmail.com>
-+ */
-+
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#include <linux/hid.h>
-+#include <linux/usb.h>
-+#include <linux/input.h>
-+#include <linux/sysfs.h>
-+#include <linux/bitops.h>
-+#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/input/sparse-keymap.h>
-+
-+#include "hid-ids.h"
-+
-+#define APPLETB_KBD_MODE_ESC 0
-+#define APPLETB_KBD_MODE_FN 1
-+#define APPLETB_KBD_MODE_SPCL 2
-+#define APPLETB_KBD_MODE_OFF 3
-+#define APPLETB_KBD_MODE_MAX APPLETB_KBD_MODE_OFF
-+
-+#define HID_USAGE_MODE 0x00ff0004
-+
-+struct appletb_kbd {
-+ struct hid_field *mode_field;
-+
-+ u8 saved_mode;
-+ u8 current_mode;
-+};
-+
-+static const struct key_entry appletb_kbd_keymap[] = {
-+ { KE_KEY, KEY_ESC, { KEY_ESC } },
-+ { KE_KEY, KEY_F1, { KEY_BRIGHTNESSDOWN } },
-+ { KE_KEY, KEY_F2, { KEY_BRIGHTNESSUP } },
-+ { KE_KEY, KEY_F3, { KEY_RESERVED } },
-+ { KE_KEY, KEY_F4, { KEY_RESERVED } },
-+ { KE_KEY, KEY_F5, { KEY_KBDILLUMDOWN } },
-+ { KE_KEY, KEY_F6, { KEY_KBDILLUMUP } },
-+ { KE_KEY, KEY_F7, { KEY_PREVIOUSSONG } },
-+ { KE_KEY, KEY_F8, { KEY_PLAYPAUSE } },
-+ { KE_KEY, KEY_F9, { KEY_NEXTSONG } },
-+ { KE_KEY, KEY_F10, { KEY_MUTE } },
-+ { KE_KEY, KEY_F11, { KEY_VOLUMEDOWN } },
-+ { KE_KEY, KEY_F12, { KEY_VOLUMEUP } },
-+ { KE_END, 0 }
-+};
-+
-+static int appletb_kbd_set_mode(struct appletb_kbd *kbd, u8 mode)
-+{
-+ struct hid_report *report = kbd->mode_field->report;
-+ struct hid_device *hdev = report->device;
-+ int ret;
-+
-+ ret = hid_hw_power(hdev, PM_HINT_FULLON);
-+ if (ret) {
-+ hid_err(hdev, "Device didn't resume (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ ret = hid_set_field(kbd->mode_field, 0, mode);
-+ if (ret) {
-+ hid_err(hdev, "Failed to set mode field to %u (%pe)\n", mode, ERR_PTR(ret));
-+ goto power_normal;
-+ }
-+
-+ hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
-+
-+ kbd->current_mode = mode;
-+
-+power_normal:
-+ hid_hw_power(hdev, PM_HINT_NORMAL);
-+
-+ return ret;
-+}
-+
-+static ssize_t mode_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct appletb_kbd *kbd = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(buf, "%d\n", kbd->current_mode);
-+}
-+
-+static ssize_t mode_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t size)
-+{
-+ struct appletb_kbd *kbd = dev_get_drvdata(dev);
-+ u8 mode;
-+ int ret;
-+
-+ ret = kstrtou8(buf, 0, &mode);
-+ if (ret)
-+ return ret;
-+
-+ if (mode > APPLETB_KBD_MODE_MAX)
-+ return -EINVAL;
-+
-+ ret = appletb_kbd_set_mode(kbd, mode);
-+
-+ return ret < 0 ? ret : size;
-+}
-+static DEVICE_ATTR_RW(mode);
-+
-+struct attribute *appletb_kbd_attrs[] = {
-+ &dev_attr_mode.attr,
-+ NULL
-+};
-+ATTRIBUTE_GROUPS(appletb_kbd);
-+
-+static int appletb_tb_key_to_slot(unsigned int code)
-+{
-+ switch (code) {
-+ case KEY_ESC:
-+ return 0;
-+ case KEY_F1 ... KEY_F10:
-+ return code - KEY_F1 + 1;
-+ case KEY_F11 ... KEY_F12:
-+ return code - KEY_F11 + 11;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int appletb_kbd_hid_event(struct hid_device *hdev, struct hid_field *field,
-+ struct hid_usage *usage, __s32 value)
-+{
-+ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
-+ struct key_entry *translation;
-+ struct input_dev *input;
-+ int slot;
-+
-+ if ((usage->hid & HID_USAGE_PAGE) != HID_UP_KEYBOARD || usage->type != EV_KEY)
-+ return 0;
-+
-+ input = field->hidinput->input;
-+
-+ /*
-+ * Skip non-touch-bar keys.
-+ *
-+ * Either the touch bar itself or usbhid generate a slew of key-down
-+ * events for all the meta keys. None of which we're at all interested
-+ * in.
-+ */
-+ slot = appletb_tb_key_to_slot(usage->code);
-+ if (slot < 0)
-+ return 0;
-+
-+ translation = sparse_keymap_entry_from_scancode(input, usage->code);
-+
-+ if (translation && kbd->current_mode == APPLETB_KBD_MODE_SPCL) {
-+ input_event(input, usage->type, translation->keycode, value);
-+
-+ return 1;
-+ }
-+
-+ return kbd->current_mode == APPLETB_KBD_MODE_OFF;
-+}
-+
-+static int appletb_kbd_input_configured(struct hid_device *hdev, struct hid_input *hidinput)
-+{
-+ struct input_dev *input = hidinput->input;
-+
-+ /*
-+ * Clear various input capabilities that are blindly set by the hid
-+ * driver (usbkbd.c)
-+ */
-+ memset(input->evbit, 0, sizeof(input->evbit));
-+ memset(input->keybit, 0, sizeof(input->keybit));
-+ memset(input->ledbit, 0, sizeof(input->ledbit));
-+
-+ __set_bit(EV_REP, input->evbit);
-+
-+ return sparse_keymap_setup(input, appletb_kbd_keymap, NULL);
-+}
-+
-+static int appletb_kbd_probe(struct hid_device *hdev, const struct hid_device_id *id)
-+{
-+ struct appletb_kbd *kbd;
-+ struct device *dev = &hdev->dev;
-+ struct hid_field *mode_field;
-+ int ret;
-+
-+ ret = hid_parse(hdev);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "HID parse failed\n");
-+
-+ mode_field = hid_find_field(hdev, HID_OUTPUT_REPORT,
-+ HID_GD_KEYBOARD, HID_USAGE_MODE);
-+ if (!mode_field)
-+ return -ENODEV;
-+
-+ kbd = devm_kzalloc(dev, sizeof(*kbd), GFP_KERNEL);
-+ if (!kbd)
-+ return -ENOMEM;
-+
-+ kbd->mode_field = mode_field;
-+
-+ ret = hid_hw_start(hdev, HID_CONNECT_HIDINPUT);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "HID hw start failed\n");
-+
-+ ret = hid_hw_open(hdev);
-+ if (ret) {
-+ dev_err_probe(dev, ret, "HID hw open failed\n");
-+ goto stop_hw;
-+ }
-+
-+ ret = appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
-+ if (ret) {
-+ dev_err_probe(dev, ret, "Failed to set touchbar mode\n");
-+ goto close_hw;
-+ }
-+
-+ hid_set_drvdata(hdev, kbd);
-+
-+ return 0;
-+
-+close_hw:
-+ hid_hw_close(hdev);
-+stop_hw:
-+ hid_hw_stop(hdev);
-+ return ret;
-+}
-+
-+static void appletb_kbd_remove(struct hid_device *hdev)
-+{
-+ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
-+
-+ appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
-+
-+ hid_hw_close(hdev);
-+ hid_hw_stop(hdev);
-+}
-+
-+#ifdef CONFIG_PM
-+static int appletb_kbd_suspend(struct hid_device *hdev, pm_message_t msg)
-+{
-+ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
-+
-+ kbd->saved_mode = kbd->current_mode;
-+ appletb_kbd_set_mode(kbd, APPLETB_KBD_MODE_OFF);
-+
-+ return 0;
-+}
-+
-+static int appletb_kbd_reset_resume(struct hid_device *hdev)
-+{
-+ struct appletb_kbd *kbd = hid_get_drvdata(hdev);
-+
-+ appletb_kbd_set_mode(kbd, kbd->saved_mode);
-+
-+ return 0;
-+}
-+#endif
-+
-+static const struct hid_device_id appletb_kbd_hid_ids[] = {
-+ /* MacBook Pro's 2018, 2019, with T2 chip: iBridge Display */
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(hid, appletb_kbd_hid_ids);
-+
-+static struct hid_driver appletb_kbd_hid_driver = {
-+ .name = "hid-appletb-kbd",
-+ .id_table = appletb_kbd_hid_ids,
-+ .probe = appletb_kbd_probe,
-+ .remove = appletb_kbd_remove,
-+ .event = appletb_kbd_hid_event,
-+ .input_configured = appletb_kbd_input_configured,
-+#ifdef CONFIG_PM
-+ .suspend = appletb_kbd_suspend,
-+ .reset_resume = appletb_kbd_reset_resume,
-+#endif
-+ .driver.dev_groups = appletb_kbd_groups,
-+};
-+module_hid_driver(appletb_kbd_hid_driver);
-+
-+MODULE_AUTHOR("Ronald Tschalär");
-+MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
-+MODULE_DESCRIPTION("MacBookPro Touch Bar Keyboard Mode Driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
-index 82e7a80c9..82be9dfaf 100644
---- a/drivers/hid/hid-quirks.c
-+++ b/drivers/hid/hid-quirks.c
-@@ -325,7 +325,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021) },
-- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
- #endif
- #if IS_ENABLED(CONFIG_HID_APPLEIR)
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
-@@ -337,6 +336,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
- #if IS_ENABLED(CONFIG_HID_APPLETB_BL)
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
- #endif
-+#if IS_ENABLED(CONFIG_HID_APPLETB_KBD)
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
-+#endif
- #if IS_ENABLED(CONFIG_HID_ASUS)
- { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
- { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
---
-2.42.0
-
-From 2f9be28549307b4ac51e8d66bf3b8d5e0621466d Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Wed, 19 Jul 2023 19:37:14 +0300
-Subject: [PATCH 04/12] HID: multitouch: support getting the contact ID from
- HID_DG_TRANSDUCER_INDEX fields
-
-This is needed to support Apple Touch Bars, where the contact ID is
-contained in fields with the HID_DG_TRANSDUCER_INDEX usage.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/hid-multitouch.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index e31be0cb8..902a59928 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -636,7 +636,9 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
-
- if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
- for (n = 0; n < field->report_count; n++) {
-- if (field->usage[n].hid == HID_DG_CONTACTID) {
-+ unsigned int hid = field->usage[n].hid;
-+
-+ if (hid == HID_DG_CONTACTID || hid == HID_DG_TRANSDUCER_INDEX) {
- rdata->is_mt_collection = true;
- break;
- }
-@@ -815,6 +817,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
- MT_STORE_FIELD(tip_state);
- return 1;
- case HID_DG_CONTACTID:
-+ case HID_DG_TRANSDUCER_INDEX:
- MT_STORE_FIELD(contactid);
- app->touches_by_report++;
- return 1;
---
-2.42.0
-
-From 6162d328fe7b2cf5a3ee8c29bdb229e9528c7a6c Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Wed, 19 Jul 2023 19:44:10 +0300
-Subject: [PATCH 05/12] HID: multitouch: support getting the tip state from
- HID_DG_TOUCH fields
-
-This is necessary on Apple Touch Bars, where the tip state is contained
-in fields with the HID_DG_TOUCH usage. This feature is gated by a quirk
-in order to prevent breaking other devices, see commit c2ef8f21ea8f
-("HID: multitouch: add support for trackpads").
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/hid-multitouch.c | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index 902a59928..dd5509eeb 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -72,6 +72,7 @@
- #define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
- #define MT_QUIRK_DISABLE_WAKEUP BIT(21)
- #define MT_QUIRK_ORIENTATION_INVERT BIT(22)
-+#define MT_QUIRK_TOUCH_IS_TIPSTATE BIT(25)
-
- #define MT_INPUTMODE_TOUCHSCREEN 0x02
- #define MT_INPUTMODE_TOUCHPAD 0x03
-@@ -810,6 +811,15 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
-
- MT_STORE_FIELD(confidence_state);
- return 1;
-+ case HID_DG_TOUCH:
-+ /*
-+ * Legacy devices use TIPSWITCH and not TOUCH.
-+ * Let's just ignore this field unless the quirk is set.
-+ */
-+ if (!(cls->quirks & MT_QUIRK_TOUCH_IS_TIPSTATE))
-+ return -1;
-+
-+ fallthrough;
- case HID_DG_TIPSWITCH:
- if (field->application != HID_GD_SYSTEM_MULTIAXIS)
- input_set_capability(hi->input,
-@@ -873,10 +883,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
- case HID_DG_CONTACTMAX:
- /* contact max are global to the report */
- return -1;
-- case HID_DG_TOUCH:
-- /* Legacy devices use TIPSWITCH and not TOUCH.
-- * Let's just ignore this field. */
-- return -1;
- }
- /* let hid-input decide for the others */
- return 0;
---
-2.42.0
-
-From e923c6e1a5a508e341851ae020cdb3e7333ccd18 Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Wed, 19 Jul 2023 19:26:57 +0300
-Subject: [PATCH 06/12] HID: multitouch: take cls->maxcontacts into account for
- devices without a HID_DG_CONTACTMAX field too
-
-This is needed for Apple Touch Bars, where no HID_DG_CONTACTMAX field is
-present and the maximum contact count is greater than the default.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/hid-multitouch.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index dd5509eeb..624c1d3cc 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -491,9 +491,6 @@ static void mt_feature_mapping(struct hid_device *hdev,
- if (!td->maxcontacts &&
- field->logical_maximum <= MT_MAX_MAXCONTACT)
- td->maxcontacts = field->logical_maximum;
-- if (td->mtclass.maxcontacts)
-- /* check if the maxcontacts is given by the class */
-- td->maxcontacts = td->mtclass.maxcontacts;
-
- break;
- case HID_DG_BUTTONTYPE:
-@@ -1310,6 +1307,10 @@ static int mt_touch_input_configured(struct hid_device *hdev,
- struct input_dev *input = hi->input;
- int ret;
-
-+ /* check if the maxcontacts is given by the class */
-+ if (cls->maxcontacts)
-+ td->maxcontacts = cls->maxcontacts;
-+
- if (!td->maxcontacts)
- td->maxcontacts = MT_DEFAULT_MAXCONTACT;
-
---
-2.42.0
-
-From b9f7232d2696b91ae98fadd7b14c531aa8edceb5 Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Wed, 19 Jul 2023 19:39:53 +0300
-Subject: [PATCH 07/12] HID: multitouch: allow specifying if a device is direct
- in a class
-
-Currently the driver determines the device type based on the
-application, but this value is not reliable on Apple Touch Bars, where
-the application is HID_DG_TOUCHPAD even though the devices are direct,
-so allow setting it in classes.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/hid-multitouch.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index 624c1d3cc..f98fb36ff 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -147,6 +147,7 @@ struct mt_class {
- __s32 sn_height; /* Signal/noise ratio for height events */
- __s32 sn_pressure; /* Signal/noise ratio for pressure events */
- __u8 maxcontacts;
-+ bool is_direct; /* true for touchscreens */
- bool is_indirect; /* true for touchpads */
- bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
- };
-@@ -564,13 +565,13 @@ static struct mt_application *mt_allocate_application(struct mt_device *td,
- mt_application->application = application;
- INIT_LIST_HEAD(&mt_application->mt_usages);
-
-- if (application == HID_DG_TOUCHSCREEN)
-+ if (application == HID_DG_TOUCHSCREEN && !td->mtclass.is_indirect)
- mt_application->mt_flags |= INPUT_MT_DIRECT;
-
- /*
- * Model touchscreens providing buttons as touchpads.
- */
-- if (application == HID_DG_TOUCHPAD) {
-+ if (application == HID_DG_TOUCHPAD && !td->mtclass.is_direct) {
- mt_application->mt_flags |= INPUT_MT_POINTER;
- td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
- }
-@@ -1318,6 +1319,9 @@ static int mt_touch_input_configured(struct hid_device *hdev,
- if (td->serial_maybe)
- mt_post_parse_default_settings(td, app);
-
-+ if (cls->is_direct)
-+ app->mt_flags |= INPUT_MT_DIRECT;
-+
- if (cls->is_indirect)
- app->mt_flags |= INPUT_MT_POINTER;
-
---
-2.42.0
-
-From a74de0b6f2e1b79d54e84dbeab1b310232275d6c Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Wed, 19 Jul 2023 19:46:02 +0300
-Subject: [PATCH 08/12] HID: multitouch: add device ID for Apple Touch Bars
-
-Note that this is device ID is for T2 Macs. Testing on T1 Macs would be
-appreciated.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/hid/Kconfig | 1 +
- drivers/hid/hid-multitouch.c | 26 ++++++++++++++++++++++----
- 2 files changed, 23 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 852de13aa..4e238df87 100644
---- a/drivers/hid/Kconfig
-+++ b/drivers/hid/Kconfig
-@@ -737,6 +737,7 @@ config HID_MULTITOUCH
- Say Y here if you have one of the following devices:
- - 3M PCT touch screens
- - ActionStar dual touch panels
-+ - Touch Bars on x86 MacBook Pros
- - Atmel panels
- - Cando dual touch panels
- - Chunghwa panels
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index f98fb36ff..f881b19db 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -212,6 +212,7 @@
- #define MT_CLS_GOOGLE 0x0111
- #define MT_CLS_RAZER_BLADE_STEALTH 0x0112
- #define MT_CLS_SMART_TECH 0x0113
-+#define MT_CLS_APPLE_TOUCHBAR 0x0115
-
- #define MT_DEFAULT_MAXCONTACT 10
- #define MT_MAX_MAXCONTACT 250
-@@ -396,6 +396,13 @@
- MT_QUIRK_CONTACT_CNT_ACCURATE |
- MT_QUIRK_SEPARATE_APP_REPORT,
- },
-+ { .name = MT_CLS_APPLE_TOUCHBAR,
-+ .quirks = MT_QUIRK_HOVERING |
-+ MT_QUIRK_TOUCH_IS_TIPSTATE |
-+ MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE,
-+ .is_direct = true,
-+ .maxcontacts = 11,
-+ },
- { }
- };
-
-@@ -1755,6 +1763,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
- }
- }
-
-+ ret = hid_parse(hdev);
-+ if (ret != 0)
-+ return ret;
-+
-+ if (mtclass->name == MT_CLS_APPLE_TOUCHBAR &&
-+ !hid_find_field(hdev, HID_INPUT_REPORT,
-+ HID_DG_TOUCHPAD, HID_DG_TRANSDUCER_INDEX))
-+ return -ENODEV;
-+
- td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
- if (!td) {
- dev_err(&hdev->dev, "cannot allocate multitouch data\n");
-@@ -1780,10 +1780,6 @@
-
- timer_setup(&td->release_timer, mt_expired_timeout, 0);
-
-- ret = hid_parse(hdev);
-- if (ret != 0)
-- return ret;
--
- if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
- mt_fix_const_fields(hdev, HID_DG_CONTACTID);
-
-@@ -2229,6 +2229,11 @@
- MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
- USB_DEVICE_ID_XIROKU_CSR2) },
-
-+ /* Apple Touch Bars */
-+ { .driver_data = MT_CLS_APPLE_TOUCHBAR,
-+ HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
-+ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
-+
- /* Google MT devices */
- { .driver_data = MT_CLS_GOOGLE,
- HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
---
-2.42.0
-
-From f6ab7e4580962c9d82e7dc40dd074d47b2bce034 Mon Sep 17 00:00:00 2001
-From: Hector Martin <marcan@marcan.st>
-Date: Tue, 1 Feb 2022 00:40:51 +0900
-Subject: [PATCH 09/12] lib/vsprintf: Add support for generic FOURCCs by
- extending %p4cc
-
-%p4cc is designed for DRM/V4L2 FOURCCs with their specific quirks, but
-it's useful to be able to print generic 4-character codes formatted as
-an integer. Extend it to add format specifiers for printing generic
-32-bit FOURCCs with various endian semantics:
-
-%p4ch Host-endian
-%p4cl Little-endian
-%p4cb Big-endian
-%p4cr Reverse-endian
-
-The endianness determines how bytes are interpreted as a u32, and the
-FOURCC is then always printed MSByte-first (this is the opposite of
-V4L/DRM FOURCCs). This covers most practical cases, e.g. %p4cr would
-allow printing LSByte-first FOURCCs stored in host endian order
-(other than the hex form being in character order, not the integer
-value).
-
-Signed-off-by: Hector Martin <marcan@marcan.st>
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- Documentation/core-api/printk-formats.rst | 32 ++++++++++++++++++++
- lib/test_printf.c | 20 +++++++++----
- lib/vsprintf.c | 36 +++++++++++++++++++----
- scripts/checkpatch.pl | 2 +-
- 4 files changed, 77 insertions(+), 13 deletions(-)
-
-diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
-index dfe7e75a7..0ccef63e6 100644
---- a/Documentation/core-api/printk-formats.rst
-+++ b/Documentation/core-api/printk-formats.rst
-@@ -631,6 +631,38 @@ Examples::
- %p4cc Y10 little-endian (0x20303159)
- %p4cc NV12 big-endian (0xb231564e)
+diff --git a/include/linux/usb.h b/include/linux/usb.h
+index 1913a13833f2..832997a9da0a 100644
+--- a/include/linux/usb.h
++++ b/include/linux/usb.h
+@@ -1171,6 +1171,7 @@ extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf);
+ * post_reset method is called.
+ * @post_reset: Called by usb_reset_device() after the device
+ * has been reset
++ * @shutdown: Called at shut-down time to quiesce the device.
+ * @id_table: USB drivers use ID table to support hotplugging.
+ * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
+ * or your driver's probe function will never get called.
+@@ -1222,6 +1223,8 @@ struct usb_driver {
+ int (*pre_reset)(struct usb_interface *intf);
+ int (*post_reset)(struct usb_interface *intf);
-+Generic FourCC code
-+-------------------
-+
-+::
-+ %p4c[hnbl] gP00 (0x67503030)
-+
-+Print a generic FourCC code, as both ASCII characters and its numerical
-+value as hexadecimal.
-+
-+The additional ``h``, ``r``, ``b``, and ``l`` specifiers are used to specify
-+host, reversed, big or little endian order data respectively. Host endian
-+order means the data is interpreted as a 32-bit integer and the most
-+significant byte is printed first; that is, the character code as printed
-+matches the byte order stored in memory on big-endian systems, and is reversed
-+on little-endian systems.
-+
-+Passed by reference.
-+
-+Examples for a little-endian machine, given &(u32)0x67503030::
-+
-+ %p4ch gP00 (0x67503030)
-+ %p4cl gP00 (0x67503030)
-+ %p4cb 00Pg (0x30305067)
-+ %p4cr 00Pg (0x30305067)
-+
-+Examples for a big-endian machine, given &(u32)0x67503030::
-+
-+ %p4ch gP00 (0x67503030)
-+ %p4cl 00Pg (0x30305067)
-+ %p4cb gP00 (0x67503030)
-+ %p4cr 00Pg (0x30305067)
++ void (*shutdown)(struct usb_interface *intf);
+
- Rust
- ----
+ const struct usb_device_id *id_table;
+ const struct attribute_group **dev_groups;
diff --git a/lib/test_printf.c b/lib/test_printf.c
-index 7677ebccf..2355be36f 100644
+index 69b6a5e177f2..a318bb72a165 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
-@@ -746,18 +746,26 @@ static void __init fwnode_pointer(void)
+@@ -745,18 +745,26 @@ static void __init fwnode_pointer(void)
static void __init fourcc_pointer(void)
{
struct {
@@ -7148,10 +10621,10 @@ index 7677ebccf..2355be36f 100644
static void __init
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index 40f560959..bd9af783c 100644
+index cdd4e2314bfc..4feaea1815fa 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
-@@ -1758,27 +1758,50 @@ char *fourcc_string(char *buf, char *end, const u32 *fourcc,
+@@ -1760,27 +1760,50 @@ char *fourcc_string(char *buf, char *end, const u32 *fourcc,
char output[sizeof("0123 little-endian (0x01234567)")];
char *p = output;
unsigned int i;
@@ -7208,7 +10681,7 @@ index 40f560959..bd9af783c 100644
*p++ = ' ';
*p++ = '(';
-@@ -2348,6 +2371,7 @@ char *rust_fmt_argument(char *buf, char *end, void *ptr);
+@@ -2355,6 +2378,7 @@ char *rust_fmt_argument(char *buf, char *end, void *ptr);
* read the documentation (path below) first.
* - 'NF' For a netdev_features_t
* - '4cc' V4L2 or DRM FourCC code, with endianness and raw numerical value.
@@ -7217,10 +10690,10 @@ index 40f560959..bd9af783c 100644
* a certain separator (' ' by default):
* C colon
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
-index 880fde13d..f080e33a4 100755
+index 2b812210b412..4c3a8cc6ef15 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
-@@ -6906,7 +6906,7 @@ sub process {
+@@ -6909,7 +6909,7 @@ sub process {
($extension eq "f" &&
defined $qualifier && $qualifier !~ /^w/) ||
($extension eq "4" &&
@@ -7230,4618 +10703,5 @@ index 880fde13d..f080e33a4 100755
last;
}
--
-2.42.0
-
-From f893444f7c842f97f3707897ba29f2c8dd77c8df Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Mon, 7 Aug 2023 20:29:27 +0300
-Subject: [PATCH 10/12] USB: core: add 'shutdown' callback to usb_driver
-
-This simplifies running code on shutdown for USB drivers.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/usb/core/driver.c | 14 ++++++++++++++
- drivers/usb/storage/uas.c | 5 ++---
- include/linux/usb.h | 3 +++
- 3 files changed, 19 insertions(+), 3 deletions(-)
+2.46.0.rc1
-diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
-index f58a0299f..dc0f86376 100644
---- a/drivers/usb/core/driver.c
-+++ b/drivers/usb/core/driver.c
-@@ -514,6 +514,19 @@ static int usb_unbind_interface(struct device *dev)
- return 0;
- }
-
-+static void usb_shutdown_interface(struct device *dev)
-+{
-+ struct usb_interface *intf = to_usb_interface(dev);
-+ struct usb_driver *driver;
-+
-+ if (!dev->driver)
-+ return;
-+
-+ driver = to_usb_driver(dev->driver);
-+ if (driver->shutdown)
-+ driver->shutdown(intf);
-+}
-+
- /**
- * usb_driver_claim_interface - bind a driver to an interface
- * @driver: the driver to be bound
-@@ -1053,6 +1066,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
- new_driver->driver.bus = &usb_bus_type;
- new_driver->driver.probe = usb_probe_interface;
- new_driver->driver.remove = usb_unbind_interface;
-+ new_driver->driver.shutdown = usb_shutdown_interface;
- new_driver->driver.owner = owner;
- new_driver->driver.mod_name = mod_name;
- new_driver->driver.dev_groups = new_driver->dev_groups;
-diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
-index 2583ee981..591fa0379 100644
---- a/drivers/usb/storage/uas.c
-+++ b/drivers/usb/storage/uas.c
-@@ -1221,9 +1221,8 @@ static void uas_disconnect(struct usb_interface *intf)
- * hang on reboot when the device is still in uas mode. Note the reset is
- * necessary as some devices won't revert to usb-storage mode without it.
- */
--static void uas_shutdown(struct device *dev)
-+static void uas_shutdown(struct usb_interface *intf)
- {
-- struct usb_interface *intf = to_usb_interface(dev);
- struct usb_device *udev = interface_to_usbdev(intf);
- struct Scsi_Host *shost = usb_get_intfdata(intf);
- struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
-@@ -1246,7 +1245,7 @@ static struct usb_driver uas_driver = {
- .suspend = uas_suspend,
- .resume = uas_resume,
- .reset_resume = uas_reset_resume,
-- .driver.shutdown = uas_shutdown,
-+ .shutdown = uas_shutdown,
- .id_table = uas_usb_ids,
- };
-
-diff --git a/include/linux/usb.h b/include/linux/usb.h
-index 25f8e62a3..5f3ae2186 100644
---- a/include/linux/usb.h
-+++ b/include/linux/usb.h
-@@ -1194,6 +1194,7 @@ struct usbdrv_wrap {
- * post_reset method is called.
- * @post_reset: Called by usb_reset_device() after the device
- * has been reset
-+ * @shutdown: Called at shut-down time to quiesce the device.
- * @id_table: USB drivers use ID table to support hotplugging.
- * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set
- * or your driver's probe function will never get called.
-@@ -1245,6 +1246,8 @@ struct usb_driver {
- int (*pre_reset)(struct usb_interface *intf);
- int (*post_reset)(struct usb_interface *intf);
-
-+ void (*shutdown)(struct usb_interface *intf);
-+
- const struct usb_device_id *id_table;
- const struct attribute_group **dev_groups;
-
---
-2.42.0
-
-From 337d6f6e34daaa786a0fb70d0dbd553288cd5ecd Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Fri, 4 Aug 2023 17:49:25 +0300
-Subject: [PATCH 11/12] drm/format-helper: add helper for BGR888 to XRGB8888
- conversion
-
-Add XRGB8888 emulation helper for devices that only support BGR888.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/gpu/drm/drm_format_helper.c | 53 ++++++++++++++
- .../gpu/drm/tests/drm_format_helper_test.c | 69 +++++++++++++++++++
- include/drm/drm_format_helper.h | 3 +
- 3 files changed, 125 insertions(+)
-
-diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c
-index b1be458ed4dda5..24836384554a47 100644
---- a/drivers/gpu/drm/drm_format_helper.c
-+++ b/drivers/gpu/drm/drm_format_helper.c
-@@ -702,6 +702,58 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi
- }
- EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888);
-
-+static void drm_fb_xrgb8888_to_bgr888_line(void *dbuf, const void *sbuf, unsigned int pixels)
-+{
-+ u8 *dbuf8 = dbuf;
-+ const __le32 *sbuf32 = sbuf;
-+ unsigned int x;
-+ u32 pix;
-+
-+ for (x = 0; x < pixels; x++) {
-+ pix = le32_to_cpu(sbuf32[x]);
-+ /* write red-green-blue to output in little endianness */
-+ *dbuf8++ = (pix & 0x00FF0000) >> 16;
-+ *dbuf8++ = (pix & 0x0000FF00) >> 8;
-+ *dbuf8++ = (pix & 0x000000FF) >> 0;
-+ }
-+}
-+
-+/**
-+ * drm_fb_xrgb8888_to_bgr888 - Convert XRGB8888 to BGR888 clip buffer
-+ * @dst: Array of BGR888 destination buffers
-+ * @dst_pitch: Array of numbers of bytes between the start of two consecutive scanlines
-+ * within @dst; can be NULL if scanlines are stored next to each other.
-+ * @src: Array of XRGB8888 source buffers
-+ * @fb: DRM framebuffer
-+ * @clip: Clip rectangle area to copy
-+ * @state: Transform and conversion state
-+ *
-+ * This function copies parts of a framebuffer to display memory and converts the
-+ * color format during the process. Destination and framebuffer formats must match. The
-+ * parameters @dst, @dst_pitch and @src refer to arrays. Each array must have at
-+ * least as many entries as there are planes in @fb's format. Each entry stores the
-+ * value for the format's respective color plane at the same index.
-+ *
-+ * This function does not apply clipping on @dst (i.e. the destination is at the
-+ * top-left corner).
-+ *
-+ * Drivers can use this function for BGR888 devices that don't natively
-+ * support XRGB8888.
-+ */
-+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
-+ const struct iosys_map *src, const struct drm_framebuffer *fb,
-+ const struct drm_rect *clip,
-+ struct drm_format_conv_state *state)
-+{
-+ static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
-+ 3,
-+ };
-+
-+ drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false,
-+ state, drm_fb_xrgb8888_to_bgr888_line);
-+}
-+EXPORT_SYMBOL(drm_fb_xrgb8888_to_bgr888);
-+
- static void drm_fb_xrgb8888_to_argb8888_line(void *dbuf, const void *sbuf, unsigned int pixels)
- {
- __le32 *dbuf32 = dbuf;
-@@ -1035,6 +1087,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
- } else if (dst_format == DRM_FORMAT_RGB888) {
- drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip, state);
- return 0;
-+ } else if (dst_format == DRM_FORMAT_BGR888) {
-+ drm_fb_xrgb8888_to_bgr888(dst, dst_pitch, src, fb, clip, state);
-+ return 0;
- } else if (dst_format == DRM_FORMAT_ARGB8888) {
- drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip, state);
- return 0;
-diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c
-index 474bb7a1c..dff7fabd9 100644
---- a/drivers/gpu/drm/tests/drm_format_helper_test.c
-+++ b/drivers/gpu/drm/tests/drm_format_helper_test.c
-@@ -52,6 +52,11 @@ struct convert_to_rgb888_result {
- const u8 expected[TEST_BUF_SIZE];
- };
-
-+struct convert_to_bgr888_result {
-+ unsigned int dst_pitch;
-+ const u8 expected[TEST_BUF_SIZE];
-+};
-+
- struct convert_to_argb8888_result {
- unsigned int dst_pitch;
- const u32 expected[TEST_BUF_SIZE];
-@@ -84,6 +89,7 @@ struct convert_xrgb8888_case {
- struct convert_to_argb1555_result argb1555_result;
- struct convert_to_rgba5551_result rgba5551_result;
- struct convert_to_rgb888_result rgb888_result;
-+ struct convert_to_bgr888_result bgr888_result;
- struct convert_to_argb8888_result argb8888_result;
- struct convert_to_xrgb2101010_result xrgb2101010_result;
- struct convert_to_argb2101010_result argb2101010_result;
-@@ -125,6 +131,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
- .dst_pitch = TEST_USE_DEFAULT_PITCH,
- .expected = { 0x00, 0x00, 0xFF },
- },
-+ .bgr888_result = {
-+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
-+ .expected = { 0xFF, 0x00, 0x00 },
-+ },
- .argb8888_result = {
- .dst_pitch = TEST_USE_DEFAULT_PITCH,
- .expected = { 0xFFFF0000 },
-@@ -179,6 +189,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
- .dst_pitch = TEST_USE_DEFAULT_PITCH,
- .expected = { 0x00, 0x00, 0xFF },
- },
-+ .bgr888_result = {
-+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
-+ .expected = { 0xFF, 0x00, 0x00 },
-+ },
- .argb8888_result = {
- .dst_pitch = TEST_USE_DEFAULT_PITCH,
- .expected = { 0xFFFF0000 },
-@@ -280,6 +294,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
- 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
- },
- },
-+ .bgr888_result = {
-+ .dst_pitch = TEST_USE_DEFAULT_PITCH,
-+ .expected = {
-+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ },
-+ },
- .argb8888_result = {
- .dst_pitch = TEST_USE_DEFAULT_PITCH,
- .expected = {
-@@ -391,6 +414,17 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- },
- },
-+ .bgr888_result = {
-+ .dst_pitch = 15,
-+ .expected = {
-+ 0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05, 0xA8, 0xF3, 0x03,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0xA8, 0x03, 0x03, 0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ },
- .argb8888_result = {
- .dst_pitch = 20,
- .expected = {
-diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h
-index 291deb094..7fc553318 100644
---- a/include/drm/drm_format_helper.h
-+++ b/include/drm/drm_format_helper.h
-@@ -42,6 +42,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_
- void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,
- const struct iosys_map *src, const struct drm_framebuffer *fb,
- const struct drm_rect *clip, struct drm_format_conv_state *state);
-+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
-+ const struct iosys_map *src, const struct drm_framebuffer *fb,
-+ const struct drm_rect *clip, struct drm_format_conv_state *state);
- void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,
- const struct iosys_map *src, const struct drm_framebuffer *fb,
- const struct drm_rect *clip, struct drm_format_conv_state *state);
---
-2.42.0
-
-From 1f0b6c21c4d56f5be74c4d7d0665525862e307c3 Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Sat, 6 May 2023 17:30:09 +0300
-Subject: [PATCH 12/12] drm/tiny: add driver for Apple Touch Bars in x86 Macs
-
-The Touch Bars found on x86 Macs support two USB configurations: one
-where the device presents itself as a HID keyboard and can display
-predefined sets of keys, and one where the operating system has full
-control over what is displayed. This commit adds support for the display
-functionality of the second configuration.
-
-Note that this driver has only been tested on T2 Macs, and only includes
-the USB device ID for these devices. Testing on T1 Macs would be
-appreciated.
-
-Credit goes to @imbushuo on GitHub for reverse engineering most of the
-protocol.
-
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
----
- drivers/gpu/drm/tiny/Kconfig | 12 +
- drivers/gpu/drm/tiny/Makefile | 1 +
- drivers/gpu/drm/tiny/appletbdrm.c | 624 ++++++++++++++++++++++++++++++
- 4 files changed, 643 insertions(+)
- create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c
-
-diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
-index f6889f649..559a97bce 100644
---- a/drivers/gpu/drm/tiny/Kconfig
-+++ b/drivers/gpu/drm/tiny/Kconfig
-@@ -1,5 +1,17 @@
- # SPDX-License-Identifier: GPL-2.0-only
-
-+config DRM_APPLETBDRM
-+ tristate "DRM support for Apple Touch Bars"
-+ depends on DRM && USB && MMU
-+ select DRM_KMS_HELPER
-+ select DRM_GEM_SHMEM_HELPER
-+ help
-+ Say Y here if you want support for the display of Touch Bars on x86
-+ MacBook Pros.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called appletbdrm.
-+
- config DRM_ARCPGU
- tristate "ARC PGU"
- depends on DRM && OF
-diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
-index 76dde89a0..9a1b412e7 100644
---- a/drivers/gpu/drm/tiny/Makefile
-+++ b/drivers/gpu/drm/tiny/Makefile
-@@ -1,5 +1,6 @@
- # SPDX-License-Identifier: GPL-2.0-only
-
-+obj-$(CONFIG_DRM_APPLETBDRM) += appletbdrm.o
- obj-$(CONFIG_DRM_ARCPGU) += arcpgu.o
- obj-$(CONFIG_DRM_BOCHS) += bochs.o
- obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus.o
-diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
-new file mode 100644
-index 000000000..33a99436b
---- /dev/null
-+++ b/drivers/gpu/drm/tiny/appletbdrm.c
-@@ -0,0 +1,624 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Apple Touch Bar DRM Driver
-+ *
-+ * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
-+ */
-+
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#include <asm/unaligned.h>
-+
-+#include <linux/usb.h>
-+#include <linux/module.h>
-+
-+#include <drm/drm_drv.h>
-+#include <drm/drm_fourcc.h>
-+#include <drm/drm_probe_helper.h>
-+#include <drm/drm_atomic_helper.h>
-+#include <drm/drm_damage_helper.h>
-+#include <drm/drm_format_helper.h>
-+#include <drm/drm_gem_shmem_helper.h>
-+#include <drm/drm_gem_atomic_helper.h>
-+#include <drm/drm_simple_kms_helper.h>
-+#include <drm/drm_gem_framebuffer_helper.h>
-+
-+#define _APPLETBDRM_FOURCC(s) (((s)[0] << 24) | ((s)[1] << 16) | ((s)[2] << 8) | (s)[3])
-+#define APPLETBDRM_FOURCC(s) _APPLETBDRM_FOURCC(#s)
-+
-+#define APPLETBDRM_PIXEL_FORMAT APPLETBDRM_FOURCC(RGBA) /* The actual format is BGR888 */
-+#define APPLETBDRM_BITS_PER_PIXEL 24
-+
-+#define APPLETBDRM_MSG_CLEAR_DISPLAY APPLETBDRM_FOURCC(CLRD)
-+#define APPLETBDRM_MSG_GET_INFORMATION APPLETBDRM_FOURCC(GINF)
-+#define APPLETBDRM_MSG_UPDATE_COMPLETE APPLETBDRM_FOURCC(UDCL)
-+#define APPLETBDRM_MSG_SIGNAL_READINESS APPLETBDRM_FOURCC(REDY)
-+
-+#define APPLETBDRM_BULK_MSG_TIMEOUT 1000
-+
-+#define drm_to_adev(_drm) container_of(_drm, struct appletbdrm_device, drm)
-+#define adev_to_udev(adev) interface_to_usbdev(to_usb_interface(adev->dev))
-+
-+struct appletbdrm_device {
-+ struct device *dev;
-+
-+ u8 in_ep;
-+ u8 out_ep;
-+
-+ u32 width;
-+ u32 height;
-+
-+ struct drm_device drm;
-+ struct drm_display_mode mode;
-+ struct drm_connector connector;
-+ struct drm_simple_display_pipe pipe;
-+
-+ bool readiness_signal_received;
-+};
-+
-+struct appletbdrm_request_header {
-+ __le16 unk_00;
-+ __le16 unk_02;
-+ __le32 unk_04;
-+ __le32 unk_08;
-+ __le32 size;
-+} __packed;
-+
-+struct appletbdrm_response_header {
-+ u8 unk_00[16];
-+ u32 msg;
-+} __packed;
-+
-+struct appletbdrm_simple_request {
-+ struct appletbdrm_request_header header;
-+ u32 msg;
-+ u8 unk_14[8];
-+ __le32 size;
-+} __packed;
-+
-+struct appletbdrm_information {
-+ struct appletbdrm_response_header header;
-+ u8 unk_14[12];
-+ __le32 width;
-+ __le32 height;
-+ u8 bits_per_pixel;
-+ __le32 bytes_per_row;
-+ __le32 orientation;
-+ __le32 bitmap_info;
-+ u32 pixel_format;
-+ __le32 width_inches; /* floating point */
-+ __le32 height_inches; /* floating point */
-+} __packed;
-+
-+struct appletbdrm_frame {
-+ __le16 begin_x;
-+ __le16 begin_y;
-+ __le16 width;
-+ __le16 height;
-+ __le32 buf_size;
-+ u8 buf[];
-+} __packed;
-+
-+struct appletbdrm_fb_request_footer {
-+ u8 unk_00[12];
-+ __le32 unk_0c;
-+ u8 unk_10[12];
-+ __le32 unk_1c;
-+ __le64 timestamp;
-+ u8 unk_28[12];
-+ __le32 unk_34;
-+ u8 unk_38[20];
-+ __le32 unk_4c;
-+} __packed;
-+
-+struct appletbdrm_fb_request {
-+ struct appletbdrm_request_header header;
-+ __le16 unk_10;
-+ u8 msg_id;
-+ u8 unk_13[29];
-+ /*
-+ * Contents of `data`:
-+ * - struct appletbdrm_frame frames[];
-+ * - struct appletbdrm_fb_request_footer footer;
-+ * - padding to make the total size a multiple of 16
-+ */
-+ u8 data[];
-+} __packed;
-+
-+struct appletbdrm_fb_request_response {
-+ struct appletbdrm_response_header header;
-+ u8 unk_14[12];
-+ __le64 timestamp;
-+} __packed;
-+
-+static int appletbdrm_send_request(struct appletbdrm_device *adev,
-+ struct appletbdrm_request_header *request, size_t size)
-+{
-+ struct usb_device *udev = adev_to_udev(adev);
-+ struct drm_device *drm = &adev->drm;
-+ int ret, actual_size;
-+
-+ ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
-+ request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
-+ if (ret) {
-+ drm_err(drm, "Failed to send message (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ if (actual_size != size) {
-+ drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
-+ actual_size, size);
-+ return -EIO;
-+ }
-+
-+ return ret;
-+}
-+
-+static int appletbdrm_read_response(struct appletbdrm_device *adev,
-+ struct appletbdrm_response_header *response,
-+ size_t size, u32 expected_response)
-+{
-+ struct usb_device *udev = adev_to_udev(adev);
-+ struct drm_device *drm = &adev->drm;
-+ int ret, actual_size;
-+
-+retry:
-+ ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
-+ response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
-+ if (ret) {
-+ drm_err(drm, "Failed to read response (%pe)\n", ERR_PTR(ret));
-+ return ret;
-+ }
-+
-+ /*
-+ * The device responds to the first request sent in a particular
-+ * timeframe after the USB device configuration is set with a readiness
-+ * signal, in which case the response should be read again
-+ */
-+ if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
-+ if (!adev->readiness_signal_received) {
-+ adev->readiness_signal_received = true;
-+ goto retry;
-+ }
-+
-+ drm_err(drm, "Encountered unexpected readiness signal\n");
-+ return -EIO;
-+ }
-+
-+ if (actual_size != size) {
-+ drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
-+ actual_size, size);
-+ return -EIO;
-+ }
-+
-+ if (response->msg != expected_response) {
-+ drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
-+ &expected_response, &response->msg);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
-+{
-+ struct appletbdrm_simple_request *request;
-+ int ret;
-+
-+ request = kzalloc(sizeof(*request), GFP_KERNEL);
-+ if (!request)
-+ return -ENOMEM;
-+
-+ request->header.unk_00 = cpu_to_le16(2);
-+ request->header.unk_02 = cpu_to_le16(0x1512);
-+ request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
-+ request->msg = msg;
-+ request->size = request->header.size;
-+
-+ ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
-+
-+ kfree(request);
-+
-+ return ret;
-+}
-+
-+static int appletbdrm_clear_display(struct appletbdrm_device *adev)
-+{
-+ return appletbdrm_send_msg(adev, APPLETBDRM_MSG_CLEAR_DISPLAY);
-+}
-+
-+static int appletbdrm_signal_readiness(struct appletbdrm_device *adev)
-+{
-+ return appletbdrm_send_msg(adev, APPLETBDRM_MSG_SIGNAL_READINESS);
-+}
-+
-+static int appletbdrm_get_information(struct appletbdrm_device *adev)
-+{
-+ struct appletbdrm_information *info;
-+ struct drm_device *drm = &adev->drm;
-+ u8 bits_per_pixel;
-+ u32 pixel_format;
-+ int ret;
-+
-+ info = kzalloc(sizeof(*info), GFP_KERNEL);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ ret = appletbdrm_send_msg(adev, APPLETBDRM_MSG_GET_INFORMATION);
-+ if (ret)
-+ return ret;
-+
-+ ret = appletbdrm_read_response(adev, &info->header, sizeof(*info),
-+ APPLETBDRM_MSG_GET_INFORMATION);
-+ if (ret)
-+ goto free_info;
-+
-+ bits_per_pixel = info->bits_per_pixel;
-+ pixel_format = get_unaligned(&info->pixel_format);
-+
-+ adev->width = get_unaligned_le32(&info->width);
-+ adev->height = get_unaligned_le32(&info->height);
-+
-+ if (bits_per_pixel != APPLETBDRM_BITS_PER_PIXEL) {
-+ drm_err(drm, "Encountered unexpected bits per pixel value (%d)\n", bits_per_pixel);
-+ ret = -EINVAL;
-+ goto free_info;
-+ }
-+
-+ if (pixel_format != APPLETBDRM_PIXEL_FORMAT) {
-+ drm_err(drm, "Encountered unknown pixel format (%p4ch)\n", &pixel_format);
-+ ret = -EINVAL;
-+ goto free_info;
-+ }
-+
-+free_info:
-+ kfree(info);
-+
-+ return ret;
-+}
-+
-+static u32 rect_size(struct drm_rect *rect)
-+{
-+ return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
-+}
-+
-+static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
-+ struct drm_plane_state *old_state,
-+ struct drm_plane_state *state)
-+{
-+ struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
-+ struct appletbdrm_fb_request_response *response;
-+ struct appletbdrm_fb_request_footer *footer;
-+ struct drm_atomic_helper_damage_iter iter;
-+ struct drm_framebuffer *fb = state->fb;
-+ struct appletbdrm_fb_request *request;
-+ struct drm_device *drm = &adev->drm;
-+ struct appletbdrm_frame *frame;
-+ u64 timestamp = ktime_get_ns();
-+ struct drm_rect damage;
-+ size_t frames_size = 0;
-+ size_t request_size;
-+ int ret;
-+
-+ drm_atomic_helper_damage_iter_init(&iter, old_state, state);
-+ drm_atomic_for_each_plane_damage(&iter, &damage) {
-+ frames_size += struct_size(frame, buf, rect_size(&damage));
-+ }
-+
-+ if (!frames_size)
-+ return 0;
-+
-+ request_size = ALIGN(sizeof(*request) + frames_size + sizeof(*footer), 16);
-+
-+ request = kzalloc(request_size, GFP_KERNEL);
-+ if (!request)
-+ return -ENOMEM;
-+
-+ response = kzalloc(sizeof(*response), GFP_KERNEL);
-+ if (!response) {
-+ ret = -ENOMEM;
-+ goto free_request;
-+ }
-+
-+ ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
-+ if (ret) {
-+ drm_err(drm, "Failed to start CPU framebuffer access (%pe)\n", ERR_PTR(ret));
-+ goto free_response;
-+ }
-+
-+ request->header.unk_00 = cpu_to_le16(2);
-+ request->header.unk_02 = cpu_to_le16(0x12);
-+ request->header.unk_04 = cpu_to_le32(9);
-+ request->header.size = cpu_to_le32(request_size - sizeof(request->header));
-+ request->unk_10 = cpu_to_le16(1);
-+ request->msg_id = timestamp & 0xff;
-+
-+ frame = (struct appletbdrm_frame *)request->data;
-+
-+ drm_atomic_helper_damage_iter_init(&iter, old_state, state);
-+ drm_atomic_for_each_plane_damage(&iter, &damage) {
-+ struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
-+ u32 buf_size = rect_size(&damage);
-+
-+ /*
-+ * The coordinates need to be translated to the coordinate
-+ * system the device expects, see the comment in
-+ * appletbdrm_setup_mode_config
-+ */
-+ frame->begin_x = cpu_to_le16(damage.y1);
-+ frame->begin_y = cpu_to_le16(adev->height - damage.x2);
-+ frame->width = cpu_to_le16(drm_rect_height(&damage));
-+ frame->height = cpu_to_le16(drm_rect_width(&damage));
-+ frame->buf_size = cpu_to_le32(buf_size);
-+
-+ ret = drm_fb_blit(&dst, NULL, DRM_FORMAT_BGR888,
-+ &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
-+ if (ret) {
-+ drm_err(drm, "Failed to copy damage clip (%pe)\n", ERR_PTR(ret));
-+ goto end_fb_cpu_access;
-+ }
-+
-+ frame = (void *)frame + struct_size(frame, buf, buf_size);
-+ }
-+
-+ footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
-+
-+ footer->unk_0c = cpu_to_le32(0xfffe);
-+ footer->unk_1c = cpu_to_le32(0x80001);
-+ footer->unk_34 = cpu_to_le32(0x80002);
-+ footer->unk_4c = cpu_to_le32(0xffff);
-+ footer->timestamp = cpu_to_le64(timestamp);
-+
-+ ret = appletbdrm_send_request(adev, &request->header, request_size);
-+ if (ret)
-+ goto end_fb_cpu_access;
-+
-+ ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
-+ APPLETBDRM_MSG_UPDATE_COMPLETE);
-+ if (ret)
-+ goto end_fb_cpu_access;
-+
-+ if (response->timestamp != footer->timestamp) {
-+ drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
-+ le64_to_cpu(response->timestamp), timestamp);
-+ goto end_fb_cpu_access;
-+ }
-+
-+end_fb_cpu_access:
-+ drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
-+free_response:
-+ kfree(response);
-+free_request:
-+ kfree(request);
-+
-+ return ret;
-+}
-+
-+static int appletbdrm_connector_helper_get_modes(struct drm_connector *connector)
-+{
-+ struct appletbdrm_device *adev = drm_to_adev(connector->dev);
-+
-+ return drm_connector_helper_get_modes_fixed(connector, &adev->mode);
-+}
-+
-+static enum drm_mode_status appletbdrm_pipe_mode_valid(struct drm_simple_display_pipe *pipe,
-+ const struct drm_display_mode *mode)
-+{
-+ struct drm_crtc *crtc = &pipe->crtc;
-+ struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
-+
-+ return drm_crtc_helper_mode_valid_fixed(crtc, mode, &adev->mode);
-+}
-+
-+static void appletbdrm_pipe_disable(struct drm_simple_display_pipe *pipe)
-+{
-+ struct appletbdrm_device *adev = drm_to_adev(pipe->crtc.dev);
-+ int idx;
-+
-+ if (!drm_dev_enter(&adev->drm, &idx))
-+ return;
-+
-+ appletbdrm_clear_display(adev);
-+
-+ drm_dev_exit(idx);
-+}
-+
-+static void appletbdrm_pipe_update(struct drm_simple_display_pipe *pipe,
-+ struct drm_plane_state *old_state)
-+{
-+ struct drm_crtc *crtc = &pipe->crtc;
-+ struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
-+ int idx;
-+
-+ if (!crtc->state->active || !drm_dev_enter(&adev->drm, &idx))
-+ return;
-+
-+ appletbdrm_flush_damage(adev, old_state, pipe->plane.state);
-+
-+ drm_dev_exit(idx);
-+}
-+
-+static const u32 appletbdrm_formats[] = {
-+ DRM_FORMAT_BGR888,
-+ DRM_FORMAT_XRGB8888, /* emulated */
-+};
-+
-+static const struct drm_mode_config_funcs appletbdrm_mode_config_funcs = {
-+ .fb_create = drm_gem_fb_create_with_dirty,
-+ .atomic_check = drm_atomic_helper_check,
-+ .atomic_commit = drm_atomic_helper_commit,
-+};
-+
-+static const struct drm_connector_funcs appletbdrm_connector_funcs = {
-+ .reset = drm_atomic_helper_connector_reset,
-+ .destroy = drm_connector_cleanup,
-+ .fill_modes = drm_helper_probe_single_connector_modes,
-+ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
-+ .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
-+};
-+
-+static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs = {
-+ .get_modes = appletbdrm_connector_helper_get_modes,
-+};
-+
-+static const struct drm_simple_display_pipe_funcs appletbdrm_pipe_funcs = {
-+ DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS,
-+ .update = appletbdrm_pipe_update,
-+ .disable = appletbdrm_pipe_disable,
-+ .mode_valid = appletbdrm_pipe_mode_valid,
-+};
-+
-+DEFINE_DRM_GEM_FOPS(appletbdrm_drm_fops);
-+
-+static const struct drm_driver appletbdrm_drm_driver = {
-+ DRM_GEM_SHMEM_DRIVER_OPS,
-+ .name = "appletbdrm",
-+ .desc = "Apple Touch Bar DRM Driver",
-+ .date = "20230910",
-+ .major = 1,
-+ .minor = 0,
-+ .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
-+ .fops = &appletbdrm_drm_fops,
-+};
-+
-+static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
-+{
-+ struct drm_connector *connector = &adev->connector;
-+ struct drm_device *drm = &adev->drm;
-+ struct device *dev = adev->dev;
-+ int ret;
-+
-+ ret = drmm_mode_config_init(drm);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");
-+
-+ /*
-+ * The coordinate system used by the device is different from the
-+ * coordinate system of the framebuffer in that the x and y axes are
-+ * swapped, and that the y axis is inverted; so what the device reports
-+ * as the height is actually the width of the framebuffer and vice
-+ * versa
-+ */
-+ drm->mode_config.min_width = 0;
-+ drm->mode_config.min_height = 0;
-+ drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
-+ drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
-+ drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
-+ drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
-+
-+ adev->mode = (struct drm_display_mode) {
-+ DRM_MODE_INIT(60, adev->height, adev->width,
-+ DRM_MODE_RES_MM(adev->height, 218),
-+ DRM_MODE_RES_MM(adev->width, 218))
-+ };
-+
-+ ret = drm_connector_init(drm, connector,
-+ &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to initialize connector\n");
-+
-+ drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
-+
-+ ret = drm_connector_set_panel_orientation(connector,
-+ DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
-+
-+ connector->display_info.non_desktop = true;
-+ ret = drm_object_property_set_value(&connector->base,
-+ drm->mode_config.non_desktop_property, true);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
-+
-+ ret = drm_simple_display_pipe_init(drm, &adev->pipe, &appletbdrm_pipe_funcs,
-+ appletbdrm_formats, ARRAY_SIZE(appletbdrm_formats),
-+ NULL, &adev->connector);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
-+
-+ drm_plane_enable_fb_damage_clips(&adev->pipe.plane);
-+
-+ drm_mode_config_reset(drm);
-+
-+ ret = drm_dev_register(drm, 0);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to register DRM device\n");
-+
-+ return 0;
-+}
-+
-+static int appletbdrm_probe(struct usb_interface *intf,
-+ const struct usb_device_id *id)
-+{
-+ struct usb_endpoint_descriptor *bulk_in, *bulk_out;
-+ struct device *dev = &intf->dev;
-+ struct appletbdrm_device *adev;
-+ int ret;
-+
-+ ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, &bulk_out, NULL, NULL);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
-+
-+ adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct appletbdrm_device, drm);
-+ if (IS_ERR(adev))
-+ return PTR_ERR(adev);
-+
-+ adev->dev = dev;
-+ adev->in_ep = bulk_in->bEndpointAddress;
-+ adev->out_ep = bulk_out->bEndpointAddress;
-+
-+ usb_set_intfdata(intf, adev);
-+
-+ ret = appletbdrm_get_information(adev);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to get display information\n");
-+
-+ ret = appletbdrm_signal_readiness(adev);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to signal readiness\n");
-+
-+ ret = appletbdrm_clear_display(adev);
-+ if (ret)
-+ return dev_err_probe(dev, ret, "Failed to clear display\n");
-+
-+ return appletbdrm_setup_mode_config(adev);
-+}
-+
-+static void appletbdrm_disconnect(struct usb_interface *intf)
-+{
-+ struct appletbdrm_device *adev = usb_get_intfdata(intf);
-+ struct drm_device *drm = &adev->drm;
-+
-+ drm_dev_unplug(drm);
-+ drm_atomic_helper_shutdown(drm);
-+}
-+
-+static void appletbdrm_shutdown(struct usb_interface *intf)
-+{
-+ struct appletbdrm_device *adev = usb_get_intfdata(intf);
-+
-+ /*
-+ * The framebuffer needs to be cleared on shutdown since its content
-+ * persists across boots
-+ */
-+ drm_atomic_helper_shutdown(&adev->drm);
-+}
-+
-+static const struct usb_device_id appletbdrm_usb_id_table[] = {
-+ { USB_DEVICE_INTERFACE_CLASS(0x05ac, 0x8302, USB_CLASS_AUDIO_VIDEO) },
-+ {}
-+};
-+MODULE_DEVICE_TABLE(usb, appletbdrm_usb_id_table);
-+
-+static struct usb_driver appletbdrm_usb_driver = {
-+ .name = "appletbdrm",
-+ .probe = appletbdrm_probe,
-+ .disconnect = appletbdrm_disconnect,
-+ .shutdown = appletbdrm_shutdown,
-+ .id_table = appletbdrm_usb_id_table,
-+};
-+module_usb_driver(appletbdrm_usb_driver);
-+
-+MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
-+MODULE_DESCRIPTION("Apple Touch Bar DRM Driver");
-+MODULE_LICENSE("GPL");
---
-2.42.0
-
-From e34c6d09241ba826a6e9b2b0e50e306b273b7bda Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Thu, 16 Feb 2023 12:32:34 +1100
-Subject: [PATCH 5/8] Documentation: leds: standardise keyboard backlight led
- names
-
-Advice use of either "input*:*:kbd_backlight" or ":*:kbd_backlight". We
-don't want people using vendor or product name (e.g. "smc", "apple",
-"asus") as this information is available from sysfs anyway, and it made the
-folder names inconsistent.
-
-Signed-off-by: Orlando Chamberlain <orlandoch.dev@gmail.com>
----
- Documentation/leds/well-known-leds.txt | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/Documentation/leds/well-known-leds.txt b/Documentation/leds/well-known-leds.txt
-index 2160382c86be..4e5429fce4d8 100644
---- a/Documentation/leds/well-known-leds.txt
-+++ b/Documentation/leds/well-known-leds.txt
-@@ -44,6 +44,14 @@ Legacy: "lp5523:kb{1,2,3,4,5,6}" (Nokia N900)
-
- Frontlight/backlight of main keyboard.
-
-+Good: ":*:kbd_backlight"
-+Good: "input*:*:kbd_backlight"
-+Legacy: "*:*:kbd_backlight"
-+
-+Many drivers have the vendor or product name as the first field of the led name,
-+this makes names inconsistent and is redundant as that information is already in
-+sysfs.
-+
- Legacy: "button-backlight" (Motorola Droid 4)
-
- Some phones have touch buttons below screen; it is different from main
---
-2.39.1
-
-From c124f5401040d02abd6d349979be29acd1e88545 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Fri, 10 Feb 2023 23:14:31 +1100
-Subject: [PATCH 6/8] HID: hid-apple-magic-backlight: Add driver for keyboard
- backlight on internal Magic Keyboards
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This driver adds support for the keyboard backlight on Intel T2 Macs
-with internal Magic Keyboards (MacBookPro16,x and MacBookAir9,1)
-
-Co-developed-by: Kerem Karabay <kekrby@gmail.com>
-Signed-off-by: Kerem Karabay <kekrby@gmail.com>
-Signed-off-by: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
-Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
----
- drivers/hid/Kconfig | 13 +++
- drivers/hid/Makefile | 1 +
- drivers/hid/hid-apple-magic-backlight.c | 120 ++++++++++++++++++++++++
- 4 files changed, 140 insertions(+)
- create mode 100644 drivers/hid/hid-apple-magic-backlight.c
-
-diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 4e238df87..83fbab6d4 100644
---- a/drivers/hid/Kconfig
-+++ b/drivers/hid/Kconfig
-@@ -169,6 +169,19 @@ config HID_APPLETB_KBD
- To compile this driver as a module, choose M here: the
- module will be called hid-appletb-kbd.
-
-+config HID_APPLE_MAGIC_BACKLIGHT
-+ tristate "Apple Magic Keyboard Backlight"
-+ depends on USB_HID
-+ depends on LEDS_CLASS
-+ depends on NEW_LEDS
-+ help
-+ Say Y here if you want support for the keyboard backlight on Macs with
-+ the magic keyboard (MacBookPro16,x and MacBookAir9,1). Note that this
-+ driver is not for external magic keyboards.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called hid-apple-magic-backlight.
-+
- config HID_ASUS
- tristate "Asus"
- depends on USB_HID
-diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index 5b60015fd..581f5e720 100644
---- a/drivers/hid/Makefile
-+++ b/drivers/hid/Makefile
-@@ -31,6 +31,7 @@ obj-$(CONFIG_HID_APPLE) += hid-apple.o
- obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o
- obj-$(CONFIG_HID_APPLETB_BL) += hid-appletb-bl.o
- obj-$(CONFIG_HID_APPLETB_KBD) += hid-appletb-kbd.o
-+obj-$(CONFIG_HID_APPLE_MAGIC_BACKLIGHT) += hid-apple-magic-backlight.o
- obj-$(CONFIG_HID_CREATIVE_SB0540) += hid-creative-sb0540.o
- obj-$(CONFIG_HID_ASUS) += hid-asus.o
- obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
-diff --git a/drivers/hid/hid-apple-magic-backlight.c b/drivers/hid/hid-apple-magic-backlight.c
-new file mode 100644
-index 000000000..f0fc02ff3
---- /dev/null
-+++ b/drivers/hid/hid-apple-magic-backlight.c
-@@ -0,0 +1,120 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Apple Magic Keyboard Backlight Driver
-+ *
-+ * For Intel Macs with internal Magic Keyboard (MacBookPro16,1-4 and MacBookAir9,1)
-+ *
-+ * Copyright (c) 2022 Kerem Karabay <kekrby@gmail.com>
-+ * Copyright (c) 2023 Orlando Chamberlain <orlandoch.dev@gmail.com>
-+ */
-+
-+#include <linux/hid.h>
-+#include <linux/leds.h>
-+#include <linux/device.h>
-+#include <linux/errno.h>
-+#include <dt-bindings/leds/common.h>
-+
-+#include "hid-ids.h"
-+
-+#define HID_USAGE_MAGIC_BL 0xff00000f
-+
-+#define APPLE_MAGIC_REPORT_ID_POWER 3
-+#define APPLE_MAGIC_REPORT_ID_BRIGHTNESS 1
-+
-+struct apple_magic_backlight {
-+ struct led_classdev cdev;
-+ struct hid_report *brightness;
-+ struct hid_report *power;
-+};
-+
-+static void apple_magic_backlight_report_set(struct hid_report *rep, s32 value, u8 rate)
-+{
-+ rep->field[0]->value[0] = value;
-+ rep->field[1]->value[0] = 0x5e; /* Mimic Windows */
-+ rep->field[1]->value[0] |= rate << 8;
-+
-+ hid_hw_request(rep->device, rep, HID_REQ_SET_REPORT);
-+}
-+
-+static void apple_magic_backlight_set(struct apple_magic_backlight *backlight,
-+ int brightness, char rate)
-+{
-+ apple_magic_backlight_report_set(backlight->power, brightness ? 1 : 0, rate);
-+ if (brightness)
-+ apple_magic_backlight_report_set(backlight->brightness, brightness, rate);
-+}
-+
-+static int apple_magic_backlight_led_set(struct led_classdev *led_cdev,
-+ enum led_brightness brightness)
-+{
-+ struct apple_magic_backlight *backlight = container_of(led_cdev,
-+ struct apple_magic_backlight, cdev);
-+
-+ apple_magic_backlight_set(backlight, brightness, 1);
-+ return 0;
-+}
-+
-+static int apple_magic_backlight_probe(struct hid_device *hdev,
-+ const struct hid_device_id *id)
-+{
-+ struct apple_magic_backlight *backlight;
-+ int rc;
-+
-+ rc = hid_parse(hdev);
-+ if (rc)
-+ return rc;
-+
-+ /*
-+ * Ensure this usb endpoint is for the keyboard backlight, not touchbar
-+ * backlight.
-+ */
-+ if (hdev->collection[0].usage != HID_USAGE_MAGIC_BL)
-+ return -ENODEV;
-+
-+ backlight = devm_kzalloc(&hdev->dev, sizeof(*backlight), GFP_KERNEL);
-+ if (!backlight)
-+ return -ENOMEM;
-+
-+ rc = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
-+ if (rc)
-+ return rc;
-+
-+ backlight->brightness = hid_register_report(hdev, HID_FEATURE_REPORT,
-+ APPLE_MAGIC_REPORT_ID_BRIGHTNESS, 0);
-+ backlight->power = hid_register_report(hdev, HID_FEATURE_REPORT,
-+ APPLE_MAGIC_REPORT_ID_POWER, 0);
-+
-+ if (!backlight->brightness || !backlight->power) {
-+ rc = -ENODEV;
-+ goto hw_stop;
-+ }
-+
-+ backlight->cdev.name = ":white:" LED_FUNCTION_KBD_BACKLIGHT;
-+ backlight->cdev.max_brightness = backlight->brightness->field[0]->logical_maximum;
-+ backlight->cdev.brightness_set_blocking = apple_magic_backlight_led_set;
-+
-+ apple_magic_backlight_set(backlight, 0, 0);
-+
-+ return devm_led_classdev_register(&hdev->dev, &backlight->cdev);
-+
-+hw_stop:
-+ hid_hw_stop(hdev);
-+ return rc;
-+}
-+
-+static const struct hid_device_id apple_magic_backlight_hid_ids[] = {
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(hid, apple_magic_backlight_hid_ids);
-+
-+static struct hid_driver apple_magic_backlight_hid_driver = {
-+ .name = "hid-apple-magic-backlight",
-+ .id_table = apple_magic_backlight_hid_ids,
-+ .probe = apple_magic_backlight_probe,
-+};
-+module_hid_driver(apple_magic_backlight_hid_driver);
-+
-+MODULE_DESCRIPTION("MacBook Magic Keyboard Backlight");
-+MODULE_AUTHOR("Orlando Chamberlain <orlandoch.dev@gmail.com>");
-+MODULE_LICENSE("GPL");
---
-2.39.2
-
-From 12c7a3306a631a651464ef56318a218dc4cdb157 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Sat, 18 Feb 2023 23:05:05 +1100
-Subject: [PATCH 8/9] i915: 4 lane quirk for mbp15,1
-
-Needed to use iGPU when dGPU was boot GPU
-
-Patch written by Kerem Karabay <kekrby@gmail.com>
----
- drivers/gpu/drm/i915/display/intel_ddi.c | 3 +++
- drivers/gpu/drm/i915/display/intel_quirks.c | 15 +++++++++++++++
- drivers/gpu/drm/i915/display/intel_quirks.h | 1 +
- 3 files changed, 19 insertions(+)
-
-diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
-index 0f1ec2a98cc8..1ec67390f623 100644
---- a/drivers/gpu/drm/i915/display/intel_ddi.c
-+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
-@@ -4097,6 +4097,9 @@ static bool intel_ddi_a_force_4_lanes(struct intel_digital_port *dig_port)
- if (dig_port->saved_port_bits & DDI_A_4_LANES)
- return false;
-
-+ if (intel_has_quirk(dev_priv, QUIRK_DDI_A_FORCE_4_LANES))
-+ return true;
-+
- /* Broxton/Geminilake: Bspec says that DDI_A_4_LANES is the only
- * supported configuration
- */
-diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c
-index 6e48d3bcdfec..a8c55e165b46 100644
---- a/drivers/gpu/drm/i915/display/intel_quirks.c
-+++ b/drivers/gpu/drm/i915/display/intel_quirks.c
-@@ -59,6 +59,18 @@ static void quirk_increase_ddi_disabled_time(struct drm_i915_private *i915)
- drm_info(&i915->drm, "Applying Increase DDI Disabled quirk\n");
- }
-
-+/*
-+ * In some cases, the firmware might not set the lane count to 4 (for example,
-+ * when booting in some dual GPU Macs with the dGPU as the default GPU), this
-+ * quirk is used to force it as otherwise it might not be possible to compute a
-+ * valid link configuration.
-+ */
-+static void quirk_ddi_a_force_4_lanes(struct drm_i915_private *i915)
-+{
-+ intel_set_quirk(i915, QUIRK_DDI_A_FORCE_4_LANES);
-+ drm_info(&i915->drm, "Applying DDI A Forced 4 Lanes quirk\n");
-+}
-+
- static void quirk_no_pps_backlight_power_hook(struct drm_i915_private *i915)
- {
- intel_set_quirk(i915, QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK);
-@@ -199,6 +211,9 @@ static struct intel_quirk intel_quirks[] = {
- { 0x3184, 0x1019, 0xa94d, quirk_increase_ddi_disabled_time },
- /* HP Notebook - 14-r206nv */
- { 0x0f31, 0x103c, 0x220f, quirk_invert_brightness },
-+
-+ /* Apple MacBookPro15,1 */
-+ { 0x3e9b, 0x106b, 0x0176, quirk_ddi_a_force_4_lanes },
- };
-
- void intel_init_quirks(struct drm_i915_private *i915)
-diff --git a/drivers/gpu/drm/i915/display/intel_quirks.h b/drivers/gpu/drm/i915/display/intel_quirks.h
-index 10a4d163149f..78aacf1f6f5c 100644
---- a/drivers/gpu/drm/i915/display/intel_quirks.h
-+++ b/drivers/gpu/drm/i915/display/intel_quirks.h
-@@ -17,6 +17,7 @@ enum intel_quirk_id {
- QUIRK_INVERT_BRIGHTNESS,
- QUIRK_LVDS_SSC_DISABLE,
- QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK,
-+ QUIRK_DDI_A_FORCE_4_LANES,
- };
-
- void intel_init_quirks(struct drm_i915_private *i915);
---
-2.39.1
-
-From bd8e785c74e22978648ced004552eb9c137f1eb6 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Fri, 10 Feb 2023 22:45:00 +1100
-Subject: [PATCH 9/9] apple-gmux: allow switching to igpu at probe
-
-This means user don't need to set the gpu-power-prefs efivar to use the
-igpu while runtime switching isn't working, so macOS will be unaffected.
-
-This isn't really upstreamable, what we want upstream is the ability to
-switch at runtime (so both gpus need to be able to probe the eDP panel).
-
-Based off of work by Kerem Karabay <kekrby@gmail.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 +++
- drivers/gpu/vga/vga_switcheroo.c | 7 +------
- drivers/pci/vgaarb.c | 1 +
- drivers/platform/x86/apple-gmux.c | 18 ++++++++++++++++++
- 4 files changed, 23 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-index 81edf66dbea8..8f3daf28665b 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-@@ -2051,6 +2051,9 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
- int ret, retry = 0, i;
- bool supports_atomic = false;
-
-+ if (vga_switcheroo_client_probe_defer(pdev))
-+ return -EPROBE_DEFER;
-+
- /* skip devices which are owned by radeon */
- for (i = 0; i < ARRAY_SIZE(amdgpu_unsupported_pciidlist); i++) {
- if (amdgpu_unsupported_pciidlist[i] == pdev->device)
-diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
-index 365e6ddbe90f..cf357cd3389d 100644
---- a/drivers/gpu/vga/vga_switcheroo.c
-+++ b/drivers/gpu/vga/vga_switcheroo.c
-@@ -438,12 +438,7 @@ find_active_client(struct list_head *head)
- bool vga_switcheroo_client_probe_defer(struct pci_dev *pdev)
- {
- if ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
-- /*
-- * apple-gmux is needed on pre-retina MacBook Pro
-- * to probe the panel if pdev is the inactive GPU.
-- */
-- if (apple_gmux_present() && pdev != vga_default_device() &&
-- !vgasr_priv.handler_flags)
-+ if (apple_gmux_present() && !vgasr_priv.handler_flags)
- return true;
- }
-
-diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c
-index 5e6b1eb54c64..1f11701d37d1 100644
---- a/drivers/pci/vgaarb.c
-+++ b/drivers/pci/vgaarb.c
-@@ -143,6 +143,7 @@ void vga_set_default_device(struct pci_dev *pdev)
- pci_dev_put(vga_default);
- vga_default = pci_dev_get(pdev);
- }
-+EXPORT_SYMBOL_GPL(vga_set_default_device);
-
- /**
- * vga_remove_vgacon - deactivate VGA console
-diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
-index 1417e230edbd..e69785af8e1d 100644
---- a/drivers/platform/x86/apple-gmux.c
-+++ b/drivers/platform/x86/apple-gmux.c
-@@ -21,6 +21,7 @@
- #include <linux/delay.h>
- #include <linux/pci.h>
- #include <linux/vga_switcheroo.h>
-+#include <linux/vgaarb.h>
- #include <linux/debugfs.h>
- #include <acpi/video.h>
- #include <asm/io.h>
-@@ -107,6 +108,10 @@ struct apple_gmux_config {
-
- # define MMIO_GMUX_MAX_BRIGHTNESS 0xffff
-
-+static bool force_igd;
-+module_param(force_igd, bool, 0);
-+MODULE_PARM_DESC(force_idg, "Switch gpu to igd on module load. Make sure that you have apple-set-os set up and the iGPU is in `lspci -s 00:02.0`. (default: false) (bool)");
-+
- static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port)
- {
- return inb(gmux_data->iostart + port);
-@@ -945,6 +950,19 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
- gmux_enable_interrupts(gmux_data);
- gmux_read_switch_state(gmux_data);
-
-+ if (force_igd) {
-+ struct pci_dev *pdev;
-+
-+ pdev = pci_get_domain_bus_and_slot(0, 0, PCI_DEVFN(2, 0));
-+ if (pdev) {
-+ pr_info("Switching to IGD");
-+ gmux_switchto(VGA_SWITCHEROO_IGD);
-+ vga_set_default_device(pdev);
-+ } else {
-+ pr_err("force_idg is true, but couldn't find iGPU at 00:02.0! Is apple-set-os working?");
-+ }
-+ }
-+
- /*
- * Retina MacBook Pros cannot switch the panel's AUX separately
- * and need eDP pre-calibration. They are distinguishable from
---
-2.43.0
-
-From 6adb501c697cd0e3246e75237ee8e43eb5a92cc3 Mon Sep 17 00:00:00 2001
-From: Kerem Karabay <kekrby@gmail.com>
-Date: Thu, 23 Nov 2023 18:58:51 +0530
-Subject: [PATCH] efi: libstub: add support for the apple_set_os protocol
-
-On dual GPU EFI Macs, the EFI stub needs to report that it is booting
-macOS in order to prevent the firmware from disabling the iGPU.
-
-See also this patch for GRUB by Andreas Heider <andreas@heider.io>:
-https://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html
----
- .../admin-guide/kernel-parameters.txt | 2 ++
- .../firmware/efi/libstub/efi-stub-helper.c | 3 +++
- drivers/firmware/efi/libstub/efistub.h | 14 ++++++++++
- drivers/firmware/efi/libstub/x86-stub.c | 27 +++++++++++++++++++
- include/linux/efi.h | 1 +
- 5 files changed, 47 insertions(+)
-
-diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 41644336e..cbd4697a5 100644
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -399,6 +399,8 @@
- useful so that a dump capture kernel won't be
- shot down by NMI
-
-+ apple_set_os [KNL] Report that macOS is being booted to the firmware
-+
- autoconf= [IPV6]
- See Documentation/networking/ipv6.rst.
-
-diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
-index bfa30625f..3d99acc1a 100644
---- a/drivers/firmware/efi/libstub/efi-stub-helper.c
-+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
-@@ -19,6 +19,7 @@
- bool efi_nochunk;
- bool efi_nokaslr = !IS_ENABLED(CONFIG_RANDOMIZE_BASE);
- bool efi_novamap;
-+bool efi_apple_set_os;
-
- static bool efi_noinitrd;
- static bool efi_nosoftreserve;
-@@ -75,6 +76,8 @@
- efi_loglevel = CONSOLE_LOGLEVEL_QUIET;
- } else if (!strcmp(param, "noinitrd")) {
- efi_noinitrd = true;
-+ } else if (!strcmp(param, "apple_set_os")) {
-+ efi_apple_set_os = true;
- } else if (IS_ENABLED(CONFIG_X86_64) && !strcmp(param, "no5lvl")) {
- efi_no5lvl = true;
- } else if (IS_ENABLED(CONFIG_ARCH_HAS_MEM_ENCRYPT) &&
-diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
-index 212687c30..21b414d09 100644
---- a/drivers/firmware/efi/libstub/efistub.h
-+++ b/drivers/firmware/efi/libstub/efistub.h
-@@ -39,6 +39,7 @@
- extern int efi_loglevel;
- extern int efi_mem_encrypt;
- extern bool efi_novamap;
-+extern bool efi_apple_set_os;
- extern const efi_system_table_t *efi_system_table;
-
- typedef union efi_dxe_services_table efi_dxe_services_table_t;
-@@ -825,6 +826,19 @@ union apple_properties_protocol {
- } mixed_mode;
- };
-
-+typedef struct apple_set_os_protocol apple_set_os_protocol_t;
-+
-+struct apple_set_os_protocol {
-+ u64 version;
-+ efi_status_t (__efiapi *set_os_version) (const char *);
-+ efi_status_t (__efiapi *set_os_vendor) (const char *);
-+ struct {
-+ u32 version;
-+ u32 set_os_version;
-+ u32 set_os_vendor;
-+ } mixed_mode;
-+};
-+
- typedef u32 efi_tcg2_event_log_format;
-
- #define INITRD_EVENT_TAG_ID 0x8F3B22ECU
-diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
-index 70b325a2f..2131f8543 100644
---- a/drivers/firmware/efi/libstub/x86-stub.c
-+++ b/drivers/firmware/efi/libstub/x86-stub.c
-@@ -223,6 +223,30 @@ static void retrieve_apple_device_properties(struct boot_params *boot_params)
- }
- }
-
-+static void apple_set_os(void)
-+{
-+ efi_guid_t guid = APPLE_SET_OS_PROTOCOL_GUID;
-+ apple_set_os_protocol_t *set_os;
-+ efi_status_t status;
-+
-+ status = efi_bs_call(locate_protocol, &guid, NULL, (void **)&set_os);
-+ if (status != EFI_SUCCESS)
-+ return;
-+
-+ if (efi_table_attr(set_os, version) >= 2) {
-+ status = efi_fn_call(set_os, set_os_vendor, "Apple Inc.");
-+ if (status != EFI_SUCCESS)
-+ efi_err("Failed to set OS vendor via apple_set_os\n");
-+ }
-+
-+ /* The version being set doesn't seem to matter */
-+ if (efi_table_attr(set_os, version) > 0) {
-+ status = efi_fn_call(set_os, set_os_version, "Mac OS X 10.9");
-+ if (status != EFI_SUCCESS)
-+ efi_err("Failed to set OS version via apple_set_os\n");
-+ }
-+}
-+
- efi_status_t efi_adjust_memory_range_protection(unsigned long start,
- unsigned long size)
- {
-@@ -321,6 +345,9 @@ static void setup_quirks(struct boot_params *boot_params)
- if (IS_ENABLED(CONFIG_APPLE_PROPERTIES) &&
- !memcmp(efistub_fw_vendor(), apple, sizeof(apple)))
- retrieve_apple_device_properties(boot_params);
-+
-+ if (efi_apple_set_os)
-+ apple_set_os();
- }
-
- /*
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 80b21d1c6..f1e58e027 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -387,6 +387,7 @@
- #define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
- #define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
- #define APPLE_PROPERTIES_PROTOCOL_GUID EFI_GUID(0x91bd12fe, 0xf6c3, 0x44fb, 0xa5, 0xb7, 0x51, 0x22, 0xab, 0x30, 0x3a, 0xe0)
-+#define APPLE_SET_OS_PROTOCOL_GUID EFI_GUID(0xc5c5da95, 0x7d5c, 0x45e6, 0xb2, 0xf1, 0x3f, 0xd5, 0x2b, 0xb1, 0x00, 0x77)
- #define EFI_TCG2_PROTOCOL_GUID EFI_GUID(0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f)
- #define EFI_TCG2_FINAL_EVENTS_TABLE_GUID EFI_GUID(0x1e2ed096, 0x30e2, 0x4254, 0xbd, 0x89, 0x86, 0x3b, 0xbe, 0xf8, 0x23, 0x25)
- #define EFI_LOAD_FILE_PROTOCOL_GUID EFI_GUID(0x56ec3091, 0x954c, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
---
-2.34.1
-
-From 09dd6c563cd73d72e917de07e8d59358c41e051d Mon Sep 17 00:00:00 2001
-From: Paul Pawlowski <paul@mrarm.io>
-Date: Sun, 17 Nov 2019 23:12:55 +0100
-Subject: [PATCH 1/6] applesmc: convert static structures to drvdata
-
-All static data structures have been moved to an applesmc_device struct,
-which is then associated with the platform device.
-This change is intended to ease the migration to an acpi_device, where
-static data would preferably be avoided.
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 540 +++++++++++++++++++++++----------------
- 1 file changed, 319 insertions(+), 221 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 79b498f816fe..62211b590a61 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -6,6 +6,7 @@
- *
- * Copyright (C) 2007 Nicolas Boichat <nicolas@boichat.ch>
- * Copyright (C) 2010 Henrik Rydberg <rydberg@euromail.se>
-+ * Copyright (C) 2019 Paul Pawlowski <paul@mrarm.io>
- *
- * Based on hdaps.c driver:
- * Copyright (C) 2005 Robert Love <rml@novell.com>
-@@ -119,7 +120,7 @@ struct applesmc_entry {
- };
-
- /* Register lookup and registers common to all SMCs */
--static struct applesmc_registers {
-+struct applesmc_registers {
- struct mutex mutex; /* register read/write mutex */
- unsigned int key_count; /* number of SMC registers */
- unsigned int fan_count; /* number of fans */
-@@ -133,26 +134,32 @@ static struct applesmc_registers {
- bool init_complete; /* true when fully initialized */
- struct applesmc_entry *cache; /* cached key entries */
- const char **index; /* temperature key index */
--} smcreg = {
-- .mutex = __MUTEX_INITIALIZER(smcreg.mutex),
- };
-
--static const int debug;
--static struct platform_device *pdev;
--static s16 rest_x;
--static s16 rest_y;
--static u8 backlight_state[2];
-+struct applesmc_device {
-+ struct platform_device *dev;
-+ struct applesmc_registers reg;
-
--static struct device *hwmon_dev;
--static struct input_dev *applesmc_idev;
-+ s16 rest_x;
-+ s16 rest_y;
-
--/*
-- * Last index written to key_at_index sysfs file, and value to use for all other
-- * key_at_index_* sysfs files.
-- */
--static unsigned int key_at_index;
-+ u8 backlight_state[2];
-+
-+ struct device *hwmon_dev;
-+ struct input_dev *idev;
-+
-+ /*
-+ * Last index written to key_at_index sysfs file, and value to use for all other
-+ * key_at_index_* sysfs files.
-+ */
-+ unsigned int key_at_index;
-+
-+ struct workqueue_struct *backlight_wq;
-+ struct work_struct backlight_work;
-+ struct led_classdev backlight_dev;
-+};
-
--static struct workqueue_struct *applesmc_led_wq;
-+static const int debug;
-
- /*
- * Wait for specific status bits with a mask on the SMC.
-@@ -338,36 +345,37 @@ static int read_register_count(unsigned int *count)
- * All functions below are concurrency safe - callers should NOT hold lock.
- */
-
--static int applesmc_read_entry(const struct applesmc_entry *entry,
-- u8 *buf, u8 len)
-+static int applesmc_read_entry(struct applesmc_device *smc,
-+ const struct applesmc_entry *entry, u8 *buf, u8 len)
- {
- int ret;
-
- if (entry->len != len)
- return -EINVAL;
-- mutex_lock(&smcreg.mutex);
-+ mutex_lock(&smc->reg.mutex);
- ret = read_smc(APPLESMC_READ_CMD, entry->key, buf, len);
-- mutex_unlock(&smcreg.mutex);
-+ mutex_unlock(&smc->reg.mutex);
-
- return ret;
- }
-
--static int applesmc_write_entry(const struct applesmc_entry *entry,
-- const u8 *buf, u8 len)
-+static int applesmc_write_entry(struct applesmc_device *smc,
-+ const struct applesmc_entry *entry, const u8 *buf, u8 len)
- {
- int ret;
-
- if (entry->len != len)
- return -EINVAL;
-- mutex_lock(&smcreg.mutex);
-+ mutex_lock(&smc->reg.mutex);
- ret = write_smc(APPLESMC_WRITE_CMD, entry->key, buf, len);
-- mutex_unlock(&smcreg.mutex);
-+ mutex_unlock(&smc->reg.mutex);
- return ret;
- }
-
--static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
-+static const struct applesmc_entry *applesmc_get_entry_by_index(
-+ struct applesmc_device *smc, int index)
- {
-- struct applesmc_entry *cache = &smcreg.cache[index];
-+ struct applesmc_entry *cache = &smc->reg.cache[index];
- u8 key[4], info[6];
- __be32 be;
- int ret = 0;
-@@ -375,7 +383,7 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
- if (cache->valid)
- return cache;
-
-- mutex_lock(&smcreg.mutex);
-+ mutex_lock(&smc->reg.mutex);
-
- if (cache->valid)
- goto out;
-@@ -394,20 +402,21 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
- cache->valid = true;
-
- out:
-- mutex_unlock(&smcreg.mutex);
-+ mutex_unlock(&smc->reg.mutex);
- if (ret)
- return ERR_PTR(ret);
- return cache;
- }
-
--static int applesmc_get_lower_bound(unsigned int *lo, const char *key)
-+static int applesmc_get_lower_bound(struct applesmc_device *smc,
-+ unsigned int *lo, const char *key)
- {
-- int begin = 0, end = smcreg.key_count;
-+ int begin = 0, end = smc->reg.key_count;
- const struct applesmc_entry *entry;
-
- while (begin != end) {
- int middle = begin + (end - begin) / 2;
-- entry = applesmc_get_entry_by_index(middle);
-+ entry = applesmc_get_entry_by_index(smc, middle);
- if (IS_ERR(entry)) {
- *lo = 0;
- return PTR_ERR(entry);
-@@ -422,16 +431,17 @@ static int applesmc_get_lower_bound(unsigned int *lo, const char *key)
- return 0;
- }
-
--static int applesmc_get_upper_bound(unsigned int *hi, const char *key)
-+static int applesmc_get_upper_bound(struct applesmc_device *smc,
-+ unsigned int *hi, const char *key)
- {
-- int begin = 0, end = smcreg.key_count;
-+ int begin = 0, end = smc->reg.key_count;
- const struct applesmc_entry *entry;
-
- while (begin != end) {
- int middle = begin + (end - begin) / 2;
-- entry = applesmc_get_entry_by_index(middle);
-+ entry = applesmc_get_entry_by_index(smc, middle);
- if (IS_ERR(entry)) {
-- *hi = smcreg.key_count;
-+ *hi = smc->reg.key_count;
- return PTR_ERR(entry);
- }
- if (strcmp(key, entry->key) < 0)
-@@ -444,50 +454,54 @@ static int applesmc_get_upper_bound(unsigned int *hi, const char *key)
- return 0;
- }
-
--static const struct applesmc_entry *applesmc_get_entry_by_key(const char *key)
-+static const struct applesmc_entry *applesmc_get_entry_by_key(
-+ struct applesmc_device *smc, const char *key)
- {
- int begin, end;
- int ret;
-
-- ret = applesmc_get_lower_bound(&begin, key);
-+ ret = applesmc_get_lower_bound(smc, &begin, key);
- if (ret)
- return ERR_PTR(ret);
-- ret = applesmc_get_upper_bound(&end, key);
-+ ret = applesmc_get_upper_bound(smc, &end, key);
- if (ret)
- return ERR_PTR(ret);
- if (end - begin != 1)
- return ERR_PTR(-EINVAL);
-
-- return applesmc_get_entry_by_index(begin);
-+ return applesmc_get_entry_by_index(smc, begin);
- }
-
--static int applesmc_read_key(const char *key, u8 *buffer, u8 len)
-+static int applesmc_read_key(struct applesmc_device *smc,
-+ const char *key, u8 *buffer, u8 len)
- {
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_key(key);
-+ entry = applesmc_get_entry_by_key(smc, key);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-
-- return applesmc_read_entry(entry, buffer, len);
-+ return applesmc_read_entry(smc, entry, buffer, len);
- }
-
--static int applesmc_write_key(const char *key, const u8 *buffer, u8 len)
-+static int applesmc_write_key(struct applesmc_device *smc,
-+ const char *key, const u8 *buffer, u8 len)
- {
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_key(key);
-+ entry = applesmc_get_entry_by_key(smc, key);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-
-- return applesmc_write_entry(entry, buffer, len);
-+ return applesmc_write_entry(smc, entry, buffer, len);
- }
-
--static int applesmc_has_key(const char *key, bool *value)
-+static int applesmc_has_key(struct applesmc_device *smc,
-+ const char *key, bool *value)
- {
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_key(key);
-+ entry = applesmc_get_entry_by_key(smc, key);
- if (IS_ERR(entry) && PTR_ERR(entry) != -EINVAL)
- return PTR_ERR(entry);
-
-@@ -498,12 +512,13 @@ static int applesmc_has_key(const char *key, bool *value)
- /*
- * applesmc_read_s16 - Read 16-bit signed big endian register
- */
--static int applesmc_read_s16(const char *key, s16 *value)
-+static int applesmc_read_s16(struct applesmc_device *smc,
-+ const char *key, s16 *value)
- {
- u8 buffer[2];
- int ret;
-
-- ret = applesmc_read_key(key, buffer, 2);
-+ ret = applesmc_read_key(smc, key, buffer, 2);
- if (ret)
- return ret;
-
-@@ -514,28 +529,29 @@ static int applesmc_read_s16(const char *key, s16 *value)
- /*
- * applesmc_device_init - initialize the accelerometer. Can sleep.
- */
--static void applesmc_device_init(void)
-+static void applesmc_device_init(struct applesmc_device *smc)
- {
- int total;
- u8 buffer[2];
-
-- if (!smcreg.has_accelerometer)
-+ if (!smc->reg.has_accelerometer)
- return;
-
- for (total = INIT_TIMEOUT_MSECS; total > 0; total -= INIT_WAIT_MSECS) {
-- if (!applesmc_read_key(MOTION_SENSOR_KEY, buffer, 2) &&
-+ if (!applesmc_read_key(smc, MOTION_SENSOR_KEY, buffer, 2) &&
- (buffer[0] != 0x00 || buffer[1] != 0x00))
- return;
- buffer[0] = 0xe0;
- buffer[1] = 0x00;
-- applesmc_write_key(MOTION_SENSOR_KEY, buffer, 2);
-+ applesmc_write_key(smc, MOTION_SENSOR_KEY, buffer, 2);
- msleep(INIT_WAIT_MSECS);
- }
-
- pr_warn("failed to init the device\n");
- }
-
--static int applesmc_init_index(struct applesmc_registers *s)
-+static int applesmc_init_index(struct applesmc_device *smc,
-+ struct applesmc_registers *s)
- {
- const struct applesmc_entry *entry;
- unsigned int i;
-@@ -548,7 +564,7 @@ static int applesmc_init_index(struct applesmc_registers *s)
- return -ENOMEM;
-
- for (i = s->temp_begin; i < s->temp_end; i++) {
-- entry = applesmc_get_entry_by_index(i);
-+ entry = applesmc_get_entry_by_index(smc, i);
- if (IS_ERR(entry))
- continue;
- if (strcmp(entry->type, TEMP_SENSOR_TYPE))
-@@ -562,9 +578,9 @@ static int applesmc_init_index(struct applesmc_registers *s)
- /*
- * applesmc_init_smcreg_try - Try to initialize register cache. Idempotent.
- */
--static int applesmc_init_smcreg_try(void)
-+static int applesmc_init_smcreg_try(struct applesmc_device *smc)
- {
-- struct applesmc_registers *s = &smcreg;
-+ struct applesmc_registers *s = &smc->reg;
- bool left_light_sensor = false, right_light_sensor = false;
- unsigned int count;
- u8 tmp[1];
-@@ -590,35 +606,35 @@ static int applesmc_init_smcreg_try(void)
- if (!s->cache)
- return -ENOMEM;
-
-- ret = applesmc_read_key(FANS_COUNT, tmp, 1);
-+ ret = applesmc_read_key(smc, FANS_COUNT, tmp, 1);
- if (ret)
- return ret;
- s->fan_count = tmp[0];
- if (s->fan_count > 10)
- s->fan_count = 10;
-
-- ret = applesmc_get_lower_bound(&s->temp_begin, "T");
-+ ret = applesmc_get_lower_bound(smc, &s->temp_begin, "T");
- if (ret)
- return ret;
-- ret = applesmc_get_lower_bound(&s->temp_end, "U");
-+ ret = applesmc_get_lower_bound(smc, &s->temp_end, "U");
- if (ret)
- return ret;
- s->temp_count = s->temp_end - s->temp_begin;
-
-- ret = applesmc_init_index(s);
-+ ret = applesmc_init_index(smc, s);
- if (ret)
- return ret;
-
-- ret = applesmc_has_key(LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
-+ ret = applesmc_has_key(smc, LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
- if (ret)
- return ret;
-- ret = applesmc_has_key(LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
-+ ret = applesmc_has_key(smc, LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
- if (ret)
- return ret;
-- ret = applesmc_has_key(MOTION_SENSOR_KEY, &s->has_accelerometer);
-+ ret = applesmc_has_key(smc, MOTION_SENSOR_KEY, &s->has_accelerometer);
- if (ret)
- return ret;
-- ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight);
-+ ret = applesmc_has_key(smc, BACKLIGHT_KEY, &s->has_key_backlight);
- if (ret)
- return ret;
-
-@@ -634,13 +650,13 @@ static int applesmc_init_smcreg_try(void)
- return 0;
- }
-
--static void applesmc_destroy_smcreg(void)
-+static void applesmc_destroy_smcreg(struct applesmc_device *smc)
- {
-- kfree(smcreg.index);
-- smcreg.index = NULL;
-- kfree(smcreg.cache);
-- smcreg.cache = NULL;
-- smcreg.init_complete = false;
-+ kfree(smc->reg.index);
-+ smc->reg.index = NULL;
-+ kfree(smc->reg.cache);
-+ smc->reg.cache = NULL;
-+ smc->reg.init_complete = false;
- }
-
- /*
-@@ -649,12 +665,12 @@ static void applesmc_destroy_smcreg(void)
- * Retries until initialization is successful, or the operation times out.
- *
- */
--static int applesmc_init_smcreg(void)
-+static int applesmc_init_smcreg(struct applesmc_device *smc)
- {
- int ms, ret;
-
- for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) {
-- ret = applesmc_init_smcreg_try();
-+ ret = applesmc_init_smcreg_try(smc);
- if (!ret) {
- if (ms)
- pr_info("init_smcreg() took %d ms\n", ms);
-@@ -663,21 +679,58 @@ static int applesmc_init_smcreg(void)
- msleep(INIT_WAIT_MSECS);
- }
-
-- applesmc_destroy_smcreg();
-+ applesmc_destroy_smcreg(smc);
-
- return ret;
- }
-
- /* Device model stuff */
-+static int applesmc_create_modules(struct applesmc_device *smc);
-+static void applesmc_destroy_modules(struct applesmc_device *smc);
- static int applesmc_probe(struct platform_device *dev)
- {
-+ struct applesmc_device *smc;
- int ret;
-
-- ret = applesmc_init_smcreg();
-+ smc = kzalloc(sizeof(struct applesmc_device), GFP_KERNEL);
-+ if (!smc)
-+ return -ENOMEM;
-+ smc->dev = dev;
-+ mutex_init(&smc->reg.mutex);
-+
-+ platform_set_drvdata(dev, smc);
-+
-+ ret = applesmc_init_smcreg(smc);
- if (ret)
-- return ret;
-+ goto out_mem;
-+
-+ applesmc_device_init(smc);
-+
-+ ret = applesmc_create_modules(smc);
-+ if (ret)
-+ goto out_reg;
-+
-+ return 0;
-+
-+out_reg:
-+ applesmc_destroy_smcreg(smc);
-+out_mem:
-+ platform_set_drvdata(dev, NULL);
-+ mutex_destroy(&smc->reg.mutex);
-+ kfree(smc);
-
-- applesmc_device_init();
-+ return ret;
-+}
-+
-+static int applesmc_remove(struct platform_device *dev)
-+{
-+ struct applesmc_device *smc = platform_get_drvdata(dev);
-+
-+ applesmc_destroy_modules(smc);
-+ applesmc_destroy_smcreg(smc);
-+
-+ mutex_destroy(&smc->reg.mutex);
-+ kfree(smc);
-
- return 0;
- }
-@@ -685,15 +738,21 @@ static int applesmc_probe(struct platform_device *dev)
- /* Synchronize device with memorized backlight state */
- static int applesmc_pm_resume(struct device *dev)
- {
-- if (smcreg.has_key_backlight)
-- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+
-+ if (smc->reg.has_key_backlight)
-+ applesmc_write_key(smc, BACKLIGHT_KEY, smc->backlight_state, 2);
-+
- return 0;
- }
-
- /* Reinitialize device on resume from hibernation */
- static int applesmc_pm_restore(struct device *dev)
- {
-- applesmc_device_init();
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+
-+ applesmc_device_init(smc);
-+
- return applesmc_pm_resume(dev);
- }
-
-@@ -704,6 +763,7 @@ static const struct dev_pm_ops applesmc_pm_ops = {
-
- static struct platform_driver applesmc_driver = {
- .probe = applesmc_probe,
-+ .remove = applesmc_remove,
- .driver = {
- .name = "applesmc",
- .pm = &applesmc_pm_ops,
-@@ -714,25 +774,26 @@ static struct platform_driver applesmc_driver = {
- * applesmc_calibrate - Set our "resting" values. Callers must
- * hold applesmc_lock.
- */
--static void applesmc_calibrate(void)
-+static void applesmc_calibrate(struct applesmc_device *smc)
- {
-- applesmc_read_s16(MOTION_SENSOR_X_KEY, &rest_x);
-- applesmc_read_s16(MOTION_SENSOR_Y_KEY, &rest_y);
-- rest_x = -rest_x;
-+ applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &smc->rest_x);
-+ applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &smc->rest_y);
-+ smc->rest_x = -smc->rest_x;
- }
-
- static void applesmc_idev_poll(struct input_dev *idev)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(&idev->dev);
- s16 x, y;
-
-- if (applesmc_read_s16(MOTION_SENSOR_X_KEY, &x))
-+ if (applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &x))
- return;
-- if (applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y))
-+ if (applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &y))
- return;
-
- x = -x;
-- input_report_abs(idev, ABS_X, x - rest_x);
-- input_report_abs(idev, ABS_Y, y - rest_y);
-+ input_report_abs(idev, ABS_X, x - smc->rest_x);
-+ input_report_abs(idev, ABS_Y, y - smc->rest_y);
- input_sync(idev);
- }
-
-@@ -747,16 +808,17 @@ static ssize_t applesmc_name_show(struct device *dev,
- static ssize_t applesmc_position_show(struct device *dev,
- struct device_attribute *attr, char *buf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- s16 x, y, z;
-
-- ret = applesmc_read_s16(MOTION_SENSOR_X_KEY, &x);
-+ ret = applesmc_read_s16(smc, MOTION_SENSOR_X_KEY, &x);
- if (ret)
- goto out;
-- ret = applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y);
-+ ret = applesmc_read_s16(smc, MOTION_SENSOR_Y_KEY, &y);
- if (ret)
- goto out;
-- ret = applesmc_read_s16(MOTION_SENSOR_Z_KEY, &z);
-+ ret = applesmc_read_s16(smc, MOTION_SENSOR_Z_KEY, &z);
- if (ret)
- goto out;
-
-@@ -770,6 +832,7 @@ static ssize_t applesmc_position_show(struct device *dev,
- static ssize_t applesmc_light_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- const struct applesmc_entry *entry;
- static int data_length;
- int ret;
-@@ -777,7 +840,7 @@ static ssize_t applesmc_light_show(struct device *dev,
- u8 buffer[10];
-
- if (!data_length) {
-- entry = applesmc_get_entry_by_key(LIGHT_SENSOR_LEFT_KEY);
-+ entry = applesmc_get_entry_by_key(smc, LIGHT_SENSOR_LEFT_KEY);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
- if (entry->len > 10)
-@@ -786,7 +849,7 @@ static ssize_t applesmc_light_show(struct device *dev,
- pr_info("light sensor data length set to %d\n", data_length);
- }
-
-- ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
-+ ret = applesmc_read_key(smc, LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
- if (ret)
- goto out;
- /* newer macbooks report a single 10-bit bigendian value */
-@@ -796,7 +859,7 @@ static ssize_t applesmc_light_show(struct device *dev,
- }
- left = buffer[2];
-
-- ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
-+ ret = applesmc_read_key(smc, LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
- if (ret)
- goto out;
- right = buffer[2];
-@@ -812,7 +875,8 @@ static ssize_t applesmc_light_show(struct device *dev,
- static ssize_t applesmc_show_sensor_label(struct device *dev,
- struct device_attribute *devattr, char *sysfsbuf)
- {
-- const char *key = smcreg.index[to_index(devattr)];
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+ const char *key = smc->reg.index[to_index(devattr)];
-
- return sysfs_emit(sysfsbuf, "%s\n", key);
- }
-@@ -821,12 +885,13 @@ static ssize_t applesmc_show_sensor_label(struct device *dev,
- static ssize_t applesmc_show_temperature(struct device *dev,
- struct device_attribute *devattr, char *sysfsbuf)
- {
-- const char *key = smcreg.index[to_index(devattr)];
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+ const char *key = smc->reg.index[to_index(devattr)];
- int ret;
- s16 value;
- int temp;
-
-- ret = applesmc_read_s16(key, &value);
-+ ret = applesmc_read_s16(smc, key, &value);
- if (ret)
- return ret;
-
-@@ -838,6 +903,7 @@ static ssize_t applesmc_show_temperature(struct device *dev,
- static ssize_t applesmc_show_fan_speed(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- unsigned int speed = 0;
- char newkey[5];
-@@ -846,7 +912,7 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
- scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
- to_index(attr));
-
-- ret = applesmc_read_key(newkey, buffer, 2);
-+ ret = applesmc_read_key(smc, newkey, buffer, 2);
- if (ret)
- return ret;
-
-@@ -858,6 +924,7 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- struct device_attribute *attr,
- const char *sysfsbuf, size_t count)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- unsigned long speed;
- char newkey[5];
-@@ -871,7 +938,7 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
-
- buffer[0] = (speed >> 6) & 0xff;
- buffer[1] = (speed << 2) & 0xff;
-- ret = applesmc_write_key(newkey, buffer, 2);
-+ ret = applesmc_write_key(smc, newkey, buffer, 2);
-
- if (ret)
- return ret;
-@@ -882,11 +949,12 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- static ssize_t applesmc_show_fan_manual(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- u16 manual = 0;
- u8 buffer[2];
-
-- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
-+ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
- if (ret)
- return ret;
-
-@@ -898,6 +966,7 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- struct device_attribute *attr,
- const char *sysfsbuf, size_t count)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- u8 buffer[2];
- unsigned long input;
-@@ -906,7 +975,7 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- if (kstrtoul(sysfsbuf, 10, &input) < 0)
- return -EINVAL;
-
-- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
-+ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
- if (ret)
- goto out;
-
-@@ -920,7 +989,7 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- buffer[0] = (val >> 8) & 0xFF;
- buffer[1] = val & 0xFF;
-
-- ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
-+ ret = applesmc_write_key(smc, FANS_MANUAL, buffer, 2);
-
- out:
- if (ret)
-@@ -932,13 +1001,14 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- static ssize_t applesmc_show_fan_position(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- char newkey[5];
- u8 buffer[17];
-
- scnprintf(newkey, sizeof(newkey), FAN_ID_FMT, to_index(attr));
-
-- ret = applesmc_read_key(newkey, buffer, 16);
-+ ret = applesmc_read_key(smc, newkey, buffer, 16);
- buffer[16] = 0;
-
- if (ret)
-@@ -950,30 +1020,36 @@ static ssize_t applesmc_show_fan_position(struct device *dev,
- static ssize_t applesmc_calibrate_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- return sysfs_emit(sysfsbuf, "(%d,%d)\n", rest_x, rest_y);
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(sysfsbuf, "(%d,%d)\n", smc->rest_x, smc->rest_y);
- }
-
- static ssize_t applesmc_calibrate_store(struct device *dev,
- struct device_attribute *attr, const char *sysfsbuf, size_t count)
- {
-- applesmc_calibrate();
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+
-+ applesmc_calibrate(smc);
-
- return count;
- }
-
- static void applesmc_backlight_set(struct work_struct *work)
- {
-- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
-+ struct applesmc_device *smc = container_of(work, struct applesmc_device, backlight_work);
-+
-+ applesmc_write_key(smc, BACKLIGHT_KEY, smc->backlight_state, 2);
- }
--static DECLARE_WORK(backlight_work, &applesmc_backlight_set);
-
- static void applesmc_brightness_set(struct led_classdev *led_cdev,
- enum led_brightness value)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(led_cdev->dev);
- int ret;
-
-- backlight_state[0] = value;
-- ret = queue_work(applesmc_led_wq, &backlight_work);
-+ smc->backlight_state[0] = value;
-+ ret = queue_work(smc->backlight_wq, &smc->backlight_work);
-
- if (debug && (!ret))
- dev_dbg(led_cdev->dev, "work was already on the queue.\n");
-@@ -982,11 +1058,12 @@ static void applesmc_brightness_set(struct led_classdev *led_cdev,
- static ssize_t applesmc_key_count_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- u8 buffer[4];
- u32 count;
-
-- ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4);
-+ ret = applesmc_read_key(smc, KEY_COUNT_KEY, buffer, 4);
- if (ret)
- return ret;
-
-@@ -998,13 +1075,14 @@ static ssize_t applesmc_key_count_show(struct device *dev,
- static ssize_t applesmc_key_at_index_read_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- const struct applesmc_entry *entry;
- int ret;
-
-- entry = applesmc_get_entry_by_index(key_at_index);
-+ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-- ret = applesmc_read_entry(entry, sysfsbuf, entry->len);
-+ ret = applesmc_read_entry(smc, entry, sysfsbuf, entry->len);
- if (ret)
- return ret;
-
-@@ -1014,9 +1092,10 @@ static ssize_t applesmc_key_at_index_read_show(struct device *dev,
- static ssize_t applesmc_key_at_index_data_length_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_index(key_at_index);
-+ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-
-@@ -1026,9 +1105,10 @@ static ssize_t applesmc_key_at_index_data_length_show(struct device *dev,
- static ssize_t applesmc_key_at_index_type_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_index(key_at_index);
-+ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-
-@@ -1038,9 +1118,10 @@ static ssize_t applesmc_key_at_index_type_show(struct device *dev,
- static ssize_t applesmc_key_at_index_name_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- const struct applesmc_entry *entry;
-
-- entry = applesmc_get_entry_by_index(key_at_index);
-+ entry = applesmc_get_entry_by_index(smc, smc->key_at_index);
- if (IS_ERR(entry))
- return PTR_ERR(entry);
-
-@@ -1050,28 +1131,25 @@ static ssize_t applesmc_key_at_index_name_show(struct device *dev,
- static ssize_t applesmc_key_at_index_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- return sysfs_emit(sysfsbuf, "%d\n", key_at_index);
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+
-+ return sysfs_emit(sysfsbuf, "%d\n", smc->key_at_index);
- }
-
- static ssize_t applesmc_key_at_index_store(struct device *dev,
- struct device_attribute *attr, const char *sysfsbuf, size_t count)
- {
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
- unsigned long newkey;
-
- if (kstrtoul(sysfsbuf, 10, &newkey) < 0
-- || newkey >= smcreg.key_count)
-+ || newkey >= smc->reg.key_count)
- return -EINVAL;
-
-- key_at_index = newkey;
-+ smc->key_at_index = newkey;
- return count;
- }
-
--static struct led_classdev applesmc_backlight = {
-- .name = "smc::kbd_backlight",
-- .default_trigger = "nand-disk",
-- .brightness_set = applesmc_brightness_set,
--};
--
- static struct applesmc_node_group info_group[] = {
- { "name", applesmc_name_show },
- { "key_count", applesmc_key_count_show },
-@@ -1116,14 +1194,15 @@ static struct applesmc_node_group temp_group[] = {
- /*
- * applesmc_destroy_nodes - remove files and free associated memory
- */
--static void applesmc_destroy_nodes(struct applesmc_node_group *groups)
-+static void applesmc_destroy_nodes(struct applesmc_device *smc,
-+ struct applesmc_node_group *groups)
- {
- struct applesmc_node_group *grp;
- struct applesmc_dev_attr *node;
-
- for (grp = groups; grp->nodes; grp++) {
- for (node = grp->nodes; node->sda.dev_attr.attr.name; node++)
-- sysfs_remove_file(&pdev->dev.kobj,
-+ sysfs_remove_file(&smc->dev->dev.kobj,
- &node->sda.dev_attr.attr);
- kfree(grp->nodes);
- grp->nodes = NULL;
-@@ -1133,7 +1212,8 @@ static void applesmc_destroy_nodes(struct applesmc_node_group *groups)
- /*
- * applesmc_create_nodes - create a two-dimensional group of sysfs files
- */
--static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
-+static int applesmc_create_nodes(struct applesmc_device *smc,
-+ struct applesmc_node_group *groups, int num)
- {
- struct applesmc_node_group *grp;
- struct applesmc_dev_attr *node;
-@@ -1157,7 +1237,7 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
- sysfs_attr_init(attr);
- attr->name = node->name;
- attr->mode = 0444 | (grp->store ? 0200 : 0);
-- ret = sysfs_create_file(&pdev->dev.kobj, attr);
-+ ret = sysfs_create_file(&smc->dev->dev.kobj, attr);
- if (ret) {
- attr->name = NULL;
- goto out;
-@@ -1167,57 +1247,57 @@ static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
-
- return 0;
- out:
-- applesmc_destroy_nodes(groups);
-+ applesmc_destroy_nodes(smc, groups);
- return ret;
- }
-
- /* Create accelerometer resources */
--static int applesmc_create_accelerometer(void)
-+static int applesmc_create_accelerometer(struct applesmc_device *smc)
- {
- int ret;
-
-- if (!smcreg.has_accelerometer)
-+ if (!smc->reg.has_accelerometer)
- return 0;
-
-- ret = applesmc_create_nodes(accelerometer_group, 1);
-+ ret = applesmc_create_nodes(smc, accelerometer_group, 1);
- if (ret)
- goto out;
-
-- applesmc_idev = input_allocate_device();
-- if (!applesmc_idev) {
-+ smc->idev = input_allocate_device();
-+ if (!smc->idev) {
- ret = -ENOMEM;
- goto out_sysfs;
- }
-
- /* initial calibrate for the input device */
-- applesmc_calibrate();
-+ applesmc_calibrate(smc);
-
- /* initialize the input device */
-- applesmc_idev->name = "applesmc";
-- applesmc_idev->id.bustype = BUS_HOST;
-- applesmc_idev->dev.parent = &pdev->dev;
-- input_set_abs_params(applesmc_idev, ABS_X,
-+ smc->idev->name = "applesmc";
-+ smc->idev->id.bustype = BUS_HOST;
-+ smc->idev->dev.parent = &smc->dev->dev;
-+ input_set_abs_params(smc->idev, ABS_X,
- -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
-- input_set_abs_params(applesmc_idev, ABS_Y,
-+ input_set_abs_params(smc->idev, ABS_Y,
- -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
-
-- ret = input_setup_polling(applesmc_idev, applesmc_idev_poll);
-+ ret = input_setup_polling(smc->idev, applesmc_idev_poll);
- if (ret)
- goto out_idev;
-
-- input_set_poll_interval(applesmc_idev, APPLESMC_POLL_INTERVAL);
-+ input_set_poll_interval(smc->idev, APPLESMC_POLL_INTERVAL);
-
-- ret = input_register_device(applesmc_idev);
-+ ret = input_register_device(smc->idev);
- if (ret)
- goto out_idev;
-
- return 0;
-
- out_idev:
-- input_free_device(applesmc_idev);
-+ input_free_device(smc->idev);
-
- out_sysfs:
-- applesmc_destroy_nodes(accelerometer_group);
-+ applesmc_destroy_nodes(smc, accelerometer_group);
-
- out:
- pr_warn("driver init failed (ret=%d)!\n", ret);
-@@ -1225,44 +1305,55 @@ static int applesmc_create_accelerometer(void)
- }
-
- /* Release all resources used by the accelerometer */
--static void applesmc_release_accelerometer(void)
-+static void applesmc_release_accelerometer(struct applesmc_device *smc)
- {
-- if (!smcreg.has_accelerometer)
-+ if (!smc->reg.has_accelerometer)
- return;
-- input_unregister_device(applesmc_idev);
-- applesmc_destroy_nodes(accelerometer_group);
-+ input_unregister_device(smc->idev);
-+ applesmc_destroy_nodes(smc, accelerometer_group);
- }
-
--static int applesmc_create_light_sensor(void)
-+static int applesmc_create_light_sensor(struct applesmc_device *smc)
- {
-- if (!smcreg.num_light_sensors)
-+ if (!smc->reg.num_light_sensors)
- return 0;
-- return applesmc_create_nodes(light_sensor_group, 1);
-+ return applesmc_create_nodes(smc, light_sensor_group, 1);
- }
-
--static void applesmc_release_light_sensor(void)
-+static void applesmc_release_light_sensor(struct applesmc_device *smc)
- {
-- if (!smcreg.num_light_sensors)
-+ if (!smc->reg.num_light_sensors)
- return;
-- applesmc_destroy_nodes(light_sensor_group);
-+ applesmc_destroy_nodes(smc, light_sensor_group);
- }
-
--static int applesmc_create_key_backlight(void)
-+static int applesmc_create_key_backlight(struct applesmc_device *smc)
- {
-- if (!smcreg.has_key_backlight)
-+ int ret;
-+
-+ if (!smc->reg.has_key_backlight)
- return 0;
-- applesmc_led_wq = create_singlethread_workqueue("applesmc-led");
-- if (!applesmc_led_wq)
-+ smc->backlight_wq = create_singlethread_workqueue("applesmc-led");
-+ if (!smc->backlight_wq)
- return -ENOMEM;
-- return led_classdev_register(&pdev->dev, &applesmc_backlight);
-+
-+ INIT_WORK(&smc->backlight_work, applesmc_backlight_set);
-+ smc->backlight_dev.name = "smc::kbd_backlight";
-+ smc->backlight_dev.default_trigger = "nand-disk";
-+ smc->backlight_dev.brightness_set = applesmc_brightness_set;
-+ ret = led_classdev_register(&smc->dev->dev, &smc->backlight_dev);
-+ if (ret)
-+ destroy_workqueue(smc->backlight_wq);
-+
-+ return ret;
- }
-
--static void applesmc_release_key_backlight(void)
-+static void applesmc_release_key_backlight(struct applesmc_device *smc)
- {
-- if (!smcreg.has_key_backlight)
-+ if (!smc->reg.has_key_backlight)
- return;
-- led_classdev_unregister(&applesmc_backlight);
-- destroy_workqueue(applesmc_led_wq);
-+ led_classdev_unregister(&smc->backlight_dev);
-+ destroy_workqueue(smc->backlight_wq);
- }
-
- static int applesmc_dmi_match(const struct dmi_system_id *id)
-@@ -1302,86 +1393,100 @@ static const struct dmi_system_id applesmc_whitelist[] __initconst = {
- { .ident = NULL }
- };
-
--static int __init applesmc_init(void)
-+static int applesmc_create_modules(struct applesmc_device *smc)
- {
- int ret;
-
-- if (!dmi_check_system(applesmc_whitelist)) {
-- pr_warn("supported laptop not found!\n");
-- ret = -ENODEV;
-- goto out;
-- }
--
-- if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
-- "applesmc")) {
-- ret = -ENXIO;
-- goto out;
-- }
--
-- ret = platform_driver_register(&applesmc_driver);
-- if (ret)
-- goto out_region;
--
-- pdev = platform_device_register_simple("applesmc", APPLESMC_DATA_PORT,
-- NULL, 0);
-- if (IS_ERR(pdev)) {
-- ret = PTR_ERR(pdev);
-- goto out_driver;
-- }
--
-- /* create register cache */
-- ret = applesmc_init_smcreg();
-- if (ret)
-- goto out_device;
--
-- ret = applesmc_create_nodes(info_group, 1);
-+ ret = applesmc_create_nodes(smc, info_group, 1);
- if (ret)
-- goto out_smcreg;
-+ goto out;
-
-- ret = applesmc_create_nodes(fan_group, smcreg.fan_count);
-+ ret = applesmc_create_nodes(smc, fan_group, smc->reg.fan_count);
- if (ret)
- goto out_info;
-
-- ret = applesmc_create_nodes(temp_group, smcreg.index_count);
-+ ret = applesmc_create_nodes(smc, temp_group, smc->reg.index_count);
- if (ret)
- goto out_fans;
-
-- ret = applesmc_create_accelerometer();
-+ ret = applesmc_create_accelerometer(smc);
- if (ret)
- goto out_temperature;
-
-- ret = applesmc_create_light_sensor();
-+ ret = applesmc_create_light_sensor(smc);
- if (ret)
- goto out_accelerometer;
-
-- ret = applesmc_create_key_backlight();
-+ ret = applesmc_create_key_backlight(smc);
- if (ret)
- goto out_light_sysfs;
-
-- hwmon_dev = hwmon_device_register(&pdev->dev);
-- if (IS_ERR(hwmon_dev)) {
-- ret = PTR_ERR(hwmon_dev);
-+ smc->hwmon_dev = hwmon_device_register(&smc->dev->dev);
-+ if (IS_ERR(smc->hwmon_dev)) {
-+ ret = PTR_ERR(smc->hwmon_dev);
- goto out_light_ledclass;
- }
-
- return 0;
-
- out_light_ledclass:
-- applesmc_release_key_backlight();
-+ applesmc_release_key_backlight(smc);
- out_light_sysfs:
-- applesmc_release_light_sensor();
-+ applesmc_release_light_sensor(smc);
- out_accelerometer:
-- applesmc_release_accelerometer();
-+ applesmc_release_accelerometer(smc);
- out_temperature:
-- applesmc_destroy_nodes(temp_group);
-+ applesmc_destroy_nodes(smc, temp_group);
- out_fans:
-- applesmc_destroy_nodes(fan_group);
-+ applesmc_destroy_nodes(smc, fan_group);
- out_info:
-- applesmc_destroy_nodes(info_group);
--out_smcreg:
-- applesmc_destroy_smcreg();
--out_device:
-- platform_device_unregister(pdev);
-+ applesmc_destroy_nodes(smc, info_group);
-+out:
-+ return ret;
-+}
-+
-+static void applesmc_destroy_modules(struct applesmc_device *smc)
-+{
-+ hwmon_device_unregister(smc->hwmon_dev);
-+ applesmc_release_key_backlight(smc);
-+ applesmc_release_light_sensor(smc);
-+ applesmc_release_accelerometer(smc);
-+ applesmc_destroy_nodes(smc, temp_group);
-+ applesmc_destroy_nodes(smc, fan_group);
-+ applesmc_destroy_nodes(smc, info_group);
-+}
-+
-+static struct platform_device *pdev;
-+
-+static int __init applesmc_init(void)
-+{
-+ int ret;
-+
-+ if (!dmi_check_system(applesmc_whitelist)) {
-+ pr_warn("supported laptop not found!\n");
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+
-+ if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
-+ "applesmc")) {
-+ ret = -ENXIO;
-+ goto out;
-+ }
-+
-+ ret = platform_driver_register(&applesmc_driver);
-+ if (ret)
-+ goto out_region;
-+
-+ pdev = platform_device_register_simple("applesmc", APPLESMC_DATA_PORT,
-+ NULL, 0);
-+ if (IS_ERR(pdev)) {
-+ ret = PTR_ERR(pdev);
-+ goto out_driver;
-+ }
-+
-+ return 0;
-+
- out_driver:
- platform_driver_unregister(&applesmc_driver);
- out_region:
-@@ -1393,14 +1498,6 @@ static int __init applesmc_init(void)
-
- static void __exit applesmc_exit(void)
- {
-- hwmon_device_unregister(hwmon_dev);
-- applesmc_release_key_backlight();
-- applesmc_release_light_sensor();
-- applesmc_release_accelerometer();
-- applesmc_destroy_nodes(temp_group);
-- applesmc_destroy_nodes(fan_group);
-- applesmc_destroy_nodes(info_group);
-- applesmc_destroy_smcreg();
- platform_device_unregister(pdev);
- platform_driver_unregister(&applesmc_driver);
- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
-@@ -1410,6 +1507,7 @@ module_init(applesmc_init);
- module_exit(applesmc_exit);
-
- MODULE_AUTHOR("Nicolas Boichat");
-+MODULE_AUTHOR("Paul Pawlowski");
- MODULE_DESCRIPTION("Apple SMC");
- MODULE_LICENSE("GPL v2");
- MODULE_DEVICE_TABLE(dmi, applesmc_whitelist);
---
-2.30.0
-
-From 713e78b8dbb8adb92d4ee09ea11e726b05577689 Mon Sep 17 00:00:00 2001
-From: Paul Pawlowski <paul@mrarm.io>
-Date: Sun, 17 Nov 2019 23:11:56 +0100
-Subject: [PATCH 2/6] applesmc: make io port base addr dynamic
-
-This change makes the port base runtime configurable.
-The reason why this change is made is so that when we switch to an
-acpi_device we can resolve the port base addr from ACPI.
-
-This change is not strictly required for T2 support - the base
-address is still 0x300 on T2 Macs.
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 91 +++++++++++++++++++++-------------------
- 1 file changed, 49 insertions(+), 42 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 62211b590a61..39ed0bb21365 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -35,10 +35,11 @@
- #include <linux/err.h>
- #include <linux/bits.h>
-
-+#define APPLESMC_PORT_BASE 0x300
- /* data port used by Apple SMC */
--#define APPLESMC_DATA_PORT 0x300
-+#define APPLESMC_DATA_PORT 0
- /* command/status port used by Apple SMC */
--#define APPLESMC_CMD_PORT 0x304
-+#define APPLESMC_CMD_PORT 4
-
- #define APPLESMC_NR_PORTS 32 /* 0x300-0x31f */
-
-@@ -140,6 +141,8 @@ struct applesmc_device {
- struct platform_device *dev;
- struct applesmc_registers reg;
-
-+ u16 port_base;
-+
- s16 rest_x;
- s16 rest_y;
-
-@@ -169,7 +172,7 @@ static const int debug;
- * run out past 500ms.
- */
-
--static int wait_status(u8 val, u8 mask)
-+static int wait_status(struct applesmc_device *smc, u8 val, u8 mask)
- {
- u8 status;
- int us;
-@@ -177,7 +180,7 @@ static int wait_status(u8 val, u8 mask)
-
- us = APPLESMC_MIN_WAIT;
- for (i = 0; i < 24 ; i++) {
-- status = inb(APPLESMC_CMD_PORT);
-+ status = inb(smc->port_base + APPLESMC_CMD_PORT);
- if ((status & mask) == val)
- return 0;
- usleep_range(us, us * 2);
-@@ -189,11 +192,11 @@ static int wait_status(u8 val, u8 mask)
-
- /* send_byte - Write to SMC data port. Callers must hold applesmc_lock. */
-
--static int send_byte(u8 cmd, u16 port)
-+static int send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
- {
- int status;
-
-- status = wait_status(0, SMC_STATUS_IB_CLOSED);
-+ status = wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
- if (status)
- return status;
- /*
-@@ -202,24 +205,24 @@ static int send_byte(u8 cmd, u16 port)
- * this extra read may not happen if status returns both
- * simultaneously and this would appear to be required.
- */
-- status = wait_status(SMC_STATUS_BUSY, SMC_STATUS_BUSY);
-+ status = wait_status(smc, SMC_STATUS_BUSY, SMC_STATUS_BUSY);
- if (status)
- return status;
-
-- outb(cmd, port);
-+ outb(cmd, smc->port_base + port);
- return 0;
- }
-
- /* send_command - Write a command to the SMC. Callers must hold applesmc_lock. */
-
--static int send_command(u8 cmd)
-+static int send_command(struct applesmc_device *smc, u8 cmd)
- {
- int ret;
-
-- ret = wait_status(0, SMC_STATUS_IB_CLOSED);
-+ ret = wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
- if (ret)
- return ret;
-- outb(cmd, APPLESMC_CMD_PORT);
-+ outb(cmd, smc->port_base + APPLESMC_CMD_PORT);
- return 0;
- }
-
-@@ -229,108 +232,112 @@ static int send_command(u8 cmd)
- * If busy is stuck high after the command then the SMC is jammed.
- */
-
--static int smc_sane(void)
-+static int smc_sane(struct applesmc_device *smc)
- {
- int ret;
-
-- ret = wait_status(0, SMC_STATUS_BUSY);
-+ ret = wait_status(smc, 0, SMC_STATUS_BUSY);
- if (!ret)
- return ret;
-- ret = send_command(APPLESMC_READ_CMD);
-+ ret = send_command(smc, APPLESMC_READ_CMD);
- if (ret)
- return ret;
-- return wait_status(0, SMC_STATUS_BUSY);
-+ return wait_status(smc, 0, SMC_STATUS_BUSY);
- }
-
--static int send_argument(const char *key)
-+static int send_argument(struct applesmc_device *smc, const char *key)
- {
- int i;
-
- for (i = 0; i < 4; i++)
-- if (send_byte(key[i], APPLESMC_DATA_PORT))
-+ if (send_byte(smc, key[i], APPLESMC_DATA_PORT))
- return -EIO;
- return 0;
- }
-
--static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
-+static int read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+ u8 *buffer, u8 len)
- {
- u8 status, data = 0;
- int i;
- int ret;
-
-- ret = smc_sane();
-+ ret = smc_sane(smc);
- if (ret)
- return ret;
-
-- if (send_command(cmd) || send_argument(key)) {
-+ if (send_command(smc, cmd) || send_argument(smc, key)) {
- pr_warn("%.4s: read arg fail\n", key);
- return -EIO;
- }
-
- /* This has no effect on newer (2012) SMCs */
-- if (send_byte(len, APPLESMC_DATA_PORT)) {
-+ if (send_byte(smc, len, APPLESMC_DATA_PORT)) {
- pr_warn("%.4s: read len fail\n", key);
- return -EIO;
- }
-
- for (i = 0; i < len; i++) {
-- if (wait_status(SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY,
-+ if (wait_status(smc,
-+ SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY,
- SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY)) {
- pr_warn("%.4s: read data[%d] fail\n", key, i);
- return -EIO;
- }
-- buffer[i] = inb(APPLESMC_DATA_PORT);
-+ buffer[i] = inb(smc->port_base + APPLESMC_DATA_PORT);
- }
-
- /* Read the data port until bit0 is cleared */
- for (i = 0; i < 16; i++) {
- udelay(APPLESMC_MIN_WAIT);
-- status = inb(APPLESMC_CMD_PORT);
-+ status = inb(smc->port_base + APPLESMC_CMD_PORT);
- if (!(status & SMC_STATUS_AWAITING_DATA))
- break;
-- data = inb(APPLESMC_DATA_PORT);
-+ data = inb(smc->port_base + APPLESMC_DATA_PORT);
- }
- if (i)
- pr_warn("flushed %d bytes, last value is: %d\n", i, data);
-
-- return wait_status(0, SMC_STATUS_BUSY);
-+ return wait_status(smc, 0, SMC_STATUS_BUSY);
- }
-
--static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
-+static int write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+ const u8 *buffer, u8 len)
- {
- int i;
- int ret;
-
-- ret = smc_sane();
-+ ret = smc_sane(smc);
- if (ret)
- return ret;
-
-- if (send_command(cmd) || send_argument(key)) {
-+ if (send_command(smc, cmd) || send_argument(smc, key)) {
- pr_warn("%s: write arg fail\n", key);
- return -EIO;
- }
-
-- if (send_byte(len, APPLESMC_DATA_PORT)) {
-+ if (send_byte(smc, len, APPLESMC_DATA_PORT)) {
- pr_warn("%.4s: write len fail\n", key);
- return -EIO;
- }
-
- for (i = 0; i < len; i++) {
-- if (send_byte(buffer[i], APPLESMC_DATA_PORT)) {
-+ if (send_byte(smc, buffer[i], APPLESMC_DATA_PORT)) {
- pr_warn("%s: write data fail\n", key);
- return -EIO;
- }
- }
-
-- return wait_status(0, SMC_STATUS_BUSY);
-+ return wait_status(smc, 0, SMC_STATUS_BUSY);
- }
-
--static int read_register_count(unsigned int *count)
-+static int read_register_count(struct applesmc_device *smc,
-+ unsigned int *count)
- {
- __be32 be;
- int ret;
-
-- ret = read_smc(APPLESMC_READ_CMD, KEY_COUNT_KEY, (u8 *)&be, 4);
-+ ret = read_smc(smc, APPLESMC_READ_CMD, KEY_COUNT_KEY, (u8 *)&be, 4);
- if (ret)
- return ret;
-
-@@ -353,7 +360,7 @@ static int applesmc_read_entry(struct applesmc_device *smc,
- if (entry->len != len)
- return -EINVAL;
- mutex_lock(&smc->reg.mutex);
-- ret = read_smc(APPLESMC_READ_CMD, entry->key, buf, len);
-+ ret = read_smc(smc, APPLESMC_READ_CMD, entry->key, buf, len);
- mutex_unlock(&smc->reg.mutex);
-
- return ret;
-@@ -367,7 +374,7 @@ static int applesmc_write_entry(struct applesmc_device *smc,
- if (entry->len != len)
- return -EINVAL;
- mutex_lock(&smc->reg.mutex);
-- ret = write_smc(APPLESMC_WRITE_CMD, entry->key, buf, len);
-+ ret = write_smc(smc, APPLESMC_WRITE_CMD, entry->key, buf, len);
- mutex_unlock(&smc->reg.mutex);
- return ret;
- }
-@@ -388,10 +395,10 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(
- if (cache->valid)
- goto out;
- be = cpu_to_be32(index);
-- ret = read_smc(APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
-+ ret = read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
- if (ret)
- goto out;
-- ret = read_smc(APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
-+ ret = read_smc(smc, APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
- if (ret)
- goto out;
-
-@@ -589,7 +596,7 @@ static int applesmc_init_smcreg_try(struct applesmc_device *smc)
- if (s->init_complete)
- return 0;
-
-- ret = read_register_count(&count);
-+ ret = read_register_count(smc, &count);
- if (ret)
- return ret;
-
-@@ -1468,7 +1475,7 @@ static int __init applesmc_init(void)
- goto out;
- }
-
-- if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
-+ if (!request_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS,
- "applesmc")) {
- ret = -ENXIO;
- goto out;
-@@ -1490,7 +1497,7 @@ static int __init applesmc_init(void)
- out_driver:
- platform_driver_unregister(&applesmc_driver);
- out_region:
-- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
-+ release_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS);
- out:
- pr_warn("driver init failed (ret=%d)!\n", ret);
- return ret;
-@@ -1500,7 +1507,7 @@ static void __exit applesmc_exit(void)
- {
- platform_device_unregister(pdev);
- platform_driver_unregister(&applesmc_driver);
-- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
-+ release_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS);
- }
-
- module_init(applesmc_init);
---
-2.30.0
-
-From ee3d4bf4a01bc94553bde2ae3e806a63a13faa12 Mon Sep 17 00:00:00 2001
-From: Paul Pawlowski <paul@mrarm.io>
-Date: Sun, 17 Nov 2019 23:12:08 +0100
-Subject: [PATCH 3/6] applesmc: switch to acpi_device (from platform)
-
-This change makes the change from platform_device
-to acpi_device. The rationale for this change is
-that on T2 Macs, an additional FixedMemory32
-region is needed for device operation, and it can
-be easily resolved via ACPI tables (this will be
-done in another commit).
-
-Additionally, on older Macs, the OS X driver also
-looks for the specified ACPI device to resolve
-its memory regions, and therefore this change
-should not result in any incompatibilities.
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 125 ++++++++++++++++++++++++++-------------
- 1 file changed, 85 insertions(+), 40 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 39ed0bb21365..bdaaf696f7b6 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -19,7 +19,7 @@
- #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-
- #include <linux/delay.h>
--#include <linux/platform_device.h>
-+#include <linux/acpi.h>
- #include <linux/input.h>
- #include <linux/kernel.h>
- #include <linux/slab.h>
-@@ -35,7 +35,6 @@
- #include <linux/err.h>
- #include <linux/bits.h>
-
--#define APPLESMC_PORT_BASE 0x300
- /* data port used by Apple SMC */
- #define APPLESMC_DATA_PORT 0
- /* command/status port used by Apple SMC */
-@@ -138,9 +137,10 @@ struct applesmc_registers {
- };
-
- struct applesmc_device {
-- struct platform_device *dev;
-+ struct acpi_device *dev;
- struct applesmc_registers reg;
-
-+ bool port_base_set;
- u16 port_base;
-
- s16 rest_x;
-@@ -692,9 +692,13 @@ static int applesmc_init_smcreg(struct applesmc_device *smc)
- }
-
- /* Device model stuff */
-+
-+static int applesmc_init_resources(struct applesmc_device *smc);
-+static void applesmc_free_resources(struct applesmc_device *smc);
- static int applesmc_create_modules(struct applesmc_device *smc);
- static void applesmc_destroy_modules(struct applesmc_device *smc);
--static int applesmc_probe(struct platform_device *dev)
-+
-+static int applesmc_add(struct acpi_device *dev)
- {
- struct applesmc_device *smc;
- int ret;
-@@ -705,12 +709,16 @@ static int applesmc_probe(struct platform_device *dev)
- smc->dev = dev;
- mutex_init(&smc->reg.mutex);
-
-- platform_set_drvdata(dev, smc);
-+ dev_set_drvdata(&dev->dev, smc);
-
-- ret = applesmc_init_smcreg(smc);
-+ ret = applesmc_init_resources(smc);
- if (ret)
- goto out_mem;
-
-+ ret = applesmc_init_smcreg(smc);
-+ if (ret)
-+ goto out_res;
-+
- applesmc_device_init(smc);
-
- ret = applesmc_create_modules(smc);
-@@ -721,20 +729,23 @@ static int applesmc_probe(struct platform_device *dev)
-
- out_reg:
- applesmc_destroy_smcreg(smc);
-+out_res:
-+ applesmc_free_resources(smc);
- out_mem:
-- platform_set_drvdata(dev, NULL);
-+ dev_set_drvdata(&dev->dev, NULL);
- mutex_destroy(&smc->reg.mutex);
- kfree(smc);
-
- return ret;
- }
-
--static int applesmc_remove(struct platform_device *dev)
-+static int applesmc_remove(struct acpi_device *dev)
- {
-- struct applesmc_device *smc = platform_get_drvdata(dev);
-+ struct applesmc_device *smc = dev_get_drvdata(&dev->dev);
-
- applesmc_destroy_modules(smc);
- applesmc_destroy_smcreg(smc);
-+ applesmc_free_resources(smc);
-
- mutex_destroy(&smc->reg.mutex);
- kfree(smc);
-@@ -742,6 +753,52 @@ static int applesmc_remove(struct platform_device *dev)
- return 0;
- }
-
-+static acpi_status applesmc_walk_resources(struct acpi_resource *res,
-+ void *data)
-+{
-+ struct applesmc_device *smc = data;
-+
-+ switch (res->type) {
-+ case ACPI_RESOURCE_TYPE_IO:
-+ if (!smc->port_base_set) {
-+ if (res->data.io.address_length < APPLESMC_NR_PORTS)
-+ return AE_ERROR;
-+ smc->port_base = res->data.io.minimum;
-+ smc->port_base_set = true;
-+ }
-+ return AE_OK;
-+
-+ case ACPI_RESOURCE_TYPE_END_TAG:
-+ if (smc->port_base_set)
-+ return AE_OK;
-+ else
-+ return AE_NOT_FOUND;
-+
-+ default:
-+ return AE_OK;
-+ }
-+}
-+
-+static int applesmc_init_resources(struct applesmc_device *smc)
-+{
-+ int ret;
-+
-+ ret = acpi_walk_resources(smc->dev->handle, METHOD_NAME__CRS,
-+ applesmc_walk_resources, smc);
-+ if (ACPI_FAILURE(ret))
-+ return -ENXIO;
-+
-+ if (!request_region(smc->port_base, APPLESMC_NR_PORTS, "applesmc"))
-+ return -ENXIO;
-+
-+ return 0;
-+}
-+
-+static void applesmc_free_resources(struct applesmc_device *smc)
-+{
-+ release_region(smc->port_base, APPLESMC_NR_PORTS);
-+}
-+
- /* Synchronize device with memorized backlight state */
- static int applesmc_pm_resume(struct device *dev)
- {
-@@ -763,18 +820,28 @@ static int applesmc_pm_restore(struct device *dev)
- return applesmc_pm_resume(dev);
- }
-
-+static const struct acpi_device_id applesmc_ids[] = {
-+ {"APP0001", 0},
-+ {"", 0},
-+};
-+
- static const struct dev_pm_ops applesmc_pm_ops = {
- .resume = applesmc_pm_resume,
- .restore = applesmc_pm_restore,
- };
-
--static struct platform_driver applesmc_driver = {
-- .probe = applesmc_probe,
-- .remove = applesmc_remove,
-- .driver = {
-- .name = "applesmc",
-- .pm = &applesmc_pm_ops,
-+static struct acpi_driver applesmc_driver = {
-+ .name = "applesmc",
-+ .class = "applesmc",
-+ .ids = applesmc_ids,
-+ .ops = {
-+ .add = applesmc_add,
-+ .remove = applesmc_remove
- },
-+ .drv = {
-+ .pm = &applesmc_pm_ops
-+ },
-+ .owner = THIS_MODULE
- };
-
- /*
-@@ -1262,7 +1329,6 @@ static int applesmc_create_nodes(struct applesmc_device *smc,
- static int applesmc_create_accelerometer(struct applesmc_device *smc)
- {
- int ret;
--
- if (!smc->reg.has_accelerometer)
- return 0;
-
-@@ -1463,8 +1529,6 @@ static void applesmc_destroy_modules(struct applesmc_device *smc)
- applesmc_destroy_nodes(smc, info_group);
- }
-
--static struct platform_device *pdev;
--
- static int __init applesmc_init(void)
- {
- int ret;
-@@ -1475,29 +1539,12 @@ static int __init applesmc_init(void)
- goto out;
- }
-
-- if (!request_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS,
-- "applesmc")) {
-- ret = -ENXIO;
-- goto out;
-- }
--
-- ret = platform_driver_register(&applesmc_driver);
-+ ret = acpi_bus_register_driver(&applesmc_driver);
- if (ret)
-- goto out_region;
--
-- pdev = platform_device_register_simple("applesmc", APPLESMC_DATA_PORT,
-- NULL, 0);
-- if (IS_ERR(pdev)) {
-- ret = PTR_ERR(pdev);
-- goto out_driver;
-- }
-+ goto out;
-
- return 0;
-
--out_driver:
-- platform_driver_unregister(&applesmc_driver);
--out_region:
-- release_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS);
- out:
- pr_warn("driver init failed (ret=%d)!\n", ret);
- return ret;
-@@ -1505,9 +1552,7 @@ static int __init applesmc_init(void)
-
- static void __exit applesmc_exit(void)
- {
-- platform_device_unregister(pdev);
-- platform_driver_unregister(&applesmc_driver);
-- release_region(APPLESMC_PORT_BASE, APPLESMC_NR_PORTS);
-+ acpi_bus_unregister_driver(&applesmc_driver);
- }
-
- module_init(applesmc_init);
---
-2.30.0
-
-From 43df89a1377782788760808d8ea4bcf0730effbb Mon Sep 17 00:00:00 2001
-From: Paul Pawlowski <paul@mrarm.io>
-Date: Sun, 17 Nov 2019 23:12:14 +0100
-Subject: [PATCH 4/6] applesmc: key interface wrappers
-
-This change replaces the read_smc and write_smc
-methods with wrappers, additionally removing the
-command id parameter from them (and introducing
-get_smc_key_by_index and get_smc_key_info).
-
-This is done as to allow simple implementation
-replacement on T2 Macs. The newly introduced
-methods mentioned in the previous paragraph need
-special handling on T2 and as such had to be
-separated.
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 119 ++++++++++++++++++++++++++-------------
- 1 file changed, 79 insertions(+), 40 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index bdaaf696f7b6..3017d8ca2c79 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -172,7 +172,7 @@ static const int debug;
- * run out past 500ms.
- */
-
--static int wait_status(struct applesmc_device *smc, u8 val, u8 mask)
-+static int port_wait_status(struct applesmc_device *smc, u8 val, u8 mask)
- {
- u8 status;
- int us;
-@@ -190,13 +190,13 @@ static int wait_status(struct applesmc_device *smc, u8 val, u8 mask)
- return -EIO;
- }
-
--/* send_byte - Write to SMC data port. Callers must hold applesmc_lock. */
-+/* port_send_byte - Write to SMC data port. Callers must hold applesmc_lock. */
-
--static int send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
-+static int port_send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
- {
- int status;
-
-- status = wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
-+ status = port_wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
- if (status)
- return status;
- /*
-@@ -205,7 +205,7 @@ static int send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
- * this extra read may not happen if status returns both
- * simultaneously and this would appear to be required.
- */
-- status = wait_status(smc, SMC_STATUS_BUSY, SMC_STATUS_BUSY);
-+ status = port_wait_status(smc, SMC_STATUS_BUSY, SMC_STATUS_BUSY);
- if (status)
- return status;
-
-@@ -213,15 +213,16 @@ static int send_byte(struct applesmc_device *smc, u8 cmd, u16 port)
- return 0;
- }
-
--/* send_command - Write a command to the SMC. Callers must hold applesmc_lock. */
-+/* port_send_command - Write a command to the SMC. Callers must hold applesmc_lock. */
-
--static int send_command(struct applesmc_device *smc, u8 cmd)
-+static int port_send_command(struct applesmc_device *smc, u8 cmd)
- {
- int ret;
-
-- ret = wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
-+ ret = port_wait_status(smc, 0, SMC_STATUS_IB_CLOSED);
- if (ret)
- return ret;
-+
- outb(cmd, smc->port_base + APPLESMC_CMD_PORT);
- return 0;
- }
-@@ -232,53 +233,53 @@ static int send_command(struct applesmc_device *smc, u8 cmd)
- * If busy is stuck high after the command then the SMC is jammed.
- */
-
--static int smc_sane(struct applesmc_device *smc)
-+static int port_smc_sane(struct applesmc_device *smc)
- {
- int ret;
-
-- ret = wait_status(smc, 0, SMC_STATUS_BUSY);
-+ ret = port_wait_status(smc, 0, SMC_STATUS_BUSY);
- if (!ret)
- return ret;
-- ret = send_command(smc, APPLESMC_READ_CMD);
-+ ret = port_send_command(smc, APPLESMC_READ_CMD);
- if (ret)
- return ret;
-- return wait_status(smc, 0, SMC_STATUS_BUSY);
-+ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
- }
-
--static int send_argument(struct applesmc_device *smc, const char *key)
-+static int port_send_argument(struct applesmc_device *smc, const char *key)
- {
- int i;
-
- for (i = 0; i < 4; i++)
-- if (send_byte(smc, key[i], APPLESMC_DATA_PORT))
-+ if (port_send_byte(smc, key[i], APPLESMC_DATA_PORT))
- return -EIO;
- return 0;
- }
-
--static int read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+static int port_read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
- u8 *buffer, u8 len)
- {
- u8 status, data = 0;
- int i;
- int ret;
-
-- ret = smc_sane(smc);
-+ ret = port_smc_sane(smc);
- if (ret)
- return ret;
-
-- if (send_command(smc, cmd) || send_argument(smc, key)) {
-+ if (port_send_command(smc, cmd) || port_send_argument(smc, key)) {
- pr_warn("%.4s: read arg fail\n", key);
- return -EIO;
- }
-
- /* This has no effect on newer (2012) SMCs */
-- if (send_byte(smc, len, APPLESMC_DATA_PORT)) {
-+ if (port_send_byte(smc, len, APPLESMC_DATA_PORT)) {
- pr_warn("%.4s: read len fail\n", key);
- return -EIO;
- }
-
- for (i = 0; i < len; i++) {
-- if (wait_status(smc,
-+ if (port_wait_status(smc,
- SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY,
- SMC_STATUS_AWAITING_DATA | SMC_STATUS_BUSY)) {
- pr_warn("%.4s: read data[%d] fail\n", key, i);
-@@ -298,37 +299,80 @@ static int read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
- if (i)
- pr_warn("flushed %d bytes, last value is: %d\n", i, data);
-
-- return wait_status(smc, 0, SMC_STATUS_BUSY);
-+ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
- }
-
--static int write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+static int port_write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
- const u8 *buffer, u8 len)
- {
- int i;
- int ret;
-
-- ret = smc_sane(smc);
-+ ret = port_smc_sane(smc);
- if (ret)
- return ret;
-
-- if (send_command(smc, cmd) || send_argument(smc, key)) {
-+ if (port_send_command(smc, cmd) || port_send_argument(smc, key)) {
- pr_warn("%s: write arg fail\n", key);
- return -EIO;
- }
-
-- if (send_byte(smc, len, APPLESMC_DATA_PORT)) {
-+ if (port_send_byte(smc, len, APPLESMC_DATA_PORT)) {
- pr_warn("%.4s: write len fail\n", key);
- return -EIO;
- }
-
- for (i = 0; i < len; i++) {
-- if (send_byte(smc, buffer[i], APPLESMC_DATA_PORT)) {
-+ if (port_send_byte(smc, buffer[i], APPLESMC_DATA_PORT)) {
- pr_warn("%s: write data fail\n", key);
- return -EIO;
- }
- }
-
-- return wait_status(smc, 0, SMC_STATUS_BUSY);
-+ return port_wait_status(smc, 0, SMC_STATUS_BUSY);
-+}
-+
-+static int port_get_smc_key_info(struct applesmc_device *smc,
-+ const char *key, struct applesmc_entry *info)
-+{
-+ int ret;
-+ u8 raw[6];
-+
-+ ret = port_read_smc(smc, APPLESMC_GET_KEY_TYPE_CMD, key, raw, 6);
-+ if (ret)
-+ return ret;
-+ info->len = raw[0];
-+ memcpy(info->type, &raw[1], 4);
-+ info->flags = raw[5];
-+ return 0;
-+}
-+
-+static int read_smc(struct applesmc_device *smc, const char *key,
-+ u8 *buffer, u8 len)
-+{
-+ return port_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
-+}
-+
-+static int write_smc(struct applesmc_device *smc, const char *key,
-+ const u8 *buffer, u8 len)
-+{
-+ return port_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
-+}
-+
-+static int get_smc_key_by_index(struct applesmc_device *smc,
-+ unsigned int index, char *key)
-+{
-+ __be32 be;
-+
-+ be = cpu_to_be32(index);
-+ return port_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
-+ (const char *) &be, (u8 *) key, 4);
-+}
-+
-+static int get_smc_key_info(struct applesmc_device *smc, const char *key,
-+ struct applesmc_entry *info)
-+{
-+ return port_get_smc_key_info(smc, key, info);
- }
-
- static int read_register_count(struct applesmc_device *smc,
-@@ -337,8 +381,8 @@ static int read_register_count(struct applesmc_device *smc,
- __be32 be;
- int ret;
-
-- ret = read_smc(smc, APPLESMC_READ_CMD, KEY_COUNT_KEY, (u8 *)&be, 4);
-- if (ret)
-+ ret = read_smc(smc, KEY_COUNT_KEY, (u8 *)&be, 4);
-+ if (ret < 0)
- return ret;
-
- *count = be32_to_cpu(be);
-@@ -360,7 +404,7 @@ static int applesmc_read_entry(struct applesmc_device *smc,
- if (entry->len != len)
- return -EINVAL;
- mutex_lock(&smc->reg.mutex);
-- ret = read_smc(smc, APPLESMC_READ_CMD, entry->key, buf, len);
-+ ret = read_smc(smc, entry->key, buf, len);
- mutex_unlock(&smc->reg.mutex);
-
- return ret;
-@@ -374,7 +418,7 @@ static int applesmc_write_entry(struct applesmc_device *smc,
- if (entry->len != len)
- return -EINVAL;
- mutex_lock(&smc->reg.mutex);
-- ret = write_smc(smc, APPLESMC_WRITE_CMD, entry->key, buf, len);
-+ ret = write_smc(smc, entry->key, buf, len);
- mutex_unlock(&smc->reg.mutex);
- return ret;
- }
-@@ -383,8 +427,7 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(
- struct applesmc_device *smc, int index)
- {
- struct applesmc_entry *cache = &smc->reg.cache[index];
-- u8 key[4], info[6];
-- __be32 be;
-+ char key[4];
- int ret = 0;
-
- if (cache->valid)
-@@ -394,18 +437,14 @@ static const struct applesmc_entry *applesmc_get_entry_by_index(
-
- if (cache->valid)
- goto out;
-- be = cpu_to_be32(index);
-- ret = read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
-+ ret = get_smc_key_by_index(smc, index, key);
- if (ret)
- goto out;
-- ret = read_smc(smc, APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
-+ memcpy(cache->key, key, 4);
-+
-+ ret = get_smc_key_info(smc, key, cache);
- if (ret)
- goto out;
--
-- memcpy(cache->key, key, 4);
-- cache->len = info[0];
-- memcpy(cache->type, &info[1], 4);
-- cache->flags = info[5];
- cache->valid = true;
-
- out:
---
-2.30.0
-
-From 799e7a54c62a36007f7874c58d7dac87c9651759 Mon Sep 17 00:00:00 2001
-From: Aun-Ali Zaidi <admin@kodeit.net>
-Date: Sun, 17 Nov 2019 23:12:16 +0100
-Subject: [PATCH 5/6] applesmc: basic mmio interface implementation
-
-This change introduces a basic MMIO-based
-interface implementation required to communicate
-with the SMC on T2 Macs. The MMIO interface is
-enabled only when it's supported on the running
-system.
-
-The MMIO interface replaces legacy port-based SMC
-key reads, writes and metadata requests (getting
-key by index and getting key info).
-
-(Based on patch by @mcmrarm)
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 237 ++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 231 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 3017d8ca2c79..2d23bb9ad9dd 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -42,6 +42,18 @@
-
- #define APPLESMC_NR_PORTS 32 /* 0x300-0x31f */
-
-+#define APPLESMC_IOMEM_KEY_DATA 0
-+#define APPLESMC_IOMEM_KEY_STATUS 0x4005
-+#define APPLESMC_IOMEM_KEY_NAME 0x78
-+#define APPLESMC_IOMEM_KEY_DATA_LEN 0x7D
-+#define APPLESMC_IOMEM_KEY_SMC_ID 0x7E
-+#define APPLESMC_IOMEM_KEY_CMD 0x7F
-+#define APPLESMC_IOMEM_MIN_SIZE 0x4006
-+
-+#define APPLESMC_IOMEM_KEY_TYPE_CODE 0
-+#define APPLESMC_IOMEM_KEY_TYPE_DATA_LEN 5
-+#define APPLESMC_IOMEM_KEY_TYPE_FLAGS 6
-+
- #define APPLESMC_MAX_DATA_LENGTH 32
-
- /* Apple SMC status bits */
-@@ -138,10 +150,13 @@ struct applesmc_registers {
-
- struct applesmc_device {
- struct acpi_device *dev;
-+ struct device *ldev;
- struct applesmc_registers reg;
-
-- bool port_base_set;
-+ bool port_base_set, iomem_base_set;
- u16 port_base;
-+ u8 *__iomem iomem_base;
-+ u32 iomem_base_addr, iomem_base_size;
-
- s16 rest_x;
- s16 rest_y;
-@@ -347,16 +362,156 @@ static int port_get_smc_key_info(struct applesmc_device *smc,
- return 0;
- }
-
-+
-+/*
-+ * MMIO based communication.
-+ * TODO: Use updated mechanism for cmd timeout/retry
-+ */
-+
-+static void iomem_clear_status(struct applesmc_device *smc)
-+{
-+ if (ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS))
-+ iowrite8(0, smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
-+}
-+
-+static int iomem_wait_read(struct applesmc_device *smc)
-+{
-+ u8 status;
-+ int us;
-+ int i;
-+
-+ us = APPLESMC_MIN_WAIT;
-+ for (i = 0; i < 24 ; i++) {
-+ status = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
-+ if (status & 0x20)
-+ return 0;
-+ usleep_range(us, us * 2);
-+ if (i > 9)
-+ us <<= 1;
-+ }
-+
-+ dev_warn(smc->ldev, "%s... timeout\n", __func__);
-+ return -EIO;
-+}
-+
-+static int iomem_read_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+ u8 *buffer, u8 len)
-+{
-+ u8 err, remote_len;
-+ u32 key_int = *((u32 *) key);
-+
-+ iomem_clear_status(smc);
-+ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
-+ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
-+ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+
-+ if (iomem_wait_read(smc))
-+ return -EIO;
-+
-+ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+ if (err != 0) {
-+ dev_warn(smc->ldev, "read_smc_mmio(%x %8x/%.4s) failed: %u\n",
-+ cmd, key_int, key, err);
-+ return -EIO;
-+ }
-+
-+ if (cmd == APPLESMC_READ_CMD) {
-+ remote_len = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_DATA_LEN);
-+ if (remote_len != len) {
-+ dev_warn(smc->ldev,
-+ "read_smc_mmio(%x %8x/%.4s) failed: buffer length mismatch (remote = %u, requested = %u)\n",
-+ cmd, key_int, key, remote_len, len);
-+ return -EINVAL;
-+ }
-+ } else {
-+ remote_len = len;
-+ }
-+
-+ memcpy_fromio(buffer, smc->iomem_base + APPLESMC_IOMEM_KEY_DATA,
-+ remote_len);
-+
-+ dev_dbg(smc->ldev, "read_smc_mmio(%x %8x/%.4s): buflen=%u reslen=%u\n",
-+ cmd, key_int, key, len, remote_len);
-+ print_hex_dump_bytes("read_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, remote_len);
-+ return 0;
-+}
-+
-+static int iomem_get_smc_key_type(struct applesmc_device *smc, const char *key,
-+ struct applesmc_entry *e)
-+{
-+ u8 err;
-+ u8 cmd = APPLESMC_GET_KEY_TYPE_CMD;
-+ u32 key_int = *((u32 *) key);
-+
-+ iomem_clear_status(smc);
-+ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
-+ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
-+ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+
-+ if (iomem_wait_read(smc))
-+ return -EIO;
-+
-+ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+ if (err != 0) {
-+ dev_warn(smc->ldev, "get_smc_key_type_mmio(%.4s) failed: %u\n", key, err);
-+ return -EIO;
-+ }
-+
-+ e->len = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_DATA_LEN);
-+ *((uint32_t *) e->type) = ioread32(
-+ smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_CODE);
-+ e->flags = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_TYPE_FLAGS);
-+
-+ dev_dbg(smc->ldev, "get_smc_key_type_mmio(%.4s): len=%u type=%.4s flags=%x\n",
-+ key, e->len, e->type, e->flags);
-+ return 0;
-+}
-+
-+static int iomem_write_smc(struct applesmc_device *smc, u8 cmd, const char *key,
-+ const u8 *buffer, u8 len)
-+{
-+ u8 err;
-+ u32 key_int = *((u32 *) key);
-+
-+ iomem_clear_status(smc);
-+ iowrite32(key_int, smc->iomem_base + APPLESMC_IOMEM_KEY_NAME);
-+ memcpy_toio(smc->iomem_base + APPLESMC_IOMEM_KEY_DATA, buffer, len);
-+ iowrite32(len, smc->iomem_base + APPLESMC_IOMEM_KEY_DATA_LEN);
-+ iowrite32(0, smc->iomem_base + APPLESMC_IOMEM_KEY_SMC_ID);
-+ iowrite32(cmd, smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+
-+ if (iomem_wait_read(smc))
-+ return -EIO;
-+
-+ err = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_CMD);
-+ if (err != 0) {
-+ dev_warn(smc->ldev, "write_smc_mmio(%x %.4s) failed: %u\n", cmd, key, err);
-+ print_hex_dump_bytes("write_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, len);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(smc->ldev, "write_smc_mmio(%x %.4s): buflen=%u\n", cmd, key, len);
-+ print_hex_dump_bytes("write_smc_mmio(): ", DUMP_PREFIX_NONE, buffer, len);
-+ return 0;
-+}
-+
-+
- static int read_smc(struct applesmc_device *smc, const char *key,
- u8 *buffer, u8 len)
- {
-- return port_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
-+ if (smc->iomem_base_set)
-+ return iomem_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
-+ else
-+ return port_read_smc(smc, APPLESMC_READ_CMD, key, buffer, len);
- }
-
- static int write_smc(struct applesmc_device *smc, const char *key,
- const u8 *buffer, u8 len)
- {
-- return port_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
-+ if (smc->iomem_base_set)
-+ return iomem_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
-+ else
-+ return port_write_smc(smc, APPLESMC_WRITE_CMD, key, buffer, len);
- }
-
- static int get_smc_key_by_index(struct applesmc_device *smc,
-@@ -365,14 +520,21 @@ static int get_smc_key_by_index(struct applesmc_device *smc,
- __be32 be;
-
- be = cpu_to_be32(index);
-- return port_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
-- (const char *) &be, (u8 *) key, 4);
-+ if (smc->iomem_base_set)
-+ return iomem_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
-+ (const char *) &be, (u8 *) key, 4);
-+ else
-+ return port_read_smc(smc, APPLESMC_GET_KEY_BY_INDEX_CMD,
-+ (const char *) &be, (u8 *) key, 4);
- }
-
- static int get_smc_key_info(struct applesmc_device *smc, const char *key,
- struct applesmc_entry *info)
- {
-- return port_get_smc_key_info(smc, key, info);
-+ if (smc->iomem_base_set)
-+ return iomem_get_smc_key_type(smc, key, info);
-+ else
-+ return port_get_smc_key_info(smc, key, info);
- }
-
- static int read_register_count(struct applesmc_device *smc,
-@@ -746,6 +908,7 @@ static int applesmc_add(struct acpi_device *dev)
- if (!smc)
- return -ENOMEM;
- smc->dev = dev;
-+ smc->ldev = &dev->dev;
- mutex_init(&smc->reg.mutex);
-
- dev_set_drvdata(&dev->dev, smc);
-@@ -807,6 +970,20 @@ static acpi_status applesmc_walk_resources(struct acpi_resource *res,
- }
- return AE_OK;
-
-+ case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
-+ if (!smc->iomem_base_set) {
-+ if (res->data.fixed_memory32.address_length <
-+ APPLESMC_IOMEM_MIN_SIZE) {
-+ dev_warn(smc->ldev, "found iomem but it's too small: %u\n",
-+ res->data.fixed_memory32.address_length);
-+ return AE_OK;
-+ }
-+ smc->iomem_base_addr = res->data.fixed_memory32.address;
-+ smc->iomem_base_size = res->data.fixed_memory32.address_length;
-+ smc->iomem_base_set = true;
-+ }
-+ return AE_OK;
-+
- case ACPI_RESOURCE_TYPE_END_TAG:
- if (smc->port_base_set)
- return AE_OK;
-@@ -818,6 +995,8 @@ static acpi_status applesmc_walk_resources(struct acpi_resource *res,
- }
- }
-
-+static int applesmc_try_enable_iomem(struct applesmc_device *smc);
-+
- static int applesmc_init_resources(struct applesmc_device *smc)
- {
- int ret;
-@@ -830,11 +1009,57 @@ static int applesmc_init_resources(struct applesmc_device *smc)
- if (!request_region(smc->port_base, APPLESMC_NR_PORTS, "applesmc"))
- return -ENXIO;
-
-+ if (smc->iomem_base_set) {
-+ if (applesmc_try_enable_iomem(smc))
-+ smc->iomem_base_set = false;
-+ }
-+
- return 0;
- }
-
-+static int applesmc_try_enable_iomem(struct applesmc_device *smc)
-+{
-+ u8 test_val, ldkn_version;
-+
-+ dev_dbg(smc->ldev, "Trying to enable iomem based communication\n");
-+ smc->iomem_base = ioremap(smc->iomem_base_addr, smc->iomem_base_size);
-+ if (!smc->iomem_base)
-+ goto out;
-+
-+ /* Apple's driver does this check for some reason */
-+ test_val = ioread8(smc->iomem_base + APPLESMC_IOMEM_KEY_STATUS);
-+ if (test_val == 0xff) {
-+ dev_warn(smc->ldev,
-+ "iomem enable failed: initial status is 0xff (is %x)\n",
-+ test_val);
-+ goto out_iomem;
-+ }
-+
-+ if (read_smc(smc, "LDKN", &ldkn_version, 1)) {
-+ dev_warn(smc->ldev, "iomem enable failed: ldkn read failed\n");
-+ goto out_iomem;
-+ }
-+
-+ if (ldkn_version < 2) {
-+ dev_warn(smc->ldev,
-+ "iomem enable failed: ldkn version %u is less than minimum (2)\n",
-+ ldkn_version);
-+ goto out_iomem;
-+ }
-+
-+ return 0;
-+
-+out_iomem:
-+ iounmap(smc->iomem_base);
-+
-+out:
-+ return -ENXIO;
-+}
-+
- static void applesmc_free_resources(struct applesmc_device *smc)
- {
-+ if (smc->iomem_base_set)
-+ iounmap(smc->iomem_base);
- release_region(smc->port_base, APPLESMC_NR_PORTS);
- }
-
---
-2.30.0
-
-From 4e63e9b77422aae8e7411ddc7a8458c2585c86df Mon Sep 17 00:00:00 2001
-From: Paul Pawlowski <paul@mrarm.io>
-Date: Sun, 17 Nov 2019 23:12:18 +0100
-Subject: [PATCH 6/6] applesmc: fan support on T2 Macs
-
-T2 Macs changed the fan values from shorts to
-floats, and changed the fan manual override
-setting from a bitmask to a per-fan boolean
-named F0Md (thanks to @kleuter for mentioning
-it).
-
-A minimal soft-float implementation has been
-written for convert floats to integers (and vice
-versa).
-
-Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
----
- drivers/hwmon/applesmc.c | 119 +++++++++++++++++++++++++++++++++------
- 1 file changed, 102 insertions(+), 17 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 2d23bb9ad9dd..0938227be612 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -87,6 +87,7 @@
- #define FAN_ID_FMT "F%dID" /* r-o char[16] */
-
- #define TEMP_SENSOR_TYPE "sp78"
-+#define FLOAT_TYPE "flt "
-
- /* List of keys used to read/write fan speeds */
- static const char *const fan_speed_fmt[] = {
-@@ -96,6 +97,7 @@ static const char *const fan_speed_fmt[] = {
- "F%dSf", /* safe speed - not all models */
- "F%dTg", /* target speed (manual: rw) */
- };
-+#define FAN_MANUAL_FMT "F%dMd"
-
- #define INIT_TIMEOUT_MSECS 5000 /* wait up to 5s for device init ... */
- #define INIT_WAIT_MSECS 50 /* ... in 50ms increments */
-@@ -734,6 +736,42 @@ static int applesmc_read_s16(struct applesmc_device *smc,
- return 0;
- }
-
-+/**
-+ * applesmc_float_to_u32 - Retrieve the integral part of a float.
-+ * This is needed because Apple made fans use float values in the T2.
-+ * The fractional point is not significantly useful though, and the integral
-+ * part can be easily extracted.
-+ */
-+static inline u32 applesmc_float_to_u32(u32 d)
-+{
-+ u8 sign = (u8) ((d >> 31) & 1);
-+ s32 exp = (s32) ((d >> 23) & 0xff) - 0x7f;
-+ u32 fr = d & ((1u << 23) - 1);
-+
-+ if (sign || exp < 0)
-+ return 0;
-+
-+ return (u32) ((1u << exp) + (fr >> (23 - exp)));
-+}
-+
-+/**
-+ * applesmc_u32_to_float - Convert an u32 into a float.
-+ * See applesmc_float_to_u32 for a rationale.
-+ */
-+static inline u32 applesmc_u32_to_float(u32 d)
-+{
-+ u32 dc = d, bc = 0, exp;
-+
-+ if (!d)
-+ return 0;
-+
-+ while (dc >>= 1)
-+ ++bc;
-+ exp = 0x7f + bc;
-+
-+ return (u32) ((exp << 23) |
-+ ((d << (23 - (exp - 0x7f))) & ((1u << 23) - 1)));
-+}
- /*
- * applesmc_device_init - initialize the accelerometer. Can sleep.
- */
-@@ -1242,6 +1280,7 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
- struct applesmc_device *smc = dev_get_drvdata(dev);
-+ const struct applesmc_entry *entry;
- int ret;
- unsigned int speed = 0;
- char newkey[5];
-@@ -1250,11 +1289,21 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
- scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
- to_index(attr));
-
-- ret = applesmc_read_key(smc, newkey, buffer, 2);
-+ entry = applesmc_get_entry_by_key(smc, newkey);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+
-+ if (!strcmp(entry->type, FLOAT_TYPE)) {
-+ ret = applesmc_read_entry(smc, entry, (u8 *) &speed, 4);
-+ speed = applesmc_float_to_u32(speed);
-+ } else {
-+ ret = applesmc_read_entry(smc, entry, buffer, 2);
-+ speed = ((buffer[0] << 8 | buffer[1]) >> 2);
-+ }
-+
- if (ret)
- return ret;
-
-- speed = ((buffer[0] << 8 | buffer[1]) >> 2);
- return sysfs_emit(sysfsbuf, "%u\n", speed);
- }
-
-@@ -1263,6 +1312,7 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- const char *sysfsbuf, size_t count)
- {
- struct applesmc_device *smc = dev_get_drvdata(dev);
-+ const struct applesmc_entry *entry;
- int ret;
- unsigned long speed;
- char newkey[5];
-@@ -1274,9 +1324,18 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- scnprintf(newkey, sizeof(newkey), fan_speed_fmt[to_option(attr)],
- to_index(attr));
-
-- buffer[0] = (speed >> 6) & 0xff;
-- buffer[1] = (speed << 2) & 0xff;
-- ret = applesmc_write_key(smc, newkey, buffer, 2);
-+ entry = applesmc_get_entry_by_key(smc, newkey);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+
-+ if (!strcmp(entry->type, FLOAT_TYPE)) {
-+ speed = applesmc_u32_to_float(speed);
-+ ret = applesmc_write_entry(smc, entry, (u8 *) &speed, 4);
-+ } else {
-+ buffer[0] = (speed >> 6) & 0xff;
-+ buffer[1] = (speed << 2) & 0xff;
-+ ret = applesmc_write_key(smc, newkey, buffer, 2);
-+ }
-
- if (ret)
- return ret;
-@@ -1291,12 +1350,26 @@ static ssize_t applesmc_show_fan_manual(struct device *dev,
- int ret;
- u16 manual = 0;
- u8 buffer[2];
-+ char newkey[5];
-+ bool has_newkey = false;
-+
-+ scnprintf(newkey, sizeof(newkey), FAN_MANUAL_FMT, to_index(attr));
-+
-+ ret = applesmc_has_key(smc, newkey, &has_newkey);
-+ if (ret)
-+ return ret;
-+
-+ if (has_newkey) {
-+ ret = applesmc_read_key(smc, newkey, buffer, 1);
-+ manual = buffer[0];
-+ } else {
-+ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
-+ manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
-+ }
-
-- ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
- if (ret)
- return ret;
-
-- manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
- return sysfs_emit(sysfsbuf, "%d\n", manual);
- }
-
-@@ -1307,27 +1380,39 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- struct applesmc_device *smc = dev_get_drvdata(dev);
- int ret;
- u8 buffer[2];
-+ char newkey[5];
-+ bool has_newkey = false;
- unsigned long input;
- u16 val;
-
- if (kstrtoul(sysfsbuf, 10, &input) < 0)
- return -EINVAL;
-
-- ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
-+ scnprintf(newkey, sizeof(newkey), FAN_MANUAL_FMT, to_index(attr));
-+
-+ ret = applesmc_has_key(smc, newkey, &has_newkey);
- if (ret)
-- goto out;
-+ return ret;
-
-- val = (buffer[0] << 8 | buffer[1]);
-+ if (has_newkey) {
-+ buffer[0] = input & 1;
-+ ret = applesmc_write_key(smc, newkey, buffer, 1);
-+ } else {
-+ ret = applesmc_read_key(smc, FANS_MANUAL, buffer, 2);
-+ val = (buffer[0] << 8 | buffer[1]);
-+ if (ret)
-+ goto out;
-
-- if (input)
-- val = val | (0x01 << to_index(attr));
-- else
-- val = val & ~(0x01 << to_index(attr));
-+ if (input)
-+ val = val | (0x01 << to_index(attr));
-+ else
-+ val = val & ~(0x01 << to_index(attr));
-
-- buffer[0] = (val >> 8) & 0xFF;
-- buffer[1] = val & 0xFF;
-+ buffer[0] = (val >> 8) & 0xFF;
-+ buffer[1] = val & 0xFF;
-
-- ret = applesmc_write_key(smc, FANS_MANUAL, buffer, 2);
-+ ret = applesmc_write_key(smc, FANS_MANUAL, buffer, 2);
-+ }
-
- out:
- if (ret)
---
-2.30.0
-
-From 58868e6f356229eab48cfdee1603011653a19c79 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <redecorating@protonmail.com>
-Date: Sun, 9 Oct 2022 15:59:01 +0530
-Subject: [PATCH] applesmc: Add iMacPro to applesmc_whitelist
-
-The iMacPro1,1 is the only iMacPro released before the line was
-discontinued. Add it to the applesmc_whitelist.
-
-Signed-off-by: Orlando Chamberlain <redecorating@protonmail.com>
----
- drivers/hwmon/applesmc.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 8b3f73fcb..493f95bb0 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -1804,6 +1804,10 @@ static const struct dmi_system_id applesmc_whitelist[] __initconst = {
- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
- DMI_MATCH(DMI_PRODUCT_NAME, "Macmini") },
- },
-+ { applesmc_dmi_match, "Apple iMacPro", {
-+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "iMacPro") },
-+ },
- { applesmc_dmi_match, "Apple MacPro", {
- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
- DMI_MATCH(DMI_PRODUCT_NAME, "MacPro") },
---
-2.34.1
-
-From e52b0fad357b6203691942831715fce4f26d66e2 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Tue, 24 Jan 2023 15:46:48 +1100
-Subject: [PATCH 1/1] applesmc: make applesmc_remove void
-
-for linux6.2 compatibility
----
- drivers/hwmon/applesmc.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index d071130ff68d..12be9269a314 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -979,7 +979,7 @@ static int applesmc_add(struct acpi_device *dev)
- return ret;
- }
-
--static int applesmc_remove(struct acpi_device *dev)
-+static void applesmc_remove(struct acpi_device *dev)
- {
- struct applesmc_device *smc = dev_get_drvdata(&dev->dev);
-
-@@ -990,7 +990,7 @@ static int applesmc_remove(struct acpi_device *dev)
- mutex_destroy(&smc->reg.mutex);
- kfree(smc);
-
-- return 0;
-+ return;
- }
-
- static acpi_status applesmc_walk_resources(struct acpi_resource *res,
---
-2.39.1
-
-From 38786c7979c8ece013b5b7d5cb07dc2aa40198be Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Mon, 30 Jan 2023 18:42:21 +1100
-Subject: [PATCH 1/1] applesmc: battery charge limiter
-
----
- drivers/hwmon/applesmc.c | 42 +++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 41 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index 12be9269a314..bc1eec74cfef 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -1478,6 +1478,35 @@ static void applesmc_brightness_set(struct led_classdev *led_cdev,
- dev_dbg(led_cdev->dev, "work was already on the queue.\n");
- }
-
-+static ssize_t applesmc_BCLM_store(struct device *dev,
-+ struct device_attribute *attr, char *sysfsbuf, size_t count)
-+{
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+ u8 val;
-+
-+ if (kstrtou8(sysfsbuf, 10, &val) < 0)
-+ return -EINVAL;
-+
-+ if (val < 0 || val > 100)
-+ return -EINVAL;
-+
-+ if (applesmc_write_key(smc, "BCLM", &val, 1))
-+ return -ENODEV;
-+ return count;
-+}
-+
-+static ssize_t applesmc_BCLM_show(struct device *dev,
-+ struct device_attribute *attr, char *sysfsbuf)
-+{
-+ struct applesmc_device *smc = dev_get_drvdata(dev);
-+ u8 val;
-+
-+ if (applesmc_read_key(smc, "BCLM", &val, 1))
-+ return -ENODEV;
-+
-+ return sysfs_emit(sysfsbuf, "%d\n", val);
-+}
-+
- static ssize_t applesmc_key_count_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-@@ -1612,6 +1641,11 @@ static struct applesmc_node_group temp_group[] = {
- { }
- };
-
-+static struct applesmc_node_group BCLM_group[] = {
-+ { "battery_charge_limit", applesmc_BCLM_show, applesmc_BCLM_store },
-+ { }
-+};
-+
- /* Module stuff */
-
- /*
-@@ -1830,10 +1864,13 @@ static int applesmc_create_modules(struct applesmc_device *smc)
- ret = applesmc_create_nodes(smc, info_group, 1);
- if (ret)
- goto out;
-+ ret = applesmc_create_nodes(smc, BCLM_group, 1);
-+ if (ret)
-+ goto out_info;
-
- ret = applesmc_create_nodes(smc, fan_group, smc->reg.fan_count);
- if (ret)
-- goto out_info;
-+ goto out_bclm;
-
- ret = applesmc_create_nodes(smc, temp_group, smc->reg.index_count);
- if (ret)
-@@ -1869,6 +1906,8 @@ static int applesmc_create_modules(struct applesmc_device *smc)
- applesmc_destroy_nodes(smc, temp_group);
- out_fans:
- applesmc_destroy_nodes(smc, fan_group);
-+out_bclm:
-+ applesmc_destroy_nodes(smc, BCLM_group);
- out_info:
- applesmc_destroy_nodes(smc, info_group);
- out:
-@@ -1883,6 +1922,7 @@ static void applesmc_destroy_modules(struct applesmc_device *smc)
- applesmc_release_accelerometer(smc);
- applesmc_destroy_nodes(smc, temp_group);
- applesmc_destroy_nodes(smc, fan_group);
-+ applesmc_destroy_nodes(smc, BCLM_group);
- applesmc_destroy_nodes(smc, info_group);
- }
-
---
-2.39.1
-
-From 327e6e1d0f6e8db68c124dff4d6a326b381ccedb Mon Sep 17 00:00:00 2001
-From: Aun-Ali Zaidi <admin@kodeit.net>
-Date: Wed, 23 Mar 2022 17:12:21 +0530
-Subject: [PATCH] Input: bcm5974 - Add support for the T2 Macs
-
----
- drivers/input/mouse/bcm5974.c | 138 ++++++++++++++++++++++++++++++++++
- 1 file changed, 138 insertions(+)
-
-diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
-index 59a14505b..88f17f21a 100644
---- a/drivers/input/mouse/bcm5974.c
-+++ b/drivers/input/mouse/bcm5974.c
-@@ -83,6 +83,24 @@
- #define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO 0x0273
- #define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS 0x0274
-
-+/* T2-Attached Devices */
-+/* MacbookAir8,1 (2018) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K 0x027a
-+/* MacbookPro15,2 (2018) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132 0x027b
-+/* MacbookPro15,1 (2018) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680 0x027c
-+/* MacbookPro15,4 (2019) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213 0x027d
-+/* MacbookPro16,2 (2020) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K 0x027e
-+/* MacbookPro16,3 (2020) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223 0x027f
-+/* MacbookAir9,1 (2020) */
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K 0x0280
-+/* MacbookPro16,1 (2019)*/
-+#define USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F 0x0340
-+
- #define BCM5974_DEVICE(prod) { \
- .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
- USB_DEVICE_ID_MATCH_INT_CLASS | \
-@@ -147,6 +165,22 @@ static const struct usb_device_id bcm5974_table[] = {
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ISO),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_JIS),
-+ /* MacbookAir8,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K),
-+ /* MacbookPro15,2 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132),
-+ /* MacbookPro15,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680),
-+ /* MacbookPro15,4 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213),
-+ /* MacbookPro16,2 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K),
-+ /* MacbookPro16,3 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223),
-+ /* MacbookAir9,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K),
-+ /* MacbookPro16,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F),
- /* Terminating entry */
- {}
- };
-@@ -483,6 +517,110 @@ static const struct bcm5974_config bcm5974_config_table[] = {
- { SN_COORD, -203, 6803 },
- { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
- },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -6243, 6749 },
-+ { SN_COORD, -170, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -6243, 6749 },
-+ { SN_COORD, -170, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -7456, 7976 },
-+ { SN_COORD, -1768, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -6243, 6749 },
-+ { SN_COORD, -170, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -7823, 8329 },
-+ { SN_COORD, -370, 7925 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -6243, 6749 },
-+ { SN_COORD, -170, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -6243, 6749 },
-+ { SN_COORD, -170, 7685 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F,
-+ 0,
-+ 0,
-+ HAS_INTEGRATED_BUTTON,
-+ 0, sizeof(struct bt_data),
-+ 0x83, DATAFORMAT(TYPE4),
-+ { SN_PRESSURE, 0, 300 },
-+ { SN_WIDTH, 0, 2048 },
-+ { SN_COORD, -8916, 9918 },
-+ { SN_COORD, -1934, 9835 },
-+ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION }
-+ },
- {}
- };
-
---
-2.25.1
-
-From: Ashish Arora <ashisharora.linux@outlook.com>
-Subject: Re: [PATCH] drm/i915: Discard large BIOS framebuffers causing display corruption.
-Date: Sat, 08 Jan 2022 21:43:18 +1100
-
-On certain 4k panels, the BIOS framebuffer is larger than what panel
-requires causing display corruption. Introduce a check for the same.
-
-Signed-off-by: Ashish Arora <ashisharora.linux@outlook.com>
----
- drivers/gpu/drm/i915/display/intel_fbdev.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
-index 112aa04..8fb8bcc 100644
---- a/drivers/gpu/drm/i915/display/intel_fbdev.c
-+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
-@@ -217,10 +217,10 @@ static int intelfb_create(struct drm_fb_helper *helper,
- return ret;
-
- if (intel_fb &&
-- (sizes->fb_width > intel_fb->base.width ||
-- sizes->fb_height > intel_fb->base.height)) {
-+ (sizes->fb_width != intel_fb->base.width ||
-+ sizes->fb_height != intel_fb->base.height)) {
- drm_dbg_kms(&dev_priv->drm,
-- "BIOS fb too small (%dx%d), we require (%dx%d),"
-+ "BIOS fb not valid (%dx%d), we require (%dx%d),"
- " releasing it\n",
- intel_fb->base.width, intel_fb->base.height,
- sizes->fb_width, sizes->fb_height);
---
-1.8.3.1
-
-From 3d4a4a3d62815f90fc65a827a3e2de96c4571350 Mon Sep 17 00:00:00 2001
-From: Orlando Chamberlain <orlandoch.dev@gmail.com>
-Date: Mon, 20 Nov 2023 10:32:23 +1100
-Subject: [PATCH 1/1] acpi video: force native for some T2 macbooks
-
-The intel backlight is needed for these.
-
-MacBookPro15,2/4 or MacBookPro16,3 or MacBookAir8,1/2 might also need
-this so I'm not going to be submitting this upstream yet
-
-mbp16,3 was reported not to have this issue for 6.5.8 at least.
----
- drivers/acpi/video_detect.c | 16 ++++++++++++++++
- 1 file changed, 16 insertions(+)
-
-diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
-index 442396f6ed1f..baf7264d7b94 100644
---- a/drivers/acpi/video_detect.c
-+++ b/drivers/acpi/video_detect.c
-@@ -513,6 +513,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
- DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,2"),
- },
- },
-+ {
-+ .callback = video_detect_force_native,
-+ /* Apple MacBook Air 9,1 */
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir9,1"),
-+ },
-+ },
- {
- /* https://bugzilla.redhat.com/show_bug.cgi?id=1217249 */
- .callback = video_detect_force_native,
-@@ -522,6 +530,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro12,1"),
- },
- },
-+ {
-+ .callback = video_detect_force_native,
-+ /* Apple MacBook Pro 16,2 */
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro16,2"),
-+ },
-+ },
- {
- .callback = video_detect_force_native,
- /* Dell Inspiron N4010 */
---
-2.42.1
diff --git a/SOURCES/tkg.patch b/SOURCES/tkg.patch
index aeffc95..f29c409 100644
--- a/SOURCES/tkg.patch
+++ b/SOURCES/tkg.patch
@@ -1,357 +1,64 @@
-From c304f43d14e98d4bf1215fc10bc5012f554bdd8a Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <admfrade@gmail.com>
-Date: Mon, 29 Jan 2018 16:59:22 +0000
-Subject: [PATCH 02/17] dcache: cache_pressure = 50 decreases the rate at which
- VFS caches are reclaimed
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jan200101 <sentrycraft123@gmail.com>
+Date: Tue, 6 Aug 2024 19:20:54 +0200
+Subject: [PATCH] tkg glitched base
-Signed-off-by: Alexandre Frade <admfrade@gmail.com>
+Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
---
- fs/dcache.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ .../admin-guide/kernel-parameters.txt | 3 ++
+ Makefile | 3 ++
+ block/elevator.c | 6 ++--
+ drivers/cpufreq/intel_pstate.c | 2 ++
+ drivers/infiniband/core/addr.c | 1 +
+ drivers/input/evdev.c | 19 ++++++-----
+ drivers/md/dm-crypt.c | 5 +++
+ fs/dcache.c | 2 +-
+ include/linux/mm.h | 3 +-
+ include/linux/pageblock-flags.h | 2 +-
+ include/linux/pagemap.h | 2 +-
+ init/Kconfig | 32 +++++++++++++++++++
+ init/Makefile | 2 +-
+ kernel/sched/rt.c | 4 +--
+ mm/huge_memory.c | 4 +++
+ mm/page_alloc.c | 9 +++---
+ net/ipv4/Kconfig | 4 +++
+ net/sched/Kconfig | 4 +++
+ scripts/setlocalversion | 14 ++++----
+ 19 files changed, 91 insertions(+), 30 deletions(-)
-diff --git a/fs/dcache.c b/fs/dcache.c
-index 361ea7ab30ea..0c5cf69b241a 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
-@@ -71,7 +71,7 @@
- * If no ancestor relationship:
- * arbitrary, since it's serialized on rename_lock
- */
--int sysctl_vfs_cache_pressure __read_mostly = 100;
-+int sysctl_vfs_cache_pressure __read_mostly = 50;
- EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
-
- __cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
---
-2.28.0
-
-
-diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
-index f788cd61df21..2bfbb4213707 100644
---- a/kernel/sched/rt.c
-+++ b/kernel/sched/rt.c
-@@ -22,7 +22,7 @@
- * part of the period that we allow rt tasks to run in us.
- * default: 0.95s
- */
--int sysctl_sched_rt_runtime = 950000;
-+int sysctl_sched_rt_runtime = 980000;
-
- #ifdef CONFIG_SYSCTL
- static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC * RR_TIMESLICE) / HZ;
---
-2.28.0
-
-
-From acc49f33a10f61dc66c423888cbb883ba46710e4 Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <admfrade@gmail.com>
-Date: Mon, 29 Jan 2018 17:41:29 +0000
-Subject: [PATCH 04/17] scripts: disable the localversion "+" tag of a git repo
-
-Signed-off-by: Alexandre Frade <admfrade@gmail.com>
----
- scripts/setlocalversion | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/scripts/setlocalversion b/scripts/setlocalversion
-index 20f2efd57b11..0552d8b9f582 100755
---- a/scripts/setlocalversion
-+++ b/scripts/setlocalversion
-@@ -54,7 +54,7 @@ scm_version()
- # If only the short version is requested, don't bother
- # running further git commands
- if $short; then
-- echo "+"
-+ #echo "+"
- return
- fi
- # If we are past the tagged commit, we pretty print it.
---
-2.28.0
-
-
-From 360c6833e07cc9fdef5746f6bc45bdbc7212288d Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
-Date: Fri, 26 Oct 2018 11:22:33 +0100
-Subject: [PATCH 06/17] infiniband: Fix __read_overflow2 error with -O3
- inlining
-
----
- drivers/infiniband/core/addr.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
-index 3a98439bba83..6efc4f907f58 100644
---- a/drivers/infiniband/core/addr.c
-+++ b/drivers/infiniband/core/addr.c
-@@ -820,6 +820,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
- union {
- struct sockaddr_in _sockaddr_in;
- struct sockaddr_in6 _sockaddr_in6;
-+ struct sockaddr_ib _sockaddr_ib;
- } sgid_addr, dgid_addr;
- int ret;
-
---
-2.28.0
-
-
-From f85ed068b4d0e6c31edce8574a95757a60e58b87 Mon Sep 17 00:00:00 2001
-From: Etienne Juvigny <Ti3noU@gmail.com>
-Date: Mon, 3 Sep 2018 17:36:25 +0200
-Subject: [PATCH 07/17] Add Zenify option
-
----
- init/Kconfig | 32 ++++++++++++++++++++++++++++++++
- 1 file changed, 32 insertions(+)
-
-diff --git a/init/Kconfig b/init/Kconfig
-index 3ae8678e1145..da708eed0f1e 100644
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -92,6 +92,38 @@ config THREAD_INFO_IN_TASK
-
- menu "General setup"
-
-+config ZENIFY
-+ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
-+ default y
-+ help
-+ Tunes the kernel for responsiveness at the cost of throughput and power usage.
-+
-+ --- Virtual Memory Subsystem ---------------------------
-+
-+ Mem dirty before bg writeback..: 10 % -> 20 %
-+ Mem dirty before sync writeback: 20 % -> 50 %
-+
-+ --- Block Layer ----------------------------------------
-+
-+ Queue depth...............: 128 -> 512
-+ Default MQ scheduler......: mq-deadline -> bfq
-+
-+ --- CFS CPU Scheduler ----------------------------------
-+
-+ Scheduling latency.............: 6 -> 3 ms
-+ Minimal granularity............: 0.75 -> 0.3 ms
-+ Wakeup granularity.............: 1 -> 0.5 ms
-+ CPU migration cost.............: 0.5 -> 0.25 ms
-+ Bandwidth slice size...........: 5 -> 3 ms
-+ Ondemand fine upscaling limit..: 95 % -> 85 %
-+
-+ --- MuQSS CPU Scheduler --------------------------------
-+
-+ Scheduling interval............: 6 -> 3 ms
-+ ISO task max realtime use......: 70 % -> 25 %
-+ Ondemand coarse upscaling limit: 80 % -> 45 %
-+ Ondemand fine upscaling limit..: 95 % -> 45 %
-+
- config BROKEN
- bool
-
---
-2.28.0
-
-
-From e92e67143385cf285851e12aa8b7f083dd38dd24 Mon Sep 17 00:00:00 2001
-From: Steven Barrett <damentz@liquorix.net>
-Date: Sun, 16 Jan 2011 18:57:32 -0600
-Subject: [PATCH 08/17] ZEN: Allow TCP YeAH as default congestion control
-
-4.4: In my tests YeAH dramatically slowed down transfers over a WLAN,
- reducing throughput from ~65Mbps (CUBIC) to ~7MBps (YeAH) over 10
- seconds (netperf TCP_STREAM) including long stalls.
-
- Be careful when choosing this. ~heftig
----
- net/ipv4/Kconfig | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
-index e64e59b536d3..bfb55ef7ebbe 100644
---- a/net/ipv4/Kconfig
-+++ b/net/ipv4/Kconfig
-@@ -691,6 +691,9 @@ choice
- config DEFAULT_VEGAS
- bool "Vegas" if TCP_CONG_VEGAS=y
-
-+ config DEFAULT_YEAH
-+ bool "YeAH" if TCP_CONG_YEAH=y
-+
- config DEFAULT_VENO
- bool "Veno" if TCP_CONG_VENO=y
-
-@@ -724,6 +727,7 @@ config DEFAULT_TCP_CONG
- default "htcp" if DEFAULT_HTCP
- default "hybla" if DEFAULT_HYBLA
- default "vegas" if DEFAULT_VEGAS
-+ default "yeah" if DEFAULT_YEAH
- default "westwood" if DEFAULT_WESTWOOD
- default "veno" if DEFAULT_VENO
- default "reno" if DEFAULT_RENO
---
-2.28.0
-
-
-From 76dbe7477bfde1b5e8bf29a71b5af7ab2be9b98e Mon Sep 17 00:00:00 2001
-From: Steven Barrett <steven@liquorix.net>
-Date: Wed, 28 Nov 2018 19:01:27 -0600
-Subject: [PATCH 09/17] zen: Use [defer+madvise] as default khugepaged defrag
- strategy
-
-For some reason, the default strategy to respond to THP fault fallbacks
-is still just madvise, meaning stall if the program wants transparent
-hugepages, but don't trigger a background reclaim / compaction if THP
-begins to fail allocations. This creates a snowball affect where we
-still use the THP code paths, but we almost always fail once a system
-has been active and busy for a while.
-
-The option "defer" was created for interactive systems where THP can
-still improve performance. If we have to fallback to a regular page due
-to an allocation failure or anything else, we will trigger a background
-reclaim and compaction so future THP attempts succeed and previous
-attempts eventually have their smaller pages combined without stalling
-running applications.
-
-We still want madvise to stall applications that explicitely want THP,
-so defer+madvise _does_ make a ton of sense. Make it the default for
-interactive systems, especially if the kernel maintainer left
-transparent hugepages on "always".
-
-Reasoning and details in the original patch: https://lwn.net/Articles/711248/
----
- mm/huge_memory.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/mm/huge_memory.c b/mm/huge_memory.c
-index 74300e337c3c..9277f22c10a7 100644
---- a/mm/huge_memory.c
-+++ b/mm/huge_memory.c
-@@ -53,7 +53,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
- #ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
- (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
- #endif
-+#ifdef CONFIG_ZENIFY
-+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
-+#else
- (1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
-+#endif
- (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
- (1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
-
---
-2.28.0
-
-
-From 2b65a1329cb220b43c19c4d0de5833fae9e2b22d Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <admfrade@gmail.com>
-Date: Wed, 24 Oct 2018 16:58:52 -0300
-Subject: [PATCH 10/17] net/sched: allow configuring cake qdisc as default
-
-Signed-off-by: Alexandre Frade <admfrade@gmail.com>
----
- net/sched/Kconfig | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/net/sched/Kconfig b/net/sched/Kconfig
-index 84badf00647e..6a922bca9f39 100644
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -471,6 +471,9 @@ choice
- config DEFAULT_SFQ
- bool "Stochastic Fair Queue" if NET_SCH_SFQ
+diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
+index 2569e7f19b47..5b79a61afd6d 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -355,6 +355,9 @@
+ disable
+ Do not enable amd_pstate as the default
+ scaling driver for the supported processors
++ enable
++ Enable intel_pstate in-case "disable" was passed
++ previously in the kernel boot parameters
+ passive
+ Use amd_pstate with passive mode as a scaling driver.
+ In this mode autonomous selection is disabled.
+diff --git a/Makefile b/Makefile
+index c0af6d8aeb05..94d76f300914 100644
+--- a/Makefile
++++ b/Makefile
+@@ -999,6 +999,9 @@ KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
+ KBUILD_CFLAGS-$(CONFIG_CC_NO_STRINGOP_OVERFLOW) += $(call cc-option, -Wno-stringop-overflow)
+ KBUILD_CFLAGS-$(CONFIG_CC_STRINGOP_OVERFLOW) += $(call cc-option, -Wstringop-overflow)
-+ config DEFAULT_CAKE
-+ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
++# disable GCC vectorization on trees
++KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
+
- config DEFAULT_PFIFO_FAST
- bool "Priority FIFO Fast"
- endchoice
-@@ -453,6 +453,7 @@
- default "fq_codel" if DEFAULT_FQ_CODEL
- default "fq_pie" if DEFAULT_FQ_PIE
- default "sfq" if DEFAULT_SFQ
-+ default "cake" if DEFAULT_CAKE
- default "pfifo_fast"
- endif
-
---
-2.28.0
-
-
-From 90240bcd90a568878738e66c0d45bed3e38e347b Mon Sep 17 00:00:00 2001
-From: Tk-Glitch <ti3nou@gmail.com>
-Date: Fri, 19 Apr 2019 12:33:38 +0200
-Subject: [PATCH 12/17] Set vm.max_map_count to 262144 by default
-
-The value is still pretty low, and AMD64-ABI and ELF extended numbering
-supports that, so we should be fine on modern x86 systems.
-
-This fixes crashes in some applications using more than 65535 vmas (also
-affects some windows games running in wine, such as Star Citizen).
----
- include/linux/mm.h | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index bc05c3588aa3..b0cefe94920d 100644
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -190,8 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
- * not a hard limit any more. Although some userspace tools can be surprised by
- * that.
- */
--#define MAPCOUNT_ELF_CORE_MARGIN (5)
--#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
-+#define DEFAULT_MAX_MAP_COUNT (262144)
-
- extern int sysctl_max_map_count;
-
---
-2.28.0
-
-
-From 3a34034dba5efe91bcec491efe8c66e8087f509b Mon Sep 17 00:00:00 2001
-From: Tk-Glitch <ti3nou@gmail.com>
-Date: Mon, 27 Jul 2020 00:19:18 +0200
-Subject: [PATCH 13/17] mm: bump DEFAULT_MAX_MAP_COUNT
-
-Some games such as Detroit: Become Human tend to be very crash prone with
-lower values.
----
- include/linux/mm.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index b0cefe94920d..890165099b07 100644
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -190,7 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
- * not a hard limit any more. Although some userspace tools can be surprised by
- * that.
- */
--#define DEFAULT_MAX_MAP_COUNT (262144)
-+#define DEFAULT_MAX_MAP_COUNT (16777216)
-
- extern int sysctl_max_map_count;
+ # disable invalid "can't wrap" optimizations for signed / pointers
+ KBUILD_CFLAGS += -fno-strict-overflow
---
-2.28.0
-
-From 977812938da7c7226415778c340832141d9278b7 Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <admfrade@gmail.com>
-Date: Mon, 25 Nov 2019 15:13:06 -0300
-Subject: [PATCH 14/17] elevator: set default scheduler to bfq for blk-mq
-
-Signed-off-by: Alexandre Frade <admfrade@gmail.com>
----
- block/elevator.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
diff --git a/block/elevator.c b/block/elevator.c
-index 4eab3d70e880..79669aa39d79 100644
+index f64ebd726e58..73227b97162b 100644
--- a/block/elevator.c
+++ b/block/elevator.c
-@@ -623,19 +623,19 @@ static inline bool elv_support_iosched(struct request_queue *q)
+@@ -557,8 +557,8 @@ static inline bool elv_support_iosched(struct request_queue *q)
}
/*
@@ -362,10 +69,7 @@ index 4eab3d70e880..79669aa39d79 100644
*/
static struct elevator_type *elevator_get_default(struct request_queue *q)
{
- if (q->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
- return NULL;
-
- if (q->nr_hw_queues != 1 &&
+@@ -569,7 +569,7 @@ static struct elevator_type *elevator_get_default(struct request_queue *q)
!blk_mq_is_shared_tags(q->tag_set->flags))
return NULL;
@@ -374,86 +78,11 @@ index 4eab3d70e880..79669aa39d79 100644
}
/*
---
-2.28.0
-
-From 3c229f434aca65c4ca61772bc03c3e0370817b92 Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <kernel@xanmod.org>
-Date: Mon, 3 Aug 2020 17:05:04 +0000
-Subject: [PATCH 16/17] mm: set 2 megabytes for address_space-level file
- read-ahead pages size
-
-Signed-off-by: Alexandre Frade <kernel@xanmod.org>
----
- include/linux/pagemap.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
-index cf2468da68e9..007dea784451 100644
---- a/include/linux/pagemap.h
-+++ b/include/linux/pagemap.h
-@@ -1181,7 +1181,7 @@
- ._index = i, \
- }
-
--#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
-+#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
-
- void page_cache_ra_unbounded(struct readahead_control *,
- unsigned long nr_to_read, unsigned long lookahead_count);
---
-2.28.0
-
-
-From 716f41cf6631f3a85834dcb67b4ce99185b6387f Mon Sep 17 00:00:00 2001
-From: Steven Barrett <steven@liquorix.net>
-Date: Wed, 15 Jan 2020 20:43:56 -0600
-Subject: [PATCH 17/17] ZEN: intel-pstate: Implement "enable" parameter
-
-If intel-pstate is compiled into the kernel, it will preempt the loading
-of acpi-cpufreq so you can take advantage of hardware p-states without
-any friction.
-
-However, intel-pstate is not completely superior to cpufreq's ondemand
-for one reason. There's no concept of an up_threshold property.
-
-In ondemand, up_threshold essentially reduces the maximum utilization to
-compare against, allowing you to hit max frequencies and turbo boost
-from a much lower core utilization.
-
-With intel-pstate, you have the concept of minimum and maximum
-performance, but no tunable that lets you define, maximum frequency
-means 50% core utilization. For just this oversight, there's reasons
-you may want ondemand.
-
-Lets support setting "enable" in kernel boot parameters. This lets
-kernel maintainers include "intel_pstate=disable" statically in the
-static boot parameters, but let users of the kernel override this
-selection.
----
- Documentation/admin-guide/kernel-parameters.txt | 3 +++
- drivers/cpufreq/intel_pstate.c | 2 ++
- 2 files changed, 5 insertions(+)
-
-diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index fb95fad81c79..3e92fee81e33 100644
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -2133,6 +2133,9 @@
- disable
- Do not enable intel_pstate as the default
- scaling driver for the supported processors
-+ enable
-+ Enable intel_pstate in-case "disable" was passed
-+ previously in the kernel boot parameters
- active
- Use intel_pstate driver to bypass the scaling
- governors layer of cpufreq and provides it own
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index 36a469150ff9..aee891c9b78a 100644
+index c31914a9876f..d6ed90b3c930 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
-@@ -3533,6 +3533,8 @@
+@@ -3558,6 +3558,8 @@ static int __init intel_pstate_setup(char *str)
if (!strcmp(str, "no_hwp"))
no_hwp = 1;
@@ -462,54 +91,20 @@ index 36a469150ff9..aee891c9b78a 100644
if (!strcmp(str, "force"))
force_load = 1;
if (!strcmp(str, "hwp_only"))
---
-2.28.0
-
-From 379cbab18b5c75c622b93e2c5abdfac141fe9654 Mon Sep 17 00:00:00 2001
-From: Kenny Levinsen <kl@kl.wtf>
-Date: Sun, 27 Dec 2020 14:43:13 +0000
-Subject: [PATCH] ZEN: Input: evdev - use call_rcu when detaching client
-
-Significant time was spent on synchronize_rcu in evdev_detach_client
-when applications closed evdev devices. Switching VT away from a
-graphical environment commonly leads to mass input device closures,
-which could lead to noticable delays on systems with many input devices.
-
-Replace synchronize_rcu with call_rcu, deferring reclaim of the evdev
-client struct till after the RCU grace period instead of blocking the
-calling application.
-
-While this does not solve all slow evdev fd closures, it takes care of a
-good portion of them, including this simple test:
-
- #include <fcntl.h>
- #include <unistd.h>
-
- int main(int argc, char *argv[])
- {
- int idx, fd;
- const char *path = "/dev/input/event0";
- for (idx = 0; idx < 1000; idx++) {
- if ((fd = open(path, O_RDWR)) == -1) {
- return -1;
- }
- close(fd);
- }
- return 0;
- }
-
-Time to completion of above test when run locally:
-
- Before: 0m27.111s
- After: 0m0.018s
-
-Signed-off-by: Kenny Levinsen <kl@kl.wtf>
----
- drivers/input/evdev.c | 19 +++++++++++--------
- 1 file changed, 11 insertions(+), 8 deletions(-)
-
+diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
+index be0743dac3ff..358eb15e1d69 100644
+--- a/drivers/infiniband/core/addr.c
++++ b/drivers/infiniband/core/addr.c
+@@ -814,6 +814,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
+ union {
+ struct sockaddr_in _sockaddr_in;
+ struct sockaddr_in6 _sockaddr_in6;
++ struct sockaddr_ib _sockaddr_ib;
+ } sgid_addr, dgid_addr;
+ int ret;
+
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
-index 95f90699d2b17b..2b10fe29d2c8d9 100644
+index 51e0c4954600..35c3ad741870 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -46,6 +46,7 @@ struct evdev_client {
@@ -523,7 +118,7 @@ index 95f90699d2b17b..2b10fe29d2c8d9 100644
@@ -377,13 +378,22 @@ static void evdev_attach_client(struct evdev *evdev,
spin_unlock(&evdev->client_lock);
}
-
+
+static void evdev_reclaim_client(struct rcu_head *rp)
+{
+ struct evdev_client *client = container_of(rp, struct evdev_client, rcu);
@@ -542,110 +137,198 @@ index 95f90699d2b17b..2b10fe29d2c8d9 100644
- synchronize_rcu();
+ call_rcu(&client->rcu, evdev_reclaim_client);
}
-
+
static int evdev_open_device(struct evdev *evdev)
@@ -436,7 +446,6 @@ static int evdev_release(struct inode *inode, struct file *file)
{
struct evdev_client *client = file->private_data;
struct evdev *evdev = client->evdev;
- unsigned int i;
-
+
mutex_lock(&evdev->mutex);
-
+
@@ -448,11 +457,6 @@ static int evdev_release(struct inode *inode, struct file *file)
-
+
evdev_detach_client(evdev, client);
-
+
- for (i = 0; i < EV_CNT; ++i)
- bitmap_free(client->evmasks[i]);
-
- kvfree(client);
-
evdev_close_device(evdev);
-
+
return 0;
@@ -495,7 +499,6 @@ static int evdev_open(struct inode *inode, struct file *file)
-
+
err_free_client:
evdev_detach_client(evdev, client);
- kvfree(client);
return error;
}
-
-
-From 2aafb56f20e4b63d8c4af172fe9d017c64bc4129 Mon Sep 17 00:00:00 2001
-From: Sultan Alsawaf <sultan@kerneltoast.com>
-Date: Wed, 20 Oct 2021 20:50:11 -0700
-Subject: [PATCH] ZEN: mm: Lower the non-hugetlbpage pageblock size to reduce
- scheduling delays
-
-The page allocator processes free pages in groups of pageblocks, where
-the size of a pageblock is typically quite large (1024 pages without
-hugetlbpage support). Pageblocks are processed atomically with the zone
-lock held, which can cause severe scheduling delays on both the CPU
-going through the pageblock and any other CPUs waiting to acquire the
-zone lock. A frequent offender is move_freepages_block(), which is used
-by rmqueue() for page allocation.
-
-As it turns out, there's no requirement for pageblocks to be so large,
-so the pageblock order can simply be reduced to ease the scheduling
-delays and zone lock contention. PAGE_ALLOC_COSTLY_ORDER is used as a
-reasonable setting to ensure non-costly page allocation requests can
-still be serviced without always needing to free up more than one
-pageblock's worth of pages at a time.
-
-This has a noticeable effect on overall system latency when memory
-pressure is elevated. The various mm functions which operate on
-pageblocks no longer appear in the preemptoff tracer, where previously
-they would spend up to 100 ms on a mobile arm64 CPU processing a
-pageblock with preemption disabled and the zone lock held.
-
-Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
----
- include/linux/pageblock-flags.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
+
+diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
+index 1b7a97cc3779..bed9d9588b87 100644
+--- a/drivers/md/dm-crypt.c
++++ b/drivers/md/dm-crypt.c
+@@ -3284,6 +3284,11 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+ goto bad;
+ }
+
++#ifdef CONFIG_ZENIFY
++ set_bit(DM_CRYPT_NO_READ_WORKQUEUE, &cc->flags);
++ set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
++#endif
++
+ ret = crypt_ctr_cipher(ti, argv[0], argv[1]);
+ if (ret < 0)
+ goto bad;
+diff --git a/fs/dcache.c b/fs/dcache.c
+index 4c144519aa70..fb0f9a1368c8 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -71,7 +71,7 @@
+ * If no ancestor relationship:
+ * arbitrary, since it's serialized on rename_lock
+ */
+-int sysctl_vfs_cache_pressure __read_mostly = 100;
++int sysctl_vfs_cache_pressure __read_mostly = 50;
+ EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
+
+ __cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index b58bad248eef..dbae141dc3ce 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -192,8 +192,7 @@ static inline void __mm_zero_struct_page(struct page *page)
+ * not a hard limit any more. Although some userspace tools can be surprised by
+ * that.
+ */
+-#define MAPCOUNT_ELF_CORE_MARGIN (5)
+-#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
++#define DEFAULT_MAX_MAP_COUNT (16777216)
+
+ extern int sysctl_max_map_count;
+
diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
-index 5f1ae07d724b88..97cda629c9e909 100644
+index 547e82cdc89a..67a999944cdb 100644
--- a/include/linux/pageblock-flags.h
+++ b/include/linux/pageblock-flags.h
-@@ -48,7 +48,7 @@ extern unsigned int pageblock_order;
- #else /* CONFIG_HUGETLB_PAGE */
-
+@@ -52,7 +52,7 @@ extern unsigned int pageblock_order;
+ #else /* CONFIG_TRANSPARENT_HUGEPAGE */
+
/* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
-#define pageblock_order MAX_PAGE_ORDER
+#define pageblock_order PAGE_ALLOC_COSTLY_ORDER
-
+
#endif /* CONFIG_HUGETLB_PAGE */
-
-
-From f22bc56be85e69c71c8e36041193856bb8b01525 Mon Sep 17 00:00:00 2001
-From: Sultan Alsawaf <sultan@kerneltoast.com>
-Date: Wed, 20 Oct 2021 20:50:32 -0700
-Subject: [PATCH] ZEN: mm: Don't hog the CPU and zone lock in rmqueue_bulk()
-
-There is noticeable scheduling latency and heavy zone lock contention
-stemming from rmqueue_bulk's single hold of the zone lock while doing
-its work, as seen with the preemptoff tracer. There's no actual need for
-rmqueue_bulk() to hold the zone lock the entire time; it only does so
-for supposed efficiency. As such, we can relax the zone lock and even
-reschedule when IRQs are enabled in order to keep the scheduling delays
-and zone lock contention at bay. Forward progress is still guaranteed,
-as the zone lock can only be relaxed after page removal.
-
-With this change, rmqueue_bulk() no longer appears as a serious offender
-in the preemptoff tracer, and system latency is noticeably improved.
-
-Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
----
- mm/page_alloc.c | 23 ++++++++++++++++++-----
- 1 file changed, 18 insertions(+), 5 deletions(-)
-
+
+diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
+index a0a026d2d244..4d2e7d8512d1 100644
+--- a/include/linux/pagemap.h
++++ b/include/linux/pagemap.h
+@@ -1281,7 +1281,7 @@ struct readahead_control {
+ ._index = i, \
+ }
+
+-#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
++#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
+
+ void page_cache_ra_unbounded(struct readahead_control *,
+ unsigned long nr_to_read, unsigned long lookahead_count);
+diff --git a/init/Kconfig b/init/Kconfig
+index febdea2afc3b..c8c6671c9549 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -132,6 +132,38 @@ config THREAD_INFO_IN_TASK
+
+ menu "General setup"
+
++config ZENIFY
++ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
++ default y
++ help
++ Tunes the kernel for responsiveness at the cost of throughput and power usage.
++
++ --- Virtual Memory Subsystem ---------------------------
++
++ Mem dirty before bg writeback..: 10 % -> 20 %
++ Mem dirty before sync writeback: 20 % -> 50 %
++
++ --- Block Layer ----------------------------------------
++
++ Queue depth...............: 128 -> 512
++ Default MQ scheduler......: mq-deadline -> bfq
++
++ --- CFS CPU Scheduler ----------------------------------
++
++ Scheduling latency.............: 6 -> 3 ms
++ Minimal granularity............: 0.75 -> 0.3 ms
++ Wakeup granularity.............: 1 -> 0.5 ms
++ CPU migration cost.............: 0.5 -> 0.25 ms
++ Bandwidth slice size...........: 5 -> 3 ms
++ Ondemand fine upscaling limit..: 95 % -> 85 %
++
++ --- MuQSS CPU Scheduler --------------------------------
++
++ Scheduling interval............: 6 -> 3 ms
++ ISO task max realtime use......: 70 % -> 25 %
++ Ondemand coarse upscaling limit: 80 % -> 45 %
++ Ondemand fine upscaling limit..: 95 % -> 45 %
++
+ config BROKEN
+ bool
+
+diff --git a/init/Makefile b/init/Makefile
+index ab71cedc5fd6..eafc4ef50ab5 100644
+--- a/init/Makefile
++++ b/init/Makefile
+@@ -33,7 +33,7 @@ build-timestamp = $(or $(KBUILD_BUILD_TIMESTAMP), $(build-timestamp-auto))
+
+ # Maximum length of UTS_VERSION is 64 chars
+ filechk_uts_version = \
+- utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
++ utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "TKG" "$(build-timestamp)" | cut -b -64); \
+ echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
+
+ #
+diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
+index aa4c1c874fa4..cd58198e990f 100644
+--- a/kernel/sched/rt.c
++++ b/kernel/sched/rt.c
+@@ -20,9 +20,9 @@ int sysctl_sched_rt_period = 1000000;
+
+ /*
+ * part of the period that we allow rt tasks to run in us.
+- * default: 0.95s
++ * XanMod default: 0.98s
+ */
+-int sysctl_sched_rt_runtime = 950000;
++int sysctl_sched_rt_runtime = 980000;
+
+ #ifdef CONFIG_SYSCTL
+ static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC * RR_TIMESLICE) / HZ;
+diff --git a/mm/huge_memory.c b/mm/huge_memory.c
+index 374a0d54b08d..1d4efe9df1a6 100644
+--- a/mm/huge_memory.c
++++ b/mm/huge_memory.c
+@@ -63,7 +63,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
+ (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
+ #endif
++#ifdef CONFIG_ZENIFY
++ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
++#else
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
++#endif
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
+ (1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
+
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index a0b0397e29ee4c..87a983a356530c 100644
+index df2c442f1c47..d8d83c503419 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -2152,16 +2152,17 @@
+@@ -2228,16 +2228,17 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype,
}
/*
@@ -663,77 +346,68 @@ index a0b0397e29ee4c..87a983a356530c 100644
unsigned long flags;
- int i;
+ const bool can_resched = !preempt_count() && !irqs_disabled();
-+ int i, last_mod = 0;
++ int i, allocated = 0, last_mod = 0;
spin_lock_irqsave(&zone->lock, flags);
for (i = 0; i < count; ++i) {
-@@ -2170,6 +2171,18 @@
- if (unlikely(page == NULL))
- break;
-
-+ /* Reschedule and ease the contention on the lock if needed */
-+ if (i + 1 < count && ((can_resched && need_resched()) ||
-+ spin_needbreak(&zone->lock))) {
-+ __mod_zone_page_state(zone, NR_FREE_PAGES,
-+ -((i + 1 - last_mod) << order));
-+ last_mod = i + 1;
-+ spin_unlock_irqrestore(&zone->lock, flags);
-+ if (can_resched)
-+ cond_resched();
-+ spin_lock_irqsave(&zone->lock, flags);
-+ }
-+
- /*
- * Split buddy pages returned by expand() are received here in
- * physical page order. The page is added to the tail of
-@@ -2186,7 +2199,7 @@
- -(1 << order));
- }
-
-- __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
-+ __mod_zone_page_state(zone, NR_FREE_PAGES, -((i - last_mod) << order));
- spin_unlock_irqrestore(&zone->lock, flags);
+diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
+index 8e94ed7c56a0..c103bc45c900 100644
+--- a/net/ipv4/Kconfig
++++ b/net/ipv4/Kconfig
+@@ -700,6 +700,9 @@ choice
+ config DEFAULT_VEGAS
+ bool "Vegas" if TCP_CONG_VEGAS=y
- return i;
++ config DEFAULT_YEAH
++ bool "YeAH" if TCP_CONG_YEAH=y
++
+ config DEFAULT_VENO
+ bool "Veno" if TCP_CONG_VENO=y
-From 6329525a0fa10cd13f39b76948b1296150f75c95 Mon Sep 17 00:00:00 2001
-From: Alexandre Frade <kernel@xanmod.org>
-Date: Mon, 29 Aug 2022 16:47:26 +0000
-Subject: [PATCH 14/16] XANMOD: Makefile: Disable GCC vectorization on trees
-
-Signed-off-by: Alexandre Frade <kernel@xanmod.org>
----
- Makefile | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/Makefile b/Makefile
-index 3f6628780eb2..35a5ae1ede42 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1002,6 +1002,9 @@
- KBUILD_CFLAGS-$(CONFIG_CC_NO_STRINGOP_OVERFLOW) += $(call cc-option, -Wno-stringop-overflow)
- KBUILD_CFLAGS-$(CONFIG_CC_STRINGOP_OVERFLOW) += $(call cc-option, -Wstringop-overflow)
+@@ -733,6 +736,7 @@ config DEFAULT_TCP_CONG
+ default "htcp" if DEFAULT_HTCP
+ default "hybla" if DEFAULT_HYBLA
+ default "vegas" if DEFAULT_VEGAS
++ default "yeah" if DEFAULT_YEAH
+ default "westwood" if DEFAULT_WESTWOOD
+ default "veno" if DEFAULT_VENO
+ default "reno" if DEFAULT_RENO
+diff --git a/net/sched/Kconfig b/net/sched/Kconfig
+index 8180d0c12fce..22c5a59d5058 100644
+--- a/net/sched/Kconfig
++++ b/net/sched/Kconfig
+@@ -438,6 +438,9 @@ choice
+ config DEFAULT_SFQ
+ bool "Stochastic Fair Queue" if NET_SCH_SFQ
-+# disable GCC vectorization on trees
-+KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
++ config DEFAULT_CAKE
++ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
+
- # disable invalid "can't wrap" optimizations for signed / pointers
- KBUILD_CFLAGS += -fno-strict-overflow
+ config DEFAULT_PFIFO_FAST
+ bool "Priority FIFO Fast"
+ endchoice
+@@ -449,6 +452,7 @@ config DEFAULT_NET_SCH
+ default "fq_codel" if DEFAULT_FQ_CODEL
+ default "fq_pie" if DEFAULT_FQ_PIE
+ default "sfq" if DEFAULT_SFQ
++ default "cake" if DEFAULT_CAKE
+ default "pfifo_fast"
+ endif
---
-2.39.1
-
-From f997578464b2c4c63e7bd1afbfef56212ee44f2d Mon Sep 17 00:00:00 2001
-From: Etienne JUVIGNY <ti3nou@gmail.com>
-Date: Mon, 6 Mar 2023 13:54:09 +0100
-Subject: Don't add -dirty versioning on unclean trees
-
-
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
-index ca5795e16..ad0d94477 100755
+index 38b96c6797f4..e22768e0e875 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
-@@ -85,12 +85,12 @@ scm_version()
+@@ -92,7 +92,7 @@ scm_version()
+ # If only the short version is requested, don't bother
+ # running further git commands
+ if $short; then
+- echo "+"
++ #echo "+"
+ return
+ fi
+ # If we are past the tagged commit, we pretty print it.
+@@ -119,12 +119,12 @@ scm_version()
# git-diff-index does not refresh the index, so it may give misleading
# results.
# See git-update-index(1), git-diff-index(1), and git-status(1).
@@ -750,5 +424,5 @@ index ca5795e16..ad0d94477 100755
+ # printf '%s' -dirty
+ #fi
}
-
+
collect_files()
diff --git a/SOURCES/v0-speaker-multifix.patch b/SOURCES/v0-speaker-multifix.patch
index d7af208..724fa59 100644
--- a/SOURCES/v0-speaker-multifix.patch
+++ b/SOURCES/v0-speaker-multifix.patch
@@ -20277,7 +20277,7 @@ diff --git a/sound/soc/codecs/aw87xxx/aw87xxx.c b/sound/soc/codecs/aw87xxx/aw87x
index eddb01695..7f44d9b9d 100644
--- a/sound/soc/codecs/aw87xxx/aw87xxx.c
+++ b/sound/soc/codecs/aw87xxx/aw87xxx.c
-@@ -1,1457 +1,1466 @@
+@@ -1,1457 +1,1467 @@
-/*
- * aw87xxx.c aw87xxx pa module
- *
@@ -21779,6 +21779,7 @@ index eddb01695..7f44d9b9d 100644
+#include <linux/hrtimer.h>
+#include <linux/ktime.h>
+#include <linux/kthread.h>
++#include <linux/vmalloc.h>
+#include <uapi/sound/asound.h>
+#include <sound/control.h>
+#include <sound/soc.h>
@@ -23668,8 +23669,8 @@ index f2be4b102..928202b1a 100644
ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
ALC269_FIXUP_ASPIRE_HEADSET_MIC,
ALC269_FIXUP_ASUS_X101_FUNC,
-@@ -7534,6 +7535,30 @@ enum {
- ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318,
+@@ -7528,6 +7528,30 @@
+ ALC287_FIXUP_LENOVO_SSID_17AA3820,
};
+/* A special fixup for AYN and AYANEO handhelds as both