[coreboot] Servo debug uart in Linux?

Duncan Laurie dlaurie at chromium.org
Thu Oct 6 20:08:51 CEST 2016

On Thu, Oct 6, 2016 at 10:56 AM, Trammell Hudson <hudson at trmm.net> wrote:

> Is it possible to use the Skylake Servo debug UART in Linux or Xen?
> It doesn't show up as a normal 16550 (setserial reports "uart type
> unknown"), which is making debugging the payload kernel a little
> frustrating.
> I've added lots of "outb $0x80" calls to trace the Xen hypervisor and
> have figured out that the Skylake doesn't work with the x2apic, the xsave
> instruction or the MCE handler, but would prefer a higher bandwidth way
> to report progress/errors.
The debug UART on Skylake is 32bit MMIO based, so it does not work with
most existing serial drivers.  It should work in recent Linux kernels and
come up as ttyS2, but you can also force it with earlyprintk using the
'mmio32' directive and the base address.

The device can be put into 16550/8-bit compatible mode, there is some code
to do this on broadwell at soc/intel/skylake/broadwell/romstage/uart.c but
on Skylake we left it in 32bit mode as putting it in compatible mode made
it unable to suspend properly.

I *think* for skylake you can set the device PchSerialIoIndexUart2 to
PchSerialIoLegacyUart (in devicetree.cb) and FSP will configure it for
16500 byte mode.  You will then need to update coreboot to use the uart in
8-bit mode instead of 32bit mode.

That still leaves the issue that it is mmio based and not IO based, so it
will still have a hard time in things like seabios.  However I think Xen
does support MMIO UART so it might work there...

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20161006/330ff2e9/attachment.html>

More information about the coreboot mailing list