diff options
Diffstat (limited to 'drivers/acpi/resource.c')
| -rw-r--r-- | drivers/acpi/resource.c | 68 | 
1 files changed, 68 insertions, 0 deletions
diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c index 1dd8d5aebf67..32cfa3f4efd3 100644 --- a/drivers/acpi/resource.c +++ b/drivers/acpi/resource.c @@ -470,6 +470,49 @@ static const struct dmi_system_id asus_laptop[] = {  	{ }  }; +static const struct dmi_system_id tongfang_gm_rg[] = { +	{ +		.ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD", +		.matches = { +			DMI_MATCH(DMI_BOARD_NAME, "GMxRGxx"), +		}, +	}, +	{ } +}; + +static const struct dmi_system_id maingear_laptop[] = { +	{ +		.ident = "MAINGEAR Vector Pro 2 15", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"), +			DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-15A3070T"), +		} +	}, +	{ +		.ident = "MAINGEAR Vector Pro 2 17", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "Micro Electronics Inc"), +			DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-17A3070T"), +		}, +	}, +	{ } +}; + +static const struct dmi_system_id pcspecialist_laptop[] = { +	{ +		.ident = "PCSpecialist Elimina Pro 16 M", +		/* +		 * Some models have product-name "Elimina Pro 16 M", +		 * others "GM6BGEQ". Match on board-name to match both. +		 */ +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "PCSpecialist"), +			DMI_MATCH(DMI_BOARD_NAME, "GM6BGEQ"), +		}, +	}, +	{ } +}; +  static const struct dmi_system_id lg_laptop[] = {  	{  		.ident = "LG Electronics 17U70P", @@ -493,6 +536,9 @@ struct irq_override_cmp {  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 }, +	{ tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true }, +	{ maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true }, +	{ pcspecialist_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },  	{ lg_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },  }; @@ -512,6 +558,28 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity,  			return entry->override;  	} +#ifdef CONFIG_X86 +	/* +	 * Always use the MADT override info, except for the i8042 PS/2 ctrl +	 * IRQs (1 and 12). For these the DSDT IRQ settings should sometimes +	 * be used otherwise PS/2 keyboards / mice will not work. +	 */ +	if (gsi != 1 && gsi != 12) +		return true; + +	/* If the override comes from an INT_SRC_OVR MADT entry, honor it. */ +	if (acpi_int_src_ovr[gsi]) +		return true; + +	/* +	 * 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 +  	return true;  }  | 
