[coreboot] Patch set updated for coreboot: d2281f7 add support for writing to SMBus with vt8237

Florian Zumbiehl gerrit at coreboot.org
Wed Nov 2 09:58:29 CET 2011


Florian Zumbiehl just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/372

-gerrit

commit d2281f7f6110ae2382678d525baee68984b0d315
Author: Florian Zumbiehl <florz at florz.de>
Date:   Tue Nov 1 20:17:13 2011 +0100

    add support for writing to SMBus with vt8237
    
    Change-Id: I70fe072f8f3447d0be7b7ac64508a954fe47091d
    Signed-off-by: Florian Zumbiehl <florz at florz.de>
---
 src/southbridge/via/vt8237r/early_smbus.c |   31 +++++++++++++++++++---------
 src/southbridge/via/vt8237r/vt8237r.h     |    1 +
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/southbridge/via/vt8237r/early_smbus.c b/src/southbridge/via/vt8237r/early_smbus.c
index a298e84..0caf93d 100644
--- a/src/southbridge/via/vt8237r/early_smbus.c
+++ b/src/southbridge/via/vt8237r/early_smbus.c
@@ -87,17 +87,12 @@ static void smbus_reset(void)
 	PRINT_DEBUG("\n");
 }
 
-/**
- * Read a byte from the SMBus.
- *
- * @param dimm The address location of the DIMM on the SMBus.
- * @param offset The offset the data is located at.
- */
-u8 smbus_read_byte(u8 dimm, u8 offset)
+static u8 smbus_transaction(u8 dimm, u8 offset, int data)
 {
 	u8 val;
 
-	PRINT_DEBUG("DIMM ");
+	PRINT_DEBUG((data < 0) ? "RD: " : "WR: ");
+	PRINT_DEBUG("ADDR ");
 	PRINT_DEBUG_HEX16(dimm);
 	PRINT_DEBUG(" OFFSET ");
 	PRINT_DEBUG_HEX16(offset);
@@ -106,13 +101,13 @@ u8 smbus_read_byte(u8 dimm, u8 offset)
 	smbus_reset();
 
 	/* Clear host data port. */
-	outb(0x00, SMBHSTDAT0);
+	outb((data < 0) ? 0x00 : data, SMBHSTDAT0);
 	SMBUS_DELAY();
 	smbus_wait_until_ready();
 
 	/* Actual addr to reg format. */
 	dimm = (dimm << 1);
-	dimm |= 1;
+	dimm |= (data < 0);
 	outb(dimm, SMBXMITADD);
 	outb(offset, SMBHSTCMD);
 
@@ -132,6 +127,22 @@ u8 smbus_read_byte(u8 dimm, u8 offset)
 	return val;
 }
 
+/**
+ * Read a byte from the SMBus.
+ *
+ * @param dimm The address location of the DIMM on the SMBus.
+ * @param offset The offset the data is located at.
+ */
+u8 smbus_read_byte(u8 dimm, u8 offset)
+{
+	return smbus_transaction(dimm, offset, -1);
+}
+
+void smbus_write_byte(u8 dimm, u8 offset, u8 data)
+{
+	smbus_transaction(dimm, offset, data);
+}
+
 #define PSONREADY_TIMEOUT 0x7fffffff
 
 static device_t get_vt8237_lpc(void)
diff --git a/src/southbridge/via/vt8237r/vt8237r.h b/src/southbridge/via/vt8237r/vt8237r.h
index 94b1840..9d5a1fc 100644
--- a/src/southbridge/via/vt8237r/vt8237r.h
+++ b/src/southbridge/via/vt8237r/vt8237r.h
@@ -148,6 +148,7 @@ __attribute__ ((packed))
 #ifdef __PRE_RAM__
 #ifndef __ROMCC__
 u8 smbus_read_byte(u8 dimm, u8 offset);
+void smbus_write_byte(u8 dimm, u8 offset, u8 data);
 void enable_smbus(void);
 void smbus_fixup(const struct mem_controller *ctrl);
 // these are in vt8237_early_smbus.c - do they really belong there?




More information about the coreboot mailing list