diff options
Diffstat (limited to 'arch/sparc')
35 files changed, 173 insertions, 284 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index c0015db247ba..ba068c833e5d 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
| @@ -18,6 +18,7 @@ config 64BIT | |||
| 18 | config SPARC | 18 | config SPARC |
| 19 | bool | 19 | bool |
| 20 | default y | 20 | default y |
| 21 | select OF | ||
| 21 | select HAVE_IDE | 22 | select HAVE_IDE |
| 22 | select HAVE_OPROFILE | 23 | select HAVE_OPROFILE |
| 23 | select HAVE_ARCH_KGDB if !SMP || SPARC64 | 24 | select HAVE_ARCH_KGDB if !SMP || SPARC64 |
| @@ -148,9 +149,6 @@ config GENERIC_GPIO | |||
| 148 | config ARCH_NO_VIRT_TO_BUS | 149 | config ARCH_NO_VIRT_TO_BUS |
| 149 | def_bool y | 150 | def_bool y |
| 150 | 151 | ||
| 151 | config OF | ||
| 152 | def_bool y | ||
| 153 | |||
| 154 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC | 152 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC |
| 155 | def_bool y if SPARC64 | 153 | def_bool y if SPARC64 |
| 156 | 154 | ||
diff --git a/arch/sparc/include/asm/device.h b/arch/sparc/include/asm/device.h index d4c452147412..daa6a8a5e9cd 100644 --- a/arch/sparc/include/asm/device.h +++ b/arch/sparc/include/asm/device.h | |||
| @@ -6,18 +6,25 @@ | |||
| 6 | #ifndef _ASM_SPARC_DEVICE_H | 6 | #ifndef _ASM_SPARC_DEVICE_H |
| 7 | #define _ASM_SPARC_DEVICE_H | 7 | #define _ASM_SPARC_DEVICE_H |
| 8 | 8 | ||
| 9 | #include <asm/openprom.h> | ||
| 10 | |||
| 9 | struct device_node; | 11 | struct device_node; |
| 10 | struct of_device; | 12 | struct platform_device; |
| 11 | 13 | ||
| 12 | struct dev_archdata { | 14 | struct dev_archdata { |
| 13 | void *iommu; | 15 | void *iommu; |
| 14 | void *stc; | 16 | void *stc; |
| 15 | void *host_controller; | 17 | void *host_controller; |
| 16 | struct of_device *op; | 18 | struct platform_device *op; |
| 17 | int numa_node; | 19 | int numa_node; |
| 18 | }; | 20 | }; |
| 19 | 21 | ||
| 22 | extern void of_propagate_archdata(struct platform_device *bus); | ||
| 23 | |||
| 20 | struct pdev_archdata { | 24 | struct pdev_archdata { |
| 25 | struct resource resource[PROMREG_MAX]; | ||
| 26 | unsigned int irqs[PROMINTR_MAX]; | ||
| 27 | int num_irqs; | ||
| 21 | }; | 28 | }; |
| 22 | 29 | ||
| 23 | #endif /* _ASM_SPARC_DEVICE_H */ | 30 | #endif /* _ASM_SPARC_DEVICE_H */ |
diff --git a/arch/sparc/include/asm/floppy_64.h b/arch/sparc/include/asm/floppy_64.h index 8fac3ab22f36..6597ce874d78 100644 --- a/arch/sparc/include/asm/floppy_64.h +++ b/arch/sparc/include/asm/floppy_64.h | |||
| @@ -43,7 +43,7 @@ struct sun_flpy_controller { | |||
| 43 | /* You'll only ever find one controller on an Ultra anyways. */ | 43 | /* You'll only ever find one controller on an Ultra anyways. */ |
| 44 | static struct sun_flpy_controller *sun_fdc = (struct sun_flpy_controller *)-1; | 44 | static struct sun_flpy_controller *sun_fdc = (struct sun_flpy_controller *)-1; |
| 45 | unsigned long fdc_status; | 45 | unsigned long fdc_status; |
| 46 | static struct of_device *floppy_op = NULL; | 46 | static struct platform_device *floppy_op = NULL; |
| 47 | 47 | ||
| 48 | struct sun_floppy_ops { | 48 | struct sun_floppy_ops { |
| 49 | unsigned char (*fd_inb) (unsigned long port); | 49 | unsigned char (*fd_inb) (unsigned long port); |
| @@ -548,7 +548,7 @@ static unsigned long __init sun_floppy_init(void) | |||
| 548 | { | 548 | { |
| 549 | static int initialized = 0; | 549 | static int initialized = 0; |
| 550 | struct device_node *dp; | 550 | struct device_node *dp; |
| 551 | struct of_device *op; | 551 | struct platform_device *op; |
| 552 | const char *prop; | 552 | const char *prop; |
| 553 | char state[128]; | 553 | char state[128]; |
| 554 | 554 | ||
| @@ -567,7 +567,7 @@ static unsigned long __init sun_floppy_init(void) | |||
| 567 | } | 567 | } |
| 568 | if (op) { | 568 | if (op) { |
| 569 | floppy_op = op; | 569 | floppy_op = op; |
| 570 | FLOPPY_IRQ = op->irqs[0]; | 570 | FLOPPY_IRQ = op->archdata.irqs[0]; |
| 571 | } else { | 571 | } else { |
| 572 | struct device_node *ebus_dp; | 572 | struct device_node *ebus_dp; |
| 573 | void __iomem *auxio_reg; | 573 | void __iomem *auxio_reg; |
| @@ -593,7 +593,7 @@ static unsigned long __init sun_floppy_init(void) | |||
| 593 | if (state_prop && !strncmp(state_prop, "disabled", 8)) | 593 | if (state_prop && !strncmp(state_prop, "disabled", 8)) |
| 594 | return 0; | 594 | return 0; |
| 595 | 595 | ||
| 596 | FLOPPY_IRQ = op->irqs[0]; | 596 | FLOPPY_IRQ = op->archdata.irqs[0]; |
| 597 | 597 | ||
| 598 | /* Make sure the high density bit is set, some systems | 598 | /* Make sure the high density bit is set, some systems |
| 599 | * (most notably Ultra5/Ultra10) come up with it clear. | 599 | * (most notably Ultra5/Ultra10) come up with it clear. |
| @@ -661,7 +661,7 @@ static unsigned long __init sun_floppy_init(void) | |||
| 661 | config = 0; | 661 | config = 0; |
| 662 | for (dp = ebus_dp->child; dp; dp = dp->sibling) { | 662 | for (dp = ebus_dp->child; dp; dp = dp->sibling) { |
| 663 | if (!strcmp(dp->name, "ecpp")) { | 663 | if (!strcmp(dp->name, "ecpp")) { |
| 664 | struct of_device *ecpp_op; | 664 | struct platform_device *ecpp_op; |
| 665 | 665 | ||
| 666 | ecpp_op = of_find_device_by_node(dp); | 666 | ecpp_op = of_find_device_by_node(dp); |
| 667 | if (ecpp_op) | 667 | if (ecpp_op) |
diff --git a/arch/sparc/include/asm/of_device.h b/arch/sparc/include/asm/of_device.h deleted file mode 100644 index f320246a0586..000000000000 --- a/arch/sparc/include/asm/of_device.h +++ /dev/null | |||
| @@ -1,38 +0,0 @@ | |||
| 1 | #ifndef _ASM_SPARC_OF_DEVICE_H | ||
| 2 | #define _ASM_SPARC_OF_DEVICE_H | ||
| 3 | #ifdef __KERNEL__ | ||
| 4 | |||
| 5 | #include <linux/device.h> | ||
| 6 | #include <linux/of.h> | ||
| 7 | #include <linux/mod_devicetable.h> | ||
| 8 | #include <asm/openprom.h> | ||
| 9 | |||
| 10 | /* | ||
| 11 | * The of_device is a kind of "base class" that is a superset of | ||
| 12 | * struct device for use by devices attached to an OF node and | ||
| 13 | * probed using OF properties. | ||
| 14 | */ | ||
| 15 | struct of_device | ||
| 16 | { | ||
| 17 | struct device dev; | ||
| 18 | struct resource resource[PROMREG_MAX]; | ||
| 19 | unsigned int irqs[PROMINTR_MAX]; | ||
| 20 | int num_irqs; | ||
| 21 | |||
| 22 | void *sysdata; | ||
| 23 | |||
| 24 | int slot; | ||
| 25 | int portid; | ||
| 26 | int clock_freq; | ||
| 27 | }; | ||
| 28 | |||
| 29 | extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name); | ||
| 30 | extern void of_iounmap(struct resource *res, void __iomem *base, unsigned long size); | ||
| 31 | |||
| 32 | extern void of_propagate_archdata(struct of_device *bus); | ||
| 33 | |||
| 34 | /* This is just here during the transition */ | ||
| 35 | #include <linux/of_platform.h> | ||
| 36 | |||
| 37 | #endif /* __KERNEL__ */ | ||
| 38 | #endif /* _ASM_SPARC_OF_DEVICE_H */ | ||
diff --git a/arch/sparc/include/asm/of_platform.h b/arch/sparc/include/asm/of_platform.h deleted file mode 100644 index 90da99059f83..000000000000 --- a/arch/sparc/include/asm/of_platform.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | #ifndef ___ASM_SPARC_OF_PLATFORM_H | ||
| 2 | #define ___ASM_SPARC_OF_PLATFORM_H | ||
| 3 | /* | ||
| 4 | * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. | ||
| 5 | * <benh@kernel.crashing.org> | ||
| 6 | * Modified for Sparc by merging parts of asm/of_device.h | ||
| 7 | * by Stephen Rothwell | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public License | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the License, or (at your option) any later version. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #define of_bus_type of_platform_bus_type /* for compatibility */ | ||
| 17 | |||
| 18 | #endif | ||
diff --git a/arch/sparc/include/asm/parport.h b/arch/sparc/include/asm/parport.h index c333b8d0949b..4f7afa01b2ae 100644 --- a/arch/sparc/include/asm/parport.h +++ b/arch/sparc/include/asm/parport.h | |||
| @@ -103,7 +103,7 @@ static inline unsigned int get_dma_residue(unsigned int dmanr) | |||
| 103 | return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info); | 103 | return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info); |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id *match) | 106 | static int __devinit ecpp_probe(struct platform_device *op, const struct of_device_id *match) |
| 107 | { | 107 | { |
| 108 | unsigned long base = op->resource[0].start; | 108 | unsigned long base = op->resource[0].start; |
| 109 | unsigned long config = op->resource[1].start; | 109 | unsigned long config = op->resource[1].start; |
| @@ -116,7 +116,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id | |||
| 116 | parent = op->dev.of_node->parent; | 116 | parent = op->dev.of_node->parent; |
| 117 | if (!strcmp(parent->name, "dma")) { | 117 | if (!strcmp(parent->name, "dma")) { |
| 118 | p = parport_pc_probe_port(base, base + 0x400, | 118 | p = parport_pc_probe_port(base, base + 0x400, |
| 119 | op->irqs[0], PARPORT_DMA_NOFIFO, | 119 | op->archdata.irqs[0], PARPORT_DMA_NOFIFO, |
| 120 | op->dev.parent->parent, 0); | 120 | op->dev.parent->parent, 0); |
| 121 | if (!p) | 121 | if (!p) |
| 122 | return -ENOMEM; | 122 | return -ENOMEM; |
| @@ -166,7 +166,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id | |||
| 166 | 0, PTR_LPT_REG_DIR); | 166 | 0, PTR_LPT_REG_DIR); |
| 167 | 167 | ||
| 168 | p = parport_pc_probe_port(base, base + 0x400, | 168 | p = parport_pc_probe_port(base, base + 0x400, |
| 169 | op->irqs[0], | 169 | op->archdata.irqs[0], |
| 170 | slot, | 170 | slot, |
| 171 | op->dev.parent, | 171 | op->dev.parent, |
| 172 | 0); | 172 | 0); |
| @@ -192,7 +192,7 @@ out_err: | |||
| 192 | return err; | 192 | return err; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | static int __devexit ecpp_remove(struct of_device *op) | 195 | static int __devexit ecpp_remove(struct platform_device *op) |
| 196 | { | 196 | { |
| 197 | struct parport *p = dev_get_drvdata(&op->dev); | 197 | struct parport *p = dev_get_drvdata(&op->dev); |
| 198 | int slot = p->dma; | 198 | int slot = p->dma; |
| @@ -243,9 +243,7 @@ static struct of_platform_driver ecpp_driver = { | |||
| 243 | 243 | ||
| 244 | static int parport_pc_find_nonpci_ports(int autoirq, int autodma) | 244 | static int parport_pc_find_nonpci_ports(int autoirq, int autodma) |
| 245 | { | 245 | { |
| 246 | of_register_driver(&ecpp_driver, &of_bus_type); | 246 | return of_register_platform_driver(&ecpp_driver); |
| 247 | |||
| 248 | return 0; | ||
| 249 | } | 247 | } |
| 250 | 248 | ||
| 251 | #endif /* !(_ASM_SPARC64_PARPORT_H */ | 249 | #endif /* !(_ASM_SPARC64_PARPORT_H */ |
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.h index f845828ca4c6..291f12575edd 100644 --- a/arch/sparc/include/asm/prom.h +++ b/arch/sparc/include/asm/prom.h | |||
| @@ -43,20 +43,22 @@ extern int of_getintprop_default(struct device_node *np, | |||
| 43 | extern int of_find_in_proplist(const char *list, const char *match, int len); | 43 | extern int of_find_in_proplist(const char *list, const char *match, int len); |
| 44 | #ifdef CONFIG_NUMA | 44 | #ifdef CONFIG_NUMA |
| 45 | extern int of_node_to_nid(struct device_node *dp); | 45 | extern int of_node_to_nid(struct device_node *dp); |
| 46 | #else | 46 | #define of_node_to_nid of_node_to_nid |
| 47 | #define of_node_to_nid(dp) (-1) | ||
| 48 | #endif | 47 | #endif |
| 49 | 48 | ||
| 50 | extern void prom_build_devicetree(void); | 49 | extern void prom_build_devicetree(void); |
| 51 | extern void of_populate_present_mask(void); | 50 | extern void of_populate_present_mask(void); |
| 52 | extern void of_fill_in_cpu_data(void); | 51 | extern void of_fill_in_cpu_data(void); |
| 53 | 52 | ||
| 53 | struct resource; | ||
| 54 | extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name); | ||
| 55 | extern void of_iounmap(struct resource *res, void __iomem *base, unsigned long size); | ||
| 56 | |||
| 54 | /* These routines are here to provide compatibility with how powerpc | 57 | /* These routines are here to provide compatibility with how powerpc |
| 55 | * handles IRQ mapping for OF device nodes. We precompute and permanently | 58 | * handles IRQ mapping for OF device nodes. We precompute and permanently |
| 56 | * register them in the of_device objects, whereas powerpc computes them | 59 | * register them in the platform_device objects, whereas powerpc computes them |
| 57 | * on request. | 60 | * on request. |
| 58 | */ | 61 | */ |
| 59 | extern unsigned int irq_of_parse_and_map(struct device_node *node, int index); | ||
| 60 | static inline void irq_dispose_mapping(unsigned int virq) | 62 | static inline void irq_dispose_mapping(unsigned int virq) |
| 61 | { | 63 | { |
| 62 | } | 64 | } |
diff --git a/arch/sparc/kernel/apc.c b/arch/sparc/kernel/apc.c index b27476caa133..2c0046ecc715 100644 --- a/arch/sparc/kernel/apc.c +++ b/arch/sparc/kernel/apc.c | |||
| @@ -68,7 +68,7 @@ static void apc_swift_idle(void) | |||
| 68 | #endif | 68 | #endif |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | static inline void apc_free(struct of_device *op) | 71 | static inline void apc_free(struct platform_device *op) |
| 72 | { | 72 | { |
| 73 | of_iounmap(&op->resource[0], regs, resource_size(&op->resource[0])); | 73 | of_iounmap(&op->resource[0], regs, resource_size(&op->resource[0])); |
| 74 | } | 74 | } |
| @@ -136,7 +136,7 @@ static const struct file_operations apc_fops = { | |||
| 136 | 136 | ||
| 137 | static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops }; | 137 | static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops }; |
| 138 | 138 | ||
| 139 | static int __devinit apc_probe(struct of_device *op, | 139 | static int __devinit apc_probe(struct platform_device *op, |
| 140 | const struct of_device_id *match) | 140 | const struct of_device_id *match) |
| 141 | { | 141 | { |
| 142 | int err; | 142 | int err; |
| @@ -184,7 +184,7 @@ static struct of_platform_driver apc_driver = { | |||
| 184 | 184 | ||
| 185 | static int __init apc_init(void) | 185 | static int __init apc_init(void) |
| 186 | { | 186 | { |
| 187 | return of_register_driver(&apc_driver, &of_bus_type); | 187 | return of_register_platform_driver(&apc_driver); |
| 188 | } | 188 | } |
| 189 | 189 | ||
| 190 | /* This driver is not critical to the boot process | 190 | /* This driver is not critical to the boot process |
diff --git a/arch/sparc/kernel/auxio_64.c b/arch/sparc/kernel/auxio_64.c index ddc84128b3c2..3efd3c5af6a9 100644 --- a/arch/sparc/kernel/auxio_64.c +++ b/arch/sparc/kernel/auxio_64.c | |||
| @@ -102,7 +102,8 @@ static struct of_device_id __initdata auxio_match[] = { | |||
| 102 | 102 | ||
| 103 | MODULE_DEVICE_TABLE(of, auxio_match); | 103 | MODULE_DEVICE_TABLE(of, auxio_match); |
| 104 | 104 | ||
| 105 | static int __devinit auxio_probe(struct of_device *dev, const struct of_device_id *match) | 105 | static int __devinit auxio_probe(struct platform_device *dev, |
| 106 | const struct of_device_id *match) | ||
| 106 | { | 107 | { |
| 107 | struct device_node *dp = dev->dev.of_node; | 108 | struct device_node *dp = dev->dev.of_node; |
| 108 | unsigned long size; | 109 | unsigned long size; |
| @@ -142,7 +143,7 @@ static struct of_platform_driver auxio_driver = { | |||
| 142 | 143 | ||
| 143 | static int __init auxio_init(void) | 144 | static int __init auxio_init(void) |
| 144 | { | 145 | { |
| 145 | return of_register_driver(&auxio_driver, &of_platform_bus_type); | 146 | return of_register_platform_driver(&auxio_driver); |
| 146 | } | 147 | } |
| 147 | 148 | ||
| 148 | /* Must be after subsys_initcall() so that busses are probed. Must | 149 | /* Must be after subsys_initcall() so that busses are probed. Must |
diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c index 434335f65823..cfa2624c5332 100644 --- a/arch/sparc/kernel/central.c +++ b/arch/sparc/kernel/central.c | |||
| @@ -59,7 +59,7 @@ static int __devinit clock_board_calc_nslots(struct clock_board *p) | |||
| 59 | } | 59 | } |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | static int __devinit clock_board_probe(struct of_device *op, | 62 | static int __devinit clock_board_probe(struct platform_device *op, |
| 63 | const struct of_device_id *match) | 63 | const struct of_device_id *match) |
| 64 | { | 64 | { |
| 65 | struct clock_board *p = kzalloc(sizeof(*p), GFP_KERNEL); | 65 | struct clock_board *p = kzalloc(sizeof(*p), GFP_KERNEL); |
| @@ -157,7 +157,7 @@ static struct of_platform_driver clock_board_driver = { | |||
| 157 | }, | 157 | }, |
| 158 | }; | 158 | }; |
| 159 | 159 | ||
| 160 | static int __devinit fhc_probe(struct of_device *op, | 160 | static int __devinit fhc_probe(struct platform_device *op, |
| 161 | const struct of_device_id *match) | 161 | const struct of_device_id *match) |
| 162 | { | 162 | { |
| 163 | struct fhc *p = kzalloc(sizeof(*p), GFP_KERNEL); | 163 | struct fhc *p = kzalloc(sizeof(*p), GFP_KERNEL); |
| @@ -265,8 +265,8 @@ static struct of_platform_driver fhc_driver = { | |||
| 265 | 265 | ||
| 266 | static int __init sunfire_init(void) | 266 | static int __init sunfire_init(void) |
| 267 | { | 267 | { |
| 268 | (void) of_register_driver(&fhc_driver, &of_platform_bus_type); | 268 | (void) of_register_platform_driver(&fhc_driver); |
| 269 | (void) of_register_driver(&clock_board_driver, &of_platform_bus_type); | 269 | (void) of_register_platform_driver(&clock_board_driver); |
| 270 | return 0; | 270 | return 0; |
| 271 | } | 271 | } |
| 272 | 272 | ||
diff --git a/arch/sparc/kernel/chmc.c b/arch/sparc/kernel/chmc.c index 870cb65b3f21..08c466ebb32b 100644 --- a/arch/sparc/kernel/chmc.c +++ b/arch/sparc/kernel/chmc.c | |||
| @@ -392,7 +392,7 @@ static void __devinit jbusmc_construct_dimm_groups(struct jbusmc *p, | |||
| 392 | } | 392 | } |
| 393 | } | 393 | } |
| 394 | 394 | ||
| 395 | static int __devinit jbusmc_probe(struct of_device *op, | 395 | static int __devinit jbusmc_probe(struct platform_device *op, |
| 396 | const struct of_device_id *match) | 396 | const struct of_device_id *match) |
| 397 | { | 397 | { |
| 398 | const struct linux_prom64_registers *mem_regs; | 398 | const struct linux_prom64_registers *mem_regs; |
| @@ -690,7 +690,7 @@ static void chmc_fetch_decode_regs(struct chmc *p) | |||
| 690 | chmc_read_mcreg(p, CHMCTRL_DECODE4)); | 690 | chmc_read_mcreg(p, CHMCTRL_DECODE4)); |
| 691 | } | 691 | } |
| 692 | 692 | ||
| 693 | static int __devinit chmc_probe(struct of_device *op, | 693 | static int __devinit chmc_probe(struct platform_device *op, |
| 694 | const struct of_device_id *match) | 694 | const struct of_device_id *match) |
| 695 | { | 695 | { |
| 696 | struct device_node *dp = op->dev.of_node; | 696 | struct device_node *dp = op->dev.of_node; |
| @@ -765,7 +765,7 @@ out_free: | |||
| 765 | goto out; | 765 | goto out; |
| 766 | } | 766 | } |
| 767 | 767 | ||
| 768 | static int __devinit us3mc_probe(struct of_device *op, | 768 | static int __devinit us3mc_probe(struct platform_device *op, |
| 769 | const struct of_device_id *match) | 769 | const struct of_device_id *match) |
| 770 | { | 770 | { |
| 771 | if (mc_type == MC_TYPE_SAFARI) | 771 | if (mc_type == MC_TYPE_SAFARI) |
| @@ -775,21 +775,21 @@ static int __devinit us3mc_probe(struct of_device *op, | |||
| 775 | return -ENODEV; | 775 | return -ENODEV; |
| 776 | } | 776 | } |
| 777 | 777 | ||
| 778 | static void __devexit chmc_destroy(struct of_device *op, struct chmc *p) | 778 | static void __devexit chmc_destroy(struct platform_device *op, struct chmc *p) |
| 779 | { | 779 | { |
| 780 | list_del(&p->list); | 780 | list_del(&p->list); |
| 781 | of_iounmap(&op->resource[0], p->regs, 0x48); | 781 | of_iounmap(&op->resource[0], p->regs, 0x48); |
| 782 | kfree(p); | 782 | kfree(p); |
| 783 | } | 783 | } |
| 784 | 784 | ||
| 785 | static void __devexit jbusmc_destroy(struct of_device *op, struct jbusmc *p) | 785 | static void __devexit jbusmc_destroy(struct platform_device *op, struct jbusmc *p) |
| 786 | { | 786 | { |
| 787 | mc_list_del(&p->list); | 787 | mc_list_del(&p->list); |
| 788 | of_iounmap(&op->resource[0], p->regs, JBUSMC_REGS_SIZE); | 788 | of_iounmap(&op->resource[0], p->regs, JBUSMC_REGS_SIZE); |
| 789 | kfree(p); | 789 | kfree(p); |
| 790 | } | 790 | } |
| 791 | 791 | ||
| 792 | static int __devexit us3mc_remove(struct of_device *op) | 792 | static int __devexit us3mc_remove(struct platform_device *op) |
| 793 | { | 793 | { |
| 794 | void *p = dev_get_drvdata(&op->dev); | 794 | void *p = dev_get_drvdata(&op->dev); |
| 795 | 795 | ||
| @@ -848,7 +848,7 @@ static int __init us3mc_init(void) | |||
| 848 | ret = register_dimm_printer(us3mc_dimm_printer); | 848 | ret = register_dimm_printer(us3mc_dimm_printer); |
| 849 | 849 | ||
| 850 | if (!ret) { | 850 | if (!ret) { |
| 851 | ret = of_register_driver(&us3mc_driver, &of_bus_type); | 851 | ret = of_register_platform_driver(&us3mc_driver); |
| 852 | if (ret) | 852 | if (ret) |
| 853 | unregister_dimm_printer(us3mc_dimm_printer); | 853 | unregister_dimm_printer(us3mc_dimm_printer); |
| 854 | } | 854 | } |
| @@ -859,7 +859,7 @@ static void __exit us3mc_cleanup(void) | |||
| 859 | { | 859 | { |
| 860 | if (us3mc_platform()) { | 860 | if (us3mc_platform()) { |
| 861 | unregister_dimm_printer(us3mc_dimm_printer); | 861 | unregister_dimm_printer(us3mc_dimm_printer); |
| 862 | of_unregister_driver(&us3mc_driver); | 862 | of_unregister_platform_driver(&us3mc_driver); |
| 863 | } | 863 | } |
| 864 | } | 864 | } |
| 865 | 865 | ||
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c index 703e4aa9bc38..41f7e4e0f72a 100644 --- a/arch/sparc/kernel/ioport.c +++ b/arch/sparc/kernel/ioport.c | |||
| @@ -253,7 +253,7 @@ EXPORT_SYMBOL(sbus_set_sbus64); | |||
| 253 | static void *sbus_alloc_coherent(struct device *dev, size_t len, | 253 | static void *sbus_alloc_coherent(struct device *dev, size_t len, |
| 254 | dma_addr_t *dma_addrp, gfp_t gfp) | 254 | dma_addr_t *dma_addrp, gfp_t gfp) |
| 255 | { | 255 | { |
| 256 | struct of_device *op = to_of_device(dev); | 256 | struct platform_device *op = to_platform_device(dev); |
| 257 | unsigned long len_total = (len + PAGE_SIZE-1) & PAGE_MASK; | 257 | unsigned long len_total = (len + PAGE_SIZE-1) & PAGE_MASK; |
| 258 | unsigned long va; | 258 | unsigned long va; |
| 259 | struct resource *res; | 259 | struct resource *res; |
diff --git a/arch/sparc/kernel/of_device_32.c b/arch/sparc/kernel/of_device_32.c index 47e63f1e719c..2d055a1e9cc2 100644 --- a/arch/sparc/kernel/of_device_32.c +++ b/arch/sparc/kernel/of_device_32.c | |||
| @@ -241,10 +241,10 @@ static int __init use_1to1_mapping(struct device_node *pp) | |||
| 241 | 241 | ||
| 242 | static int of_resource_verbose; | 242 | static int of_resource_verbose; |
| 243 | 243 | ||
| 244 | static void __init build_device_resources(struct of_device *op, | 244 | static void __init build_device_resources(struct platform_device *op, |
| 245 | struct device *parent) | 245 | struct device *parent) |
| 246 | { | 246 | { |
| 247 | struct of_device *p_op; | 247 | struct platform_device *p_op; |
| 248 | struct of_bus *bus; | 248 | struct of_bus *bus; |
| 249 | int na, ns; | 249 | int na, ns; |
| 250 | int index, num_reg; | 250 | int index, num_reg; |
| @@ -253,7 +253,7 @@ static void __init build_device_resources(struct of_device *op, | |||
| 253 | if (!parent) | 253 | if (!parent) |
| 254 | return; | 254 | return; |
| 255 | 255 | ||
| 256 | p_op = to_of_device(parent); | 256 | p_op = to_platform_device(parent); |
| 257 | bus = of_match_bus(p_op->dev.of_node); | 257 | bus = of_match_bus(p_op->dev.of_node); |
| 258 | bus->count_cells(op->dev.of_node, &na, &ns); | 258 | bus->count_cells(op->dev.of_node, &na, &ns); |
| 259 | 259 | ||
| @@ -267,6 +267,8 @@ static void __init build_device_resources(struct of_device *op, | |||
| 267 | /* Conver to num-entries. */ | 267 | /* Conver to num-entries. */ |
| 268 | num_reg /= na + ns; | 268 | num_reg /= na + ns; |
| 269 | 269 | ||
| 270 | op->resource = op->archdata.resource; | ||
| 271 | op->num_resources = num_reg; | ||
| 270 | for (index = 0; index < num_reg; index++) { | 272 | for (index = 0; index < num_reg; index++) { |
| 271 | struct resource *r = &op->resource[index]; | 273 | struct resource *r = &op->resource[index]; |
| 272 | u32 addr[OF_MAX_ADDR_CELLS]; | 274 | u32 addr[OF_MAX_ADDR_CELLS]; |
| @@ -333,10 +335,10 @@ static void __init build_device_resources(struct of_device *op, | |||
| 333 | } | 335 | } |
| 334 | } | 336 | } |
| 335 | 337 | ||
| 336 | static struct of_device * __init scan_one_device(struct device_node *dp, | 338 | static struct platform_device * __init scan_one_device(struct device_node *dp, |
| 337 | struct device *parent) | 339 | struct device *parent) |
| 338 | { | 340 | { |
| 339 | struct of_device *op = kzalloc(sizeof(*op), GFP_KERNEL); | 341 | struct platform_device *op = kzalloc(sizeof(*op), GFP_KERNEL); |
| 340 | const struct linux_prom_irqs *intr; | 342 | const struct linux_prom_irqs *intr; |
| 341 | struct dev_archdata *sd; | 343 | struct dev_archdata *sd; |
| 342 | int len, i; | 344 | int len, i; |
| @@ -349,27 +351,21 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 349 | 351 | ||
| 350 | op->dev.of_node = dp; | 352 | op->dev.of_node = dp; |
| 351 | 353 | ||
| 352 | op->clock_freq = of_getintprop_default(dp, "clock-frequency", | ||
| 353 | (25*1000*1000)); | ||
| 354 | op->portid = of_getintprop_default(dp, "upa-portid", -1); | ||
| 355 | if (op->portid == -1) | ||
| 356 | op->portid = of_getintprop_default(dp, "portid", -1); | ||
| 357 | |||
| 358 | intr = of_get_property(dp, "intr", &len); | 354 | intr = of_get_property(dp, "intr", &len); |
| 359 | if (intr) { | 355 | if (intr) { |
| 360 | op->num_irqs = len / sizeof(struct linux_prom_irqs); | 356 | op->archdata.num_irqs = len / sizeof(struct linux_prom_irqs); |
| 361 | for (i = 0; i < op->num_irqs; i++) | 357 | for (i = 0; i < op->archdata.num_irqs; i++) |
| 362 | op->irqs[i] = intr[i].pri; | 358 | op->archdata.irqs[i] = intr[i].pri; |
| 363 | } else { | 359 | } else { |
| 364 | const unsigned int *irq = | 360 | const unsigned int *irq = |
| 365 | of_get_property(dp, "interrupts", &len); | 361 | of_get_property(dp, "interrupts", &len); |
| 366 | 362 | ||
| 367 | if (irq) { | 363 | if (irq) { |
| 368 | op->num_irqs = len / sizeof(unsigned int); | 364 | op->archdata.num_irqs = len / sizeof(unsigned int); |
| 369 | for (i = 0; i < op->num_irqs; i++) | 365 | for (i = 0; i < op->archdata.num_irqs; i++) |
| 370 | op->irqs[i] = irq[i]; | 366 | op->archdata.irqs[i] = irq[i]; |
| 371 | } else { | 367 | } else { |
| 372 | op->num_irqs = 0; | 368 | op->archdata.num_irqs = 0; |
| 373 | } | 369 | } |
| 374 | } | 370 | } |
| 375 | if (sparc_cpu_model == sun4d) { | 371 | if (sparc_cpu_model == sun4d) { |
| @@ -411,8 +407,8 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 411 | goto build_resources; | 407 | goto build_resources; |
| 412 | } | 408 | } |
| 413 | 409 | ||
| 414 | for (i = 0; i < op->num_irqs; i++) { | 410 | for (i = 0; i < op->archdata.num_irqs; i++) { |
| 415 | int this_irq = op->irqs[i]; | 411 | int this_irq = op->archdata.irqs[i]; |
| 416 | int sbusl = pil_to_sbus[this_irq]; | 412 | int sbusl = pil_to_sbus[this_irq]; |
| 417 | 413 | ||
| 418 | if (sbusl) | 414 | if (sbusl) |
| @@ -420,7 +416,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 420 | (sbusl << 2) + | 416 | (sbusl << 2) + |
| 421 | slot); | 417 | slot); |
| 422 | 418 | ||
| 423 | op->irqs[i] = this_irq; | 419 | op->archdata.irqs[i] = this_irq; |
| 424 | } | 420 | } |
| 425 | } | 421 | } |
| 426 | 422 | ||
| @@ -428,7 +424,7 @@ build_resources: | |||
| 428 | build_device_resources(op, parent); | 424 | build_device_resources(op, parent); |
| 429 | 425 | ||
| 430 | op->dev.parent = parent; | 426 | op->dev.parent = parent; |
| 431 | op->dev.bus = &of_platform_bus_type; | 427 | op->dev.bus = &platform_bus_type; |
| 432 | if (!parent) | 428 | if (!parent) |
| 433 | dev_set_name(&op->dev, "root"); | 429 | dev_set_name(&op->dev, "root"); |
| 434 | else | 430 | else |
| @@ -447,7 +443,7 @@ build_resources: | |||
| 447 | static void __init scan_tree(struct device_node *dp, struct device *parent) | 443 | static void __init scan_tree(struct device_node *dp, struct device *parent) |
| 448 | { | 444 | { |
| 449 | while (dp) { | 445 | while (dp) { |
| 450 | struct of_device *op = scan_one_device(dp, parent); | 446 | struct platform_device *op = scan_one_device(dp, parent); |
| 451 | 447 | ||
| 452 | if (op) | 448 | if (op) |
| 453 | scan_tree(dp->child, &op->dev); | 449 | scan_tree(dp->child, &op->dev); |
| @@ -456,30 +452,19 @@ static void __init scan_tree(struct device_node *dp, struct device *parent) | |||
| 456 | } | 452 | } |
| 457 | } | 453 | } |
| 458 | 454 | ||
| 459 | static void __init scan_of_devices(void) | 455 | static int __init scan_of_devices(void) |
| 460 | { | 456 | { |
| 461 | struct device_node *root = of_find_node_by_path("/"); | 457 | struct device_node *root = of_find_node_by_path("/"); |
| 462 | struct of_device *parent; | 458 | struct platform_device *parent; |
| 463 | 459 | ||
| 464 | parent = scan_one_device(root, NULL); | 460 | parent = scan_one_device(root, NULL); |
| 465 | if (!parent) | 461 | if (!parent) |
| 466 | return; | 462 | return 0; |
| 467 | 463 | ||
| 468 | scan_tree(root->child, &parent->dev); | 464 | scan_tree(root->child, &parent->dev); |
| 465 | return 0; | ||
| 469 | } | 466 | } |
| 470 | 467 | postcore_initcall(scan_of_devices); | |
| 471 | static int __init of_bus_driver_init(void) | ||
| 472 | { | ||
| 473 | int err; | ||
| 474 | |||
| 475 | err = of_bus_type_init(&of_platform_bus_type, "of"); | ||
| 476 | if (!err) | ||
| 477 | scan_of_devices(); | ||
| 478 | |||
| 479 | return err; | ||
| 480 | } | ||
| 481 | |||
| 482 | postcore_initcall(of_bus_driver_init); | ||
| 483 | 468 | ||
| 484 | static int __init of_debug(char *str) | 469 | static int __init of_debug(char *str) |
| 485 | { | 470 | { |
diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c index 1dae8079f728..63cd4e5d47c2 100644 --- a/arch/sparc/kernel/of_device_64.c +++ b/arch/sparc/kernel/of_device_64.c | |||
| @@ -310,10 +310,10 @@ static int __init use_1to1_mapping(struct device_node *pp) | |||
| 310 | 310 | ||
| 311 | static int of_resource_verbose; | 311 | static int of_resource_verbose; |
| 312 | 312 | ||
| 313 | static void __init build_device_resources(struct of_device *op, | 313 | static void __init build_device_resources(struct platform_device *op, |
| 314 | struct device *parent) | 314 | struct device *parent) |
| 315 | { | 315 | { |
| 316 | struct of_device *p_op; | 316 | struct platform_device *p_op; |
| 317 | struct of_bus *bus; | 317 | struct of_bus *bus; |
| 318 | int na, ns; | 318 | int na, ns; |
| 319 | int index, num_reg; | 319 | int index, num_reg; |
| @@ -322,7 +322,7 @@ static void __init build_device_resources(struct of_device *op, | |||
| 322 | if (!parent) | 322 | if (!parent) |
| 323 | return; | 323 | return; |
| 324 | 324 | ||
| 325 | p_op = to_of_device(parent); | 325 | p_op = to_platform_device(parent); |
| 326 | bus = of_match_bus(p_op->dev.of_node); | 326 | bus = of_match_bus(p_op->dev.of_node); |
| 327 | bus->count_cells(op->dev.of_node, &na, &ns); | 327 | bus->count_cells(op->dev.of_node, &na, &ns); |
| 328 | 328 | ||
| @@ -344,6 +344,8 @@ static void __init build_device_resources(struct of_device *op, | |||
| 344 | num_reg = PROMREG_MAX; | 344 | num_reg = PROMREG_MAX; |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | op->resource = op->archdata.resource; | ||
| 348 | op->num_resources = num_reg; | ||
| 347 | for (index = 0; index < num_reg; index++) { | 349 | for (index = 0; index < num_reg; index++) { |
| 348 | struct resource *r = &op->resource[index]; | 350 | struct resource *r = &op->resource[index]; |
| 349 | u32 addr[OF_MAX_ADDR_CELLS]; | 351 | u32 addr[OF_MAX_ADDR_CELLS]; |
| @@ -526,7 +528,7 @@ static unsigned int __init pci_irq_swizzle(struct device_node *dp, | |||
| 526 | 528 | ||
| 527 | static int of_irq_verbose; | 529 | static int of_irq_verbose; |
| 528 | 530 | ||
| 529 | static unsigned int __init build_one_device_irq(struct of_device *op, | 531 | static unsigned int __init build_one_device_irq(struct platform_device *op, |
| 530 | struct device *parent, | 532 | struct device *parent, |
| 531 | unsigned int irq) | 533 | unsigned int irq) |
| 532 | { | 534 | { |
| @@ -628,10 +630,10 @@ out: | |||
| 628 | return irq; | 630 | return irq; |
| 629 | } | 631 | } |
| 630 | 632 | ||
| 631 | static struct of_device * __init scan_one_device(struct device_node *dp, | 633 | static struct platform_device * __init scan_one_device(struct device_node *dp, |
| 632 | struct device *parent) | 634 | struct device *parent) |
| 633 | { | 635 | { |
| 634 | struct of_device *op = kzalloc(sizeof(*op), GFP_KERNEL); | 636 | struct platform_device *op = kzalloc(sizeof(*op), GFP_KERNEL); |
| 635 | const unsigned int *irq; | 637 | const unsigned int *irq; |
| 636 | struct dev_archdata *sd; | 638 | struct dev_archdata *sd; |
| 637 | int len, i; | 639 | int len, i; |
| @@ -644,34 +646,28 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 644 | 646 | ||
| 645 | op->dev.of_node = dp; | 647 | op->dev.of_node = dp; |
| 646 | 648 | ||
| 647 | op->clock_freq = of_getintprop_default(dp, "clock-frequency", | ||
| 648 | (25*1000*1000)); | ||
| 649 | op->portid = of_getintprop_default(dp, "upa-portid", -1); | ||
| 650 | if (op->portid == -1) | ||
| 651 | op->portid = of_getintprop_default(dp, "portid", -1); | ||
| 652 | |||
| 653 | irq = of_get_property(dp, "interrupts", &len); | 649 | irq = of_get_property(dp, "interrupts", &len); |
| 654 | if (irq) { | 650 | if (irq) { |
| 655 | op->num_irqs = len / 4; | 651 | op->archdata.num_irqs = len / 4; |
| 656 | 652 | ||
| 657 | /* Prevent overrunning the op->irqs[] array. */ | 653 | /* Prevent overrunning the op->irqs[] array. */ |
| 658 | if (op->num_irqs > PROMINTR_MAX) { | 654 | if (op->archdata.num_irqs > PROMINTR_MAX) { |
| 659 | printk(KERN_WARNING "%s: Too many irqs (%d), " | 655 | printk(KERN_WARNING "%s: Too many irqs (%d), " |
| 660 | "limiting to %d.\n", | 656 | "limiting to %d.\n", |
| 661 | dp->full_name, op->num_irqs, PROMINTR_MAX); | 657 | dp->full_name, op->archdata.num_irqs, PROMINTR_MAX); |
| 662 | op->num_irqs = PROMINTR_MAX; | 658 | op->archdata.num_irqs = PROMINTR_MAX; |
| 663 | } | 659 | } |
| 664 | memcpy(op->irqs, irq, op->num_irqs * 4); | 660 | memcpy(op->archdata.irqs, irq, op->archdata.num_irqs * 4); |
| 665 | } else { | 661 | } else { |
| 666 | op->num_irqs = 0; | 662 | op->archdata.num_irqs = 0; |
| 667 | } | 663 | } |
| 668 | 664 | ||
| 669 | build_device_resources(op, parent); | 665 | build_device_resources(op, parent); |
| 670 | for (i = 0; i < op->num_irqs; i++) | 666 | for (i = 0; i < op->archdata.num_irqs; i++) |
| 671 | op->irqs[i] = build_one_device_irq(op, parent, op->irqs[i]); | 667 | op->archdata.irqs[i] = build_one_device_irq(op, parent, op->archdata.irqs[i]); |
| 672 | 668 | ||
| 673 | op->dev.parent = parent; | 669 | op->dev.parent = parent; |
| 674 | op->dev.bus = &of_platform_bus_type; | 670 | op->dev.bus = &platform_bus_type; |
| 675 | if (!parent) | 671 | if (!parent) |
| 676 | dev_set_name(&op->dev, "root"); | 672 | dev_set_name(&op->dev, "root"); |
| 677 | else | 673 | else |
| @@ -690,7 +686,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp, | |||
| 690 | static void __init scan_tree(struct device_node *dp, struct device *parent) | 686 | static void __init scan_tree(struct device_node *dp, struct device *parent) |
| 691 | { | 687 | { |
| 692 | while (dp) { | 688 | while (dp) { |
| 693 | struct of_device *op = scan_one_device(dp, parent); | 689 | struct platform_device *op = scan_one_device(dp, parent); |
| 694 | 690 | ||
| 695 | if (op) | 691 | if (op) |
| 696 | scan_tree(dp->child, &op->dev); | 692 | scan_tree(dp->child, &op->dev); |
| @@ -699,30 +695,19 @@ static void __init scan_tree(struct device_node *dp, struct device *parent) | |||
| 699 | } | 695 | } |
| 700 | } | 696 | } |
| 701 | 697 | ||
| 702 | static void __init scan_of_devices(void) | 698 | static int __init scan_of_devices(void) |
| 703 | { | 699 | { |
| 704 | struct device_node *root = of_find_node_by_path("/"); | 700 | struct device_node *root = of_find_node_by_path("/"); |
| 705 | struct of_device *parent; | 701 | struct platform_device *parent; |
| 706 | 702 | ||
| 707 | parent = scan_one_device(root, NULL); | 703 | parent = scan_one_device(root, NULL); |
| 708 | if (!parent) | 704 | if (!parent) |
| 709 | return; | 705 | return 0; |
| 710 | 706 | ||
| 711 | scan_tree(root->child, &parent->dev); | 707 | scan_tree(root->child, &parent->dev); |
| 708 | return 0; | ||
| 712 | } | 709 | } |
| 713 | 710 | postcore_initcall(scan_of_devices); | |
| 714 | static int __init of_bus_driver_init(void) | ||
| 715 | { | ||
| 716 | int err; | ||
| 717 | |||
| 718 | err = of_bus_type_init(&of_platform_bus_type, "of"); | ||
| 719 | if (!err) | ||
| 720 | scan_of_devices(); | ||
| 721 | |||
| 722 | return err; | ||
| 723 | } | ||
| 724 | |||
| 725 | postcore_initcall(of_bus_driver_init); | ||
| 726 | 711 | ||
| 727 | static int __init of_debug(char *str) | 712 | static int __init of_debug(char *str) |
| 728 | { | 713 | { |
diff --git a/arch/sparc/kernel/of_device_common.c b/arch/sparc/kernel/of_device_common.c index 10c6c36a6e75..49ddff56cb04 100644 --- a/arch/sparc/kernel/of_device_common.c +++ b/arch/sparc/kernel/of_device_common.c | |||
| @@ -11,48 +11,28 @@ | |||
| 11 | 11 | ||
| 12 | #include "of_device_common.h" | 12 | #include "of_device_common.h" |
| 13 | 13 | ||
| 14 | static int node_match(struct device *dev, void *data) | ||
| 15 | { | ||
| 16 | struct of_device *op = to_of_device(dev); | ||
| 17 | struct device_node *dp = data; | ||
| 18 | |||
| 19 | return (op->dev.of_node == dp); | ||
| 20 | } | ||
| 21 | |||
| 22 | struct of_device *of_find_device_by_node(struct device_node *dp) | ||
| 23 | { | ||
| 24 | struct device *dev = bus_find_device(&of_platform_bus_type, NULL, | ||
| 25 | dp, node_match); | ||
| 26 | |||
| 27 | if (dev) | ||
| 28 | return to_of_device(dev); | ||
| 29 | |||
| 30 | return NULL; | ||
| 31 | } | ||
| 32 | EXPORT_SYMBOL(of_find_device_by_node); | ||
| 33 | |||
| 34 | unsigned int irq_of_parse_and_map(struct device_node *node, int index) | 14 | unsigned int irq_of_parse_and_map(struct device_node *node, int index) |
| 35 | { | 15 | { |
| 36 | struct of_device *op = of_find_device_by_node(node); | 16 | struct platform_device *op = of_find_device_by_node(node); |
| 37 | 17 | ||
| 38 | if (!op || index >= op->num_irqs) | 18 | if (!op || index >= op->archdata.num_irqs) |
| 39 | return 0; | 19 | return 0; |
| 40 | 20 | ||
| 41 | return op->irqs[index]; | 21 | return op->archdata.irqs[index]; |
| 42 | } | 22 | } |
| 43 | EXPORT_SYMBOL(irq_of_parse_and_map); | 23 | EXPORT_SYMBOL(irq_of_parse_and_map); |
| 44 | 24 | ||
| 45 | /* Take the archdata values for IOMMU, STC, and HOSTDATA found in | 25 | /* Take the archdata values for IOMMU, STC, and HOSTDATA found in |
| 46 | * BUS and propagate to all child of_device objects. | 26 | * BUS and propagate to all child platform_device objects. |
| 47 | */ | 27 | */ |
| 48 | void of_propagate_archdata(struct of_device *bus) | 28 | void of_propagate_archdata(struct platform_device *bus) |
| 49 | { | 29 | { |
| 50 | struct dev_archdata *bus_sd = &bus->dev.archdata; | 30 | struct dev_archdata *bus_sd = &bus->dev.archdata; |
| 51 | struct device_node *bus_dp = bus->dev.of_node; | 31 | struct device_node *bus_dp = bus->dev.of_node; |
| 52 | struct device_node *dp; | 32 | struct device_node *dp; |
| 53 | 33 | ||
| 54 | for (dp = bus_dp->child; dp; dp = dp->sibling) { | 34 | for (dp = bus_dp->child; dp; dp = dp->sibling) { |
| 55 | struct of_device *op = of_find_device_by_node(dp); | 35 | struct platform_device *op = of_find_device_by_node(dp); |
| 56 | 36 | ||
| 57 | op->dev.archdata.iommu = bus_sd->iommu; | 37 | op->dev.archdata.iommu = bus_sd->iommu; |
| 58 | op->dev.archdata.stc = bus_sd->stc; | 38 | op->dev.archdata.stc = bus_sd->stc; |
| @@ -64,9 +44,6 @@ void of_propagate_archdata(struct of_device *bus) | |||
| 64 | } | 44 | } |
| 65 | } | 45 | } |
| 66 | 46 | ||
| 67 | struct bus_type of_platform_bus_type; | ||
| 68 | EXPORT_SYMBOL(of_platform_bus_type); | ||
| 69 | |||
| 70 | static void get_cells(struct device_node *dp, int *addrc, int *sizec) | 47 | static void get_cells(struct device_node *dp, int *addrc, int *sizec) |
| 71 | { | 48 | { |
| 72 | if (addrc) | 49 | if (addrc) |
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c index 8a8363adb8bd..4137579d9adc 100644 --- a/arch/sparc/kernel/pci.c +++ b/arch/sparc/kernel/pci.c | |||
| @@ -198,7 +198,7 @@ static unsigned long pci_parse_of_flags(u32 addr0) | |||
| 198 | * into physical address resources, we only have to figure out the register | 198 | * into physical address resources, we only have to figure out the register |
| 199 | * mapping. | 199 | * mapping. |
| 200 | */ | 200 | */ |
| 201 | static void pci_parse_of_addrs(struct of_device *op, | 201 | static void pci_parse_of_addrs(struct platform_device *op, |
| 202 | struct device_node *node, | 202 | struct device_node *node, |
| 203 | struct pci_dev *dev) | 203 | struct pci_dev *dev) |
| 204 | { | 204 | { |
| @@ -248,7 +248,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 248 | { | 248 | { |
| 249 | struct dev_archdata *sd; | 249 | struct dev_archdata *sd; |
| 250 | struct pci_slot *slot; | 250 | struct pci_slot *slot; |
| 251 | struct of_device *op; | 251 | struct platform_device *op; |
| 252 | struct pci_dev *dev; | 252 | struct pci_dev *dev; |
| 253 | const char *type; | 253 | const char *type; |
| 254 | u32 class; | 254 | u32 class; |
| @@ -340,7 +340,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 340 | dev->hdr_type = PCI_HEADER_TYPE_NORMAL; | 340 | dev->hdr_type = PCI_HEADER_TYPE_NORMAL; |
| 341 | dev->rom_base_reg = PCI_ROM_ADDRESS; | 341 | dev->rom_base_reg = PCI_ROM_ADDRESS; |
| 342 | 342 | ||
| 343 | dev->irq = sd->op->irqs[0]; | 343 | dev->irq = sd->op->archdata.irqs[0]; |
| 344 | if (dev->irq == 0xffffffff) | 344 | if (dev->irq == 0xffffffff) |
| 345 | dev->irq = PCI_IRQ_NONE; | 345 | dev->irq = PCI_IRQ_NONE; |
| 346 | } | 346 | } |
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c index 51cfa09e392a..efb896d68754 100644 --- a/arch/sparc/kernel/pci_fire.c +++ b/arch/sparc/kernel/pci_fire.c | |||
| @@ -410,7 +410,7 @@ static void pci_fire_hw_init(struct pci_pbm_info *pbm) | |||
| 410 | } | 410 | } |
| 411 | 411 | ||
| 412 | static int __devinit pci_fire_pbm_init(struct pci_pbm_info *pbm, | 412 | static int __devinit pci_fire_pbm_init(struct pci_pbm_info *pbm, |
| 413 | struct of_device *op, u32 portid) | 413 | struct platform_device *op, u32 portid) |
| 414 | { | 414 | { |
| 415 | const struct linux_prom64_registers *regs; | 415 | const struct linux_prom64_registers *regs; |
| 416 | struct device_node *dp = op->dev.of_node; | 416 | struct device_node *dp = op->dev.of_node; |
| @@ -455,7 +455,7 @@ static int __devinit pci_fire_pbm_init(struct pci_pbm_info *pbm, | |||
| 455 | return 0; | 455 | return 0; |
| 456 | } | 456 | } |
| 457 | 457 | ||
| 458 | static int __devinit fire_probe(struct of_device *op, | 458 | static int __devinit fire_probe(struct platform_device *op, |
| 459 | const struct of_device_id *match) | 459 | const struct of_device_id *match) |
| 460 | { | 460 | { |
| 461 | struct device_node *dp = op->dev.of_node; | 461 | struct device_node *dp = op->dev.of_node; |
| @@ -518,7 +518,7 @@ static struct of_platform_driver fire_driver = { | |||
| 518 | 518 | ||
| 519 | static int __init fire_init(void) | 519 | static int __init fire_init(void) |
| 520 | { | 520 | { |
| 521 | return of_register_driver(&fire_driver, &of_bus_type); | 521 | return of_register_platform_driver(&fire_driver); |
| 522 | } | 522 | } |
| 523 | 523 | ||
| 524 | subsys_initcall(fire_init); | 524 | subsys_initcall(fire_init); |
diff --git a/arch/sparc/kernel/pci_impl.h b/arch/sparc/kernel/pci_impl.h index 03186824327e..e20ed5f06e9c 100644 --- a/arch/sparc/kernel/pci_impl.h +++ b/arch/sparc/kernel/pci_impl.h | |||
| @@ -91,7 +91,7 @@ struct pci_pbm_info { | |||
| 91 | char *name; | 91 | char *name; |
| 92 | 92 | ||
| 93 | /* OBP specific information. */ | 93 | /* OBP specific information. */ |
| 94 | struct of_device *op; | 94 | struct platform_device *op; |
| 95 | u64 ino_bitmap; | 95 | u64 ino_bitmap; |
| 96 | 96 | ||
| 97 | /* PBM I/O and Memory space resources. */ | 97 | /* PBM I/O and Memory space resources. */ |
diff --git a/arch/sparc/kernel/pci_psycho.c b/arch/sparc/kernel/pci_psycho.c index 558a70512824..22eab7cf3b11 100644 --- a/arch/sparc/kernel/pci_psycho.c +++ b/arch/sparc/kernel/pci_psycho.c | |||
| @@ -285,7 +285,7 @@ static irqreturn_t psycho_ce_intr(int irq, void *dev_id) | |||
| 285 | #define PSYCHO_ECCCTRL_CE 0x2000000000000000UL /* Enable CE INterrupts */ | 285 | #define PSYCHO_ECCCTRL_CE 0x2000000000000000UL /* Enable CE INterrupts */ |
| 286 | static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | 286 | static void psycho_register_error_handlers(struct pci_pbm_info *pbm) |
| 287 | { | 287 | { |
| 288 | struct of_device *op = of_find_device_by_node(pbm->op->dev.of_node); | 288 | struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); |
| 289 | unsigned long base = pbm->controller_regs; | 289 | unsigned long base = pbm->controller_regs; |
| 290 | u64 tmp; | 290 | u64 tmp; |
| 291 | int err; | 291 | int err; |
| @@ -302,23 +302,23 @@ static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 302 | * 5: POWER MANAGEMENT | 302 | * 5: POWER MANAGEMENT |
| 303 | */ | 303 | */ |
| 304 | 304 | ||
| 305 | if (op->num_irqs < 6) | 305 | if (op->archdata.num_irqs < 6) |
| 306 | return; | 306 | return; |
| 307 | 307 | ||
| 308 | /* We really mean to ignore the return result here. Two | 308 | /* We really mean to ignore the return result here. Two |
| 309 | * PCI controller share the same interrupt numbers and | 309 | * PCI controller share the same interrupt numbers and |
| 310 | * drive the same front-end hardware. | 310 | * drive the same front-end hardware. |
| 311 | */ | 311 | */ |
| 312 | err = request_irq(op->irqs[1], psycho_ue_intr, IRQF_SHARED, | 312 | err = request_irq(op->archdata.irqs[1], psycho_ue_intr, IRQF_SHARED, |
| 313 | "PSYCHO_UE", pbm); | 313 | "PSYCHO_UE", pbm); |
| 314 | err = request_irq(op->irqs[2], psycho_ce_intr, IRQF_SHARED, | 314 | err = request_irq(op->archdata.irqs[2], psycho_ce_intr, IRQF_SHARED, |
| 315 | "PSYCHO_CE", pbm); | 315 | "PSYCHO_CE", pbm); |
| 316 | 316 | ||
| 317 | /* This one, however, ought not to fail. We can just warn | 317 | /* This one, however, ought not to fail. We can just warn |
| 318 | * about it since the system can still operate properly even | 318 | * about it since the system can still operate properly even |
| 319 | * if this fails. | 319 | * if this fails. |
| 320 | */ | 320 | */ |
| 321 | err = request_irq(op->irqs[0], psycho_pcierr_intr, IRQF_SHARED, | 321 | err = request_irq(op->archdata.irqs[0], psycho_pcierr_intr, IRQF_SHARED, |
| 322 | "PSYCHO_PCIERR", pbm); | 322 | "PSYCHO_PCIERR", pbm); |
| 323 | if (err) | 323 | if (err) |
| 324 | printk(KERN_WARNING "%s: Could not register PCIERR, " | 324 | printk(KERN_WARNING "%s: Could not register PCIERR, " |
| @@ -483,7 +483,7 @@ static void psycho_pbm_strbuf_init(struct pci_pbm_info *pbm, | |||
| 483 | #define PSYCHO_MEMSPACE_SIZE 0x07fffffffUL | 483 | #define PSYCHO_MEMSPACE_SIZE 0x07fffffffUL |
| 484 | 484 | ||
| 485 | static void __devinit psycho_pbm_init(struct pci_pbm_info *pbm, | 485 | static void __devinit psycho_pbm_init(struct pci_pbm_info *pbm, |
| 486 | struct of_device *op, int is_pbm_a) | 486 | struct platform_device *op, int is_pbm_a) |
| 487 | { | 487 | { |
| 488 | psycho_pbm_init_common(pbm, op, "PSYCHO", PBM_CHIP_TYPE_PSYCHO); | 488 | psycho_pbm_init_common(pbm, op, "PSYCHO", PBM_CHIP_TYPE_PSYCHO); |
| 489 | psycho_pbm_strbuf_init(pbm, is_pbm_a); | 489 | psycho_pbm_strbuf_init(pbm, is_pbm_a); |
| @@ -503,7 +503,7 @@ static struct pci_pbm_info * __devinit psycho_find_sibling(u32 upa_portid) | |||
| 503 | 503 | ||
| 504 | #define PSYCHO_CONFIGSPACE 0x001000000UL | 504 | #define PSYCHO_CONFIGSPACE 0x001000000UL |
| 505 | 505 | ||
| 506 | static int __devinit psycho_probe(struct of_device *op, | 506 | static int __devinit psycho_probe(struct platform_device *op, |
| 507 | const struct of_device_id *match) | 507 | const struct of_device_id *match) |
| 508 | { | 508 | { |
| 509 | const struct linux_prom64_registers *pr_regs; | 509 | const struct linux_prom64_registers *pr_regs; |
| @@ -612,7 +612,7 @@ static struct of_platform_driver psycho_driver = { | |||
| 612 | 612 | ||
| 613 | static int __init psycho_init(void) | 613 | static int __init psycho_init(void) |
| 614 | { | 614 | { |
| 615 | return of_register_driver(&psycho_driver, &of_bus_type); | 615 | return of_register_platform_driver(&psycho_driver); |
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | subsys_initcall(psycho_init); | 618 | subsys_initcall(psycho_init); |
diff --git a/arch/sparc/kernel/pci_sabre.c b/arch/sparc/kernel/pci_sabre.c index 6dad8e3b7506..5c3f5ec4cabc 100644 --- a/arch/sparc/kernel/pci_sabre.c +++ b/arch/sparc/kernel/pci_sabre.c | |||
| @@ -311,7 +311,7 @@ static irqreturn_t sabre_ce_intr(int irq, void *dev_id) | |||
| 311 | static void sabre_register_error_handlers(struct pci_pbm_info *pbm) | 311 | static void sabre_register_error_handlers(struct pci_pbm_info *pbm) |
| 312 | { | 312 | { |
| 313 | struct device_node *dp = pbm->op->dev.of_node; | 313 | struct device_node *dp = pbm->op->dev.of_node; |
| 314 | struct of_device *op; | 314 | struct platform_device *op; |
| 315 | unsigned long base = pbm->controller_regs; | 315 | unsigned long base = pbm->controller_regs; |
| 316 | u64 tmp; | 316 | u64 tmp; |
| 317 | int err; | 317 | int err; |
| @@ -329,7 +329,7 @@ static void sabre_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 329 | * 2: CE ERR | 329 | * 2: CE ERR |
| 330 | * 3: POWER FAIL | 330 | * 3: POWER FAIL |
| 331 | */ | 331 | */ |
| 332 | if (op->num_irqs < 4) | 332 | if (op->archdata.num_irqs < 4) |
| 333 | return; | 333 | return; |
| 334 | 334 | ||
| 335 | /* We clear the error bits in the appropriate AFSR before | 335 | /* We clear the error bits in the appropriate AFSR before |
| @@ -341,7 +341,7 @@ static void sabre_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 341 | SABRE_UEAFSR_SDTE | SABRE_UEAFSR_PDTE), | 341 | SABRE_UEAFSR_SDTE | SABRE_UEAFSR_PDTE), |
| 342 | base + SABRE_UE_AFSR); | 342 | base + SABRE_UE_AFSR); |
| 343 | 343 | ||
| 344 | err = request_irq(op->irqs[1], sabre_ue_intr, 0, "SABRE_UE", pbm); | 344 | err = request_irq(op->archdata.irqs[1], sabre_ue_intr, 0, "SABRE_UE", pbm); |
| 345 | if (err) | 345 | if (err) |
| 346 | printk(KERN_WARNING "%s: Couldn't register UE, err=%d.\n", | 346 | printk(KERN_WARNING "%s: Couldn't register UE, err=%d.\n", |
| 347 | pbm->name, err); | 347 | pbm->name, err); |
| @@ -351,11 +351,11 @@ static void sabre_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 351 | base + SABRE_CE_AFSR); | 351 | base + SABRE_CE_AFSR); |
| 352 | 352 | ||
| 353 | 353 | ||
| 354 | err = request_irq(op->irqs[2], sabre_ce_intr, 0, "SABRE_CE", pbm); | 354 | err = request_irq(op->archdata.irqs[2], sabre_ce_intr, 0, "SABRE_CE", pbm); |
| 355 | if (err) | 355 | if (err) |
| 356 | printk(KERN_WARNING "%s: Couldn't register CE, err=%d.\n", | 356 | printk(KERN_WARNING "%s: Couldn't register CE, err=%d.\n", |
| 357 | pbm->name, err); | 357 | pbm->name, err); |
| 358 | err = request_irq(op->irqs[0], psycho_pcierr_intr, 0, | 358 | err = request_irq(op->archdata.irqs[0], psycho_pcierr_intr, 0, |
| 359 | "SABRE_PCIERR", pbm); | 359 | "SABRE_PCIERR", pbm); |
| 360 | if (err) | 360 | if (err) |
| 361 | printk(KERN_WARNING "%s: Couldn't register PCIERR, err=%d.\n", | 361 | printk(KERN_WARNING "%s: Couldn't register PCIERR, err=%d.\n", |
| @@ -443,7 +443,7 @@ static void __devinit sabre_scan_bus(struct pci_pbm_info *pbm, | |||
| 443 | } | 443 | } |
| 444 | 444 | ||
| 445 | static void __devinit sabre_pbm_init(struct pci_pbm_info *pbm, | 445 | static void __devinit sabre_pbm_init(struct pci_pbm_info *pbm, |
| 446 | struct of_device *op) | 446 | struct platform_device *op) |
| 447 | { | 447 | { |
| 448 | psycho_pbm_init_common(pbm, op, "SABRE", PBM_CHIP_TYPE_SABRE); | 448 | psycho_pbm_init_common(pbm, op, "SABRE", PBM_CHIP_TYPE_SABRE); |
| 449 | pbm->pci_afsr = pbm->controller_regs + SABRE_PIOAFSR; | 449 | pbm->pci_afsr = pbm->controller_regs + SABRE_PIOAFSR; |
| @@ -452,7 +452,7 @@ static void __devinit sabre_pbm_init(struct pci_pbm_info *pbm, | |||
| 452 | sabre_scan_bus(pbm, &op->dev); | 452 | sabre_scan_bus(pbm, &op->dev); |
| 453 | } | 453 | } |
| 454 | 454 | ||
| 455 | static int __devinit sabre_probe(struct of_device *op, | 455 | static int __devinit sabre_probe(struct platform_device *op, |
| 456 | const struct of_device_id *match) | 456 | const struct of_device_id *match) |
| 457 | { | 457 | { |
| 458 | const struct linux_prom64_registers *pr_regs; | 458 | const struct linux_prom64_registers *pr_regs; |
| @@ -606,7 +606,7 @@ static struct of_platform_driver sabre_driver = { | |||
| 606 | 606 | ||
| 607 | static int __init sabre_init(void) | 607 | static int __init sabre_init(void) |
| 608 | { | 608 | { |
| 609 | return of_register_driver(&sabre_driver, &of_bus_type); | 609 | return of_register_platform_driver(&sabre_driver); |
| 610 | } | 610 | } |
| 611 | 611 | ||
| 612 | subsys_initcall(sabre_init); | 612 | subsys_initcall(sabre_init); |
diff --git a/arch/sparc/kernel/pci_schizo.c b/arch/sparc/kernel/pci_schizo.c index 97a1ae2e1c02..445a47a2fb3d 100644 --- a/arch/sparc/kernel/pci_schizo.c +++ b/arch/sparc/kernel/pci_schizo.c | |||
| @@ -844,7 +844,7 @@ static int pbm_routes_this_ino(struct pci_pbm_info *pbm, u32 ino) | |||
| 844 | */ | 844 | */ |
| 845 | static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) | 845 | static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) |
| 846 | { | 846 | { |
| 847 | struct of_device *op = of_find_device_by_node(pbm->op->dev.of_node); | 847 | struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); |
| 848 | u64 tmp, err_mask, err_no_mask; | 848 | u64 tmp, err_mask, err_no_mask; |
| 849 | int err; | 849 | int err; |
| 850 | 850 | ||
| @@ -857,14 +857,14 @@ static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 857 | */ | 857 | */ |
| 858 | 858 | ||
| 859 | if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { | 859 | if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { |
| 860 | err = request_irq(op->irqs[1], schizo_ue_intr, 0, | 860 | err = request_irq(op->archdata.irqs[1], schizo_ue_intr, 0, |
| 861 | "TOMATILLO_UE", pbm); | 861 | "TOMATILLO_UE", pbm); |
| 862 | if (err) | 862 | if (err) |
| 863 | printk(KERN_WARNING "%s: Could not register UE, " | 863 | printk(KERN_WARNING "%s: Could not register UE, " |
| 864 | "err=%d\n", pbm->name, err); | 864 | "err=%d\n", pbm->name, err); |
| 865 | } | 865 | } |
| 866 | if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { | 866 | if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { |
| 867 | err = request_irq(op->irqs[2], schizo_ce_intr, 0, | 867 | err = request_irq(op->archdata.irqs[2], schizo_ce_intr, 0, |
| 868 | "TOMATILLO_CE", pbm); | 868 | "TOMATILLO_CE", pbm); |
| 869 | if (err) | 869 | if (err) |
| 870 | printk(KERN_WARNING "%s: Could not register CE, " | 870 | printk(KERN_WARNING "%s: Could not register CE, " |
| @@ -872,10 +872,10 @@ static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 872 | } | 872 | } |
| 873 | err = 0; | 873 | err = 0; |
| 874 | if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { | 874 | if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { |
| 875 | err = request_irq(op->irqs[0], schizo_pcierr_intr, 0, | 875 | err = request_irq(op->archdata.irqs[0], schizo_pcierr_intr, 0, |
| 876 | "TOMATILLO_PCIERR", pbm); | 876 | "TOMATILLO_PCIERR", pbm); |
| 877 | } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { | 877 | } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { |
| 878 | err = request_irq(op->irqs[0], schizo_pcierr_intr, 0, | 878 | err = request_irq(op->archdata.irqs[0], schizo_pcierr_intr, 0, |
| 879 | "TOMATILLO_PCIERR", pbm); | 879 | "TOMATILLO_PCIERR", pbm); |
| 880 | } | 880 | } |
| 881 | if (err) | 881 | if (err) |
| @@ -883,7 +883,7 @@ static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 883 | "err=%d\n", pbm->name, err); | 883 | "err=%d\n", pbm->name, err); |
| 884 | 884 | ||
| 885 | if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { | 885 | if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { |
| 886 | err = request_irq(op->irqs[3], schizo_safarierr_intr, 0, | 886 | err = request_irq(op->archdata.irqs[3], schizo_safarierr_intr, 0, |
| 887 | "TOMATILLO_SERR", pbm); | 887 | "TOMATILLO_SERR", pbm); |
| 888 | if (err) | 888 | if (err) |
| 889 | printk(KERN_WARNING "%s: Could not register SERR, " | 889 | printk(KERN_WARNING "%s: Could not register SERR, " |
| @@ -939,7 +939,7 @@ static void tomatillo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 939 | 939 | ||
| 940 | static void schizo_register_error_handlers(struct pci_pbm_info *pbm) | 940 | static void schizo_register_error_handlers(struct pci_pbm_info *pbm) |
| 941 | { | 941 | { |
| 942 | struct of_device *op = of_find_device_by_node(pbm->op->dev.of_node); | 942 | struct platform_device *op = of_find_device_by_node(pbm->op->dev.of_node); |
| 943 | u64 tmp, err_mask, err_no_mask; | 943 | u64 tmp, err_mask, err_no_mask; |
| 944 | int err; | 944 | int err; |
| 945 | 945 | ||
| @@ -952,14 +952,14 @@ static void schizo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 952 | */ | 952 | */ |
| 953 | 953 | ||
| 954 | if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { | 954 | if (pbm_routes_this_ino(pbm, SCHIZO_UE_INO)) { |
| 955 | err = request_irq(op->irqs[1], schizo_ue_intr, 0, | 955 | err = request_irq(op->archdata.irqs[1], schizo_ue_intr, 0, |
| 956 | "SCHIZO_UE", pbm); | 956 | "SCHIZO_UE", pbm); |
| 957 | if (err) | 957 | if (err) |
| 958 | printk(KERN_WARNING "%s: Could not register UE, " | 958 | printk(KERN_WARNING "%s: Could not register UE, " |
| 959 | "err=%d\n", pbm->name, err); | 959 | "err=%d\n", pbm->name, err); |
| 960 | } | 960 | } |
| 961 | if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { | 961 | if (pbm_routes_this_ino(pbm, SCHIZO_CE_INO)) { |
| 962 | err = request_irq(op->irqs[2], schizo_ce_intr, 0, | 962 | err = request_irq(op->archdata.irqs[2], schizo_ce_intr, 0, |
| 963 | "SCHIZO_CE", pbm); | 963 | "SCHIZO_CE", pbm); |
| 964 | if (err) | 964 | if (err) |
| 965 | printk(KERN_WARNING "%s: Could not register CE, " | 965 | printk(KERN_WARNING "%s: Could not register CE, " |
| @@ -967,10 +967,10 @@ static void schizo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 967 | } | 967 | } |
| 968 | err = 0; | 968 | err = 0; |
| 969 | if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { | 969 | if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_A_INO)) { |
| 970 | err = request_irq(op->irqs[0], schizo_pcierr_intr, 0, | 970 | err = request_irq(op->archdata.irqs[0], schizo_pcierr_intr, 0, |
| 971 | "SCHIZO_PCIERR", pbm); | 971 | "SCHIZO_PCIERR", pbm); |
| 972 | } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { | 972 | } else if (pbm_routes_this_ino(pbm, SCHIZO_PCIERR_B_INO)) { |
| 973 | err = request_irq(op->irqs[0], schizo_pcierr_intr, 0, | 973 | err = request_irq(op->archdata.irqs[0], schizo_pcierr_intr, 0, |
| 974 | "SCHIZO_PCIERR", pbm); | 974 | "SCHIZO_PCIERR", pbm); |
| 975 | } | 975 | } |
| 976 | if (err) | 976 | if (err) |
| @@ -978,7 +978,7 @@ static void schizo_register_error_handlers(struct pci_pbm_info *pbm) | |||
| 978 | "err=%d\n", pbm->name, err); | 978 | "err=%d\n", pbm->name, err); |
| 979 | 979 | ||
| 980 | if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { | 980 | if (pbm_routes_this_ino(pbm, SCHIZO_SERR_INO)) { |
| 981 | err = request_irq(op->irqs[3], schizo_safarierr_intr, 0, | 981 | err = request_irq(op->archdata.irqs[3], schizo_safarierr_intr, 0, |
| 982 | "SCHIZO_SERR", pbm); | 982 | "SCHIZO_SERR", pbm); |
| 983 | if (err) | 983 | if (err) |
| 984 | printk(KERN_WARNING "%s: Could not register SERR, " | 984 | printk(KERN_WARNING "%s: Could not register SERR, " |
| @@ -1307,7 +1307,7 @@ static void schizo_pbm_hw_init(struct pci_pbm_info *pbm) | |||
| 1307 | } | 1307 | } |
| 1308 | 1308 | ||
| 1309 | static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm, | 1309 | static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm, |
| 1310 | struct of_device *op, u32 portid, | 1310 | struct platform_device *op, u32 portid, |
| 1311 | int chip_type) | 1311 | int chip_type) |
| 1312 | { | 1312 | { |
| 1313 | const struct linux_prom64_registers *regs; | 1313 | const struct linux_prom64_registers *regs; |
| @@ -1413,7 +1413,7 @@ static struct pci_pbm_info * __devinit schizo_find_sibling(u32 portid, | |||
| 1413 | return NULL; | 1413 | return NULL; |
| 1414 | } | 1414 | } |
| 1415 | 1415 | ||
| 1416 | static int __devinit __schizo_init(struct of_device *op, unsigned long chip_type) | 1416 | static int __devinit __schizo_init(struct platform_device *op, unsigned long chip_type) |
| 1417 | { | 1417 | { |
| 1418 | struct device_node *dp = op->dev.of_node; | 1418 | struct device_node *dp = op->dev.of_node; |
| 1419 | struct pci_pbm_info *pbm; | 1419 | struct pci_pbm_info *pbm; |
| @@ -1460,7 +1460,7 @@ out_err: | |||
| 1460 | return err; | 1460 | return err; |
| 1461 | } | 1461 | } |
| 1462 | 1462 | ||
| 1463 | static int __devinit schizo_probe(struct of_device *op, | 1463 | static int __devinit schizo_probe(struct platform_device *op, |
| 1464 | const struct of_device_id *match) | 1464 | const struct of_device_id *match) |
| 1465 | { | 1465 | { |
| 1466 | return __schizo_init(op, (unsigned long) match->data); | 1466 | return __schizo_init(op, (unsigned long) match->data); |
| @@ -1501,7 +1501,7 @@ static struct of_platform_driver schizo_driver = { | |||
| 1501 | 1501 | ||
| 1502 | static int __init schizo_init(void) | 1502 | static int __init schizo_init(void) |
| 1503 | { | 1503 | { |
| 1504 | return of_register_driver(&schizo_driver, &of_bus_type); | 1504 | return of_register_platform_driver(&schizo_driver); |
| 1505 | } | 1505 | } |
| 1506 | 1506 | ||
| 1507 | subsys_initcall(schizo_init); | 1507 | subsys_initcall(schizo_init); |
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index a24af6f7e17f..743344aa6d8a 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c | |||
| @@ -879,7 +879,7 @@ static void pci_sun4v_msi_init(struct pci_pbm_info *pbm) | |||
| 879 | #endif /* !(CONFIG_PCI_MSI) */ | 879 | #endif /* !(CONFIG_PCI_MSI) */ |
| 880 | 880 | ||
| 881 | static int __devinit pci_sun4v_pbm_init(struct pci_pbm_info *pbm, | 881 | static int __devinit pci_sun4v_pbm_init(struct pci_pbm_info *pbm, |
| 882 | struct of_device *op, u32 devhandle) | 882 | struct platform_device *op, u32 devhandle) |
| 883 | { | 883 | { |
| 884 | struct device_node *dp = op->dev.of_node; | 884 | struct device_node *dp = op->dev.of_node; |
| 885 | int err; | 885 | int err; |
| @@ -918,7 +918,7 @@ static int __devinit pci_sun4v_pbm_init(struct pci_pbm_info *pbm, | |||
| 918 | return 0; | 918 | return 0; |
| 919 | } | 919 | } |
| 920 | 920 | ||
| 921 | static int __devinit pci_sun4v_probe(struct of_device *op, | 921 | static int __devinit pci_sun4v_probe(struct platform_device *op, |
| 922 | const struct of_device_id *match) | 922 | const struct of_device_id *match) |
| 923 | { | 923 | { |
| 924 | const struct linux_prom64_registers *regs; | 924 | const struct linux_prom64_registers *regs; |
| @@ -1019,7 +1019,7 @@ static struct of_platform_driver pci_sun4v_driver = { | |||
| 1019 | 1019 | ||
| 1020 | static int __init pci_sun4v_init(void) | 1020 | static int __init pci_sun4v_init(void) |
| 1021 | { | 1021 | { |
| 1022 | return of_register_driver(&pci_sun4v_driver, &of_bus_type); | 1022 | return of_register_platform_driver(&pci_sun4v_driver); |
| 1023 | } | 1023 | } |
| 1024 | 1024 | ||
| 1025 | subsys_initcall(pci_sun4v_init); | 1025 | subsys_initcall(pci_sun4v_init); |
diff --git a/arch/sparc/kernel/pmc.c b/arch/sparc/kernel/pmc.c index 9589d8b9b0c1..94536a85f161 100644 --- a/arch/sparc/kernel/pmc.c +++ b/arch/sparc/kernel/pmc.c | |||
| @@ -51,7 +51,7 @@ static void pmc_swift_idle(void) | |||
| 51 | #endif | 51 | #endif |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | static int __devinit pmc_probe(struct of_device *op, | 54 | static int __devinit pmc_probe(struct platform_device *op, |
| 55 | const struct of_device_id *match) | 55 | const struct of_device_id *match) |
| 56 | { | 56 | { |
| 57 | regs = of_ioremap(&op->resource[0], 0, | 57 | regs = of_ioremap(&op->resource[0], 0, |
| @@ -89,7 +89,7 @@ static struct of_platform_driver pmc_driver = { | |||
| 89 | 89 | ||
| 90 | static int __init pmc_init(void) | 90 | static int __init pmc_init(void) |
| 91 | { | 91 | { |
| 92 | return of_register_driver(&pmc_driver, &of_bus_type); | 92 | return of_register_platform_driver(&pmc_driver); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | /* This driver is not critical to the boot process | 95 | /* This driver is not critical to the boot process |
diff --git a/arch/sparc/kernel/power.c b/arch/sparc/kernel/power.c index 168d4cb63f5b..2c59f4d387dd 100644 --- a/arch/sparc/kernel/power.c +++ b/arch/sparc/kernel/power.c | |||
| @@ -33,10 +33,10 @@ static int __devinit has_button_interrupt(unsigned int irq, struct device_node * | |||
| 33 | return 1; | 33 | return 1; |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | static int __devinit power_probe(struct of_device *op, const struct of_device_id *match) | 36 | static int __devinit power_probe(struct platform_device *op, const struct of_device_id *match) |
| 37 | { | 37 | { |
| 38 | struct resource *res = &op->resource[0]; | 38 | struct resource *res = &op->resource[0]; |
| 39 | unsigned int irq= op->irqs[0]; | 39 | unsigned int irq = op->archdata.irqs[0]; |
| 40 | 40 | ||
| 41 | power_reg = of_ioremap(res, 0, 0x4, "power"); | 41 | power_reg = of_ioremap(res, 0, 0x4, "power"); |
| 42 | 42 | ||
| @@ -70,7 +70,7 @@ static struct of_platform_driver power_driver = { | |||
| 70 | 70 | ||
| 71 | static int __init power_init(void) | 71 | static int __init power_init(void) |
| 72 | { | 72 | { |
| 73 | return of_register_driver(&power_driver, &of_platform_bus_type); | 73 | return of_register_platform_driver(&power_driver); |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | device_initcall(power_init); | 76 | device_initcall(power_init); |
diff --git a/arch/sparc/kernel/prom.h b/arch/sparc/kernel/prom.h index a8591ef2636d..eeb04a782ec8 100644 --- a/arch/sparc/kernel/prom.h +++ b/arch/sparc/kernel/prom.h | |||
| @@ -9,14 +9,6 @@ extern void irq_trans_init(struct device_node *dp); | |||
| 9 | 9 | ||
| 10 | extern unsigned int prom_unique_id; | 10 | extern unsigned int prom_unique_id; |
| 11 | 11 | ||
| 12 | static inline int is_root_node(const struct device_node *dp) | ||
| 13 | { | ||
| 14 | if (!dp) | ||
| 15 | return 0; | ||
| 16 | |||
| 17 | return (dp->parent == NULL); | ||
| 18 | } | ||
| 19 | |||
| 20 | extern char *build_path_component(struct device_node *dp); | 12 | extern char *build_path_component(struct device_node *dp); |
| 21 | extern void of_console_init(void); | 13 | extern void of_console_init(void); |
| 22 | 14 | ||
diff --git a/arch/sparc/kernel/prom_64.c b/arch/sparc/kernel/prom_64.c index 466a32763ea8..86597d9867fd 100644 --- a/arch/sparc/kernel/prom_64.c +++ b/arch/sparc/kernel/prom_64.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
| 22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 23 | #include <linux/memblock.h> | 23 | #include <linux/memblock.h> |
| 24 | #include <linux/of_device.h> | 24 | #include <linux/of.h> |
| 25 | 25 | ||
| 26 | #include <asm/prom.h> | 26 | #include <asm/prom.h> |
| 27 | #include <asm/oplib.h> | 27 | #include <asm/oplib.h> |
| @@ -81,7 +81,7 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) | |||
| 81 | return; | 81 | return; |
| 82 | 82 | ||
| 83 | regs = rprop->value; | 83 | regs = rprop->value; |
| 84 | if (!is_root_node(dp->parent)) { | 84 | if (!of_node_is_root(dp->parent)) { |
| 85 | sprintf(tmp_buf, "%s@%x,%x", | 85 | sprintf(tmp_buf, "%s@%x,%x", |
| 86 | dp->name, | 86 | dp->name, |
| 87 | (unsigned int) (regs->phys_addr >> 32UL), | 87 | (unsigned int) (regs->phys_addr >> 32UL), |
| @@ -121,7 +121,7 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) | |||
| 121 | return; | 121 | return; |
| 122 | 122 | ||
| 123 | regs = prop->value; | 123 | regs = prop->value; |
| 124 | if (!is_root_node(dp->parent)) { | 124 | if (!of_node_is_root(dp->parent)) { |
| 125 | sprintf(tmp_buf, "%s@%x,%x", | 125 | sprintf(tmp_buf, "%s@%x,%x", |
| 126 | dp->name, | 126 | dp->name, |
| 127 | (unsigned int) (regs->phys_addr >> 32UL), | 127 | (unsigned int) (regs->phys_addr >> 32UL), |
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c index 57ac9e28be0c..1f830da2ddf2 100644 --- a/arch/sparc/kernel/prom_common.c +++ b/arch/sparc/kernel/prom_common.c | |||
| @@ -244,7 +244,7 @@ char * __init build_full_name(struct device_node *dp) | |||
| 244 | 244 | ||
| 245 | n = prom_early_alloc(len); | 245 | n = prom_early_alloc(len); |
| 246 | strcpy(n, dp->parent->full_name); | 246 | strcpy(n, dp->parent->full_name); |
| 247 | if (!is_root_node(dp->parent)) { | 247 | if (!of_node_is_root(dp->parent)) { |
| 248 | strcpy(n + plen, "/"); | 248 | strcpy(n + plen, "/"); |
| 249 | plen++; | 249 | plen++; |
| 250 | } | 250 | } |
diff --git a/arch/sparc/kernel/prom_irqtrans.c b/arch/sparc/kernel/prom_irqtrans.c index 5702ad4710cb..ce651147fabc 100644 --- a/arch/sparc/kernel/prom_irqtrans.c +++ b/arch/sparc/kernel/prom_irqtrans.c | |||
| @@ -719,7 +719,7 @@ static unsigned int central_build_irq(struct device_node *dp, | |||
| 719 | void *_data) | 719 | void *_data) |
| 720 | { | 720 | { |
| 721 | struct device_node *central_dp = _data; | 721 | struct device_node *central_dp = _data; |
| 722 | struct of_device *central_op = of_find_device_by_node(central_dp); | 722 | struct platform_device *central_op = of_find_device_by_node(central_dp); |
| 723 | struct resource *res; | 723 | struct resource *res; |
| 724 | unsigned long imap, iclr; | 724 | unsigned long imap, iclr; |
| 725 | u32 tmp; | 725 | u32 tmp; |
diff --git a/arch/sparc/kernel/psycho_common.c b/arch/sparc/kernel/psycho_common.c index 3f34ac853931..fe2af66bb198 100644 --- a/arch/sparc/kernel/psycho_common.c +++ b/arch/sparc/kernel/psycho_common.c | |||
| @@ -447,7 +447,7 @@ int psycho_iommu_init(struct pci_pbm_info *pbm, int tsbsize, | |||
| 447 | 447 | ||
| 448 | } | 448 | } |
| 449 | 449 | ||
| 450 | void psycho_pbm_init_common(struct pci_pbm_info *pbm, struct of_device *op, | 450 | void psycho_pbm_init_common(struct pci_pbm_info *pbm, struct platform_device *op, |
| 451 | const char *chip_name, int chip_type) | 451 | const char *chip_name, int chip_type) |
| 452 | { | 452 | { |
| 453 | struct device_node *dp = op->dev.of_node; | 453 | struct device_node *dp = op->dev.of_node; |
diff --git a/arch/sparc/kernel/psycho_common.h b/arch/sparc/kernel/psycho_common.h index 092c278ef28d..590b4ed8ab5e 100644 --- a/arch/sparc/kernel/psycho_common.h +++ b/arch/sparc/kernel/psycho_common.h | |||
| @@ -42,7 +42,7 @@ extern int psycho_iommu_init(struct pci_pbm_info *pbm, int tsbsize, | |||
| 42 | unsigned long write_complete_offset); | 42 | unsigned long write_complete_offset); |
| 43 | 43 | ||
| 44 | extern void psycho_pbm_init_common(struct pci_pbm_info *pbm, | 44 | extern void psycho_pbm_init_common(struct pci_pbm_info *pbm, |
| 45 | struct of_device *op, | 45 | struct platform_device *op, |
| 46 | const char *chip_name, int chip_type); | 46 | const char *chip_name, int chip_type); |
| 47 | 47 | ||
| 48 | #endif /* _PSYCHO_COMMON_H */ | 48 | #endif /* _PSYCHO_COMMON_H */ |
diff --git a/arch/sparc/kernel/sbus.c b/arch/sparc/kernel/sbus.c index cfeaf04b9cdf..2ca32d13abcf 100644 --- a/arch/sparc/kernel/sbus.c +++ b/arch/sparc/kernel/sbus.c | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | void sbus_set_sbus64(struct device *dev, int bursts) | 57 | void sbus_set_sbus64(struct device *dev, int bursts) |
| 58 | { | 58 | { |
| 59 | struct iommu *iommu = dev->archdata.iommu; | 59 | struct iommu *iommu = dev->archdata.iommu; |
| 60 | struct of_device *op = to_of_device(dev); | 60 | struct platform_device *op = to_platform_device(dev); |
| 61 | const struct linux_prom_registers *regs; | 61 | const struct linux_prom_registers *regs; |
| 62 | unsigned long cfg_reg; | 62 | unsigned long cfg_reg; |
| 63 | int slot; | 63 | int slot; |
| @@ -204,7 +204,7 @@ static unsigned long sysio_imap_to_iclr(unsigned long imap) | |||
| 204 | return imap + diff; | 204 | return imap + diff; |
| 205 | } | 205 | } |
| 206 | 206 | ||
| 207 | static unsigned int sbus_build_irq(struct of_device *op, unsigned int ino) | 207 | static unsigned int sbus_build_irq(struct platform_device *op, unsigned int ino) |
| 208 | { | 208 | { |
| 209 | struct iommu *iommu = op->dev.archdata.iommu; | 209 | struct iommu *iommu = op->dev.archdata.iommu; |
| 210 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; | 210 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; |
| @@ -267,7 +267,7 @@ static unsigned int sbus_build_irq(struct of_device *op, unsigned int ino) | |||
| 267 | #define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ | 267 | #define SYSIO_UEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ |
| 268 | static irqreturn_t sysio_ue_handler(int irq, void *dev_id) | 268 | static irqreturn_t sysio_ue_handler(int irq, void *dev_id) |
| 269 | { | 269 | { |
| 270 | struct of_device *op = dev_id; | 270 | struct platform_device *op = dev_id; |
| 271 | struct iommu *iommu = op->dev.archdata.iommu; | 271 | struct iommu *iommu = op->dev.archdata.iommu; |
| 272 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; | 272 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; |
| 273 | unsigned long afsr_reg, afar_reg; | 273 | unsigned long afsr_reg, afar_reg; |
| @@ -341,7 +341,7 @@ static irqreturn_t sysio_ue_handler(int irq, void *dev_id) | |||
| 341 | #define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ | 341 | #define SYSIO_CEAFSR_RESV2 0x0000001fffffffffUL /* Reserved */ |
| 342 | static irqreturn_t sysio_ce_handler(int irq, void *dev_id) | 342 | static irqreturn_t sysio_ce_handler(int irq, void *dev_id) |
| 343 | { | 343 | { |
| 344 | struct of_device *op = dev_id; | 344 | struct platform_device *op = dev_id; |
| 345 | struct iommu *iommu = op->dev.archdata.iommu; | 345 | struct iommu *iommu = op->dev.archdata.iommu; |
| 346 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; | 346 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; |
| 347 | unsigned long afsr_reg, afar_reg; | 347 | unsigned long afsr_reg, afar_reg; |
| @@ -420,7 +420,7 @@ static irqreturn_t sysio_ce_handler(int irq, void *dev_id) | |||
| 420 | #define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */ | 420 | #define SYSIO_SBAFSR_RESV3 0x0000001fffffffffUL /* Reserved */ |
| 421 | static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id) | 421 | static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id) |
| 422 | { | 422 | { |
| 423 | struct of_device *op = dev_id; | 423 | struct platform_device *op = dev_id; |
| 424 | struct iommu *iommu = op->dev.archdata.iommu; | 424 | struct iommu *iommu = op->dev.archdata.iommu; |
| 425 | unsigned long afsr_reg, afar_reg, reg_base; | 425 | unsigned long afsr_reg, afar_reg, reg_base; |
| 426 | unsigned long afsr, afar, error_bits; | 426 | unsigned long afsr, afar, error_bits; |
| @@ -488,7 +488,7 @@ static irqreturn_t sysio_sbus_error_handler(int irq, void *dev_id) | |||
| 488 | #define SYSIO_CE_INO 0x35 | 488 | #define SYSIO_CE_INO 0x35 |
| 489 | #define SYSIO_SBUSERR_INO 0x36 | 489 | #define SYSIO_SBUSERR_INO 0x36 |
| 490 | 490 | ||
| 491 | static void __init sysio_register_error_handlers(struct of_device *op) | 491 | static void __init sysio_register_error_handlers(struct platform_device *op) |
| 492 | { | 492 | { |
| 493 | struct iommu *iommu = op->dev.archdata.iommu; | 493 | struct iommu *iommu = op->dev.archdata.iommu; |
| 494 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; | 494 | unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; |
| @@ -534,7 +534,7 @@ static void __init sysio_register_error_handlers(struct of_device *op) | |||
| 534 | } | 534 | } |
| 535 | 535 | ||
| 536 | /* Boot time initialization. */ | 536 | /* Boot time initialization. */ |
| 537 | static void __init sbus_iommu_init(struct of_device *op) | 537 | static void __init sbus_iommu_init(struct platform_device *op) |
| 538 | { | 538 | { |
| 539 | const struct linux_prom64_registers *pr; | 539 | const struct linux_prom64_registers *pr; |
| 540 | struct device_node *dp = op->dev.of_node; | 540 | struct device_node *dp = op->dev.of_node; |
| @@ -663,7 +663,7 @@ static int __init sbus_init(void) | |||
| 663 | struct device_node *dp; | 663 | struct device_node *dp; |
| 664 | 664 | ||
| 665 | for_each_node_by_name(dp, "sbus") { | 665 | for_each_node_by_name(dp, "sbus") { |
| 666 | struct of_device *op = of_find_device_by_node(dp); | 666 | struct platform_device *op = of_find_device_by_node(dp); |
| 667 | 667 | ||
| 668 | sbus_iommu_init(op); | 668 | sbus_iommu_init(op); |
| 669 | of_propagate_archdata(op); | 669 | of_propagate_archdata(op); |
diff --git a/arch/sparc/kernel/time_32.c b/arch/sparc/kernel/time_32.c index e404b063be2c..9c743b1886ff 100644 --- a/arch/sparc/kernel/time_32.c +++ b/arch/sparc/kernel/time_32.c | |||
| @@ -142,7 +142,7 @@ static struct platform_device m48t59_rtc = { | |||
| 142 | }, | 142 | }, |
| 143 | }; | 143 | }; |
| 144 | 144 | ||
| 145 | static int __devinit clock_probe(struct of_device *op, const struct of_device_id *match) | 145 | static int __devinit clock_probe(struct platform_device *op, const struct of_device_id *match) |
| 146 | { | 146 | { |
| 147 | struct device_node *dp = op->dev.of_node; | 147 | struct device_node *dp = op->dev.of_node; |
| 148 | const char *model = of_get_property(dp, "model", NULL); | 148 | const char *model = of_get_property(dp, "model", NULL); |
| @@ -189,7 +189,7 @@ static struct of_platform_driver clock_driver = { | |||
| 189 | /* Probe for the mostek real time clock chip. */ | 189 | /* Probe for the mostek real time clock chip. */ |
| 190 | static int __init clock_init(void) | 190 | static int __init clock_init(void) |
| 191 | { | 191 | { |
| 192 | return of_register_driver(&clock_driver, &of_platform_bus_type); | 192 | return of_register_platform_driver(&clock_driver); |
| 193 | } | 193 | } |
| 194 | /* Must be after subsys_initcall() so that busses are probed. Must | 194 | /* Must be after subsys_initcall() so that busses are probed. Must |
| 195 | * be before device_initcall() because things like the RTC driver | 195 | * be before device_initcall() because things like the RTC driver |
diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index 21e9fcae0668..3bc9c9979b92 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c | |||
| @@ -419,7 +419,7 @@ static struct platform_device rtc_cmos_device = { | |||
| 419 | .num_resources = 1, | 419 | .num_resources = 1, |
| 420 | }; | 420 | }; |
| 421 | 421 | ||
| 422 | static int __devinit rtc_probe(struct of_device *op, const struct of_device_id *match) | 422 | static int __devinit rtc_probe(struct platform_device *op, const struct of_device_id *match) |
| 423 | { | 423 | { |
| 424 | struct resource *r; | 424 | struct resource *r; |
| 425 | 425 | ||
| @@ -477,7 +477,7 @@ static struct platform_device rtc_bq4802_device = { | |||
| 477 | .num_resources = 1, | 477 | .num_resources = 1, |
| 478 | }; | 478 | }; |
| 479 | 479 | ||
| 480 | static int __devinit bq4802_probe(struct of_device *op, const struct of_device_id *match) | 480 | static int __devinit bq4802_probe(struct platform_device *op, const struct of_device_id *match) |
| 481 | { | 481 | { |
| 482 | 482 | ||
| 483 | printk(KERN_INFO "%s: BQ4802 regs at 0x%llx\n", | 483 | printk(KERN_INFO "%s: BQ4802 regs at 0x%llx\n", |
| @@ -534,7 +534,7 @@ static struct platform_device m48t59_rtc = { | |||
| 534 | }, | 534 | }, |
| 535 | }; | 535 | }; |
| 536 | 536 | ||
| 537 | static int __devinit mostek_probe(struct of_device *op, const struct of_device_id *match) | 537 | static int __devinit mostek_probe(struct platform_device *op, const struct of_device_id *match) |
| 538 | { | 538 | { |
| 539 | struct device_node *dp = op->dev.of_node; | 539 | struct device_node *dp = op->dev.of_node; |
| 540 | 540 | ||
| @@ -586,9 +586,9 @@ static int __init clock_init(void) | |||
| 586 | if (tlb_type == hypervisor) | 586 | if (tlb_type == hypervisor) |
| 587 | return platform_device_register(&rtc_sun4v_device); | 587 | return platform_device_register(&rtc_sun4v_device); |
| 588 | 588 | ||
| 589 | (void) of_register_driver(&rtc_driver, &of_platform_bus_type); | 589 | (void) of_register_platform_driver(&rtc_driver); |
| 590 | (void) of_register_driver(&mostek_driver, &of_platform_bus_type); | 590 | (void) of_register_platform_driver(&mostek_driver); |
| 591 | (void) of_register_driver(&bq4802_driver, &of_platform_bus_type); | 591 | (void) of_register_platform_driver(&bq4802_driver); |
| 592 | 592 | ||
| 593 | return 0; | 593 | return 0; |
| 594 | } | 594 | } |
diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c index 005e758a4db7..fc58c3e917df 100644 --- a/arch/sparc/mm/io-unit.c +++ b/arch/sparc/mm/io-unit.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | #define IOPERM (IOUPTE_CACHE | IOUPTE_WRITE | IOUPTE_VALID) | 35 | #define IOPERM (IOUPTE_CACHE | IOUPTE_WRITE | IOUPTE_VALID) |
| 36 | #define MKIOPTE(phys) __iopte((((phys)>>4) & IOUPTE_PAGE) | IOPERM) | 36 | #define MKIOPTE(phys) __iopte((((phys)>>4) & IOUPTE_PAGE) | IOPERM) |
| 37 | 37 | ||
| 38 | static void __init iounit_iommu_init(struct of_device *op) | 38 | static void __init iounit_iommu_init(struct platform_device *op) |
| 39 | { | 39 | { |
| 40 | struct iounit_struct *iounit; | 40 | struct iounit_struct *iounit; |
| 41 | iopte_t *xpt, *xptend; | 41 | iopte_t *xpt, *xptend; |
| @@ -74,7 +74,7 @@ static int __init iounit_init(void) | |||
| 74 | struct device_node *dp; | 74 | struct device_node *dp; |
| 75 | 75 | ||
| 76 | for_each_node_by_name(dp, "sbi") { | 76 | for_each_node_by_name(dp, "sbi") { |
| 77 | struct of_device *op = of_find_device_by_node(dp); | 77 | struct platform_device *op = of_find_device_by_node(dp); |
| 78 | 78 | ||
| 79 | iounit_iommu_init(op); | 79 | iounit_iommu_init(op); |
| 80 | of_propagate_archdata(op); | 80 | of_propagate_archdata(op); |
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c index b2e6e73888b5..07fc6a65d9b6 100644 --- a/arch/sparc/mm/iommu.c +++ b/arch/sparc/mm/iommu.c | |||
| @@ -56,14 +56,14 @@ static pgprot_t dvma_prot; /* Consistent mapping pte flags */ | |||
| 56 | #define IOPERM (IOPTE_CACHE | IOPTE_WRITE | IOPTE_VALID) | 56 | #define IOPERM (IOPTE_CACHE | IOPTE_WRITE | IOPTE_VALID) |
| 57 | #define MKIOPTE(pfn, perm) (((((pfn)<<8) & IOPTE_PAGE) | (perm)) & ~IOPTE_WAZ) | 57 | #define MKIOPTE(pfn, perm) (((((pfn)<<8) & IOPTE_PAGE) | (perm)) & ~IOPTE_WAZ) |
| 58 | 58 | ||
| 59 | static void __init sbus_iommu_init(struct of_device *op) | 59 | static void __init sbus_iommu_init(struct platform_device *op) |
| 60 | { | 60 | { |
| 61 | struct iommu_struct *iommu; | 61 | struct iommu_struct *iommu; |
| 62 | unsigned int impl, vers; | 62 | unsigned int impl, vers; |
| 63 | unsigned long *bitmap; | 63 | unsigned long *bitmap; |
| 64 | unsigned long tmp; | 64 | unsigned long tmp; |
| 65 | 65 | ||
| 66 | iommu = kmalloc(sizeof(struct iommu_struct), GFP_ATOMIC); | 66 | iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL); |
| 67 | if (!iommu) { | 67 | if (!iommu) { |
| 68 | prom_printf("Unable to allocate iommu structure\n"); | 68 | prom_printf("Unable to allocate iommu structure\n"); |
| 69 | prom_halt(); | 69 | prom_halt(); |
| @@ -132,7 +132,7 @@ static int __init iommu_init(void) | |||
| 132 | struct device_node *dp; | 132 | struct device_node *dp; |
| 133 | 133 | ||
| 134 | for_each_node_by_name(dp, "iommu") { | 134 | for_each_node_by_name(dp, "iommu") { |
| 135 | struct of_device *op = of_find_device_by_node(dp); | 135 | struct platform_device *op = of_find_device_by_node(dp); |
| 136 | 136 | ||
| 137 | sbus_iommu_init(op); | 137 | sbus_iommu_init(op); |
| 138 | of_propagate_archdata(op); | 138 | of_propagate_archdata(op); |
