The support for multiple serial interfaces as implemented is mainly
intended to allow for modem dial-in / dial-out while still being able
to use a serial console on a (different) serial port.

MPC8XX Specific
===============
At the moment, the ports must be split on a SMC and a SCC port  on  a
8xx processor; other configurations are not (yet) supported.

Support for hardware handshake has not been implemented yet (but is
in the works).

*) The default console depends on the keys pressed:
	- SMC if keys not pressed (modem not enabled)
	- SCC if keys pressed (modem enabled)

*) The console can be switched to SCC by any of the following commands:

	setenv stdout serial_scc
	setenv stdin serial_scc
	setenv stderr serial_scc

*) The console can be switched to SMC by any of the following commands:

	setenv stdout serial_smc
	setenv stdin serial_smc
	setenv stderr serial_smc

*) If a file descriptor is set to "serial" then the current serial device
will be used which, in turn, can be switched by above commands.

*) The baudrate is the same for all serial devices. But it can be switched
just after switching the console:

	setenv sout serial_scc; setenv baudrate 38400

After that press 'enter' at the SCC console. Note that baudrates <38400
are not allowed on LWMON with watchdog enabled (see CFG_BAUDRATE_TABLE in
include/configs/lwmon.h).


PPC4XX Specific
===============
*) The default console is UART0

*) The console can be switched to UART1 by any of the following commands:
	setenv stdout serial1
	setenv stderr serial1
	setenv stdin serial1

*) The console can be switched to UART0 by any of the following commands:
	setenv stdout serial0
	setenv stderr serial0
	setenv stdin serial0
