Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17216
b: refs/heads/master
c: b580d46
h: refs/heads/master
v: v3
  • Loading branch information
Kumar Gala authored and Paul Mackerras committed Jan 9, 2006
1 parent 60bd883 commit 41751ba
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d0e132b536b6c8044991932d0c160676c46c98e5
refs/heads/master: b580d46ce833f6bdc6a5602f4f0efb1d9c488ed6
62 changes: 52 additions & 10 deletions trunk/arch/powerpc/kernel/legacy_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ static int legacy_serial_console = -1;

static int __init add_legacy_port(struct device_node *np, int want_index,
int iotype, phys_addr_t base,
phys_addr_t taddr, unsigned long irq)
phys_addr_t taddr, unsigned long irq,
unsigned int flags)
{
u32 *clk, *spd, clock = BASE_BAUD * 16;
int index;
Expand Down Expand Up @@ -90,7 +91,7 @@ static int __init add_legacy_port(struct device_node *np, int want_index,
legacy_serial_ports[index].iotype = iotype;
legacy_serial_ports[index].uartclk = clock;
legacy_serial_ports[index].irq = irq;
legacy_serial_ports[index].flags = ASYNC_BOOT_AUTOCONF;
legacy_serial_ports[index].flags = flags;
legacy_serial_infos[index].taddr = taddr;
legacy_serial_infos[index].np = of_node_get(np);
legacy_serial_infos[index].clock = clock;
Expand All @@ -107,6 +108,32 @@ static int __init add_legacy_port(struct device_node *np, int want_index,
return index;
}

static int __init add_legacy_soc_port(struct device_node *np,
struct device_node *soc_dev)
{
phys_addr_t addr;
u32 *addrp;
unsigned int flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;

/* We only support ports that have a clock frequency properly
* encoded in the device-tree.
*/
if (get_property(np, "clock-frequency", NULL) == NULL)
return -1;

/* Get the address */
addrp = of_get_address(soc_dev, 0, NULL, NULL);
if (addrp == NULL)
return -1;

addr = of_translate_address(soc_dev, addrp);

/* Add port, irq will be dealt with later. We passed a translated
* IO port value. It will be fixed up later along with the irq
*/
return add_legacy_port(np, -1, UPIO_MEM, addr, addr, NO_IRQ, flags);
}

static int __init add_legacy_isa_port(struct device_node *np,
struct device_node *isa_bridge)
{
Expand Down Expand Up @@ -137,7 +164,7 @@ static int __init add_legacy_isa_port(struct device_node *np,
taddr = of_translate_address(np, reg);

/* Add port, irq will be dealt with later */
return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ);
return add_legacy_port(np, index, UPIO_PORT, reg[1], taddr, NO_IRQ, UPF_BOOT_AUTOCONF);

}

Expand Down Expand Up @@ -204,7 +231,7 @@ static int __init add_legacy_pci_port(struct device_node *np,
/* Add port, irq will be dealt with later. We passed a translated
* IO port value. It will be fixed up later along with the irq
*/
return add_legacy_port(np, index, iotype, base, addr, NO_IRQ);
return add_legacy_port(np, index, iotype, base, addr, NO_IRQ, UPF_BOOT_AUTOCONF);
}

/*
Expand All @@ -218,21 +245,31 @@ static int __init add_legacy_pci_port(struct device_node *np,
*/
void __init find_legacy_serial_ports(void)
{
struct device_node *np, *stdout;
struct device_node *np, *stdout = NULL;
char *path;
int index;

DBG(" -> find_legacy_serial_port()\n");

/* Now find out if one of these is out firmware console */
path = (char *)get_property(of_chosen, "linux,stdout-path", NULL);
if (path == NULL) {
if (path != NULL) {
stdout = of_find_node_by_path(path);
if (stdout)
DBG("stdout is %s\n", stdout->full_name);
} else {
DBG(" no linux,stdout-path !\n");
return;
}
stdout = of_find_node_by_path(path);
if (stdout) {
DBG("stdout is %s\n", stdout->full_name);

/* First fill our array with SOC ports */
for (np = NULL; (np = of_find_compatible_node(np, "serial", "ns16550")) != NULL;) {
struct device_node *soc = of_get_parent(np);
if (soc && !strcmp(soc->type, "soc")) {
index = add_legacy_soc_port(np, np);
if (index >= 0 && np == stdout)
legacy_serial_console = index;
}
of_node_put(soc);
}

/* First fill our array with ISA ports */
Expand Down Expand Up @@ -437,6 +474,11 @@ static int __init check_legacy_serial_console(void)
DBG(" of_chosen is NULL !\n");
return -ENODEV;
}

if (legacy_serial_console < 0) {
DBG(" legacy_serial_console not found !\n");
return -ENODEV;
}
/* We are getting a weird phandle from OF ... */
/* ... So use the full path instead */
name = (char *)get_property(of_chosen, "linux,stdout-path", NULL);
Expand Down

0 comments on commit 41751ba

Please sign in to comment.