aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/google/kahlee/variants/baseboard
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/kahlee/variants/baseboard')
-rw-r--r--src/mainboard/google/kahlee/variants/baseboard/Makefile.inc1
-rw-r--r--src/mainboard/google/kahlee/variants/baseboard/include/baseboard/variants.h1
-rw-r--r--src/mainboard/google/kahlee/variants/baseboard/memory.c31
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;
+}