aboutsummaryrefslogtreecommitdiff
path: root/hdata
diff options
context:
space:
mode:
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 {