]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
i2c: geni: load firmware if required
authorCasey Connolly <casey.connolly@linaro.org>
Mon, 14 Jul 2025 13:13:15 +0000 (15:13 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 30 Oct 2025 17:04:51 +0000 (11:04 -0600)
Load firmware for the peripheral if necessary.

Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patch.msgid.link/20250714-geni-load-fw-v5-4-5abbc0d29838@linaro.org
Signed-off-by: Casey Connolly <kcxt@postmarketos.org>
drivers/i2c/geni_i2c.c

index 4eb41ba852f7790ca646c8ba38f29fdb727fa804..d29e00fdf41df1d7a95d8d9b3b98f784f5b2a3e1 100644 (file)
@@ -22,6 +22,7 @@
 #include <reset.h>
 #include <time.h>
 #include <soc/qcom/geni-se.h>
+#include <soc/qcom/qup-fw-load.h>
 
 #define SE_I2C_TX_TRANS_LEN            0x26c
 #define SE_I2C_RX_TRANS_LEN            0x270
@@ -499,6 +500,13 @@ static int geni_i2c_probe(struct udevice *dev)
        proto &= FW_REV_PROTOCOL_MSK;
        proto >>= FW_REV_PROTOCOL_SHFT;
 
+       if (proto == GENI_SE_INVALID_PROTO) {
+               qcom_geni_load_firmware(geni->base, dev);
+               proto = readl(geni->base + GENI_FW_REVISION_RO);
+               proto &= FW_REV_PROTOCOL_MSK;
+               proto >>= FW_REV_PROTOCOL_SHFT;
+       }
+
        if (proto != GENI_SE_I2C) {
                dev_err(dev, "Invalid proto %d\n", proto);
                geni_i2c_disable_clocks(dev, geni);