Skip to content

Commit

Permalink
[POWERPC] Uartlite: Let the console be initialized earlier
Browse files Browse the repository at this point in the history
By configuring it earlier we get console output sooner which is helpful
for debugging when the kernel crashes before the serial drivers are
initialized.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
  • Loading branch information
Grant Likely authored and Josh Boyer committed Oct 3, 2007
1 parent 852e1ea commit fb4e6e6
Showing 1 changed file with 38 additions and 3 deletions.
41 changes: 38 additions & 3 deletions drivers/serial/uartlite.c
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,31 @@ static void ulite_console_write(struct console *co, const char *s,
spin_unlock_irqrestore(&port->lock, flags);
}

#if defined(CONFIG_OF)
static inline void __init ulite_console_of_find_device(int id)
{
struct device_node *np;
struct resource res;
const unsigned int *of_id;
int rc;

for_each_compatible_node(np, NULL, "xilinx,uartlite") {
of_id = of_get_property(np, "port-number", NULL);
if ((!of_id) || (*of_id != id))
continue;

rc = of_address_to_resource(np, 0, &res);
if (rc)
continue;

ulite_ports[id].mapbase = res.start;
return;
}
}
#else /* CONFIG_OF */
static inline void __init ulite_console_of_find_device(int id) { /* do nothing */ }
#endif /* CONFIG_OF */

static int __init ulite_console_setup(struct console *co, char *options)
{
struct uart_port *port;
Expand All @@ -386,10 +411,20 @@ static int __init ulite_console_setup(struct console *co, char *options)

port = &ulite_ports[co->index];

/* Check if it is an OF device */
if (!port->mapbase)
ulite_console_of_find_device(co->index);

/* Do we have a device now? */
if (!port->mapbase) {
pr_debug("console on ttyUL%i not present\n", co->index);
return -ENODEV;
}

/* not initialized yet? */
if (!port->membase) {
pr_debug("console on ttyUL%i not initialized\n", co->index);
return -ENODEV;
if (ulite_request_port(port))
return -ENODEV;
}

if (options)
Expand Down Expand Up @@ -461,7 +496,7 @@ static int __devinit ulite_assign(struct device *dev, int id, u32 base, int irq)
return -EINVAL;
}

if (ulite_ports[id].mapbase) {
if ((ulite_ports[id].mapbase) && (ulite_ports[id].mapbase != base)) {
dev_err(dev, "cannot assign to %s%i; it is already in use\n",
ULITE_NAME, id);
return -EBUSY;
Expand Down

0 comments on commit fb4e6e6

Please sign in to comment.