mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 15:03:53 +02:00
ACPI fixes for 6.14-rc1
Add a new ACPI-related quirk for Vexia EDU ATLA 10 tablet 5V (Hans de Goede) and fix the MADT parsing code so that CPUs with different entry types (LAPIC and x2APIC) are initialized in the order in which they appear in the MADT as required by the ACPI specification (Zhang Rui). -----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEE4fcc61cGeeHD/fCwgsRv/nhiVHEFAmeb5+ESHHJqd0Byand5 c29ja2kubmV0AAoJEILEb/54YlRxyScP/1wBdhFmU2RrFNoCfZLBYsp4tsQjNyFA D4Wib8pMwlydyFW+Nig8G7ldEomZoEslhmLlKhz0lMX0JSfz9gnelKrrEXVxYS22 cCeNFTwl58gBk1R6uOqfJSaE851G+Z+3LxN1OOiV5QyP59stfBxz0Nqp36e9yABR kRfY8LkHe8yD+G+9QaMPOowQm0Q3Gv/GMUAAUEOLR/qPoAymOYxCLbs8V5IrOec1 OJkSzvaoD6UdSR62an+6vx5nA4CgflZnwn1g+OLVPSjlcY64zl+HlqrjvntdPyLm MTiICp84nXPZQDWMvGV6drZqIOVokuZay2BFg6hAqfMgU27xrZ6B7lmjq/uvhVUb Ejmtst6MWaVsrHuHaqv6+gBdiuQqtDiHs1WsIdv1i25DhQvLWSXrypkcLhtArO5V qOmr+cI2aR0WTmV3dG+IBdE9UczCGKZl92r6Rr4aAnbF6OkBLb059t40s64XjJf6 gHApQS0vYnNdXK7/21RkGP7mz+Zr7YiBPyoGGiIKEbTJB9UwoITVfUFjfUxYSUF1 HLMzGvh/Ra3NcHrHNAHbzYZHuNev8qloPDMJ9lVVz+AEh6qVSKDWYxmeBWY6JBnK 7/5SR1e/5x+WP5m/1PZnTt4UOmvwvGE1O63k6wrdqr3k6C25xwfcS7Yggbd/VWLN q+ZPtietj8ML =JXCp -----END PGP SIGNATURE----- Merge tag 'acpi-6.14-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull ACPI fixes from Rafael Wysocki: "Add a new ACPI-related quirk for Vexia EDU ATLA 10 tablet 5V (Hans de Goede) and fix the MADT parsing code so that CPUs with different entry types (LAPIC and x2APIC) are initialized in the order in which they appear in the MADT as required by the ACPI specification (Zhang Rui)" * tag 'acpi-6.14-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: x86/acpi: Fix LAPIC/x2APIC parsing order ACPI: x86: Add skip i2c clients quirk for Vexia EDU ATLA 10 tablet 5V
This commit is contained in:
commit
47cbb41a2e
|
@ -226,6 +226,28 @@ acpi_parse_x2apic(union acpi_subtable_headers *header, const unsigned long end)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
acpi_check_lapic(union acpi_subtable_headers *header, const unsigned long end)
|
||||
{
|
||||
struct acpi_madt_local_apic *processor = NULL;
|
||||
|
||||
processor = (struct acpi_madt_local_apic *)header;
|
||||
|
||||
if (BAD_MADT_ENTRY(processor, end))
|
||||
return -EINVAL;
|
||||
|
||||
/* Ignore invalid ID */
|
||||
if (processor->id == 0xff)
|
||||
return 0;
|
||||
|
||||
/* Ignore processors that can not be onlined */
|
||||
if (!acpi_is_processor_usable(processor->lapic_flags))
|
||||
return 0;
|
||||
|
||||
has_lapic_cpus = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
acpi_parse_lapic(union acpi_subtable_headers * header, const unsigned long end)
|
||||
{
|
||||
|
@ -257,7 +279,6 @@ acpi_parse_lapic(union acpi_subtable_headers * header, const unsigned long end)
|
|||
processor->processor_id, /* ACPI ID */
|
||||
processor->lapic_flags & ACPI_MADT_ENABLED);
|
||||
|
||||
has_lapic_cpus = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1026,6 +1047,8 @@ static int __init early_acpi_parse_madt_lapic_addr_ovr(void)
|
|||
static int __init acpi_parse_madt_lapic_entries(void)
|
||||
{
|
||||
int count, x2count = 0;
|
||||
struct acpi_subtable_proc madt_proc[2];
|
||||
int ret;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||
return -ENODEV;
|
||||
|
@ -1034,10 +1057,27 @@ static int __init acpi_parse_madt_lapic_entries(void)
|
|||
acpi_parse_sapic, MAX_LOCAL_APIC);
|
||||
|
||||
if (!count) {
|
||||
count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC,
|
||||
acpi_parse_lapic, MAX_LOCAL_APIC);
|
||||
x2count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_X2APIC,
|
||||
acpi_parse_x2apic, MAX_LOCAL_APIC);
|
||||
/* Check if there are valid LAPIC entries */
|
||||
acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC, acpi_check_lapic, MAX_LOCAL_APIC);
|
||||
|
||||
/*
|
||||
* Enumerate the APIC IDs in the order that they appear in the
|
||||
* MADT, no matter LAPIC entry or x2APIC entry is used.
|
||||
*/
|
||||
memset(madt_proc, 0, sizeof(madt_proc));
|
||||
madt_proc[0].id = ACPI_MADT_TYPE_LOCAL_APIC;
|
||||
madt_proc[0].handler = acpi_parse_lapic;
|
||||
madt_proc[1].id = ACPI_MADT_TYPE_LOCAL_X2APIC;
|
||||
madt_proc[1].handler = acpi_parse_x2apic;
|
||||
ret = acpi_table_parse_entries_array(ACPI_SIG_MADT,
|
||||
sizeof(struct acpi_table_madt),
|
||||
madt_proc, ARRAY_SIZE(madt_proc), MAX_LOCAL_APIC);
|
||||
if (ret < 0) {
|
||||
pr_err("Error parsing LAPIC/X2APIC entries\n");
|
||||
return ret;
|
||||
}
|
||||
count = madt_proc[0].count;
|
||||
x2count = madt_proc[1].count;
|
||||
}
|
||||
if (!count && !x2count) {
|
||||
pr_err("No LAPIC entries present\n");
|
||||
|
|
|
@ -407,6 +407,19 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {
|
|||
.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS |
|
||||
ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY),
|
||||
},
|
||||
{
|
||||
/* Vexia Edu Atla 10 tablet 5V version */
|
||||
.matches = {
|
||||
/* Having all 3 of these not set is somewhat unique */
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "To be filled by O.E.M."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "To be filled by O.E.M."),
|
||||
/* Above strings are too generic, also match on BIOS date */
|
||||
DMI_MATCH(DMI_BIOS_DATE, "05/14/2015"),
|
||||
},
|
||||
.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS |
|
||||
ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY),
|
||||
},
|
||||
{
|
||||
/* Vexia Edu Atla 10 tablet 9V version */
|
||||
.matches = {
|
||||
|
|
Loading…
Reference in New Issue
Block a user