1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework 4 * for Non-CPU Devices. 5 * 6 * Copyright (C) 2011 Samsung Electronics 7 * MyungJoo Ham <myungjoo.ham@samsung.com> 8 */ 9 10 #include <linux/kernel.h> 11 #include <linux/kmod.h> 12 #include <linux/sched.h> 13 #include <linux/debugfs.h> 14 #include <linux/devfreq_cooling.h> 15 #include <linux/errno.h> 16 #include <linux/err.h> 17 #include <linux/init.h> 18 #include <linux/export.h> 19 #include <linux/slab.h> 20 #include <linux/stat.h> 21 #include <linux/pm_opp.h> 22 #include <linux/devfreq.h> 23 #include <linux/workqueue.h> 24 #include <linux/platform_device.h> 25 #include <linux/list.h> 26 #include <linux/printk.h> 27 #include <linux/hrtimer.h> 28 #include <linux/of.h> 29 #include <linux/pm_qos.h> 30 #include <linux/units.h> 31 #include "governor.h" 32 33 #define CREATE_TRACE_POINTS 34 #include <trace/events/devfreq.h> 35 36 #define IS_SUPPORTED_FLAG(f, name) ((f & DEVFREQ_GOV_FLAG_##name) ? true : false) 37 #define IS_SUPPORTED_ATTR(f, name) ((f & DEVFREQ_GOV_ATTR_##name) ? true : false) 38 39 static struct class *devfreq_class; 40 static struct dentry *devfreq_debugfs; 41 42 /* 43 * devfreq core provides delayed work based load monitoring helper 44 * functions. Governors can use these or can implement their own 45 * monitoring mechanism. 46 */ 47 static struct workqueue_struct *devfreq_wq; 48 49 /* The list of all device-devfreq governors */ 50 static LIST_HEAD(devfreq_governor_list); 51 /* The list of all device-devfreq */ 52 static LIST_HEAD(devfreq_list); 53 static DEFINE_MUTEX(devfreq_list_lock); 54 55 static const char timer_name[][DEVFREQ_NAME_LEN] = { 56 [DEVFREQ_TIMER_DEFERRABLE] = { "deferrable" }, 57 [DEVFREQ_TIMER_DELAYED] = { "delayed" }, 58 }; 59 60 /** 61 * find_device_devfreq() - find devfreq struct using device pointer 62 * @dev: device pointer used to lookup device devfreq. 63 * 64 * Search the list of device devfreqs and return the matched device's 65 * devfreq info. devfreq_list_lock should be held by the caller. 66 */ 67 static struct devfreq *find_device_devfreq(struct device *dev) 68 { 69 struct devfreq *tmp_devfreq; 70 71 lockdep_assert_held(&devfreq_list_lock); 72 73 if (IS_ERR_OR_NULL(dev)) { 74 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); 75 return ERR_PTR(-EINVAL); 76 } 77 78 list_for_each_entry(tmp_devfreq, &devfreq_list, node) { 79 if (tmp_devfreq->dev.parent == dev) 80 return tmp_devfreq; 81 } 82 83 return ERR_PTR(-ENODEV); 84 } 85 86 static unsigned long find_available_min_freq(struct devfreq *devfreq) 87 { 88 struct dev_pm_opp *opp; 89 unsigned long min_freq = 0; 90 91 opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &min_freq, 0); 92 if (IS_ERR(opp)) 93 min_freq = 0; 94 else 95 dev_pm_opp_put(opp); 96 97 return min_freq; 98 } 99 100 static unsigned long find_available_max_freq(struct devfreq *devfreq) 101 { 102 struct dev_pm_opp *opp; 103 unsigned long max_freq = ULONG_MAX; 104 105 opp = dev_pm_opp_find_freq_floor_indexed(devfreq->dev.parent, &max_freq, 0); 106 if (IS_ERR(opp)) 107 max_freq = 0; 108 else 109 dev_pm_opp_put(opp); 110 111 return max_freq; 112 } 113 114 /** 115 * devfreq_get_freq_range() - Get the current freq range 116 * @devfreq: the devfreq instance 117 * @min_freq: the min frequency 118 * @max_freq: the max frequency 119 * 120 * This takes into consideration all constraints. 121 */ 122 void devfreq_get_freq_range(struct devfreq *devfreq, 123 unsigned long *min_freq, 124 unsigned long *max_freq) 125 { 126 unsigned long *freq_table = devfreq->freq_table; 127 s32 qos_min_freq, qos_max_freq; 128 129 lockdep_assert_held(&devfreq->lock); 130 131 /* 132 * Initialize minimum/maximum frequency from freq table. 133 * The devfreq drivers can initialize this in either ascending or 134 * descending order and devfreq core supports both. 135 */ 136 if (freq_table[0] < freq_table[devfreq->max_state - 1]) { 137 *min_freq = freq_table[0]; 138 *max_freq = freq_table[devfreq->max_state - 1]; 139 } else { 140 *min_freq = freq_table[devfreq->max_state - 1]; 141 *max_freq = freq_table[0]; 142 } 143 144 /* Apply constraints from PM QoS */ 145 qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent, 146 DEV_PM_QOS_MIN_FREQUENCY); 147 qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent, 148 DEV_PM_QOS_MAX_FREQUENCY); 149 *min_freq = max(*min_freq, (unsigned long)HZ_PER_KHZ * qos_min_freq); 150 if (qos_max_freq != PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE) 151 *max_freq = min(*max_freq, 152 (unsigned long)HZ_PER_KHZ * qos_max_freq); 153 154 /* Apply constraints from OPP interface */ 155 *min_freq = max(*min_freq, devfreq->scaling_min_freq); 156 *max_freq = min(*max_freq, devfreq->scaling_max_freq); 157 158 if (*min_freq > *max_freq) 159 *min_freq = *max_freq; 160 } 161 EXPORT_SYMBOL(devfreq_get_freq_range); 162 163 /** 164 * devfreq_get_freq_level() - Lookup freq_table for the frequency 165 * @devfreq: the devfreq instance 166 * @freq: the target frequency 167 */ 168 static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq) 169 { 170 int lev; 171 172 for (lev = 0; lev < devfreq->max_state; lev++) 173 if (freq == devfreq->freq_table[lev]) 174 return lev; 175 176 return -EINVAL; 177 } 178 179 static int set_freq_table(struct devfreq *devfreq) 180 { 181 struct dev_pm_opp *opp; 182 unsigned long freq; 183 int i, count; 184 185 /* Initialize the freq_table from OPP table */ 186 count = dev_pm_opp_get_opp_count(devfreq->dev.parent); 187 if (count <= 0) 188 return -EINVAL; 189 190 devfreq->max_state = count; 191 devfreq->freq_table = devm_kcalloc(devfreq->dev.parent, 192 devfreq->max_state, 193 sizeof(*devfreq->freq_table), 194 GFP_KERNEL); 195 if (!devfreq->freq_table) 196 return -ENOMEM; 197 198 for (i = 0, freq = 0; i < devfreq->max_state; i++, freq++) { 199 opp = dev_pm_opp_find_freq_ceil_indexed(devfreq->dev.parent, &freq, 0); 200 if (IS_ERR(opp)) { 201 devm_kfree(devfreq->dev.parent, devfreq->freq_table); 202 return PTR_ERR(opp); 203 } 204 dev_pm_opp_put(opp); 205 devfreq->freq_table[i] = freq; 206 } 207 208 return 0; 209 } 210 211 /** 212 * devfreq_update_status() - Update statistics of devfreq behavior 213 * @devfreq: the devfreq instance 214 * @freq: the update target frequency 215 */ 216 int devfreq_update_status(struct devfreq *devfreq, unsigned long freq) 217 { 218 int lev, prev_lev, ret = 0; 219 u64 cur_time; 220 221 lockdep_assert_held(&devfreq->lock); 222 cur_time = get_jiffies_64(); 223 224 /* Immediately exit if previous_freq is not initialized yet. */ 225 if (!devfreq->previous_freq) 226 goto out; 227 228 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq); 229 if (prev_lev < 0) { 230 ret = prev_lev; 231 goto out; 232 } 233 234 devfreq->stats.time_in_state[prev_lev] += 235 cur_time - devfreq->stats.last_update; 236 237 lev = devfreq_get_freq_level(devfreq, freq); 238 if (lev < 0) { 239 ret = lev; 240 goto out; 241 } 242 243 if (lev != prev_lev) { 244 devfreq->stats.trans_table[ 245 (prev_lev * devfreq->max_state) + lev]++; 246 devfreq->stats.total_trans++; 247 } 248 249 out: 250 devfreq->stats.last_update = cur_time; 251 return ret; 252 } 253 EXPORT_SYMBOL(devfreq_update_status); 254 255 /** 256 * find_devfreq_governor() - find devfreq governor from name 257 * @name: name of the governor 258 * 259 * Search the list of devfreq governors and return the matched 260 * governor's pointer. devfreq_list_lock should be held by the caller. 261 */ 262 static struct devfreq_governor *find_devfreq_governor(const char *name) 263 { 264 struct devfreq_governor *tmp_governor; 265 266 lockdep_assert_held(&devfreq_list_lock); 267 268 if (IS_ERR_OR_NULL(name)) { 269 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); 270 return ERR_PTR(-EINVAL); 271 } 272 273 list_for_each_entry(tmp_governor, &devfreq_governor_list, node) { 274 if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN)) 275 return tmp_governor; 276 } 277 278 return ERR_PTR(-ENODEV); 279 } 280 281 /** 282 * try_then_request_governor() - Try to find the governor and request the 283 * module if is not found. 284 * @name: name of the governor 285 * 286 * Search the list of devfreq governors and request the module and try again 287 * if is not found. This can happen when both drivers (the governor driver 288 * and the driver that call devfreq_add_device) are built as modules. 289 * devfreq_list_lock should be held by the caller. Returns the matched 290 * governor's pointer or an error pointer. 291 */ 292 static struct devfreq_governor *try_then_request_governor(const char *name) 293 { 294 struct devfreq_governor *governor; 295 int err = 0; 296 297 lockdep_assert_held(&devfreq_list_lock); 298 299 if (IS_ERR_OR_NULL(name)) { 300 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__); 301 return ERR_PTR(-EINVAL); 302 } 303 304 governor = find_devfreq_governor(name); 305 if (IS_ERR(governor)) { 306 mutex_unlock(&devfreq_list_lock); 307 308 if (!strncmp(name, DEVFREQ_GOV_SIMPLE_ONDEMAND, 309 DEVFREQ_NAME_LEN)) 310 err = request_module("governor_%s", "simpleondemand"); 311 else 312 err = request_module("governor_%s", name); 313 /* Restore previous state before return */ 314 mutex_lock(&devfreq_list_lock); 315 if (err) 316 return (err < 0) ? ERR_PTR(err) : ERR_PTR(-EINVAL); 317 318 governor = find_devfreq_governor(name); 319 } 320 321 return governor; 322 } 323 324 static int devfreq_notify_transition(struct devfreq *devfreq, 325 struct devfreq_freqs *freqs, unsigned int state) 326 { 327 if (!devfreq) 328 return -EINVAL; 329 330 switch (state) { 331 case DEVFREQ_PRECHANGE: 332 srcu_notifier_call_chain(&devfreq->transition_notifier_list, 333 DEVFREQ_PRECHANGE, freqs); 334 break; 335 336 case DEVFREQ_POSTCHANGE: 337 srcu_notifier_call_chain(&devfreq->transition_notifier_list, 338 DEVFREQ_POSTCHANGE, freqs); 339 break; 340 default: 341 return -EINVAL; 342 } 343 344 return 0; 345 } 346 347 static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq, 348 u32 flags) 349 { 350 struct devfreq_freqs freqs; 351 unsigned long cur_freq; 352 int err = 0; 353 354 if (devfreq->profile->get_cur_freq) 355 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq); 356 else 357 cur_freq = devfreq->previous_freq; 358 359 freqs.old = cur_freq; 360 freqs.new = new_freq; 361 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE); 362 363 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags); 364 if (err) { 365 freqs.new = cur_freq; 366 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); 367 return err; 368 } 369 370 /* 371 * Print devfreq_frequency trace information between DEVFREQ_PRECHANGE 372 * and DEVFREQ_POSTCHANGE because for showing the correct frequency 373 * change order of between devfreq device and passive devfreq device. 374 */ 375 if (trace_devfreq_frequency_enabled() && new_freq != cur_freq) 376 trace_devfreq_frequency(devfreq, new_freq, cur_freq); 377 378 freqs.new = new_freq; 379 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); 380 381 if (devfreq_update_status(devfreq, new_freq)) 382 dev_warn(&devfreq->dev, 383 "Couldn't update frequency transition information.\n"); 384 385 devfreq->previous_freq = new_freq; 386 387 if (devfreq->suspend_freq) 388 devfreq->resume_freq = new_freq; 389 390 return err; 391 } 392 393 /** 394 * devfreq_update_target() - Reevaluate the device and configure frequency 395 * on the final stage. 396 * @devfreq: the devfreq instance. 397 * @freq: the new frequency of parent device. This argument 398 * is only used for devfreq device using passive governor. 399 * 400 * Note: Lock devfreq->lock before calling devfreq_update_target. This function 401 * should be only used by both update_devfreq() and devfreq governors. 402 */ 403 int devfreq_update_target(struct devfreq *devfreq, unsigned long freq) 404 { 405 unsigned long min_freq, max_freq; 406 int err = 0; 407 u32 flags = 0; 408 409 lockdep_assert_held(&devfreq->lock); 410 411 if (!devfreq->governor) 412 return -EINVAL; 413 414 /* Reevaluate the proper frequency */ 415 err = devfreq->governor->get_target_freq(devfreq, &freq); 416 if (err) 417 return err; 418 devfreq_get_freq_range(devfreq, &min_freq, &max_freq); 419 420 if (freq < min_freq) { 421 freq = min_freq; 422 flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */ 423 } 424 if (freq > max_freq) { 425 freq = max_freq; 426 flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */ 427 } 428 429 return devfreq_set_target(devfreq, freq, flags); 430 } 431 EXPORT_SYMBOL(devfreq_update_target); 432 433 /* Load monitoring helper functions for governors use */ 434 435 /** 436 * update_devfreq() - Reevaluate the device and configure frequency. 437 * @devfreq: the devfreq instance. 438 * 439 * Note: Lock devfreq->lock before calling update_devfreq 440 * This function is exported for governors. 441 */ 442 int update_devfreq(struct devfreq *devfreq) 443 { 444 return devfreq_update_target(devfreq, 0L); 445 } 446 EXPORT_SYMBOL(update_devfreq); 447 448 /** 449 * devfreq_monitor() - Periodically poll devfreq objects. 450 * @work: the work struct used to run devfreq_monitor periodically. 451 * 452 */ 453 static void devfreq_monitor(struct work_struct *work) 454 { 455 int err; 456 struct devfreq *devfreq = container_of(work, 457 struct devfreq, work.work); 458 459 mutex_lock(&devfreq->lock); 460 err = update_devfreq(devfreq); 461 if (err) 462 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err); 463 464 if (devfreq->stop_polling) 465 goto out; 466 467 queue_delayed_work(devfreq_wq, &devfreq->work, 468 msecs_to_jiffies(devfreq->profile->polling_ms)); 469 470 out: 471 mutex_unlock(&devfreq->lock); 472 trace_devfreq_monitor(devfreq); 473 } 474 475 /** 476 * devfreq_monitor_start() - Start load monitoring of devfreq instance 477 * @devfreq: the devfreq instance. 478 * 479 * Helper function for starting devfreq device load monitoring. By default, 480 * deferrable timer is used for load monitoring. But the users can change this 481 * behavior using the "timer" type in devfreq_dev_profile. This function will be 482 * called by devfreq governor in response to the DEVFREQ_GOV_START event 483 * generated while adding a device to the devfreq framework. 484 */ 485 void devfreq_monitor_start(struct devfreq *devfreq) 486 { 487 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) 488 return; 489 490 mutex_lock(&devfreq->lock); 491 if (delayed_work_pending(&devfreq->work)) 492 goto out; 493 494 switch (devfreq->profile->timer) { 495 case DEVFREQ_TIMER_DEFERRABLE: 496 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); 497 break; 498 case DEVFREQ_TIMER_DELAYED: 499 INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor); 500 break; 501 default: 502 goto out; 503 } 504 505 if (devfreq->profile->polling_ms) 506 queue_delayed_work(devfreq_wq, &devfreq->work, 507 msecs_to_jiffies(devfreq->profile->polling_ms)); 508 509 out: 510 devfreq->stop_polling = false; 511 mutex_unlock(&devfreq->lock); 512 } 513 EXPORT_SYMBOL(devfreq_monitor_start); 514 515 /** 516 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance 517 * @devfreq: the devfreq instance. 518 * 519 * Helper function to stop devfreq device load monitoring. Function 520 * to be called from governor in response to DEVFREQ_GOV_STOP 521 * event when device is removed from devfreq framework. 522 */ 523 void devfreq_monitor_stop(struct devfreq *devfreq) 524 { 525 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) 526 return; 527 528 mutex_lock(&devfreq->lock); 529 if (devfreq->stop_polling) { 530 mutex_unlock(&devfreq->lock); 531 return; 532 } 533 534 devfreq->stop_polling = true; 535 mutex_unlock(&devfreq->lock); 536 cancel_delayed_work_sync(&devfreq->work); 537 } 538 EXPORT_SYMBOL(devfreq_monitor_stop); 539 540 /** 541 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance 542 * @devfreq: the devfreq instance. 543 * 544 * Helper function to suspend devfreq device load monitoring. Function 545 * to be called from governor in response to DEVFREQ_GOV_SUSPEND 546 * event or when polling interval is set to zero. 547 * 548 * Note: Though this function is same as devfreq_monitor_stop(), 549 * intentionally kept separate to provide hooks for collecting 550 * transition statistics. 551 */ 552 void devfreq_monitor_suspend(struct devfreq *devfreq) 553 { 554 mutex_lock(&devfreq->lock); 555 if (devfreq->stop_polling) { 556 mutex_unlock(&devfreq->lock); 557 return; 558 } 559 560 devfreq_update_status(devfreq, devfreq->previous_freq); 561 devfreq->stop_polling = true; 562 mutex_unlock(&devfreq->lock); 563 564 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) 565 return; 566 567 cancel_delayed_work_sync(&devfreq->work); 568 } 569 EXPORT_SYMBOL(devfreq_monitor_suspend); 570 571 /** 572 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance 573 * @devfreq: the devfreq instance. 574 * 575 * Helper function to resume devfreq device load monitoring. Function 576 * to be called from governor in response to DEVFREQ_GOV_RESUME 577 * event or when polling interval is set to non-zero. 578 */ 579 void devfreq_monitor_resume(struct devfreq *devfreq) 580 { 581 unsigned long freq; 582 583 mutex_lock(&devfreq->lock); 584 585 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) 586 goto out_update; 587 588 if (!devfreq->stop_polling) 589 goto out; 590 591 if (!delayed_work_pending(&devfreq->work) && 592 devfreq->profile->polling_ms) 593 queue_delayed_work(devfreq_wq, &devfreq->work, 594 msecs_to_jiffies(devfreq->profile->polling_ms)); 595 596 out_update: 597 devfreq->stats.last_update = get_jiffies_64(); 598 devfreq->stop_polling = false; 599 600 if (devfreq->profile->get_cur_freq && 601 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) 602 devfreq->previous_freq = freq; 603 604 out: 605 mutex_unlock(&devfreq->lock); 606 } 607 EXPORT_SYMBOL(devfreq_monitor_resume); 608 609 /** 610 * devfreq_update_interval() - Update device devfreq monitoring interval 611 * @devfreq: the devfreq instance. 612 * @delay: new polling interval to be set. 613 * 614 * Helper function to set new load monitoring polling interval. Function 615 * to be called from governor in response to DEVFREQ_GOV_UPDATE_INTERVAL event. 616 */ 617 void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay) 618 { 619 unsigned int cur_delay = devfreq->profile->polling_ms; 620 unsigned int new_delay = *delay; 621 622 mutex_lock(&devfreq->lock); 623 devfreq->profile->polling_ms = new_delay; 624 625 if (IS_SUPPORTED_FLAG(devfreq->governor->flags, IRQ_DRIVEN)) 626 goto out; 627 628 if (devfreq->stop_polling) 629 goto out; 630 631 /* if new delay is zero, stop polling */ 632 if (!new_delay) { 633 mutex_unlock(&devfreq->lock); 634 cancel_delayed_work_sync(&devfreq->work); 635 return; 636 } 637 638 /* if current delay is zero, start polling with new delay */ 639 if (!cur_delay) { 640 queue_delayed_work(devfreq_wq, &devfreq->work, 641 msecs_to_jiffies(devfreq->profile->polling_ms)); 642 goto out; 643 } 644 645 /* if current delay is greater than new delay, restart polling */ 646 if (cur_delay > new_delay) { 647 mutex_unlock(&devfreq->lock); 648 cancel_delayed_work_sync(&devfreq->work); 649 mutex_lock(&devfreq->lock); 650 if (!devfreq->stop_polling) 651 queue_delayed_work(devfreq_wq, &devfreq->work, 652 msecs_to_jiffies(devfreq->profile->polling_ms)); 653 } 654 out: 655 mutex_unlock(&devfreq->lock); 656 } 657 EXPORT_SYMBOL(devfreq_update_interval); 658 659 /** 660 * devfreq_notifier_call() - Notify that the device frequency requirements 661 * has been changed out of devfreq framework. 662 * @nb: the notifier_block (supposed to be devfreq->nb) 663 * @type: not used 664 * @devp: not used 665 * 666 * Called by a notifier that uses devfreq->nb. 667 */ 668 static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type, 669 void *devp) 670 { 671 struct devfreq *devfreq = container_of(nb, struct devfreq, nb); 672 int err = -EINVAL; 673 674 mutex_lock(&devfreq->lock); 675 676 devfreq->scaling_min_freq = find_available_min_freq(devfreq); 677 if (!devfreq->scaling_min_freq) 678 goto out; 679 680 devfreq->scaling_max_freq = find_available_max_freq(devfreq); 681 if (!devfreq->scaling_max_freq) { 682 devfreq->scaling_max_freq = ULONG_MAX; 683 goto out; 684 } 685 686 err = update_devfreq(devfreq); 687 688 out: 689 mutex_unlock(&devfreq->lock); 690 if (err) 691 dev_err(devfreq->dev.parent, 692 "failed to update frequency from OPP notifier (%d)\n", 693 err); 694 695 return NOTIFY_OK; 696 } 697 698 /** 699 * qos_notifier_call() - Common handler for QoS constraints. 700 * @devfreq: the devfreq instance. 701 */ 702 static int qos_notifier_call(struct devfreq *devfreq) 703 { 704 int err; 705 706 mutex_lock(&devfreq->lock); 707 err = update_devfreq(devfreq); 708 mutex_unlock(&devfreq->lock); 709 if (err) 710 dev_err(devfreq->dev.parent, 711 "failed to update frequency from PM QoS (%d)\n", 712 err); 713 714 return NOTIFY_OK; 715 } 716 717 /** 718 * qos_min_notifier_call() - Callback for QoS min_freq changes. 719 * @nb: Should be devfreq->nb_min 720 * @val: not used 721 * @ptr: not used 722 */ 723 static int qos_min_notifier_call(struct notifier_block *nb, 724 unsigned long val, void *ptr) 725 { 726 return qos_notifier_call(container_of(nb, struct devfreq, nb_min)); 727 } 728 729 /** 730 * qos_max_notifier_call() - Callback for QoS max_freq changes. 731 * @nb: Should be devfreq->nb_max 732 * @val: not used 733 * @ptr: not used 734 */ 735 static int qos_max_notifier_call(struct notifier_block *nb, 736 unsigned long val, void *ptr) 737 { 738 return qos_notifier_call(container_of(nb, struct devfreq, nb_max)); 739 } 740 741 /** 742 * devfreq_dev_release() - Callback for struct device to release the device. 743 * @dev: the devfreq device 744 * 745 * Remove devfreq from the list and release its resources. 746 */ 747 static void devfreq_dev_release(struct device *dev) 748 { 749 struct devfreq *devfreq = to_devfreq(dev); 750 int err; 751 752 mutex_lock(&devfreq_list_lock); 753 list_del(&devfreq->node); 754 mutex_unlock(&devfreq_list_lock); 755 756 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max, 757 DEV_PM_QOS_MAX_FREQUENCY); 758 if (err && err != -ENOENT) 759 dev_warn(dev->parent, 760 "Failed to remove max_freq notifier: %d\n", err); 761 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min, 762 DEV_PM_QOS_MIN_FREQUENCY); 763 if (err && err != -ENOENT) 764 dev_warn(dev->parent, 765 "Failed to remove min_freq notifier: %d\n", err); 766 767 if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) { 768 err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req); 769 if (err < 0) 770 dev_warn(dev->parent, 771 "Failed to remove max_freq request: %d\n", err); 772 } 773 if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) { 774 err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req); 775 if (err < 0) 776 dev_warn(dev->parent, 777 "Failed to remove min_freq request: %d\n", err); 778 } 779 780 if (devfreq->profile->exit) 781 devfreq->profile->exit(devfreq->dev.parent); 782 783 if (devfreq->opp_table) 784 dev_pm_opp_put_opp_table(devfreq->opp_table); 785 786 mutex_destroy(&devfreq->lock); 787 srcu_cleanup_notifier_head(&devfreq->transition_notifier_list); 788 kfree(devfreq); 789 } 790 791 static void create_sysfs_files(struct devfreq *devfreq, 792 const struct devfreq_governor *gov); 793 static void remove_sysfs_files(struct devfreq *devfreq, 794 const struct devfreq_governor *gov); 795 796 /** 797 * devfreq_add_device() - Add devfreq feature to the device 798 * @dev: the device to add devfreq feature. 799 * @profile: device-specific profile to run devfreq. 800 * @governor_name: name of the policy to choose frequency. 801 * @data: devfreq driver pass to governors, governor should not change it. 802 */ 803 struct devfreq *devfreq_add_device(struct device *dev, 804 struct devfreq_dev_profile *profile, 805 const char *governor_name, 806 void *data) 807 { 808 struct devfreq *devfreq; 809 struct devfreq_governor *governor; 810 unsigned long min_freq, max_freq; 811 int err = 0; 812 813 if (!dev || !profile || !governor_name) { 814 dev_err(dev, "%s: Invalid parameters.\n", __func__); 815 return ERR_PTR(-EINVAL); 816 } 817 818 mutex_lock(&devfreq_list_lock); 819 devfreq = find_device_devfreq(dev); 820 mutex_unlock(&devfreq_list_lock); 821 if (!IS_ERR(devfreq)) { 822 dev_err(dev, "%s: devfreq device already exists!\n", 823 __func__); 824 err = -EINVAL; 825 goto err_out; 826 } 827 828 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL); 829 if (!devfreq) { 830 err = -ENOMEM; 831 goto err_out; 832 } 833 834 mutex_init(&devfreq->lock); 835 mutex_lock(&devfreq->lock); 836 devfreq->dev.parent = dev; 837 devfreq->dev.class = devfreq_class; 838 devfreq->dev.release = devfreq_dev_release; 839 INIT_LIST_HEAD(&devfreq->node); 840 devfreq->profile = profile; 841 devfreq->previous_freq = profile->initial_freq; 842 devfreq->last_status.current_frequency = profile->initial_freq; 843 devfreq->data = data; 844 devfreq->nb.notifier_call = devfreq_notifier_call; 845 846 if (devfreq->profile->timer < 0 847 || devfreq->profile->timer >= DEVFREQ_TIMER_NUM) { 848 mutex_unlock(&devfreq->lock); 849 err = -EINVAL; 850 goto err_dev; 851 } 852 853 if (!devfreq->profile->max_state || !devfreq->profile->freq_table) { 854 mutex_unlock(&devfreq->lock); 855 err = set_freq_table(devfreq); 856 if (err < 0) 857 goto err_dev; 858 mutex_lock(&devfreq->lock); 859 } else { 860 devfreq->freq_table = devfreq->profile->freq_table; 861 devfreq->max_state = devfreq->profile->max_state; 862 } 863 864 devfreq->scaling_min_freq = find_available_min_freq(devfreq); 865 if (!devfreq->scaling_min_freq) { 866 mutex_unlock(&devfreq->lock); 867 err = -EINVAL; 868 goto err_dev; 869 } 870 871 devfreq->scaling_max_freq = find_available_max_freq(devfreq); 872 if (!devfreq->scaling_max_freq) { 873 mutex_unlock(&devfreq->lock); 874 err = -EINVAL; 875 goto err_dev; 876 } 877 878 devfreq_get_freq_range(devfreq, &min_freq, &max_freq); 879 880 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); 881 devfreq->opp_table = dev_pm_opp_get_opp_table(dev); 882 if (IS_ERR(devfreq->opp_table)) 883 devfreq->opp_table = NULL; 884 885 atomic_set(&devfreq->suspend_count, 0); 886 887 dev_set_name(&devfreq->dev, "%s", dev_name(dev)); 888 err = device_register(&devfreq->dev); 889 if (err) { 890 mutex_unlock(&devfreq->lock); 891 put_device(&devfreq->dev); 892 goto err_out; 893 } 894 895 devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev, 896 array3_size(sizeof(unsigned int), 897 devfreq->max_state, 898 devfreq->max_state), 899 GFP_KERNEL); 900 if (!devfreq->stats.trans_table) { 901 mutex_unlock(&devfreq->lock); 902 err = -ENOMEM; 903 goto err_devfreq; 904 } 905 906 devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev, 907 devfreq->max_state, 908 sizeof(*devfreq->stats.time_in_state), 909 GFP_KERNEL); 910 if (!devfreq->stats.time_in_state) { 911 mutex_unlock(&devfreq->lock); 912 err = -ENOMEM; 913 goto err_devfreq; 914 } 915 916 devfreq->stats.total_trans = 0; 917 devfreq->stats.last_update = get_jiffies_64(); 918 919 srcu_init_notifier_head(&devfreq->transition_notifier_list); 920 921 mutex_unlock(&devfreq->lock); 922 923 err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req, 924 DEV_PM_QOS_MIN_FREQUENCY, 0); 925 if (err < 0) 926 goto err_devfreq; 927 err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req, 928 DEV_PM_QOS_MAX_FREQUENCY, 929 PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE); 930 if (err < 0) 931 goto err_devfreq; 932 933 devfreq->nb_min.notifier_call = qos_min_notifier_call; 934 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_min, 935 DEV_PM_QOS_MIN_FREQUENCY); 936 if (err) 937 goto err_devfreq; 938 939 devfreq->nb_max.notifier_call = qos_max_notifier_call; 940 err = dev_pm_qos_add_notifier(dev, &devfreq->nb_max, 941 DEV_PM_QOS_MAX_FREQUENCY); 942 if (err) 943 goto err_devfreq; 944 945 mutex_lock(&devfreq_list_lock); 946 947 governor = try_then_request_governor(governor_name); 948 if (IS_ERR(governor)) { 949 dev_err(dev, "%s: Unable to find governor for the device\n", 950 __func__); 951 err = PTR_ERR(governor); 952 goto err_init; 953 } 954 955 devfreq->governor = governor; 956 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, 957 NULL); 958 if (err) { 959 dev_err_probe(dev, err, 960 "%s: Unable to start governor for the device\n", 961 __func__); 962 goto err_init; 963 } 964 create_sysfs_files(devfreq, devfreq->governor); 965 966 list_add(&devfreq->node, &devfreq_list); 967 968 mutex_unlock(&devfreq_list_lock); 969 970 if (devfreq->profile->is_cooling_device) { 971 devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL); 972 if (IS_ERR(devfreq->cdev)) 973 devfreq->cdev = NULL; 974 } 975 976 return devfreq; 977 978 err_init: 979 mutex_unlock(&devfreq_list_lock); 980 err_devfreq: 981 devfreq_remove_device(devfreq); 982 devfreq = NULL; 983 err_dev: 984 kfree(devfreq); 985 err_out: 986 return ERR_PTR(err); 987 } 988 EXPORT_SYMBOL(devfreq_add_device); 989 990 /** 991 * devfreq_remove_device() - Remove devfreq feature from a device. 992 * @devfreq: the devfreq instance to be removed 993 * 994 * The opposite of devfreq_add_device(). 995 */ 996 int devfreq_remove_device(struct devfreq *devfreq) 997 { 998 if (!devfreq) 999 return -EINVAL; 1000 1001 devfreq_cooling_unregister(devfreq->cdev); 1002 1003 if (devfreq->governor) { 1004 devfreq->governor->event_handler(devfreq, 1005 DEVFREQ_GOV_STOP, NULL); 1006 remove_sysfs_files(devfreq, devfreq->governor); 1007 } 1008 1009 device_unregister(&devfreq->dev); 1010 1011 return 0; 1012 } 1013 EXPORT_SYMBOL(devfreq_remove_device); 1014 1015 static int devm_devfreq_dev_match(struct device *dev, void *res, void *data) 1016 { 1017 struct devfreq **r = res; 1018 1019 if (WARN_ON(!r || !*r)) 1020 return 0; 1021 1022 return *r == data; 1023 } 1024 1025 static void devm_devfreq_dev_release(struct device *dev, void *res) 1026 { 1027 devfreq_remove_device(*(struct devfreq **)res); 1028 } 1029 1030 /** 1031 * devm_devfreq_add_device() - Resource-managed devfreq_add_device() 1032 * @dev: the device to add devfreq feature. 1033 * @profile: device-specific profile to run devfreq. 1034 * @governor_name: name of the policy to choose frequency. 1035 * @data: devfreq driver pass to governors, governor should not change it. 1036 * 1037 * This function manages automatically the memory of devfreq device using device 1038 * resource management and simplify the free operation for memory of devfreq 1039 * device. 1040 */ 1041 struct devfreq *devm_devfreq_add_device(struct device *dev, 1042 struct devfreq_dev_profile *profile, 1043 const char *governor_name, 1044 void *data) 1045 { 1046 struct devfreq **ptr, *devfreq; 1047 1048 ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL); 1049 if (!ptr) 1050 return ERR_PTR(-ENOMEM); 1051 1052 devfreq = devfreq_add_device(dev, profile, governor_name, data); 1053 if (IS_ERR(devfreq)) { 1054 devres_free(ptr); 1055 return devfreq; 1056 } 1057 1058 *ptr = devfreq; 1059 devres_add(dev, ptr); 1060 1061 return devfreq; 1062 } 1063 EXPORT_SYMBOL(devm_devfreq_add_device); 1064 1065 #ifdef CONFIG_OF 1066 /* 1067 * devfreq_get_devfreq_by_node - Get the devfreq device from devicetree 1068 * @node - pointer to device_node 1069 * 1070 * return the instance of devfreq device 1071 */ 1072 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) 1073 { 1074 struct devfreq *devfreq; 1075 1076 if (!node) 1077 return ERR_PTR(-EINVAL); 1078 1079 mutex_lock(&devfreq_list_lock); 1080 list_for_each_entry(devfreq, &devfreq_list, node) { 1081 if (devfreq->dev.parent 1082 && device_match_of_node(devfreq->dev.parent, node)) { 1083 mutex_unlock(&devfreq_list_lock); 1084 return devfreq; 1085 } 1086 } 1087 mutex_unlock(&devfreq_list_lock); 1088 1089 return ERR_PTR(-ENODEV); 1090 } 1091 1092 /* 1093 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree 1094 * @dev - instance to the given device 1095 * @phandle_name - name of property holding a phandle value 1096 * @index - index into list of devfreq 1097 * 1098 * return the instance of devfreq device 1099 */ 1100 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, 1101 const char *phandle_name, int index) 1102 { 1103 struct device_node *node; 1104 struct devfreq *devfreq; 1105 1106 if (!dev || !phandle_name) 1107 return ERR_PTR(-EINVAL); 1108 1109 if (!dev->of_node) 1110 return ERR_PTR(-EINVAL); 1111 1112 node = of_parse_phandle(dev->of_node, phandle_name, index); 1113 if (!node) 1114 return ERR_PTR(-ENODEV); 1115 1116 devfreq = devfreq_get_devfreq_by_node(node); 1117 of_node_put(node); 1118 1119 return devfreq; 1120 } 1121 1122 #else 1123 struct devfreq *devfreq_get_devfreq_by_node(struct device_node *node) 1124 { 1125 return ERR_PTR(-ENODEV); 1126 } 1127 1128 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, 1129 const char *phandle_name, int index) 1130 { 1131 return ERR_PTR(-ENODEV); 1132 } 1133 #endif /* CONFIG_OF */ 1134 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_node); 1135 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle); 1136 1137 /** 1138 * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device() 1139 * @dev: the device from which to remove devfreq feature. 1140 * @devfreq: the devfreq instance to be removed 1141 */ 1142 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq) 1143 { 1144 WARN_ON(devres_release(dev, devm_devfreq_dev_release, 1145 devm_devfreq_dev_match, devfreq)); 1146 } 1147 EXPORT_SYMBOL(devm_devfreq_remove_device); 1148 1149 /** 1150 * devfreq_suspend_device() - Suspend devfreq of a device. 1151 * @devfreq: the devfreq instance to be suspended 1152 * 1153 * This function is intended to be called by the pm callbacks 1154 * (e.g., runtime_suspend, suspend) of the device driver that 1155 * holds the devfreq. 1156 */ 1157 int devfreq_suspend_device(struct devfreq *devfreq) 1158 { 1159 int ret; 1160 1161 if (!devfreq) 1162 return -EINVAL; 1163 1164 if (atomic_inc_return(&devfreq->suspend_count) > 1) 1165 return 0; 1166 1167 if (devfreq->governor) { 1168 ret = devfreq->governor->event_handler(devfreq, 1169 DEVFREQ_GOV_SUSPEND, NULL); 1170 if (ret) 1171 return ret; 1172 } 1173 1174 if (devfreq->suspend_freq) { 1175 mutex_lock(&devfreq->lock); 1176 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0); 1177 mutex_unlock(&devfreq->lock); 1178 if (ret) 1179 return ret; 1180 } 1181 1182 return 0; 1183 } 1184 EXPORT_SYMBOL(devfreq_suspend_device); 1185 1186 /** 1187 * devfreq_resume_device() - Resume devfreq of a device. 1188 * @devfreq: the devfreq instance to be resumed 1189 * 1190 * This function is intended to be called by the pm callbacks 1191 * (e.g., runtime_resume, resume) of the device driver that 1192 * holds the devfreq. 1193 */ 1194 int devfreq_resume_device(struct devfreq *devfreq) 1195 { 1196 int ret; 1197 1198 if (!devfreq) 1199 return -EINVAL; 1200 1201 if (atomic_dec_return(&devfreq->suspend_count) >= 1) 1202 return 0; 1203 1204 if (devfreq->resume_freq) { 1205 mutex_lock(&devfreq->lock); 1206 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0); 1207 mutex_unlock(&devfreq->lock); 1208 if (ret) 1209 return ret; 1210 } 1211 1212 if (devfreq->governor) { 1213 ret = devfreq->governor->event_handler(devfreq, 1214 DEVFREQ_GOV_RESUME, NULL); 1215 if (ret) 1216 return ret; 1217 } 1218 1219 return 0; 1220 } 1221 EXPORT_SYMBOL(devfreq_resume_device); 1222 1223 /** 1224 * devfreq_suspend() - Suspend devfreq governors and devices 1225 * 1226 * Called during system wide Suspend/Hibernate cycles for suspending governors 1227 * and devices preserving the state for resume. On some platforms the devfreq 1228 * device must have precise state (frequency) after resume in order to provide 1229 * fully operating setup. 1230 */ 1231 void devfreq_suspend(void) 1232 { 1233 struct devfreq *devfreq; 1234 int ret; 1235 1236 mutex_lock(&devfreq_list_lock); 1237 list_for_each_entry(devfreq, &devfreq_list, node) { 1238 ret = devfreq_suspend_device(devfreq); 1239 if (ret) 1240 dev_err(&devfreq->dev, 1241 "failed to suspend devfreq device\n"); 1242 } 1243 mutex_unlock(&devfreq_list_lock); 1244 } 1245 1246 /** 1247 * devfreq_resume() - Resume devfreq governors and devices 1248 * 1249 * Called during system wide Suspend/Hibernate cycle for resuming governors and 1250 * devices that are suspended with devfreq_suspend(). 1251 */ 1252 void devfreq_resume(void) 1253 { 1254 struct devfreq *devfreq; 1255 int ret; 1256 1257 mutex_lock(&devfreq_list_lock); 1258 list_for_each_entry(devfreq, &devfreq_list, node) { 1259 ret = devfreq_resume_device(devfreq); 1260 if (ret) 1261 dev_warn(&devfreq->dev, 1262 "failed to resume devfreq device\n"); 1263 } 1264 mutex_unlock(&devfreq_list_lock); 1265 } 1266 1267 /** 1268 * devfreq_add_governor() - Add devfreq governor 1269 * @governor: the devfreq governor to be added 1270 */ 1271 int devfreq_add_governor(struct devfreq_governor *governor) 1272 { 1273 struct devfreq_governor *g; 1274 struct devfreq *devfreq; 1275 int err = 0; 1276 1277 if (!governor) { 1278 pr_err("%s: Invalid parameters.\n", __func__); 1279 return -EINVAL; 1280 } 1281 1282 mutex_lock(&devfreq_list_lock); 1283 g = find_devfreq_governor(governor->name); 1284 if (!IS_ERR(g)) { 1285 pr_err("%s: governor %s already registered\n", __func__, 1286 g->name); 1287 err = -EINVAL; 1288 goto err_out; 1289 } 1290 1291 list_add(&governor->node, &devfreq_governor_list); 1292 1293 list_for_each_entry(devfreq, &devfreq_list, node) { 1294 int ret = 0; 1295 struct device *dev = devfreq->dev.parent; 1296 1297 if (!strncmp(devfreq->governor->name, governor->name, 1298 DEVFREQ_NAME_LEN)) { 1299 /* The following should never occur */ 1300 if (devfreq->governor) { 1301 dev_warn(dev, 1302 "%s: Governor %s already present\n", 1303 __func__, devfreq->governor->name); 1304 ret = devfreq->governor->event_handler(devfreq, 1305 DEVFREQ_GOV_STOP, NULL); 1306 if (ret) { 1307 dev_warn(dev, 1308 "%s: Governor %s stop = %d\n", 1309 __func__, 1310 devfreq->governor->name, ret); 1311 } 1312 /* Fall through */ 1313 } 1314 devfreq->governor = governor; 1315 ret = devfreq->governor->event_handler(devfreq, 1316 DEVFREQ_GOV_START, NULL); 1317 if (ret) { 1318 dev_warn(dev, "%s: Governor %s start=%d\n", 1319 __func__, devfreq->governor->name, 1320 ret); 1321 } 1322 } 1323 } 1324 1325 err_out: 1326 mutex_unlock(&devfreq_list_lock); 1327 1328 return err; 1329 } 1330 EXPORT_SYMBOL(devfreq_add_governor); 1331 1332 static void devm_devfreq_remove_governor(void *governor) 1333 { 1334 WARN_ON(devfreq_remove_governor(governor)); 1335 } 1336 1337 /** 1338 * devm_devfreq_add_governor() - Add devfreq governor 1339 * @dev: device which adds devfreq governor 1340 * @governor: the devfreq governor to be added 1341 * 1342 * This is a resource-managed variant of devfreq_add_governor(). 1343 */ 1344 int devm_devfreq_add_governor(struct device *dev, 1345 struct devfreq_governor *governor) 1346 { 1347 int err; 1348 1349 err = devfreq_add_governor(governor); 1350 if (err) 1351 return err; 1352 1353 return devm_add_action_or_reset(dev, devm_devfreq_remove_governor, 1354 governor); 1355 } 1356 EXPORT_SYMBOL(devm_devfreq_add_governor); 1357 1358 /** 1359 * devfreq_remove_governor() - Remove devfreq feature from a device. 1360 * @governor: the devfreq governor to be removed 1361 */ 1362 int devfreq_remove_governor(struct devfreq_governor *governor) 1363 { 1364 struct devfreq_governor *g; 1365 struct devfreq *devfreq; 1366 int err = 0; 1367 1368 if (!governor) { 1369 pr_err("%s: Invalid parameters.\n", __func__); 1370 return -EINVAL; 1371 } 1372 1373 mutex_lock(&devfreq_list_lock); 1374 g = find_devfreq_governor(governor->name); 1375 if (IS_ERR(g)) { 1376 pr_err("%s: governor %s not registered\n", __func__, 1377 governor->name); 1378 err = PTR_ERR(g); 1379 goto err_out; 1380 } 1381 list_for_each_entry(devfreq, &devfreq_list, node) { 1382 int ret; 1383 struct device *dev = devfreq->dev.parent; 1384 1385 if (!strncmp(devfreq->governor->name, governor->name, 1386 DEVFREQ_NAME_LEN)) { 1387 /* we should have a devfreq governor! */ 1388 if (!devfreq->governor) { 1389 dev_warn(dev, "%s: Governor %s NOT present\n", 1390 __func__, governor->name); 1391 continue; 1392 /* Fall through */ 1393 } 1394 ret = devfreq->governor->event_handler(devfreq, 1395 DEVFREQ_GOV_STOP, NULL); 1396 if (ret) { 1397 dev_warn(dev, "%s: Governor %s stop=%d\n", 1398 __func__, devfreq->governor->name, 1399 ret); 1400 } 1401 devfreq->governor = NULL; 1402 } 1403 } 1404 1405 list_del(&governor->node); 1406 err_out: 1407 mutex_unlock(&devfreq_list_lock); 1408 1409 return err; 1410 } 1411 EXPORT_SYMBOL(devfreq_remove_governor); 1412 1413 static ssize_t name_show(struct device *dev, 1414 struct device_attribute *attr, char *buf) 1415 { 1416 struct devfreq *df = to_devfreq(dev); 1417 return sprintf(buf, "%s\n", dev_name(df->dev.parent)); 1418 } 1419 static DEVICE_ATTR_RO(name); 1420 1421 static ssize_t governor_show(struct device *dev, 1422 struct device_attribute *attr, char *buf) 1423 { 1424 struct devfreq *df = to_devfreq(dev); 1425 1426 if (!df->governor) 1427 return -EINVAL; 1428 1429 return sprintf(buf, "%s\n", df->governor->name); 1430 } 1431 1432 static ssize_t governor_store(struct device *dev, struct device_attribute *attr, 1433 const char *buf, size_t count) 1434 { 1435 struct devfreq *df = to_devfreq(dev); 1436 int ret; 1437 char str_governor[DEVFREQ_NAME_LEN + 1]; 1438 const struct devfreq_governor *governor, *prev_governor; 1439 1440 if (!df->governor) 1441 return -EINVAL; 1442 1443 ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor); 1444 if (ret != 1) 1445 return -EINVAL; 1446 1447 mutex_lock(&devfreq_list_lock); 1448 governor = try_then_request_governor(str_governor); 1449 if (IS_ERR(governor)) { 1450 ret = PTR_ERR(governor); 1451 goto out; 1452 } 1453 if (df->governor == governor) { 1454 ret = 0; 1455 goto out; 1456 } else if (IS_SUPPORTED_FLAG(df->governor->flags, IMMUTABLE) 1457 || IS_SUPPORTED_FLAG(governor->flags, IMMUTABLE)) { 1458 ret = -EINVAL; 1459 goto out; 1460 } 1461 1462 /* 1463 * Stop the current governor and remove the specific sysfs files 1464 * which depend on current governor. 1465 */ 1466 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL); 1467 if (ret) { 1468 dev_warn(dev, "%s: Governor %s not stopped(%d)\n", 1469 __func__, df->governor->name, ret); 1470 goto out; 1471 } 1472 remove_sysfs_files(df, df->governor); 1473 1474 /* 1475 * Start the new governor and create the specific sysfs files 1476 * which depend on the new governor. 1477 */ 1478 prev_governor = df->governor; 1479 df->governor = governor; 1480 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL); 1481 if (ret) { 1482 dev_warn(dev, "%s: Governor %s not started(%d)\n", 1483 __func__, df->governor->name, ret); 1484 1485 /* Restore previous governor */ 1486 df->governor = prev_governor; 1487 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL); 1488 if (ret) { 1489 dev_err(dev, 1490 "%s: reverting to Governor %s failed (%d)\n", 1491 __func__, prev_governor->name, ret); 1492 df->governor = NULL; 1493 goto out; 1494 } 1495 } 1496 1497 /* 1498 * Create the sysfs files for the new governor. But if failed to start 1499 * the new governor, restore the sysfs files of previous governor. 1500 */ 1501 create_sysfs_files(df, df->governor); 1502 1503 out: 1504 mutex_unlock(&devfreq_list_lock); 1505 1506 if (!ret) 1507 ret = count; 1508 return ret; 1509 } 1510 static DEVICE_ATTR_RW(governor); 1511 1512 static ssize_t available_governors_show(struct device *d, 1513 struct device_attribute *attr, 1514 char *buf) 1515 { 1516 struct devfreq *df = to_devfreq(d); 1517 ssize_t count = 0; 1518 1519 if (!df->governor) 1520 return -EINVAL; 1521 1522 mutex_lock(&devfreq_list_lock); 1523 1524 /* 1525 * The devfreq with immutable governor (e.g., passive) shows 1526 * only own governor. 1527 */ 1528 if (IS_SUPPORTED_FLAG(df->governor->flags, IMMUTABLE)) { 1529 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN, 1530 "%s ", df->governor->name); 1531 /* 1532 * The devfreq device shows the registered governor except for 1533 * immutable governors such as passive governor . 1534 */ 1535 } else { 1536 struct devfreq_governor *governor; 1537 1538 list_for_each_entry(governor, &devfreq_governor_list, node) { 1539 if (IS_SUPPORTED_FLAG(governor->flags, IMMUTABLE)) 1540 continue; 1541 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), 1542 "%s ", governor->name); 1543 } 1544 } 1545 1546 mutex_unlock(&devfreq_list_lock); 1547 1548 /* Truncate the trailing space */ 1549 if (count) 1550 count--; 1551 1552 count += sprintf(&buf[count], "\n"); 1553 1554 return count; 1555 } 1556 static DEVICE_ATTR_RO(available_governors); 1557 1558 static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr, 1559 char *buf) 1560 { 1561 unsigned long freq; 1562 struct devfreq *df = to_devfreq(dev); 1563 1564 if (!df->profile) 1565 return -EINVAL; 1566 1567 if (df->profile->get_cur_freq && 1568 !df->profile->get_cur_freq(df->dev.parent, &freq)) 1569 return sprintf(buf, "%lu\n", freq); 1570 1571 return sprintf(buf, "%lu\n", df->previous_freq); 1572 } 1573 static DEVICE_ATTR_RO(cur_freq); 1574 1575 static ssize_t target_freq_show(struct device *dev, 1576 struct device_attribute *attr, char *buf) 1577 { 1578 struct devfreq *df = to_devfreq(dev); 1579 1580 return sprintf(buf, "%lu\n", df->previous_freq); 1581 } 1582 static DEVICE_ATTR_RO(target_freq); 1583 1584 static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr, 1585 const char *buf, size_t count) 1586 { 1587 struct devfreq *df = to_devfreq(dev); 1588 unsigned long value; 1589 int ret; 1590 1591 /* 1592 * Protect against theoretical sysfs writes between 1593 * device_add and dev_pm_qos_add_request 1594 */ 1595 if (!dev_pm_qos_request_active(&df->user_min_freq_req)) 1596 return -EAGAIN; 1597 1598 ret = sscanf(buf, "%lu", &value); 1599 if (ret != 1) 1600 return -EINVAL; 1601 1602 /* Round down to kHz for PM QoS */ 1603 ret = dev_pm_qos_update_request(&df->user_min_freq_req, 1604 value / HZ_PER_KHZ); 1605 if (ret < 0) 1606 return ret; 1607 1608 return count; 1609 } 1610 1611 static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr, 1612 char *buf) 1613 { 1614 struct devfreq *df = to_devfreq(dev); 1615 unsigned long min_freq, max_freq; 1616 1617 mutex_lock(&df->lock); 1618 devfreq_get_freq_range(df, &min_freq, &max_freq); 1619 mutex_unlock(&df->lock); 1620 1621 return sprintf(buf, "%lu\n", min_freq); 1622 } 1623 static DEVICE_ATTR_RW(min_freq); 1624 1625 static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr, 1626 const char *buf, size_t count) 1627 { 1628 struct devfreq *df = to_devfreq(dev); 1629 unsigned long value; 1630 int ret; 1631 1632 /* 1633 * Protect against theoretical sysfs writes between 1634 * device_add and dev_pm_qos_add_request 1635 */ 1636 if (!dev_pm_qos_request_active(&df->user_max_freq_req)) 1637 return -EINVAL; 1638 1639 ret = sscanf(buf, "%lu", &value); 1640 if (ret != 1) 1641 return -EINVAL; 1642 1643 /* 1644 * PM QoS frequencies are in kHz so we need to convert. Convert by 1645 * rounding upwards so that the acceptable interval never shrinks. 1646 * 1647 * For example if the user writes "666666666" to sysfs this value will 1648 * be converted to 666667 kHz and back to 666667000 Hz before an OPP 1649 * lookup, this ensures that an OPP of 666666666Hz is still accepted. 1650 * 1651 * A value of zero means "no limit". 1652 */ 1653 if (value) 1654 value = DIV_ROUND_UP(value, HZ_PER_KHZ); 1655 else 1656 value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE; 1657 1658 ret = dev_pm_qos_update_request(&df->user_max_freq_req, value); 1659 if (ret < 0) 1660 return ret; 1661 1662 return count; 1663 } 1664 1665 static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr, 1666 char *buf) 1667 { 1668 struct devfreq *df = to_devfreq(dev); 1669 unsigned long min_freq, max_freq; 1670 1671 mutex_lock(&df->lock); 1672 devfreq_get_freq_range(df, &min_freq, &max_freq); 1673 mutex_unlock(&df->lock); 1674 1675 return sprintf(buf, "%lu\n", max_freq); 1676 } 1677 static DEVICE_ATTR_RW(max_freq); 1678 1679 static ssize_t available_frequencies_show(struct device *d, 1680 struct device_attribute *attr, 1681 char *buf) 1682 { 1683 struct devfreq *df = to_devfreq(d); 1684 ssize_t count = 0; 1685 int i; 1686 1687 if (!df->profile) 1688 return -EINVAL; 1689 1690 mutex_lock(&df->lock); 1691 1692 for (i = 0; i < df->max_state; i++) 1693 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), 1694 "%lu ", df->freq_table[i]); 1695 1696 mutex_unlock(&df->lock); 1697 /* Truncate the trailing space */ 1698 if (count) 1699 count--; 1700 1701 count += sprintf(&buf[count], "\n"); 1702 1703 return count; 1704 } 1705 static DEVICE_ATTR_RO(available_frequencies); 1706 1707 static ssize_t trans_stat_show(struct device *dev, 1708 struct device_attribute *attr, char *buf) 1709 { 1710 struct devfreq *df = to_devfreq(dev); 1711 ssize_t len = 0; 1712 int i, j; 1713 unsigned int max_state; 1714 1715 if (!df->profile) 1716 return -EINVAL; 1717 max_state = df->max_state; 1718 1719 if (max_state == 0) 1720 return sysfs_emit(buf, "Not Supported.\n"); 1721 1722 mutex_lock(&df->lock); 1723 if (!df->stop_polling && 1724 devfreq_update_status(df, df->previous_freq)) { 1725 mutex_unlock(&df->lock); 1726 return 0; 1727 } 1728 mutex_unlock(&df->lock); 1729 1730 len += sysfs_emit_at(buf, len, " From : To\n"); 1731 len += sysfs_emit_at(buf, len, " :"); 1732 for (i = 0; i < max_state; i++) { 1733 if (len >= PAGE_SIZE - 1) 1734 break; 1735 len += sysfs_emit_at(buf, len, "%10lu", 1736 df->freq_table[i]); 1737 } 1738 1739 if (len >= PAGE_SIZE - 1) 1740 return PAGE_SIZE - 1; 1741 len += sysfs_emit_at(buf, len, " time(ms)\n"); 1742 1743 for (i = 0; i < max_state; i++) { 1744 if (len >= PAGE_SIZE - 1) 1745 break; 1746 if (df->freq_table[2] == df->previous_freq) 1747 len += sysfs_emit_at(buf, len, "*"); 1748 else 1749 len += sysfs_emit_at(buf, len, " "); 1750 if (len >= PAGE_SIZE - 1) 1751 break; 1752 len += sysfs_emit_at(buf, len, "%10lu:", df->freq_table[i]); 1753 for (j = 0; j < max_state; j++) { 1754 if (len >= PAGE_SIZE - 1) 1755 break; 1756 len += sysfs_emit_at(buf, len, "%10u", 1757 df->stats.trans_table[(i * max_state) + j]); 1758 } 1759 if (len >= PAGE_SIZE - 1) 1760 break; 1761 len += sysfs_emit_at(buf, len, "%10llu\n", (u64) 1762 jiffies64_to_msecs(df->stats.time_in_state[i])); 1763 } 1764 1765 if (len < PAGE_SIZE - 1) 1766 len += sysfs_emit_at(buf, len, "Total transition : %u\n", 1767 df->stats.total_trans); 1768 if (len >= PAGE_SIZE - 1) { 1769 pr_warn_once("devfreq transition table exceeds PAGE_SIZE. Disabling\n"); 1770 return -EFBIG; 1771 } 1772 1773 return len; 1774 } 1775 1776 static ssize_t trans_stat_store(struct device *dev, 1777 struct device_attribute *attr, 1778 const char *buf, size_t count) 1779 { 1780 struct devfreq *df = to_devfreq(dev); 1781 int err, value; 1782 1783 if (!df->profile) 1784 return -EINVAL; 1785 1786 if (df->max_state == 0) 1787 return count; 1788 1789 err = kstrtoint(buf, 10, &value); 1790 if (err || value != 0) 1791 return -EINVAL; 1792 1793 mutex_lock(&df->lock); 1794 memset(df->stats.time_in_state, 0, (df->max_state * 1795 sizeof(*df->stats.time_in_state))); 1796 memset(df->stats.trans_table, 0, array3_size(sizeof(unsigned int), 1797 df->max_state, 1798 df->max_state)); 1799 df->stats.total_trans = 0; 1800 df->stats.last_update = get_jiffies_64(); 1801 mutex_unlock(&df->lock); 1802 1803 return count; 1804 } 1805 static DEVICE_ATTR_RW(trans_stat); 1806 1807 static struct attribute *devfreq_attrs[] = { 1808 &dev_attr_name.attr, 1809 &dev_attr_governor.attr, 1810 &dev_attr_available_governors.attr, 1811 &dev_attr_cur_freq.attr, 1812 &dev_attr_available_frequencies.attr, 1813 &dev_attr_target_freq.attr, 1814 &dev_attr_min_freq.attr, 1815 &dev_attr_max_freq.attr, 1816 &dev_attr_trans_stat.attr, 1817 NULL, 1818 }; 1819 ATTRIBUTE_GROUPS(devfreq); 1820 1821 static ssize_t polling_interval_show(struct device *dev, 1822 struct device_attribute *attr, char *buf) 1823 { 1824 struct devfreq *df = to_devfreq(dev); 1825 1826 if (!df->profile) 1827 return -EINVAL; 1828 1829 return sprintf(buf, "%d\n", df->profile->polling_ms); 1830 } 1831 1832 static ssize_t polling_interval_store(struct device *dev, 1833 struct device_attribute *attr, 1834 const char *buf, size_t count) 1835 { 1836 struct devfreq *df = to_devfreq(dev); 1837 unsigned int value; 1838 int ret; 1839 1840 if (!df->governor) 1841 return -EINVAL; 1842 1843 ret = sscanf(buf, "%u", &value); 1844 if (ret != 1) 1845 return -EINVAL; 1846 1847 df->governor->event_handler(df, DEVFREQ_GOV_UPDATE_INTERVAL, &value); 1848 ret = count; 1849 1850 return ret; 1851 } 1852 static DEVICE_ATTR_RW(polling_interval); 1853 1854 static ssize_t timer_show(struct device *dev, 1855 struct device_attribute *attr, char *buf) 1856 { 1857 struct devfreq *df = to_devfreq(dev); 1858 1859 if (!df->profile) 1860 return -EINVAL; 1861 1862 return sprintf(buf, "%s\n", timer_name[df->profile->timer]); 1863 } 1864 1865 static ssize_t timer_store(struct device *dev, struct device_attribute *attr, 1866 const char *buf, size_t count) 1867 { 1868 struct devfreq *df = to_devfreq(dev); 1869 char str_timer[DEVFREQ_NAME_LEN + 1]; 1870 int timer = -1; 1871 int ret = 0, i; 1872 1873 if (!df->governor || !df->profile) 1874 return -EINVAL; 1875 1876 ret = sscanf(buf, "%16s", str_timer); 1877 if (ret != 1) 1878 return -EINVAL; 1879 1880 for (i = 0; i < DEVFREQ_TIMER_NUM; i++) { 1881 if (!strncmp(timer_name[i], str_timer, DEVFREQ_NAME_LEN)) { 1882 timer = i; 1883 break; 1884 } 1885 } 1886 1887 if (timer < 0) { 1888 ret = -EINVAL; 1889 goto out; 1890 } 1891 1892 if (df->profile->timer == timer) { 1893 ret = 0; 1894 goto out; 1895 } 1896 1897 mutex_lock(&df->lock); 1898 df->profile->timer = timer; 1899 mutex_unlock(&df->lock); 1900 1901 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL); 1902 if (ret) { 1903 dev_warn(dev, "%s: Governor %s not stopped(%d)\n", 1904 __func__, df->governor->name, ret); 1905 goto out; 1906 } 1907 1908 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL); 1909 if (ret) 1910 dev_warn(dev, "%s: Governor %s not started(%d)\n", 1911 __func__, df->governor->name, ret); 1912 out: 1913 return ret ? ret : count; 1914 } 1915 static DEVICE_ATTR_RW(timer); 1916 1917 #define CREATE_SYSFS_FILE(df, name) \ 1918 { \ 1919 int ret; \ 1920 ret = sysfs_create_file(&df->dev.kobj, &dev_attr_##name.attr); \ 1921 if (ret < 0) { \ 1922 dev_warn(&df->dev, \ 1923 "Unable to create attr(%s)\n", "##name"); \ 1924 } \ 1925 } \ 1926 1927 /* Create the specific sysfs files which depend on each governor. */ 1928 static void create_sysfs_files(struct devfreq *devfreq, 1929 const struct devfreq_governor *gov) 1930 { 1931 if (IS_SUPPORTED_ATTR(gov->attrs, POLLING_INTERVAL)) 1932 CREATE_SYSFS_FILE(devfreq, polling_interval); 1933 if (IS_SUPPORTED_ATTR(gov->attrs, TIMER)) 1934 CREATE_SYSFS_FILE(devfreq, timer); 1935 } 1936 1937 /* Remove the specific sysfs files which depend on each governor. */ 1938 static void remove_sysfs_files(struct devfreq *devfreq, 1939 const struct devfreq_governor *gov) 1940 { 1941 if (IS_SUPPORTED_ATTR(gov->attrs, POLLING_INTERVAL)) 1942 sysfs_remove_file(&devfreq->dev.kobj, 1943 &dev_attr_polling_interval.attr); 1944 if (IS_SUPPORTED_ATTR(gov->attrs, TIMER)) 1945 sysfs_remove_file(&devfreq->dev.kobj, &dev_attr_timer.attr); 1946 } 1947 1948 /** 1949 * devfreq_summary_show() - Show the summary of the devfreq devices 1950 * @s: seq_file instance to show the summary of devfreq devices 1951 * @data: not used 1952 * 1953 * Show the summary of the devfreq devices via 'devfreq_summary' debugfs file. 1954 * It helps that user can know the detailed information of the devfreq devices. 1955 * 1956 * Return 0 always because it shows the information without any data change. 1957 */ 1958 static int devfreq_summary_show(struct seq_file *s, void *data) 1959 { 1960 struct devfreq *devfreq; 1961 struct devfreq *p_devfreq = NULL; 1962 unsigned long cur_freq, min_freq, max_freq; 1963 unsigned int polling_ms; 1964 unsigned int timer; 1965 1966 seq_printf(s, "%-30s %-30s %-15s %-10s %10s %12s %12s %12s\n", 1967 "dev", 1968 "parent_dev", 1969 "governor", 1970 "timer", 1971 "polling_ms", 1972 "cur_freq_Hz", 1973 "min_freq_Hz", 1974 "max_freq_Hz"); 1975 seq_printf(s, "%30s %30s %15s %10s %10s %12s %12s %12s\n", 1976 "------------------------------", 1977 "------------------------------", 1978 "---------------", 1979 "----------", 1980 "----------", 1981 "------------", 1982 "------------", 1983 "------------"); 1984 1985 mutex_lock(&devfreq_list_lock); 1986 1987 list_for_each_entry_reverse(devfreq, &devfreq_list, node) { 1988 #if IS_ENABLED(CONFIG_DEVFREQ_GOV_PASSIVE) 1989 if (!strncmp(devfreq->governor->name, DEVFREQ_GOV_PASSIVE, 1990 DEVFREQ_NAME_LEN)) { 1991 struct devfreq_passive_data *data = devfreq->data; 1992 1993 if (data) 1994 p_devfreq = data->parent; 1995 } else { 1996 p_devfreq = NULL; 1997 } 1998 #endif 1999 2000 mutex_lock(&devfreq->lock); 2001 cur_freq = devfreq->previous_freq; 2002 devfreq_get_freq_range(devfreq, &min_freq, &max_freq); 2003 timer = devfreq->profile->timer; 2004 2005 if (IS_SUPPORTED_ATTR(devfreq->governor->attrs, POLLING_INTERVAL)) 2006 polling_ms = devfreq->profile->polling_ms; 2007 else 2008 polling_ms = 0; 2009 mutex_unlock(&devfreq->lock); 2010 2011 seq_printf(s, 2012 "%-30s %-30s %-15s %-10s %10d %12ld %12ld %12ld\n", 2013 dev_name(&devfreq->dev), 2014 p_devfreq ? dev_name(&p_devfreq->dev) : "null", 2015 devfreq->governor->name, 2016 polling_ms ? timer_name[timer] : "null", 2017 polling_ms, 2018 cur_freq, 2019 min_freq, 2020 max_freq); 2021 } 2022 2023 mutex_unlock(&devfreq_list_lock); 2024 2025 return 0; 2026 } 2027 DEFINE_SHOW_ATTRIBUTE(devfreq_summary); 2028 2029 static int __init devfreq_init(void) 2030 { 2031 devfreq_class = class_create("devfreq"); 2032 if (IS_ERR(devfreq_class)) { 2033 pr_err("%s: couldn't create class\n", __FILE__); 2034 return PTR_ERR(devfreq_class); 2035 } 2036 2037 devfreq_wq = create_freezable_workqueue("devfreq_wq"); 2038 if (!devfreq_wq) { 2039 class_destroy(devfreq_class); 2040 pr_err("%s: couldn't create workqueue\n", __FILE__); 2041 return -ENOMEM; 2042 } 2043 devfreq_class->dev_groups = devfreq_groups; 2044 2045 devfreq_debugfs = debugfs_create_dir("devfreq", NULL); 2046 debugfs_create_file("devfreq_summary", 0444, 2047 devfreq_debugfs, NULL, 2048 &devfreq_summary_fops); 2049 2050 return 0; 2051 } 2052 subsys_initcall(devfreq_init); 2053 2054 /* 2055 * The following are helper functions for devfreq user device drivers with 2056 * OPP framework. 2057 */ 2058 2059 /** 2060 * devfreq_recommended_opp() - Helper function to get proper OPP for the 2061 * freq value given to target callback. 2062 * @dev: The devfreq user device. (parent of devfreq) 2063 * @freq: The frequency given to target function 2064 * @flags: Flags handed from devfreq framework. 2065 * 2066 * The callers are required to call dev_pm_opp_put() for the returned OPP after 2067 * use. 2068 */ 2069 struct dev_pm_opp *devfreq_recommended_opp(struct device *dev, 2070 unsigned long *freq, 2071 u32 flags) 2072 { 2073 struct dev_pm_opp *opp; 2074 2075 if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) { 2076 /* The freq is an upper bound. opp should be lower */ 2077 opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0); 2078 2079 /* If not available, use the closest opp */ 2080 if (opp == ERR_PTR(-ERANGE)) 2081 opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0); 2082 } else { 2083 /* The freq is an lower bound. opp should be higher */ 2084 opp = dev_pm_opp_find_freq_ceil_indexed(dev, freq, 0); 2085 2086 /* If not available, use the closest opp */ 2087 if (opp == ERR_PTR(-ERANGE)) 2088 opp = dev_pm_opp_find_freq_floor_indexed(dev, freq, 0); 2089 } 2090 2091 return opp; 2092 } 2093 EXPORT_SYMBOL(devfreq_recommended_opp); 2094 2095 /** 2096 * devfreq_register_opp_notifier() - Helper function to get devfreq notified 2097 * for any changes in the OPP availability 2098 * changes 2099 * @dev: The devfreq user device. (parent of devfreq) 2100 * @devfreq: The devfreq object. 2101 */ 2102 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq) 2103 { 2104 return dev_pm_opp_register_notifier(dev, &devfreq->nb); 2105 } 2106 EXPORT_SYMBOL(devfreq_register_opp_notifier); 2107 2108 /** 2109 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq 2110 * notified for any changes in the OPP 2111 * availability changes anymore. 2112 * @dev: The devfreq user device. (parent of devfreq) 2113 * @devfreq: The devfreq object. 2114 * 2115 * At exit() callback of devfreq_dev_profile, this must be included if 2116 * devfreq_recommended_opp is used. 2117 */ 2118 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) 2119 { 2120 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb); 2121 } 2122 EXPORT_SYMBOL(devfreq_unregister_opp_notifier); 2123 2124 static void devm_devfreq_opp_release(struct device *dev, void *res) 2125 { 2126 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); 2127 } 2128 2129 /** 2130 * devm_devfreq_register_opp_notifier() - Resource-managed 2131 * devfreq_register_opp_notifier() 2132 * @dev: The devfreq user device. (parent of devfreq) 2133 * @devfreq: The devfreq object. 2134 */ 2135 int devm_devfreq_register_opp_notifier(struct device *dev, 2136 struct devfreq *devfreq) 2137 { 2138 struct devfreq **ptr; 2139 int ret; 2140 2141 ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL); 2142 if (!ptr) 2143 return -ENOMEM; 2144 2145 ret = devfreq_register_opp_notifier(dev, devfreq); 2146 if (ret) { 2147 devres_free(ptr); 2148 return ret; 2149 } 2150 2151 *ptr = devfreq; 2152 devres_add(dev, ptr); 2153 2154 return 0; 2155 } 2156 EXPORT_SYMBOL(devm_devfreq_register_opp_notifier); 2157 2158 /** 2159 * devm_devfreq_unregister_opp_notifier() - Resource-managed 2160 * devfreq_unregister_opp_notifier() 2161 * @dev: The devfreq user device. (parent of devfreq) 2162 * @devfreq: The devfreq object. 2163 */ 2164 void devm_devfreq_unregister_opp_notifier(struct device *dev, 2165 struct devfreq *devfreq) 2166 { 2167 WARN_ON(devres_release(dev, devm_devfreq_opp_release, 2168 devm_devfreq_dev_match, devfreq)); 2169 } 2170 EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier); 2171 2172 /** 2173 * devfreq_register_notifier() - Register a driver with devfreq 2174 * @devfreq: The devfreq object. 2175 * @nb: The notifier block to register. 2176 * @list: DEVFREQ_TRANSITION_NOTIFIER. 2177 */ 2178 int devfreq_register_notifier(struct devfreq *devfreq, 2179 struct notifier_block *nb, 2180 unsigned int list) 2181 { 2182 int ret = 0; 2183 2184 if (!devfreq) 2185 return -EINVAL; 2186 2187 switch (list) { 2188 case DEVFREQ_TRANSITION_NOTIFIER: 2189 ret = srcu_notifier_chain_register( 2190 &devfreq->transition_notifier_list, nb); 2191 break; 2192 default: 2193 ret = -EINVAL; 2194 } 2195 2196 return ret; 2197 } 2198 EXPORT_SYMBOL(devfreq_register_notifier); 2199 2200 /* 2201 * devfreq_unregister_notifier() - Unregister a driver with devfreq 2202 * @devfreq: The devfreq object. 2203 * @nb: The notifier block to be unregistered. 2204 * @list: DEVFREQ_TRANSITION_NOTIFIER. 2205 */ 2206 int devfreq_unregister_notifier(struct devfreq *devfreq, 2207 struct notifier_block *nb, 2208 unsigned int list) 2209 { 2210 int ret = 0; 2211 2212 if (!devfreq) 2213 return -EINVAL; 2214 2215 switch (list) { 2216 case DEVFREQ_TRANSITION_NOTIFIER: 2217 ret = srcu_notifier_chain_unregister( 2218 &devfreq->transition_notifier_list, nb); 2219 break; 2220 default: 2221 ret = -EINVAL; 2222 } 2223 2224 return ret; 2225 } 2226 EXPORT_SYMBOL(devfreq_unregister_notifier); 2227 2228 struct devfreq_notifier_devres { 2229 struct devfreq *devfreq; 2230 struct notifier_block *nb; 2231 unsigned int list; 2232 }; 2233 2234 static void devm_devfreq_notifier_release(struct device *dev, void *res) 2235 { 2236 struct devfreq_notifier_devres *this = res; 2237 2238 devfreq_unregister_notifier(this->devfreq, this->nb, this->list); 2239 } 2240 2241 /** 2242 * devm_devfreq_register_notifier() 2243 * - Resource-managed devfreq_register_notifier() 2244 * @dev: The devfreq user device. (parent of devfreq) 2245 * @devfreq: The devfreq object. 2246 * @nb: The notifier block to be unregistered. 2247 * @list: DEVFREQ_TRANSITION_NOTIFIER. 2248 */ 2249 int devm_devfreq_register_notifier(struct device *dev, 2250 struct devfreq *devfreq, 2251 struct notifier_block *nb, 2252 unsigned int list) 2253 { 2254 struct devfreq_notifier_devres *ptr; 2255 int ret; 2256 2257 ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr), 2258 GFP_KERNEL); 2259 if (!ptr) 2260 return -ENOMEM; 2261 2262 ret = devfreq_register_notifier(devfreq, nb, list); 2263 if (ret) { 2264 devres_free(ptr); 2265 return ret; 2266 } 2267 2268 ptr->devfreq = devfreq; 2269 ptr->nb = nb; 2270 ptr->list = list; 2271 devres_add(dev, ptr); 2272 2273 return 0; 2274 } 2275 EXPORT_SYMBOL(devm_devfreq_register_notifier); 2276 2277 /** 2278 * devm_devfreq_unregister_notifier() 2279 * - Resource-managed devfreq_unregister_notifier() 2280 * @dev: The devfreq user device. (parent of devfreq) 2281 * @devfreq: The devfreq object. 2282 * @nb: The notifier block to be unregistered. 2283 * @list: DEVFREQ_TRANSITION_NOTIFIER. 2284 */ 2285 void devm_devfreq_unregister_notifier(struct device *dev, 2286 struct devfreq *devfreq, 2287 struct notifier_block *nb, 2288 unsigned int list) 2289 { 2290 WARN_ON(devres_release(dev, devm_devfreq_notifier_release, 2291 devm_devfreq_dev_match, devfreq)); 2292 } 2293 EXPORT_SYMBOL(devm_devfreq_unregister_notifier); 2294