1 /* 2 * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. 3 * <benh@kernel.crashing.org> 4 * and Arnd Bergmann, IBM Corp. 5 * Merged from powerpc/kernel/of_platform.c and 6 * sparc{,64}/kernel/of_device.c by Stephen Rothwell 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 * 13 */ 14 #include <linux/errno.h> 15 #include <linux/module.h> 16 #include <linux/amba/bus.h> 17 #include <linux/device.h> 18 #include <linux/dma-mapping.h> 19 #include <linux/slab.h> 20 #include <linux/of_address.h> 21 #include <linux/of_device.h> 22 #include <linux/of_irq.h> 23 #include <linux/of_platform.h> 24 #include <linux/of_reserved_mem.h> 25 #include <linux/platform_device.h> 26 27 const struct of_device_id of_default_bus_match_table[] = { 28 { .compatible = "simple-bus", }, 29 #ifdef CONFIG_ARM_AMBA 30 { .compatible = "arm,amba-bus", }, 31 #endif /* CONFIG_ARM_AMBA */ 32 {} /* Empty terminated list */ 33 }; 34 35 static int of_dev_node_match(struct device *dev, void *data) 36 { 37 return dev->of_node == data; 38 } 39 40 /** 41 * of_find_device_by_node - Find the platform_device associated with a node 42 * @np: Pointer to device tree node 43 * 44 * Returns platform_device pointer, or NULL if not found 45 */ 46 struct platform_device *of_find_device_by_node(struct device_node *np) 47 { 48 struct device *dev; 49 50 dev = bus_find_device(&platform_bus_type, NULL, np, of_dev_node_match); 51 return dev ? to_platform_device(dev) : NULL; 52 } 53 EXPORT_SYMBOL(of_find_device_by_node); 54 55 #if defined(CONFIG_PPC_DCR) 56 #include <asm/dcr.h> 57 #endif 58 59 #ifdef CONFIG_OF_ADDRESS 60 /* 61 * The following routines scan a subtree and registers a device for 62 * each applicable node. 63 * 64 * Note: sparc doesn't use these routines because it has a different 65 * mechanism for creating devices from device tree nodes. 66 */ 67 68 /** 69 * of_device_make_bus_id - Use the device node data to assign a unique name 70 * @dev: pointer to device structure that is linked to a device tree node 71 * 72 * This routine will first try using either the dcr-reg or the reg property 73 * value to derive a unique name. As a last resort it will use the node 74 * name followed by a unique number. 75 */ 76 void of_device_make_bus_id(struct device *dev) 77 { 78 static atomic_t bus_no_reg_magic; 79 struct device_node *node = dev->of_node; 80 const __be32 *reg; 81 u64 addr; 82 const __be32 *addrp; 83 int magic; 84 85 #ifdef CONFIG_PPC_DCR 86 /* 87 * If it's a DCR based device, use 'd' for native DCRs 88 * and 'D' for MMIO DCRs. 89 */ 90 reg = of_get_property(node, "dcr-reg", NULL); 91 if (reg) { 92 #ifdef CONFIG_PPC_DCR_NATIVE 93 dev_set_name(dev, "d%x.%s", *reg, node->name); 94 #else /* CONFIG_PPC_DCR_NATIVE */ 95 u64 addr = of_translate_dcr_address(node, *reg, NULL); 96 if (addr != OF_BAD_ADDR) { 97 dev_set_name(dev, "D%llx.%s", 98 (unsigned long long)addr, node->name); 99 return; 100 } 101 #endif /* !CONFIG_PPC_DCR_NATIVE */ 102 } 103 #endif /* CONFIG_PPC_DCR */ 104 105 /* 106 * For MMIO, get the physical address 107 */ 108 reg = of_get_property(node, "reg", NULL); 109 if (reg) { 110 if (of_can_translate_address(node)) { 111 addr = of_translate_address(node, reg); 112 } else { 113 addrp = of_get_address(node, 0, NULL, NULL); 114 if (addrp) 115 addr = of_read_number(addrp, 1); 116 else 117 addr = OF_BAD_ADDR; 118 } 119 if (addr != OF_BAD_ADDR) { 120 dev_set_name(dev, "%llx.%s", 121 (unsigned long long)addr, node->name); 122 return; 123 } 124 } 125 126 /* 127 * No BusID, use the node name and add a globally incremented 128 * counter (and pray...) 129 */ 130 magic = atomic_add_return(1, &bus_no_reg_magic); 131 dev_set_name(dev, "%s.%d", node->name, magic - 1); 132 } 133 134 /** 135 * of_device_alloc - Allocate and initialize an of_device 136 * @np: device node to assign to device 137 * @bus_id: Name to assign to the device. May be null to use default name. 138 * @parent: Parent device. 139 */ 140 struct platform_device *of_device_alloc(struct device_node *np, 141 const char *bus_id, 142 struct device *parent) 143 { 144 struct platform_device *dev; 145 int rc, i, num_reg = 0, num_irq; 146 struct resource *res, temp_res; 147 148 dev = platform_device_alloc("", -1); 149 if (!dev) 150 return NULL; 151 152 /* count the io and irq resources */ 153 if (of_can_translate_address(np)) 154 while (of_address_to_resource(np, num_reg, &temp_res) == 0) 155 num_reg++; 156 num_irq = of_irq_count(np); 157 158 /* Populate the resource table */ 159 if (num_irq || num_reg) { 160 res = kzalloc(sizeof(*res) * (num_irq + num_reg), GFP_KERNEL); 161 if (!res) { 162 platform_device_put(dev); 163 return NULL; 164 } 165 166 dev->num_resources = num_reg + num_irq; 167 dev->resource = res; 168 for (i = 0; i < num_reg; i++, res++) { 169 rc = of_address_to_resource(np, i, res); 170 WARN_ON(rc); 171 } 172 WARN_ON(of_irq_to_resource_table(np, res, num_irq) != num_irq); 173 } 174 175 dev->dev.of_node = of_node_get(np); 176 #if defined(CONFIG_MICROBLAZE) 177 dev->dev.dma_mask = &dev->archdata.dma_mask; 178 #endif 179 dev->dev.parent = parent; 180 181 if (bus_id) 182 dev_set_name(&dev->dev, "%s", bus_id); 183 else 184 of_device_make_bus_id(&dev->dev); 185 186 return dev; 187 } 188 EXPORT_SYMBOL(of_device_alloc); 189 190 /** 191 * of_platform_device_create_pdata - Alloc, initialize and register an of_device 192 * @np: pointer to node to create device for 193 * @bus_id: name to assign device 194 * @platform_data: pointer to populate platform_data pointer with 195 * @parent: Linux device model parent device. 196 * 197 * Returns pointer to created platform device, or NULL if a device was not 198 * registered. Unavailable devices will not get registered. 199 */ 200 static struct platform_device *of_platform_device_create_pdata( 201 struct device_node *np, 202 const char *bus_id, 203 void *platform_data, 204 struct device *parent) 205 { 206 struct platform_device *dev; 207 208 if (!of_device_is_available(np)) 209 return NULL; 210 211 dev = of_device_alloc(np, bus_id, parent); 212 if (!dev) 213 return NULL; 214 215 #if defined(CONFIG_MICROBLAZE) 216 dev->archdata.dma_mask = 0xffffffffUL; 217 #endif 218 dev->dev.coherent_dma_mask = DMA_BIT_MASK(32); 219 dev->dev.bus = &platform_bus_type; 220 dev->dev.platform_data = platform_data; 221 222 of_reserved_mem_device_init(&dev->dev); 223 224 /* We do not fill the DMA ops for platform devices by default. 225 * This is currently the responsibility of the platform code 226 * to do such, possibly using a device notifier 227 */ 228 229 if (of_device_add(dev) != 0) { 230 platform_device_put(dev); 231 of_reserved_mem_device_release(&dev->dev); 232 return NULL; 233 } 234 235 return dev; 236 } 237 238 /** 239 * of_platform_device_create - Alloc, initialize and register an of_device 240 * @np: pointer to node to create device for 241 * @bus_id: name to assign device 242 * @parent: Linux device model parent device. 243 * 244 * Returns pointer to created platform device, or NULL if a device was not 245 * registered. Unavailable devices will not get registered. 246 */ 247 struct platform_device *of_platform_device_create(struct device_node *np, 248 const char *bus_id, 249 struct device *parent) 250 { 251 return of_platform_device_create_pdata(np, bus_id, NULL, parent); 252 } 253 EXPORT_SYMBOL(of_platform_device_create); 254 255 #ifdef CONFIG_ARM_AMBA 256 static struct amba_device *of_amba_device_create(struct device_node *node, 257 const char *bus_id, 258 void *platform_data, 259 struct device *parent) 260 { 261 struct amba_device *dev; 262 const void *prop; 263 int i, ret; 264 265 pr_debug("Creating amba device %s\n", node->full_name); 266 267 if (!of_device_is_available(node)) 268 return NULL; 269 270 dev = amba_device_alloc(NULL, 0, 0); 271 if (!dev) { 272 pr_err("%s(): amba_device_alloc() failed for %s\n", 273 __func__, node->full_name); 274 return NULL; 275 } 276 277 /* setup generic device info */ 278 dev->dev.coherent_dma_mask = ~0; 279 dev->dev.of_node = of_node_get(node); 280 dev->dev.parent = parent; 281 dev->dev.platform_data = platform_data; 282 if (bus_id) 283 dev_set_name(&dev->dev, "%s", bus_id); 284 else 285 of_device_make_bus_id(&dev->dev); 286 287 /* setup amba-specific device info */ 288 dev->dma_mask = ~0; 289 290 /* Allow the HW Peripheral ID to be overridden */ 291 prop = of_get_property(node, "arm,primecell-periphid", NULL); 292 if (prop) 293 dev->periphid = of_read_ulong(prop, 1); 294 295 /* Decode the IRQs and address ranges */ 296 for (i = 0; i < AMBA_NR_IRQS; i++) 297 dev->irq[i] = irq_of_parse_and_map(node, i); 298 299 ret = of_address_to_resource(node, 0, &dev->res); 300 if (ret) { 301 pr_err("%s(): of_address_to_resource() failed (%d) for %s\n", 302 __func__, ret, node->full_name); 303 goto err_free; 304 } 305 306 ret = amba_device_add(dev, &iomem_resource); 307 if (ret) { 308 pr_err("%s(): amba_device_add() failed (%d) for %s\n", 309 __func__, ret, node->full_name); 310 goto err_free; 311 } 312 313 return dev; 314 315 err_free: 316 amba_device_put(dev); 317 return NULL; 318 } 319 #else /* CONFIG_ARM_AMBA */ 320 static struct amba_device *of_amba_device_create(struct device_node *node, 321 const char *bus_id, 322 void *platform_data, 323 struct device *parent) 324 { 325 return NULL; 326 } 327 #endif /* CONFIG_ARM_AMBA */ 328 329 /** 330 * of_devname_lookup() - Given a device node, lookup the preferred Linux name 331 */ 332 static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *lookup, 333 struct device_node *np) 334 { 335 struct resource res; 336 337 if (!lookup) 338 return NULL; 339 340 for(; lookup->compatible != NULL; lookup++) { 341 if (!of_device_is_compatible(np, lookup->compatible)) 342 continue; 343 if (!of_address_to_resource(np, 0, &res)) 344 if (res.start != lookup->phys_addr) 345 continue; 346 pr_debug("%s: devname=%s\n", np->full_name, lookup->name); 347 return lookup; 348 } 349 350 return NULL; 351 } 352 353 /** 354 * of_platform_bus_create() - Create a device for a node and its children. 355 * @bus: device node of the bus to instantiate 356 * @matches: match table for bus nodes 357 * @lookup: auxdata table for matching id and platform_data with device nodes 358 * @parent: parent for new device, or NULL for top level. 359 * @strict: require compatible property 360 * 361 * Creates a platform_device for the provided device_node, and optionally 362 * recursively create devices for all the child nodes. 363 */ 364 static int of_platform_bus_create(struct device_node *bus, 365 const struct of_device_id *matches, 366 const struct of_dev_auxdata *lookup, 367 struct device *parent, bool strict) 368 { 369 const struct of_dev_auxdata *auxdata; 370 struct device_node *child; 371 struct platform_device *dev; 372 const char *bus_id = NULL; 373 void *platform_data = NULL; 374 int rc = 0; 375 376 /* Make sure it has a compatible property */ 377 if (strict && (!of_get_property(bus, "compatible", NULL))) { 378 pr_debug("%s() - skipping %s, no compatible prop\n", 379 __func__, bus->full_name); 380 return 0; 381 } 382 383 auxdata = of_dev_lookup(lookup, bus); 384 if (auxdata) { 385 bus_id = auxdata->name; 386 platform_data = auxdata->platform_data; 387 } 388 389 if (of_device_is_compatible(bus, "arm,primecell")) { 390 /* 391 * Don't return an error here to keep compatibility with older 392 * device tree files. 393 */ 394 of_amba_device_create(bus, bus_id, platform_data, parent); 395 return 0; 396 } 397 398 dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent); 399 if (!dev || !of_match_node(matches, bus)) 400 return 0; 401 402 for_each_child_of_node(bus, child) { 403 pr_debug(" create child: %s\n", child->full_name); 404 rc = of_platform_bus_create(child, matches, lookup, &dev->dev, strict); 405 if (rc) { 406 of_node_put(child); 407 break; 408 } 409 } 410 return rc; 411 } 412 413 /** 414 * of_platform_bus_probe() - Probe the device-tree for platform buses 415 * @root: parent of the first level to probe or NULL for the root of the tree 416 * @matches: match table for bus nodes 417 * @parent: parent to hook devices from, NULL for toplevel 418 * 419 * Note that children of the provided root are not instantiated as devices 420 * unless the specified root itself matches the bus list and is not NULL. 421 */ 422 int of_platform_bus_probe(struct device_node *root, 423 const struct of_device_id *matches, 424 struct device *parent) 425 { 426 struct device_node *child; 427 int rc = 0; 428 429 root = root ? of_node_get(root) : of_find_node_by_path("/"); 430 if (!root) 431 return -EINVAL; 432 433 pr_debug("of_platform_bus_probe()\n"); 434 pr_debug(" starting at: %s\n", root->full_name); 435 436 /* Do a self check of bus type, if there's a match, create children */ 437 if (of_match_node(matches, root)) { 438 rc = of_platform_bus_create(root, matches, NULL, parent, false); 439 } else for_each_child_of_node(root, child) { 440 if (!of_match_node(matches, child)) 441 continue; 442 rc = of_platform_bus_create(child, matches, NULL, parent, false); 443 if (rc) 444 break; 445 } 446 447 of_node_put(root); 448 return rc; 449 } 450 EXPORT_SYMBOL(of_platform_bus_probe); 451 452 /** 453 * of_platform_populate() - Populate platform_devices from device tree data 454 * @root: parent of the first level to probe or NULL for the root of the tree 455 * @matches: match table, NULL to use the default 456 * @lookup: auxdata table for matching id and platform_data with device nodes 457 * @parent: parent to hook devices from, NULL for toplevel 458 * 459 * Similar to of_platform_bus_probe(), this function walks the device tree 460 * and creates devices from nodes. It differs in that it follows the modern 461 * convention of requiring all device nodes to have a 'compatible' property, 462 * and it is suitable for creating devices which are children of the root 463 * node (of_platform_bus_probe will only create children of the root which 464 * are selected by the @matches argument). 465 * 466 * New board support should be using this function instead of 467 * of_platform_bus_probe(). 468 * 469 * Returns 0 on success, < 0 on failure. 470 */ 471 int of_platform_populate(struct device_node *root, 472 const struct of_device_id *matches, 473 const struct of_dev_auxdata *lookup, 474 struct device *parent) 475 { 476 struct device_node *child; 477 int rc = 0; 478 479 root = root ? of_node_get(root) : of_find_node_by_path("/"); 480 if (!root) 481 return -EINVAL; 482 483 for_each_child_of_node(root, child) { 484 rc = of_platform_bus_create(child, matches, lookup, parent, true); 485 if (rc) 486 break; 487 } 488 489 of_node_put(root); 490 return rc; 491 } 492 EXPORT_SYMBOL_GPL(of_platform_populate); 493 #endif /* CONFIG_OF_ADDRESS */ 494