On Thu, Feb 24, 2022 at 9:41 AM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > 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> Applied as 5.18 material, thanks! > > --- > > 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 >