summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAngel Pons <th3fanbus@gmail.com>2021-03-12 20:48:53 +0100
committerPatrick Georgi <pgeorgi@google.com>2021-03-23 10:59:26 +0000
commitc4ee714881c7f7bb7a9208b39c76d98578c434b1 (patch)
treebbf6051210754cd954b792163d2331eb0bf309bc /src
parentd99b693c965abb13aa57c5701bfd08547fa93cb5 (diff)
downloadcoreboot-c4ee714881c7f7bb7a9208b39c76d98578c434b1.tar.gz
coreboot-c4ee714881c7f7bb7a9208b39c76d98578c434b1.tar.bz2
coreboot-c4ee714881c7f7bb7a9208b39c76d98578c434b1.zip
nb/intel/haswell: Use unshifted SPD addresses in mainboards
It's common to use the raw, unshifted I2C address in coreboot. Adapt mainboards accordingly and perform the shift in MRC glue code. Tested on Asrock B85M Pro4, still boots and still resumes from S3. Change-Id: I4e4978772744ea27f4c5a88def60a8ded66520e1 Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/51458 Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/mainboard/asrock/b85m_pro4/romstage.c8
-rw-r--r--src/mainboard/asrock/h81m-hds/romstage.c4
-rw-r--r--src/mainboard/google/beltino/romstage.c4
-rw-r--r--src/mainboard/hp/folio_9480m/romstage.c4
-rw-r--r--src/mainboard/intel/baskingridge/romstage.c8
-rw-r--r--src/mainboard/lenovo/t440p/romstage.c4
-rw-r--r--src/mainboard/msi/h81m-p33/romstage.c4
-rw-r--r--src/mainboard/supermicro/x10slm-f/romstage.c8
-rw-r--r--src/northbridge/intel/haswell/raminit.c7
-rw-r--r--src/northbridge/intel/haswell/raminit.h2
10 files changed, 28 insertions, 25 deletions
diff --git a/src/mainboard/asrock/b85m_pro4/romstage.c b/src/mainboard/asrock/b85m_pro4/romstage.c
index 7a4e402d9157..793a7d7b3095 100644
--- a/src/mainboard/asrock/b85m_pro4/romstage.c
+++ b/src/mainboard/asrock/b85m_pro4/romstage.c
@@ -19,10 +19,10 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[1] = 0xa2;
- spdi->addresses[2] = 0xa4;
- spdi->addresses[3] = 0xa6;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[1] = 0x51;
+ spdi->addresses[2] = 0x52;
+ spdi->addresses[3] = 0x53;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/asrock/h81m-hds/romstage.c b/src/mainboard/asrock/h81m-hds/romstage.c
index 58f969716256..a5b667f053a9 100644
--- a/src/mainboard/asrock/h81m-hds/romstage.c
+++ b/src/mainboard/asrock/h81m-hds/romstage.c
@@ -19,8 +19,8 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/google/beltino/romstage.c b/src/mainboard/google/beltino/romstage.c
index b69fb933b332..9904d5a9b946 100644
--- a/src/mainboard/google/beltino/romstage.c
+++ b/src/mainboard/google/beltino/romstage.c
@@ -42,8 +42,8 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/hp/folio_9480m/romstage.c b/src/mainboard/hp/folio_9480m/romstage.c
index af3005f04c63..865fcc661782 100644
--- a/src/mainboard/hp/folio_9480m/romstage.c
+++ b/src/mainboard/hp/folio_9480m/romstage.c
@@ -19,8 +19,8 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/intel/baskingridge/romstage.c b/src/mainboard/intel/baskingridge/romstage.c
index 758079989887..0f2719a1064a 100644
--- a/src/mainboard/intel/baskingridge/romstage.c
+++ b/src/mainboard/intel/baskingridge/romstage.c
@@ -43,10 +43,10 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[1] = 0xa2;
- spdi->addresses[2] = 0xa4;
- spdi->addresses[3] = 0xa6;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[1] = 0x51;
+ spdi->addresses[2] = 0x52;
+ spdi->addresses[3] = 0x53;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/lenovo/t440p/romstage.c b/src/mainboard/lenovo/t440p/romstage.c
index 7840a1fffa04..a85935b67846 100644
--- a/src/mainboard/lenovo/t440p/romstage.c
+++ b/src/mainboard/lenovo/t440p/romstage.c
@@ -42,8 +42,8 @@ void mb_late_romstage_setup(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[2] = 0xa2;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x51;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/msi/h81m-p33/romstage.c b/src/mainboard/msi/h81m-p33/romstage.c
index 059ebdc1b66d..97c888d9e763 100644
--- a/src/mainboard/msi/h81m-p33/romstage.c
+++ b/src/mainboard/msi/h81m-p33/romstage.c
@@ -19,8 +19,8 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[2] = 0xa4;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[2] = 0x52;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/mainboard/supermicro/x10slm-f/romstage.c b/src/mainboard/supermicro/x10slm-f/romstage.c
index 2ec993ffb3de..e555bea29bae 100644
--- a/src/mainboard/supermicro/x10slm-f/romstage.c
+++ b/src/mainboard/supermicro/x10slm-f/romstage.c
@@ -19,10 +19,10 @@ void mainboard_config_rcba(void)
void mb_get_spd_map(struct spd_info *spdi)
{
- spdi->addresses[0] = 0xa0;
- spdi->addresses[1] = 0xa2;
- spdi->addresses[2] = 0xa4;
- spdi->addresses[3] = 0xa6;
+ spdi->addresses[0] = 0x50;
+ spdi->addresses[1] = 0x51;
+ spdi->addresses[2] = 0x52;
+ spdi->addresses[3] = 0x53;
}
const struct usb2_port_setting mainboard_usb2_ports[MAX_USB2_PORTS] = {
diff --git a/src/northbridge/intel/haswell/raminit.c b/src/northbridge/intel/haswell/raminit.c
index d84d3fb12a86..1f84ffa5cbbe 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 7eb398054410..ab245d85a1e4 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);