Attempt to load GENI peripheral firmware if we don't have a protocol loaded.
Signed-off-by: Casey Connolly <casey.conno...@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