1 /* 2 * drivers/base/power/domain.c - Common code related to device power domains. 3 * 4 * Copyright (C) 2011 Rafael J. Wysocki <rjw@sisk.pl>, Renesas Electronics Corp. 5 * 6 * This file is released under the GPLv2. 7 */ 8 9 #include <linux/init.h> 10 #include <linux/kernel.h> 11 #include <linux/io.h> 12 #include <linux/pm_runtime.h> 13 #include <linux/pm_domain.h> 14 #include <linux/slab.h> 15 #include <linux/err.h> 16 #include <linux/sched.h> 17 #include <linux/suspend.h> 18 19 static LIST_HEAD(gpd_list); 20 static DEFINE_MUTEX(gpd_list_lock); 21 22 #ifdef CONFIG_PM 23 24 static struct generic_pm_domain *dev_to_genpd(struct device *dev) 25 { 26 if (IS_ERR_OR_NULL(dev->pm_domain)) 27 return ERR_PTR(-EINVAL); 28 29 return pd_to_genpd(dev->pm_domain); 30 } 31 32 static void genpd_sd_counter_dec(struct generic_pm_domain *genpd) 33 { 34 if (!WARN_ON(genpd->sd_count == 0)) 35 genpd->sd_count--; 36 } 37 38 static void genpd_acquire_lock(struct generic_pm_domain *genpd) 39 { 40 DEFINE_WAIT(wait); 41 42 mutex_lock(&genpd->lock); 43 /* 44 * Wait for the domain to transition into either the active, 45 * or the power off state. 46 */ 47 for (;;) { 48 prepare_to_wait(&genpd->status_wait_queue, &wait, 49 TASK_UNINTERRUPTIBLE); 50 if (genpd->status == GPD_STATE_ACTIVE 51 || genpd->status == GPD_STATE_POWER_OFF) 52 break; 53 mutex_unlock(&genpd->lock); 54 55 schedule(); 56 57 mutex_lock(&genpd->lock); 58 } 59 finish_wait(&genpd->status_wait_queue, &wait); 60 } 61 62 static void genpd_release_lock(struct generic_pm_domain *genpd) 63 { 64 mutex_unlock(&genpd->lock); 65 } 66 67 static void genpd_set_active(struct generic_pm_domain *genpd) 68 { 69 if (genpd->resume_count == 0) 70 genpd->status = GPD_STATE_ACTIVE; 71 } 72 73 /** 74 * pm_genpd_poweron - Restore power to a given PM domain and its parents. 75 * @genpd: PM domain to power up. 76 * 77 * Restore power to @genpd and all of its parents so that it is possible to 78 * resume a device belonging to it. 79 */ 80 int pm_genpd_poweron(struct generic_pm_domain *genpd) 81 { 82 struct generic_pm_domain *parent = genpd->parent; 83 int ret = 0; 84 85 start: 86 if (parent) { 87 genpd_acquire_lock(parent); 88 mutex_lock_nested(&genpd->lock, SINGLE_DEPTH_NESTING); 89 } else { 90 mutex_lock(&genpd->lock); 91 } 92 93 if (genpd->status == GPD_STATE_ACTIVE 94 || (genpd->prepared_count > 0 && genpd->suspend_power_off)) 95 goto out; 96 97 if (genpd->status != GPD_STATE_POWER_OFF) { 98 genpd_set_active(genpd); 99 goto out; 100 } 101 102 if (parent && parent->status != GPD_STATE_ACTIVE) { 103 mutex_unlock(&genpd->lock); 104 genpd_release_lock(parent); 105 106 ret = pm_genpd_poweron(parent); 107 if (ret) 108 return ret; 109 110 goto start; 111 } 112 113 if (genpd->power_on) { 114 ret = genpd->power_on(genpd); 115 if (ret) 116 goto out; 117 } 118 119 genpd_set_active(genpd); 120 if (parent) 121 parent->sd_count++; 122 123 out: 124 mutex_unlock(&genpd->lock); 125 if (parent) 126 genpd_release_lock(parent); 127 128 return ret; 129 } 130 131 #endif /* CONFIG_PM */ 132 133 #ifdef CONFIG_PM_RUNTIME 134 135 /** 136 * __pm_genpd_save_device - Save the pre-suspend state of a device. 137 * @dle: Device list entry of the device to save the state of. 138 * @genpd: PM domain the device belongs to. 139 */ 140 static int __pm_genpd_save_device(struct dev_list_entry *dle, 141 struct generic_pm_domain *genpd) 142 __releases(&genpd->lock) __acquires(&genpd->lock) 143 { 144 struct device *dev = dle->dev; 145 struct device_driver *drv = dev->driver; 146 int ret = 0; 147 148 if (dle->need_restore) 149 return 0; 150 151 mutex_unlock(&genpd->lock); 152 153 if (drv && drv->pm && drv->pm->runtime_suspend) { 154 if (genpd->start_device) 155 genpd->start_device(dev); 156 157 ret = drv->pm->runtime_suspend(dev); 158 159 if (genpd->stop_device) 160 genpd->stop_device(dev); 161 } 162 163 mutex_lock(&genpd->lock); 164 165 if (!ret) 166 dle->need_restore = true; 167 168 return ret; 169 } 170 171 /** 172 * __pm_genpd_restore_device - Restore the pre-suspend state of a device. 173 * @dle: Device list entry of the device to restore the state of. 174 * @genpd: PM domain the device belongs to. 175 */ 176 static void __pm_genpd_restore_device(struct dev_list_entry *dle, 177 struct generic_pm_domain *genpd) 178 __releases(&genpd->lock) __acquires(&genpd->lock) 179 { 180 struct device *dev = dle->dev; 181 struct device_driver *drv = dev->driver; 182 183 if (!dle->need_restore) 184 return; 185 186 mutex_unlock(&genpd->lock); 187 188 if (drv && drv->pm && drv->pm->runtime_resume) { 189 if (genpd->start_device) 190 genpd->start_device(dev); 191 192 drv->pm->runtime_resume(dev); 193 194 if (genpd->stop_device) 195 genpd->stop_device(dev); 196 } 197 198 mutex_lock(&genpd->lock); 199 200 dle->need_restore = false; 201 } 202 203 /** 204 * genpd_abort_poweroff - Check if a PM domain power off should be aborted. 205 * @genpd: PM domain to check. 206 * 207 * Return true if a PM domain's status changed to GPD_STATE_ACTIVE during 208 * a "power off" operation, which means that a "power on" has occured in the 209 * meantime, or if its resume_count field is different from zero, which means 210 * that one of its devices has been resumed in the meantime. 211 */ 212 static bool genpd_abort_poweroff(struct generic_pm_domain *genpd) 213 { 214 return genpd->status == GPD_STATE_ACTIVE || genpd->resume_count > 0; 215 } 216 217 /** 218 * genpd_queue_power_off_work - Queue up the execution of pm_genpd_poweroff(). 219 * @genpd: PM domait to power off. 220 * 221 * Queue up the execution of pm_genpd_poweroff() unless it's already been done 222 * before. 223 */ 224 void genpd_queue_power_off_work(struct generic_pm_domain *genpd) 225 { 226 if (!work_pending(&genpd->power_off_work)) 227 queue_work(pm_wq, &genpd->power_off_work); 228 } 229 230 /** 231 * pm_genpd_poweroff - Remove power from a given PM domain. 232 * @genpd: PM domain to power down. 233 * 234 * If all of the @genpd's devices have been suspended and all of its subdomains 235 * have been powered down, run the runtime suspend callbacks provided by all of 236 * the @genpd's devices' drivers and remove power from @genpd. 237 */ 238 static int pm_genpd_poweroff(struct generic_pm_domain *genpd) 239 __releases(&genpd->lock) __acquires(&genpd->lock) 240 { 241 struct generic_pm_domain *parent; 242 struct dev_list_entry *dle; 243 unsigned int not_suspended; 244 int ret = 0; 245 246 start: 247 /* 248 * Do not try to power off the domain in the following situations: 249 * (1) The domain is already in the "power off" state. 250 * (2) System suspend is in progress. 251 * (3) One of the domain's devices is being resumed right now. 252 */ 253 if (genpd->status == GPD_STATE_POWER_OFF || genpd->prepared_count > 0 254 || genpd->resume_count > 0) 255 return 0; 256 257 if (genpd->sd_count > 0) 258 return -EBUSY; 259 260 not_suspended = 0; 261 list_for_each_entry(dle, &genpd->dev_list, node) 262 if (dle->dev->driver && !pm_runtime_suspended(dle->dev)) 263 not_suspended++; 264 265 if (not_suspended > genpd->in_progress) 266 return -EBUSY; 267 268 if (genpd->poweroff_task) { 269 /* 270 * Another instance of pm_genpd_poweroff() is executing 271 * callbacks, so tell it to start over and return. 272 */ 273 genpd->status = GPD_STATE_REPEAT; 274 return 0; 275 } 276 277 if (genpd->gov && genpd->gov->power_down_ok) { 278 if (!genpd->gov->power_down_ok(&genpd->domain)) 279 return -EAGAIN; 280 } 281 282 genpd->status = GPD_STATE_BUSY; 283 genpd->poweroff_task = current; 284 285 list_for_each_entry_reverse(dle, &genpd->dev_list, node) { 286 ret = __pm_genpd_save_device(dle, genpd); 287 if (ret) { 288 genpd_set_active(genpd); 289 goto out; 290 } 291 292 if (genpd_abort_poweroff(genpd)) 293 goto out; 294 295 if (genpd->status == GPD_STATE_REPEAT) { 296 genpd->poweroff_task = NULL; 297 goto start; 298 } 299 } 300 301 parent = genpd->parent; 302 if (parent) { 303 mutex_unlock(&genpd->lock); 304 305 genpd_acquire_lock(parent); 306 mutex_lock_nested(&genpd->lock, SINGLE_DEPTH_NESTING); 307 308 if (genpd_abort_poweroff(genpd)) { 309 genpd_release_lock(parent); 310 goto out; 311 } 312 } 313 314 if (genpd->power_off) { 315 ret = genpd->power_off(genpd); 316 if (ret == -EBUSY) { 317 genpd_set_active(genpd); 318 if (parent) 319 genpd_release_lock(parent); 320 321 goto out; 322 } 323 } 324 325 genpd->status = GPD_STATE_POWER_OFF; 326 327 if (parent) { 328 genpd_sd_counter_dec(parent); 329 if (parent->sd_count == 0) 330 genpd_queue_power_off_work(parent); 331 332 genpd_release_lock(parent); 333 } 334 335 out: 336 genpd->poweroff_task = NULL; 337 wake_up_all(&genpd->status_wait_queue); 338 return ret; 339 } 340 341 /** 342 * genpd_power_off_work_fn - Power off PM domain whose subdomain count is 0. 343 * @work: Work structure used for scheduling the execution of this function. 344 */ 345 static void genpd_power_off_work_fn(struct work_struct *work) 346 { 347 struct generic_pm_domain *genpd; 348 349 genpd = container_of(work, struct generic_pm_domain, power_off_work); 350 351 genpd_acquire_lock(genpd); 352 pm_genpd_poweroff(genpd); 353 genpd_release_lock(genpd); 354 } 355 356 /** 357 * pm_genpd_runtime_suspend - Suspend a device belonging to I/O PM domain. 358 * @dev: Device to suspend. 359 * 360 * Carry out a runtime suspend of a device under the assumption that its 361 * pm_domain field points to the domain member of an object of type 362 * struct generic_pm_domain representing a PM domain consisting of I/O devices. 363 */ 364 static int pm_genpd_runtime_suspend(struct device *dev) 365 { 366 struct generic_pm_domain *genpd; 367 368 dev_dbg(dev, "%s()\n", __func__); 369 370 genpd = dev_to_genpd(dev); 371 if (IS_ERR(genpd)) 372 return -EINVAL; 373 374 if (genpd->stop_device) { 375 int ret = genpd->stop_device(dev); 376 if (ret) 377 return ret; 378 } 379 380 mutex_lock(&genpd->lock); 381 genpd->in_progress++; 382 pm_genpd_poweroff(genpd); 383 genpd->in_progress--; 384 mutex_unlock(&genpd->lock); 385 386 return 0; 387 } 388 389 /** 390 * __pm_genpd_runtime_resume - Resume a device belonging to I/O PM domain. 391 * @dev: Device to resume. 392 * @genpd: PM domain the device belongs to. 393 */ 394 static void __pm_genpd_runtime_resume(struct device *dev, 395 struct generic_pm_domain *genpd) 396 { 397 struct dev_list_entry *dle; 398 399 list_for_each_entry(dle, &genpd->dev_list, node) { 400 if (dle->dev == dev) { 401 __pm_genpd_restore_device(dle, genpd); 402 break; 403 } 404 } 405 } 406 407 /** 408 * pm_genpd_runtime_resume - Resume a device belonging to I/O PM domain. 409 * @dev: Device to resume. 410 * 411 * Carry out a runtime resume of a device under the assumption that its 412 * pm_domain field points to the domain member of an object of type 413 * struct generic_pm_domain representing a PM domain consisting of I/O devices. 414 */ 415 static int pm_genpd_runtime_resume(struct device *dev) 416 { 417 struct generic_pm_domain *genpd; 418 DEFINE_WAIT(wait); 419 int ret; 420 421 dev_dbg(dev, "%s()\n", __func__); 422 423 genpd = dev_to_genpd(dev); 424 if (IS_ERR(genpd)) 425 return -EINVAL; 426 427 ret = pm_genpd_poweron(genpd); 428 if (ret) 429 return ret; 430 431 mutex_lock(&genpd->lock); 432 genpd->status = GPD_STATE_BUSY; 433 genpd->resume_count++; 434 for (;;) { 435 prepare_to_wait(&genpd->status_wait_queue, &wait, 436 TASK_UNINTERRUPTIBLE); 437 /* 438 * If current is the powering off task, we have been called 439 * reentrantly from one of the device callbacks, so we should 440 * not wait. 441 */ 442 if (!genpd->poweroff_task || genpd->poweroff_task == current) 443 break; 444 mutex_unlock(&genpd->lock); 445 446 schedule(); 447 448 mutex_lock(&genpd->lock); 449 } 450 finish_wait(&genpd->status_wait_queue, &wait); 451 __pm_genpd_runtime_resume(dev, genpd); 452 genpd->resume_count--; 453 genpd_set_active(genpd); 454 wake_up_all(&genpd->status_wait_queue); 455 mutex_unlock(&genpd->lock); 456 457 if (genpd->start_device) 458 genpd->start_device(dev); 459 460 return 0; 461 } 462 463 /** 464 * pm_genpd_poweroff_unused - Power off all PM domains with no devices in use. 465 */ 466 void pm_genpd_poweroff_unused(void) 467 { 468 struct generic_pm_domain *genpd; 469 470 mutex_lock(&gpd_list_lock); 471 472 list_for_each_entry(genpd, &gpd_list, gpd_list_node) 473 genpd_queue_power_off_work(genpd); 474 475 mutex_unlock(&gpd_list_lock); 476 } 477 478 #else 479 480 static inline void genpd_power_off_work_fn(struct work_struct *work) {} 481 static inline void __pm_genpd_runtime_resume(struct device *dev, 482 struct generic_pm_domain *genpd) {} 483 484 #define pm_genpd_runtime_suspend NULL 485 #define pm_genpd_runtime_resume NULL 486 487 #endif /* CONFIG_PM_RUNTIME */ 488 489 #ifdef CONFIG_PM_SLEEP 490 491 /** 492 * pm_genpd_sync_poweroff - Synchronously power off a PM domain and its parents. 493 * @genpd: PM domain to power off, if possible. 494 * 495 * Check if the given PM domain can be powered off (during system suspend or 496 * hibernation) and do that if so. Also, in that case propagate to its parent. 497 * 498 * This function is only called in "noirq" stages of system power transitions, 499 * so it need not acquire locks (all of the "noirq" callbacks are executed 500 * sequentially, so it is guaranteed that it will never run twice in parallel). 501 */ 502 static void pm_genpd_sync_poweroff(struct generic_pm_domain *genpd) 503 { 504 struct generic_pm_domain *parent = genpd->parent; 505 506 if (genpd->status == GPD_STATE_POWER_OFF) 507 return; 508 509 if (genpd->suspended_count != genpd->device_count || genpd->sd_count > 0) 510 return; 511 512 if (genpd->power_off) 513 genpd->power_off(genpd); 514 515 genpd->status = GPD_STATE_POWER_OFF; 516 if (parent) { 517 genpd_sd_counter_dec(parent); 518 pm_genpd_sync_poweroff(parent); 519 } 520 } 521 522 /** 523 * resume_needed - Check whether to resume a device before system suspend. 524 * @dev: Device to check. 525 * @genpd: PM domain the device belongs to. 526 * 527 * There are two cases in which a device that can wake up the system from sleep 528 * states should be resumed by pm_genpd_prepare(): (1) if the device is enabled 529 * to wake up the system and it has to remain active for this purpose while the 530 * system is in the sleep state and (2) if the device is not enabled to wake up 531 * the system from sleep states and it generally doesn't generate wakeup signals 532 * by itself (those signals are generated on its behalf by other parts of the 533 * system). In the latter case it may be necessary to reconfigure the device's 534 * wakeup settings during system suspend, because it may have been set up to 535 * signal remote wakeup from the system's working state as needed by runtime PM. 536 * Return 'true' in either of the above cases. 537 */ 538 static bool resume_needed(struct device *dev, struct generic_pm_domain *genpd) 539 { 540 bool active_wakeup; 541 542 if (!device_can_wakeup(dev)) 543 return false; 544 545 active_wakeup = genpd->active_wakeup && genpd->active_wakeup(dev); 546 return device_may_wakeup(dev) ? active_wakeup : !active_wakeup; 547 } 548 549 /** 550 * pm_genpd_prepare - Start power transition of a device in a PM domain. 551 * @dev: Device to start the transition of. 552 * 553 * Start a power transition of a device (during a system-wide power transition) 554 * under the assumption that its pm_domain field points to the domain member of 555 * an object of type struct generic_pm_domain representing a PM domain 556 * consisting of I/O devices. 557 */ 558 static int pm_genpd_prepare(struct device *dev) 559 { 560 struct generic_pm_domain *genpd; 561 int ret; 562 563 dev_dbg(dev, "%s()\n", __func__); 564 565 genpd = dev_to_genpd(dev); 566 if (IS_ERR(genpd)) 567 return -EINVAL; 568 569 /* 570 * If a wakeup request is pending for the device, it should be woken up 571 * at this point and a system wakeup event should be reported if it's 572 * set up to wake up the system from sleep states. 573 */ 574 pm_runtime_get_noresume(dev); 575 if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) 576 pm_wakeup_event(dev, 0); 577 578 if (pm_wakeup_pending()) { 579 pm_runtime_put_sync(dev); 580 return -EBUSY; 581 } 582 583 if (resume_needed(dev, genpd)) 584 pm_runtime_resume(dev); 585 586 genpd_acquire_lock(genpd); 587 588 if (genpd->prepared_count++ == 0) 589 genpd->suspend_power_off = genpd->status == GPD_STATE_POWER_OFF; 590 591 genpd_release_lock(genpd); 592 593 if (genpd->suspend_power_off) { 594 pm_runtime_put_noidle(dev); 595 return 0; 596 } 597 598 /* 599 * The PM domain must be in the GPD_STATE_ACTIVE state at this point, 600 * so pm_genpd_poweron() will return immediately, but if the device 601 * is suspended (e.g. it's been stopped by .stop_device()), we need 602 * to make it operational. 603 */ 604 pm_runtime_resume(dev); 605 __pm_runtime_disable(dev, false); 606 607 ret = pm_generic_prepare(dev); 608 if (ret) { 609 mutex_lock(&genpd->lock); 610 611 if (--genpd->prepared_count == 0) 612 genpd->suspend_power_off = false; 613 614 mutex_unlock(&genpd->lock); 615 pm_runtime_enable(dev); 616 } 617 618 pm_runtime_put_sync(dev); 619 return ret; 620 } 621 622 /** 623 * pm_genpd_suspend - Suspend a device belonging to an I/O PM domain. 624 * @dev: Device to suspend. 625 * 626 * Suspend a device under the assumption that its pm_domain field points to the 627 * domain member of an object of type struct generic_pm_domain representing 628 * a PM domain consisting of I/O devices. 629 */ 630 static int pm_genpd_suspend(struct device *dev) 631 { 632 struct generic_pm_domain *genpd; 633 634 dev_dbg(dev, "%s()\n", __func__); 635 636 genpd = dev_to_genpd(dev); 637 if (IS_ERR(genpd)) 638 return -EINVAL; 639 640 return genpd->suspend_power_off ? 0 : pm_generic_suspend(dev); 641 } 642 643 /** 644 * pm_genpd_suspend_noirq - Late suspend of a device from an I/O PM domain. 645 * @dev: Device to suspend. 646 * 647 * Carry out a late suspend of a device under the assumption that its 648 * pm_domain field points to the domain member of an object of type 649 * struct generic_pm_domain representing a PM domain consisting of I/O devices. 650 */ 651 static int pm_genpd_suspend_noirq(struct device *dev) 652 { 653 struct generic_pm_domain *genpd; 654 int ret; 655 656 dev_dbg(dev, "%s()\n", __func__); 657 658 genpd = dev_to_genpd(dev); 659 if (IS_ERR(genpd)) 660 return -EINVAL; 661 662 if (genpd->suspend_power_off) 663 return 0; 664 665 ret = pm_generic_suspend_noirq(dev); 666 if (ret) 667 return ret; 668 669 if (device_may_wakeup(dev) 670 && genpd->active_wakeup && genpd->active_wakeup(dev)) 671 return 0; 672 673 if (genpd->stop_device) 674 genpd->stop_device(dev); 675 676 /* 677 * Since all of the "noirq" callbacks are executed sequentially, it is 678 * guaranteed that this function will never run twice in parallel for 679 * the same PM domain, so it is not necessary to use locking here. 680 */ 681 genpd->suspended_count++; 682 pm_genpd_sync_poweroff(genpd); 683 684 return 0; 685 } 686 687 /** 688 * pm_genpd_resume_noirq - Early resume of a device from an I/O power domain. 689 * @dev: Device to resume. 690 * 691 * Carry out an early resume of a device under the assumption that its 692 * pm_domain field points to the domain member of an object of type 693 * struct generic_pm_domain representing a power domain consisting of I/O 694 * devices. 695 */ 696 static int pm_genpd_resume_noirq(struct device *dev) 697 { 698 struct generic_pm_domain *genpd; 699 700 dev_dbg(dev, "%s()\n", __func__); 701 702 genpd = dev_to_genpd(dev); 703 if (IS_ERR(genpd)) 704 return -EINVAL; 705 706 if (genpd->suspend_power_off) 707 return 0; 708 709 /* 710 * Since all of the "noirq" callbacks are executed sequentially, it is 711 * guaranteed that this function will never run twice in parallel for 712 * the same PM domain, so it is not necessary to use locking here. 713 */ 714 pm_genpd_poweron(genpd); 715 genpd->suspended_count--; 716 if (genpd->start_device) 717 genpd->start_device(dev); 718 719 return pm_generic_resume_noirq(dev); 720 } 721 722 /** 723 * pm_genpd_resume - Resume a device belonging to an I/O power domain. 724 * @dev: Device to resume. 725 * 726 * Resume a device under the assumption that its pm_domain field points to the 727 * domain member of an object of type struct generic_pm_domain representing 728 * a power domain consisting of I/O devices. 729 */ 730 static int pm_genpd_resume(struct device *dev) 731 { 732 struct generic_pm_domain *genpd; 733 734 dev_dbg(dev, "%s()\n", __func__); 735 736 genpd = dev_to_genpd(dev); 737 if (IS_ERR(genpd)) 738 return -EINVAL; 739 740 return genpd->suspend_power_off ? 0 : pm_generic_resume(dev); 741 } 742 743 /** 744 * pm_genpd_freeze - Freeze a device belonging to an I/O power domain. 745 * @dev: Device to freeze. 746 * 747 * Freeze a device under the assumption that its pm_domain field points to the 748 * domain member of an object of type struct generic_pm_domain representing 749 * a power domain consisting of I/O devices. 750 */ 751 static int pm_genpd_freeze(struct device *dev) 752 { 753 struct generic_pm_domain *genpd; 754 755 dev_dbg(dev, "%s()\n", __func__); 756 757 genpd = dev_to_genpd(dev); 758 if (IS_ERR(genpd)) 759 return -EINVAL; 760 761 return genpd->suspend_power_off ? 0 : pm_generic_freeze(dev); 762 } 763 764 /** 765 * pm_genpd_freeze_noirq - Late freeze of a device from an I/O power domain. 766 * @dev: Device to freeze. 767 * 768 * Carry out a late freeze of a device under the assumption that its 769 * pm_domain field points to the domain member of an object of type 770 * struct generic_pm_domain representing a power domain consisting of I/O 771 * devices. 772 */ 773 static int pm_genpd_freeze_noirq(struct device *dev) 774 { 775 struct generic_pm_domain *genpd; 776 int ret; 777 778 dev_dbg(dev, "%s()\n", __func__); 779 780 genpd = dev_to_genpd(dev); 781 if (IS_ERR(genpd)) 782 return -EINVAL; 783 784 if (genpd->suspend_power_off) 785 return 0; 786 787 ret = pm_generic_freeze_noirq(dev); 788 if (ret) 789 return ret; 790 791 if (genpd->stop_device) 792 genpd->stop_device(dev); 793 794 return 0; 795 } 796 797 /** 798 * pm_genpd_thaw_noirq - Early thaw of a device from an I/O power domain. 799 * @dev: Device to thaw. 800 * 801 * Carry out an early thaw of a device under the assumption that its 802 * pm_domain field points to the domain member of an object of type 803 * struct generic_pm_domain representing a power domain consisting of I/O 804 * devices. 805 */ 806 static int pm_genpd_thaw_noirq(struct device *dev) 807 { 808 struct generic_pm_domain *genpd; 809 810 dev_dbg(dev, "%s()\n", __func__); 811 812 genpd = dev_to_genpd(dev); 813 if (IS_ERR(genpd)) 814 return -EINVAL; 815 816 if (genpd->suspend_power_off) 817 return 0; 818 819 if (genpd->start_device) 820 genpd->start_device(dev); 821 822 return pm_generic_thaw_noirq(dev); 823 } 824 825 /** 826 * pm_genpd_thaw - Thaw a device belonging to an I/O power domain. 827 * @dev: Device to thaw. 828 * 829 * Thaw a device under the assumption that its pm_domain field points to the 830 * domain member of an object of type struct generic_pm_domain representing 831 * a power domain consisting of I/O devices. 832 */ 833 static int pm_genpd_thaw(struct device *dev) 834 { 835 struct generic_pm_domain *genpd; 836 837 dev_dbg(dev, "%s()\n", __func__); 838 839 genpd = dev_to_genpd(dev); 840 if (IS_ERR(genpd)) 841 return -EINVAL; 842 843 return genpd->suspend_power_off ? 0 : pm_generic_thaw(dev); 844 } 845 846 /** 847 * pm_genpd_dev_poweroff - Power off a device belonging to an I/O PM domain. 848 * @dev: Device to suspend. 849 * 850 * Power off a device under the assumption that its pm_domain field points to 851 * the domain member of an object of type struct generic_pm_domain representing 852 * a PM domain consisting of I/O devices. 853 */ 854 static int pm_genpd_dev_poweroff(struct device *dev) 855 { 856 struct generic_pm_domain *genpd; 857 858 dev_dbg(dev, "%s()\n", __func__); 859 860 genpd = dev_to_genpd(dev); 861 if (IS_ERR(genpd)) 862 return -EINVAL; 863 864 return genpd->suspend_power_off ? 0 : pm_generic_poweroff(dev); 865 } 866 867 /** 868 * pm_genpd_dev_poweroff_noirq - Late power off of a device from a PM domain. 869 * @dev: Device to suspend. 870 * 871 * Carry out a late powering off of a device under the assumption that its 872 * pm_domain field points to the domain member of an object of type 873 * struct generic_pm_domain representing a PM domain consisting of I/O devices. 874 */ 875 static int pm_genpd_dev_poweroff_noirq(struct device *dev) 876 { 877 struct generic_pm_domain *genpd; 878 int ret; 879 880 dev_dbg(dev, "%s()\n", __func__); 881 882 genpd = dev_to_genpd(dev); 883 if (IS_ERR(genpd)) 884 return -EINVAL; 885 886 if (genpd->suspend_power_off) 887 return 0; 888 889 ret = pm_generic_poweroff_noirq(dev); 890 if (ret) 891 return ret; 892 893 if (device_may_wakeup(dev) 894 && genpd->active_wakeup && genpd->active_wakeup(dev)) 895 return 0; 896 897 if (genpd->stop_device) 898 genpd->stop_device(dev); 899 900 /* 901 * Since all of the "noirq" callbacks are executed sequentially, it is 902 * guaranteed that this function will never run twice in parallel for 903 * the same PM domain, so it is not necessary to use locking here. 904 */ 905 genpd->suspended_count++; 906 pm_genpd_sync_poweroff(genpd); 907 908 return 0; 909 } 910 911 /** 912 * pm_genpd_restore_noirq - Early restore of a device from an I/O power domain. 913 * @dev: Device to resume. 914 * 915 * Carry out an early restore of a device under the assumption that its 916 * pm_domain field points to the domain member of an object of type 917 * struct generic_pm_domain representing a power domain consisting of I/O 918 * devices. 919 */ 920 static int pm_genpd_restore_noirq(struct device *dev) 921 { 922 struct generic_pm_domain *genpd; 923 924 dev_dbg(dev, "%s()\n", __func__); 925 926 genpd = dev_to_genpd(dev); 927 if (IS_ERR(genpd)) 928 return -EINVAL; 929 930 /* 931 * Since all of the "noirq" callbacks are executed sequentially, it is 932 * guaranteed that this function will never run twice in parallel for 933 * the same PM domain, so it is not necessary to use locking here. 934 */ 935 genpd->status = GPD_STATE_POWER_OFF; 936 if (genpd->suspend_power_off) { 937 /* 938 * The boot kernel might put the domain into the power on state, 939 * so make sure it really is powered off. 940 */ 941 if (genpd->power_off) 942 genpd->power_off(genpd); 943 return 0; 944 } 945 946 pm_genpd_poweron(genpd); 947 genpd->suspended_count--; 948 if (genpd->start_device) 949 genpd->start_device(dev); 950 951 return pm_generic_restore_noirq(dev); 952 } 953 954 /** 955 * pm_genpd_restore - Restore a device belonging to an I/O power domain. 956 * @dev: Device to resume. 957 * 958 * Restore a device under the assumption that its pm_domain field points to the 959 * domain member of an object of type struct generic_pm_domain representing 960 * a power domain consisting of I/O devices. 961 */ 962 static int pm_genpd_restore(struct device *dev) 963 { 964 struct generic_pm_domain *genpd; 965 966 dev_dbg(dev, "%s()\n", __func__); 967 968 genpd = dev_to_genpd(dev); 969 if (IS_ERR(genpd)) 970 return -EINVAL; 971 972 return genpd->suspend_power_off ? 0 : pm_generic_restore(dev); 973 } 974 975 /** 976 * pm_genpd_complete - Complete power transition of a device in a power domain. 977 * @dev: Device to complete the transition of. 978 * 979 * Complete a power transition of a device (during a system-wide power 980 * transition) under the assumption that its pm_domain field points to the 981 * domain member of an object of type struct generic_pm_domain representing 982 * a power domain consisting of I/O devices. 983 */ 984 static void pm_genpd_complete(struct device *dev) 985 { 986 struct generic_pm_domain *genpd; 987 bool run_complete; 988 989 dev_dbg(dev, "%s()\n", __func__); 990 991 genpd = dev_to_genpd(dev); 992 if (IS_ERR(genpd)) 993 return; 994 995 mutex_lock(&genpd->lock); 996 997 run_complete = !genpd->suspend_power_off; 998 if (--genpd->prepared_count == 0) 999 genpd->suspend_power_off = false; 1000 1001 mutex_unlock(&genpd->lock); 1002 1003 if (run_complete) { 1004 pm_generic_complete(dev); 1005 pm_runtime_set_active(dev); 1006 pm_runtime_enable(dev); 1007 pm_runtime_idle(dev); 1008 } 1009 } 1010 1011 #else 1012 1013 #define pm_genpd_prepare NULL 1014 #define pm_genpd_suspend NULL 1015 #define pm_genpd_suspend_noirq NULL 1016 #define pm_genpd_resume_noirq NULL 1017 #define pm_genpd_resume NULL 1018 #define pm_genpd_freeze NULL 1019 #define pm_genpd_freeze_noirq NULL 1020 #define pm_genpd_thaw_noirq NULL 1021 #define pm_genpd_thaw NULL 1022 #define pm_genpd_dev_poweroff_noirq NULL 1023 #define pm_genpd_dev_poweroff NULL 1024 #define pm_genpd_restore_noirq NULL 1025 #define pm_genpd_restore NULL 1026 #define pm_genpd_complete NULL 1027 1028 #endif /* CONFIG_PM_SLEEP */ 1029 1030 /** 1031 * pm_genpd_add_device - Add a device to an I/O PM domain. 1032 * @genpd: PM domain to add the device to. 1033 * @dev: Device to be added. 1034 */ 1035 int pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev) 1036 { 1037 struct dev_list_entry *dle; 1038 int ret = 0; 1039 1040 dev_dbg(dev, "%s()\n", __func__); 1041 1042 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) 1043 return -EINVAL; 1044 1045 genpd_acquire_lock(genpd); 1046 1047 if (genpd->status == GPD_STATE_POWER_OFF) { 1048 ret = -EINVAL; 1049 goto out; 1050 } 1051 1052 if (genpd->prepared_count > 0) { 1053 ret = -EAGAIN; 1054 goto out; 1055 } 1056 1057 list_for_each_entry(dle, &genpd->dev_list, node) 1058 if (dle->dev == dev) { 1059 ret = -EINVAL; 1060 goto out; 1061 } 1062 1063 dle = kzalloc(sizeof(*dle), GFP_KERNEL); 1064 if (!dle) { 1065 ret = -ENOMEM; 1066 goto out; 1067 } 1068 1069 dle->dev = dev; 1070 dle->need_restore = false; 1071 list_add_tail(&dle->node, &genpd->dev_list); 1072 genpd->device_count++; 1073 1074 spin_lock_irq(&dev->power.lock); 1075 dev->pm_domain = &genpd->domain; 1076 spin_unlock_irq(&dev->power.lock); 1077 1078 out: 1079 genpd_release_lock(genpd); 1080 1081 return ret; 1082 } 1083 1084 /** 1085 * pm_genpd_remove_device - Remove a device from an I/O PM domain. 1086 * @genpd: PM domain to remove the device from. 1087 * @dev: Device to be removed. 1088 */ 1089 int pm_genpd_remove_device(struct generic_pm_domain *genpd, 1090 struct device *dev) 1091 { 1092 struct dev_list_entry *dle; 1093 int ret = -EINVAL; 1094 1095 dev_dbg(dev, "%s()\n", __func__); 1096 1097 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) 1098 return -EINVAL; 1099 1100 genpd_acquire_lock(genpd); 1101 1102 if (genpd->prepared_count > 0) { 1103 ret = -EAGAIN; 1104 goto out; 1105 } 1106 1107 list_for_each_entry(dle, &genpd->dev_list, node) { 1108 if (dle->dev != dev) 1109 continue; 1110 1111 spin_lock_irq(&dev->power.lock); 1112 dev->pm_domain = NULL; 1113 spin_unlock_irq(&dev->power.lock); 1114 1115 genpd->device_count--; 1116 list_del(&dle->node); 1117 kfree(dle); 1118 1119 ret = 0; 1120 break; 1121 } 1122 1123 out: 1124 genpd_release_lock(genpd); 1125 1126 return ret; 1127 } 1128 1129 /** 1130 * pm_genpd_add_subdomain - Add a subdomain to an I/O PM domain. 1131 * @genpd: Master PM domain to add the subdomain to. 1132 * @new_subdomain: Subdomain to be added. 1133 */ 1134 int pm_genpd_add_subdomain(struct generic_pm_domain *genpd, 1135 struct generic_pm_domain *new_subdomain) 1136 { 1137 struct generic_pm_domain *subdomain; 1138 int ret = 0; 1139 1140 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(new_subdomain)) 1141 return -EINVAL; 1142 1143 start: 1144 genpd_acquire_lock(genpd); 1145 mutex_lock_nested(&new_subdomain->lock, SINGLE_DEPTH_NESTING); 1146 1147 if (new_subdomain->status != GPD_STATE_POWER_OFF 1148 && new_subdomain->status != GPD_STATE_ACTIVE) { 1149 mutex_unlock(&new_subdomain->lock); 1150 genpd_release_lock(genpd); 1151 goto start; 1152 } 1153 1154 if (genpd->status == GPD_STATE_POWER_OFF 1155 && new_subdomain->status != GPD_STATE_POWER_OFF) { 1156 ret = -EINVAL; 1157 goto out; 1158 } 1159 1160 list_for_each_entry(subdomain, &genpd->sd_list, sd_node) { 1161 if (subdomain == new_subdomain) { 1162 ret = -EINVAL; 1163 goto out; 1164 } 1165 } 1166 1167 list_add_tail(&new_subdomain->sd_node, &genpd->sd_list); 1168 new_subdomain->parent = genpd; 1169 if (subdomain->status != GPD_STATE_POWER_OFF) 1170 genpd->sd_count++; 1171 1172 out: 1173 mutex_unlock(&new_subdomain->lock); 1174 genpd_release_lock(genpd); 1175 1176 return ret; 1177 } 1178 1179 /** 1180 * pm_genpd_remove_subdomain - Remove a subdomain from an I/O PM domain. 1181 * @genpd: Master PM domain to remove the subdomain from. 1182 * @target: Subdomain to be removed. 1183 */ 1184 int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, 1185 struct generic_pm_domain *target) 1186 { 1187 struct generic_pm_domain *subdomain; 1188 int ret = -EINVAL; 1189 1190 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(target)) 1191 return -EINVAL; 1192 1193 start: 1194 genpd_acquire_lock(genpd); 1195 1196 list_for_each_entry(subdomain, &genpd->sd_list, sd_node) { 1197 if (subdomain != target) 1198 continue; 1199 1200 mutex_lock_nested(&subdomain->lock, SINGLE_DEPTH_NESTING); 1201 1202 if (subdomain->status != GPD_STATE_POWER_OFF 1203 && subdomain->status != GPD_STATE_ACTIVE) { 1204 mutex_unlock(&subdomain->lock); 1205 genpd_release_lock(genpd); 1206 goto start; 1207 } 1208 1209 list_del(&subdomain->sd_node); 1210 subdomain->parent = NULL; 1211 if (subdomain->status != GPD_STATE_POWER_OFF) 1212 genpd_sd_counter_dec(genpd); 1213 1214 mutex_unlock(&subdomain->lock); 1215 1216 ret = 0; 1217 break; 1218 } 1219 1220 genpd_release_lock(genpd); 1221 1222 return ret; 1223 } 1224 1225 /** 1226 * pm_genpd_init - Initialize a generic I/O PM domain object. 1227 * @genpd: PM domain object to initialize. 1228 * @gov: PM domain governor to associate with the domain (may be NULL). 1229 * @is_off: Initial value of the domain's power_is_off field. 1230 */ 1231 void pm_genpd_init(struct generic_pm_domain *genpd, 1232 struct dev_power_governor *gov, bool is_off) 1233 { 1234 if (IS_ERR_OR_NULL(genpd)) 1235 return; 1236 1237 INIT_LIST_HEAD(&genpd->sd_node); 1238 genpd->parent = NULL; 1239 INIT_LIST_HEAD(&genpd->dev_list); 1240 INIT_LIST_HEAD(&genpd->sd_list); 1241 mutex_init(&genpd->lock); 1242 genpd->gov = gov; 1243 INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn); 1244 genpd->in_progress = 0; 1245 genpd->sd_count = 0; 1246 genpd->status = is_off ? GPD_STATE_POWER_OFF : GPD_STATE_ACTIVE; 1247 init_waitqueue_head(&genpd->status_wait_queue); 1248 genpd->poweroff_task = NULL; 1249 genpd->resume_count = 0; 1250 genpd->device_count = 0; 1251 genpd->suspended_count = 0; 1252 genpd->domain.ops.runtime_suspend = pm_genpd_runtime_suspend; 1253 genpd->domain.ops.runtime_resume = pm_genpd_runtime_resume; 1254 genpd->domain.ops.runtime_idle = pm_generic_runtime_idle; 1255 genpd->domain.ops.prepare = pm_genpd_prepare; 1256 genpd->domain.ops.suspend = pm_genpd_suspend; 1257 genpd->domain.ops.suspend_noirq = pm_genpd_suspend_noirq; 1258 genpd->domain.ops.resume_noirq = pm_genpd_resume_noirq; 1259 genpd->domain.ops.resume = pm_genpd_resume; 1260 genpd->domain.ops.freeze = pm_genpd_freeze; 1261 genpd->domain.ops.freeze_noirq = pm_genpd_freeze_noirq; 1262 genpd->domain.ops.thaw_noirq = pm_genpd_thaw_noirq; 1263 genpd->domain.ops.thaw = pm_genpd_thaw; 1264 genpd->domain.ops.poweroff = pm_genpd_dev_poweroff; 1265 genpd->domain.ops.poweroff_noirq = pm_genpd_dev_poweroff_noirq; 1266 genpd->domain.ops.restore_noirq = pm_genpd_restore_noirq; 1267 genpd->domain.ops.restore = pm_genpd_restore; 1268 genpd->domain.ops.complete = pm_genpd_complete; 1269 mutex_lock(&gpd_list_lock); 1270 list_add(&genpd->gpd_list_node, &gpd_list); 1271 mutex_unlock(&gpd_list_lock); 1272 } 1273