[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