sparc: OF name and device_type rework
Subsystems (2)
Rob Herring
maintainercover 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.
Rob
Rob Herring (8):
fs/openpromfs: use full_name instead of path_component_name
of: Drop full path from Sparc PDT full_name
sparc: prom: use property "name" directly to construct node names
sparc: Convert to using %pOF instead of full_name
sparc: Convert to using %pOFn instead of device_node.name
sparc: Use of_node_name_eq for node name comparisons
sparc: Remove unused leon_trans_init
sparc: Use device_type helpers to access the node type
arch/sparc/include/asm/leon.h | 1 - arch/sparc/kernel/auxio_64.c | 11 ++-- arch/sparc/kernel/central.c | 2 +- arch/sparc/kernel/chmc.c | 8 +-- arch/sparc/kernel/irq_64.c | 2 +- arch/sparc/kernel/leon_kernel.c | 14 ------ arch/sparc/kernel/of_device_32.c | 19 ++++--- arch/sparc/kernel/of_device_64.c | 56 ++++++++++----------- arch/sparc/kernel/of_device_common.c | 4 +- arch/sparc/kernel/pci.c | 44 +++++++--------- arch/sparc/kernel/pci_sabre.c | 2 +- arch/sparc/kernel/power.c | 4 +- arch/sparc/kernel/process_32.c | 2 +- arch/sparc/kernel/prom_32.c | 44 ++++++++-------- arch/sparc/kernel/prom_64.c | 75 +++++++++++++++------------- arch/sparc/kernel/prom_irqtrans.c | 20 ++++---- arch/sparc/kernel/reboot.c | 3 +- arch/sparc/kernel/sbus.c | 4 +- arch/sparc/kernel/sun4d_irq.c | 14 +++--- arch/sparc/kernel/time_64.c | 16 +++--- arch/sparc/kernel/vio.c | 9 ++-- drivers/of/pdt.c | 26 ++-------- fs/openpromfs/inode.c | 9 ++-- include/linux/of.h | 1 - 24 files changed, 174 insertions(+), 216 deletions(-)
--
2.19.1
Rob Herring
maintainerPATCH 1/8 fs/openpromfs: use full_name instead of path_component_name
In preparation to remove struct device_node.path_component_name, use full_name instead. kbasename is used so full_name can be used whether it is the full path or just the node's name and unit-address.
--- fs/openpromfs/inode.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
fs/openpromfs/inode.c +5 -4
@@ -199,10 +199,11 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry child = dp->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 && - !strncmp (child->path_component_name, name, len)) { + !strncmp (node_name, name, len)) { ent_type = op_inode_node; ent_data.node = child; ino = child->unique_id;
@@ -293,8 +294,8 @@ static int openpromfs_readdir(struct file *file, struct dir_context *ctx) }while (child) {if (!dir_emit (ctx, - child->path_component_name, -strlen (child->path_component_name), +kbasename (child->full_name), +strlen (kbasename (child->full_name)), child->unique_id,DT_DIR )) goto out;
Signature · 1 line
2.19.1
Rob Herring
maintainerPATCH 2/8 of: Drop full path from Sparc PDT full_name
In reply to Rob HerringNow that there are no more users of path_component_name outside of the PDT code and users of device_node.full_name are converted to use "%pOF" printf specifier, we can align Sparc with other arches and store just the base node name and unit address in full_name. This makes path_component_name redundant, so it can be removed.
As full_name is used by printf specifiers, set it as early as possible.
--- drivers/of/pdt.c | 26 +++----------------------- include/linux/of.h | 1 - 2 files changed, 3 insertions(+), 24 deletions(-)
drivers/of/pdt.c +3 -23
@@ -32,24 +32,7 @@ unsigned int of_pdt_unique_id __initdata;static char *__init of_pdt_build_full_name (struct device_node *dp) { -int len, ourlen, plen; -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; +return build_path_component (dp); }#else /* CONFIG_SPARC */
@@ -181,6 +164,8 @@ static struct device_node * __init of_pdt_create_node(phandle node, dp->properties =of_pdt_build_prop_list (node); + dp->full_name =of_pdt_build_full_name (dp); +irq_trans_init (dp);return dp;
@@ -204,8 +189,6 @@ static struct device_node * __init of_pdt_build_tree(struct device_node *parent, ret = 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));if (of_pdt_build_more)
@@ -228,9 +211,6 @@ void __init of_pdt_build_devicetree(phandle root_node, struct of_pdt_ops *ops) of_pdt_prom_ops = ops; 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->child = of_pdt_build_tree(of_root,
include/linux/of.h +0 -1
@@ -66,7 +66,6 @@ struct device_node {unsigned long _flags;void *data;#if defined(CONFIG_SPARC ) -const char *path_component_name;unsigned int unique_id;struct of_irq_controller *irq_trans;#endif
Signature · 1 line
2.19.1
David Miller
maintainerRe: [PATCH 2/8] of: Drop full path from Sparc PDT full_name
From: Rob Herring <[email protected]>
Date: Wed, 7 Nov 2018 16:31:45 -0600
Quoted 16 lines
drivers/of/pdt.c +0
-12@@ -32,24 +32,7 @@ unsigned int of_pdt_unique_id __initdata;static char *__init of_pdt_build_full_name (struct device_node *dp) { -int len, ourlen, plen; -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)) {
drivers/of/pdt.c unsigned int of_pdt_unique_id __initdata; · line 38
Quoted 10 lines
drivers/of/pdt.c +1
-6-strcpy (n + plen,"/" ); - plen++; - } -strcpy (n + plen, dp->path_component_name); - -return n; + return build_path_component(dp); }#else /* CONFIG_SPARC */
Hmmm, shouldn't this be doing what the non-SPARC version of of_pdt_build_full_name() does which is to return the component string appended to the parent's full_name?
You're just returning the component string here.
Rob Herring
maintainerRe: [PATCH 2/8] of: Drop full path from Sparc PDT full_name
Quoted 29 lines · David Miller
From: Rob Herring <[email protected]>
Date: Wed, 7 Nov 2018 16:31:45 -0600Quoted 25 lines
drivers/of/pdt.c +1
-18@@ -32,24 +32,7 @@ unsigned int of_pdt_unique_id __initdata;static char *__init of_pdt_build_full_name (struct device_node *dp) { -int len, ourlen, plen; -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; +return build_path_component (dp); }
Quoted 7 lines
drivers/of/pdt.c unsigned int of_pdt_unique_id __initdata; · line 38
Quoted 1 line
drivers/of/pdt.c +0
-0#else /* CONFIG_SPARC */ Hmmm, shouldn't this be doing what the non-SPARC version of
of_pdt_build_full_name()does which is to return the component string appended to the parent'sfull_name?You're just returning the component string here.
That is the intent. With this change we stop storing the full path for every node. Everywhere that needs the full path, generates it with the %pOF printf specifier. Other than users in arch/sparc converted in this series all the users of full_name have been converted already or use kbasename(full_name) so they work either way. BTW, I've found a couple more, so I'll be sending you a v2.
And of_pdt_build_full_name for !SPARC does need to be converted too, but I'll do that separately.
Rob
David Miller
maintainerRe: [PATCH 2/8] of: Drop full path from Sparc PDT full_name
From: Rob Herring <[email protected]>
Date: Fri, 9 Nov 2018 14:30:01 -0600
Quoted 9 lines
That is the intent. With this change we stop storing the full path for every node. Everywhere that needs the full path, generates it with the %pOF printf specifier. Other than users in
arch/sparcconverted in this series all the users offull_namehave been converted already or usekbasename(full_name)so they work either way. BTW, I've found a couple more, so I'll be sending you a v2.And
of_pdt_build_full_namefor !SPARC does need to be converted too, but I'll do that separately.
I would think that, for correctness, you'd need to adjust both functions at the same time, no?
Rob Herring
maintainerPATCH 3/8 sparc: prom: use property "name" directly to construct node names
In reply to Rob HerringIn preparation to remove direct accesses to the device_node.name pointer, retrieve the node name from the "name" property instead.
--- arch/sparc/kernel/prom_32.c | 20 ++++++++++------ arch/sparc/kernel/prom_64.c | 47 +++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 25 deletions(-)
arch/sparc/kernel/prom_32.c +13 -7
@@ -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) { +const char *name =of_get_property (dp,"name" ,NULL );struct linux_prom_registers *regs;struct property *rprop;
@@ -69,13 +70,14 @@ static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf) regs = rprop->value;sprintf (tmp_buf,"%s@%x,%x" , - dp->name, + name, regs->which_io, regs->phys_addr); }/* "name@slot,offset" */ 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 property *prop;
@@ -85,7 +87,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) regs = prop->value;sprintf (tmp_buf,"%s@%x,%x" , - dp->name, + name, regs->which_io, regs->phys_addr); }
@@ -93,6 +95,7 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf)/* "name@devnum[,func]" */ 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 property *prop;unsigned int devfn;
@@ -105,12 +108,12 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) devfn = (regs->phys_hi >>8 ) &0xff ;if (devfn &0x07 ) {sprintf (tmp_buf,"%s@%x,%x" , - dp->name, + name, devfn >>3 , devfn &0x07 ); }else {sprintf (tmp_buf,"%s@%x" , - dp->name, + name, devfn >>3 ); } }
@@ -118,6 +121,7 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf)/* "name@addrhi,addrlo" */ 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 property *prop;
@@ -128,13 +132,14 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) regs = prop->value;sprintf (tmp_buf,"%s@%x,%x" , - dp->name, + name, regs->which_io, regs->phys_addr); }/* "name:vendor:device@irq,addrlo" */ 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;unsigned int *intr, *device, *vendor, reg0;struct property *prop;
@@ -168,7 +173,7 @@ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) device = prop->value;sprintf (tmp_buf,"%s:%d:%d@%x,%x" , - dp->name, *vendor, *device, + name, *vendor, *device, *intr, reg0); }
@@ -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) { +const char *name =of_get_property (dp,"name" ,NULL );char tmp_buf[64 ], *n; tmp_buf[0 ] ='\0' ;__build_path_component (dp, tmp_buf);if (tmp_buf[0 ] ='\0' ) -strcpy (tmp_buf, dp->name); +strcpy (tmp_buf, name); n =prom_early_alloc (strlen (tmp_buf) +1 );strcpy (n, tmp_buf);
arch/sparc/kernel/prom_64.c +29 -18
202 lines not on this page · raw message
Signature · 1 line
2.19.1
David Miller
maintainerRe: [PATCH 3/8] sparc: prom: use property "name" directly to construct node names
From: Rob Herring <[email protected]>
Date: Wed, 7 Nov 2018 16:31:46 -0600
Quoted 6 lines
In preparation to remove direct accesses to the device_node.name pointer, retrieve the node name from the "name" property instead.
Cc "David S. Miller" <[email protected]>Signed-off-by Rob Herring <[email protected]>
On some 32-bit sparcs, the OF runs in non-cached memory.
Sucking in the OF device tree take a signficant amount of the boot time on such systems.
And these changes are going to make it even slower.
Please just put a wrapper around dp->name or whatever and use that, instead of making more get property OF calls which can be very expensive.
Rob Herring
maintainerRe: [PATCH 3/8] sparc: prom: use property "name" directly to construct node names
Quoted 13 lines · David Miller
From: Rob Herring <[email protected]>
Date: Wed, 7 Nov 2018 16:31:46 -0600Quoted 6 lines
In preparation to remove direct accesses to the device_node.name pointer, retrieve the node name from the "name" property instead.
Cc "David S. Miller" <[email protected]>Signed-off-by Rob Herring <[email protected]>On some 32-bit sparcs, the OF runs in non-cached memory.
Quoted 8 lines
Sucking in the OF device tree take a signficant amount of the boot time on such systems.
And these changes are going to make it even slower.
Please just put a wrapper around
dp->nameor whatever and use that, instead of making more get property OF calls which can be very expensive.
It's not making calls into OF. It is retrieving the property from the kernel's copy of the DT (allocated by memblock). So the only difference is we have to walk the struct property list to find "name". That's perhaps offset by the fact that we'll be doing one less property retrieval from OF when this is all done. Right now, we retrieve "name" from OF twice per node.
Rob
David Miller
maintainerRe: [PATCH 3/8] sparc: prom: use property "name" directly to construct node names
From: Rob Herring <[email protected]>
Date: Fri, 9 Nov 2018 07:02:46 -0600
Quoted 23 lines · David Miller
Quoted 13 lines
From: Rob Herring <[email protected]>
Date: Wed, 7 Nov 2018 16:31:46 -0600Quoted 6 lines
In preparation to remove direct accesses to the device_node.name pointer, retrieve the node name from the "name" property instead.
Cc "David S. Miller" <[email protected]>Signed-off-by Rob Herring <[email protected]>On some 32-bit sparcs, the OF runs in non-cached memory.
Quoted 8 lines
Sucking in the OF device tree take a signficant amount of the boot time on such systems.
And these changes are going to make it even slower.
Please just put a wrapper around
dp->nameor whatever and use that, instead of making more get property OF calls which can be very expensive.
Quoted 6 lines
It's not making calls into OF. It is retrieving the property from the kernel's copy of the DT (allocated by memblock). So the only difference is we have to walk the struct property list to find "name". That's perhaps offset by the fact that we'll be doing one less property retrieval from OF when this is all done. Right now, we retrieve "name" from OF twice per node.
Ok, now I understand, thanks.
Rob Herring
maintainerPATCH 4/8 sparc: Convert to using %pOF instead of full_name
In reply to Rob HerringNow that we have a custom printf format specifier, convert users of full_name to use %pOF instead. This is preparation to remove storing of the full path string for each node.
--- arch/sparc/kernel/auxio_64.c | 3 +-- arch/sparc/kernel/chmc.c | 8 +++---- arch/sparc/kernel/of_device_32.c | 7 +++---- arch/sparc/kernel/of_device_64.c | 36 +++++++++++++++----------------- arch/sparc/kernel/pci.c | 31 +++++++++++++-------------- arch/sparc/kernel/prom_32.c | 4 ++-- arch/sparc/kernel/sbus.c | 4 ++-- arch/sparc/kernel/sun4d_irq.c | 8 +++---- arch/sparc/kernel/time_64.c | 12 +++++------ arch/sparc/kernel/vio.c | 2 +- 10 files changed, 55 insertions(+), 60 deletions(-)
arch/sparc/kernel/auxio_64.c +1 -2
@@ -123,8 +123,7 @@ static int auxio_probe(struct platform_device *dev)if (!auxio_register)return -ENODEV ; -printk (KERN_INFO "AUXIO: Found device at %s\n" , - dp->full_name); +printk (KERN_INFO "AUXIO: Found device at %pOF\n" , dp);if (auxio_devtype =AUXIO_TYPE_EBUS )auxio_set_led (AUXIO_LED_ON );
arch/sparc/kernel/chmc.c +4 -4
@@ -464,8 +464,8 @@ static int jbusmc_probe(struct platform_device *op)mc_list_add (&p->list); - printk(KERN_INFO PFX "UltraSPARC-IIIi memory controller at %s\n", - op->dev.of_node->full_name); + printk(KERN_INFO PFX "UltraSPARC-IIIi memory controller at %pOF\n", + op->dev.of_node);dev_set_drvdata (&op->dev, p);
@@ -747,8 +747,8 @@ static int chmc_probe(struct platform_device *op)mc_list_add (&p->list); - printk(KERN_INFO PFX "UltraSPARC-III memory controller at %s [%s]\n", - dp->full_name, + printk(KERN_INFO PFX "UltraSPARC-III memory controller at %pOF [%s]\n", + dp, (p->layout_size ? "ACTIVE" : "INACTIVE"));dev_set_drvdata (&op->dev, p);
arch/sparc/kernel/of_device_32.c +3 -4
@@ -324,8 +324,8 @@ static void __init build_device_resources(struct platform_device *op,memset (r,0 ,sizeof (*r));if (of_resource_verbose) -printk ("%s reg[%d] -> %llx\n" , - op->dev.of_node->full_name, index, +printk ("%pOF reg[%d] -> %llx\n" , + op->dev.of_node, index, result);if (result !=OF_BAD_ADDR ) {
@@ -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;if (of_device_register (op)) { -printk ("%s: Could not register of device.\n" , - dp->full_name); +printk ("%pOF: Could not register of device.\n" , dp);kfree (op); op =NULL ; }
arch/sparc/kernel/of_device_64.c +17 -19
@@ -341,9 +341,9 @@ static void __init build_device_resources(struct platform_device *op,/* Prevent overrunning the op->resources[] array. */ 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" , - op->dev.of_node->full_name, num_reg,PROMREG_MAX ); + op->dev.of_node, num_reg,PROMREG_MAX ); num_reg =PROMREG_MAX ; }
@@ -401,8 +401,8 @@ static void __init build_device_resources(struct platform_device *op,memset (r,0 ,sizeof (*r));if (of_resource_verbose) -printk ("%s reg[%d] -> %llx\n" , - op->dev.of_node->full_name, index, +printk ("%pOF reg[%d] -> %llx\n" , + op->dev.of_node, index, result);if (result !=OF_BAD_ADDR ) {
@@ -548,8 +548,8 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, dp->irq_trans->data);if (of_irq_verbose) -printk ("%s: direct translate %x --> %x\n" , - dp->full_name, orig_irq, irq); +printk ("%pOF: direct translate %x --> %x\n" , + dp, orig_irq, irq); goto out; }
@@ -579,10 +579,9 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, &irq);if (of_irq_verbose) -printk ("%s: Apply [%s:%x] imap --> [%s:%x]\n" , - op->dev.of_node->full_name, - pp->full_name, this_orig_irq, -of_node_full_name (iret), irq); +printk ("%pOF: Apply [%pOF:%x] imap --> [%pOF:%x]\n" , + op->dev.of_node, + pp, this_orig_irq, iret, irq);if (!iret)break ;
@@ -597,10 +596,10 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, irq =pci_irq_swizzle (dp, pp, irq);if (of_irq_verbose) -printk ("%s: PCI swizzle [%s] " +printk ("%pOF: PCI swizzle [%pOF] " "%x --> %x\n" , - op->dev.of_node->full_name, - pp->full_name, this_orig_irq, + op->dev.of_node, + pp, this_orig_irq, irq); }
@@ -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, ip->irq_trans->data);if (of_irq_verbose) -printk ("%s: Apply IRQ trans [%s] %x --> %x\n" , - op->dev.of_node->full_name, ip->full_name, orig_irq, irq); +printk ("%pOF: Apply IRQ trans [%pOF] %x --> %x\n" , + op->dev.of_node, ip, orig_irq, irq); out: nid =of_node_to_nid (dp);
@@ -656,9 +655,9 @@ static struct platform_device * __init scan_one_device(struct device_node *dp,/* Prevent overrunning the op->irqs[] array. */ 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" , - dp->full_name, op->archdata.num_irqs,PROMINTR_MAX ); + dp, op->archdata.num_irqs,PROMINTR_MAX ); op->archdata.num_irqs =PROMINTR_MAX ; }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, op->dev.dma_mask = &op->dev.coherent_dma_mask;if (of_device_register (op)) { -printk ("%s: Could not register of device.\n" , - dp->full_name); +printk ("%pOF: Could not register of device.\n" , dp);kfree (op); op =NULL ; }
arch/sparc/kernel/pci.c +15 -16
@@ -431,13 +431,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm,u64 size;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 */ busrange =of_get_property (node,"bus-range" , &len);if (busrange =NULL || len !=8 ) { -pci_info (dev,"Can't get bus-range for PCI-PCI bridge %s\n" , - node->full_name); +pci_info (dev,"Can't get bus-range for PCI-PCI bridge %pOF\n" , + node);return ; }
@@ -455,8 +455,8 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm, bus =pci_add_new_bus (dev->bus, dev, busrange[0 ]);if (!bus) { -pci_err (dev,"Failed to create pci bus for %s\n" , - node->full_name); +pci_err (dev,"Failed to create pci bus for %pOF\n" , + node);return ; }
@@ -512,13 +512,13 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm, res = bus->resource[0 ];if (res->flags) {pci_err (dev,"ignoring extra I/O range" -" for bridge %s\n" , node->full_name); +" for bridge %pOF\n" , node);continue ; } }else {if (i >=PCI_NUM_RESOURCES -PCI_BRIDGE_RESOURCES ) {pci_err (dev,"too many memory ranges" -" for bridge %s\n" , node->full_name); +" for bridge %pOF\n" , node);continue ; } res = bus->resource[i];
@@ -554,14 +554,14 @@ static void pci_of_scan_bus(struct pci_pbm_info *pbm,struct pci_dev *dev;if (ofpci_verbose) -pci_info (bus,"scan_bus[%s] bus no %d\n" , - node->full_name, bus->number); +pci_info (bus,"scan_bus[%pOF] bus no %d\n" , + node, bus->number); child =NULL ; prev_devfn =-1 ;while ((child =of_get_next_child (node, child)) !=NULL ) {if (ofpci_verbose) -pci_info (bus," * %s\n" , child->full_name); +pci_info (bus," * %pOF\n" , child); reg =of_get_property (child,"reg" , ®len);if (reg =NULL || reglen <20 )continue ;
@@ -598,7 +598,7 @@ show_pciobppath_attr(struct device * dev, struct device_attribute * attr, char * pdev =to_pci_dev (dev); 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);
@@ -698,7 +698,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,struct device_node *node = pbm->op->dev.of_node;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, pbm->io_offset);
@@ -714,8 +714,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, pbm, &resources);if (!bus) { -printk (KERN_ERR "Failed to create bus for %s\n" , - node->full_name); +printk (KERN_ERR "Failed to create bus for %pOF\n" , node);pci_free_resource_list (&resources);return NULL ; }
@@ -1111,8 +1110,8 @@ static void pci_bus_slot_names(struct device_node *node, struct pci_bus *bus) sp = prop->names;if (ofpci_verbose) -pci_info (bus,"Making slots for [%s] mask[0x%02x]\n" , - node->full_name, mask); +pci_info (bus,"Making slots for [%pOF] mask[0x%02x]\n" , + node, mask); i =0 ;while (mask) {
arch/sparc/kernel/prom_32.c +2 -2
@@ -261,7 +261,7 @@ void __init of_console_init(void) } of_console_device = dp; -strcpy (of_console_path, dp->full_name); +sprintf (of_console_path,"%pOF" , dp);if (!strcmp (type,"serial" )) {strcat (of_console_path, (skip ?":b" :":a" ));
@@ -301,7 +301,7 @@ void __init of_console_init(void) of_console_device = dp;if (prom_vers =PROM_V2 ) { -strcpy (of_console_path, dp->full_name); +sprintf (of_console_path,"%pOF" , dp);switch (*romvec->pv_stdout) {case PROMDEV_TTYA :strcat (of_console_path,":a" );
arch/sparc/kernel/sbus.c +2 -2
@@ -67,8 +67,8 @@ void sbus_set_sbus64(struct device *dev, int bursts) regs =of_get_property (op->dev.of_node,"reg" ,NULL );if (!regs) { -printk (KERN_ERR "sbus_set_sbus64: Cannot find regs for %s\n" , - op->dev.of_node->full_name); +printk (KERN_ERR "sbus_set_sbus64: Cannot find regs for %pOF\n" , + op->dev.of_node);return ; } slot = regs->which_io;
arch/sparc/kernel/sun4d_irq.c +4 -4
@@ -361,15 +361,15 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op,* lacks a "board#" property, something is very wrong. */ if (!bus->parent ||strcmp (bus->parent->name, bus_connection)) { -printk (KERN_ERR "%s: Error, parent is not %s.\n" , - bus->full_name, bus_connection); +printk (KERN_ERR "%pOF: Error, parent is not %s.\n" , + bus, bus_connection); goto err_out; } board_parent = bus->parent; board =of_getintprop_default (board_parent,"board#" ,-1 );if (board =-1 ) { -printk (KERN_ERR "%s: Error, lacks board# property.\n" , - board_parent->full_name); +printk (KERN_ERR "%pOF: Error, lacks board# property.\n" , + board_parent); goto err_out; }
arch/sparc/kernel/time_64.c +6 -6
@@ -445,8 +445,8 @@ static int rtc_probe(struct platform_device *op) {struct resource *r; -printk (KERN_INFO "%s: RTC regs at 0x%llx\n" , - op->dev.of_node->full_name, op->resource[0 ].start); +printk (KERN_INFO "%pOF: RTC regs at 0x%llx\n" , + op->dev.of_node, op->resource[0 ].start);/* The CMOS RTC driver only accepts IORESOURCE_IO, so cons * up a fake resource so that the probe works for all cases.
@@ -501,8 +501,8 @@ static struct platform_device rtc_bq4802_device = {static int bq4802_probe (struct platform_device *op) { -printk (KERN_INFO "%s: BQ4802 regs at 0x%llx\n" , - op->dev.of_node->full_name, op->resource[0 ].start); +printk (KERN_INFO "%pOF: BQ4802 regs at 0x%llx\n" , + op->dev.of_node, op->resource[0 ].start); rtc_bq4802_device.resource = &op->resource[0 ];return platform_device_register (&rtc_bq4802_device);
@@ -565,8 +565,8 @@ static int mostek_probe(struct platform_device *op) strcmp(dp->parent->parent->name, "central") != 0)return -ENODEV ; -printk (KERN_INFO "%s: Mostek regs at 0x%llx\n" , - dp->full_name, op->resource[0 ].start); +printk (KERN_INFO "%pOF: Mostek regs at 0x%llx\n" , + dp, op->resource[0 ].start); m48t59_rtc.resource = &op->resource[0 ];return platform_device_register (&m48t59_rtc);
arch/sparc/kernel/vio.c +1 -1
@@ -193,7 +193,7 @@ show_pciobppath_attr(struct device *dev, struct device_attribute *attr, vdev =to_vio_dev (dev); 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,
Signature · 1 line
2.19.1
Rob Herring
maintainerPATCH 5/8 sparc: Convert to using %pOFn instead of device_node.name
In reply to Rob HerringIn preparation to remove the node name pointer from struct device_node, convert printf users to use the %pOFn format specifier.
This was originally applied for 4.19, but reverted. The problematic changes to prom_{32,64}.c have been dropped.
--- arch/sparc/kernel/auxio_64.c | 4 ++-- arch/sparc/kernel/power.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/sparc/kernel/auxio_64.c +2 -2
@@ -115,8 +115,8 @@ static int auxio_probe(struct platform_device *dev) auxio_devtype =AUXIO_TYPE_SBUS ; size =1 ; }else { -printk ("auxio: Unknown parent bus type [%s]\n" , - dp->parent->name); +printk ("auxio: Unknown parent bus type [%pOFn]\n" , + dp->parent);return -ENODEV ; } auxio_register =of_ioremap (&dev->resource[0 ],0 , size,"auxio" );
arch/sparc/kernel/power.c +2 -2
@@ -41,8 +41,8 @@ static int power_probe(struct platform_device *op) power_reg =of_ioremap (res,0 ,0x4 ,"power" ); -printk (KERN_INFO "%s: Control reg at %llx\n" , - op->dev.of_node->name, res->start); +printk (KERN_INFO "%pOFn: Control reg at %llx\n" , + op->dev.of_node, res->start);if (has_button_interrupt (irq, op->dev.of_node)) { if (request_irq(irq,
Signature · 1 line
2.19.1
Rob Herring
maintainerPATCH 6/8 sparc: Use of_node_name_eq for node name comparisons
In reply to Rob HerringConvert string compares of DT node names to use of_node_name_eq helper instead. This removes direct access to the node name pointer.
--- arch/sparc/kernel/auxio_64.c | 4 ++-- arch/sparc/kernel/central.c | 2 +- arch/sparc/kernel/irq_64.c | 2 +- arch/sparc/kernel/of_device_32.c | 8 ++++---- arch/sparc/kernel/of_device_64.c | 20 ++++++++++---------- arch/sparc/kernel/of_device_common.c | 4 ++-- arch/sparc/kernel/pci.c | 4 ++-- arch/sparc/kernel/pci_sabre.c | 2 +- arch/sparc/kernel/prom_64.c | 4 ++-- arch/sparc/kernel/prom_irqtrans.c | 18 +++++++++--------- arch/sparc/kernel/sun4d_irq.c | 6 +++--- arch/sparc/kernel/time_64.c | 4 ++-- 12 files changed, 39 insertions(+), 39 deletions(-)
arch/sparc/kernel/auxio_64.c +2 -2
@@ -108,10 +108,10 @@ static int auxio_probe(struct platform_device *dev)struct device_node *dp = dev->dev.of_node;unsigned long size; -if (!strcmp (dp->parent->name,"ebus" )) { +if (of_node_name_eq (dp->parent,"ebus" )) { auxio_devtype =AUXIO_TYPE_EBUS ; size =sizeof (u32); - }else if (!strcmp (dp->parent->name,"sbus" )) { + }else if (of_node_name_eq (dp->parent,"sbus" )) { auxio_devtype =AUXIO_TYPE_SBUS ; size =1 ; }else {
arch/sparc/kernel/central.c +1 -1
@@ -168,7 +168,7 @@ static int fhc_probe(struct platform_device *op) 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->pregs = of_ioremap(&op->resource[0], 0,
arch/sparc/kernel/irq_64.c +1 -1
@@ -915,7 +915,7 @@ static void map_prom_timers(void) dp =of_find_node_by_path ("/" ); dp = dp->child;while (dp) { -if (!strcmp (dp->name,"counter-timer" )) +if (of_node_name_eq (dp,"counter-timer" ))break ; dp = dp->sibling; }
arch/sparc/kernel/of_device_32.c +4 -4
@@ -232,10 +232,10 @@ static int __init use_1to1_mapping(struct device_node *pp)* But, we should still pass the translation work up * to the SBUS itself. */ -if (!strcmp (pp->name,"dma" ) || - !strcmp (pp->name,"espdma" ) || - !strcmp (pp->name,"ledma" ) || - !strcmp (pp->name,"lebuffer" )) +if (of_node_name_eq (pp,"dma" ) || +of_node_name_eq (pp,"espdma" ) || +of_node_name_eq (pp,"ledma" ) || +of_node_name_eq (pp,"lebuffer" ))return 0 ;return 1 ;
arch/sparc/kernel/of_device_64.c +10 -10
@@ -46,7 +46,7 @@ EXPORT_SYMBOL(of_iounmap);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 );if (model && !strcmp (model,"SUNW,simba" ))
@@ -77,7 +77,7 @@ static int of_bus_simba_match(struct device_node *np)/* Treat PCI busses lacking ranges property just like * simba. */ -if (!strcmp (np->name,"pci" )) { +if (of_node_name_eq (np,"pci" )) {if (!of_find_property (np,"ranges" ,NULL ))return 1 ; }
@@ -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) { -return !strcmp (np->name,"fhc" ) || - !strcmp (np->name,"central" ); +return of_node_name_eq (np,"fhc" ) || +of_node_name_eq (np,"central" ); }#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)* But, we should still pass the translation work up * to the SBUS itself. */ -if (!strcmp (pp->name,"dma" ) || - !strcmp (pp->name,"espdma" ) || - !strcmp (pp->name,"ledma" ) || - !strcmp (pp->name,"lebuffer" )) +if (of_node_name_eq (pp,"dma" ) || +of_node_name_eq (pp,"espdma" ) || +of_node_name_eq (pp,"ledma" ) || +of_node_name_eq (pp,"lebuffer" ))return 0 ;/* Similarly for all PCI bridges, if we get this far * it lacks a ranges property, and this will include * cases like Simba. */ -if (!strcmp (pp->name,"pci" )) +if (of_node_name_eq (pp,"pci" ))return 0 ;return 1 ;
@@ -591,7 +591,7 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,break ; } }else { -if (!strcmp (pp->name,"pci" )) { +if (of_node_name_eq (pp,"pci" )) {unsigned int this_orig_irq = irq; irq =pci_irq_swizzle (dp, pp, irq);
arch/sparc/kernel/of_device_common.c +2 -2
@@ -151,8 +151,8 @@ int of_bus_sbus_match(struct device_node *np)struct device_node *dp = np;while (dp) { -if (!strcmp (dp->name,"sbus" ) || - !strcmp (dp->name,"sbi" )) +if (of_node_name_eq (dp,"sbus" ) || +of_node_name_eq (dp,"sbi" ))return 1 ;/* Have a look at use_1to1_mapping(). We're trying
arch/sparc/kernel/pci.c +2 -2
@@ -283,7 +283,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, sd->stc = &pbm->stc; sd->numa_node = pbm->numa_node; -if (!strcmp (node->name,"ebus" )) +if (of_node_name_eq (node,"ebus" ))of_propagate_archdata (op); type =of_get_property (node,"device_type" ,NULL );
@@ -336,7 +336,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, dev->error_state = pci_channel_io_normal; dev->dma_mask =0xffffffff ; -if (!strcmp (node->name,"pci" )) { +if (of_node_name_eq (node,"pci" )) {/* a PCI-PCI bridge */ dev->hdr_type =PCI_HEADER_TYPE_BRIDGE ; dev->rom_base_reg =PCI_ROM_ADDRESS1 ;
arch/sparc/kernel/pci_sabre.c +1 -1
@@ -475,7 +475,7 @@ static int sabre_probe(struct platform_device *op)* different ways, inconsistently. */ 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 ; } }
arch/sparc/kernel/prom_64.c +2 -2
@@ -335,8 +335,8 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)ebus_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->name,"usb" ) || - !strcmp (parent->name,"hub" )) { +if (of_node_name_eq (parent,"usb" ) || +of_node_name_eq (parent,"hub" )) {usb_path_component (dp, tmp_buf);return ; }
arch/sparc/kernel/prom_irqtrans.c +9 -9
@@ -725,11 +725,11 @@ static unsigned int central_build_irq(struct device_node *dp,unsigned long imap, iclr;u32 tmp; -if (!strcmp (dp->name,"eeprom" )) { +if (of_node_name_eq (dp,"eeprom" )) { res = ¢ral_op->resource[5 ]; - }else if (!strcmp (dp->name,"zs" )) { + }else if (of_node_name_eq (dp,"zs" )) { res = ¢ral_op->resource[4 ]; - }else if (!strcmp (dp->name,"clock-board" )) { + }else if (of_node_name_eq (dp,"clock-board" )) { res = ¢ral_op->resource[3 ]; }else {return ino;
@@ -824,19 +824,19 @@ void __init irq_trans_init(struct device_node *dp) }#endif #ifdef CONFIG_SBUS -if (!strcmp (dp->name,"sbus" ) || - !strcmp (dp->name,"sbi" )) { +if (of_node_name_eq (dp,"sbus" ) || +of_node_name_eq (dp,"sbi" )) {sbus_irq_trans_init (dp);return ; }#endif -if (!strcmp (dp->name,"fhc" ) && - !strcmp (dp->parent->name,"central" )) { +if (of_node_name_eq (dp,"fhc" ) && +of_node_name_eq (dp->parent,"central" )) {central_irq_trans_init (dp);return ; } -if (!strcmp (dp->name,"virtual-devices" ) || - !strcmp (dp->name,"niu" )) { +if (of_node_name_eq (dp,"virtual-devices" ) || +of_node_name_eq (dp,"niu" )) {sun4v_vdev_irq_trans_init (dp);return ; }
arch/sparc/kernel/sun4d_irq.c +3 -3
@@ -335,12 +335,12 @@ static unsigned int sun4d_build_device_irq(struct platform_device *op, irq = real_irq;while (bus) { -if (!strcmp (bus->name,"sbi" )) { +if (of_node_name_eq (bus,"sbi" )) { bus_connection ="io-unit" ;break ; } -if (!strcmp (bus->name,"bootbus" )) { +if (of_node_name_eq (bus,"bootbus" )) { bus_connection ="cpu-unit" ;break ; }
@@ -360,7 +360,7 @@ 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 * 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 "%pOF: Error, parent is not %s.\n" , bus, bus_connection); goto err_out;
arch/sparc/kernel/time_64.c +2 -2
@@ -561,8 +561,8 @@ static int mostek_probe(struct platform_device *op)/* On an Enterprise system there can be multiple mostek clocks. * We should only match the one that is on the central FHC bus. */ -if (!strcmp (dp->parent->name,"fhc" ) && -strcmp (dp->parent->parent->name,"central" ) !=0 ) +if (of_node_name_eq (dp->parent,"fhc" ) && + !of_node_name_eq (dp->parent->parent,"central" ))return -ENODEV ; printk(KERN_INFO "%pOF: Mostek regs at 0x%llx\n",
Signature · 1 line
2.19.1
Rob Herring
maintainerPATCH 7/8 sparc: Remove unused leon_trans_init
In reply to Rob HerringThe function leon_trans_init is unused. Remove it and save us from figuring out what to do with a '<NULL>' node name.
--- arch/sparc/include/asm/leon.h | 1 - arch/sparc/kernel/leon_kernel.c | 14 -------------- 2 files changed, 15 deletions(-)
arch/sparc/include/asm/leon.h +0 -1
@@ -225,7 +225,6 @@ void leon_update_virq_handling(unsigned int virq,irq_flow_handler_t flow_handler, const char *name, int do_ack);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 init_leon (void );void poke_leonsparc (void );
arch/sparc/kernel/leon_kernel.c +0 -14
@@ -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 void leon_clear_profile_irq (int cpu) {
Signature · 1 line
2.19.1
Rob Herring
maintainerPATCH 8/8 sparc: Use device_type helpers to access the node type
In reply to Rob HerringRemove directly accessing device_node.type pointer and use the accessors instead. This will eventually allow removing the type pointer.
Replace the open coded iterating over child nodes with for_each_child_of_node() while we're here.
--- arch/sparc/kernel/of_device_32.c | 4 ++-- arch/sparc/kernel/pci.c | 9 ++------- arch/sparc/kernel/process_32.c | 2 +- arch/sparc/kernel/prom_32.c | 20 +++++++------------- arch/sparc/kernel/prom_64.c | 24 +++++++++--------------- arch/sparc/kernel/prom_irqtrans.c | 2 +- arch/sparc/kernel/reboot.c | 3 ++- arch/sparc/kernel/vio.c | 7 ++----- 8 files changed, 26 insertions(+), 45 deletions(-)
arch/sparc/kernel/of_device_32.c +2 -2
@@ -22,7 +22,7 @@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 * PCI bridge lacks a ranges property. We * 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)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,
arch/sparc/kernel/pci.c +2 -7
@@ -267,7 +267,6 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,struct dev_archdata *sd;struct platform_device *op;struct pci_dev *dev; -const char *type;u32 class; dev =pci_alloc_dev (bus);
@@ -286,13 +285,9 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,if (of_node_name_eq (node,"ebus" ))of_propagate_archdata (op); - type =of_get_property (node,"device_type" ,NULL ); -if (type =NULL ) - type ="" ; -if (ofpci_verbose)pci_info (bus," create device, devfn: %x, type: %s\n" , - devfn, type); + devfn,of_node_get_device_type (node)); dev->sysdata = node; dev->dev.parent = bus->bridge;
@@ -340,7 +335,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,/* a PCI-PCI bridge */ dev->hdr_type =PCI_HEADER_TYPE_BRIDGE ; 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 ; }else { dev->hdr_type =PCI_HEADER_TYPE_NORMAL ;
arch/sparc/kernel/process_32.c +1 -1
@@ -110,7 +110,7 @@ void machine_restart(char * cmd)void machine_power_off (void ) {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); power_register |=AUXIO_POWER_OFF ;sbus_writeb (power_register, auxio_power_register);
arch/sparc/kernel/prom_32.c +7 -13
@@ -182,14 +182,14 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)struct device_node *parent = dp->parent;if (parent !=NULL ) { -if (!strcmp (parent->type,"pci" ) || - !strcmp (parent->type,"pciex" )) +if (of_node_is_type (parent,"pci" ) || +of_node_is_type (parent,"pciex" ))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); -if (!strcmp (parent->type,"ebus" )) +if (of_node_is_type (parent,"ebus" ))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);/* "isa" is handled with platform naming */
@@ -284,15 +284,9 @@ void __init of_console_init(void)prom_halt (); } 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 " "nor serial.\n" );prom_halt ();
arch/sparc/kernel/prom_64.c +9 -15
@@ -318,20 +318,20 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)struct device_node *parent = dp->parent;if (parent !=NULL ) { -if (!strcmp (parent->type,"pci" ) || - !strcmp (parent->type,"pciex" )) { +if (of_node_is_type (parent,"pci" ) || +of_node_is_type (parent,"pciex" )) {pci_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"sbus" )) { +if (of_node_is_type (parent,"sbus" )) {sbus_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"upa" )) { +if (of_node_is_type (parent,"upa" )) {upa_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"ebus" )) { +if (of_node_is_type (parent,"ebus" )) {ebus_path_component (dp, tmp_buf);return ; }
@@ -340,15 +340,15 @@ static void __init __build_path_component(struct device_node *dp, char *tmp_buf)usb_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"i2c" )) { +if (of_node_is_type (parent,"i2c" )) {i2c_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"firewire" )) { +if (of_node_is_type (parent,"firewire" )) {ieee1394_path_component (dp, tmp_buf);return ; } -if (!strcmp (parent->type,"virtual-devices" )) { +if (of_node_is_type (parent,"virtual-devices" )) {vdev_path_component (dp, tmp_buf);return ; }
@@ -605,7 +605,6 @@ void __init of_console_init(void) {char *msg ="OF stdout device is: %s\n" ;struct device_node *dp; -const char *type;phandle node; of_console_path =prom_early_alloc (256 );
@@ -628,13 +627,8 @@ void __init of_console_init(void) } 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 " "nor serial.\n" );prom_halt ();
arch/sparc/kernel/prom_irqtrans.c +1 -1
@@ -193,7 +193,7 @@ static int sabre_device_needs_wsync(struct device_node *dp)* the DMA synchronization handling */ while (parent) { -if (!strcmp (parent->type,"pci" )) +if (of_node_is_type (parent,"pci" ))break ; parent = parent->parent; }
arch/sparc/kernel/reboot.c +2 -1
@@ -7,6 +7,7 @@#include <linux/reboot.h> #include <linux/export.h> #include <linux/pm.h> +#include <linux/of.h> #include <asm/oplib.h> #include <asm/prom.h>
@@ -25,7 +26,7 @@ EXPORT_SYMBOL(pm_power_off);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 ();
arch/sparc/kernel/vio.c +2 -5
@@ -366,12 +366,9 @@ static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,if (parent =NULL ) { dp = cdev_node; }else if (to_vio_dev (parent) = root_vdev) { - dp =of_get_next_child (cdev_node,NULL ); -while (dp) { -if (!strcmp (dp->type, type)) +for_each_child_of_node (cdev_node, dp) { +if (of_node_is_type (dp, type))break ; - - dp =of_get_next_child (cdev_node, dp); } }else { dp =to_vio_dev (parent)->dp;
Signature · 1 line
2.19.1