x86: Add a little more info to cbsysinfo
authorSimon Glass <sjg@chromium.org>
Tue, 25 Jul 2023 21:37:06 +0000 (15:37 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Tue, 1 Aug 2023 02:08:49 +0000 (10:08 +0800)
Show the number of records in the table and the total table size in
bytes.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/include/asm/cb_sysinfo.h
arch/x86/lib/coreboot/cb_sysinfo.c
cmd/x86/cbsysinfo.c

index 2c78b22..12fa395 100644 (file)
  * @rsdp: Pointer to ACPI RSDP table
  * @unimpl_count: Number of entries in unimpl_map[]
  * @unimpl: List of unimplemented IDs (bottom 8 bits only)
+ * @table_size: Number of bytes taken up by the sysinfo table
+ * @rec_count: Number of records in the sysinfo table
  */
 struct sysinfo_t {
        unsigned int cpu_khz;
@@ -219,6 +221,8 @@ struct sysinfo_t {
        void *rsdp;
        u32 unimpl_count;
        u8 unimpl[SYSINFO_MAX_UNIMPL];
+       uint table_size;
+       uint rec_count;
 };
 
 extern struct sysinfo_t lib_sysinfo;
index 42cc3a1..dfbc80c 100644 (file)
@@ -447,6 +447,8 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
 
                ptr += rec->size;
        }
+       info->table_size += (void *)ptr - (void *)header;
+       info->rec_count += header->table_entries;
 
        return 1;
 }
@@ -462,6 +464,8 @@ int get_coreboot_info(struct sysinfo_t *info)
        addr = locate_coreboot_table();
        if (addr < 0)
                return addr;
+       info->table_size = 0;
+       info->rec_count = 0;
        ret = cb_parse_header((void *)addr, 0x1000, info);
        if (!ret)
                return -ENOENT;
index 2b8d3b0..84822a3 100644 (file)
@@ -190,8 +190,9 @@ static void show_table(struct sysinfo_t *info, bool verbose)
        struct cb_serial *ser = info->serial;
        int i;
 
-       printf("Coreboot table at %lx, decoded to %p",
-              gd->arch.coreboot_table, info);
+       printf("Coreboot table at %lx, size %x, records %x (dec %d), decoded to %p",
+              gd->arch.coreboot_table, info->table_size, info->rec_count,
+              info->rec_count, info);
        if (info->header)
                printf(", forwarded to %p\n", info->header);
        printf("\n");