On Tue, Oct 4, 2022 at 12:33 PM Jiri Slaby (SUSE) <jirislaby@xxxxxxxxxx> wrote: > > LENOVO IdeaPad Flex 5 is ryzen-5 based and the commit below removed IRQ > overriding for those. This broke touchscreen and trackpad: > i2c_designware AMDI0010:00: controller timed out > i2c_designware AMDI0010:03: controller timed out > i2c_hid_acpi i2c-MSFT0001:00: failed to reset device: -61 > i2c_designware AMDI0010:03: controller timed out > ... > i2c_hid_acpi i2c-MSFT0001:00: can't add hid device: -61 > i2c_hid_acpi: probe of i2c-MSFT0001:00 failed with error -61 > > White-list this specific model in the override_table. > > For this to work, the ZEN test needs to be put below the table walk. > > Fixes: 37c81d9f1d1b (ACPI: resource: skip IRQ override on AMD Zen platforms) > Link: https://bugzilla.suse.com/show_bug.cgi?id=1203794 > Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx> > Cc: Len Brown <lenb@xxxxxxxxxx> > Cc: linux-acpi@xxxxxxxxxxxxxxx > Cc: Chuanhong Guo <gch981213@xxxxxxxxx> > Cc: Tighe Donnelly <tighe.donnelly@xxxxxxxxxxxxxx> > Cc: Mario Limonciello <mario.limonciello@xxxxxxx> > Cc: Fridrich Strba <fstrba@xxxxxxxx> > Signed-off-by: Jiri Slaby (SUSE) <jirislaby@xxxxxxxxxx> > --- > drivers/acpi/resource.c | 42 +++++++++++++++++++++++++++-------------- > 1 file changed, 28 insertions(+), 14 deletions(-) > > diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c > index 514d89656dde..8d13e94bb921 100644 > --- a/drivers/acpi/resource.c > +++ b/drivers/acpi/resource.c > @@ -424,17 +424,31 @@ static const struct dmi_system_id asus_laptop[] = { > { } > }; > > +static const struct dmi_system_id lenovo_82ra[] = { > + { > + .ident = "LENOVO IdeaPad Flex 5 16ALC7", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), > + DMI_MATCH(DMI_PRODUCT_NAME, "82RA"), > + }, > + }, > + { } > +}; > + > struct irq_override_cmp { > const struct dmi_system_id *system; > unsigned char irq; > unsigned char triggering; > unsigned char polarity; > unsigned char shareable; > + bool override; > }; > > -static const struct irq_override_cmp skip_override_table[] = { > - { medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0 }, > - { asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0 }, > +static const struct irq_override_cmp override_table[] = { > + { medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false }, > + { asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false }, > + { lenovo_82ra, 6, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true }, > + { lenovo_82ra, 10, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true }, > }; > > static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity, > @@ -442,6 +456,17 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity, > { > int i; > > + for (i = 0; i < ARRAY_SIZE(override_table); i++) { > + const struct irq_override_cmp *entry = &override_table[i]; > + > + if (dmi_check_system(entry->system) && > + entry->irq == gsi && > + entry->triggering == triggering && > + entry->polarity == polarity && > + entry->shareable == shareable) > + return entry->override; > + } > + > #ifdef CONFIG_X86 > /* > * IRQ override isn't needed on modern AMD Zen systems and > @@ -452,17 +477,6 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity, > return false; > #endif > > - for (i = 0; i < ARRAY_SIZE(skip_override_table); i++) { > - const struct irq_override_cmp *entry = &skip_override_table[i]; > - > - if (dmi_check_system(entry->system) && > - entry->irq == gsi && > - entry->triggering == triggering && > - entry->polarity == polarity && > - entry->shareable == shareable) > - return false; > - } > - > return true; > } > > -- Applied along with the [2/2] as 6.1-rc material, thanks!