diff mbox series

[3/3] i2c: geni: load firmware if required

Message ID 20250314-geni-load-fw-v1-3-587f25f2812f@linaro.org
State New
Headers show
Series Qualcomm: implement support for GENI firmware loading | expand

Commit Message

Caleb Connolly March 14, 2025, 4:09 p.m. UTC
Load firmware for the peripheral if necessary.

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
---
 drivers/i2c/geni_i2c.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Neil Armstrong March 17, 2025, 2:13 p.m. UTC | #1
On 14/03/2025 17:09, Caleb Connolly wrote:
> Load firmware for the peripheral if necessary.
> 
> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
>   drivers/i2c/geni_i2c.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/i2c/geni_i2c.c b/drivers/i2c/geni_i2c.c
> index 4eb41ba852f7790ca646c8ba38f29fdb727fa804..fca0fab7201a2f86ff4a8c12d053297e660c4621 100644
> --- a/drivers/i2c/geni_i2c.c
> +++ b/drivers/i2c/geni_i2c.c
> @@ -21,8 +21,9 @@
>   #include <clk.h>
>   #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
>   #define SE_I2C_SCL_COUNTERS		0x278
> @@ -498,8 +499,15 @@ static int geni_i2c_probe(struct udevice *dev)
>   	proto = readl(geni->base + GENI_FW_REVISION_RO);
>   	proto &= FW_REV_PROTOCOL_MSK;
>   	proto >>= FW_REV_PROTOCOL_SHFT;
>   
> +	if (proto == 0xff) {

-------------------- 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);
>   		return -ENXIO;
> 

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff mbox series

Patch

diff --git a/drivers/i2c/geni_i2c.c b/drivers/i2c/geni_i2c.c
index 4eb41ba852f7790ca646c8ba38f29fdb727fa804..fca0fab7201a2f86ff4a8c12d053297e660c4621 100644
--- a/drivers/i2c/geni_i2c.c
+++ b/drivers/i2c/geni_i2c.c
@@ -21,8 +21,9 @@ 
 #include <clk.h>
 #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
 #define SE_I2C_SCL_COUNTERS		0x278
@@ -498,8 +499,15 @@  static int geni_i2c_probe(struct udevice *dev)
 	proto = readl(geni->base + GENI_FW_REVISION_RO);
 	proto &= FW_REV_PROTOCOL_MSK;
 	proto >>= FW_REV_PROTOCOL_SHFT;
 
+	if (proto == 0xff) {
+		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);
 		return -ENXIO;