summaryrefslogtreecommitdiffstats
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
parent7c1765a0093d0963faff326049cbfe69f5d82db3 (diff)
downloadtalos-skiboot-5e66cc3a347d706eb4bce6a460b44271132e6399.tar.gz
talos-skiboot-5e66cc3a347d706eb4bce6a460b44271132e6399.zip
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>
-rw-r--r--hdata/i2c.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/hdata/i2c.c b/hdata/i2c.c
index 76b7e390..108584de 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 {
OpenPOWER on IntegriCloud