From 9e41c7cec791d84b079251065add7dba66662913 Mon Sep 17 00:00:00 2001 From: Jeremy Compostella Date: Fri, 18 Jul 2025 13:12:56 -0700 Subject: [PATCH] soc/intel/cmn/block/fast_spi: Lock DMA before exiting coreboot Introduce a DMA lock mechanism to secure the Fast SPI DMA operations during the payload boot phase. A new `fast_spi_dma_lock` function is added to lock the DMA control register when the system enters the payload boot state. This ensures that DMA operations are appropriately secured, preventing any unintended data transfers post-boot. TEST=On a Fatcat device with an FSP not locking down Fast SPI DMA, coreboot logs show "Fast-SPI: DMA has been locked." and /sys/devices/pci0000:00/0000:00:1f.5/config shows that bit 15 of register FAST_SPI_DMA_CONTROL (0xbc) has been is set. Change-Id: Ie4abbcfc798480319a32b0049e3559d623ef78ef Signed-off-by: Jeremy Compostella Reviewed-on: https://review.coreboot.org/c/coreboot/+/88488 Reviewed-by: Bora Guvendik Reviewed-by: Wonkyu Kim Reviewed-by: Subrata Banik Reviewed-by: Kapil Porwal Tested-by: build bot (Jenkins) --- src/soc/intel/common/block/fast_spi/fast_spi_dma.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/soc/intel/common/block/fast_spi/fast_spi_dma.c b/src/soc/intel/common/block/fast_spi/fast_spi_dma.c index c21056aa18..c6bf38c7d4 100644 --- a/src/soc/intel/common/block/fast_spi/fast_spi_dma.c +++ b/src/soc/intel/common/block/fast_spi/fast_spi_dma.c @@ -403,3 +403,17 @@ void spi_flash_dma_install_ops(struct xlate_region_device *mmap_xlate_rdev) fast_spi_dma_rdev_ro_ops.readat = fast_spi_dma_readat; mmap_xlate_rdev->rdev.ops = &fast_spi_dma_rdev_ro_ops; } + +static void fast_spi_dma_lock(void *unused) +{ + union fast_spi_dma_control control = {fast_spi_read(FAST_SPI_DMA_CONTROL)}; + if (control.fields.lock) + return; + + control.fields.lock = 1; + fast_spi_write(FAST_SPI_DMA_CONTROL, control.data); + + printk(BIOS_DEBUG, "Fast-SPI: driver locked DMA\n"); +} + +BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_BOOT, BS_ON_ENTRY, fast_spi_dma_lock, NULL);