diff options
Diffstat (limited to 'src/mainboard/google/kahlee/variants/baseboard')
3 files changed, 31 insertions, 2 deletions
diff --git a/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc b/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc index 94f388912c..83eec96be7 100644 --- a/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc +++ b/src/mainboard/google/kahlee/variants/baseboard/Makefile.inc @@ -19,4 +19,3 @@ romstage-y += gpio.c romstage-y += memory.c ramstage-y += gpio.c -ramstage-y += memory.c diff --git a/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h index 45d287a11c..1d38bd4f92 100644 --- a/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h @@ -24,5 +24,6 @@ const GPIO_CONTROL *get_gpio_table(void); const struct sci_source *get_gpe_table(size_t *num); uint8_t variant_memory_sku(void); +int variant_mainboard_read_spd(uint8_t spdAddress, char *buf, size_t len); #endif /* __BASEBOARD_VARIANTS_H__ */ diff --git a/src/mainboard/google/kahlee/variants/baseboard/memory.c b/src/mainboard/google/kahlee/variants/baseboard/memory.c index daa5ef9160..b8ec917633 100644 --- a/src/mainboard/google/kahlee/variants/baseboard/memory.c +++ b/src/mainboard/google/kahlee/variants/baseboard/memory.c @@ -13,9 +13,12 @@ * GNU General Public License for more details. */ -#include <gpio.h> /* src/include/gpio.h */ #include <baseboard/variants.h> +#include <console/console.h> +#include <gpio.h> /* src/include/gpio.h */ +#include <spd_bin.h> #include <variant/gpio.h> +#include <amdblocks/dimm_spd.h> uint8_t __attribute__((weak)) variant_memory_sku(void) { @@ -28,3 +31,29 @@ uint8_t __attribute__((weak)) variant_memory_sku(void) return gpio_base2_value(pads, ARRAY_SIZE(pads)); } + +int __attribute__((weak)) variant_mainboard_read_spd(uint8_t spdAddress, + char *buf, size_t len) +{ + struct region_device spd_rdev; + u8 spd_index = variant_memory_sku(); + + printk(BIOS_INFO, "%s SPD index %d\n", __func__, spd_index); + + if (get_spd_cbfs_rdev(&spd_rdev, spd_index) < 0) { + printk(BIOS_ERR, "Error: spd.bin not found\n"); + return -1; + } + + if (len != region_device_sz(&spd_rdev)) { + printk(BIOS_ERR, "Error: spd.bin is not the correct size\n"); + return -1; + } + + if (rdev_readat(&spd_rdev, buf, 0, len) != len) { + printk(BIOS_ERR, "Error: couldn't read spd.bin\n"); + return -1; + } + + return 0; +} |