aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/prodrive/hermes/variants/baseboard
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2020-11-12 16:41:57 +0100
committerPatrick Rudolph <siro@das-labor.org>2021-02-17 13:38:03 +0000
commit35f0a8fec7cd6127838fbe5a36170ba73efa49a4 (patch)
tree6eef4234394c6f54b4501d183919f704e6f857e5 /src/mainboard/prodrive/hermes/variants/baseboard
parent71555955e91e1aac6c4ef32ebb7ee817fc31e31f (diff)
mb/prodrive/hermes: Write board layout
The I2C EEPROM on SMBUS needs to be updated with the current board layout, so that the BMC knows the actual configuration. Collect all needed information and update the EEPROM if something changed. Every byte written add a delay of 5 msec. Change-Id: Ic8485e6c700eede75b1e829238ee70da65118ace Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/48810 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Diffstat (limited to 'src/mainboard/prodrive/hermes/variants/baseboard')
-rw-r--r--src/mainboard/prodrive/hermes/variants/baseboard/include/eeprom.h34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/mainboard/prodrive/hermes/variants/baseboard/include/eeprom.h b/src/mainboard/prodrive/hermes/variants/baseboard/include/eeprom.h
index cdb5cea1fa..56539751f3 100644
--- a/src/mainboard/prodrive/hermes/variants/baseboard/include/eeprom.h
+++ b/src/mainboard/prodrive/hermes/variants/baseboard/include/eeprom.h
@@ -2,6 +2,34 @@
#include <soc/ramstage.h>
+__packed union eeprom_dimm_layout {
+ struct {
+ char name[50];
+ char manufacturer[50];
+ uint8_t ranks;
+ uint8_t controller_id;
+ uint8_t data_width_bits;
+ uint8_t bus_width_bits;
+ uint32_t capacity_mib;
+ uint32_t max_tdp_milliwatts;
+ };
+ uint8_t raw[0x80];
+};
+
+__packed struct eeprom_board_layout {
+ uint32_t signature;
+ union {
+ struct {
+ char cpu_name[50];
+ uint8_t cpu_count;
+ uint32_t cpu_max_non_turbo_frequency;
+ char pch_name[50];
+ union eeprom_dimm_layout dimm[4];
+ };
+ uint8_t raw_layout[617];
+ };
+};
+
__packed struct eeprom_board_settings {
uint32_t signature;
union {
@@ -30,7 +58,10 @@ __packed struct eeprom_layout {
uint8_t RawFSPSUPD[0xC00];
FSPS_UPD supd;
};
- uint8_t BoardLayout[0x400];
+ union {
+ uint8_t RawBoardLayout[0x400];
+ struct eeprom_board_layout BoardLayout;
+ };
uint8_t BootOrder[0x900];
union {
uint8_t RawBoardSetting[0x100];
@@ -46,6 +77,7 @@ bool read_write_config(void *blob, size_t read_offset, size_t write_offset, size
int check_signature(const size_t offset, const uint64_t signature);
struct eeprom_board_settings *get_board_settings(void);
void report_eeprom_error(const size_t off);
+bool write_board_settings(const struct eeprom_board_layout *new_layout);
#define READ_EEPROM(section_type, section_name, dest, opt_name) \
do { \