diff options
author | Alexander Graf | 2018-01-29 13:57:20 +0100 |
---|---|---|
committer | Tom Rini | 2018-01-29 08:18:02 -0500 |
commit | ae5326a6b34b34b1827edf2eee1a0e9e5363c5a2 (patch) | |
tree | 7e6938c1a57a812530b8a9a34d7e22298aadabbb /drivers/serial | |
parent | 06bfb9f37c03335dd5d0547ab7286f2f74fcbcbb (diff) |
serial: Make full device search optional
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@gmail.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/Kconfig | 12 | ||||
-rw-r--r-- | drivers/serial/serial-uclass.c | 13 |
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 3ffedba5256..93e602e0ee0 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 68ca2d09d1b..9891c20656f 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 } |