soc/amd/common/lpc/espi_util: handle espi_get_configuration error

In espi_wait_channel_ready the return value of espi_get_configuration
didn't get checked before. In the case of the espi_send_command call in
espi_get_configuration returning CB_ERR, espi_get_configuration didn't
write to the local config variable, so if this happens in the first pass
of the do-while loop, the following espi_slave_is_channel_ready call
would use the uninitialized local config variable as parameter. Fix this
by checking the return value of espi_get_configuration.

TEST=None

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Iff1a0670e17b9d6c6f4daf2ea56badf6c428b8c9
Reviewed-on: https://review.coreboot.org/c/coreboot/+/60209
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
This commit is contained in:
Felix Held 2021-12-18 00:41:23 +01:00
parent e2192e6a82
commit 5ba87a8092
1 changed files with 2 additions and 1 deletions

View File

@ -772,7 +772,8 @@ static enum cb_err espi_wait_channel_ready(uint16_t slave_reg_addr)
stopwatch_init_usecs_expire(&sw, ESPI_CH_READY_TIMEOUT_US); stopwatch_init_usecs_expire(&sw, ESPI_CH_READY_TIMEOUT_US);
do { do {
espi_get_configuration(slave_reg_addr, &config); if (espi_get_configuration(slave_reg_addr, &config) != CB_SUCCESS)
return CB_ERR;
if (espi_slave_is_channel_ready(config)) if (espi_slave_is_channel_ready(config))
return CB_SUCCESS; return CB_SUCCESS;
} while (!stopwatch_expired(&sw)); } while (!stopwatch_expired(&sw));