aboutsummaryrefslogtreecommitdiff
path: root/modules/devices
diff options
context:
space:
mode:
authorOndrej Čerman <ondrej.cerman@gmail.com>2019-06-19 22:32:31 +0200
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-06-19 15:39:39 -0700
commitb89aa537b49ab1d6cfb18bcb02287318e8d9c059 (patch)
treeb9c073bcb4a3c45ee50f4736fd498429b36e7971 /modules/devices
parentd33b55214aa14269e26e4f034c23b411fcf7f41e (diff)
devices/spd: FIX DDR3 Module size
Diffstat (limited to 'modules/devices')
-rw-r--r--modules/devices/spd-decode.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/modules/devices/spd-decode.c b/modules/devices/spd-decode.c
index ae304a4f..c734ea63 100644
--- a/modules/devices/spd-decode.c
+++ b/modules/devices/spd-decode.c
@@ -1266,7 +1266,12 @@ static void decode_ddr3_module_speed(unsigned char *bytes, float *ddr_clock, int
}
static void decode_ddr3_module_size(unsigned char *bytes, int *size) {
- *size = 512 << bytes[4];
+ unsigned int sdr_capacity = 256 << (bytes[4] & 0xF);
+ unsigned int sdr_width = 4 << (bytes[7] & 0x7);
+ unsigned int bus_width = 8 << (bytes[8] & 0x7);
+ unsigned int ranks = 1 + ((bytes[7] >> 3) & 0x7);
+
+ *size = sdr_capacity / 8 * bus_width / sdr_width * ranks;
}
static void decode_ddr3_module_timings(unsigned char *bytes, float *trcd, float *trp, float *tras,