
From: Simon Glass <sjg@chromium.org> Update this function to make use of the new support for reading qfw files, this simplifying it considerably. Fix up the header order while we are here. Signed-off-by: Simon Glass <sjg@chromium.org> --- drivers/qfw/qfw_acpi.c | 55 ++++++++++++------------------------------ 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/drivers/qfw/qfw_acpi.c b/drivers/qfw/qfw_acpi.c index ec00ba65ade..16dd94ba71f 100644 --- a/drivers/qfw/qfw_acpi.c +++ b/drivers/qfw/qfw_acpi.c @@ -6,17 +6,18 @@ #define LOG_CATEGORY UCLASS_QFW -#include <acpi/acpi_table.h> +#include <abuf.h> #include <bloblist.h> #include <errno.h> #include <malloc.h> #include <mapmem.h> #include <qfw.h> -#include <tables_csum.h> #include <stdio.h> -#include <linux/sizes.h> +#include <tables_csum.h> +#include <acpi/acpi_table.h> #include <asm/byteorder.h> #include <asm/global_data.h> +#include <linux/sizes.h> DECLARE_GLOBAL_DATA_PTR; @@ -164,12 +165,10 @@ static int bios_linker_add_checksum(struct udevice *dev, ulong write_acpi_tables(ulong addr) { int i, ret; - struct fw_file *file; - struct bios_linker_entry *table_loader; struct bios_linker_entry *entry; - uint32_t size; struct udevice *dev; struct acpi_ctx *ctx; + struct abuf loader; ctx = malloc(sizeof(*ctx)); if (!ctx) { @@ -177,48 +176,24 @@ ulong write_acpi_tables(ulong addr) return addr; } - acpi_setup_ctx(ctx, addr); - ret = qfw_get_dev(&dev); if (ret) { printf("error: no qfw\n"); - return addr; - } - - /* make sure fw_list is loaded */ - ret = qfw_read_firmware_list(dev); - if (ret) { - printf("error: can't read firmware file list\n"); - return addr; + return -ENOENT; } - - file = qfw_find_file(dev, "etc/table-loader"); - if (!file) { - printf("error: can't find etc/table-loader\n"); + ret = qfw_get_table_loader(dev, &loader); + if (ret) return addr; - } - size = be32_to_cpu(file->cfg.size); - if ((size % sizeof(*entry)) != 0) { - printf("error: table-loader maybe corrupted\n"); - return addr; - } - - table_loader = malloc(size); - if (!table_loader) { - printf("error: no memory for table-loader\n"); - return addr; - } + acpi_setup_ctx(ctx, addr); /* QFW always puts tables at high addresses */ - gd->arch.table_start_high = (ulong)table_loader; - gd->arch.table_end_high = (ulong)table_loader; - - qfw_read_entry(dev, be16_to_cpu(file->cfg.select), size, table_loader); + gd->arch.table_start_high = abuf_addr(&loader); + gd->arch.table_end_high = abuf_addr(&loader); - for (i = 0; i < (size / sizeof(*entry)); i++) { + for (i = 0; i < loader.size / sizeof(*entry); i++) { log_content("entry %d: addr %lx\n", i, addr); - entry = table_loader + i; + entry = ((struct bios_linker_entry *)loader.data) + i; switch (le32_to_cpu(entry->command)) { case BIOS_LINKER_LOADER_COMMAND_ALLOCATE: log_content(" - %s\n", entry->alloc.file); @@ -246,6 +221,8 @@ ulong write_acpi_tables(ulong addr) out: if (ret) { struct fw_cfg_file_iter iter; + struct fw_file *file; + for (file = qfw_file_iter_init(dev, &iter); !qfw_file_iter_end(&iter); file = qfw_file_iter_next(&iter)) { @@ -256,7 +233,7 @@ out: } } - free(table_loader); + abuf_uninit(&loader); if (!ctx->rsdp) { printf("error: no RSDP found\n"); -- 2.43.0