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 CONFIG_SYS_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

MPC5xxx Specific
================

Up to two PSCs can be used as console.

Support for hardware handshake has not been implemented yet.

*) The first (default) console port is defined by:
	#define CONFIG_PSC_CONSOLE <PSC number>

*) The second (alternative) console port is defined by:
	#define CONFIG_PSC_CONSOLE2 <PSC number>

*) Commands to switch to the second console:
	setenv stdout serial1
	setenv stderr serial1
	setenv stdin serial1

*) Commands to switch to the first console:
	setenv stdout serial0
	setenv stderr serial0
	setenv stdin serial0

*) If a file descriptor is set to "serial" then the
   current serial device will be used.
