[U-Boot] [PATCH] serial: Make full device search optional

Derald D. Woods woods.technical at gmail.com
Mon Jan 29 23:41:10 UTC 2018


On Mon, Jan 29, 2018 at 07:46:09AM -0600, Derald Woods wrote:
> On Jan 29, 2018 6:57 AM, "Alexander Graf" <agraf at suse.de> wrote:
> 
> Commit 608b0c4ad4e5ec0c ("serial: Use next serial device if probing fails")
> added code to search for more serial devices if the default one was not
> probed correctly.
> 
> Unfortunately, that breaks omap3_evm. So while investigating why that is
> the case, let's disable the full search for everyone but bcm283x where it
> is needed.
> 
> Fixes: 608b0c4ad4e5ec0c ("serial: Use next serial device if probing fails")
> Reported-by: Derald D. Woods <woods.technical at gmail.com>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> 
> ---
> 
> Derald, could you please test this patch and verify it does indeed unbreak
> omap3_evm?
> 

The omap3_evm boots now with this patch applied on master. If I enable
SERIAL_SEARCH_ALL, it does not boot. I always build cleanly using the
default config only. On failure, there is no console input/output and
the board unresponsive.

Derald

> 
> 
> I will check later today. The board is not with me at the moment.
> 
> Derald
> 
> 
> 
> Thanks!
> ---
>  arch/arm/Kconfig               |  1 +
>  drivers/serial/Kconfig         | 12 ++++++++++++
>  drivers/serial/serial-uclass.c | 13 +++++++++++++
>  3 files changed, 26 insertions(+)
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 30a6f6dc53..a423aa9629 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -550,6 +550,7 @@ config ARCH_BCM283X
>         select DM_GPIO
>         select OF_CONTROL
>         select PL01X_SERIAL
> +       select SERIAL_SEARCH_ALL
>         imply FAT_WRITE
> 
>  config TARGET_VEXPRESS_CA15_TC2
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index 3ffedba525..93e602e0ee 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -79,6 +79,18 @@ config SERIAL_RX_BUFFER_SIZE
>         help
>           The size of the RX buffer (needs to be power of 2)
> 
> +config SERIAL_SEARCH_ALL
> +       bool "Search for serial devices after default one failed"
> +       depends on DM_SERIAL
> +       help
> +         The serial subsystem only searches for a single serial device
> +         that was instantiated, but does not check whether it was probed
> +         correctly. With this option set, we make successful probing
> +         mandatory and search for fallback serial devices if the default
> +         device does not work.
> +
> +         If unsure, say N.
> +
>  config SPL_DM_SERIAL
>         bool "Enable Driver Model for serial drivers in SPL"
>         depends on DM_SERIAL
> diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
> index 68ca2d09d1..9891c20656 100644
> --- a/drivers/serial/serial-uclass.c
> +++ b/drivers/serial/serial-uclass.c
> @@ -74,7 +74,9 @@ static void serial_find_console_or_panic(void)
>  {
>         const void *blob = gd->fdt_blob;
>         struct udevice *dev;
> +#ifdef CONFIG_SERIAL_SEARCH_ALL
>         int ret;
> +#endif
> 
>         if (CONFIG_IS_ENABLED(OF_PLATDATA)) {
>                 uclass_first_device(UCLASS_SERIAL, &dev);
> @@ -113,6 +115,8 @@ static void serial_find_console_or_panic(void)
>  #else
>  #define INDEX 0
>  #endif
> +
> +#ifdef CONFIG_SERIAL_SEARCH_ALL
>                 if (!uclass_get_device_by_seq(UCLASS_SERIAL, INDEX, &dev) ||
>                     !uclass_get_device(UCLASS_SERIAL, INDEX, &dev)) {
>                         if (dev->flags & DM_FLAG_ACTIVATED) {
> @@ -131,6 +135,15 @@ static void serial_find_console_or_panic(void)
>                                 return;
>                         }
>                 }
> +#else
> +               if (!uclass_get_device_by_seq(UCLASS_SERIAL, INDEX, &dev) ||
> +                   !uclass_get_device(UCLASS_SERIAL, INDEX, &dev) ||
> +                   (!uclass_first_device(UCLASS_SERIAL, &dev) && dev)) {
> +                       gd->cur_serial_dev = dev;
> +                       return;
> +               }
> +#endif
> +
>  #undef INDEX
>         }
> 
> --
> 2.12.3


More information about the U-Boot mailing list