summaryrefslogtreecommitdiff
path: root/src/soc/intel
diff options
context:
space:
mode:
authorSubrata Banik <subratabanik@google.com>2022-04-13 19:18:34 +0530
committerSubrata Banik <subratabanik@google.com>2022-04-19 05:45:43 +0000
commita26bb7878bd8728b43887ebee7dc86f658a35109 (patch)
tree77563958560c0137c7821b455cd89e37ab6f929f /src/soc/intel
parent6b888adcff446c65ef22996728008ff5c6d5a720 (diff)
soc/intel/cmn/fast_spi: Add API to check if SPI Cycle In Progress
This patch creates a helper function to check if any SPI transaction is pending. As per Intel PCH BIOS spec section 3.6 Flash Security Recommendation, it's important to ensure there is no pending SPI transaction before setting SPI lock bits. BUG=b:211954778 TEST=Able to build google/brya with this patch and no error msg seen due to `SPI transaction is pending`. Signed-off-by: Subrata Banik <subratabanik@google.com> Change-Id: Ibd3f67ae60bfcb3610cd0950b057da97ff74b5b9 Reviewed-on: https://review.coreboot.org/c/coreboot/+/63624 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
Diffstat (limited to 'src/soc/intel')
-rw-r--r--src/soc/intel/common/block/fast_spi/fast_spi_flash.c12
-rw-r--r--src/soc/intel/common/block/include/intelblocks/fast_spi.h2
2 files changed, 14 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/fast_spi/fast_spi_flash.c b/src/soc/intel/common/block/fast_spi/fast_spi_flash.c
index 269db634e0..2bc7cf1759 100644
--- a/src/soc/intel/common/block/fast_spi/fast_spi_flash.c
+++ b/src/soc/intel/common/block/fast_spi/fast_spi_flash.c
@@ -161,6 +161,18 @@ static int exec_sync_hwseq_xfer(struct fast_spi_flash_ctx *ctx,
return wait_for_hwseq_xfer(ctx, flash_addr);
}
+int fast_spi_cycle_in_progress(void)
+{
+ BOILERPLATE_CREATE_CTX(ctx);
+
+ int ret = wait_for_hwseq_spi_cycle_complete(ctx);
+ if (ret != SUCCESS)
+ printk(BIOS_ERR, "SPI Transaction Timeout (Exceeded %d ms) due to prior"
+ " operation is pending\n", SPIBAR_HWSEQ_XFER_TIMEOUT_MS);
+
+ return ret;
+}
+
/*
* Ensure read/write xfer len is not greater than SPIBAR_FDATA_FIFO_SIZE and
* that the operation does not cross page boundary.
diff --git a/src/soc/intel/common/block/include/intelblocks/fast_spi.h b/src/soc/intel/common/block/include/intelblocks/fast_spi.h
index a903ea839e..eb3f2aabb6 100644
--- a/src/soc/intel/common/block/include/intelblocks/fast_spi.h
+++ b/src/soc/intel/common/block/include/intelblocks/fast_spi.h
@@ -5,6 +5,8 @@
#include <types.h>
+/* Check if SPI transaction is pending */
+int fast_spi_cycle_in_progress(void);
/*
* Disable the BIOS write protect and Enable Prefetching and Caching.
*/