nb/intel/x4x/raminit: Fix DIMM_IN_CHANNEL calculation
Fix-up for 696abfc
nb/intel/x4x: Fix and deflate `dimm_config` in raminit
It didn't fix the channel-number shifting issue as intended.
The channel index is either 0 or 1. DIMMs are counted from 0
to 3 where 0..1 covers channel 0, and 2..3 covers channel 1.
Since we have two DIMMs per channel, we have to multiply the
channel index by 2 (or shift it left by 1) to get the index
of the first DIMM in the channel. Finally, to get the offset
of a DIMM in the channel we take its index modulo 2 (again,
the number of DIMMs per channel).
Change-Id: I2784b0cb655bfe823bf5fa48b722623dfca1ddc3
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/17612
Tested-by: build bot (Jenkins)
Reviewed-by: Damien Zammit <damien@zamaudio.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
parent
d85a71a75c
commit
3c20906e42
|
@ -153,7 +153,8 @@ static void sdram_read_spds(struct sysinfo *s)
|
|||
else
|
||||
die("Dual-rank x16 not supported\n");
|
||||
}
|
||||
s->dimm_config[chan] |= dimm_config << (i - chan) * 2;
|
||||
s->dimm_config[chan] |=
|
||||
dimm_config << (i % DIMMS_PER_CHANNEL) * 2;
|
||||
}
|
||||
printk(BIOS_DEBUG, " Config[CH%d] : %d\n", chan, s->dimm_config[chan]);
|
||||
}
|
||||
|
|
|
@ -144,6 +144,7 @@
|
|||
|
||||
#define TOTAL_CHANNELS 2
|
||||
#define TOTAL_DIMMS 4
|
||||
#define DIMMS_PER_CHANNEL (TOTAL_DIMMS / TOTAL_CHANNELS)
|
||||
#define RAW_CARD_UNPOPULATED 0xff
|
||||
|
||||
#define DIMM_IS_POPULATED(dimms, idx) (dimms[idx].card_type != RAW_CARD_UNPOPULATED)
|
||||
|
@ -162,7 +163,7 @@
|
|||
#define FOR_EACH_POPULATED_DIMM(dimms, idx) \
|
||||
FOR_EACH_DIMM(idx) IF_DIMM_POPULATED(dimms, idx)
|
||||
#define FOR_EACH_DIMM_IN_CHANNEL(ch, idx) \
|
||||
for (idx = (ch); idx < (ch) + 2; ++idx)
|
||||
for (idx = (ch) << 1; idx < ((ch) << 1) + DIMMS_PER_CHANNEL; ++idx)
|
||||
#define FOR_EACH_POPULATED_DIMM_IN_CHANNEL(dimms, ch, idx) \
|
||||
FOR_EACH_DIMM_IN_CHANNEL(ch, idx) IF_DIMM_POPULATED(dimms, idx)
|
||||
#define CHANNEL_IS_POPULATED(dimms, idx) ((dimms[idx<<1].card_type != RAW_CARD_UNPOPULATED) || (dimms[(idx<<1) + 1].card_type != RAW_CARD_UNPOPULATED))
|
||||
|
|
Loading…
Reference in New Issue