SERIAL DEVICE NAMING

    As of 2.6.10, serial devices on ia64 are named based on the
    order of ACPI and PCI enumeration.  The first device in the
    ACPI namespace (if any) becomes /dev/ttyS0, the second becomes
    /dev/ttyS1, etc., and PCI devices are named sequentially
    starting after the ACPI devices.

    Prior to 2.6.10, there were confusing exceptions to this:

	- Firmware on some machines (mostly from HP) provides an HCDP
	  table[1] that tells the kernel about devices that can be used
	  as a serial console.  If the user specified "console=ttyS0"
	  or the EFI ConOut path contained only UART devices, the
	  kernel registered the device described by the HCDP as
	  /dev/ttyS0.

	- If there was no HCDP, we assumed there were UARTs at the
	  legacy COM port addresses (I/O ports 0x3f8 and 0x2f8), so
	  the kernel registered those as /dev/ttyS0 and /dev/ttyS1.

    Any additional ACPI or PCI devices were registered sequentially
    after /dev/ttyS0 as they were discovered.

    With an HCDP, device names changed depending on EFI configuration
    and "console=" arguments.  Without an HCDP, device names didn't
    change, but we registered devices that might not really exist.

    For example, an HP rx1600 with a single built-in serial port
    (described in the ACPI namespace) plus an MP[2] (a PCI device) has
    these ports:

                                  pre-2.6.10      pre-2.6.10
                    MMIO         (EFI console    (EFI console
                   address        on builtin)     on MP port)    2.6.10
                  ==========      ==========      ==========     ======
      builtin     0xff5e0000        ttyS0           ttyS1         ttyS0
      MP UPS      0xf8031000        ttyS1           ttyS2         ttyS1
      MP Console  0xf8030000        ttyS2           ttyS0         ttyS2
      MP 2        0xf8030010        ttyS3           ttyS3         ttyS3
      MP 3        0xf8030038        ttyS4           ttyS4         ttyS4

CONSOLE SELECTION

    EFI knows what your console devices are, but it doesn't tell the
    kernel quite enough to actually locate them.  The DIG64 HCDP
    table[1] does tell the kernel where potential serial console
    devices are, but not all firmware supplies it.  Also, EFI supports
    multiple simultaneous consoles and doesn't tell the kernel which
    should be the "primary" one.

    So how do you tell Linux which console device to use?

	- If your firmware supplies the HCDP, it is simplest to
	  configure EFI with a single device (either a UART or a VGA
	  card) as the console.  Then you don't need to tell Linux
	  anything; the kernel will automatically use the EFI console.

	  (This works only in 2.6.6 or later; prior to that you had
	  to specify "console=ttyS0" to get a serial console.)

	- Without an HCDP, Linux defaults to a VGA console unless you
	  specify a "console=" argument.

    NOTE: Don't assume that a serial console device will be /dev/ttyS0.
    It might be ttyS1, ttyS2, etc.  Make sure you have the appropriate
    entries in /etc/inittab (for getty) and /etc/securetty (to allow
    root login).

EARLY SERIAL CONSOLE

    The kernel can't start using a serial console until it knows where
    the device lives.  Normally this happens when the driver enumerates
    all the serial devices, which can happen a minute or more after the
    kernel starts booting.

    2.6.10 and later kernels have an "early uart" driver that works
    very early in the boot process.  The kernel will automatically use
    this if the user supplies an argument like "console=uart,io,0x3f8",
    or if the EFI console path contains only a UART device and the
    firmware supplies an HCDP.

TROUBLESHOOTING SERIAL CONSOLE PROBLEMS

    No kernel output after elilo prints "Uncompressing Linux... done":

	- You specified "console=ttyS0" but Linux changed the device
	  to which ttyS0 refers.  Configure exactly one EFI console
	  device[3] and remove the "console=" option.

	- The EFI console path contains both a VGA device and a UART.
	  EFI and elilo use both, but Linux defaults to VGA.  Remove
	  the VGA device from the EFI console path[3].

	- Multiple UARTs selected as EFI console devices.  EFI and
	  elilo use all selected devices, but Linux uses only one.
	  Make sure only one UART is selected in the EFI console
	  path[3].

	- You're connected to an HP MP port[2] but have a non-MP UART
	  selected as EFI console device.  EFI uses the MP as a
	  console device even when it isn't explicitly selected.
	  Either move the console cable to the non-MP UART, or change
	  the EFI console path[3] to the MP UART.

    Long pause (60+ seconds) between "Uncompressing Linux... done" and
    start of kernel output:

	- No early console because you used "console=ttyS<n>".  Remove
	  the "console=" option if your firmware supplies an HCDP.

	- If you don't have an HCDP, the kernel doesn't know where
	  your console lives until the driver discovers serial
	  devices.  Use "console=uart, io,0x3f8" (or appropriate
	  address for your machine).

    Kernel and init script output works fine, but no "login:" prompt:

	- Add getty entry to /etc/inittab for console tty.  Look for
	  the "Adding console on ttyS<n>" message that tells you which
	  device is the console.

    "login:" prompt, but can't login as root:

	- Add entry to /etc/securetty for console tty.

    No ACPI serial devices found in 2.6.17 or later:

	- Turn on CONFIG_PNP and CONFIG_PNPACPI.  Prior to 2.6.17, ACPI
	  serial devices were discovered by 8250_acpi.  In 2.6.17,
	  8250_acpi was replaced by the combination of 8250_pnp and
	  CONFIG_PNPACPI.



[1] http://www.dig64.org/specifications/agreement 
    The table was originally defined as the "HCDP" for "Headless
    Console/Debug Port."  The current version is the "PCDP" for
    "Primary Console and Debug Port Devices."

[2] The HP MP (management processor) is a PCI device that provides
    several UARTs.  One of the UARTs is often used as a console; the
    EFI Boot Manager identifies it as "Acpi(HWP0002,700)/Pci(...)/Uart".
    The external connection is usually a 25-pin connector, and a
    special dongle converts that to three 9-pin connectors, one of
    which is labelled "Console."

[3] EFI console devices are configured using the EFI Boot Manager
    "Boot option maintenance" menu.  You may have to interrupt the
    boot sequence to use this menu, and you will have to reset the
    box after changing console configuration.
