diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2017-08-30 12:01:08 +0300 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2017-09-06 22:18:10 +0000 |
commit | 081b66951f04bb67ad2d04750212a45fc0c24e90 (patch) | |
tree | b4f9342a0bf2c58b44a9b1b413b980e498dbc446 /src/mainboard/lippert/frontrunner-af/mainboard.c | |
parent | 8a8386eeb9356b73fc7bc706298706656ceca385 (diff) |
mainboard/lippert: Refactor SEMA watchdog message
It's too critical to ignore when sending the message on
SMBus fails, so allow for a fair amount of retries.
Failure here causes watchdog to do hard reset later.
Move it out of mainboard.c as we need to call this
early in romstage while we are debugging.
Change-Id: I1006b079269d6dd44de630db7a5694124af2f974
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/21316
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/mainboard/lippert/frontrunner-af/mainboard.c')
-rw-r--r-- | src/mainboard/lippert/frontrunner-af/mainboard.c | 33 |
1 files changed, 6 insertions, 27 deletions
diff --git a/src/mainboard/lippert/frontrunner-af/mainboard.c b/src/mainboard/lippert/frontrunner-af/mainboard.c index a846528f5b..1212764cae 100644 --- a/src/mainboard/lippert/frontrunner-af/mainboard.c +++ b/src/mainboard/lippert/frontrunner-af/mainboard.c @@ -27,6 +27,7 @@ #include "SBPLATFORM.h" #include "OEM.h" /* SMBUS0_BASE_ADDRESS */ #include <southbridge/amd/cimx/sb800/gpio_oem.h> +#include "sema.h" /* Init SIO GPIOs. */ #define SIO_RUNTIME_BASE 0x0E00 @@ -59,28 +60,6 @@ static const u16 sio_init_table[] = { // hi = offset, lo = value 0x5780, // GP65: USB power 4/5 = open drain output }; -/* Write data block to slave on SMBUS0. */ -#define SMB0_STATUS ((SMBUS0_BASE_ADDRESS) + 0) -#define SMB0_CONTROL ((SMBUS0_BASE_ADDRESS) + 2) -#define SMB0_HOSTCMD ((SMBUS0_BASE_ADDRESS) + 3) -#define SMB0_ADDRESS ((SMBUS0_BASE_ADDRESS) + 4) -#define SMB0_DATA0 ((SMBUS0_BASE_ADDRESS) + 5) -#define SMB0_BLOCKDATA ((SMBUS0_BASE_ADDRESS) + 7) -static int smb_write_blk(u8 slave, u8 command, u8 length, const u8 *data) -{ - __outbyte(SMB0_STATUS, 0x1E); // clear error status - __outbyte(SMB0_ADDRESS, slave & ~1); // slave addr + direction = out - __outbyte(SMB0_HOSTCMD, command); // or destination offset - __outbyte(SMB0_DATA0, length); // sent before data - __inbyte(SMB0_CONTROL); // reset block data array - while (length--) - __outbyte(SMB0_BLOCKDATA, *(data++)); - __outbyte(SMB0_CONTROL, 0x54); // execute block write, no IRQ - - while (__inbyte(SMB0_STATUS) == 0x01); // busy, no errors - return __inbyte(SMB0_STATUS) ^ 0x02; // 0x02 = completed, no errors -} - static void init(struct device *dev) { volatile u8 *spi_base; // base addr of Hudson's SPI host controller @@ -126,11 +105,11 @@ static void init(struct device *dev) /* Notify the SMC we're alive and kicking, or after a while it will * effect a power cycle and switch to the alternate BIOS chip. - * Should be done as late as possible. */ - printk(BIOS_INFO, "Sending BIOS alive message\n"); - const u8 i_am_alive[] = { 0x03 }; - if ((i = smb_write_blk(0x50, 0x25, sizeof(i_am_alive), i_am_alive))) - printk(BIOS_ERR, "smb_write_blk failed: %d\n", i); + * Should be done as late as possible. + * Failure here does not matter if watchdog was already disabled, + * by configuration or previous boot, so ignore return value. + */ + sema_send_alive(); printk(BIOS_DEBUG, CONFIG_MAINBOARD_PART_NUMBER " EXIT %s\n", __func__); } |