From 09367b3f0ab8b52059146ecb98e33d55c78e7d53 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Sun, 27 Mar 2016 09:00:18 -0400 Subject: [PATCH] Determine speed from clock by formula Rather than use a lookup table (which requires maintenance), implement the formula used to calculate the speed. This further makes it a bit more robust in the face of minor timing tweaks that might change the clock a megahertz up or down. Change-Id: I6336bdc07af361a31b5a51698d0231d876791f16 --- pyghmi/ipmi/private/spd.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/pyghmi/ipmi/private/spd.py b/pyghmi/ipmi/private/spd.py index 2ab83706..b86b37b2 100644 --- a/pyghmi/ipmi/private/spd.py +++ b/pyghmi/ipmi/private/spd.py @@ -677,16 +677,9 @@ ddr3_bus_width = { 3: 64, } -speed_by_clock = { - 800: 6400, - 1066: 8500, - 1333: 10600, - 1600: 12800, - 1867: 14900, - 2132: 17000, - 2133: 17000, - 2134: 17000, -} + +def speed_from_clock(clock): + return int(clock * 8 - (clock * 8 % 100)) def decode_manufacturer(index, mfg): @@ -731,7 +724,7 @@ class SPD(object): fineoffset = (finetime * fineoffset) * 10**-3 mtb = spd[10] / float(spd[11]) clock = 2 // ((mtb * spd[12] + fineoffset)*10**-3) - self.info['speed'] = speed_by_clock.get(clock, 'Unknown') + self.info['speed'] = speed_from_clock(clock) self.info['ecc'] = (spd[8] & 0b11000) != 0 self.info['module_type'] = module_types.get(spd[3] & 0xf, 'Unknown') sdramcap = ddr3_module_capacity[spd[4] & 0xf] @@ -753,7 +746,7 @@ class SPD(object): if fineoffset & 0b10000000: fineoffset = 0 - ((fineoffset ^ 0xff) + 1) clock = 2 // ((0.125 * spd[18] + fineoffset * 0.001) * 0.001) - self.info['speed'] = speed_by_clock.get(clock, 'Unknown') + self.info['speed'] = speed_from_clock(clock) else: self.info['speed'] = 'Unknown' self.info['ecc'] = (spd[13] & 0b11000) == 0b1000