sb/intel/common: Tidy up SMBus block commands
I forgot to push these changes before merging commit
1b04aa2
sb/intel/common: Fix SMBus block commands
Change-Id: I7217f8c0cc78f2161faf31a4c49e3e9515026d15
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/21115
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
parent
916b331a8d
commit
c17e855da0
|
@ -47,6 +47,7 @@
|
||||||
#define SMBHSTSTS_HOST_BUSY (1 << 0)
|
#define SMBHSTSTS_HOST_BUSY (1 << 0)
|
||||||
|
|
||||||
#define SMBUS_TIMEOUT (10 * 1000 * 100)
|
#define SMBUS_TIMEOUT (10 * 1000 * 100)
|
||||||
|
#define SMBUS_BLOCK_MAXLEN 32
|
||||||
|
|
||||||
static void smbus_delay(void)
|
static void smbus_delay(void)
|
||||||
{
|
{
|
||||||
|
@ -203,7 +204,7 @@ int do_smbus_block_read(unsigned int smbus_base, u8 device, u8 cmd,
|
||||||
if (smbus_wait_until_ready(smbus_base) < 0)
|
if (smbus_wait_until_ready(smbus_base) < 0)
|
||||||
return SMBUS_WAIT_UNTIL_READY_TIMEOUT;
|
return SMBUS_WAIT_UNTIL_READY_TIMEOUT;
|
||||||
|
|
||||||
max_bytes = MIN(32, max_bytes);
|
max_bytes = MIN(SMBUS_BLOCK_MAXLEN, max_bytes);
|
||||||
|
|
||||||
/* Set up transaction */
|
/* Set up transaction */
|
||||||
/* Disable interrupts */
|
/* Disable interrupts */
|
||||||
|
@ -243,8 +244,7 @@ int do_smbus_block_read(unsigned int smbus_base, u8 device, u8 cmd,
|
||||||
if (status & SMBHSTSTS_BYTE_DONE) { /* Byte done */
|
if (status & SMBHSTSTS_BYTE_DONE) { /* Byte done */
|
||||||
|
|
||||||
if (bytes_read < max_bytes) {
|
if (bytes_read < max_bytes) {
|
||||||
*buf = inb(smbus_base + SMBBLKDAT);
|
*buf++ = inb(smbus_base + SMBBLKDAT);
|
||||||
buf++;
|
|
||||||
bytes_read++;
|
bytes_read++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ int do_smbus_block_write(unsigned int smbus_base, u8 device, u8 cmd,
|
||||||
int bytes_sent = 0;
|
int bytes_sent = 0;
|
||||||
unsigned int loops = SMBUS_TIMEOUT;
|
unsigned int loops = SMBUS_TIMEOUT;
|
||||||
|
|
||||||
if (bytes > 32)
|
if (bytes > SMBUS_BLOCK_MAXLEN)
|
||||||
return SMBUS_ERROR;
|
return SMBUS_ERROR;
|
||||||
|
|
||||||
if (smbus_wait_until_ready(smbus_base) < 0)
|
if (smbus_wait_until_ready(smbus_base) < 0)
|
||||||
|
@ -329,6 +329,9 @@ int do_smbus_block_write(unsigned int smbus_base, u8 device, u8 cmd,
|
||||||
}
|
}
|
||||||
} while ((status & SMBHSTSTS_HOST_BUSY) && loops);
|
} while ((status & SMBHSTSTS_HOST_BUSY) && loops);
|
||||||
|
|
||||||
|
if (bytes_sent < bytes)
|
||||||
|
return SMBUS_ERROR;
|
||||||
|
|
||||||
return bytes_sent;
|
return bytes_sent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ int do_smbus_read_byte(unsigned int smbus_base, u8 device,
|
||||||
int do_smbus_write_byte(unsigned int smbus_base, u8 device,
|
int do_smbus_write_byte(unsigned int smbus_base, u8 device,
|
||||||
unsigned int address, unsigned int data);
|
unsigned int address, unsigned int data);
|
||||||
int do_smbus_block_read(unsigned int smbus_base, u8 device,
|
int do_smbus_block_read(unsigned int smbus_base, u8 device,
|
||||||
u8 cmd, unsigned int bytes, u8 *buf);
|
u8 cmd, unsigned int max_bytes, u8 *buf);
|
||||||
int do_smbus_block_write(unsigned int smbus_base, u8 device,
|
int do_smbus_block_write(unsigned int smbus_base, u8 device,
|
||||||
u8 cmd, unsigned int bytes, const u8 *buf);
|
u8 cmd, unsigned int bytes, const u8 *buf);
|
||||||
/* Only since ICH5 */
|
/* Only since ICH5 */
|
||||||
|
|
Loading…
Reference in New Issue