Hi Markus,

Thank you for the patch.

On Wed, Jan 14, 2026 at 09:33, "Markus Schneider-Pargmann (TI.com)" 
<[email protected]> wrote:

> Currently once a driver matched the compatible string of a device, other
> drivers are ignored. If the first matching driver returns -ENODEV, no
> other possibly matching drivers are iterated with that compatible of the
> device. Instead the next compatible in the list of compatibles is
> selected, assuming only one driver matches one compatible at a time.
>
> To be able to use the bind function to return -ENODEV and continue
> matching other drivers with the same compatible, move the for loop a bit
> to continue the for loop after -ENODEV was returned. The loop had to be
> adjusted a bit to still support the 'drv' argument properly. Some
> simplifications where done as well.

Nitpick: where -> were.

Please don't do any refactor/tweaks in this patch. drivers/core is
already difficult enough to review without formatting changes (to me at
least)

I see a couple below.

>
> The modification will only add additional loop iterations if -ENODEV is
> returned. Otherwise the exit and continue conditions for the loop stay
> the same and do not cause any additional iterations and should not
> impact performance.
>
> This is required for ti-musb-host and ti-musb-peripheral which both
> match on the same device but differ based on the dr_mode DT property.
> Depending on this property, the driver is either UCLASS_USB or
> UCLASS_USB_GADGET_GENERIc. By checking the DT property in the bind

Nitpick: UCLASS_USB_GADGET_GENERIC (not GENERIc)

> function and returning -ENODEV the other driver can probe instead.
>
> Reviewed-by: Simon Glass <[email protected]>
> Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
> ---
>  drivers/core/lists.c | 65 
> ++++++++++++++++++++++++++--------------------------
>  1 file changed, 33 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/core/lists.c b/drivers/core/lists.c
> index 
> 9d1ca38212ee7f53b8894f964f096611c8ec20a5..3d9f9bc93954efdd624dddb1833f3a855c3c28de
>  100644
> --- a/drivers/core/lists.c
> +++ b/drivers/core/lists.c
> @@ -235,50 +235,51 @@ int lists_bind_fdt(struct udevice *parent, ofnode node, 
> struct udevice **devp,
>               log_debug("   - attempt to match compatible string '%s'\n",
>                         compat);
>  
> -             id = NULL;
>               for (entry = driver; entry != driver + n_ents; entry++) {
> +                     /* Search for drivers with matching drv or existing 
> of_match */
>                       if (drv) {
>                               if (drv != entry)
>                                       continue;
> -                             if (!entry->of_match)
> -                                     break;
> +                     } else if (!entry->of_match) {
> +                             continue;
>                       }
> -                     ret = driver_check_compatible(entry->of_match, &id,
> -                                                   compat);
> -                     if (!ret)
> -                             break;
> -             }
> -             if (entry == driver + n_ents)
> -                     continue;
>  
> -             if (pre_reloc_only) {
> -                     if (!ofnode_pre_reloc(node) &&
> -                         !(entry->flags & DM_FLAG_PRE_RELOC)) {
> -                             log_debug("Skipping device pre-relocation\n");
> -                             return 0;
> +                     id = NULL;
> +                     if (entry->of_match) {
> +                             ret = driver_check_compatible(entry->of_match, 
> &id,
> +                                                           compat);
> +                             if (ret)
> +                                     continue;
> +                             log_debug("   - found match at driver '%s' for 
> '%s'\n",
> +                                       entry->name, id->compatible);
> +                     }
> +
> +                     if (pre_reloc_only) {
> +                             if (!ofnode_pre_reloc(node) &&
> +                                 !(entry->flags & DM_FLAG_PRE_RELOC)) {
> +                                     log_debug("   - Skipping device 
> pre-relocation\n");


This was changed from :

  log_debug("Skipping device pre-relocation\n");

Please move log formatting to a separate, cosmetic patch. This way, this
patch stays purely functional, and simpler.

See: 
https://docs.u-boot.org/en/latest/develop/sending_patches.html#general-patch-submission-rules


> +                                     return 0;
> +                             }
> +                     }
> +
> +                     ret = device_bind_with_driver_data(parent, entry, name,
> +                                                        id ? id->data : 0, 
> node,
> +                                                        &dev);
> +                     if (!drv && ret == -ENODEV) {
> +                             log_debug("   - Driver '%s' refuses to bind\n", 
> entry->name);

Same here. We added "   -" to the log, making the diff overly
complicated.

Locally, discarded these message formatting changes and the diff was
much simpler.

Can we please re-submit by moving the formatting changes in a separate
patch?

Thanks
Mattijs


Reply via email to