From e9673ed5d5cb56fcb9e9c4167c77553d0a1f38b3 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Sun, 31 Jul 2016 18:41:53 -0300 Subject: Decode DDR3 module type (buffered, unbuffered, SODIMM, etc) --- modules/devices/spd-decode.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'modules/devices') diff --git a/modules/devices/spd-decode.c b/modules/devices/spd-decode.c index 9c3e127d..af5b1b06 100644 --- a/modules/devices/spd-decode.c +++ b/modules/devices/spd-decode.c @@ -1206,24 +1206,54 @@ static void decode_ddr3_module_timings(unsigned char *bytes, float *trcd, float } } +static void decode_ddr3_module_type(unsigned char *bytes, const char **type) +{ + switch (bytes[3]) { + case 0x00: + *type = "Undefined"; + break; + case 0x01: + *type = "RDIMM (Registered Long DIMM)"; + break; + case 0x02: + *type = "UDIMM (Unbuffered Long DIMM)"; + break; + case 0x03: + *type = "SODIMM (Small Outline DIMM)"; + break; + default: + *type = "Unknown"; + } +} + static gchar *decode_ddr3_sdram(unsigned char *bytes, int *size) { float ddr_clock; float trcd, trp, tras, tcl; int pc3_speed; + const char *type; decode_ddr3_module_speed(bytes, &ddr_clock, &pc3_speed); decode_ddr3_module_size(bytes, size); decode_ddr3_module_timings(bytes, &trcd, &trp, &tras, &tcl); + decode_ddr3_module_type(bytes, &type); return g_strdup_printf("[Module Information]\n" "Module type=DDR3 %.2f MHz (PC3-%d)\n" "SPD revision=%d.%d\n" + "Type=%s\n" "[Timings]\n" "tCL=%.2f\n" "tRCD=%.3fns\n" "tRP=%.3fns\n" - "tRAS=%.3fns\n", ddr_clock, pc3_speed, bytes[1] >> 4, bytes[1] & 0xf, tcl, trcd, trp, tras); + "tRAS=%.3fns\n", + ddr_clock, pc3_speed, + bytes[1] >> 4, bytes[1] & 0xf, + type, + tcl, + trcd, + trp, + tras); } static void decode_ddr3_part_number(unsigned char *bytes, char *part_number) -- cgit v1.2.3