Hi Mark, On 2/23/22 17:07, 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 Wow, you got it working, cool! The patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> Regards, Hans > --- > arch/x86/kernel/acpi/boot.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c > index 5b6d1a95776f..7caf4da075cd 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,20 @@ 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 = "SEGA AALE", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "NEC"), > + DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"), > + DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), > + DMI_MATCH(DMI_BIOS_VERSION, "V1.12"), > + DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"), > + }, > + }, > {} > }; > > > base-commit: cfb92440ee71adcc2105b0890bb01ac3cddb8507