> -----Original Message-----
> From: Marek Vasut <ma...@denx.de>
> Sent: Tuesday, October 16, 2018 12:29 PM
> To: Vabhav Sharma <vabhav.sha...@nxp.com>; u-boot@lists.denx.de; u-boot-
> d...@lists.denx.de; s...@chromium.org
> Cc: yamada.masah...@socionext.com; bmeng...@gmail.com
> Subject: Re: [U-Boot-DM] [PATCH] drivers: serial: probe all serial devices
> 
> On 10/15/2018 02:09 AM, Vabhav Sharma wrote:
> > Serial subsystem search and probe only one first serial device and
> > unable to use remaining available UART devices
> 
> The serial devices are bound and you can switch to them. What is the real
> problem ?
Yes, I understand switch is possible with change in DTS or platform data for 
choosing UART device to be used as boot console(e.g. UART0) with 
gd->cur_serial_dev is updated to chosen UART device.
The problem was stated in email(attached 23 may) " [U-Boot-DM] QUERY:U-boot 
DM:SERIAL:Multiple On-chip UART Controller Support" with suggested solution 
from Simon which is sent as patch for review.
Similar issue was faced by Andreas
> 
> > This patch changes the logic to probe all available serial devices
> > using platform data or device tree in DM model in order to use all
> > UART devices
> 
> Get rid of the ifdeffery and copied code please.
This is case for using uclass_next_device() to iterate through them, Having 
CONFIG option doesn't make it mandatory for every platform to probe all serial 
devices.
> 
> > Signed-off-by: Vabhav Sharma <vabhav.sha...@nxp.com>
> > ---
> >  drivers/serial/Kconfig         | 12 ++++++++++++
> >  drivers/serial/serial-uclass.c | 42
> > ++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 54 insertions(+)
> >
> > diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index
> > 597db4b..d6451b1 100644
> > --- a/drivers/serial/Kconfig
> > +++ b/drivers/serial/Kconfig
> > @@ -133,6 +133,18 @@ config SERIAL_SEARCH_ALL
> >
> >       If unsure, say N.
> >
> > +config SERIAL_PROBE_ALL
> > +   bool "Probe all available serial devices"
> > +   depends on DM_SERIAL
> > +   help
> > +    The serial subsystem only probe for single serial device, but does
> > +    not probe for remaining available devices.
> > +    With this option set,we make probing for all available devices
> > +    mandatory.
> > +
> > +    If probing is not required for all remaining available
> > +    devices other than default current console device, say N.
> > +
> >  config SPL_DM_SERIAL
> >     bool "Enable Driver Model for serial drivers in SPL"
> >     depends on DM_SERIAL && SPL_DM
> > diff --git a/drivers/serial/serial-uclass.c
> > b/drivers/serial/serial-uclass.c index e50f0aa..405e60e 100644
> > --- a/drivers/serial/serial-uclass.c
> > +++ b/drivers/serial/serial-uclass.c
> > @@ -82,6 +82,13 @@ static void serial_find_console_or_panic(void)
> >             uclass_first_device(UCLASS_SERIAL, &dev);
> >             if (dev) {
> >                     gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                   /* Scanning uclass to probe all devices */
> > +                   for (;
> > +                        dev;
> > +                        uclass_next_device(&dev))
> > +                           ;
> > +#endif
> >                     return;
> >             }
> >     } else if (CONFIG_IS_ENABLED(OF_CONTROL) && blob) { @@ -92,11
> +99,25
> > @@ static void serial_find_console_or_panic(void)
> >                     if (np
> && !uclass_get_device_by_ofnode(UCLASS_SERIAL,
> >                                     np_to_ofnode(np), &dev)) {
> >                             gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                           /* Scanning uclass to probe all devices */
> > +                           for (;
> > +                                dev;
> > +                                uclass_next_device(&dev))
> > +                                   ;
> > +#endif
> >                             return;
> >                     }
> >             } else {
> >                     if (!serial_check_stdout(blob, &dev)) {
> >                             gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                           /* Scanning uclass to probe all devices */
> > +                           for (;
> > +                                dev;
> > +                                uclass_next_device(&dev))
> > +                                   ;
> > +#endif
> >                             return;
> >                     }
> >             }
> > @@ -121,6 +142,13 @@ static void serial_find_console_or_panic(void)
> >                 !uclass_get_device(UCLASS_SERIAL, INDEX, &dev)) {
> >                     if (dev->flags & DM_FLAG_ACTIVATED) {
> >                             gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                           /* Scanning uclass to probe all devices */
> > +                           for (;
> > +                                dev;
> > +                                uclass_next_device(&dev))
> > +                                   ;
> > +#endif
> >                             return;
> >                     }
> >             }
> > @@ -132,6 +160,13 @@ static void serial_find_console_or_panic(void)
> >                     if (!ret) {
> >                             /* Device did succeed probing */
> >                             gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                           /* Scanning uclass to probe all devices */
> > +                           for (;
> > +                                dev;
> > +                                uclass_next_device(&dev))
> > +                                   ;
> > +#endif
> >                             return;
> >                     }
> >             }
> > @@ -140,6 +175,13 @@ static void serial_find_console_or_panic(void)
> >                 !uclass_get_device(UCLASS_SERIAL, INDEX, &dev) ||
> >                 (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) {
> >                     gd->cur_serial_dev = dev;
> > +#ifdef CONFIG_SERIAL_PROBE_ALL
> > +                   /* Scanning uclass to probe all devices */
> > +                   for (;
> > +                        dev;
> > +                        uclass_next_device(&dev))
> > +                           ;
> > +#endif
> >                     return;
> >             }
> >  #endif
> >
> 
> 
> --
> Best regards,
> Marek Vasut
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to