[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2 21/33] xen/arm: Use device tree API in pl011 UART driver
On Wed, 2013-05-08 at 03:33 +0100, Julien Grall wrote: > @@ -227,32 +239,56 @@ static struct uart_driver __read_mostly pl011_driver = { > .tx_ready = pl011_tx_ready, > .putc = pl011_putc, > .getc = pl011_getc, > - .irq = pl011_irq > + .irq = pl011_irq, > + .dt_irq_get = pl011_dt_irq, > }; > > -/* TODO: Parse UART config from device-tree or command-line */ > - > -void __init pl011_init(int index, unsigned long register_base_address) > +/* TODO: Parse UART config from the command line */ > +static int __init pl011_uart_init(struct dt_device_node *dev, > + const void *data) > { > + const struct serial_arm_defaults *defaults = data; > struct pl011 *uart; > + int res; > > - if ( (index < 0) || (index > 1) ) > - return; > + if ( (defaults->index < 0) || (defaults->index > 1) ) > + return -EINVAL; > > - uart = &pl011_com[index]; > + uart = &pl011_com[defaults->index]; > > uart->clock_hz = 0x16e3600; > uart->baud = 38400; > uart->data_bits = 8; > uart->parity = PARITY_NONE; > uart->stop_bits = 1; > - uart->irq = 37; /* TODO Need to find this from devicetree */ > - uart->regs = (uint32_t *) register_base_address; > + uart->regs = (uint32_t *) defaults->register_base_address; Should this not come from struct dt_device_node? Perhaps the driver needs to be instantiating its own FIXMAP mapping instead of doing it in common code? In fact can we not get rid of the fixmap for the runtime (not early) console and use the ioremap stuff which Stefano just enabled with his vmap patches, or the early_ioremap stuff if necessary. That does then call into question the whole serial_arm_defaults thing. Perhaps index should just be the order in which they are registered (and at the moment it is effectively hardcoded to 0 anyway) > + > + res = dt_device_get_irq(dev, 0, &uart->irq); > + if ( res ) > + { > + early_printk("pl011: Unable to retrieve the IRQ\n"); > + return res; > + } > > /* Register with generic serial driver. */ > serial_register_uart(uart - pl011_com, &pl011_driver, uart); > + > + dt_device_set_used_by(dev, DT_USED_BY_XEN); > + > + return 0; > } Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |