x86: coreboot: add SMBIOS cbmem entry parsing
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Thu, 14 May 2020 13:16:22 +0000 (15:16 +0200)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 27 May 2020 06:40:09 +0000 (14:40 +0800)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/coreboot/tables.c
arch/x86/include/asm/arch-coreboot/sysinfo.h
arch/x86/include/asm/coreboot_tables.h

index 0f04c4f8e91c7094e9954dde81eeaa32cd005d78..a5d31d1deab2d5b6dd27584e5ffe1d6ce9981b87 100644 (file)
@@ -69,6 +69,17 @@ static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info)
        info->vbnv_size = vbnv->vbnv_size;
 }
 
+static void cb_parse_cbmem_entry(unsigned char *ptr, struct sysinfo_t *info)
+{
+       struct cb_cbmem_entry *entry = (struct cb_cbmem_entry *)ptr;
+
+       if (entry->id != CBMEM_ID_SMBIOS)
+               return;
+
+       info->smbios_start = entry->address;
+       info->smbios_size = entry->entry_size;
+}
+
 static void cb_parse_gpios(unsigned char *ptr, struct sysinfo_t *info)
 {
        int i;
@@ -206,6 +217,9 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
                case CB_TAG_VBNV:
                        cb_parse_vbnv(ptr, info);
                        break;
+               case CB_TAG_CBMEM_ENTRY:
+                       cb_parse_cbmem_entry(ptr, info);
+                       break;
                default:
                        cb_parse_unhandled(rec->tag, ptr);
                        break;
index dd8d1cba92f65e36edcfd5bfed81e3899072492c..419ec5293350421ce835fc498ab4641ef800972d 100644 (file)
@@ -49,6 +49,8 @@ struct sysinfo_t {
        u32     vdat_size;
        void    *tstamp_table;
        void    *cbmem_cons;
+       u64 smbios_start;
+       u32 smbios_size;
 
        struct cb_serial *serial;
 };
index 268284f43c30745ad1634bdb801ba48309a86227..7e1576768bee29f0ccf85bf915438cef9da6a989 100644 (file)
@@ -214,6 +214,17 @@ struct cb_vbnv {
        uint32_t vbnv_size;
 };
 
+#define CB_TAG_CBMEM_ENTRY 0x0031
+#define CBMEM_ID_SMBIOS    0x534d4254
+
+struct cb_cbmem_entry {
+       uint32_t tag;
+       uint32_t size;
+       uint64_t address;
+       uint32_t entry_size;
+       uint32_t id;
+};
+
 #define CB_TAG_CMOS_OPTION_TABLE       0x00c8
 
 struct cb_cmos_option_table {