[PATCH v4 8/9] spi: geni: load firmware if required

Casey Connolly casey.connolly at linaro.org
Mon Jun 16 11:44:50 CEST 2025


Attempt to load GENI peripheral firmware if we don't have a protocol
loaded.

Signed-off-by: Casey Connolly <casey.connolly at linaro.org>
---
 drivers/spi/spi-geni-qcom.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index 940f88115184992a088626fbb7053274f91cc3dd..48354c335385258bca95f637138ea7f4d6a30fef 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -17,8 +17,9 @@
 #include <linux/err.h>
 #include <linux/bitops.h>
 #include <time.h>
 #include <soc/qcom/geni-se.h>
+#include <soc/qcom/qup-fw-load.h>
 
 /* SPI SE specific registers and respective register fields */
 #define SE_SPI_CPHA		0x224
 #define CPHA			BIT(0)
@@ -535,8 +536,15 @@ static int geni_spi_probe(struct udevice *dev)
 	proto = readl(priv->base + GENI_FW_REVISION_RO);
 	proto &= FW_REV_PROTOCOL_MSK;
 	proto >>= FW_REV_PROTOCOL_SHFT;
 
+	if (proto == GENI_SE_INVALID_PROTO) {
+		qcom_geni_load_firmware(priv->base, dev);
+		proto = readl(priv->base + GENI_FW_REVISION_RO);
+		proto &= FW_REV_PROTOCOL_MSK;
+		proto >>= FW_REV_PROTOCOL_SHFT;
+	}
+
 	if (proto != GENI_SE_SPI) {
 		dev_err(dev, "Invalid proto %d\n", proto);
 		clk_disable(&priv->clk);
 		return -ENXIO;

-- 
2.49.0



More information about the U-Boot mailing list