]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: all firmware tables must be paragraph aligned
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 1 Jan 2024 23:11:44 +0000 (00:11 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 20 Apr 2024 08:15:03 +0000 (10:15 +0200)
On qemu-x86_64_defconfig the following was observed:

    => efidebug tables
    00000000000f0074  eb9d2d31-2d88-11d3-9a16-0090273fc14d  SMBIOS table

The SMBIOS configuration table does not point to a paragraph-aligned
(16 byte aligned) address. The reason is that in write_tables() rom_addr is
not aligned and copied to gd->arch.smbios_start.

The Simple Firmware Interface requires that the SFI table is paragraph-
aligned but our code does not guarantee this.

As all tables written in write_tables() must be paragraph-aligned, we
should implement the address rounding in write_tables() and not in table
specific routines like copy_pirq_routing_table().

Add paragraph-alignment in write_tables().

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/x86/lib/tables.c

index 12eae17c3968dcc8946937c9d926d8b4962ca12e..1095dc92c5aa13c514853c2543b666ab10810892 100644 (file)
@@ -98,6 +98,8 @@ int write_tables(void)
                int size = table->size ? : CONFIG_ROM_TABLE_SIZE;
                u32 rom_table_end;
 
+               rom_addr = ALIGN(rom_addr, 16);
+
                if (!strcmp("smbios", table->name))
                        gd->arch.smbios_start = rom_addr;