Hi BIn, On 19 December 2014 at 00:19, Bin Meng <bmeng...@gmail.com> wrote: > Newer x86 Platform Controller Hub chipset starts to integrate NS16550 > compatible PCI UART devices. The board configuration file needs to > supply the PCI UART vendor ID and device ID via CONFIG_PCI_UART_DEV > if we want to use the PCI UART as the U-Boot serial console. > > Signed-off-by: Bin Meng <bmeng...@gmail.com> > --- > > drivers/serial/serial_x86.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/serial/serial_x86.c b/drivers/serial/serial_x86.c > index e81e035..7ddd596 100644 > --- a/drivers/serial/serial_x86.c > +++ b/drivers/serial/serial_x86.c > @@ -8,6 +8,17 @@ > #include <dm.h> > #include <ns16550.h> > #include <serial.h> > +#include <asm/pci.h> > +#include <errno.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +#ifdef CONFIG_PCI_UART > +static struct pci_device_id uart_supported[] = { > + CONFIG_PCI_UART_DEV, > + { } > +}; > +#endif > > static const struct udevice_id x86_serial_ids[] = { > { .compatible = "x86-uart" }, > @@ -17,6 +28,9 @@ static const struct udevice_id x86_serial_ids[] = { > static int x86_serial_ofdata_to_platdata(struct udevice *dev) > { > struct ns16550_platdata *plat = dev_get_platdata(dev); > +#ifdef CONFIG_PCI_UART > + pci_dev_t devbusfn; > +#endif > int ret; > > ret = ns16550_serial_ofdata_to_platdata(dev); > @@ -24,6 +38,22 @@ static int x86_serial_ofdata_to_platdata(struct udevice > *dev) > return ret; > plat->clock = 1843200; > > +#ifdef CONFIG_PCI_UART > + /* > + * Newer x86 Platform Controller Hub chipset starts to integrate > + * NS16550 compatible PCI UART devices. The board configuration > + * file needs to supply the PCI UART vendor ID and device ID via > + * CONFIG_PCI_UART_DEV if we want to use the PCI UART as the U-Boot > + * serial console. > + */ > + devbusfn = pci_early_find_devices(uart_supported, 0); > + if (devbusfn == -1) > + return -ENODEV;
I'm not sure why we need this. Is it because we don't know the device address of the UART? > + > + /* override the register base here for PCI UART */ > + plat->base = pci_read_bar32(gd->arch.hose, devbusfn, 0); > +#endif > + > return 0; > } > U_BOOT_DRIVER(serial_ns16550) = { > -- > 1.8.2.1 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot