On Thu, 25 Jun 2026 19:41:21 +0200, Jordi Trepat Mur <[email protected]> wrote: > diff --git a/drivers/pinctrl/pinctrl-single.c > b/drivers/pinctrl/pinctrl-single.c > index 42980e097e0d..0029a7e1a279 100644 > --- a/drivers/pinctrl/pinctrl-single.c > +++ b/drivers/pinctrl/pinctrl-single.c > @@ -509,29 +509,74 @@ static int single_add_gpio_func(struct udevice *dev) > [ ... skip 17 lines ... ] > + * The original loop called ofnode_parse_phandle_with_args() once per > + * entry. On a flat DT each call resolves the phandle, which scans the > + * whole tree, so the repeated parse is quadratic in the number of > + * entries and proportional to the tree size. This is very slow > + * pre-relocation with caches off. > + *
Nit- Why reference the prior code in the comment, it would just be confusing for people reading it in the future. > + * The phandle target is not used here (only the argument cells are > + * stored), so resolve it only for the first entry to learn the > + * per-entry cell count, then read the argument cells directly. This > + * follows the existing pinctrl-single,gpio-range usage observed in > + * current DTs, where entries use the same provider and therefore a > + * uniform per-entry cell count. > + */ > + ret = ofnode_parse_phandle_with_args(node, propname, cellname, 0, 0, > + &gpiospec); > + if (ret) > + return 0; > + if (gpiospec.args_count != 3) > + return 0; This could just be if (ret || gpiospec.args_count != 3) Otherwise the patch looks good to me. -- Anshul Dalal <[email protected]>

