
Add a new special environment variable "serial" that allows selection of serial device when CONFIG_SERIAL_MULTI is defined. This replaces the existing calls to serial_assign() from cmd_nvedit.c and iomux.c that were not doing anything.
Signed-off-by: Allen Martin amartin@nvidia.com --- common/cmd_nvedit.c | 7 ++++++- common/iomux.c | 10 ---------- doc/driver-model/UDM-serial.txt | 5 +++-- 3 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index 1f9c674..d1ee07d 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -238,11 +238,16 @@ int env_check_apply(const char *name, const char *oldval, /* Try assigning specified device */ if (console_assign(console, newval) < 0) return 1; +#endif /* CONFIG_CONSOLE_MUX */ + }
+#ifdef CONFIG_SERIAL_MULTI + /* Check for serial redirection */ + if (strcmp(name, "serial") == 0) { if (serial_assign(newval) < 0) return 1; -#endif /* CONFIG_CONSOLE_MUX */ } +#endif /* CONFIG_SERIAL_MULTI */
/* * Some variables like "ethaddr" and "serial#" can be set only once and diff --git a/common/iomux.c b/common/iomux.c index dbc2312..6a75704 100644 --- a/common/iomux.c +++ b/common/iomux.c @@ -135,16 +135,6 @@ int iomux_doenv(const int console, const char *arg) */ if (console_assign(console, start[j]) < 0) continue; - /* - * This was taken from common/cmd_nvedit.c. - * This will never work because serial_assign() returns - * 1 upon error, not -1. - * This would almost always return an error anyway because - * serial_assign() expects the name of a serial device, like - * serial_smc, but the user generally only wants to set serial. - */ - if (serial_assign(start[j]) < 0) - continue; cons_set[cs_idx++] = dev; } free(console_args); diff --git a/doc/driver-model/UDM-serial.txt b/doc/driver-model/UDM-serial.txt index 9feb2e5..66f3e6b 100644 --- a/doc/driver-model/UDM-serial.txt +++ b/doc/driver-model/UDM-serial.txt @@ -26,8 +26,9 @@ and serial_setbrg() are often called from platform-dependent places. It's important to consider current implementation of CONFIG_SERIAL_MULTI though. This resides in common/serial.c and behaves as a multiplexer for serial ports. This, by calling serial_assign(), allows user to switch I/O from one serial port -to another. Though the environmental variables "stdin", "stdout", "stderr" -remain set to "serial". +to another. The environment variable "serial" is used to select which of the +serial ports is the currently active port. The environmental variables +"stdin", "stdout", "stderr" remain set to "serial".
These variables are managed by the IOMUX. This resides in common/iomux.c and manages all console input/output from U-Boot. For serial port, only one IOMUX is