summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2020-05-09 19:31:55 -0700
committerFurquan Shaikh <furquan@google.com>2020-05-12 20:06:15 +0000
commit98bc961ee365f9d71ee3844e522b659519a8f8a2 (patch)
tree4a0d06be3e0baebca5fef7e271b1cb8524132418
parent32b8a51153f7836b841cb2da832e9e78b32e1227 (diff)
downloadcoreboot-98bc961ee365f9d71ee3844e522b659519a8f8a2.tar.xz
soc/amd/common/block/lpc: Provide an option to use static eSPI BAR
This change provides a helper function espi_update_static_bar() that informs the eSPI common driver about the static BAR to use for eSPI controller instead of reading the SPIBASE. This is required to support the case of verstage running on PSP. BUG=b:153675913 Signed-off-by: Furquan Shaikh <furquan@google.com> Change-Id: I1f11bb2e29ea0acd71ba6984e42573cfe914e5d7 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41256 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Raul Rangel <rrangel@chromium.org>
-rw-r--r--src/soc/amd/common/block/include/amdblocks/espi.h6
-rw-r--r--src/soc/amd/common/block/lpc/espi_util.c18
2 files changed, 22 insertions, 2 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/espi.h b/src/soc/amd/common/block/include/amdblocks/espi.h
index 53cc5f9f3f..69267f8cc3 100644
--- a/src/soc/amd/common/block/include/amdblocks/espi.h
+++ b/src/soc/amd/common/block/include/amdblocks/espi.h
@@ -55,4 +55,10 @@ int espi_open_mmio_window(uint32_t base, size_t size);
*/
void espi_configure_decodes(void);
+/*
+ * In cases where eSPI BAR is statically provided by SoC, use that BAR instead of reading
+ * SPIBASE. This is required for cases where verstage runs on PSP.
+ */
+void espi_update_static_bar(uintptr_t bar);
+
#endif /* __AMDBLOCKS_ESPI_H__ */
diff --git a/src/soc/amd/common/block/lpc/espi_util.c b/src/soc/amd/common/block/lpc/espi_util.c
index 2585c46138..54a017ea0c 100644
--- a/src/soc/amd/common/block/lpc/espi_util.c
+++ b/src/soc/amd/common/block/lpc/espi_util.c
@@ -11,10 +11,24 @@
#include <stdint.h>
#include <types.h>
+static uintptr_t espi_bar;
+
+void espi_update_static_bar(uintptr_t bar)
+{
+ espi_bar = bar;
+}
+
static uintptr_t espi_get_bar(void)
{
- uintptr_t espi_spi_base = lpc_get_spibase();
- return espi_spi_base + ESPI_OFFSET_FROM_BAR;
+ uintptr_t espi_spi_base;
+
+ if (espi_bar)
+ return espi_bar;
+
+ espi_spi_base = lpc_get_spibase();
+ espi_update_static_bar(espi_spi_base + ESPI_OFFSET_FROM_BAR);
+
+ return espi_bar;
}
static uint32_t espi_read32(int reg)