summaryrefslogtreecommitdiff
path: root/src/northbridge
diff options
context:
space:
mode:
Diffstat (limited to 'src/northbridge')
-rw-r--r--src/northbridge/intel/haswell/raminit.c7
-rw-r--r--src/northbridge/intel/haswell/raminit.h2
2 files changed, 6 insertions, 3 deletions
diff --git a/src/northbridge/intel/haswell/raminit.c b/src/northbridge/intel/haswell/raminit.c
index d84d3fb12a..1f84ffa5cb 100644
--- a/src/northbridge/intel/haswell/raminit.c
+++ b/src/northbridge/intel/haswell/raminit.c
@@ -347,8 +347,11 @@ void perform_raminit(const int s3resume)
struct spd_info spdi = {0};
mb_get_spd_map(&spdi);
- for (size_t i = 0; i < ARRAY_SIZE(spdi.addresses); i++)
- pei_data.spd_addresses[i] = spdi.addresses[i];
+ /* MRC expects left-aligned SMBus addresses, and 0xff for memory-down */
+ for (size_t i = 0; i < ARRAY_SIZE(spdi.addresses); i++) {
+ const uint8_t addr = spdi.addresses[i];
+ pei_data.spd_addresses[i] = addr == SPD_MEMORY_DOWN ? 0xff : addr << 1;
+ }
/* Calculate unimplemented DIMM slots for each channel */
pei_data.dimm_channel0_disabled = make_channel_disabled_mask(&pei_data, 0);
diff --git a/src/northbridge/intel/haswell/raminit.h b/src/northbridge/intel/haswell/raminit.h
index 7eb3980544..ab245d85a1 100644
--- a/src/northbridge/intel/haswell/raminit.h
+++ b/src/northbridge/intel/haswell/raminit.h
@@ -17,7 +17,7 @@ struct spd_info {
extern const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS];
extern const struct usb3_port_setting mainboard_usb3_ports[MAX_USB3_PORTS];
-/* Mainboard callback to fill in the SPD addresses in MRC format */
+/* Mainboard callback to fill in the SPD addresses */
void mb_get_spd_map(struct spd_info *spdi);
void perform_raminit(const int s3resume);