summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
authorAngel Pons <th3fanbus@gmail.com>2021-06-23 16:14:56 +0200
committerAngel Pons <th3fanbus@gmail.com>2022-08-14 10:53:47 +0000
commit4a8cb30222a34de760d38c7d13d54e24221d9fec (patch)
tree66036e3c07862166c9ae78acac453e4242c07d11 /src/mainboard
parentae626d30355b4744762d2c434e159ba9c3998783 (diff)
soc/intel/broadwell: Consolidate SPD handling
Mainboards do not need to know about `pei_data` to tell northbridge code where to find the SPD data. As done on Haswell, add the `mb_get_spd_map` function and the `struct spd_info` type to retrieve SPD information from mainboard code without having to use `pei_data` in said mainboard code. Unlike Haswell MRC, Broadwell MRC uses all positions of the `spd_data` array, not just the first. The placeholder SPD address for memory-down seems to be different as well. Adapt the existing code to handle these variations. Once complete, the abstraction layer for both MRC binaries will have the same API. Change-Id: I92a05003a319c354675368cae8e34980bd2f9e10 Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/55811 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/google/auron/spd.c18
-rw-r--r--src/mainboard/google/auron/variants/buddy/spd/spd.c9
-rw-r--r--src/mainboard/google/jecht/spd/spd.c8
-rw-r--r--src/mainboard/intel/wtm2/pei_data.c7
-rw-r--r--src/mainboard/purism/librem_bdw/variants/librem13v1/pei_data.c5
-rw-r--r--src/mainboard/purism/librem_bdw/variants/librem15v2/pei_data.c7
6 files changed, 18 insertions, 36 deletions
diff --git a/src/mainboard/google/auron/spd.c b/src/mainboard/google/auron/spd.c
index 79a51f8900..0bb7dcbcd1 100644
--- a/src/mainboard/google/auron/spd.c
+++ b/src/mainboard/google/auron/spd.c
@@ -1,21 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <mainboard/google/auron/variant.h>
-#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-#include <string.h>
-#include <types.h>
-/* Copy SPD data for on-board memory */
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- const unsigned int spd_index = variant_get_spd_index();
-
- fill_spd_for_index(pei_data->spd_data[0][0], spd_index);
- pei_data->spd_addresses[0] = SPD_MEMORY_DOWN;
-
- if (variant_is_dual_channel(spd_index)) {
- memcpy(pei_data->spd_data[1][0], pei_data->spd_data[0][0], SPD_LEN);
- pei_data->spd_addresses[2] = SPD_MEMORY_DOWN;
- }
+ spdi->spd_index = variant_get_spd_index();
+ spdi->addresses[0] = SPD_MEMORY_DOWN;
+ spdi->addresses[2] = variant_is_dual_channel(spdi->spd_index) ? SPD_MEMORY_DOWN : 0;
}
diff --git a/src/mainboard/google/auron/variants/buddy/spd/spd.c b/src/mainboard/google/auron/variants/buddy/spd/spd.c
index 5281d82a4f..020bb8b46e 100644
--- a/src/mainboard/google/auron/variants/buddy/spd/spd.c
+++ b/src/mainboard/google/auron/variants/buddy/spd/spd.c
@@ -1,12 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-only */
-#include <mainboard/google/auron/variant.h>
-#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-/* Copy SPD data for on-board memory */
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- pei_data->spd_addresses[0] = 0xa0;
- pei_data->spd_addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
diff --git a/src/mainboard/google/jecht/spd/spd.c b/src/mainboard/google/jecht/spd/spd.c
index 177e59a5d2..020bb8b46e 100644
--- a/src/mainboard/google/jecht/spd/spd.c
+++ b/src/mainboard/google/jecht/spd/spd.c
@@ -1,11 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-only */
-#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-/* Copy SPD data for on-board memory */
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- pei_data->spd_addresses[0] = 0xa0;
- pei_data->spd_addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
diff --git a/src/mainboard/intel/wtm2/pei_data.c b/src/mainboard/intel/wtm2/pei_data.c
index b0e8123783..6c7ebd6bb7 100644
--- a/src/mainboard/intel/wtm2/pei_data.c
+++ b/src/mainboard/intel/wtm2/pei_data.c
@@ -3,11 +3,10 @@
#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- /* One installed DIMM per channel */
- pei_data->spd_addresses[0] = 0xa2;
- pei_data->spd_addresses[2] = 0xa2;
+ spdi->addresses[0] = 0x51;
+ spdi->addresses[2] = 0x51;
}
void mainboard_fill_pei_data(struct pei_data *pei_data)
diff --git a/src/mainboard/purism/librem_bdw/variants/librem13v1/pei_data.c b/src/mainboard/purism/librem_bdw/variants/librem13v1/pei_data.c
index 04fb9ea9e1..022e424357 100644
--- a/src/mainboard/purism/librem_bdw/variants/librem13v1/pei_data.c
+++ b/src/mainboard/purism/librem_bdw/variants/librem13v1/pei_data.c
@@ -3,10 +3,9 @@
#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- /* One DIMM slot */
- pei_data->spd_addresses[0] = 0xa0;
+ spdi->addresses[0] = 0x50;
}
void mainboard_fill_pei_data(struct pei_data *pei_data)
diff --git a/src/mainboard/purism/librem_bdw/variants/librem15v2/pei_data.c b/src/mainboard/purism/librem_bdw/variants/librem15v2/pei_data.c
index 209cf30248..7eea654358 100644
--- a/src/mainboard/purism/librem_bdw/variants/librem15v2/pei_data.c
+++ b/src/mainboard/purism/librem_bdw/variants/librem15v2/pei_data.c
@@ -3,11 +3,10 @@
#include <soc/pei_data.h>
#include <soc/pei_wrapper.h>
-void mainboard_fill_spd_data(struct pei_data *pei_data)
+void mb_get_spd_map(struct spd_info *spdi)
{
- /* One DIMM slot */
- pei_data->spd_addresses[0] = 0xa0;
- pei_data->spd_addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
void mainboard_fill_pei_data(struct pei_data *pei_data)