Hi, On 3/7/22 04:16, Mark Cilissen wrote: > On this board the ACPI RSDP structure points to both a RSDT and an XSDT, > but the XSDT points to a truncated FADT. This causes all sorts of trouble > and usually a complete failure to boot after the following error occurs: > > ACPI Error: Unsupported address space: 0x20 (*/hwregs-*) > ACPI Error: AE_SUPPORT, Unable to initialize fixed events (*/evevent-*) > ACPI: Unable to start ACPI Interpreter > > This leaves the ACPI implementation in such a broken state that subsequent > kernel subsystem initialisations go wrong, resulting in among others > mismapped PCI memory, SATA and USB enumeration failures, and freezes. > > As this is an older embedded platform that will likely never see any BIOS > updates to address this issue and its default shipping OS only complies to > ACPI 1.0, work around this by forcing `acpi=rsdt`. This patch, applied on > top of Linux 5.10.102, was confirmed on real hardware to fix the issue. > > Signed-off-by: Mark Cilissen <mark@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> Thanks, the new version looks good to me. Regards, Hans > --- > v3: > - Change DMI matching criteria as per Hans's suggestion > > v2: > - Reduce DMI match count to 4 to not overflow dmi_system_id structure > Reported-by: kernel test robot <lkp@xxxxxxxxx> > - Change board ident to correct name > - Fix small style issue > - Fix up subject as per Rafael's changes > --- > arch/x86/kernel/acpi/boot.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c > index 5b6d1a95776f..0d01e7f5078c 100644 > --- a/arch/x86/kernel/acpi/boot.c > +++ b/arch/x86/kernel/acpi/boot.c > @@ -1328,6 +1328,17 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d) > return 0; > } > > +static int __init disable_acpi_xsdt(const struct dmi_system_id *d) > +{ > + if (!acpi_force) { > + pr_notice("%s detected: force use of acpi=rsdt\n", d->ident); > + acpi_gbl_do_not_use_xsdt = TRUE; > + } else { > + pr_notice("Warning: DMI blacklist says broken, but acpi XSDT forced\n"); > + } > + return 0; > +} > + > static int __init dmi_disable_acpi(const struct dmi_system_id *d) > { > if (!acpi_force) { > @@ -1451,6 +1462,19 @@ static const struct dmi_system_id acpi_dmi_table[] __initconst = { > DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), > }, > }, > + /* > + * Boxes that need ACPI XSDT use disabled due to corrupted tables > + */ > + { > + .callback = disable_acpi_xsdt, > + .ident = "Advantech DAC-BJ01", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "NEC"), > + DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"), > + DMI_MATCH(DMI_BIOS_VERSION, "V1.12"), > + DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"), > + }, > + }, > {} > }; > > > base-commit: 038101e6b2cd5c55f888f85db42ea2ad3aecb4b6