Thread (23 messages) 23 messages, 5 authors, 2018-03-27

[PATCH v3 3/3] pinctrl: qcom: Don't allow protected pins to be requested

From: Stephen Boyd <hidden>
Date: 2018-03-23 16:21:53
Also in: linux-arm-msm, linux-devicetree, linux-gpio, lkml

Quoting Andy Shevchenko (2018-03-23 04:36:04)
On Thu, 2018-03-22 at 19:16 -0500, Timur Tabi wrote:
quoted
On 03/21/2018 11:58 AM, Stephen Boyd wrote:
quoted
+static int msm_gpio_init_valid_mask(struct gpio_chip *chip,
+                               struct msm_pinctrl *pctrl)
+{
+   int ret;
+   unsigned int len, i;
+   unsigned int max_gpios = pctrl->soc->ngpios;
+
+   /* The number of GPIOs in the ACPI tables */
+   ret = device_property_read_u16_array(pctrl->dev, "gpios",
NULL, 0);
+   if (ret > 0 && ret < max_gpios) {
This needs to be ret <= max_gpios, otherwise it will fail if every
GPIO 
is available.

And it should print an error message and return an error code if ret
quoted
max_gpios.
Perhaps makes sense to do the opposite condition

if (ret < 0 || ret > max_gpios) {
 ... error handling ...
}
Indeed. I already rewrote it like this two days ago:

static int msm_gpio_init_valid_mask(struct gpio_chip *chip,
                                   struct msm_pinctrl *pctrl)
{
       int ret;
       unsigned int len, i;
       unsigned int max_gpios = pctrl->soc->ngpios;
       u16 *tmp;

       /* The number of GPIOs in the ACPI tables */
       len = ret = device_property_read_u16_array(pctrl->dev, "gpios",
ULL, 0);
       if (ret < 0)
               return 0;

       if (ret > max_gpios)
               return -EINVAL;

       tmp = kmalloc_array(len, sizeof(*tmp), GFP_KERNEL);
       if (!tmp)
               return -ENOMEM;

       ret = device_property_read_u16_array(pctrl->dev, "gpios", tmp,
en);
       if (ret < 0) {
               dev_err(pctrl->dev, "could not read list of GPIOs\n");
               goto out;
       }

       bitmap_zero(chip->valid_mask, max_gpios);
       for (i = 0; i < len; i++)
               set_bit(tmp[i], chip->valid_mask);

out:
       kfree(tmp);
       return ret;
}

I'll send the updated patches now.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help