add support for writing to SMBus with vt8237
Change-Id: I70fe072f8f3447d0be7b7ac64508a954fe47091d Signed-off-by: Florian Zumbiehl <florz@florz.de> Reviewed-on: http://review.coreboot.org/372 Tested-by: build bot (Jenkins) Reviewed-by: Rudolf Marek <r.marek@assembler.cz>
This commit is contained in:
parent
8c4cf18fc4
commit
e037f9f174
|
@ -87,17 +87,12 @@ static void smbus_reset(void)
|
||||||
PRINT_DEBUG("\n");
|
PRINT_DEBUG("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static u8 smbus_transaction(u8 dimm, u8 offset, u8 data, int do_read)
|
||||||
* 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)
|
|
||||||
{
|
{
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
PRINT_DEBUG("DIMM ");
|
PRINT_DEBUG(do_read ? "RD: " : "WR: ");
|
||||||
|
PRINT_DEBUG("ADDR ");
|
||||||
PRINT_DEBUG_HEX16(dimm);
|
PRINT_DEBUG_HEX16(dimm);
|
||||||
PRINT_DEBUG(" OFFSET ");
|
PRINT_DEBUG(" OFFSET ");
|
||||||
PRINT_DEBUG_HEX16(offset);
|
PRINT_DEBUG_HEX16(offset);
|
||||||
|
@ -106,13 +101,13 @@ u8 smbus_read_byte(u8 dimm, u8 offset)
|
||||||
smbus_reset();
|
smbus_reset();
|
||||||
|
|
||||||
/* Clear host data port. */
|
/* Clear host data port. */
|
||||||
outb(0x00, SMBHSTDAT0);
|
outb(do_read ? 0x00 : data, SMBHSTDAT0);
|
||||||
SMBUS_DELAY();
|
SMBUS_DELAY();
|
||||||
smbus_wait_until_ready();
|
smbus_wait_until_ready();
|
||||||
|
|
||||||
/* Actual addr to reg format. */
|
/* Actual addr to reg format. */
|
||||||
dimm = (dimm << 1);
|
dimm = (dimm << 1);
|
||||||
dimm |= 1;
|
dimm |= !!do_read;
|
||||||
outb(dimm, SMBXMITADD);
|
outb(dimm, SMBXMITADD);
|
||||||
outb(offset, SMBHSTCMD);
|
outb(offset, SMBHSTCMD);
|
||||||
|
|
||||||
|
@ -132,6 +127,22 @@ u8 smbus_read_byte(u8 dimm, u8 offset)
|
||||||
return val;
|
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, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void smbus_write_byte(u8 dimm, u8 offset, u8 data)
|
||||||
|
{
|
||||||
|
smbus_transaction(dimm, offset, data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
#define PSONREADY_TIMEOUT 0x7fffffff
|
#define PSONREADY_TIMEOUT 0x7fffffff
|
||||||
|
|
||||||
static device_t get_vt8237_lpc(void)
|
static device_t get_vt8237_lpc(void)
|
||||||
|
|
|
@ -148,6 +148,7 @@ __attribute__ ((packed))
|
||||||
#ifdef __PRE_RAM__
|
#ifdef __PRE_RAM__
|
||||||
#ifndef __ROMCC__
|
#ifndef __ROMCC__
|
||||||
u8 smbus_read_byte(u8 dimm, u8 offset);
|
u8 smbus_read_byte(u8 dimm, u8 offset);
|
||||||
|
void smbus_write_byte(u8 dimm, u8 offset, u8 data);
|
||||||
void enable_smbus(void);
|
void enable_smbus(void);
|
||||||
void smbus_fixup(const struct mem_controller *ctrl);
|
void smbus_fixup(const struct mem_controller *ctrl);
|
||||||
// these are in vt8237_early_smbus.c - do they really belong there?
|
// these are in vt8237_early_smbus.c - do they really belong there?
|
||||||
|
|
Loading…
Reference in New Issue