[PATCH v2] drivers: serial: probe all uart devices
Vabhav Sharma (OSS)
vabhav.sharma at oss.nxp.com
Wed Oct 14 13:15:18 CEST 2020
Hi Stefan,
Sorry for delayed reply, Occupied with high priority task
> -----Original Message-----
> From: Stefan Roese <sr at denx.de>
> Sent: Wednesday, September 30, 2020 10:46 AM
> To: Vabhav Sharma (OSS) <vabhav.sharma at oss.nxp.com>;
> andre.przywara at arm.com; u-boot at lists.denx.de; sjg at chromium.org
> Cc: Vabhav Sharma <vabhav.sharma at nxp.com>
> Subject: Re: [PATCH v2] drivers: serial: probe all uart devices
>
> On 29.09.20 19:26, Vabhav Sharma wrote:
> > From: Vabhav Sharma <vabhav.sharma at nxp.com>
> >
> > U-Boot DM model probe only single device at a time which is enabled
> > and configured using device tree or platform data method.
> >
> > PL011 UART IP is SBSA compliant and firmware does the serial port
> > set-up, initialization and let the kernel use UART port for sending
> > and receiving characters.
> >
> > Normally software talk to one serial port time but some LayerScape
> > platform require all the UART devices enabled in Linux for various use
> > case.
> >
> > Adding support to probe all enabled serial devices like SBSA compliant
> > PL011 UART ports probe and initialization by firmware.
> >
> > Signed-off-by: Vabhav Sharma <vabhav.sharma at nxp.com>
> > ---
> > v2:
> > Incorporated Stefan review comment, Update #ifdef with macro
> > if (IS_ENABLED)..
>
> Better, thanks. But...
>
> > ---
> > ---
> > drivers/serial/Kconfig | 17 +++++++++++++++++
> > drivers/serial/serial-uclass.c | 30 ++++++++++++++++++++++++++++++
> > 2 files changed, 47 insertions(+)
> >
> > diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index
> > e344677..b2e30f1 100644
> > --- a/drivers/serial/Kconfig
> > +++ b/drivers/serial/Kconfig
> > @@ -134,6 +134,23 @@ config SERIAL_SEARCH_ALL
> >
> > If unsure, say N.
> >
> > +config SERIAL_PROBE_ALL
> > + bool "Probe all available serial devices"
> > + depends on DM_SERIAL
> > + default n
> > + help
> > + The serial subsystem only probe for single serial device,
> > + but does not probe for other remaining serial devices.
> > + With this option set,we make probing and searching for
> > + all available devices optional.
> > + Normally, U-Boot talk to one serial port at a time but SBSA
> > + compliant UART devices like PL011 require initialization
> > + by firmware and let the kernel use serial port for sending
> > + and receiving the characters.
> > +
> > + 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 0027625..d303a66 100644
> > --- a/drivers/serial/serial-uclass.c
> > +++ b/drivers/serial/serial-uclass.c
> > @@ -86,6 +86,11 @@ static void serial_find_console_or_panic(void)
> > uclass_first_device(UCLASS_SERIAL, &dev);
> > if (dev) {
> > gd->cur_serial_dev = dev;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL)) {
> > + /* Scanning uclass to probe all devices */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
> > return;
> > }
> > } else if (CONFIG_IS_ENABLED(OF_CONTROL) && blob) { @@ -96,11
> > +101,21 @@ 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;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
> {
> > + /* Scanning uclass to probe devices
> */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
>
> This code sequence (incl. gd->cur_serial_dev = dev;) is repeated multiple
> times (below as well). Could you instead move this into a function and call
> this function to reduce code and binary size?
I understand.
Checked and found that 56 bytes of code is added (including enabling the macro on LS platform)
Intended to define it earlier but defining one line of code in a function cause more overhead (function call, Stack operations, Pointer arithmetic) in execution time.
Tradeoff is to choose between Function overhead Vs Binary Size, What is your suggestion
>
> Thanks,
> Stefan
>
> > return;
> > }
> > } else {
> > if (!serial_check_stdout(blob, &dev)) {
> > gd->cur_serial_dev = dev;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
> {
> > + /* Scanning uclass to probe devices
> */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
> > return;
> > }
> > }
> > @@ -125,6 +140,11 @@ 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;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
> {
> > + /* Scanning uclass to probe devices
> */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
> > return;
> > }
> > }
> > @@ -136,6 +156,11 @@ static void serial_find_console_or_panic(void)
> > if (!ret) {
> > /* Device did succeed probing */
> > gd->cur_serial_dev = dev;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL))
> {
> > + /* Scanning uclass to probe devices
> */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
> > return;
> > }
> > }
> > @@ -144,6 +169,11 @@ 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;
> > + if (IS_ENABLED(CONFIG_SERIAL_PROBE_ALL)) {
> > + /* Scanning uclass to probe all devices */
> > + for (; dev; uclass_next_device(&dev))
> > + ;
> > + }
> > return;
> > }
> > #endif
> >
>
>
> Viele Grüße,
> Stefan
>
> --
> DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list