Message ID | 20231114-b4-qcom-dt-compat-v3-1-88a92f8f00ba@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Qualcomm PMIC fixes | expand |
On Tue, 14 Nov 2023 at 19:18, Caleb Connolly <caleb.connolly@linaro.org> wrote: > > 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. > > Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> > --- > drivers/gpio/qcom_pmic_gpio.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > Reviewed-by: Sumit Garg <sumit.garg@linaro.org> -Sumit > diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c > index 65feb453ebc3..e5841f502953 100644 > --- a/drivers/gpio/qcom_pmic_gpio.c > +++ b/drivers/gpio/qcom_pmic_gpio.c > @@ -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) > > -- > 2.42.1 >
diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c index 65feb453ebc3..e5841f502953 100644 --- a/drivers/gpio/qcom_pmic_gpio.c +++ b/drivers/gpio/qcom_pmic_gpio.c @@ -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)
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. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> --- drivers/gpio/qcom_pmic_gpio.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)