Hi Marek Vasut,
Apology for delayed reply, Occupied with other work

> -----Original Message-----
> From: Marek Vasut <ma...@denx.de>
> Sent: Tuesday, October 16, 2018 2:39 PM
> To: Vabhav Sharma <vabhav.sha...@nxp.com>; u-boot@lists.denx.de; u-
> boot...@lists.denx.de; s...@chromium.org
> Cc: yamada.masah...@socionext.com; bmeng...@gmail.com; Andreas
> Dannenberg <dannenb...@ti.com>
> Subject: Re: [U-Boot-DM] [PATCH] drivers: serial: probe all serial devices
> 
> On 10/16/2018 09:20 AM, Vabhav Sharma wrote:
> >
> >
> >> -----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
> 
> You can also use setenv stdin/stdout/stderr to alternate between stdio
> devices. So what is the problem ?
Problem is seen with PL011 driver using DM model, Only boot console baud rate 
is set.
Tried modifying the environment variable but seems readonly  (## Error 
inserting "stdout" variable, errno=22)
Multiple UART enablement is required to use all console.
> 
> >>> 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.
> 
> Is this also the case for having 6 copies of exactly the same code ? You can
> turn it into a function if needed.
Ok, I understand
> 
> >>> 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
> 
> 
> --
> Best regards,
> Marek Vasut
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to