aboutsummaryrefslogtreecommitdiff
path: root/hdata
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2018-01-12 15:21:38 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2018-01-14 22:38:55 -0600
commit5e66cc3a347d706eb4bce6a460b44271132e6399 (patch)
tree3f00b672d9b492a6e23930d413405bd43f2bc012 /hdata
parent7c1765a0093d0963faff326049cbfe69f5d82db3 (diff)
downloadskiboot-5e66cc3a347d706eb4bce6a460b44271132e6399.zip
skiboot-5e66cc3a347d706eb4bce6a460b44271132e6399.tar.gz
skiboot-5e66cc3a347d706eb4bce6a460b44271132e6399.tar.bz2
hdat/i2c: Fix SPD EEPROM compatible string
Hostboot doesn't give us accurate information about the DIMM SPD devices. Hack around by assuming any EEPROM we find on the SPD I2C master is an SPD eeprom. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hdata')
-rw-r--r--hdata/i2c.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/hdata/i2c.c b/hdata/i2c.c
index 76b7e39..108584d 100644
--- a/hdata/i2c.c
+++ b/hdata/i2c.c
@@ -259,7 +259,22 @@ int parse_i2c_devs(const struct HDIF_common_hdr *hdr, int idata_index,
purpose = be32_to_cpu(dev->purpose);
type = map_type(dev->type);
label = map_label(purpose);
- if (type) {
+
+ /* HACK: Hostboot doesn't export the correct type information
+ * for the DIMM SPD EEPROMs. This is a problem because SPD
+ * EEPROMs have a different wire protocol to the atmel,24XXXX
+ * series. The main difference being that SPD EEPROMs have an
+ * 8bit offset rather than a 16bit offset. This means that the
+ * driver will send 2 bytes when doing a random read,
+ * potentially overwriting part of the SPD information.
+ *
+ * To work around this we force the compat string to "spd"
+ */
+ if (proc_gen == proc_gen_p9 && dev->type == 0x2 &&
+ dev->i2cm_engine == 3) {
+ compat = "spd";
+ name = "eeprom";
+ } else if (type) {
compat = type->compat;
name = type->name;
} else {