Hi Heinrich, On Tue, 14 Nov 2023 at 09:39, Heinrich Schuchardt <heinrich.schucha...@canonical.com> wrote: > > The RSDT table is deprecated and does not exist on all systems. > > By preference scan XSDT for the table to find. If no XSDT table exists, try > to use the RSDT table. > > Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> > --- > lib/acpi/acpi.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c > index 14b15754f4..3938946fc6 100644 > --- a/lib/acpi/acpi.c > +++ b/lib/acpi/acpi.c > @@ -16,18 +16,30 @@ struct acpi_table_header *acpi_find_table(const char *sig) > { > struct acpi_rsdp *rsdp; > struct acpi_rsdt *rsdt; > + struct acpi_xsdt *xsdt; > int len, i, count; > > rsdp = map_sysmem(gd_acpi_start(), 0); > if (!rsdp) > return NULL; > - rsdt = map_sysmem(rsdp->rsdt_address, 0); > - len = rsdt->header.length - sizeof(rsdt->header); > - count = len / sizeof(u32); > + xsdt = map_sysmem(rsdp->xsdt_address, 0); > + if (xsdt) { > + len = xsdt->header.length - sizeof(xsdt->header); > + count = len / sizeof(u64); > + } else { > + rsdt = map_sysmem(rsdp->rsdt_address, 0); > + if (!rsdt) > + return NULL; > + len = rsdt->header.length - sizeof(rsdt->header); > + count = len / sizeof(u32); > + } > for (i = 0; i < count; i++) { > struct acpi_table_header *hdr; > > - hdr = map_sysmem(rsdt->entry[i], 0); > + if (xsdt) > + hdr = map_sysmem(xsdt->entry[i], 0); > + else > + hdr = map_sysmem(rsdt->entry[i], 0); > if (!memcmp(hdr->signature, sig, ACPI_NAME_LEN)) > return hdr; > if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) { > -- > 2.40.1 >
Can you please expand test/dm/acpi.c to check the above? Perhaps only on sandbox64 ? Regards, Simon