<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Oct 6, 2016 at 11:08 AM, Duncan Laurie <span dir="ltr"><<a href="mailto:dlaurie@chromium.org" target="_blank">dlaurie@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><div>On Thu, Oct 6, 2016 at 10:56 AM, Trammell Hudson <span dir="ltr"><<a href="mailto:hudson@trmm.net" target="_blank">hudson@trmm.net</a>></span> wrote:<br></div></span><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Is it possible to use the Skylake Servo debug UART in Linux or Xen?<br>
It doesn't show up as a normal 16550 (setserial reports "uart type<br>
unknown"), which is making debugging the payload kernel a little<br>
frustrating.<br>
<br>
I've added lots of "outb $0x80" calls to trace the Xen hypervisor and<br>
have figured out that the Skylake doesn't work with the x2apic, the xsave<br>
instruction or the MCE handler, but would prefer a higher bandwidth way<br>
to report progress/errors.<br>
<span class="m_-5732418297074323455gmail-m_-6301540126214150408HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div></span><div>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.<div><br></div></div></div></div></div></blockquote><div><br></div><div><br></div><div>I may be mis-remembering and this might come up as ttyS0 in linux for skylake.  (it is ttyS2 on apollolake...)  Or just use a custom command line like console=uart,mmio32,0xd1134000,115200n8</div><div><br></div><div>-duncan</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div></div><div>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/ro<wbr>mstage/uart.c but on Skylake we left it in 32bit mode as putting it in compatible mode made it unable to suspend properly.</div><div><br></div><div>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.</div><div><br></div><div>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...</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-duncan</div></font></span></div><div><br></div></div></div></div>
</blockquote></div><br></div></div>