Antwort: [PATCH v5 27/29] acpi: Put table-setup code in its own function

Wolfgang Wallner wolfgang.wallner at br-automation.com
Tue Apr 14 14:21:46 CEST 2020


Hi Simon,

-----"Simon Glass" <sjg at chromium.org> schrieb: -----

>Betreff: [PATCH v5 27/29] acpi: Put table-setup code in its own
>function
>
>We always write three basic tables to ACPI at the start. Move this
>into
>its own function, along with acpi_fill_header(), so we can write a
>test
>for this code.
>
>Signed-off-by: Simon Glass <sjg at chromium.org>
>---
>
>Changes in v5: None
>Changes in v4:
>- Put back cast on table_compute_checksum()
>
>Changes in v3:
>- Fix 'XDST' typo
>- Move acpi_align_large() out of dm_test_acpi_setup_base_tables()
>- Beef up the comment explaining how the unaligned address is used
>
>Changes in v2: None
>
> arch/x86/lib/acpi_table.c | 72 +-----------------------------------
> include/acpi/acpi_table.h | 10 +++++
> lib/acpi/acpi_table.c     | 77
>+++++++++++++++++++++++++++++++++++++++
> test/dm/acpi.c            | 58 ++++++++++++++++++++++++++++-
> 4 files changed, 144 insertions(+), 73 deletions(-)

[snip]

>diff --git a/test/dm/acpi.c b/test/dm/acpi.c
>index ffc611efb82..beb1b6da737 100644
>--- a/test/dm/acpi.c
>+++ b/test/dm/acpi.c

[snip]

>+/* Test acpi_setup_base_tables */
>+static int dm_test_acpi_setup_base_tables(struct unit_test_state
>*uts)
>+{
>+	struct acpi_rsdp *rsdp;
>+	struct acpi_rsdt *rsdt;
>+	struct acpi_xsdt *xsdt;
>+	struct acpi_ctx ctx;
>+	void *buf, *end;
>+
>+	/*
>+	 * Use an unaligned address deliberately, by allocating an aligned
>+	 * address and then adding 4 to it
>+	 */
>+	buf = memalign(64, BUF_SIZE);
>+	ut_assertnonnull(buf);
>+	acpi_setup_base_tables(&ctx, buf + 4);
>+
>+	rsdp = buf + 16;
>+	ut_asserteq_ptr(rsdp, ctx.rsdp);
>+	ut_assertok(memcmp(RSDP_SIG, rsdp->signature,
>sizeof(rsdp->signature)));

Nit: could we also use ut_assertmem_eq() here? Similar to patch 22.

>+	ut_asserteq(sizeof(*rsdp), rsdp->length);
>+	ut_assertok(table_compute_checksum(rsdp, 20));
>+	ut_assertok(table_compute_checksum(rsdp, sizeof(*rsdp)));
>+
>+	rsdt = PTR_ALIGN((void *)rsdp + sizeof(*rsdp), 16);
>+	ut_asserteq_ptr(rsdt, ctx.rsdt);
>+	ut_assertok(memcmp("RSDT", rsdt->header.signature, ACPI_NAME_LEN));

same here

>+	ut_asserteq(sizeof(*rsdt), rsdt->header.length);
>+	ut_assertok(table_compute_checksum(rsdt, sizeof(*rsdt)));
>+
>+	xsdt = PTR_ALIGN((void *)rsdt + sizeof(*rsdt), 16);
>+	ut_assertok(memcmp("XSDT", xsdt->header.signature, ACPI_NAME_LEN));

and here

>+	ut_asserteq(sizeof(*xsdt), xsdt->header.length);
>+	ut_assertok(table_compute_checksum(xsdt, sizeof(*xsdt)));
>+
>+	end = PTR_ALIGN((void *)xsdt + sizeof(*xsdt), 64);
>+	ut_asserteq_ptr(end, ctx.current);
>+
>+	ut_asserteq(map_to_sysmem(rsdt), rsdp->rsdt_address);
>+	ut_asserteq(map_to_sysmem(xsdt), rsdp->xsdt_address);
>+
>+	return 0;
>+}
>+DM_TEST(dm_test_acpi_setup_base_tables,
>+	DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
>-- 
>2.26.0.292.g33ef6b2f38-goog
>

Reviewed-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>



More information about the U-Boot mailing list