[coreboot] [Solved][Mohon Peak] Console output on external UARTs behind PCIe
Patrick Agrain
patrick.agrain at alcatel-lucent.com
Wed Mar 18 13:49:41 CET 2015
Hello,
System is working again.
Following "patches" have to be applied in coreboot to get an external
Startech UART board working on a Mohon Peak CRB:
- in ./src/device/pci_early.c:pci_early_bridge_init(): remove (for the
moment) the udelay(10), otherwise the board will freeze after POST code
40h -> 47h -> A9h. IMHO, the udelay() has to be fixed for that kind of
processor (, chipset ?).
- in ./src/device/pci_early.c:pci_early_bridge_init(): add 'if (ret)'
condition on the last 'pci_bridge_set_secondary(p2p_bridge, 0);',
otherwise the board will freeze at POST code 80h (whatever the value of
'secondary').
- in ./src/drivers/uart/oxpcie_early.c:global and oxford_remap(): modify
the uart1_base shift from 0x2000 to 0x1200. Tested. There must a typo in
the datasheet of the OxPCI952. See also the memory dump below.
Note: I don't know how to implement these modification on the source
tree, because I have no other board to test potential regression. Put
them with a #if CONFIG_BOARD_INTEL_MOHONPEAK ?
- in 'make menuconfig':
-- set MMIO_BASE_WINDOWS with the value returned by an 'lspci' command.
See an example below. This is system and slot-dependant.
-- set UART_FOR_CONSOLE at '0' for the first COM port and '1' for the
second COM port.
Hope it helps.
Regards,
Patrick Agrain
PS: Kyösti, you told me about a possible patch for Seabios. Had you the
opportunity to find it ?
Le 17/03/2015 08:23, Patrick Agrain a écrit :
> Hello,
>
> Yesterday morning, I tried to switch back with my modification, as suggested below.
>
> a) put secondary at 15: OK.
> b) remove if(ret) condition: OK.
>
> Then I tried to have a closer look at the second UART on the Startech board. Set the UART console index to 1
> and reboot the board.
>
> From that time the board always blocks at POST code 80h. I cannot figure out what I've done so that this board does
> not boot anymore when enabling the OXPCIe MEM serial port (it's OK with the legacy IO serial port)... :-(
> I even pulled the source code from github to the latest available code...
> To be followed.
>
> Concerning c), the base address of the second UART:
> From a datasheet point of view, I agree with the default code: the registers of the second UART are given to be located
> at base+2000h. But, if I dump the memory content, there is nothing at 2000h, but it seems to be be some data at 1200h:
>
> [root at mohon_peak ~]# pcidump -v -b 1 -d 0 -f 0 -r 0 -x 2100
>
> Detected Oxford Semiconductor Ltd OXPCIe952 Dual 16C950 UART
> 0000:01:00.0 vendor=1415 device=c158 class=0700 irq=10 (pin 1)
> BAR[0] PCI memory @0xdf600000, Useful size is 16384.
> 0000 : 00 02 00 07 02 00 00 00 00 00 00 00 ff ff 00 00 : ................
> 0010 : 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 : ................
> <...>
> 0ff0 : 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 : ................
> 1000 : fc 05 c1 13 0b 60 30 02 fc 05 c1 13 0b 60 30 02 : .....`0......`0.
> 1010 : fc 05 c1 13 0b 60 30 02 fc 05 c1 13 0b 60 30 02 : .....`0......`0.
> 1020 : fc 05 c1 13 0b 60 30 02 fc 05 c1 13 0b 60 30 02 : .....`0......`0.
> <...>
> 11f0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
> 1200 : 78 00 01 00 00 60 00 00 78 00 01 00 00 60 00 00 : x....`..x....`..
> 1210 : 78 00 01 00 00 60 00 00 78 00 01 00 00 60 00 00 : x....`..x....`..
> 1220 : 78 00 01 00 00 60 00 00 78 00 01 00 00 60 00 00 : x....`..x....`..
> <...>
> 1ff0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
> 2000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
> 2010 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
> 2020 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
> <...>
> And this is more or less confirmed by the base address in:
>
> [root at mohon_peak ~]# cat /proc/tty/driver/serial
> serinfo:1.0 driver revision:
> 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
> 1: uart:16550A port:000002F8 irq:3 tx:59 rx:0 RTS|DTR
> 2: uart:unknown port:000003E8 irq:11
> 3: uart:unknown port:000002E8 irq:13
> 4: uart:16C950/954 mmio:0xDF601000 irq:16 tx:3156 rx:0 RTS|CTS|DTR|DSR
> 5: uart:16C950/954 mmio:0xDF601200 irq:16 tx:0 rx:0
> 6: uart:unknown port:00000000 irq:0
> 7: uart:unknown port:00000000 irq:0
> [root at mohon_peak ~]#
>
> Note: I increased to 8 the CONFIG_SERIAL_8250_RUNTIME_UARTS in the kernel.
>
> Now, I will first try to get (again !) a working version of coreboot with the OXPCIe board.
>
> Regards,
> Patrick
>
> On Fri, 2015-03-13 at 16:47 +0100, Patrick Agrain wrote:
> >/ Hello,
> />/
> />/ One step further !!
> />/
> />/ I succeed to get it working.
> />/
> />/ Several modification has to be made. I will try (next week) to get them
> />/ in a "readable form".
> />/ - in ./src/device/pci_early.c:pci_early_bridge_init() :
> />/ -- secondary = 1 for Mohon Peak.
> /
> The value of 'secondary' should not matter here, it does not need to
> match with the value you later see in lspci.
>
> >/ -- remove udelay() in PCI_VENDOR_ID reading (that's the big point). I
> />/ will try to have a look at it. Probably something very specific to this
> />/ chipset.
> /
> No clue about that.
>
> >/ -- Put 'if (ret)' condition on the last
> />/ 'pci_bridge_set_secondary(p2p_bridge, 0);'.
> /
> Don't, as you would leave _some_ bridge claiming the bus number
> 'secondary', and PCI tree enumeration later in ramstage may try to
> assign the same number to another bridge. If you find this is really
> required, you would need to use a large value of 'secondary' to avoid
> such a collision.
>
> >/ - in ./src/drivers/uart/oxpcie_early.c:pci_early_device_probe() :
> />/ -- uart1base is at CONFIG_EARLY_PCI_MMIO_BASE + 0x1200 for the Startech
> />/ board I have.
> />/
> /
> What PCI ID did your card report again? Different IDs will use different
> resource mapping, I'll need to compare against the datasheet.
>
> >/ BTW, I also included the patch covered by
> />/ http://review.coreboot.org/#/c/8660/. Compiler does not complain anymore
> />/ (and 'in fine' it works).
> />/
> /
> I have submitted iteration #2 of this change.
>
> >/ Logs are now available from 'coreboot-<...> ramstage starting'.
> />/
> /
> Let's try to make it work from the ".. romstage starting" message.
>
> >/ Thanks for your support.
> />/ Regards,
> />/ Patrick Agrain
> />/
> /
> Kyösti
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20150318/9b5b1033/attachment.html>
More information about the coreboot
mailing list