Skip to contentSkip to conversation

New driver: i2c_imc (Intel LGA2011 iMC SMBUS)

PATCH In review Andy Lutomirski 1 participant 4 messages Jul 16, 2013 – Jul 17, 2013 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

v2 cover New driver: i2c_imc (Intel LGA2011 iMC SMBUS)

Intel's LGA2011 chips (Core i7 Extreme and Xeon E5) have two SMBUS controllers per package, addressing up to 16 DIMM slots per package. This is a driver for those SMBUS channels.

The first patch is a minor change to the i2c core to make it work better with extremely limited hardware like this. The second patch is the driver.

Changes from the RFC / v1: Work around an erratum that gave random incorrect reads on multi-socket systems.

Andy Lutomirski (2):
i2c: Allow SPD probing with READ_BYTE_DATA and improve logging
i2c_imc: New driver for Intel's iMC, found on LGA2011 chips

 drivers/i2c/busses/Kconfig   |  14 ++
 drivers/i2c/busses/Makefile  |   1 +
 drivers/i2c/busses/i2c-imc.c | 546 +++++++++++++++++++++++++++++++++++++++++++
 drivers/i2c/i2c-core.c       |   7 +-
 4 files changed, 567 insertions(+), 1 deletion(-)
 create mode 100644 drivers/i2c/busses/i2c-imc.c
Signature · 1 line
1.8.1.4

A message that is not in the archive (sent off-list or not yet received): cover.1374012684.git.luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org

#2 lore raw

PATCH v2 1/2 i2c: Allow SPD probing with READ_BYTE_DATA and improve logging

The Intel iMC SMBUS controller can't READ_BYTE. (This seems odd to me -- it supports WRITE_BYTE.) SPD EEPROMs are safe to probe with READ_BYTE_DATA, so fall back to that.

While I'm in here, also show the address that had no probing method for easier debugging.

---
 drivers/i2c/i2c-core.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/i2c/i2c-core.c +6 -1
index 991d38d..ea88fc0 100644
@@ -1501,8 +1501,13 @@ static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
 	else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
 		err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
 				     I2C_SMBUS_BYTE, &dummy);
+	else if ((addr & ~0x0f) == 0x50
+	 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
+		err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
+				     I2C_SMBUS_BYTE_DATA, &dummy);
 	else {
-		dev_warn(&adap->dev, "No suitable probing method supported\n");
+		dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
+			 addr);
 		err = -EOPNOTSUPP;
 	}
 
Signature · 1 line
1.8.1.4
#3 lore raw

PATCH v2 2/2 i2c_imc: New driver for Intel's iMC, found on LGA2011 chips

In reply to a message not in the archive

Sandy Bridge Xeon and Extreme chips have integrated memory controllers with (rather limited) onboard SMBUS masters. This driver gives access to the bus.

---
 drivers/i2c/busses/Kconfig   |  14 ++
 drivers/i2c/busses/Makefile  |   1 +
 drivers/i2c/busses/i2c-imc.c | 546 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 561 insertions(+)
 create mode 100644 drivers/i2c/busses/i2c-imc.c
drivers/i2c/busses/Kconfig +14 -0
index adfee98..91fd632 100644
@@ -133,6 +133,20 @@ config I2C_ISMT
 	  This driver can also be built as a module.  If so, the module will be
 	  called i2c-ismt.
 
+config I2C_IMC
+	tristate "Intel iMC (LGA 2011) SMBus Controller"
+	depends on PCI && X86
+	help
+	  If you say yes to this option, support will be included for the Intel
+	  Integrated Memory Controller SMBus host controller interface.  This
+	  controller is found on LGA 2011 Xeons and Core i7 Extremes.
+
+	  It is possibly, although unlikely, that the use of this driver will
+	  interfere with your platform's RAM thermal management.
+
+	  This driver can also be built as a module.  If so, the module will be
+	  called i2c-imc.
+
 config I2C_PIIX4
 	tristate "Intel PIIX4 and compatible (ATI/AMD/Serverworks/Broadcom/SMSC)"
 	depends on PCI
drivers/i2c/busses/Makefile +1 -0
index 8f4fc23..de46683 100644
@@ -15,6 +15,7 @@ obj-$(CONFIG_I2C_AMD8111)	+= i2c-amd8111.o
 obj-$(CONFIG_I2C_I801)		+= i2c-i801.o
 obj-$(CONFIG_I2C_ISCH)		+= i2c-isch.o
 obj-$(CONFIG_I2C_ISMT)		+= i2c-ismt.o
+obj-$(CONFIG_I2C_IMC)		+= i2c-imc.o
 obj-$(CONFIG_I2C_NFORCE2)	+= i2c-nforce2.o
 obj-$(CONFIG_I2C_NFORCE2_S4985)	+= i2c-nforce2-s4985.o
 obj-$(CONFIG_I2C_PIIX4)		+= i2c-piix4.o
drivers/i2c/busses/i2c-imc.c new file +546 -0

546 lines not on this page · raw message

Signature · 1 line
1.8.1.4
#4 lore raw
In reply to a message not in the archive
Quoted 15 lines · Andy Lutomirski

Intel's LGA2011 chips (Core i7 Extreme and Xeon E5) have two SMBUS controllers per package, addressing up to 16 DIMM slots per package. This is a driver for those SMBUS channels.

The first patch is a minor change to the i2c core to make it work better with extremely limited hardware like this. The second patch is the driver.

Changes from the RFC / v1: Work around an erratum that gave random incorrect reads on multi-socket systems.

Andy Lutomirski (2):
i2c: Allow SPD probing with READ_BYTE_DATA and improve logging
i2c_imc: New driver for Intel's iMC, found on LGA2011 chips

Quoted 6 lines
 drivers/i2c/busses/Kconfig   |  14 ++
 drivers/i2c/busses/Makefile  |   1 +
 drivers/i2c/busses/i2c-imc.c | 546 +++++++++++++++++++++++++++++++++++++++++++
 drivers/i2c/i2c-core.c       |   7 +-
 4 files changed, 567 insertions(+), 1 deletion(-)
 create mode 100644 drivers/i2c/busses/i2c-imc.c

Please ignore this series. I have a replacement that's far better.

Quoted 4 lines

--
1.8.1.4

Signature · 2 lines
Andy Lutomirski
AMA Capital Management, LLC