Hi Stefan, Sorry for delayed reply, Occupied with high priority task > -----Original Message----- > From: Stefan Roese <s...@denx.de> > Sent: Wednesday, September 30, 2020 10:46 AM > To: Vabhav Sharma (OSS) <vabhav.sha...@oss.nxp.com>; > andre.przyw...@arm.com; u-boot@lists.denx.de; s...@chromium.org > Cc: Vabhav Sharma <vabhav.sha...@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.sha...@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.sha...@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: s...@denx.de