+// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (c) 2014 The Chromium OS Authors.
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
{
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);
* from 1!).
*
* Failing that, get the device with sequence number 0, or in
- * extremis just the first serial device we can find. But we
- * insist on having a console (even if it is silent).
+ * extremis just the first working serial device we can find.
+ * But we insist on having a console (even if it is silent).
*/
#ifdef CONFIG_CONS_INDEX
#define INDEX (CONFIG_CONS_INDEX - 1)
#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) {
+ gd->cur_serial_dev = dev;
+ return;
+ }
+ }
+
+ /* Search for any working device */
+ for (ret = uclass_first_device_check(UCLASS_SERIAL, &dev);
+ dev;
+ ret = uclass_next_device_check(&dev)) {
+ if (!ret) {
+ /* Device did succeed probing */
+ gd->cur_serial_dev = dev;
+ 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
}