From ca4d1c2522654f48a6b5fa8e6c6711ef740bf5ad Mon Sep 17 00:00:00 2001 From: Daniel Hellstrom Date: Tue, 4 Jan 2011 01:41:33 +0000 Subject: [PATCH] --- yaml --- r: 225720 b: refs/heads/master c: 9663eb21fcfeb1ed9afd73d14bbc4198796cfc7b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/sparc/kernel/prom_32.c | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index d5b1309c34cc..0d6a368bccd3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2791c1a4390085789e37347fc49f7d189fedae88 +refs/heads/master: 9663eb21fcfeb1ed9afd73d14bbc4198796cfc7b diff --git a/trunk/arch/sparc/kernel/prom_32.c b/trunk/arch/sparc/kernel/prom_32.c index 0a37e8cfd160..05fb25330583 100644 --- a/trunk/arch/sparc/kernel/prom_32.c +++ b/trunk/arch/sparc/kernel/prom_32.c @@ -136,18 +136,29 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) /* "name:vendor:device@irq,addrlo" */ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) { - struct amba_prom_registers *regs; unsigned int *intr; - unsigned int *device, *vendor; + struct amba_prom_registers *regs; + unsigned int *intr, *device, *vendor, reg0; struct property *prop; + int interrupt = 0; + /* In order to get a unique ID in the device tree (multiple AMBA devices + * may have the same name) the node number is printed + */ prop = of_find_property(dp, "reg", NULL); - if (!prop) - return; - regs = prop->value; + if (!prop) { + reg0 = (unsigned int)dp->phandle; + } else { + regs = prop->value; + reg0 = regs->phys_addr; + } + + /* Not all cores have Interrupt */ prop = of_find_property(dp, "interrupts", NULL); if (!prop) - return; - intr = prop->value; + intr = &interrupt; /* IRQ0 does not exist */ + else + intr = prop->value; + prop = of_find_property(dp, "vendor", NULL); if (!prop) return; @@ -159,7 +170,7 @@ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) sprintf(tmp_buf, "%s:%d:%d@%x,%x", dp->name, *vendor, *device, - *intr, regs->phys_addr); + *intr, reg0); } static void __init __build_path_component(struct device_node *dp, char *tmp_buf)