]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
gpio: qcom_pmic: fix silent dev_read_addr downcast
authorCaleb Connolly <caleb.connolly@linaro.org>
Tue, 5 Dec 2023 13:46:46 +0000 (13:46 +0000)
committerCaleb Connolly <caleb.connolly@linaro.org>
Tue, 16 Jan 2024 12:26:53 +0000 (12:26 +0000)
priv->pid is uint32_t, but dev_read_addr() returns a uint64_t on arm64,
with the upper bits being used for error codes. Do error checking before
downcasting to u32 to prevent errors being silently ignored.

Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Tested-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
drivers/gpio/qcom_pmic_gpio.c

index 65feb453ebc3802a2d10252496929cd430e60731..e5841f5029530f672a977c21cf94b9da08eda5ee 100644 (file)
@@ -221,11 +221,14 @@ static int qcom_gpio_probe(struct udevice *dev)
 {
        struct qcom_gpio_bank *priv = dev_get_priv(dev);
        int reg;
+       u64 pid;
 
-       priv->pid = dev_read_addr(dev);
-       if (priv->pid == FDT_ADDR_T_NONE)
+       pid = dev_read_addr(dev);
+       if (pid == FDT_ADDR_T_NONE)
                return log_msg_ret("bad address", -EINVAL);
 
+       priv->pid = pid;
+
        /* Do a sanity check */
        reg = pmic_reg_read(dev->parent, priv->pid + REG_TYPE);
        if (reg != REG_TYPE_VAL)
@@ -328,11 +331,14 @@ static int qcom_pwrkey_probe(struct udevice *dev)
 {
        struct qcom_gpio_bank *priv = dev_get_priv(dev);
        int reg;
+       u64 pid;
 
-       priv->pid = dev_read_addr(dev);
-       if (priv->pid == FDT_ADDR_T_NONE)
+       pid = dev_read_addr(dev);
+       if (pid == FDT_ADDR_T_NONE)
                return log_msg_ret("bad address", -EINVAL);
 
+       priv->pid = pid;
+
        /* Do a sanity check */
        reg = pmic_reg_read(dev->parent, priv->pid + REG_TYPE);
        if (reg != 0x1)