diff options
author | Tom Rini <trini@konsulko.com> | 2020-04-30 13:00:20 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-04-30 13:00:20 -0400 |
commit | 9f0a6df3a57469061582c6b27fc869829681beca (patch) | |
tree | 80b1a3707a5a4f6fd1d9db03ce24e12e0d47b781 /arch/x86/cpu/coreboot/tables.c | |
parent | 6d7dacf726ca043a3f5487549bbfa506c990c813 (diff) | |
parent | 249154672d43db6c7978fd9b67d224e9dec09867 (diff) |
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-x86
- DM ACPI support (Part A)
- Improve support for chain-loading x86 U-Boot
Diffstat (limited to 'arch/x86/cpu/coreboot/tables.c')
-rw-r--r-- | arch/x86/cpu/coreboot/tables.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/arch/x86/cpu/coreboot/tables.c b/arch/x86/cpu/coreboot/tables.c index 37e0424b5e..0f04c4f8e9 100644 --- a/arch/x86/cpu/coreboot/tables.c +++ b/arch/x86/cpu/coreboot/tables.c @@ -115,20 +115,11 @@ __weak void cb_parse_unhandled(u32 tag, unsigned char *ptr) static int cb_parse_header(void *addr, int len, struct sysinfo_t *info) { + unsigned char *ptr = addr; struct cb_header *header; - unsigned char *ptr = (unsigned char *)addr; int i; - for (i = 0; i < len; i += 16, ptr += 16) { - header = (struct cb_header *)ptr; - if (!strncmp((const char *)header->signature, "LBIO", 4)) - break; - } - - /* We walked the entire space and didn't find anything. */ - if (i >= len) - return -1; - + header = (struct cb_header *)ptr; if (!header->table_bytes) return 0; @@ -231,10 +222,13 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info) int get_coreboot_info(struct sysinfo_t *info) { - int ret = cb_parse_header((void *)0x00000000, 0x1000, info); + long addr; + int ret; - if (ret != 1) - ret = cb_parse_header((void *)0x000f0000, 0x1000, info); + addr = locate_coreboot_table(); + if (addr < 0) + return addr; + ret = cb_parse_header((void *)addr, 0x1000, info); - return (ret == 1) ? 0 : -1; + return ret == 1 ? 0 : -ENOENT; } |