diff options
-rw-r--r-- | src/Kconfig | 7 | ||||
-rw-r--r-- | src/include/boardid.h | 1 | ||||
-rw-r--r-- | src/include/boot/coreboot_tables.h | 7 | ||||
-rw-r--r-- | src/lib/coreboot_table.c | 16 |
4 files changed, 31 insertions, 0 deletions
diff --git a/src/Kconfig b/src/Kconfig index 7c325c292b..569e404224 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -253,6 +253,13 @@ config UPDATE_IMAGE is a suitable file for further processing. The bootblock will not be modified. +config RAM_CODE_SUPPORT + bool "Discover RAM configuration code and store it in coreboot table" + default n + help + If enabled, coreboot discovers RAM configuration (value obtained by + reading board straps) and stores it in coreboot table. + endmenu source "src/mainboard/Kconfig" diff --git a/src/include/boardid.h b/src/include/boardid.h index d1c6ad9756..41c21d6e31 100644 --- a/src/include/boardid.h +++ b/src/include/boardid.h @@ -23,5 +23,6 @@ #include <stdint.h> uint8_t board_id(void); +uint32_t ram_code(void); #endif /* __INCLUDE_BOARDID_H__ */ diff --git a/src/include/boot/coreboot_tables.h b/src/include/boot/coreboot_tables.h index db55adaa36..56394733ce 100644 --- a/src/include/boot/coreboot_tables.h +++ b/src/include/boot/coreboot_tables.h @@ -276,6 +276,13 @@ struct lb_macs { struct mac_address mac_addrs[0]; }; +#define LB_TAG_RAM_CODE 0x0028 +struct lb_ram_code { + uint32_t tag; + uint32_t size; + uint32_t ram_code; +}; + /* The following structures are for the cmos definitions table */ #define LB_TAG_CMOS_OPTION_TABLE 200 /* cmos header record */ diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c index 365283fffe..332bed172a 100644 --- a/src/lib/coreboot_table.c +++ b/src/lib/coreboot_table.c @@ -227,6 +227,19 @@ static void lb_board_id(struct lb_header *header) #endif } +static void lb_ram_code(struct lb_header *header) +{ +#if IS_ENABLED(CONFIG_RAM_CODE_SUPPORT) + struct lb_ram_code *code; + + code = (struct lb_ram_code *)lb_new_record(header); + + code->tag = LB_TAG_RAM_CODE; + code->size = sizeof(*code); + code->ram_code = ram_code(); +#endif +} + static void add_cbmem_pointers(struct lb_header *header) { /* @@ -452,6 +465,9 @@ unsigned long write_coreboot_table( /* Add board ID if available */ lb_board_id(head); + /* Add RAM config if available */ + lb_ram_code(head); + add_cbmem_pointers(head); /* Add board-specific table entries, if any. */ |