
On Mon, Jan 29, 2018 at 07:46:09AM -0600, Derald Woods wrote:
On Jan 29, 2018 6:57 AM, "Alexander Graf" agraf@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@gmail.com Signed-off-by: Alexander Graf agraf@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