diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2024-08-09 19:26:14 +0200 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2024-08-09 19:26:14 +0200 |
commit | ee7306c6937f331f0fc0882a29a947c0a9560b3e (patch) | |
tree | afc6552e91d247a927144361364f6012f9dea647 /SOURCES | |
parent | 2de9c6dfed5c691b201b8a4374beb94d82ef4e8a (diff) | |
download | kernel-fsync-ee7306c6937f331f0fc0882a29a947c0a9560b3e.tar.gz kernel-fsync-ee7306c6937f331f0fc0882a29a947c0a9560b3e.zip |
kernel 6.10.3
Diffstat (limited to 'SOURCES')
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, ¤tv); ++ 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, ¤tv); -+ 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 Binary files differnew file mode 100644 index 0000000..f75acb6 --- /dev/null +++ b/SOURCES/fedoraimaca.x509 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 = ¶ms->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, ++ ¶ms->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, ¶ms->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, ¶ms->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 |