Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'acpi-6.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fixes from Rafael Wysocki:
"Rework the handling of interrupt overrides on AMD Zen-based machines
to avoid recently introduced regressions (Hans de Goede).

Note that this is intended as a short-term mitigation for 6.5 and the
long-term approach will be to attempt to use the configuration left by
the BIOS, but it requires more investigation"

* tag 'acpi-6.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI: resource: Add IRQ override quirk for PCSpecialist Elimina Pro 16 M
ACPI: resource: Honor MADT INT_SRC_OVR settings for IRQ1 on AMD Zen
ACPI: resource: Always use MADT override IRQ settings for all legacy non i8042 IRQs
ACPI: resource: revert "Remove "Zen" specific match and quirks"

+70
+2
arch/x86/include/asm/acpi.h
··· 15 15 #include <asm/mpspec.h> 16 16 #include <asm/x86_init.h> 17 17 #include <asm/cpufeature.h> 18 + #include <asm/irq_vectors.h> 18 19 19 20 #ifdef CONFIG_ACPI_APEI 20 21 # include <asm/pgtable_types.h> ··· 32 31 extern int acpi_use_timer_override; 33 32 extern int acpi_fix_pin2_polarity; 34 33 extern int acpi_disable_cmcff; 34 + extern bool acpi_int_src_ovr[NR_IRQS_LEGACY]; 35 35 36 36 extern u8 acpi_sci_flags; 37 37 extern u32 acpi_sci_override_gsi;
+4
arch/x86/kernel/acpi/boot.c
··· 52 52 int acpi_ioapic; 53 53 int acpi_strict; 54 54 int acpi_disable_cmcff; 55 + bool acpi_int_src_ovr[NR_IRQS_LEGACY]; 55 56 56 57 /* ACPI SCI override configuration */ 57 58 u8 acpi_sci_flags __initdata; ··· 588 587 return -EINVAL; 589 588 590 589 acpi_table_print_madt_entry(&header->common); 590 + 591 + if (intsrc->source_irq < NR_IRQS_LEGACY) 592 + acpi_int_src_ovr[intsrc->source_irq] = true; 591 593 592 594 if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) { 593 595 acpi_sci_ioapic_setup(intsrc->source_irq,
+64
drivers/acpi/resource.c
··· 470 470 { } 471 471 }; 472 472 473 + static const struct dmi_system_id tongfang_gm_rg[] = { 474 + { 475 + .ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD", 476 + .matches = { 477 + DMI_MATCH(DMI_BOARD_NAME, "GMxRGxx"), 478 + }, 479 + }, 480 + { } 481 + }; 482 + 483 + static const struct dmi_system_id maingear_laptop[] = { 484 + { 485 + .ident = "MAINGEAR Vector Pro 2 15", 486 + .matches = { 487 + DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"), 488 + DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-15A3070T"), 489 + } 490 + }, 491 + { 492 + .ident = "MAINGEAR Vector Pro 2 17", 493 + .matches = { 494 + DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"), 495 + DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-17A3070T"), 496 + }, 497 + }, 498 + { } 499 + }; 500 + 501 + static const struct dmi_system_id pcspecialist_laptop[] = { 502 + { 503 + .ident = "PCSpecialist Elimina Pro 16 M", 504 + .matches = { 505 + DMI_MATCH(DMI_SYS_VENDOR, "PCSpecialist"), 506 + DMI_MATCH(DMI_PRODUCT_NAME, "Elimina Pro 16 M"), 507 + }, 508 + }, 509 + { } 510 + }; 511 + 473 512 static const struct dmi_system_id lg_laptop[] = { 474 513 { 475 514 .ident = "LG Electronics 17U70P", ··· 532 493 static const struct irq_override_cmp override_table[] = { 533 494 { medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false }, 534 495 { asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false }, 496 + { tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true }, 497 + { maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true }, 498 + { pcspecialist_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true }, 535 499 { lg_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false }, 536 500 }; 537 501 ··· 553 511 entry->shareable == shareable) 554 512 return entry->override; 555 513 } 514 + 515 + #ifdef CONFIG_X86 516 + /* 517 + * Always use the MADT override info, except for the i8042 PS/2 ctrl 518 + * IRQs (1 and 12). For these the DSDT IRQ settings should sometimes 519 + * be used otherwise PS/2 keyboards / mice will not work. 520 + */ 521 + if (gsi != 1 && gsi != 12) 522 + return true; 523 + 524 + /* If the override comes from an INT_SRC_OVR MADT entry, honor it. */ 525 + if (acpi_int_src_ovr[gsi]) 526 + return true; 527 + 528 + /* 529 + * IRQ override isn't needed on modern AMD Zen systems and 530 + * this override breaks active low IRQs on AMD Ryzen 6000 and 531 + * newer systems. Skip it. 532 + */ 533 + if (boot_cpu_has(X86_FEATURE_ZEN)) 534 + return false; 535 + #endif 556 536 557 537 return true; 558 538 }