[PATCH v3 02/11] efi_selftest: add ACPI configuration table test
Ilias Apalodimas
ilias.apalodimas at linaro.org
Thu Jul 2 10:55:24 CEST 2026
Hi Heinrich
[...]
> + }
> + if (!checksum_ok(rsdp, rsdp_len)) {
> + efi_st_error("Invalid RSDP extended checksum\n");
> + return EFI_ST_FAILURE;
> + }
> + }
> +
> + memcpy(&rsdt_addr32, &rsdp->rsdt_address, sizeof(rsdt_addr32));
> + rsdt_addr = rsdt_addr32;
> +
> + xsdt_addr64 = 0;
> + if (rsdp->revision >= ACPI_RSDP_REV_ACPI_2_0)
> + memcpy(&xsdt_addr64, &rsdp->xsdt_address, sizeof(xsdt_addr64));
> + xsdt_addr = xsdt_addr64;
> +
> + if (!rsdt_addr && !xsdt_addr) {
> + efi_st_error("Neither RSDT nor XSDT address is set\n");
> + return EFI_ST_FAILURE;
> + }
> +
> + if (xsdt_addr) {
> + table = (struct acpi_table_header *)xsdt_addr;
> + if (!memcmp(table->signature, "XSDT", 4))
> + return EFI_ST_SUCCESS;
We should check for both the RSDT and XSDT.
Just invert the memcmp I guess?
Thanks
/Ilias
> + efi_st_error("XSDT address does not point to XSDT\n");
> + }
> +
> + if (rsdt_addr) {
> + table = (struct acpi_table_header *)rsdt_addr;
> + if (!memcmp(table->signature, "RSDT", 4))
> + return EFI_ST_SUCCESS;
> + efi_st_error("RSDT address does not point to RSDT\n");
> + }
> +
> + return EFI_ST_FAILURE;
> +}
> +
> +/**
> + * efi_st_acpi_execute() - execute ACPI selftest
> + *
> + * Return: status code
> + */
> +static int efi_st_acpi_execute(void)
> +{
> + struct acpi_rsdp *rsdp2, *rsdp1;
> + int ret;
> +
> + rsdp2 = efi_st_get_config_table(&acpi2_guid);
> + rsdp1 = efi_st_get_config_table(&acpi1_guid);
> +
> + if (!rsdp2 && !rsdp1) {
> + efi_st_printf("No ACPI configuration table, test skipped\n");
> + return EFI_ST_SUCCESS;
> + }
> +
> + if (rsdp2) {
> + ret = check_rsdp(rsdp2);
> + if (ret != EFI_ST_SUCCESS)
> + return ret;
> + }
> +
> + if (rsdp1) {
> + ret = check_rsdp(rsdp1);
> + if (ret != EFI_ST_SUCCESS)
> + return ret;
> + }
> +
> + return EFI_ST_SUCCESS;
> +}
> +
> +EFI_UNIT_TEST(acpi) = {
> + .name = "acpi",
> + .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT,
> + .execute = efi_st_acpi_execute,
> +};
> --
> 2.53.0
>
More information about the U-Boot
mailing list