Commit 20a9da34 authored by David S. Miller's avatar David S. Miller

Merge branch 'sparc-OF-name-and-device_type-rework'

Rob Herring says:

====================
sparc: OF name and device_type rework

All other platforms have been converted to only store the local node name
in device_node.full_name except Sparc. Sparc was complicated by having a
path_component_name in addition to full_name and name. By switching
full_name to just the local node name, path_component_name becomes
redundant and can be removed.

The rest of the series converts the sparc code to use printf specifiers
and helper functions to access node name and device_type instead of
directly accessing device_node full_name, name and type pointers.

I've tested this series under qemu.

v2:
- Add patch using of_node_name_eq for openpromfs
- Add patch converting some resource names to full_name
- Also drop full path on !Sparc PDT node name construction
- Add a few missed %pOFn conversions
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 25e19c1f 86ef771e
...@@ -528,9 +528,9 @@ static int sun_pci_fd_test_drive(unsigned long port, int drive) ...@@ -528,9 +528,9 @@ static int sun_pci_fd_test_drive(unsigned long port, int drive)
static int __init ebus_fdthree_p(struct device_node *dp) static int __init ebus_fdthree_p(struct device_node *dp)
{ {
if (!strcmp(dp->name, "fdthree")) if (of_node_name_eq(dp, "fdthree"))
return 1; return 1;
if (!strcmp(dp->name, "floppy")) { if (of_node_name_eq(dp, "floppy")) {
const char *compat; const char *compat;
compat = of_get_property(dp, "compatible", NULL); compat = of_get_property(dp, "compatible", NULL);
...@@ -555,7 +555,7 @@ static unsigned long __init sun_floppy_init(void) ...@@ -555,7 +555,7 @@ static unsigned long __init sun_floppy_init(void)
op = NULL; op = NULL;
for_each_node_by_name(dp, "SUNW,fdtwo") { for_each_node_by_name(dp, "SUNW,fdtwo") {
if (strcmp(dp->parent->name, "sbus")) if (!of_node_name_eq(dp->parent, "sbus"))
continue; continue;
op = of_find_device_by_node(dp); op = of_find_device_by_node(dp);
if (op) if (op)
...@@ -656,7 +656,7 @@ static unsigned long __init sun_floppy_init(void) ...@@ -656,7 +656,7 @@ static unsigned long __init sun_floppy_init(void)
*/ */
config = 0; config = 0;
for (dp = ebus_dp->child; dp; dp = dp->sibling) { for (dp = ebus_dp->child; dp; dp = dp->sibling) {
if (!strcmp(dp->name, "ecpp")) { if (of_node_name_eq(dp, "ecpp")) {
struct platform_device *ecpp_op; struct platform_device *ecpp_op;
ecpp_op = of_find_device_by_node(dp); ecpp_op = of_find_device_by_node(dp);
......
...@@ -225,7 +225,6 @@ void leon_update_virq_handling(unsigned int virq, ...@@ -225,7 +225,6 @@ void leon_update_virq_handling(unsigned int virq,
irq_flow_handler_t flow_handler, irq_flow_handler_t flow_handler,
const char *name, int do_ack); const char *name, int do_ack);
void leon_init_timers(void); void leon_init_timers(void);
void leon_trans_init(struct device_node *dp);
void leon_node_init(struct device_node *dp, struct device_node ***nextp); void leon_node_init(struct device_node *dp, struct device_node ***nextp);
void init_leon(void); void init_leon(void);
void poke_leonsparc(void); void poke_leonsparc(void);
......
...@@ -117,7 +117,7 @@ static int ecpp_probe(struct platform_device *op) ...@@ -117,7 +117,7 @@ static int ecpp_probe(struct platform_device *op)
int slot, err; int slot, err;
parent = op->dev.of_node->parent; parent = op->dev.of_node->parent;
if (!strcmp(parent->name, "dma")) { if (of_node_name_eq(parent, "dma")) {
p = parport_pc_probe_port(base, base + 0x400, p = parport_pc_probe_port(base, base + 0x400,
op->archdata.irqs[0], PARPORT_DMA_NOFIFO, op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
op->dev.parent->parent, 0); op->dev.parent->parent, 0);
......
...@@ -108,23 +108,22 @@ static int auxio_probe(struct platform_device *dev) ...@@ -108,23 +108,22 @@ static int auxio_probe(struct platform_device *dev)
struct device_node *dp = dev->dev.of_node; struct device_node *dp = dev->dev.of_node;
unsigned long size; unsigned long size;
if (!strcmp(dp->parent->name, "ebus")) { if (of_node_name_eq(dp->parent, "ebus")) {
auxio_devtype = AUXIO_TYPE_EBUS; auxio_devtype = AUXIO_TYPE_EBUS;
size = sizeof(u32); size = sizeof(u32);
} else if (!strcmp(dp->parent->name, "sbus")) { } else if (of_node_name_eq(dp->parent, "sbus")) {
auxio_devtype = AUXIO_TYPE_SBUS; auxio_devtype = AUXIO_TYPE_SBUS;
size = 1; size = 1;
} else { } else {
printk("auxio: Unknown parent bus type [%s]\n", printk("auxio: Unknown parent bus type [%pOFn]\n",
dp->parent->name); dp->parent);
return -ENODEV; return -ENODEV;
} }
auxio_register = of_ioremap(&dev->resource[0], 0, size, "auxio"); auxio_register = of_ioremap(&dev->resource[0], 0, size, "auxio");
if (!auxio_register) if (!auxio_register)
return -ENODEV; return -ENODEV;
printk(KERN_INFO "AUXIO: Found device at %s\n", printk(KERN_INFO "AUXIO: Found device at %pOF\n", dp);
dp->full_name);
if (auxio_devtype == AUXIO_TYPE_EBUS) if (auxio_devtype == AUXIO_TYPE_EBUS)
auxio_set_led(AUXIO_LED_ON); auxio_set_led(AUXIO_LED_ON);
......
...@@ -168,7 +168,7 @@ static int fhc_probe(struct platform_device *op) ...@@ -168,7 +168,7 @@ static int fhc_probe(struct platform_device *op)
goto out; goto out;
} }
if (!strcmp(op->dev.of_node->parent->name, "central")) if (of_node_name_eq(op->dev.of_node->parent, "central"))
p->central = true; p->central = true;
p->pregs = of_ioremap(&op->resource[0], 0, p->pregs = of_ioremap(&op->resource[0], 0,
......
...@@ -464,8 +464,8 @@ static int jbusmc_probe(struct platform_device *op) ...@@ -464,8 +464,8 @@ static int jbusmc_probe(struct platform_device *op)
mc_list_add(&p->list); mc_list_add(&p->list);
printk(KERN_INFO PFX "UltraSPARC-IIIi memory controller at %s\n", printk(KERN_INFO PFX "UltraSPARC-IIIi memory controller at %pOF\n",
op->dev.of_node->full_name); op->dev.of_node);
dev_set_drvdata(&op->dev, p); dev_set_drvdata(&op->dev, p);
...@@ -747,8 +747,8 @@ static int chmc_probe(struct platform_device *op) ...@@ -747,8 +747,8 @@ static int chmc_probe(struct platform_device *op)
mc_list_add(&p->list); mc_list_add(&p->list);
printk(KERN_INFO PFX "UltraSPARC-III memory controller at %s [%s]\n", printk(KERN_INFO PFX "UltraSPARC-III memory controller at %pOF [%s]\n",
dp->full_name, dp,
(p->layout_size ? "ACTIVE" : "INACTIVE")); (p->layout_size ? "ACTIVE" : "INACTIVE"));
dev_set_drvdata(&op->dev, p); dev_set_drvdata(&op->dev, p);
......
...@@ -302,7 +302,7 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len, ...@@ -302,7 +302,7 @@ static void *sbus_alloc_coherent(struct device *dev, size_t len,
if (sbus_map_dma_area(dev, dma_addrp, va, res->start, len_total) != 0) if (sbus_map_dma_area(dev, dma_addrp, va, res->start, len_total) != 0)
goto err_noiommu; goto err_noiommu;
res->name = op->dev.of_node->name; res->name = op->dev.of_node->full_name;
return (void *)(unsigned long)res->start; return (void *)(unsigned long)res->start;
......
...@@ -915,7 +915,7 @@ static void map_prom_timers(void) ...@@ -915,7 +915,7 @@ static void map_prom_timers(void)
dp = of_find_node_by_path("/"); dp = of_find_node_by_path("/");
dp = dp->child; dp = dp->child;
while (dp) { while (dp) {
if (!strcmp(dp->name, "counter-timer")) if (of_node_name_eq(dp, "counter-timer"))
break; break;
dp = dp->sibling; dp = dp->sibling;
} }
......
...@@ -484,20 +484,6 @@ static void leon_load_profile_irq(int cpu, unsigned int limit) ...@@ -484,20 +484,6 @@ static void leon_load_profile_irq(int cpu, unsigned int limit)
{ {
} }
void __init leon_trans_init(struct device_node *dp)
{
if (strcmp(dp->type, "cpu") == 0 && strcmp(dp->name, "<NULL>") == 0) {
struct property *p;
p = of_find_property(dp, "mid", (void *)0);
if (p) {
int mid;
dp->name = prom_early_alloc(5 + 1);
memcpy(&mid, p->value, p->length);
sprintf((char *)dp->name, "cpu%.2d", mid);
}
}
}
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
void leon_clear_profile_irq(int cpu) void leon_clear_profile_irq(int cpu)
{ {
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
static int of_bus_pci_match(struct device_node *np) static int of_bus_pci_match(struct device_node *np)
{ {
if (!strcmp(np->type, "pci") || !strcmp(np->type, "pciex")) { if (of_node_is_type(np, "pci") || of_node_is_type(np, "pciex")) {
/* Do not do PCI specific frobbing if the /* Do not do PCI specific frobbing if the
* PCI bridge lacks a ranges property. We * PCI bridge lacks a ranges property. We
* want to pass it through up to the next * want to pass it through up to the next
...@@ -107,7 +107,7 @@ static unsigned long of_bus_sbus_get_flags(const u32 *addr, unsigned long flags) ...@@ -107,7 +107,7 @@ static unsigned long of_bus_sbus_get_flags(const u32 *addr, unsigned long flags)
static int of_bus_ambapp_match(struct device_node *np) static int of_bus_ambapp_match(struct device_node *np)
{ {
return !strcmp(np->type, "ambapp"); return of_node_is_type(np, "ambapp");
} }
static void of_bus_ambapp_count_cells(struct device_node *child, static void of_bus_ambapp_count_cells(struct device_node *child,
...@@ -232,10 +232,10 @@ static int __init use_1to1_mapping(struct device_node *pp) ...@@ -232,10 +232,10 @@ static int __init use_1to1_mapping(struct device_node *pp)
* But, we should still pass the translation work up * But, we should still pass the translation work up
* to the SBUS itself. * to the SBUS itself.
*/ */
if (!strcmp(pp->name, "dma") || if (of_node_name_eq(pp, "dma") ||
!strcmp(pp->name, "espdma") || of_node_name_eq(pp, "espdma") ||
!strcmp(pp->name, "ledma") || of_node_name_eq(pp, "ledma") ||
!strcmp(pp->name, "lebuffer")) of_node_name_eq(pp, "lebuffer"))
return 0; return 0;
return 1; return 1;
...@@ -324,8 +324,8 @@ static void __init build_device_resources(struct platform_device *op, ...@@ -324,8 +324,8 @@ static void __init build_device_resources(struct platform_device *op,
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
if (of_resource_verbose) if (of_resource_verbose)
printk("%s reg[%d] -> %llx\n", printk("%pOF reg[%d] -> %llx\n",
op->dev.of_node->full_name, index, op->dev.of_node, index,
result); result);
if (result != OF_BAD_ADDR) { if (result != OF_BAD_ADDR) {
...@@ -333,7 +333,7 @@ static void __init build_device_resources(struct platform_device *op, ...@@ -333,7 +333,7 @@ static void __init build_device_resources(struct platform_device *op,
r->end = result + size - 1; r->end = result + size - 1;
r->flags = flags | ((result >> 32ULL) & 0xffUL); r->flags = flags | ((result >> 32ULL) & 0xffUL);
} }
r->name = op->dev.of_node->name; r->name = op->dev.of_node->full_name;
} }
} }
...@@ -386,8 +386,7 @@ static struct platform_device * __init scan_one_device(struct device_node *dp, ...@@ -386,8 +386,7 @@ static struct platform_device * __init scan_one_device(struct device_node *dp,
op->dev.dma_mask = &op->dev.coherent_dma_mask; op->dev.dma_mask = &op->dev.coherent_dma_mask;
if (of_device_register(op)) { if (of_device_register(op)) {
printk("%s: Could not register of device.\n", printk("%pOF: Could not register of device.\n", dp);
dp->full_name);
kfree(op); kfree(op);
op = NULL; op = NULL;
} }
......
...@@ -46,7 +46,7 @@ EXPORT_SYMBOL(of_iounmap); ...@@ -46,7 +46,7 @@ EXPORT_SYMBOL(of_iounmap);
static int of_bus_pci_match(struct device_node *np) static int of_bus_pci_match(struct device_node *np)
{ {
if (!strcmp(np->name, "pci")) { if (of_node_name_eq(np, "pci")) {
const char *model = of_get_property(np, "model", NULL); const char *model = of_get_property(np, "model", NULL);
if (model && !strcmp(model, "SUNW,simba")) if (model && !strcmp(model, "SUNW,simba"))
...@@ -77,7 +77,7 @@ static int of_bus_simba_match(struct device_node *np) ...@@ -77,7 +77,7 @@ static int of_bus_simba_match(struct device_node *np)
/* Treat PCI busses lacking ranges property just like /* Treat PCI busses lacking ranges property just like
* simba. * simba.
*/ */
if (!strcmp(np->name, "pci")) { if (of_node_name_eq(np, "pci")) {
if (!of_find_property(np, "ranges", NULL)) if (!of_find_property(np, "ranges", NULL))
return 1; return 1;
} }
...@@ -170,8 +170,8 @@ static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags) ...@@ -170,8 +170,8 @@ static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags)
*/ */
static int of_bus_fhc_match(struct device_node *np) static int of_bus_fhc_match(struct device_node *np)
{ {
return !strcmp(np->name, "fhc") || return of_node_name_eq(np, "fhc") ||
!strcmp(np->name, "central"); of_node_name_eq(np, "central");
} }
#define of_bus_fhc_count_cells of_bus_sbus_count_cells #define of_bus_fhc_count_cells of_bus_sbus_count_cells
...@@ -295,17 +295,17 @@ static int __init use_1to1_mapping(struct device_node *pp) ...@@ -295,17 +295,17 @@ static int __init use_1to1_mapping(struct device_node *pp)
* But, we should still pass the translation work up * But, we should still pass the translation work up
* to the SBUS itself. * to the SBUS itself.
*/ */
if (!strcmp(pp->name, "dma") || if (of_node_name_eq(pp, "dma") ||
!strcmp(pp->name, "espdma") || of_node_name_eq(pp, "espdma") ||
!strcmp(pp->name, "ledma") || of_node_name_eq(pp, "ledma") ||
!strcmp(pp->name, "lebuffer")) of_node_name_eq(pp, "lebuffer"))
return 0; return 0;
/* Similarly for all PCI bridges, if we get this far /* Similarly for all PCI bridges, if we get this far
* it lacks a ranges property, and this will include * it lacks a ranges property, and this will include
* cases like Simba. * cases like Simba.
*/ */
if (!strcmp(pp->name, "pci")) if (of_node_name_eq(pp, "pci"))
return 0; return 0;
return 1; return 1;
...@@ -341,9 +341,9 @@ static void __init build_device_resources(struct platform_device *op, ...@@ -341,9 +341,9 @@ static void __init build_device_resources(struct platform_device *op,
/* Prevent overrunning the op->resources[] array. */ /* Prevent overrunning the op->resources[] array. */
if (num_reg > PROMREG_MAX) { if (num_reg > PROMREG_MAX) {
printk(KERN_WARNING "%s: Too many regs (%d), " printk(KERN_WARNING "%pOF: Too many regs (%d), "
"limiting to %d.\n", "limiting to %d.\n",
op->dev.of_node->full_name, num_reg, PROMREG_MAX); op->dev.of_node, num_reg, PROMREG_MAX);
num_reg = PROMREG_MAX; num_reg = PROMREG_MAX;
} }
...@@ -401,8 +401,8 @@ static void __init build_device_resources(struct platform_device *op, ...@@ -401,8 +401,8 @@ static void __init build_device_resources(struct platform_device *op,
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
if (of_resource_verbose) if (of_resource_verbose)
printk("%s reg[%d] -> %llx\n", printk("%pOF reg[%d] -> %llx\n",
op->dev.of_node->full_name, index, op->dev.of_node, index,
result); result);
if (result != OF_BAD_ADDR) { if (result != OF_BAD_ADDR) {
...@@ -413,7 +413,7 @@ static void __init build_device_resources(struct platform_device *op, ...@@ -413,7 +413,7 @@ static void __init build_device_resources(struct platform_device *op,
r->end = result + size - 1; r->end = result + size - 1;
r->flags = flags; r->flags = flags;
} }
r->name = op->dev.of_node->name; r->name = op->dev.of_node->full_name;
} }
} }
...@@ -548,8 +548,8 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, ...@@ -548,8 +548,8 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
dp->irq_trans->data); dp->irq_trans->data);
if (of_irq_verbose) if (of_irq_verbose)
printk("%s: direct translate %x --> %x\n", printk("%pOF: direct translate %x --> %x\n",
dp->full_name, orig_irq, irq); dp, orig_irq, irq);
goto out; goto out;
} }
...@@ -579,10 +579,9 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, ...@@ -579,10 +579,9 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
&irq); &irq);
if (of_irq_verbose) if (of_irq_verbose)
printk("%s: Apply [%s:%x] imap --> [%s:%x]\n", printk("%pOF: Apply [%pOF:%x] imap --> [%pOF:%x]\n",
op->dev.of_node->full_name, op->dev.of_node,
pp->full_name, this_orig_irq, pp, this_orig_irq, iret, irq);
of_node_full_name(iret), irq);
if (!iret) if (!iret)
break; break;
...@@ -592,15 +591,15 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, ...@@ -592,15 +591,15 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
break; break;
} }
} else { } else {
if (!strcmp(pp->name, "pci")) { if (of_node_name_eq(pp, "pci")) {
unsigned int this_orig_irq = irq; unsigned int this_orig_irq = irq;
irq = pci_irq_swizzle(dp, pp, irq); irq = pci_irq_swizzle(dp, pp, irq);
if (of_irq_verbose) if (of_irq_verbose)
printk("%s: PCI swizzle [%s] " printk("%pOF: PCI swizzle [%pOF] "
"%x --> %x\n", "%x --> %x\n",
op->dev.of_node->full_name, op->dev.of_node,
pp->full_name, this_orig_irq, pp, this_orig_irq,
irq); irq);
} }
...@@ -619,8 +618,8 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, ...@@ -619,8 +618,8 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
irq = ip->irq_trans->irq_build(op->dev.of_node, irq, irq = ip->irq_trans->irq_build(op->dev.of_node, irq,
ip->irq_trans->data); ip->irq_trans->data);
if (of_irq_verbose) if (of_irq_verbose)
printk("%s: Apply IRQ trans [%s] %x --> %x\n", printk("%pOF: Apply IRQ trans [%pOF] %x --> %x\n",
op->dev.of_node->full_name, ip->full_name, orig_irq, irq); op->dev.of_node, ip, orig_irq, irq);
out: out:
nid = of_node_to_nid(dp); nid = of_node_to_nid(dp);
...@@ -656,9 +655,9 @@ static struct platform_device * __init scan_one_device(struct device_node *dp, ...@@ -656,9 +655,9 @@ static struct platform_device * __init scan_one_device(struct device_node *dp,
/* Prevent overrunning the op->irqs[] array. */ /* Prevent overrunning the op->irqs[] array. */
if (op->archdata.num_irqs > PROMINTR_MAX) { if (op->archdata.num_irqs > PROMINTR_MAX) {
printk(KERN_WARNING "%s: Too many irqs (%d), " printk(KERN_WARNING "%pOF: Too many irqs (%d), "
"limiting to %d.\n", "limiting to %d.\n",
dp->full_name, op->archdata.num_irqs, PROMINTR_MAX); dp, op->archdata.num_irqs, PROMINTR_MAX);
op->archdata.num_irqs = PROMINTR_MAX; op->archdata.num_irqs = PROMINTR_MAX;
} }
memcpy(op->archdata.irqs, irq, op->archdata.num_irqs * 4); memcpy(op->archdata.irqs, irq, op->archdata.num_irqs * 4);
...@@ -680,8 +679,7 @@ static struct platform_device * __init scan_one_device(struct device_node *dp, ...@@ -680,8 +679,7 @@ static struct platform_device * __init scan_one_device(struct device_node *dp,
op->dev.dma_mask = &op->dev.coherent_dma_mask; op->dev.dma_mask = &op->dev.coherent_dma_mask;
if (of_device_register(op)) { if (of_device_register(op)) {
printk("%s: Could not register of device.\n", printk("%pOF: Could not register of device.\n", dp);
dp->full_name);
kfree(op); kfree(op);
op = NULL; op = NULL;
} }
......
...@@ -151,8 +151,8 @@ int of_bus_sbus_match(struct device_node *np) ...@@ -151,8 +151,8 @@ int of_bus_sbus_match(struct device_node *np)
struct device_node *dp = np; struct device_node *dp = np;
while (dp) { while (dp) {
if (!strcmp(dp->name, "sbus") || if (of_node_name_eq(dp, "sbus") ||
!strcmp(dp->name, "sbi")) of_node_name_eq(dp, "sbi"))
return 1; return 1;
/* Have a look at use_1to1_mapping(). We're trying /* Have a look at use_1to1_mapping(). We're trying
......
...@@ -267,7 +267,6 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, ...@@ -267,7 +267,6 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
struct dev_archdata *sd; struct dev_archdata *sd;
struct platform_device *op; struct platform_device *op;
struct pci_dev *dev; struct pci_dev *dev;
const char *type;
u32 class; u32 class;
dev = pci_alloc_dev(bus); dev = pci_alloc_dev(bus);
...@@ -283,16 +282,12 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, ...@@ -283,16 +282,12 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
sd->stc = &pbm->stc; sd->stc = &pbm->stc;
sd->numa_node = pbm->numa_node; sd->numa_node = pbm->numa_node;
if (!strcmp(node->name, "ebus")) if (of_node_name_eq(node, "ebus"))
of_propagate_archdata(op); of_propagate_archdata(op);
type = of_get_property(node, "device_type", NULL);
if (type == NULL)
type = "";
if (ofpci_verbose) if (ofpci_verbose)
pci_info(bus," create device, devfn: %x, type: %s\n", pci_info(bus," create device, devfn: %x, type: %s\n",
devfn, type); devfn, of_node_get_device_type(node));
dev->sysdata = node; dev->sysdata = node;
dev->dev.parent = bus->bridge; dev->dev.parent = bus->bridge;
...@@ -336,11 +331,11 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, ...@@ -336,11 +331,11 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
dev->error_state = pci_channel_io_normal; dev->error_state = pci_channel_io_normal;
dev->dma_mask = 0xffffffff; dev->dma_mask = 0xffffffff;
if (!strcmp(node->name, "pci")) { if (of_node_name_eq(node, "pci")) {
/* a PCI-PCI bridge */ /* a PCI-PCI bridge */
dev->hdr_type = PCI_HEADER_TYPE_BRIDGE; dev->hdr_type = PCI_HEADER_TYPE_BRIDGE;
dev->rom_base_reg = PCI_ROM_ADDRESS1; dev->rom_base_reg = PCI_ROM_ADDRESS1;
} else if (!strcmp(type, "cardbus")) { } else if (of_node_is_type(node, "cardbus")) {
dev->hdr_type = PCI_HEADER_TYPE_CARDBUS; dev->hdr_type = PCI_HEADER_TYPE_CARDBUS;
} else { } else {
dev->hdr_type = PCI_HEADER_TYPE_NORMAL; dev->hdr_type = PCI_HEADER_TYPE_NORMAL;
...@@ -431,13 +426,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm, ...@@ -431,13 +426,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm,
u64 size; u64 size;
if (ofpci_verbose) if (ofpci_verbose)
pci_info(dev, "of_scan_pci_bridge(%s)\n", node->full_name); pci_info(dev, "of_scan_pci_bridge(%pOF)\n", node);
/* parse bus-range property */ /* parse bus-range property */
busrange = of_get_property(node, "bus-range", &len); busrange = of_get_property(node, "bus-range", &len);
if (busrange == NULL || len != 8) { if (busrange == NULL || len != 8) {
pci_info(dev, "Can't get bus-range for PCI-PCI bridge %s\n", pci_info(dev, "Can't get bus-range for PCI-PCI bridge %pOF\n",
node->full_name); node);
return; return;
} }
...@@ -455,8 +450,8 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm, ...@@ -455,8 +450,8 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm,
bus = pci_add_new_bus(dev->bus, dev, busrange[0]); bus = pci_add_new_bus(dev->bus, dev, busrange[0]);
if (!bus) { if (!bus) {
pci_err(dev, "Failed to create pci bus for %s\n", pci_err(dev, "Failed to create pci bus for %pOF\n",
node->full_name); node);
return; return;
} }
...@@ -512,13 +507,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm, ...@@ -512,13 +507,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm,
res = bus->resource[0]; res = bus->resource[0];
if (res->flags) { if (res->flags) {
pci_err(dev, "ignoring extra I/O range" pci_err(dev, "ignoring extra I/O range"
" for bridge %s\n", node->full_name); " for bridge %pOF\n", node);
continue; continue;
} }
} else { } else {
if (i >= PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES) { if (i >= PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES) {
pci_err(dev, "too many memory ranges" pci_err(dev, "too many memory ranges"
" for bridge %s\n", node->full_name); " for bridge %pOF\n", node);
continue; continue;
} }
res = bus->resource[i]; res = bus->resource[i];
...@@ -554,14 +549,14 @@ static void pci_of_scan_bus(struct pci_pbm_info *pbm, ...@@ -554,14 +549,14 @@ static void pci_of_scan_bus(struct pci_pbm_info *pbm,
struct pci_dev *dev; struct pci_dev *dev;
if (ofpci_verbose) if (ofpci_verbose)
pci_info(bus, "scan_bus[%s] bus no %d\n", pci_info(bus, "scan_bus[%pOF] bus no %d\n",
node->full_name, bus->number); node, bus->number);
child = NULL; child = NULL;
prev_devfn = -1; prev_devfn = -1;
while ((child = of_get_next_child(node, child)) != NULL) { while ((child = of_get_next_child(node, child)) != NULL) {
if (ofpci_verbose) if (ofpci_verbose)
pci_info(bus, " * %s\n", child->full_name); pci_info(bus, " * %pOF\n", child);
reg = of_get_property(child, "reg", &reglen); reg = of_get_property(child, "reg", &reglen);
if (reg == NULL || reglen < 20) if (reg == NULL || reglen < 20)
continue; continue;
...@@ -598,7 +593,7 @@ show_pciobppath_attr(struct device * dev, struct device_attribute * attr, char * ...@@ -598,7 +593,7 @@ show_pciobppath_attr(struct device * dev, struct device_attribute * attr, char *
pdev = to_pci_dev(dev); pdev = to_pci_dev(dev);
dp = pdev->dev.of_node; dp = pdev->dev.of_node;
return snprintf (buf, PAGE_SIZE, "%s\n", dp->full_name); return snprintf (buf, PAGE_SIZE, "%pOF\n", dp);
} }
static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, show_pciobppath_attr, NULL); static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, show_pciobppath_attr, NULL);
...@@ -698,7 +693,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm, ...@@ -698,7 +693,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
struct device_node *node = pbm->op->dev.of_node; struct device_node *node = pbm->op->dev.of_node;
struct pci_bus *bus; struct pci_bus *bus;
printk("PCI: Scanning PBM %s\n", node->full_name); printk("PCI: Scanning PBM %pOF\n", node);
pci_add_resource_offset(&resources, &pbm->io_space, pci_add_resource_offset(&resources, &pbm->io_space,
pbm->io_offset); pbm->io_offset);
...@@ -714,8 +709,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm, ...@@ -714,8 +709,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops, bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops,
pbm, &resources); pbm, &resources);
if (!bus) { if (!bus) {
printk(KERN_ERR "Failed to create bus for %s\n", printk(KERN_ERR "Failed to create bus for %pOF\n", node);
node->full_name);
pci_free_resource_list(&resources); pci_free_resource_list(&resources);
return NULL; return NULL;
} }
...@@ -1111,8 +1105,8 @@ static void pci_bus_slot_names(struct device_node *node, struct pci_bus *bus) ...@@ -1111,8 +1105,8 @@ static void pci_bus_slot_names(struct device_node *node, struct pci_bus *bus)
sp = prop->names; sp = prop->names;
if (ofpci_verbose) if (ofpci_verbose)
pci_info(bus, "Making slots for [%s] mask[0x%02x]\n", pci_info(bus, "Making slots for [%pOF] mask[0x%02x]\n",
node->full_name, mask); node, mask);
i = 0; i = 0;
while (mask) { while (mask) {
......
...@@ -475,7 +475,7 @@ static int sabre_probe(struct platform_device *op) ...@@ -475,7 +475,7 @@ static int sabre_probe(struct platform_device *op)
* different ways, inconsistently. * different ways, inconsistently.
*/ */
for_each_node_by_type(cpu_dp, "cpu") { for_each_node_by_type(cpu_dp, "cpu") {
if (!strcmp(cpu_dp->name, "SUNW,UltraSPARC-IIe")) if (of_node_name_eq(cpu_dp, "SUNW,UltraSPARC-IIe"))
hummingbird_p = 1; hummingbird_p = 1;
} }
} }
......
...@@ -41,8 +41,8 @@ static int power_probe(struct platform_device *op) ...@@ -41,8 +41,8 @@ static int power_probe(struct platform_device *op)
power_reg = of_ioremap(res, 0, 0x4, "power"); power_reg = of_ioremap(res, 0, 0x4, "power");
printk(KERN_INFO "%s: Control reg at %llx\n", printk(KERN_INFO "%pOFn: Control reg at %llx\n",
op->dev.of_node->name, res->start); op->dev.of_node, res->start);
if (has_button_interrupt(irq, op->dev.of_node)) { if (has_button_interrupt(irq, op->dev.of_node)) {
if (request_irq(irq, if (request_irq(irq,
......
...@@ -110,7 +110,7 @@ void machine_restart(char * cmd) ...@@ -110,7 +110,7 @@ void machine_restart(char * cmd)
void machine_power_off(void) void machine_power_off(void)
{ {
if (auxio_power_register && if (auxio_power_register &&
(strcmp(of_console_device->type, "serial") || scons_pwroff)) { (!of_node_is_type(of_console_device, "serial") || scons_pwroff)) {
u8 power_register = sbus_readb(auxio_power_register); u8 power_register = sbus_readb(auxio_power_register);
power_register |= AUXIO_POWER_OFF; power_register |= AUXIO_POWER_OFF;
sbus_writeb(power_register, auxio_power_register); sbus_writeb(power_register, auxio_power_register);
......
...@@ -60,6 +60,7 @@ void * __init prom_early_alloc(unsigned long size) ...@@ -60,6 +60,7 @@ void * __init prom_early_alloc(unsigned long size)
*/ */
static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf) static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_registers *regs; struct linux_prom_registers *regs;
struct property *rprop; struct property *rprop;
...@@ -69,13 +70,14 @@ static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf) ...@@ -69,13 +70,14 @@ static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf)
regs = rprop->value; regs = rprop->value;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
regs->which_io, regs->phys_addr); regs->which_io, regs->phys_addr);
} }
/* "name@slot,offset" */ /* "name@slot,offset" */
static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_registers *regs; struct linux_prom_registers *regs;
struct property *prop; struct property *prop;
...@@ -85,7 +87,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -85,7 +87,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
regs->which_io, regs->which_io,
regs->phys_addr); regs->phys_addr);
} }
...@@ -93,6 +95,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -93,6 +95,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
/* "name@devnum[,func]" */ /* "name@devnum[,func]" */
static void __init pci_path_component(struct device_node *dp, char *tmp_buf) static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_pci_registers *regs; struct linux_prom_pci_registers *regs;
struct property *prop; struct property *prop;
unsigned int devfn; unsigned int devfn;
...@@ -105,12 +108,12 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) ...@@ -105,12 +108,12 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
devfn = (regs->phys_hi >> 8) & 0xff; devfn = (regs->phys_hi >> 8) & 0xff;
if (devfn & 0x07) { if (devfn & 0x07) {
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
devfn >> 3, devfn >> 3,
devfn & 0x07); devfn & 0x07);
} else { } else {
sprintf(tmp_buf, "%s@%x", sprintf(tmp_buf, "%s@%x",
dp->name, name,
devfn >> 3); devfn >> 3);
} }
} }
...@@ -118,6 +121,7 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) ...@@ -118,6 +121,7 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
/* "name@addrhi,addrlo" */ /* "name@addrhi,addrlo" */
static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_registers *regs; struct linux_prom_registers *regs;
struct property *prop; struct property *prop;
...@@ -128,13 +132,14 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -128,13 +132,14 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
regs->which_io, regs->phys_addr); regs->which_io, regs->phys_addr);
} }
/* "name:vendor:device@irq,addrlo" */ /* "name:vendor:device@irq,addrlo" */
static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct amba_prom_registers *regs; struct amba_prom_registers *regs;
unsigned int *intr, *device, *vendor, reg0; unsigned int *intr, *device, *vendor, reg0;
struct property *prop; struct property *prop;
...@@ -168,7 +173,7 @@ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) ...@@ -168,7 +173,7 @@ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf)
device = prop->value; device = prop->value;
sprintf(tmp_buf, "%s:%d:%d@%x,%x", sprintf(tmp_buf, "%s:%d:%d@%x,%x",
dp->name, *vendor, *device, name, *vendor, *device,
*intr, reg0); *intr, reg0);
} }
...@@ -177,14 +182,14 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf) ...@@ -177,14 +182,14 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
struct device_node *parent = dp->parent; struct device_node *parent = dp->parent;
if (parent != NULL) { if (parent != NULL) {
if (!strcmp(parent->type, "pci") || if (of_node_is_type(parent, "pci") ||
!strcmp(parent->type, "pciex")) of_node_is_type(parent, "pciex"))
return pci_path_component(dp, tmp_buf); return pci_path_component(dp, tmp_buf);
if (!strcmp(parent->type, "sbus")) if (of_node_is_type(parent, "sbus"))
return sbus_path_component(dp, tmp_buf); return sbus_path_component(dp, tmp_buf);
if (!strcmp(parent->type, "ebus")) if (of_node_is_type(parent, "ebus"))
return ebus_path_component(dp, tmp_buf); return ebus_path_component(dp, tmp_buf);
if (!strcmp(parent->type, "ambapp")) if (of_node_is_type(parent, "ambapp"))
return ambapp_path_component(dp, tmp_buf); return ambapp_path_component(dp, tmp_buf);
/* "isa" is handled with platform naming */ /* "isa" is handled with platform naming */
...@@ -196,12 +201,13 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf) ...@@ -196,12 +201,13 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
char * __init build_path_component(struct device_node *dp) char * __init build_path_component(struct device_node *dp)
{ {
const char *name = of_get_property(dp, "name", NULL);
char tmp_buf[64], *n; char tmp_buf[64], *n;
tmp_buf[0] = '\0'; tmp_buf[0] = '\0';
__build_path_component(dp, tmp_buf); __build_path_component(dp, tmp_buf);
if (tmp_buf[0] == '\0') if (tmp_buf[0] == '\0')
strcpy(tmp_buf, dp->name); strcpy(tmp_buf, name);
n = prom_early_alloc(strlen(tmp_buf) + 1); n = prom_early_alloc(strlen(tmp_buf) + 1);
strcpy(n, tmp_buf); strcpy(n, tmp_buf);
...@@ -255,7 +261,7 @@ void __init of_console_init(void) ...@@ -255,7 +261,7 @@ void __init of_console_init(void)
} }
of_console_device = dp; of_console_device = dp;
strcpy(of_console_path, dp->full_name); sprintf(of_console_path, "%pOF", dp);
if (!strcmp(type, "serial")) { if (!strcmp(type, "serial")) {
strcat(of_console_path, strcat(of_console_path,
(skip ? ":b" : ":a")); (skip ? ":b" : ":a"));
...@@ -278,15 +284,9 @@ void __init of_console_init(void) ...@@ -278,15 +284,9 @@ void __init of_console_init(void)
prom_halt(); prom_halt();
} }
dp = of_find_node_by_phandle(node); dp = of_find_node_by_phandle(node);
type = of_get_property(dp, "device_type", NULL);
if (!type) { if (!of_node_is_type(dp, "display") &&
prom_printf("Console stdout lacks " !of_node_is_type(dp, "serial")) {
"device_type property.\n");
prom_halt();
}
if (strcmp(type, "display") && strcmp(type, "serial")) {
prom_printf("Console device_type is neither display " prom_printf("Console device_type is neither display "
"nor serial.\n"); "nor serial.\n");
prom_halt(); prom_halt();
...@@ -295,7 +295,7 @@ void __init of_console_init(void) ...@@ -295,7 +295,7 @@ void __init of_console_init(void)
of_console_device = dp; of_console_device = dp;
if (prom_vers == PROM_V2) { if (prom_vers == PROM_V2) {
strcpy(of_console_path, dp->full_name); sprintf(of_console_path, "%pOF", dp);
switch (*romvec->pv_stdout) { switch (*romvec->pv_stdout) {
case PROMDEV_TTYA: case PROMDEV_TTYA:
strcat(of_console_path, ":a"); strcat(of_console_path, ":a");
......
...@@ -72,6 +72,7 @@ void * __init prom_early_alloc(unsigned long size) ...@@ -72,6 +72,7 @@ void * __init prom_early_alloc(unsigned long size)
*/ */
static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom64_registers *regs; struct linux_prom64_registers *regs;
struct property *rprop; struct property *rprop;
u32 high_bits, low_bits, type; u32 high_bits, low_bits, type;
...@@ -83,7 +84,7 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) ...@@ -83,7 +84,7 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf)
regs = rprop->value; regs = rprop->value;
if (!of_node_is_root(dp->parent)) { if (!of_node_is_root(dp->parent)) {
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
(unsigned int) (regs->phys_addr >> 32UL), (unsigned int) (regs->phys_addr >> 32UL),
(unsigned int) (regs->phys_addr & 0xffffffffUL)); (unsigned int) (regs->phys_addr & 0xffffffffUL));
return; return;
...@@ -98,21 +99,22 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) ...@@ -98,21 +99,22 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf)
if (low_bits) if (low_bits)
sprintf(tmp_buf, "%s@%s%x,%x", sprintf(tmp_buf, "%s@%s%x,%x",
dp->name, prefix, name, prefix,
high_bits, low_bits); high_bits, low_bits);
else else
sprintf(tmp_buf, "%s@%s%x", sprintf(tmp_buf, "%s@%s%x",
dp->name, name,
prefix, prefix,
high_bits); high_bits);
} else if (type == 12) { } else if (type == 12) {
sprintf(tmp_buf, "%s@%x", sprintf(tmp_buf, "%s@%x",
dp->name, high_bits); name, high_bits);
} }
} }
static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom64_registers *regs; struct linux_prom64_registers *regs;
struct property *prop; struct property *prop;
...@@ -123,7 +125,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) ...@@ -123,7 +125,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
if (!of_node_is_root(dp->parent)) { if (!of_node_is_root(dp->parent)) {
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
(unsigned int) (regs->phys_addr >> 32UL), (unsigned int) (regs->phys_addr >> 32UL),
(unsigned int) (regs->phys_addr & 0xffffffffUL)); (unsigned int) (regs->phys_addr & 0xffffffffUL));
return; return;
...@@ -139,7 +141,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) ...@@ -139,7 +141,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf)
mask = 0x7fffff; mask = 0x7fffff;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
*(u32 *)prop->value, *(u32 *)prop->value,
(unsigned int) (regs->phys_addr & mask)); (unsigned int) (regs->phys_addr & mask));
} }
...@@ -148,6 +150,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) ...@@ -148,6 +150,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf)
/* "name@slot,offset" */ /* "name@slot,offset" */
static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_registers *regs; struct linux_prom_registers *regs;
struct property *prop; struct property *prop;
...@@ -157,7 +160,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -157,7 +160,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
regs->which_io, regs->which_io,
regs->phys_addr); regs->phys_addr);
} }
...@@ -165,6 +168,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -165,6 +168,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)
/* "name@devnum[,func]" */ /* "name@devnum[,func]" */
static void __init pci_path_component(struct device_node *dp, char *tmp_buf) static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom_pci_registers *regs; struct linux_prom_pci_registers *regs;
struct property *prop; struct property *prop;
unsigned int devfn; unsigned int devfn;
...@@ -177,12 +181,12 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) ...@@ -177,12 +181,12 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
devfn = (regs->phys_hi >> 8) & 0xff; devfn = (regs->phys_hi >> 8) & 0xff;
if (devfn & 0x07) { if (devfn & 0x07) {
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
devfn >> 3, devfn >> 3,
devfn & 0x07); devfn & 0x07);
} else { } else {
sprintf(tmp_buf, "%s@%x", sprintf(tmp_buf, "%s@%x",
dp->name, name,
devfn >> 3); devfn >> 3);
} }
} }
...@@ -190,6 +194,7 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) ...@@ -190,6 +194,7 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf)
/* "name@UPA_PORTID,offset" */ /* "name@UPA_PORTID,offset" */
static void __init upa_path_component(struct device_node *dp, char *tmp_buf) static void __init upa_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom64_registers *regs; struct linux_prom64_registers *regs;
struct property *prop; struct property *prop;
...@@ -204,7 +209,7 @@ static void __init upa_path_component(struct device_node *dp, char *tmp_buf) ...@@ -204,7 +209,7 @@ static void __init upa_path_component(struct device_node *dp, char *tmp_buf)
return; return;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
*(u32 *) prop->value, *(u32 *) prop->value,
(unsigned int) (regs->phys_addr & 0xffffffffUL)); (unsigned int) (regs->phys_addr & 0xffffffffUL));
} }
...@@ -212,6 +217,7 @@ static void __init upa_path_component(struct device_node *dp, char *tmp_buf) ...@@ -212,6 +217,7 @@ static void __init upa_path_component(struct device_node *dp, char *tmp_buf)
/* "name@reg" */ /* "name@reg" */
static void __init vdev_path_component(struct device_node *dp, char *tmp_buf) static void __init vdev_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct property *prop; struct property *prop;
u32 *regs; u32 *regs;
...@@ -221,12 +227,13 @@ static void __init vdev_path_component(struct device_node *dp, char *tmp_buf) ...@@ -221,12 +227,13 @@ static void __init vdev_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
sprintf(tmp_buf, "%s@%x", dp->name, *regs); sprintf(tmp_buf, "%s@%x", name, *regs);
} }
/* "name@addrhi,addrlo" */ /* "name@addrhi,addrlo" */
static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct linux_prom64_registers *regs; struct linux_prom64_registers *regs;
struct property *prop; struct property *prop;
...@@ -237,7 +244,7 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -237,7 +244,7 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
regs = prop->value; regs = prop->value;
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, name,
(unsigned int) (regs->phys_addr >> 32UL), (unsigned int) (regs->phys_addr >> 32UL),
(unsigned int) (regs->phys_addr & 0xffffffffUL)); (unsigned int) (regs->phys_addr & 0xffffffffUL));
} }
...@@ -245,6 +252,7 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) ...@@ -245,6 +252,7 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf)
/* "name@bus,addr" */ /* "name@bus,addr" */
static void __init i2c_path_component(struct device_node *dp, char *tmp_buf) static void __init i2c_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct property *prop; struct property *prop;
u32 *regs; u32 *regs;
...@@ -258,12 +266,13 @@ static void __init i2c_path_component(struct device_node *dp, char *tmp_buf) ...@@ -258,12 +266,13 @@ static void __init i2c_path_component(struct device_node *dp, char *tmp_buf)
* property of the i2c bus node etc. etc. * property of the i2c bus node etc. etc.
*/ */
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, regs[0], regs[1]); name, regs[0], regs[1]);
} }
/* "name@reg0[,reg1]" */ /* "name@reg0[,reg1]" */
static void __init usb_path_component(struct device_node *dp, char *tmp_buf) static void __init usb_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct property *prop; struct property *prop;
u32 *regs; u32 *regs;
...@@ -275,16 +284,17 @@ static void __init usb_path_component(struct device_node *dp, char *tmp_buf) ...@@ -275,16 +284,17 @@ static void __init usb_path_component(struct device_node *dp, char *tmp_buf)
if (prop->length == sizeof(u32) || regs[1] == 1) { if (prop->length == sizeof(u32) || regs[1] == 1) {
sprintf(tmp_buf, "%s@%x", sprintf(tmp_buf, "%s@%x",
dp->name, regs[0]); name, regs[0]);
} else { } else {
sprintf(tmp_buf, "%s@%x,%x", sprintf(tmp_buf, "%s@%x,%x",
dp->name, regs[0], regs[1]); name, regs[0], regs[1]);
} }
} }
/* "name@reg0reg1[,reg2reg3]" */ /* "name@reg0reg1[,reg2reg3]" */
static void __init ieee1394_path_component(struct device_node *dp, char *tmp_buf) static void __init ieee1394_path_component(struct device_node *dp, char *tmp_buf)
{ {
const char *name = of_get_property(dp, "name", NULL);
struct property *prop; struct property *prop;
u32 *regs; u32 *regs;
...@@ -296,10 +306,10 @@ static void __init ieee1394_path_component(struct device_node *dp, char *tmp_buf ...@@ -296,10 +306,10 @@ static void __init ieee1394_path_component(struct device_node *dp, char *tmp_buf
if (regs[2] || regs[3]) { if (regs[2] || regs[3]) {
sprintf(tmp_buf, "%s@%08x%08x,%04x%08x", sprintf(tmp_buf, "%s@%08x%08x,%04x%08x",
dp->name, regs[0], regs[1], regs[2], regs[3]); name, regs[0], regs[1], regs[2], regs[3]);
} else { } else {
sprintf(tmp_buf, "%s@%08x%08x", sprintf(tmp_buf, "%s@%08x%08x",
dp->name, regs[0], regs[1]); name, regs[0], regs[1]);
} }
} }
...@@ -308,37 +318,37 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf) ...@@ -308,37 +318,37 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
struct device_node *parent = dp->parent; struct device_node *parent = dp->parent;
if (parent != NULL) { if (parent != NULL) {
if (!strcmp(parent->type, "pci") || if (of_node_is_type(parent, "pci") ||
!strcmp(parent->type, "pciex")) { of_node_is_type(parent, "pciex")) {
pci_path_component(dp, tmp_buf); pci_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "sbus")) { if (of_node_is_type(parent, "sbus")) {
sbus_path_component(dp, tmp_buf); sbus_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "upa")) { if (of_node_is_type(parent, "upa")) {
upa_path_component(dp, tmp_buf); upa_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "ebus")) { if (of_node_is_type(parent, "ebus")) {
ebus_path_component(dp, tmp_buf); ebus_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->name, "usb") || if (of_node_name_eq(parent, "usb") ||
!strcmp(parent->name, "hub")) { of_node_name_eq(parent, "hub")) {
usb_path_component(dp, tmp_buf); usb_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "i2c")) { if (of_node_is_type(parent, "i2c")) {
i2c_path_component(dp, tmp_buf); i2c_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "firewire")) { if (of_node_is_type(parent, "firewire")) {
ieee1394_path_component(dp, tmp_buf); ieee1394_path_component(dp, tmp_buf);
return; return;
} }
if (!strcmp(parent->type, "virtual-devices")) { if (of_node_is_type(parent, "virtual-devices")) {
vdev_path_component(dp, tmp_buf); vdev_path_component(dp, tmp_buf);
return; return;
} }
...@@ -356,12 +366,13 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf) ...@@ -356,12 +366,13 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)
char * __init build_path_component(struct device_node *dp) char * __init build_path_component(struct device_node *dp)
{ {
const char *name = of_get_property(dp, "name", NULL);
char tmp_buf[64], *n; char tmp_buf[64], *n;
tmp_buf[0] = '\0'; tmp_buf[0] = '\0';
__build_path_component(dp, tmp_buf); __build_path_component(dp, tmp_buf);
if (tmp_buf[0] == '\0') if (tmp_buf[0] == '\0')
strcpy(tmp_buf, dp->name); strcpy(tmp_buf, name);
n = prom_early_alloc(strlen(tmp_buf) + 1); n = prom_early_alloc(strlen(tmp_buf) + 1);
strcpy(n, tmp_buf); strcpy(n, tmp_buf);
...@@ -594,7 +605,6 @@ void __init of_console_init(void) ...@@ -594,7 +605,6 @@ void __init of_console_init(void)
{ {
char *msg = "OF stdout device is: %s\n"; char *msg = "OF stdout device is: %s\n";
struct device_node *dp; struct device_node *dp;
const char *type;
phandle node; phandle node;
of_console_path = prom_early_alloc(256); of_console_path = prom_early_alloc(256);
...@@ -617,13 +627,8 @@ void __init of_console_init(void) ...@@ -617,13 +627,8 @@ void __init of_console_init(void)
} }
dp = of_find_node_by_phandle(node); dp = of_find_node_by_phandle(node);
type = of_get_property(dp, "device_type", NULL);
if (!type) {
prom_printf("Console stdout lacks device_type property.\n");
prom_halt();
}
if (strcmp(type, "display") && strcmp(type, "serial")) { if (!of_node_is_type(dp, "display") && !of_node_is_type(dp, "serial")) {
prom_printf("Console device_type is neither display " prom_printf("Console device_type is neither display "
"nor serial.\n"); "nor serial.\n");
prom_halt(); prom_halt();
......
...@@ -193,7 +193,7 @@ static int sabre_device_needs_wsync(struct device_node *dp) ...@@ -193,7 +193,7 @@ static int sabre_device_needs_wsync(struct device_node *dp)
* the DMA synchronization handling * the DMA synchronization handling
*/ */
while (parent) { while (parent) {
if (!strcmp(parent->type, "pci")) if (of_node_is_type(parent, "pci"))
break; break;
parent = parent->parent; parent = parent->parent;
} }
...@@ -725,11 +725,11 @@ static unsigned int central_build_irq(struct device_node *dp, ...@@ -725,11 +725,11 @@ static unsigned int central_build_irq(struct device_node *dp,
unsigned long imap, iclr; unsigned long imap, iclr;
u32 tmp; u32 tmp;
if (!strcmp(dp->name, "eeprom")) { if (of_node_name_eq(dp, "eeprom")) {
res = &central_op->resource[5]; res = &central_op->resource[5];
} else if (!strcmp(dp->name, "zs")) { } else if (of_node_name_eq(dp, "zs")) {
res = &central_op->resource[4]; res = &central_op->resource[4];
} else if (!strcmp(dp->name, "clock-board")) { } else if (of_node_name_eq(dp, "clock-board")) {
res = &central_op->resource[3]; res = &central_op->resource[3];
} else { } else {
return ino; return ino;
...@@ -824,19 +824,19 @@ void __init irq_trans_init(struct device_node *dp) ...@@ -824,19 +824,19 @@ void __init irq_trans_init(struct device_node *dp)
} }
#endif #endif
#ifdef CONFIG_SBUS #ifdef CONFIG_SBUS
if (!strcmp(dp->name, "sbus") || if (of_node_name_eq(dp, "sbus") ||
!strcmp(dp->name, "sbi")) { of_node_name_eq(dp, "sbi")) {
sbus_irq_trans_init(dp); sbus_irq_trans_init(dp);
return; return;
} }
#endif #endif
if (!strcmp(dp->name, "fhc") && if (of_node_name_eq(dp, "fhc") &&
!strcmp(dp->parent->name, "central")) { of_node_name_eq(dp->parent, "central")) {
central_irq_trans_init(dp); central_irq_trans_init(dp);
return; return;
} }
if (!strcmp(dp->name, "virtual-devices") || if (of_node_name_eq(dp, "virtual-devices") ||
!strcmp(dp->name, "niu")) { of_node_name_eq(dp, "niu")) {
sun4v_vdev_irq_trans_init(dp); sun4v_vdev_irq_trans_init(dp);
return; return;
} }
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/of.h>
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/prom.h> #include <asm/prom.h>
...@@ -25,7 +26,7 @@ EXPORT_SYMBOL(pm_power_off); ...@@ -25,7 +26,7 @@ EXPORT_SYMBOL(pm_power_off);
void machine_power_off(void) void machine_power_off(void)
{ {
if (strcmp(of_console_device->type, "serial") || scons_pwroff) if (!of_node_is_type(of_console_device, "serial") || scons_pwroff)
prom_halt_power_off(); prom_halt_power_off();
prom_halt(); prom_halt();
......
...@@ -67,8 +67,8 @@ void sbus_set_sbus64(struct device *dev, int bursts) ...@@ -67,8 +67,8 @@ void sbus_set_sbus64(struct device *dev, int bursts)
regs = of_get_property(op->dev.of_node, "reg", NULL); regs = of_get_property(op->dev.of_node, "reg", NULL);
if (!regs) { if (!regs) {
printk(KERN_ERR "sbus_set_sbus64: Cannot find regs for %s\n", printk(KERN_ERR "sbus_set_sbus64: Cannot find regs for %pOF\n",
op->dev.of_node->full_name); op->dev.of_node);
return; return;
} }
slot = regs->which_io; slot = regs->which_io;
......
...@@ -335,12 +335,12 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op, ...@@ -335,12 +335,12 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op,
irq = real_irq; irq = real_irq;
while (bus) { while (bus) {
if (!strcmp(bus->name, "sbi")) { if (of_node_name_eq(bus, "sbi")) {
bus_connection = "io-unit"; bus_connection = "io-unit";
break; break;
} }
if (!strcmp(bus->name, "bootbus")) { if (of_node_name_eq(bus, "bootbus")) {
bus_connection = "cpu-unit"; bus_connection = "cpu-unit";
break; break;
} }
...@@ -360,16 +360,16 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op, ...@@ -360,16 +360,16 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op,
* If Bus nodes parent is not io-unit/cpu-unit or the io-unit/cpu-unit * If Bus nodes parent is not io-unit/cpu-unit or the io-unit/cpu-unit
* lacks a "board#" property, something is very wrong. * lacks a "board#" property, something is very wrong.
*/ */
if (!bus->parent || strcmp(bus->parent->name, bus_connection)) { if (!of_node_name_eq(bus->parent, bus_connection)) {
printk(KERN_ERR "%s: Error, parent is not %s.\n", printk(KERN_ERR "%pOF: Error, parent is not %s.\n",
bus->full_name, bus_connection); bus, bus_connection);
goto err_out; goto err_out;
} }
board_parent = bus->parent; board_parent = bus->parent;
board = of_getintprop_default(board_parent, "board#", -1); board = of_getintprop_default(board_parent, "board#", -1);
if (board == -1) { if (board == -1) {
printk(KERN_ERR "%s: Error, lacks board# property.\n", printk(KERN_ERR "%pOF: Error, lacks board# property.\n",
board_parent->full_name); board_parent);
goto err_out; goto err_out;
} }
......
...@@ -445,8 +445,8 @@ static int rtc_probe(struct platform_device *op) ...@@ -445,8 +445,8 @@ static int rtc_probe(struct platform_device *op)
{ {
struct resource *r; struct resource *r;
printk(KERN_INFO "%s: RTC regs at 0x%llx\n", printk(KERN_INFO "%pOF: RTC regs at 0x%llx\n",
op->dev.of_node->full_name, op->resource[0].start); op->dev.of_node, op->resource[0].start);
/* The CMOS RTC driver only accepts IORESOURCE_IO, so cons /* The CMOS RTC driver only accepts IORESOURCE_IO, so cons
* up a fake resource so that the probe works for all cases. * up a fake resource so that the probe works for all cases.
...@@ -501,8 +501,8 @@ static struct platform_device rtc_bq4802_device = { ...@@ -501,8 +501,8 @@ static struct platform_device rtc_bq4802_device = {
static int bq4802_probe(struct platform_device *op) static int bq4802_probe(struct platform_device *op)
{ {
printk(KERN_INFO "%s: BQ4802 regs at 0x%llx\n", printk(KERN_INFO "%pOF: BQ4802 regs at 0x%llx\n",
op->dev.of_node->full_name, op->resource[0].start); op->dev.of_node, op->resource[0].start);
rtc_bq4802_device.resource = &op->resource[0]; rtc_bq4802_device.resource = &op->resource[0];
return platform_device_register(&rtc_bq4802_device); return platform_device_register(&rtc_bq4802_device);
...@@ -561,12 +561,12 @@ static int mostek_probe(struct platform_device *op) ...@@ -561,12 +561,12 @@ static int mostek_probe(struct platform_device *op)
/* On an Enterprise system there can be multiple mostek clocks. /* On an Enterprise system there can be multiple mostek clocks.
* We should only match the one that is on the central FHC bus. * We should only match the one that is on the central FHC bus.
*/ */
if (!strcmp(dp->parent->name, "fhc") && if (of_node_name_eq(dp->parent, "fhc") &&
strcmp(dp->parent->parent->name, "central") != 0) !of_node_name_eq(dp->parent->parent, "central"))
return -ENODEV; return -ENODEV;
printk(KERN_INFO "%s: Mostek regs at 0x%llx\n", printk(KERN_INFO "%pOF: Mostek regs at 0x%llx\n",
dp->full_name, op->resource[0].start); dp, op->resource[0].start);
m48t59_rtc.resource = &op->resource[0]; m48t59_rtc.resource = &op->resource[0];
return platform_device_register(&m48t59_rtc); return platform_device_register(&m48t59_rtc);
......
...@@ -193,7 +193,7 @@ show_pciobppath_attr(struct device *dev, struct device_attribute *attr, ...@@ -193,7 +193,7 @@ show_pciobppath_attr(struct device *dev, struct device_attribute *attr,
vdev = to_vio_dev(dev); vdev = to_vio_dev(dev);
dp = vdev->dp; dp = vdev->dp;
return snprintf (buf, PAGE_SIZE, "%s\n", dp->full_name); return snprintf (buf, PAGE_SIZE, "%pOF\n", dp);
} }
static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH,
...@@ -366,12 +366,9 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp, ...@@ -366,12 +366,9 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
if (parent == NULL) { if (parent == NULL) {
dp = cdev_node; dp = cdev_node;
} else if (to_vio_dev(parent) == root_vdev) { } else if (to_vio_dev(parent) == root_vdev) {
dp = of_get_next_child(cdev_node, NULL); for_each_child_of_node(cdev_node, dp) {
while (dp) { if (of_node_is_type(dp, type))
if (!strcmp(dp->type, type))
break; break;
dp = of_get_next_child(cdev_node, dp);
} }
} else { } else {
dp = to_vio_dev(parent)->dp; dp = to_vio_dev(parent)->dp;
......
...@@ -32,24 +32,7 @@ unsigned int of_pdt_unique_id __initdata; ...@@ -32,24 +32,7 @@ unsigned int of_pdt_unique_id __initdata;
static char * __init of_pdt_build_full_name(struct device_node *dp) static char * __init of_pdt_build_full_name(struct device_node *dp)
{ {
int len, ourlen, plen; return build_path_component(dp);
char *n;
dp->path_component_name = build_path_component(dp);
plen = strlen(dp->parent->full_name);
ourlen = strlen(dp->path_component_name);
len = ourlen + plen + 2;
n = prom_early_alloc(len);
strcpy(n, dp->parent->full_name);
if (!of_node_is_root(dp->parent)) {
strcpy(n + plen, "/");
plen++;
}
strcpy(n + plen, dp->path_component_name);
return n;
} }
#else /* CONFIG_SPARC */ #else /* CONFIG_SPARC */
...@@ -60,23 +43,21 @@ static inline void irq_trans_init(struct device_node *dp) { } ...@@ -60,23 +43,21 @@ static inline void irq_trans_init(struct device_node *dp) { }
static char * __init of_pdt_build_full_name(struct device_node *dp) static char * __init of_pdt_build_full_name(struct device_node *dp)
{ {
static int failsafe_id = 0; /* for generating unique names on failure */ static int failsafe_id = 0; /* for generating unique names on failure */
const char *name;
char path[256];
char *buf; char *buf;
int len; int len;
if (of_pdt_prom_ops->pkg2path(dp->phandle, NULL, 0, &len)) if (!of_pdt_prom_ops->pkg2path(dp->phandle, path, sizeof(path), &len)) {
goto failsafe; name = kbasename(path);
buf = prom_early_alloc(strlen(name) + 1);
buf = prom_early_alloc(len + 1); strcpy(buf, name);
if (of_pdt_prom_ops->pkg2path(dp->phandle, buf, len, &len)) return buf;
goto failsafe; }
return buf;
failsafe: name = of_get_property(dp, "name", &len);
buf = prom_early_alloc(strlen(dp->parent->full_name) + buf = prom_early_alloc(len + 16);
strlen(dp->name) + 16); sprintf(buf, "%s@unknown%i", name, failsafe_id++);
sprintf(buf, "%s/%s@unknown%i",
of_node_is_root(dp->parent) ? "" : dp->parent->full_name,
dp->name, failsafe_id++);
pr_err("%s: pkg2path failed; assigning %s\n", __func__, buf); pr_err("%s: pkg2path failed; assigning %s\n", __func__, buf);
return buf; return buf;
} }
...@@ -181,6 +162,8 @@ static struct device_node * __init of_pdt_create_node(phandle node, ...@@ -181,6 +162,8 @@ static struct device_node * __init of_pdt_create_node(phandle node,
dp->properties = of_pdt_build_prop_list(node); dp->properties = of_pdt_build_prop_list(node);
dp->full_name = of_pdt_build_full_name(dp);
irq_trans_init(dp); irq_trans_init(dp);
return dp; return dp;
...@@ -204,8 +187,6 @@ static struct device_node * __init of_pdt_build_tree(struct device_node *parent, ...@@ -204,8 +187,6 @@ static struct device_node * __init of_pdt_build_tree(struct device_node *parent,
ret = dp; ret = dp;
prev_sibling = dp; prev_sibling = dp;
dp->full_name = of_pdt_build_full_name(dp);
dp->child = of_pdt_build_tree(dp, of_pdt_prom_ops->getchild(node)); dp->child = of_pdt_build_tree(dp, of_pdt_prom_ops->getchild(node));
if (of_pdt_build_more) if (of_pdt_build_more)
...@@ -228,9 +209,6 @@ void __init of_pdt_build_devicetree(phandle root_node, struct of_pdt_ops *ops) ...@@ -228,9 +209,6 @@ void __init of_pdt_build_devicetree(phandle root_node, struct of_pdt_ops *ops)
of_pdt_prom_ops = ops; of_pdt_prom_ops = ops;
of_root = of_pdt_create_node(root_node, NULL); of_root = of_pdt_create_node(root_node, NULL);
#if defined(CONFIG_SPARC)
of_root->path_component_name = "";
#endif
of_root->full_name = "/"; of_root->full_name = "/";
of_root->child = of_pdt_build_tree(of_root, of_root->child = of_pdt_build_tree(of_root,
......
...@@ -199,10 +199,11 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry ...@@ -199,10 +199,11 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry
child = dp->child; child = dp->child;
while (child) { while (child) {
int n = strlen(child->path_component_name); const char *node_name = kbasename(child->full_name);
int n = strlen(node_name);
if (len == n && if (len == n &&
!strncmp(child->path_component_name, name, len)) { !strncmp(node_name, name, len)) {
ent_type = op_inode_node; ent_type = op_inode_node;
ent_data.node = child; ent_data.node = child;
ino = child->unique_id; ino = child->unique_id;
...@@ -245,7 +246,7 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry ...@@ -245,7 +246,7 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry
set_nlink(inode, 2); set_nlink(inode, 2);
break; break;
case op_inode_prop: case op_inode_prop:
if (!strcmp(dp->name, "options") && (len == 17) && if (of_node_name_eq(dp, "options") && (len == 17) &&
!strncmp (name, "security-password", 17)) !strncmp (name, "security-password", 17))
inode->i_mode = S_IFREG | S_IRUSR | S_IWUSR; inode->i_mode = S_IFREG | S_IRUSR | S_IWUSR;
else else
...@@ -293,8 +294,8 @@ static int openpromfs_readdir(struct file *file, struct dir_context *ctx) ...@@ -293,8 +294,8 @@ static int openpromfs_readdir(struct file *file, struct dir_context *ctx)
} }
while (child) { while (child) {
if (!dir_emit(ctx, if (!dir_emit(ctx,
child->path_component_name, kbasename(child->full_name),
strlen(child->path_component_name), strlen(kbasename(child->full_name)),
child->unique_id, DT_DIR)) child->unique_id, DT_DIR))
goto out; goto out;
......
...@@ -66,7 +66,6 @@ struct device_node { ...@@ -66,7 +66,6 @@ struct device_node {
unsigned long _flags; unsigned long _flags;
void *data; void *data;
#if defined(CONFIG_SPARC) #if defined(CONFIG_SPARC)
const char *path_component_name;
unsigned int unique_id; unsigned int unique_id;
struct of_irq_controller *irq_trans; struct of_irq_controller *irq_trans;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment