diff --git a/kernel.spec.in b/kernel.spec.in index 01b63ca1..485d9ea3 100644 --- a/kernel.spec.in +++ b/kernel.spec.in @@ -147,6 +147,7 @@ Patch22: xsa403-linux-2.patch Patch23: xsa403-linux-3.patch Patch24: xsa403-linux-4.patch Patch25: xsa405-linux.patch +Patch26: v6-ACPI-skip-IRQ-override-on-AMD-Zen-platforms.patch %description Qubes Dom0 kernel. diff --git a/rel b/rel index d00491fd..0cfbf088 100644 --- a/rel +++ b/rel @@ -1 +1 @@ -1 +2 diff --git a/v6-ACPI-skip-IRQ-override-on-AMD-Zen-platforms.patch b/v6-ACPI-skip-IRQ-override-on-AMD-Zen-platforms.patch new file mode 100644 index 00000000..61873907 --- /dev/null +++ b/v6-ACPI-skip-IRQ-override-on-AMD-Zen-platforms.patch @@ -0,0 +1,42 @@ +IRQ override isn't needed on modern AMD Zen systems. +There's an active low keyboard IRQ on AMD Ryzen 6000 and it will stay +this way on newer platforms. This IRQ override breaks keyboards for +almost all Ryzen 6000 laptops currently on the market. + +Skip this IRQ override for all AMD Zen platforms because this IRQ +override is supposed to be a workaround for buggy ACPI DSDT and we can't +have a long list of all future AMD CPUs/Laptops in the kernel code. +If a device with buggy ACPI DSDT shows up, a separated list containing +just them should be created. + +Suggested-by: Mario Limonciello +Signed-off-by: Chuanhong Guo +--- +Change sice v5: reworked + + drivers/acpi/resource.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c +index c2d494784425..510cdec375c4 100644 +--- a/drivers/acpi/resource.c ++++ b/drivers/acpi/resource.c +@@ -416,6 +416,16 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity, + { + int i; + ++#ifdef CONFIG_X86 ++ /* ++ * IRQ override isn't needed on modern AMD Zen systems and ++ * this override breaks active low IRQs on AMD Ryzen 6000 and ++ * newer systems. Skip it. ++ */ ++ if (boot_cpu_has(X86_FEATURE_ZEN)) ++ return false; ++#endif ++ + for (i = 0; i < ARRAY_SIZE(skip_override_table); i++) { + const struct irq_override_cmp *entry = &skip_override_table[i]; + +-- +2.36.1