summaryrefslogtreecommitdiff
path: root/src/drivers/sil
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2021-05-11 11:13:38 -0600
committerRaul Rangel <rrangel@chromium.org>2021-05-19 16:26:44 +0000
commit12c0542e6fa54a3875c5786d9527bba5ffa8c45c (patch)
tree0f3bd3bd369a934470fba53f391a89f2bbeb747b /src/drivers/sil
parent224b578420a5d42e16ec6a8285971d34d8cdafac (diff)
soc/amd/common/block/espi_util: Work around in-band reset race condition
When performing an in-band reset the host controller and the peripheral can have mismatched IO configs. i.e., The eSPI peripheral can be in IO-4 mode while, the eSPI host will be in IO-1. This results in the peripheral getting invalid packets and thus not responding. This causes the NO_RESPONSE status bit to be set and cause eSPI init to fail. If the peripheral is alerting when we perform an in-band reset, there is a race condition in espi_send_command. 1) espi_send_command clears the interrupt status. 2) eSPI host controller hardware notices the alert and sends a GET_STATUS. 3) espi_send_command writes the in-band reset command. 4) eSPI hardware enqueues the in-band reset until GET_STATUS is complete. 5) GET_STATUS fails with NO_RESPONSE and sets the interrupt status. 6) eSPI hardware performs in-band reset. 7) espi_send_command checks the status and sees a NO_RESPONSE bit. As a workaround we allow the NO_RESPONSE status code when we perform an in-band reset. BUG=b:186135022 TEST=suspend_stress_test and S5->S0 tests on guybrush and zork. Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: I71271377f20eaf29032214be98794e1645d9b70a Reviewed-on: https://review.coreboot.org/c/coreboot/+/54070 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Reviewed-by: Rob Barnes <robbarnes@google.com>
Diffstat (limited to 'src/drivers/sil')
0 files changed, 0 insertions, 0 deletions