1 /* 2 * platform.c - platform 'pseudo' bus for legacy devices 3 * 4 * Copyright (c) 2002-3 Patrick Mochel 5 * Copyright (c) 2002-3 Open Source Development Labs 6 * 7 * This file is released under the GPLv2 8 * 9 * Please see Documentation/driver-model/platform.txt for more 10 * information. 11 */ 12 13 #include <linux/string.h> 14 #include <linux/platform_device.h> 15 #include <linux/of_device.h> 16 #include <linux/of_irq.h> 17 #include <linux/module.h> 18 #include <linux/init.h> 19 #include <linux/dma-mapping.h> 20 #include <linux/bootmem.h> 21 #include <linux/err.h> 22 #include <linux/slab.h> 23 #include <linux/pm_runtime.h> 24 #include <linux/idr.h> 25 #include <linux/acpi.h> 26 27 #include "base.h" 28 #include "power/power.h" 29 30 /* For automatically allocated device IDs */ 31 static DEFINE_IDA(platform_devid_ida); 32 33 struct device platform_bus = { 34 .init_name = "platform", 35 }; 36 EXPORT_SYMBOL_GPL(platform_bus); 37 38 /** 39 * arch_setup_pdev_archdata - Allow manipulation of archdata before its used 40 * @pdev: platform device 41 * 42 * This is called before platform_device_add() such that any pdev_archdata may 43 * be setup before the platform_notifier is called. So if a user needs to 44 * manipulate any relevant information in the pdev_archdata they can do: 45 * 46 * platform_device_alloc() 47 * ... manipulate ... 48 * platform_device_add() 49 * 50 * And if they don't care they can just call platform_device_register() and 51 * everything will just work out. 52 */ 53 void __weak arch_setup_pdev_archdata(struct platform_device *pdev) 54 { 55 } 56 57 /** 58 * platform_get_resource - get a resource for a device 59 * @dev: platform device 60 * @type: resource type 61 * @num: resource index 62 */ 63 struct resource *platform_get_resource(struct platform_device *dev, 64 unsigned int type, unsigned int num) 65 { 66 int i; 67 68 for (i = 0; i < dev->num_resources; i++) { 69 struct resource *r = &dev->resource[i]; 70 71 if (type == resource_type(r) && num-- == 0) 72 return r; 73 } 74 return NULL; 75 } 76 EXPORT_SYMBOL_GPL(platform_get_resource); 77 78 /** 79 * platform_get_irq - get an IRQ for a device 80 * @dev: platform device 81 * @num: IRQ number index 82 */ 83 int platform_get_irq(struct platform_device *dev, unsigned int num) 84 { 85 #ifdef CONFIG_SPARC 86 /* sparc does not have irqs represented as IORESOURCE_IRQ resources */ 87 if (!dev || num >= dev->archdata.num_irqs) 88 return -ENXIO; 89 return dev->archdata.irqs[num]; 90 #else 91 struct resource *r; 92 if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) 93 return of_irq_get(dev->dev.of_node, num); 94 95 r = platform_get_resource(dev, IORESOURCE_IRQ, num); 96 97 return r ? r->start : -ENXIO; 98 #endif 99 } 100 EXPORT_SYMBOL_GPL(platform_get_irq); 101 102 /** 103 * platform_get_resource_byname - get a resource for a device by name 104 * @dev: platform device 105 * @type: resource type 106 * @name: resource name 107 */ 108 struct resource *platform_get_resource_byname(struct platform_device *dev, 109 unsigned int type, 110 const char *name) 111 { 112 int i; 113 114 for (i = 0; i < dev->num_resources; i++) { 115 struct resource *r = &dev->resource[i]; 116 117 if (unlikely(!r->name)) 118 continue; 119 120 if (type == resource_type(r) && !strcmp(r->name, name)) 121 return r; 122 } 123 return NULL; 124 } 125 EXPORT_SYMBOL_GPL(platform_get_resource_byname); 126 127 /** 128 * platform_get_irq_byname - get an IRQ for a device by name 129 * @dev: platform device 130 * @name: IRQ name 131 */ 132 int platform_get_irq_byname(struct platform_device *dev, const char *name) 133 { 134 struct resource *r; 135 136 if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) 137 return of_irq_get_byname(dev->dev.of_node, name); 138 139 r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name); 140 return r ? r->start : -ENXIO; 141 } 142 EXPORT_SYMBOL_GPL(platform_get_irq_byname); 143 144 /** 145 * platform_add_devices - add a numbers of platform devices 146 * @devs: array of platform devices to add 147 * @num: number of platform devices in array 148 */ 149 int platform_add_devices(struct platform_device **devs, int num) 150 { 151 int i, ret = 0; 152 153 for (i = 0; i < num; i++) { 154 ret = platform_device_register(devs[i]); 155 if (ret) { 156 while (--i >= 0) 157 platform_device_unregister(devs[i]); 158 break; 159 } 160 } 161 162 return ret; 163 } 164 EXPORT_SYMBOL_GPL(platform_add_devices); 165 166 struct platform_object { 167 struct platform_device pdev; 168 char name[1]; 169 }; 170 171 /** 172 * platform_device_put - destroy a platform device 173 * @pdev: platform device to free 174 * 175 * Free all memory associated with a platform device. This function must 176 * _only_ be externally called in error cases. All other usage is a bug. 177 */ 178 void platform_device_put(struct platform_device *pdev) 179 { 180 if (pdev) 181 put_device(&pdev->dev); 182 } 183 EXPORT_SYMBOL_GPL(platform_device_put); 184 185 static void platform_device_release(struct device *dev) 186 { 187 struct platform_object *pa = container_of(dev, struct platform_object, 188 pdev.dev); 189 190 of_device_node_put(&pa->pdev.dev); 191 kfree(pa->pdev.dev.platform_data); 192 kfree(pa->pdev.mfd_cell); 193 kfree(pa->pdev.resource); 194 kfree(pa); 195 } 196 197 /** 198 * platform_device_alloc - create a platform device 199 * @name: base name of the device we're adding 200 * @id: instance id 201 * 202 * Create a platform device object which can have other objects attached 203 * to it, and which will have attached objects freed when it is released. 204 */ 205 struct platform_device *platform_device_alloc(const char *name, int id) 206 { 207 struct platform_object *pa; 208 209 pa = kzalloc(sizeof(struct platform_object) + strlen(name), GFP_KERNEL); 210 if (pa) { 211 strcpy(pa->name, name); 212 pa->pdev.name = pa->name; 213 pa->pdev.id = id; 214 device_initialize(&pa->pdev.dev); 215 pa->pdev.dev.release = platform_device_release; 216 arch_setup_pdev_archdata(&pa->pdev); 217 } 218 219 return pa ? &pa->pdev : NULL; 220 } 221 EXPORT_SYMBOL_GPL(platform_device_alloc); 222 223 /** 224 * platform_device_add_resources - add resources to a platform device 225 * @pdev: platform device allocated by platform_device_alloc to add resources to 226 * @res: set of resources that needs to be allocated for the device 227 * @num: number of resources 228 * 229 * Add a copy of the resources to the platform device. The memory 230 * associated with the resources will be freed when the platform device is 231 * released. 232 */ 233 int platform_device_add_resources(struct platform_device *pdev, 234 const struct resource *res, unsigned int num) 235 { 236 struct resource *r = NULL; 237 238 if (res) { 239 r = kmemdup(res, sizeof(struct resource) * num, GFP_KERNEL); 240 if (!r) 241 return -ENOMEM; 242 } 243 244 kfree(pdev->resource); 245 pdev->resource = r; 246 pdev->num_resources = num; 247 return 0; 248 } 249 EXPORT_SYMBOL_GPL(platform_device_add_resources); 250 251 /** 252 * platform_device_add_data - add platform-specific data to a platform device 253 * @pdev: platform device allocated by platform_device_alloc to add resources to 254 * @data: platform specific data for this platform device 255 * @size: size of platform specific data 256 * 257 * Add a copy of platform specific data to the platform device's 258 * platform_data pointer. The memory associated with the platform data 259 * will be freed when the platform device is released. 260 */ 261 int platform_device_add_data(struct platform_device *pdev, const void *data, 262 size_t size) 263 { 264 void *d = NULL; 265 266 if (data) { 267 d = kmemdup(data, size, GFP_KERNEL); 268 if (!d) 269 return -ENOMEM; 270 } 271 272 kfree(pdev->dev.platform_data); 273 pdev->dev.platform_data = d; 274 return 0; 275 } 276 EXPORT_SYMBOL_GPL(platform_device_add_data); 277 278 /** 279 * platform_device_add - add a platform device to device hierarchy 280 * @pdev: platform device we're adding 281 * 282 * This is part 2 of platform_device_register(), though may be called 283 * separately _iff_ pdev was allocated by platform_device_alloc(). 284 */ 285 int platform_device_add(struct platform_device *pdev) 286 { 287 int i, ret; 288 289 if (!pdev) 290 return -EINVAL; 291 292 if (!pdev->dev.parent) 293 pdev->dev.parent = &platform_bus; 294 295 pdev->dev.bus = &platform_bus_type; 296 297 switch (pdev->id) { 298 default: 299 dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); 300 break; 301 case PLATFORM_DEVID_NONE: 302 dev_set_name(&pdev->dev, "%s", pdev->name); 303 break; 304 case PLATFORM_DEVID_AUTO: 305 /* 306 * Automatically allocated device ID. We mark it as such so 307 * that we remember it must be freed, and we append a suffix 308 * to avoid namespace collision with explicit IDs. 309 */ 310 ret = ida_simple_get(&platform_devid_ida, 0, 0, GFP_KERNEL); 311 if (ret < 0) 312 goto err_out; 313 pdev->id = ret; 314 pdev->id_auto = true; 315 dev_set_name(&pdev->dev, "%s.%d.auto", pdev->name, pdev->id); 316 break; 317 } 318 319 for (i = 0; i < pdev->num_resources; i++) { 320 struct resource *p, *r = &pdev->resource[i]; 321 322 if (r->name == NULL) 323 r->name = dev_name(&pdev->dev); 324 325 p = r->parent; 326 if (!p) { 327 if (resource_type(r) == IORESOURCE_MEM) 328 p = &iomem_resource; 329 else if (resource_type(r) == IORESOURCE_IO) 330 p = &ioport_resource; 331 } 332 333 if (p && insert_resource(p, r)) { 334 dev_err(&pdev->dev, "failed to claim resource %d\n", i); 335 ret = -EBUSY; 336 goto failed; 337 } 338 } 339 340 pr_debug("Registering platform device '%s'. Parent at %s\n", 341 dev_name(&pdev->dev), dev_name(pdev->dev.parent)); 342 343 ret = device_add(&pdev->dev); 344 if (ret == 0) 345 return ret; 346 347 failed: 348 if (pdev->id_auto) { 349 ida_simple_remove(&platform_devid_ida, pdev->id); 350 pdev->id = PLATFORM_DEVID_AUTO; 351 } 352 353 while (--i >= 0) { 354 struct resource *r = &pdev->resource[i]; 355 unsigned long type = resource_type(r); 356 357 if (type == IORESOURCE_MEM || type == IORESOURCE_IO) 358 release_resource(r); 359 } 360 361 err_out: 362 return ret; 363 } 364 EXPORT_SYMBOL_GPL(platform_device_add); 365 366 /** 367 * platform_device_del - remove a platform-level device 368 * @pdev: platform device we're removing 369 * 370 * Note that this function will also release all memory- and port-based 371 * resources owned by the device (@dev->resource). This function must 372 * _only_ be externally called in error cases. All other usage is a bug. 373 */ 374 void platform_device_del(struct platform_device *pdev) 375 { 376 int i; 377 378 if (pdev) { 379 device_del(&pdev->dev); 380 381 if (pdev->id_auto) { 382 ida_simple_remove(&platform_devid_ida, pdev->id); 383 pdev->id = PLATFORM_DEVID_AUTO; 384 } 385 386 for (i = 0; i < pdev->num_resources; i++) { 387 struct resource *r = &pdev->resource[i]; 388 unsigned long type = resource_type(r); 389 390 if (type == IORESOURCE_MEM || type == IORESOURCE_IO) 391 release_resource(r); 392 } 393 } 394 } 395 EXPORT_SYMBOL_GPL(platform_device_del); 396 397 /** 398 * platform_device_register - add a platform-level device 399 * @pdev: platform device we're adding 400 */ 401 int platform_device_register(struct platform_device *pdev) 402 { 403 device_initialize(&pdev->dev); 404 arch_setup_pdev_archdata(pdev); 405 return platform_device_add(pdev); 406 } 407 EXPORT_SYMBOL_GPL(platform_device_register); 408 409 /** 410 * platform_device_unregister - unregister a platform-level device 411 * @pdev: platform device we're unregistering 412 * 413 * Unregistration is done in 2 steps. First we release all resources 414 * and remove it from the subsystem, then we drop reference count by 415 * calling platform_device_put(). 416 */ 417 void platform_device_unregister(struct platform_device *pdev) 418 { 419 platform_device_del(pdev); 420 platform_device_put(pdev); 421 } 422 EXPORT_SYMBOL_GPL(platform_device_unregister); 423 424 /** 425 * platform_device_register_full - add a platform-level device with 426 * resources and platform-specific data 427 * 428 * @pdevinfo: data used to create device 429 * 430 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 431 */ 432 struct platform_device *platform_device_register_full( 433 const struct platform_device_info *pdevinfo) 434 { 435 int ret = -ENOMEM; 436 struct platform_device *pdev; 437 438 pdev = platform_device_alloc(pdevinfo->name, pdevinfo->id); 439 if (!pdev) 440 goto err_alloc; 441 442 pdev->dev.parent = pdevinfo->parent; 443 ACPI_COMPANION_SET(&pdev->dev, pdevinfo->acpi_node.companion); 444 445 if (pdevinfo->dma_mask) { 446 /* 447 * This memory isn't freed when the device is put, 448 * I don't have a nice idea for that though. Conceptually 449 * dma_mask in struct device should not be a pointer. 450 * See http://thread.gmane.org/gmane.linux.kernel.pci/9081 451 */ 452 pdev->dev.dma_mask = 453 kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL); 454 if (!pdev->dev.dma_mask) 455 goto err; 456 457 *pdev->dev.dma_mask = pdevinfo->dma_mask; 458 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask; 459 } 460 461 ret = platform_device_add_resources(pdev, 462 pdevinfo->res, pdevinfo->num_res); 463 if (ret) 464 goto err; 465 466 ret = platform_device_add_data(pdev, 467 pdevinfo->data, pdevinfo->size_data); 468 if (ret) 469 goto err; 470 471 ret = platform_device_add(pdev); 472 if (ret) { 473 err: 474 ACPI_COMPANION_SET(&pdev->dev, NULL); 475 kfree(pdev->dev.dma_mask); 476 477 err_alloc: 478 platform_device_put(pdev); 479 return ERR_PTR(ret); 480 } 481 482 return pdev; 483 } 484 EXPORT_SYMBOL_GPL(platform_device_register_full); 485 486 static int platform_drv_probe(struct device *_dev) 487 { 488 struct platform_driver *drv = to_platform_driver(_dev->driver); 489 struct platform_device *dev = to_platform_device(_dev); 490 int ret; 491 492 acpi_dev_pm_attach(_dev, true); 493 494 ret = drv->probe(dev); 495 if (ret) 496 acpi_dev_pm_detach(_dev, true); 497 498 if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) { 499 dev_warn(_dev, "probe deferral not supported\n"); 500 ret = -ENXIO; 501 } 502 503 return ret; 504 } 505 506 static int platform_drv_probe_fail(struct device *_dev) 507 { 508 return -ENXIO; 509 } 510 511 static int platform_drv_remove(struct device *_dev) 512 { 513 struct platform_driver *drv = to_platform_driver(_dev->driver); 514 struct platform_device *dev = to_platform_device(_dev); 515 int ret; 516 517 ret = drv->remove(dev); 518 acpi_dev_pm_detach(_dev, true); 519 520 return ret; 521 } 522 523 static void platform_drv_shutdown(struct device *_dev) 524 { 525 struct platform_driver *drv = to_platform_driver(_dev->driver); 526 struct platform_device *dev = to_platform_device(_dev); 527 528 drv->shutdown(dev); 529 acpi_dev_pm_detach(_dev, true); 530 } 531 532 /** 533 * __platform_driver_register - register a driver for platform-level devices 534 * @drv: platform driver structure 535 * @owner: owning module/driver 536 */ 537 int __platform_driver_register(struct platform_driver *drv, 538 struct module *owner) 539 { 540 drv->driver.owner = owner; 541 drv->driver.bus = &platform_bus_type; 542 if (drv->probe) 543 drv->driver.probe = platform_drv_probe; 544 if (drv->remove) 545 drv->driver.remove = platform_drv_remove; 546 if (drv->shutdown) 547 drv->driver.shutdown = platform_drv_shutdown; 548 549 return driver_register(&drv->driver); 550 } 551 EXPORT_SYMBOL_GPL(__platform_driver_register); 552 553 /** 554 * platform_driver_unregister - unregister a driver for platform-level devices 555 * @drv: platform driver structure 556 */ 557 void platform_driver_unregister(struct platform_driver *drv) 558 { 559 driver_unregister(&drv->driver); 560 } 561 EXPORT_SYMBOL_GPL(platform_driver_unregister); 562 563 /** 564 * platform_driver_probe - register driver for non-hotpluggable device 565 * @drv: platform driver structure 566 * @probe: the driver probe routine, probably from an __init section 567 * 568 * Use this instead of platform_driver_register() when you know the device 569 * is not hotpluggable and has already been registered, and you want to 570 * remove its run-once probe() infrastructure from memory after the driver 571 * has bound to the device. 572 * 573 * One typical use for this would be with drivers for controllers integrated 574 * into system-on-chip processors, where the controller devices have been 575 * configured as part of board setup. 576 * 577 * Note that this is incompatible with deferred probing. 578 * 579 * Returns zero if the driver registered and bound to a device, else returns 580 * a negative error code and with the driver not registered. 581 */ 582 int __init_or_module platform_driver_probe(struct platform_driver *drv, 583 int (*probe)(struct platform_device *)) 584 { 585 int retval, code; 586 587 /* 588 * Prevent driver from requesting probe deferral to avoid further 589 * futile probe attempts. 590 */ 591 drv->prevent_deferred_probe = true; 592 593 /* make sure driver won't have bind/unbind attributes */ 594 drv->driver.suppress_bind_attrs = true; 595 596 /* temporary section violation during probe() */ 597 drv->probe = probe; 598 retval = code = platform_driver_register(drv); 599 600 /* 601 * Fixup that section violation, being paranoid about code scanning 602 * the list of drivers in order to probe new devices. Check to see 603 * if the probe was successful, and make sure any forced probes of 604 * new devices fail. 605 */ 606 spin_lock(&drv->driver.bus->p->klist_drivers.k_lock); 607 drv->probe = NULL; 608 if (code == 0 && list_empty(&drv->driver.p->klist_devices.k_list)) 609 retval = -ENODEV; 610 drv->driver.probe = platform_drv_probe_fail; 611 spin_unlock(&drv->driver.bus->p->klist_drivers.k_lock); 612 613 if (code != retval) 614 platform_driver_unregister(drv); 615 return retval; 616 } 617 EXPORT_SYMBOL_GPL(platform_driver_probe); 618 619 /** 620 * platform_create_bundle - register driver and create corresponding device 621 * @driver: platform driver structure 622 * @probe: the driver probe routine, probably from an __init section 623 * @res: set of resources that needs to be allocated for the device 624 * @n_res: number of resources 625 * @data: platform specific data for this platform device 626 * @size: size of platform specific data 627 * 628 * Use this in legacy-style modules that probe hardware directly and 629 * register a single platform device and corresponding platform driver. 630 * 631 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 632 */ 633 struct platform_device * __init_or_module platform_create_bundle( 634 struct platform_driver *driver, 635 int (*probe)(struct platform_device *), 636 struct resource *res, unsigned int n_res, 637 const void *data, size_t size) 638 { 639 struct platform_device *pdev; 640 int error; 641 642 pdev = platform_device_alloc(driver->driver.name, -1); 643 if (!pdev) { 644 error = -ENOMEM; 645 goto err_out; 646 } 647 648 error = platform_device_add_resources(pdev, res, n_res); 649 if (error) 650 goto err_pdev_put; 651 652 error = platform_device_add_data(pdev, data, size); 653 if (error) 654 goto err_pdev_put; 655 656 error = platform_device_add(pdev); 657 if (error) 658 goto err_pdev_put; 659 660 error = platform_driver_probe(driver, probe); 661 if (error) 662 goto err_pdev_del; 663 664 return pdev; 665 666 err_pdev_del: 667 platform_device_del(pdev); 668 err_pdev_put: 669 platform_device_put(pdev); 670 err_out: 671 return ERR_PTR(error); 672 } 673 EXPORT_SYMBOL_GPL(platform_create_bundle); 674 675 /* modalias support enables more hands-off userspace setup: 676 * (a) environment variable lets new-style hotplug events work once system is 677 * fully running: "modprobe $MODALIAS" 678 * (b) sysfs attribute lets new-style coldplug recover from hotplug events 679 * mishandled before system is fully running: "modprobe $(cat modalias)" 680 */ 681 static ssize_t modalias_show(struct device *dev, struct device_attribute *a, 682 char *buf) 683 { 684 struct platform_device *pdev = to_platform_device(dev); 685 int len; 686 687 len = of_device_get_modalias(dev, buf, PAGE_SIZE -1); 688 if (len != -ENODEV) 689 return len; 690 691 len = acpi_device_modalias(dev, buf, PAGE_SIZE -1); 692 if (len != -ENODEV) 693 return len; 694 695 len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name); 696 697 return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len; 698 } 699 static DEVICE_ATTR_RO(modalias); 700 701 static struct attribute *platform_dev_attrs[] = { 702 &dev_attr_modalias.attr, 703 NULL, 704 }; 705 ATTRIBUTE_GROUPS(platform_dev); 706 707 static int platform_uevent(struct device *dev, struct kobj_uevent_env *env) 708 { 709 struct platform_device *pdev = to_platform_device(dev); 710 int rc; 711 712 /* Some devices have extra OF data and an OF-style MODALIAS */ 713 rc = of_device_uevent_modalias(dev, env); 714 if (rc != -ENODEV) 715 return rc; 716 717 rc = acpi_device_uevent_modalias(dev, env); 718 if (rc != -ENODEV) 719 return rc; 720 721 add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX, 722 pdev->name); 723 return 0; 724 } 725 726 static const struct platform_device_id *platform_match_id( 727 const struct platform_device_id *id, 728 struct platform_device *pdev) 729 { 730 while (id->name[0]) { 731 if (strcmp(pdev->name, id->name) == 0) { 732 pdev->id_entry = id; 733 return id; 734 } 735 id++; 736 } 737 return NULL; 738 } 739 740 /** 741 * platform_match - bind platform device to platform driver. 742 * @dev: device. 743 * @drv: driver. 744 * 745 * Platform device IDs are assumed to be encoded like this: 746 * "<name><instance>", where <name> is a short description of the type of 747 * device, like "pci" or "floppy", and <instance> is the enumerated 748 * instance of the device, like '0' or '42'. Driver IDs are simply 749 * "<name>". So, extract the <name> from the platform_device structure, 750 * and compare it against the name of the driver. Return whether they match 751 * or not. 752 */ 753 static int platform_match(struct device *dev, struct device_driver *drv) 754 { 755 struct platform_device *pdev = to_platform_device(dev); 756 struct platform_driver *pdrv = to_platform_driver(drv); 757 758 /* Attempt an OF style match first */ 759 if (of_driver_match_device(dev, drv)) 760 return 1; 761 762 /* Then try ACPI style match */ 763 if (acpi_driver_match_device(dev, drv)) 764 return 1; 765 766 /* Then try to match against the id table */ 767 if (pdrv->id_table) 768 return platform_match_id(pdrv->id_table, pdev) != NULL; 769 770 /* fall-back to driver name match */ 771 return (strcmp(pdev->name, drv->name) == 0); 772 } 773 774 #ifdef CONFIG_PM_SLEEP 775 776 static int platform_legacy_suspend(struct device *dev, pm_message_t mesg) 777 { 778 struct platform_driver *pdrv = to_platform_driver(dev->driver); 779 struct platform_device *pdev = to_platform_device(dev); 780 int ret = 0; 781 782 if (dev->driver && pdrv->suspend) 783 ret = pdrv->suspend(pdev, mesg); 784 785 return ret; 786 } 787 788 static int platform_legacy_resume(struct device *dev) 789 { 790 struct platform_driver *pdrv = to_platform_driver(dev->driver); 791 struct platform_device *pdev = to_platform_device(dev); 792 int ret = 0; 793 794 if (dev->driver && pdrv->resume) 795 ret = pdrv->resume(pdev); 796 797 return ret; 798 } 799 800 #endif /* CONFIG_PM_SLEEP */ 801 802 #ifdef CONFIG_SUSPEND 803 804 int platform_pm_suspend(struct device *dev) 805 { 806 struct device_driver *drv = dev->driver; 807 int ret = 0; 808 809 if (!drv) 810 return 0; 811 812 if (drv->pm) { 813 if (drv->pm->suspend) 814 ret = drv->pm->suspend(dev); 815 } else { 816 ret = platform_legacy_suspend(dev, PMSG_SUSPEND); 817 } 818 819 return ret; 820 } 821 822 int platform_pm_resume(struct device *dev) 823 { 824 struct device_driver *drv = dev->driver; 825 int ret = 0; 826 827 if (!drv) 828 return 0; 829 830 if (drv->pm) { 831 if (drv->pm->resume) 832 ret = drv->pm->resume(dev); 833 } else { 834 ret = platform_legacy_resume(dev); 835 } 836 837 return ret; 838 } 839 840 #endif /* CONFIG_SUSPEND */ 841 842 #ifdef CONFIG_HIBERNATE_CALLBACKS 843 844 int platform_pm_freeze(struct device *dev) 845 { 846 struct device_driver *drv = dev->driver; 847 int ret = 0; 848 849 if (!drv) 850 return 0; 851 852 if (drv->pm) { 853 if (drv->pm->freeze) 854 ret = drv->pm->freeze(dev); 855 } else { 856 ret = platform_legacy_suspend(dev, PMSG_FREEZE); 857 } 858 859 return ret; 860 } 861 862 int platform_pm_thaw(struct device *dev) 863 { 864 struct device_driver *drv = dev->driver; 865 int ret = 0; 866 867 if (!drv) 868 return 0; 869 870 if (drv->pm) { 871 if (drv->pm->thaw) 872 ret = drv->pm->thaw(dev); 873 } else { 874 ret = platform_legacy_resume(dev); 875 } 876 877 return ret; 878 } 879 880 int platform_pm_poweroff(struct device *dev) 881 { 882 struct device_driver *drv = dev->driver; 883 int ret = 0; 884 885 if (!drv) 886 return 0; 887 888 if (drv->pm) { 889 if (drv->pm->poweroff) 890 ret = drv->pm->poweroff(dev); 891 } else { 892 ret = platform_legacy_suspend(dev, PMSG_HIBERNATE); 893 } 894 895 return ret; 896 } 897 898 int platform_pm_restore(struct device *dev) 899 { 900 struct device_driver *drv = dev->driver; 901 int ret = 0; 902 903 if (!drv) 904 return 0; 905 906 if (drv->pm) { 907 if (drv->pm->restore) 908 ret = drv->pm->restore(dev); 909 } else { 910 ret = platform_legacy_resume(dev); 911 } 912 913 return ret; 914 } 915 916 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 917 918 static const struct dev_pm_ops platform_dev_pm_ops = { 919 .runtime_suspend = pm_generic_runtime_suspend, 920 .runtime_resume = pm_generic_runtime_resume, 921 USE_PLATFORM_PM_SLEEP_OPS 922 }; 923 924 struct bus_type platform_bus_type = { 925 .name = "platform", 926 .dev_groups = platform_dev_groups, 927 .match = platform_match, 928 .uevent = platform_uevent, 929 .pm = &platform_dev_pm_ops, 930 }; 931 EXPORT_SYMBOL_GPL(platform_bus_type); 932 933 int __init platform_bus_init(void) 934 { 935 int error; 936 937 early_platform_cleanup(); 938 939 error = device_register(&platform_bus); 940 if (error) 941 return error; 942 error = bus_register(&platform_bus_type); 943 if (error) 944 device_unregister(&platform_bus); 945 return error; 946 } 947 948 #ifndef ARCH_HAS_DMA_GET_REQUIRED_MASK 949 u64 dma_get_required_mask(struct device *dev) 950 { 951 u32 low_totalram = ((max_pfn - 1) << PAGE_SHIFT); 952 u32 high_totalram = ((max_pfn - 1) >> (32 - PAGE_SHIFT)); 953 u64 mask; 954 955 if (!high_totalram) { 956 /* convert to mask just covering totalram */ 957 low_totalram = (1 << (fls(low_totalram) - 1)); 958 low_totalram += low_totalram - 1; 959 mask = low_totalram; 960 } else { 961 high_totalram = (1 << (fls(high_totalram) - 1)); 962 high_totalram += high_totalram - 1; 963 mask = (((u64)high_totalram) << 32) + 0xffffffff; 964 } 965 return mask; 966 } 967 EXPORT_SYMBOL_GPL(dma_get_required_mask); 968 #endif 969 970 static __initdata LIST_HEAD(early_platform_driver_list); 971 static __initdata LIST_HEAD(early_platform_device_list); 972 973 /** 974 * early_platform_driver_register - register early platform driver 975 * @epdrv: early_platform driver structure 976 * @buf: string passed from early_param() 977 * 978 * Helper function for early_platform_init() / early_platform_init_buffer() 979 */ 980 int __init early_platform_driver_register(struct early_platform_driver *epdrv, 981 char *buf) 982 { 983 char *tmp; 984 int n; 985 986 /* Simply add the driver to the end of the global list. 987 * Drivers will by default be put on the list in compiled-in order. 988 */ 989 if (!epdrv->list.next) { 990 INIT_LIST_HEAD(&epdrv->list); 991 list_add_tail(&epdrv->list, &early_platform_driver_list); 992 } 993 994 /* If the user has specified device then make sure the driver 995 * gets prioritized. The driver of the last device specified on 996 * command line will be put first on the list. 997 */ 998 n = strlen(epdrv->pdrv->driver.name); 999 if (buf && !strncmp(buf, epdrv->pdrv->driver.name, n)) { 1000 list_move(&epdrv->list, &early_platform_driver_list); 1001 1002 /* Allow passing parameters after device name */ 1003 if (buf[n] == '\0' || buf[n] == ',') 1004 epdrv->requested_id = -1; 1005 else { 1006 epdrv->requested_id = simple_strtoul(&buf[n + 1], 1007 &tmp, 10); 1008 1009 if (buf[n] != '.' || (tmp == &buf[n + 1])) { 1010 epdrv->requested_id = EARLY_PLATFORM_ID_ERROR; 1011 n = 0; 1012 } else 1013 n += strcspn(&buf[n + 1], ",") + 1; 1014 } 1015 1016 if (buf[n] == ',') 1017 n++; 1018 1019 if (epdrv->bufsize) { 1020 memcpy(epdrv->buffer, &buf[n], 1021 min_t(int, epdrv->bufsize, strlen(&buf[n]) + 1)); 1022 epdrv->buffer[epdrv->bufsize - 1] = '\0'; 1023 } 1024 } 1025 1026 return 0; 1027 } 1028 1029 /** 1030 * early_platform_add_devices - adds a number of early platform devices 1031 * @devs: array of early platform devices to add 1032 * @num: number of early platform devices in array 1033 * 1034 * Used by early architecture code to register early platform devices and 1035 * their platform data. 1036 */ 1037 void __init early_platform_add_devices(struct platform_device **devs, int num) 1038 { 1039 struct device *dev; 1040 int i; 1041 1042 /* simply add the devices to list */ 1043 for (i = 0; i < num; i++) { 1044 dev = &devs[i]->dev; 1045 1046 if (!dev->devres_head.next) { 1047 pm_runtime_early_init(dev); 1048 INIT_LIST_HEAD(&dev->devres_head); 1049 list_add_tail(&dev->devres_head, 1050 &early_platform_device_list); 1051 } 1052 } 1053 } 1054 1055 /** 1056 * early_platform_driver_register_all - register early platform drivers 1057 * @class_str: string to identify early platform driver class 1058 * 1059 * Used by architecture code to register all early platform drivers 1060 * for a certain class. If omitted then only early platform drivers 1061 * with matching kernel command line class parameters will be registered. 1062 */ 1063 void __init early_platform_driver_register_all(char *class_str) 1064 { 1065 /* The "class_str" parameter may or may not be present on the kernel 1066 * command line. If it is present then there may be more than one 1067 * matching parameter. 1068 * 1069 * Since we register our early platform drivers using early_param() 1070 * we need to make sure that they also get registered in the case 1071 * when the parameter is missing from the kernel command line. 1072 * 1073 * We use parse_early_options() to make sure the early_param() gets 1074 * called at least once. The early_param() may be called more than 1075 * once since the name of the preferred device may be specified on 1076 * the kernel command line. early_platform_driver_register() handles 1077 * this case for us. 1078 */ 1079 parse_early_options(class_str); 1080 } 1081 1082 /** 1083 * early_platform_match - find early platform device matching driver 1084 * @epdrv: early platform driver structure 1085 * @id: id to match against 1086 */ 1087 static struct platform_device * __init 1088 early_platform_match(struct early_platform_driver *epdrv, int id) 1089 { 1090 struct platform_device *pd; 1091 1092 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) 1093 if (platform_match(&pd->dev, &epdrv->pdrv->driver)) 1094 if (pd->id == id) 1095 return pd; 1096 1097 return NULL; 1098 } 1099 1100 /** 1101 * early_platform_left - check if early platform driver has matching devices 1102 * @epdrv: early platform driver structure 1103 * @id: return true if id or above exists 1104 */ 1105 static int __init early_platform_left(struct early_platform_driver *epdrv, 1106 int id) 1107 { 1108 struct platform_device *pd; 1109 1110 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) 1111 if (platform_match(&pd->dev, &epdrv->pdrv->driver)) 1112 if (pd->id >= id) 1113 return 1; 1114 1115 return 0; 1116 } 1117 1118 /** 1119 * early_platform_driver_probe_id - probe drivers matching class_str and id 1120 * @class_str: string to identify early platform driver class 1121 * @id: id to match against 1122 * @nr_probe: number of platform devices to successfully probe before exiting 1123 */ 1124 static int __init early_platform_driver_probe_id(char *class_str, 1125 int id, 1126 int nr_probe) 1127 { 1128 struct early_platform_driver *epdrv; 1129 struct platform_device *match; 1130 int match_id; 1131 int n = 0; 1132 int left = 0; 1133 1134 list_for_each_entry(epdrv, &early_platform_driver_list, list) { 1135 /* only use drivers matching our class_str */ 1136 if (strcmp(class_str, epdrv->class_str)) 1137 continue; 1138 1139 if (id == -2) { 1140 match_id = epdrv->requested_id; 1141 left = 1; 1142 1143 } else { 1144 match_id = id; 1145 left += early_platform_left(epdrv, id); 1146 1147 /* skip requested id */ 1148 switch (epdrv->requested_id) { 1149 case EARLY_PLATFORM_ID_ERROR: 1150 case EARLY_PLATFORM_ID_UNSET: 1151 break; 1152 default: 1153 if (epdrv->requested_id == id) 1154 match_id = EARLY_PLATFORM_ID_UNSET; 1155 } 1156 } 1157 1158 switch (match_id) { 1159 case EARLY_PLATFORM_ID_ERROR: 1160 pr_warn("%s: unable to parse %s parameter\n", 1161 class_str, epdrv->pdrv->driver.name); 1162 /* fall-through */ 1163 case EARLY_PLATFORM_ID_UNSET: 1164 match = NULL; 1165 break; 1166 default: 1167 match = early_platform_match(epdrv, match_id); 1168 } 1169 1170 if (match) { 1171 /* 1172 * Set up a sensible init_name to enable 1173 * dev_name() and others to be used before the 1174 * rest of the driver core is initialized. 1175 */ 1176 if (!match->dev.init_name && slab_is_available()) { 1177 if (match->id != -1) 1178 match->dev.init_name = 1179 kasprintf(GFP_KERNEL, "%s.%d", 1180 match->name, 1181 match->id); 1182 else 1183 match->dev.init_name = 1184 kasprintf(GFP_KERNEL, "%s", 1185 match->name); 1186 1187 if (!match->dev.init_name) 1188 return -ENOMEM; 1189 } 1190 1191 if (epdrv->pdrv->probe(match)) 1192 pr_warn("%s: unable to probe %s early.\n", 1193 class_str, match->name); 1194 else 1195 n++; 1196 } 1197 1198 if (n >= nr_probe) 1199 break; 1200 } 1201 1202 if (left) 1203 return n; 1204 else 1205 return -ENODEV; 1206 } 1207 1208 /** 1209 * early_platform_driver_probe - probe a class of registered drivers 1210 * @class_str: string to identify early platform driver class 1211 * @nr_probe: number of platform devices to successfully probe before exiting 1212 * @user_only: only probe user specified early platform devices 1213 * 1214 * Used by architecture code to probe registered early platform drivers 1215 * within a certain class. For probe to happen a registered early platform 1216 * device matching a registered early platform driver is needed. 1217 */ 1218 int __init early_platform_driver_probe(char *class_str, 1219 int nr_probe, 1220 int user_only) 1221 { 1222 int k, n, i; 1223 1224 n = 0; 1225 for (i = -2; n < nr_probe; i++) { 1226 k = early_platform_driver_probe_id(class_str, i, nr_probe - n); 1227 1228 if (k < 0) 1229 break; 1230 1231 n += k; 1232 1233 if (user_only) 1234 break; 1235 } 1236 1237 return n; 1238 } 1239 1240 /** 1241 * early_platform_cleanup - clean up early platform code 1242 */ 1243 void __init early_platform_cleanup(void) 1244 { 1245 struct platform_device *pd, *pd2; 1246 1247 /* clean up the devres list used to chain devices */ 1248 list_for_each_entry_safe(pd, pd2, &early_platform_device_list, 1249 dev.devres_head) { 1250 list_del(&pd->dev.devres_head); 1251 memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head)); 1252 } 1253 } 1254 1255