1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Generic OPP Interface 4 * 5 * Copyright (C) 2009-2010 Texas Instruments Incorporated. 6 * Nishanth Menon 7 * Romit Dasgupta 8 * Kevin Hilman 9 */ 10 11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 12 13 #include <linux/clk.h> 14 #include <linux/errno.h> 15 #include <linux/err.h> 16 #include <linux/slab.h> 17 #include <linux/device.h> 18 #include <linux/export.h> 19 #include <linux/pm_domain.h> 20 #include <linux/regulator/consumer.h> 21 22 #include "opp.h" 23 24 /* 25 * The root of the list of all opp-tables. All opp_table structures branch off 26 * from here, with each opp_table containing the list of opps it supports in 27 * various states of availability. 28 */ 29 LIST_HEAD(opp_tables); 30 /* Lock to allow exclusive modification to the device and opp lists */ 31 DEFINE_MUTEX(opp_table_lock); 32 33 static struct opp_device *_find_opp_dev(const struct device *dev, 34 struct opp_table *opp_table) 35 { 36 struct opp_device *opp_dev; 37 38 list_for_each_entry(opp_dev, &opp_table->dev_list, node) 39 if (opp_dev->dev == dev) 40 return opp_dev; 41 42 return NULL; 43 } 44 45 static struct opp_table *_find_opp_table_unlocked(struct device *dev) 46 { 47 struct opp_table *opp_table; 48 bool found; 49 50 list_for_each_entry(opp_table, &opp_tables, node) { 51 mutex_lock(&opp_table->lock); 52 found = !!_find_opp_dev(dev, opp_table); 53 mutex_unlock(&opp_table->lock); 54 55 if (found) { 56 _get_opp_table_kref(opp_table); 57 58 return opp_table; 59 } 60 } 61 62 return ERR_PTR(-ENODEV); 63 } 64 65 /** 66 * _find_opp_table() - find opp_table struct using device pointer 67 * @dev: device pointer used to lookup OPP table 68 * 69 * Search OPP table for one containing matching device. 70 * 71 * Return: pointer to 'struct opp_table' if found, otherwise -ENODEV or 72 * -EINVAL based on type of error. 73 * 74 * The callers must call dev_pm_opp_put_opp_table() after the table is used. 75 */ 76 struct opp_table *_find_opp_table(struct device *dev) 77 { 78 struct opp_table *opp_table; 79 80 if (IS_ERR_OR_NULL(dev)) { 81 pr_err("%s: Invalid parameters\n", __func__); 82 return ERR_PTR(-EINVAL); 83 } 84 85 mutex_lock(&opp_table_lock); 86 opp_table = _find_opp_table_unlocked(dev); 87 mutex_unlock(&opp_table_lock); 88 89 return opp_table; 90 } 91 92 /** 93 * dev_pm_opp_get_voltage() - Gets the voltage corresponding to an opp 94 * @opp: opp for which voltage has to be returned for 95 * 96 * Return: voltage in micro volt corresponding to the opp, else 97 * return 0 98 * 99 * This is useful only for devices with single power supply. 100 */ 101 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 102 { 103 if (IS_ERR_OR_NULL(opp)) { 104 pr_err("%s: Invalid parameters\n", __func__); 105 return 0; 106 } 107 108 return opp->supplies[0].u_volt; 109 } 110 EXPORT_SYMBOL_GPL(dev_pm_opp_get_voltage); 111 112 /** 113 * dev_pm_opp_get_freq() - Gets the frequency corresponding to an available opp 114 * @opp: opp for which frequency has to be returned for 115 * 116 * Return: frequency in hertz corresponding to the opp, else 117 * return 0 118 */ 119 unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 120 { 121 if (IS_ERR_OR_NULL(opp)) { 122 pr_err("%s: Invalid parameters\n", __func__); 123 return 0; 124 } 125 126 return opp->rate; 127 } 128 EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); 129 130 /** 131 * dev_pm_opp_get_level() - Gets the level corresponding to an available opp 132 * @opp: opp for which level value has to be returned for 133 * 134 * Return: level read from device tree corresponding to the opp, else 135 * return 0. 136 */ 137 unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp) 138 { 139 if (IS_ERR_OR_NULL(opp) || !opp->available) { 140 pr_err("%s: Invalid parameters\n", __func__); 141 return 0; 142 } 143 144 return opp->level; 145 } 146 EXPORT_SYMBOL_GPL(dev_pm_opp_get_level); 147 148 /** 149 * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not 150 * @opp: opp for which turbo mode is being verified 151 * 152 * Turbo OPPs are not for normal use, and can be enabled (under certain 153 * conditions) for short duration of times to finish high throughput work 154 * quickly. Running on them for longer times may overheat the chip. 155 * 156 * Return: true if opp is turbo opp, else false. 157 */ 158 bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 159 { 160 if (IS_ERR_OR_NULL(opp) || !opp->available) { 161 pr_err("%s: Invalid parameters\n", __func__); 162 return false; 163 } 164 165 return opp->turbo; 166 } 167 EXPORT_SYMBOL_GPL(dev_pm_opp_is_turbo); 168 169 /** 170 * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds 171 * @dev: device for which we do this operation 172 * 173 * Return: This function returns the max clock latency in nanoseconds. 174 */ 175 unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 176 { 177 struct opp_table *opp_table; 178 unsigned long clock_latency_ns; 179 180 opp_table = _find_opp_table(dev); 181 if (IS_ERR(opp_table)) 182 return 0; 183 184 clock_latency_ns = opp_table->clock_latency_ns_max; 185 186 dev_pm_opp_put_opp_table(opp_table); 187 188 return clock_latency_ns; 189 } 190 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_clock_latency); 191 192 /** 193 * dev_pm_opp_get_max_volt_latency() - Get max voltage latency in nanoseconds 194 * @dev: device for which we do this operation 195 * 196 * Return: This function returns the max voltage latency in nanoseconds. 197 */ 198 unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) 199 { 200 struct opp_table *opp_table; 201 struct dev_pm_opp *opp; 202 struct regulator *reg; 203 unsigned long latency_ns = 0; 204 int ret, i, count; 205 struct { 206 unsigned long min; 207 unsigned long max; 208 } *uV; 209 210 opp_table = _find_opp_table(dev); 211 if (IS_ERR(opp_table)) 212 return 0; 213 214 /* Regulator may not be required for the device */ 215 if (!opp_table->regulators) 216 goto put_opp_table; 217 218 count = opp_table->regulator_count; 219 220 uV = kmalloc_array(count, sizeof(*uV), GFP_KERNEL); 221 if (!uV) 222 goto put_opp_table; 223 224 mutex_lock(&opp_table->lock); 225 226 for (i = 0; i < count; i++) { 227 uV[i].min = ~0; 228 uV[i].max = 0; 229 230 list_for_each_entry(opp, &opp_table->opp_list, node) { 231 if (!opp->available) 232 continue; 233 234 if (opp->supplies[i].u_volt_min < uV[i].min) 235 uV[i].min = opp->supplies[i].u_volt_min; 236 if (opp->supplies[i].u_volt_max > uV[i].max) 237 uV[i].max = opp->supplies[i].u_volt_max; 238 } 239 } 240 241 mutex_unlock(&opp_table->lock); 242 243 /* 244 * The caller needs to ensure that opp_table (and hence the regulator) 245 * isn't freed, while we are executing this routine. 246 */ 247 for (i = 0; i < count; i++) { 248 reg = opp_table->regulators[i]; 249 ret = regulator_set_voltage_time(reg, uV[i].min, uV[i].max); 250 if (ret > 0) 251 latency_ns += ret * 1000; 252 } 253 254 kfree(uV); 255 put_opp_table: 256 dev_pm_opp_put_opp_table(opp_table); 257 258 return latency_ns; 259 } 260 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_volt_latency); 261 262 /** 263 * dev_pm_opp_get_max_transition_latency() - Get max transition latency in 264 * nanoseconds 265 * @dev: device for which we do this operation 266 * 267 * Return: This function returns the max transition latency, in nanoseconds, to 268 * switch from one OPP to other. 269 */ 270 unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) 271 { 272 return dev_pm_opp_get_max_volt_latency(dev) + 273 dev_pm_opp_get_max_clock_latency(dev); 274 } 275 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_transition_latency); 276 277 /** 278 * dev_pm_opp_get_suspend_opp_freq() - Get frequency of suspend opp in Hz 279 * @dev: device for which we do this operation 280 * 281 * Return: This function returns the frequency of the OPP marked as suspend_opp 282 * if one is available, else returns 0; 283 */ 284 unsigned long dev_pm_opp_get_suspend_opp_freq(struct device *dev) 285 { 286 struct opp_table *opp_table; 287 unsigned long freq = 0; 288 289 opp_table = _find_opp_table(dev); 290 if (IS_ERR(opp_table)) 291 return 0; 292 293 if (opp_table->suspend_opp && opp_table->suspend_opp->available) 294 freq = dev_pm_opp_get_freq(opp_table->suspend_opp); 295 296 dev_pm_opp_put_opp_table(opp_table); 297 298 return freq; 299 } 300 EXPORT_SYMBOL_GPL(dev_pm_opp_get_suspend_opp_freq); 301 302 int _get_opp_count(struct opp_table *opp_table) 303 { 304 struct dev_pm_opp *opp; 305 int count = 0; 306 307 mutex_lock(&opp_table->lock); 308 309 list_for_each_entry(opp, &opp_table->opp_list, node) { 310 if (opp->available) 311 count++; 312 } 313 314 mutex_unlock(&opp_table->lock); 315 316 return count; 317 } 318 319 /** 320 * dev_pm_opp_get_opp_count() - Get number of opps available in the opp table 321 * @dev: device for which we do this operation 322 * 323 * Return: This function returns the number of available opps if there are any, 324 * else returns 0 if none or the corresponding error value. 325 */ 326 int dev_pm_opp_get_opp_count(struct device *dev) 327 { 328 struct opp_table *opp_table; 329 int count; 330 331 opp_table = _find_opp_table(dev); 332 if (IS_ERR(opp_table)) { 333 count = PTR_ERR(opp_table); 334 dev_dbg(dev, "%s: OPP table not found (%d)\n", 335 __func__, count); 336 return count; 337 } 338 339 count = _get_opp_count(opp_table); 340 dev_pm_opp_put_opp_table(opp_table); 341 342 return count; 343 } 344 EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_count); 345 346 /** 347 * dev_pm_opp_find_freq_exact() - search for an exact frequency 348 * @dev: device for which we do this operation 349 * @freq: frequency to search for 350 * @available: true/false - match for available opp 351 * 352 * Return: Searches for exact match in the opp table and returns pointer to the 353 * matching opp if found, else returns ERR_PTR in case of error and should 354 * be handled using IS_ERR. Error return values can be: 355 * EINVAL: for bad pointer 356 * ERANGE: no match found for search 357 * ENODEV: if device not found in list of registered devices 358 * 359 * Note: available is a modifier for the search. if available=true, then the 360 * match is for exact matching frequency and is available in the stored OPP 361 * table. if false, the match is for exact frequency which is not available. 362 * 363 * This provides a mechanism to enable an opp which is not available currently 364 * or the opposite as well. 365 * 366 * The callers are required to call dev_pm_opp_put() for the returned OPP after 367 * use. 368 */ 369 struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 370 unsigned long freq, 371 bool available) 372 { 373 struct opp_table *opp_table; 374 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 375 376 opp_table = _find_opp_table(dev); 377 if (IS_ERR(opp_table)) { 378 int r = PTR_ERR(opp_table); 379 380 dev_err(dev, "%s: OPP table not found (%d)\n", __func__, r); 381 return ERR_PTR(r); 382 } 383 384 mutex_lock(&opp_table->lock); 385 386 list_for_each_entry(temp_opp, &opp_table->opp_list, node) { 387 if (temp_opp->available == available && 388 temp_opp->rate == freq) { 389 opp = temp_opp; 390 391 /* Increment the reference count of OPP */ 392 dev_pm_opp_get(opp); 393 break; 394 } 395 } 396 397 mutex_unlock(&opp_table->lock); 398 dev_pm_opp_put_opp_table(opp_table); 399 400 return opp; 401 } 402 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_exact); 403 404 /** 405 * dev_pm_opp_find_level_exact() - search for an exact level 406 * @dev: device for which we do this operation 407 * @level: level to search for 408 * 409 * Return: Searches for exact match in the opp table and returns pointer to the 410 * matching opp if found, else returns ERR_PTR in case of error and should 411 * be handled using IS_ERR. Error return values can be: 412 * EINVAL: for bad pointer 413 * ERANGE: no match found for search 414 * ENODEV: if device not found in list of registered devices 415 * 416 * The callers are required to call dev_pm_opp_put() for the returned OPP after 417 * use. 418 */ 419 struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev, 420 unsigned int level) 421 { 422 struct opp_table *opp_table; 423 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 424 425 opp_table = _find_opp_table(dev); 426 if (IS_ERR(opp_table)) { 427 int r = PTR_ERR(opp_table); 428 429 dev_err(dev, "%s: OPP table not found (%d)\n", __func__, r); 430 return ERR_PTR(r); 431 } 432 433 mutex_lock(&opp_table->lock); 434 435 list_for_each_entry(temp_opp, &opp_table->opp_list, node) { 436 if (temp_opp->level == level) { 437 opp = temp_opp; 438 439 /* Increment the reference count of OPP */ 440 dev_pm_opp_get(opp); 441 break; 442 } 443 } 444 445 mutex_unlock(&opp_table->lock); 446 dev_pm_opp_put_opp_table(opp_table); 447 448 return opp; 449 } 450 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_exact); 451 452 static noinline struct dev_pm_opp *_find_freq_ceil(struct opp_table *opp_table, 453 unsigned long *freq) 454 { 455 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 456 457 mutex_lock(&opp_table->lock); 458 459 list_for_each_entry(temp_opp, &opp_table->opp_list, node) { 460 if (temp_opp->available && temp_opp->rate >= *freq) { 461 opp = temp_opp; 462 *freq = opp->rate; 463 464 /* Increment the reference count of OPP */ 465 dev_pm_opp_get(opp); 466 break; 467 } 468 } 469 470 mutex_unlock(&opp_table->lock); 471 472 return opp; 473 } 474 475 /** 476 * dev_pm_opp_find_freq_ceil() - Search for an rounded ceil freq 477 * @dev: device for which we do this operation 478 * @freq: Start frequency 479 * 480 * Search for the matching ceil *available* OPP from a starting freq 481 * for a device. 482 * 483 * Return: matching *opp and refreshes *freq accordingly, else returns 484 * ERR_PTR in case of error and should be handled using IS_ERR. Error return 485 * values can be: 486 * EINVAL: for bad pointer 487 * ERANGE: no match found for search 488 * ENODEV: if device not found in list of registered devices 489 * 490 * The callers are required to call dev_pm_opp_put() for the returned OPP after 491 * use. 492 */ 493 struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 494 unsigned long *freq) 495 { 496 struct opp_table *opp_table; 497 struct dev_pm_opp *opp; 498 499 if (!dev || !freq) { 500 dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq); 501 return ERR_PTR(-EINVAL); 502 } 503 504 opp_table = _find_opp_table(dev); 505 if (IS_ERR(opp_table)) 506 return ERR_CAST(opp_table); 507 508 opp = _find_freq_ceil(opp_table, freq); 509 510 dev_pm_opp_put_opp_table(opp_table); 511 512 return opp; 513 } 514 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil); 515 516 /** 517 * dev_pm_opp_find_freq_floor() - Search for a rounded floor freq 518 * @dev: device for which we do this operation 519 * @freq: Start frequency 520 * 521 * Search for the matching floor *available* OPP from a starting freq 522 * for a device. 523 * 524 * Return: matching *opp and refreshes *freq accordingly, else returns 525 * ERR_PTR in case of error and should be handled using IS_ERR. Error return 526 * values can be: 527 * EINVAL: for bad pointer 528 * ERANGE: no match found for search 529 * ENODEV: if device not found in list of registered devices 530 * 531 * The callers are required to call dev_pm_opp_put() for the returned OPP after 532 * use. 533 */ 534 struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 535 unsigned long *freq) 536 { 537 struct opp_table *opp_table; 538 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 539 540 if (!dev || !freq) { 541 dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq); 542 return ERR_PTR(-EINVAL); 543 } 544 545 opp_table = _find_opp_table(dev); 546 if (IS_ERR(opp_table)) 547 return ERR_CAST(opp_table); 548 549 mutex_lock(&opp_table->lock); 550 551 list_for_each_entry(temp_opp, &opp_table->opp_list, node) { 552 if (temp_opp->available) { 553 /* go to the next node, before choosing prev */ 554 if (temp_opp->rate > *freq) 555 break; 556 else 557 opp = temp_opp; 558 } 559 } 560 561 /* Increment the reference count of OPP */ 562 if (!IS_ERR(opp)) 563 dev_pm_opp_get(opp); 564 mutex_unlock(&opp_table->lock); 565 dev_pm_opp_put_opp_table(opp_table); 566 567 if (!IS_ERR(opp)) 568 *freq = opp->rate; 569 570 return opp; 571 } 572 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor); 573 574 /** 575 * dev_pm_opp_find_freq_ceil_by_volt() - Find OPP with highest frequency for 576 * target voltage. 577 * @dev: Device for which we do this operation. 578 * @u_volt: Target voltage. 579 * 580 * Search for OPP with highest (ceil) frequency and has voltage <= u_volt. 581 * 582 * Return: matching *opp, else returns ERR_PTR in case of error which should be 583 * handled using IS_ERR. 584 * 585 * Error return values can be: 586 * EINVAL: bad parameters 587 * 588 * The callers are required to call dev_pm_opp_put() for the returned OPP after 589 * use. 590 */ 591 struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev, 592 unsigned long u_volt) 593 { 594 struct opp_table *opp_table; 595 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 596 597 if (!dev || !u_volt) { 598 dev_err(dev, "%s: Invalid argument volt=%lu\n", __func__, 599 u_volt); 600 return ERR_PTR(-EINVAL); 601 } 602 603 opp_table = _find_opp_table(dev); 604 if (IS_ERR(opp_table)) 605 return ERR_CAST(opp_table); 606 607 mutex_lock(&opp_table->lock); 608 609 list_for_each_entry(temp_opp, &opp_table->opp_list, node) { 610 if (temp_opp->available) { 611 if (temp_opp->supplies[0].u_volt > u_volt) 612 break; 613 opp = temp_opp; 614 } 615 } 616 617 /* Increment the reference count of OPP */ 618 if (!IS_ERR(opp)) 619 dev_pm_opp_get(opp); 620 621 mutex_unlock(&opp_table->lock); 622 dev_pm_opp_put_opp_table(opp_table); 623 624 return opp; 625 } 626 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil_by_volt); 627 628 static int _set_opp_voltage(struct device *dev, struct regulator *reg, 629 struct dev_pm_opp_supply *supply) 630 { 631 int ret; 632 633 /* Regulator not available for device */ 634 if (IS_ERR(reg)) { 635 dev_dbg(dev, "%s: regulator not available: %ld\n", __func__, 636 PTR_ERR(reg)); 637 return 0; 638 } 639 640 dev_dbg(dev, "%s: voltages (mV): %lu %lu %lu\n", __func__, 641 supply->u_volt_min, supply->u_volt, supply->u_volt_max); 642 643 ret = regulator_set_voltage_triplet(reg, supply->u_volt_min, 644 supply->u_volt, supply->u_volt_max); 645 if (ret) 646 dev_err(dev, "%s: failed to set voltage (%lu %lu %lu mV): %d\n", 647 __func__, supply->u_volt_min, supply->u_volt, 648 supply->u_volt_max, ret); 649 650 return ret; 651 } 652 653 static inline int _generic_set_opp_clk_only(struct device *dev, struct clk *clk, 654 unsigned long freq) 655 { 656 int ret; 657 658 ret = clk_set_rate(clk, freq); 659 if (ret) { 660 dev_err(dev, "%s: failed to set clock rate: %d\n", __func__, 661 ret); 662 } 663 664 return ret; 665 } 666 667 static int _generic_set_opp_regulator(struct opp_table *opp_table, 668 struct device *dev, 669 unsigned long old_freq, 670 unsigned long freq, 671 struct dev_pm_opp_supply *old_supply, 672 struct dev_pm_opp_supply *new_supply) 673 { 674 struct regulator *reg = opp_table->regulators[0]; 675 int ret; 676 677 /* This function only supports single regulator per device */ 678 if (WARN_ON(opp_table->regulator_count > 1)) { 679 dev_err(dev, "multiple regulators are not supported\n"); 680 return -EINVAL; 681 } 682 683 /* Scaling up? Scale voltage before frequency */ 684 if (freq >= old_freq) { 685 ret = _set_opp_voltage(dev, reg, new_supply); 686 if (ret) 687 goto restore_voltage; 688 } 689 690 /* Change frequency */ 691 ret = _generic_set_opp_clk_only(dev, opp_table->clk, freq); 692 if (ret) 693 goto restore_voltage; 694 695 /* Scaling down? Scale voltage after frequency */ 696 if (freq < old_freq) { 697 ret = _set_opp_voltage(dev, reg, new_supply); 698 if (ret) 699 goto restore_freq; 700 } 701 702 /* 703 * Enable the regulator after setting its voltages, otherwise it breaks 704 * some boot-enabled regulators. 705 */ 706 if (unlikely(!opp_table->regulator_enabled)) { 707 ret = regulator_enable(reg); 708 if (ret < 0) 709 dev_warn(dev, "Failed to enable regulator: %d", ret); 710 else 711 opp_table->regulator_enabled = true; 712 } 713 714 return 0; 715 716 restore_freq: 717 if (_generic_set_opp_clk_only(dev, opp_table->clk, old_freq)) 718 dev_err(dev, "%s: failed to restore old-freq (%lu Hz)\n", 719 __func__, old_freq); 720 restore_voltage: 721 /* This shouldn't harm even if the voltages weren't updated earlier */ 722 if (old_supply) 723 _set_opp_voltage(dev, reg, old_supply); 724 725 return ret; 726 } 727 728 static int _set_opp_bw(const struct opp_table *opp_table, 729 struct dev_pm_opp *opp, struct device *dev, bool remove) 730 { 731 u32 avg, peak; 732 int i, ret; 733 734 if (!opp_table->paths) 735 return 0; 736 737 for (i = 0; i < opp_table->path_count; i++) { 738 if (remove) { 739 avg = 0; 740 peak = 0; 741 } else { 742 avg = opp->bandwidth[i].avg; 743 peak = opp->bandwidth[i].peak; 744 } 745 ret = icc_set_bw(opp_table->paths[i], avg, peak); 746 if (ret) { 747 dev_err(dev, "Failed to %s bandwidth[%d]: %d\n", 748 remove ? "remove" : "set", i, ret); 749 return ret; 750 } 751 } 752 753 return 0; 754 } 755 756 static int _set_opp_custom(const struct opp_table *opp_table, 757 struct device *dev, unsigned long old_freq, 758 unsigned long freq, 759 struct dev_pm_opp_supply *old_supply, 760 struct dev_pm_opp_supply *new_supply) 761 { 762 struct dev_pm_set_opp_data *data; 763 int size; 764 765 data = opp_table->set_opp_data; 766 data->regulators = opp_table->regulators; 767 data->regulator_count = opp_table->regulator_count; 768 data->clk = opp_table->clk; 769 data->dev = dev; 770 771 data->old_opp.rate = old_freq; 772 size = sizeof(*old_supply) * opp_table->regulator_count; 773 if (!old_supply) 774 memset(data->old_opp.supplies, 0, size); 775 else 776 memcpy(data->old_opp.supplies, old_supply, size); 777 778 data->new_opp.rate = freq; 779 memcpy(data->new_opp.supplies, new_supply, size); 780 781 return opp_table->set_opp(data); 782 } 783 784 /* This is only called for PM domain for now */ 785 static int _set_required_opps(struct device *dev, 786 struct opp_table *opp_table, 787 struct dev_pm_opp *opp) 788 { 789 struct opp_table **required_opp_tables = opp_table->required_opp_tables; 790 struct device **genpd_virt_devs = opp_table->genpd_virt_devs; 791 unsigned int pstate; 792 int i, ret = 0; 793 794 if (!required_opp_tables) 795 return 0; 796 797 /* Single genpd case */ 798 if (!genpd_virt_devs) { 799 pstate = likely(opp) ? opp->required_opps[0]->pstate : 0; 800 ret = dev_pm_genpd_set_performance_state(dev, pstate); 801 if (ret) { 802 dev_err(dev, "Failed to set performance state of %s: %d (%d)\n", 803 dev_name(dev), pstate, ret); 804 } 805 return ret; 806 } 807 808 /* Multiple genpd case */ 809 810 /* 811 * Acquire genpd_virt_dev_lock to make sure we don't use a genpd_dev 812 * after it is freed from another thread. 813 */ 814 mutex_lock(&opp_table->genpd_virt_dev_lock); 815 816 for (i = 0; i < opp_table->required_opp_count; i++) { 817 pstate = likely(opp) ? opp->required_opps[i]->pstate : 0; 818 819 if (!genpd_virt_devs[i]) 820 continue; 821 822 ret = dev_pm_genpd_set_performance_state(genpd_virt_devs[i], pstate); 823 if (ret) { 824 dev_err(dev, "Failed to set performance rate of %s: %d (%d)\n", 825 dev_name(genpd_virt_devs[i]), pstate, ret); 826 break; 827 } 828 } 829 mutex_unlock(&opp_table->genpd_virt_dev_lock); 830 831 return ret; 832 } 833 834 /** 835 * dev_pm_opp_set_bw() - sets bandwidth levels corresponding to an opp 836 * @dev: device for which we do this operation 837 * @opp: opp based on which the bandwidth levels are to be configured 838 * 839 * This configures the bandwidth to the levels specified by the OPP. However 840 * if the OPP specified is NULL the bandwidth levels are cleared out. 841 * 842 * Return: 0 on success or a negative error value. 843 */ 844 int dev_pm_opp_set_bw(struct device *dev, struct dev_pm_opp *opp) 845 { 846 struct opp_table *opp_table; 847 int ret; 848 849 opp_table = _find_opp_table(dev); 850 if (IS_ERR(opp_table)) { 851 dev_err(dev, "%s: device opp table doesn't exist\n", __func__); 852 return PTR_ERR(opp_table); 853 } 854 855 if (opp) 856 ret = _set_opp_bw(opp_table, opp, dev, false); 857 else 858 ret = _set_opp_bw(opp_table, NULL, dev, true); 859 860 dev_pm_opp_put_opp_table(opp_table); 861 return ret; 862 } 863 EXPORT_SYMBOL_GPL(dev_pm_opp_set_bw); 864 865 /** 866 * dev_pm_opp_set_rate() - Configure new OPP based on frequency 867 * @dev: device for which we do this operation 868 * @target_freq: frequency to achieve 869 * 870 * This configures the power-supplies to the levels specified by the OPP 871 * corresponding to the target_freq, and programs the clock to a value <= 872 * target_freq, as rounded by clk_round_rate(). Device wanting to run at fmax 873 * provided by the opp, should have already rounded to the target OPP's 874 * frequency. 875 */ 876 int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 877 { 878 struct opp_table *opp_table; 879 unsigned long freq, old_freq, temp_freq; 880 struct dev_pm_opp *old_opp, *opp; 881 struct clk *clk; 882 int ret; 883 884 opp_table = _find_opp_table(dev); 885 if (IS_ERR(opp_table)) { 886 dev_err(dev, "%s: device opp doesn't exist\n", __func__); 887 return PTR_ERR(opp_table); 888 } 889 890 if (unlikely(!target_freq)) { 891 /* 892 * Some drivers need to support cases where some platforms may 893 * have OPP table for the device, while others don't and 894 * opp_set_rate() just needs to behave like clk_set_rate(). 895 */ 896 if (!_get_opp_count(opp_table)) { 897 ret = 0; 898 goto put_opp_table; 899 } 900 901 if (!opp_table->required_opp_tables && !opp_table->regulators && 902 !opp_table->paths) { 903 dev_err(dev, "target frequency can't be 0\n"); 904 ret = -EINVAL; 905 goto put_opp_table; 906 } 907 908 ret = _set_opp_bw(opp_table, NULL, dev, true); 909 if (ret) 910 goto put_opp_table; 911 912 if (opp_table->regulator_enabled) { 913 regulator_disable(opp_table->regulators[0]); 914 opp_table->regulator_enabled = false; 915 } 916 917 ret = _set_required_opps(dev, opp_table, NULL); 918 goto put_opp_table; 919 } 920 921 clk = opp_table->clk; 922 if (IS_ERR(clk)) { 923 dev_err(dev, "%s: No clock available for the device\n", 924 __func__); 925 ret = PTR_ERR(clk); 926 goto put_opp_table; 927 } 928 929 freq = clk_round_rate(clk, target_freq); 930 if ((long)freq <= 0) 931 freq = target_freq; 932 933 old_freq = clk_get_rate(clk); 934 935 /* Return early if nothing to do */ 936 if (old_freq == freq) { 937 if (!opp_table->required_opp_tables && !opp_table->regulators && 938 !opp_table->paths) { 939 dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", 940 __func__, freq); 941 ret = 0; 942 goto put_opp_table; 943 } 944 } 945 946 /* 947 * For IO devices which require an OPP on some platforms/SoCs 948 * while just needing to scale the clock on some others 949 * we look for empty OPP tables with just a clock handle and 950 * scale only the clk. This makes dev_pm_opp_set_rate() 951 * equivalent to a clk_set_rate() 952 */ 953 if (!_get_opp_count(opp_table)) { 954 ret = _generic_set_opp_clk_only(dev, clk, freq); 955 goto put_opp_table; 956 } 957 958 temp_freq = old_freq; 959 old_opp = _find_freq_ceil(opp_table, &temp_freq); 960 if (IS_ERR(old_opp)) { 961 dev_err(dev, "%s: failed to find current OPP for freq %lu (%ld)\n", 962 __func__, old_freq, PTR_ERR(old_opp)); 963 } 964 965 temp_freq = freq; 966 opp = _find_freq_ceil(opp_table, &temp_freq); 967 if (IS_ERR(opp)) { 968 ret = PTR_ERR(opp); 969 dev_err(dev, "%s: failed to find OPP for freq %lu (%d)\n", 970 __func__, freq, ret); 971 goto put_old_opp; 972 } 973 974 dev_dbg(dev, "%s: switching OPP: %lu Hz --> %lu Hz\n", __func__, 975 old_freq, freq); 976 977 /* Scaling up? Configure required OPPs before frequency */ 978 if (freq >= old_freq) { 979 ret = _set_required_opps(dev, opp_table, opp); 980 if (ret) 981 goto put_opp; 982 } 983 984 if (opp_table->set_opp) { 985 ret = _set_opp_custom(opp_table, dev, old_freq, freq, 986 IS_ERR(old_opp) ? NULL : old_opp->supplies, 987 opp->supplies); 988 } else if (opp_table->regulators) { 989 ret = _generic_set_opp_regulator(opp_table, dev, old_freq, freq, 990 IS_ERR(old_opp) ? NULL : old_opp->supplies, 991 opp->supplies); 992 } else { 993 /* Only frequency scaling */ 994 ret = _generic_set_opp_clk_only(dev, clk, freq); 995 } 996 997 /* Scaling down? Configure required OPPs after frequency */ 998 if (!ret && freq < old_freq) { 999 ret = _set_required_opps(dev, opp_table, opp); 1000 if (ret) 1001 dev_err(dev, "Failed to set required opps: %d\n", ret); 1002 } 1003 1004 if (!ret) 1005 ret = _set_opp_bw(opp_table, opp, dev, false); 1006 1007 put_opp: 1008 dev_pm_opp_put(opp); 1009 put_old_opp: 1010 if (!IS_ERR(old_opp)) 1011 dev_pm_opp_put(old_opp); 1012 put_opp_table: 1013 dev_pm_opp_put_opp_table(opp_table); 1014 return ret; 1015 } 1016 EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate); 1017 1018 /* OPP-dev Helpers */ 1019 static void _remove_opp_dev(struct opp_device *opp_dev, 1020 struct opp_table *opp_table) 1021 { 1022 opp_debug_unregister(opp_dev, opp_table); 1023 list_del(&opp_dev->node); 1024 kfree(opp_dev); 1025 } 1026 1027 static struct opp_device *_add_opp_dev_unlocked(const struct device *dev, 1028 struct opp_table *opp_table) 1029 { 1030 struct opp_device *opp_dev; 1031 1032 opp_dev = kzalloc(sizeof(*opp_dev), GFP_KERNEL); 1033 if (!opp_dev) 1034 return NULL; 1035 1036 /* Initialize opp-dev */ 1037 opp_dev->dev = dev; 1038 1039 list_add(&opp_dev->node, &opp_table->dev_list); 1040 1041 /* Create debugfs entries for the opp_table */ 1042 opp_debug_register(opp_dev, opp_table); 1043 1044 return opp_dev; 1045 } 1046 1047 struct opp_device *_add_opp_dev(const struct device *dev, 1048 struct opp_table *opp_table) 1049 { 1050 struct opp_device *opp_dev; 1051 1052 mutex_lock(&opp_table->lock); 1053 opp_dev = _add_opp_dev_unlocked(dev, opp_table); 1054 mutex_unlock(&opp_table->lock); 1055 1056 return opp_dev; 1057 } 1058 1059 static struct opp_table *_allocate_opp_table(struct device *dev, int index) 1060 { 1061 struct opp_table *opp_table; 1062 struct opp_device *opp_dev; 1063 int ret; 1064 1065 /* 1066 * Allocate a new OPP table. In the infrequent case where a new 1067 * device is needed to be added, we pay this penalty. 1068 */ 1069 opp_table = kzalloc(sizeof(*opp_table), GFP_KERNEL); 1070 if (!opp_table) 1071 return NULL; 1072 1073 mutex_init(&opp_table->lock); 1074 mutex_init(&opp_table->genpd_virt_dev_lock); 1075 INIT_LIST_HEAD(&opp_table->dev_list); 1076 1077 /* Mark regulator count uninitialized */ 1078 opp_table->regulator_count = -1; 1079 1080 opp_dev = _add_opp_dev(dev, opp_table); 1081 if (!opp_dev) { 1082 kfree(opp_table); 1083 return NULL; 1084 } 1085 1086 _of_init_opp_table(opp_table, dev, index); 1087 1088 /* Find clk for the device */ 1089 opp_table->clk = clk_get(dev, NULL); 1090 if (IS_ERR(opp_table->clk)) { 1091 ret = PTR_ERR(opp_table->clk); 1092 if (ret != -EPROBE_DEFER) 1093 dev_dbg(dev, "%s: Couldn't find clock: %d\n", __func__, 1094 ret); 1095 } 1096 1097 /* Find interconnect path(s) for the device */ 1098 ret = dev_pm_opp_of_find_icc_paths(dev, opp_table); 1099 if (ret) 1100 dev_warn(dev, "%s: Error finding interconnect paths: %d\n", 1101 __func__, ret); 1102 1103 BLOCKING_INIT_NOTIFIER_HEAD(&opp_table->head); 1104 INIT_LIST_HEAD(&opp_table->opp_list); 1105 kref_init(&opp_table->kref); 1106 1107 /* Secure the device table modification */ 1108 list_add(&opp_table->node, &opp_tables); 1109 return opp_table; 1110 } 1111 1112 void _get_opp_table_kref(struct opp_table *opp_table) 1113 { 1114 kref_get(&opp_table->kref); 1115 } 1116 1117 static struct opp_table *_opp_get_opp_table(struct device *dev, int index) 1118 { 1119 struct opp_table *opp_table; 1120 1121 /* Hold our table modification lock here */ 1122 mutex_lock(&opp_table_lock); 1123 1124 opp_table = _find_opp_table_unlocked(dev); 1125 if (!IS_ERR(opp_table)) 1126 goto unlock; 1127 1128 opp_table = _managed_opp(dev, index); 1129 if (opp_table) { 1130 if (!_add_opp_dev_unlocked(dev, opp_table)) { 1131 dev_pm_opp_put_opp_table(opp_table); 1132 opp_table = NULL; 1133 } 1134 goto unlock; 1135 } 1136 1137 opp_table = _allocate_opp_table(dev, index); 1138 1139 unlock: 1140 mutex_unlock(&opp_table_lock); 1141 1142 return opp_table; 1143 } 1144 1145 struct opp_table *dev_pm_opp_get_opp_table(struct device *dev) 1146 { 1147 return _opp_get_opp_table(dev, 0); 1148 } 1149 EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_table); 1150 1151 struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, 1152 int index) 1153 { 1154 return _opp_get_opp_table(dev, index); 1155 } 1156 1157 static void _opp_table_kref_release(struct kref *kref) 1158 { 1159 struct opp_table *opp_table = container_of(kref, struct opp_table, kref); 1160 struct opp_device *opp_dev, *temp; 1161 int i; 1162 1163 _of_clear_opp_table(opp_table); 1164 1165 /* Release clk */ 1166 if (!IS_ERR(opp_table->clk)) 1167 clk_put(opp_table->clk); 1168 1169 if (opp_table->paths) { 1170 for (i = 0; i < opp_table->path_count; i++) 1171 icc_put(opp_table->paths[i]); 1172 kfree(opp_table->paths); 1173 } 1174 1175 WARN_ON(!list_empty(&opp_table->opp_list)); 1176 1177 list_for_each_entry_safe(opp_dev, temp, &opp_table->dev_list, node) { 1178 /* 1179 * The OPP table is getting removed, drop the performance state 1180 * constraints. 1181 */ 1182 if (opp_table->genpd_performance_state) 1183 dev_pm_genpd_set_performance_state((struct device *)(opp_dev->dev), 0); 1184 1185 _remove_opp_dev(opp_dev, opp_table); 1186 } 1187 1188 mutex_destroy(&opp_table->genpd_virt_dev_lock); 1189 mutex_destroy(&opp_table->lock); 1190 list_del(&opp_table->node); 1191 kfree(opp_table); 1192 1193 mutex_unlock(&opp_table_lock); 1194 } 1195 1196 void dev_pm_opp_put_opp_table(struct opp_table *opp_table) 1197 { 1198 kref_put_mutex(&opp_table->kref, _opp_table_kref_release, 1199 &opp_table_lock); 1200 } 1201 EXPORT_SYMBOL_GPL(dev_pm_opp_put_opp_table); 1202 1203 void _opp_free(struct dev_pm_opp *opp) 1204 { 1205 kfree(opp); 1206 } 1207 1208 static void _opp_kref_release(struct dev_pm_opp *opp, 1209 struct opp_table *opp_table) 1210 { 1211 /* 1212 * Notify the changes in the availability of the operable 1213 * frequency/voltage list. 1214 */ 1215 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_REMOVE, opp); 1216 _of_opp_free_required_opps(opp_table, opp); 1217 opp_debug_remove_one(opp); 1218 list_del(&opp->node); 1219 kfree(opp); 1220 } 1221 1222 static void _opp_kref_release_unlocked(struct kref *kref) 1223 { 1224 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); 1225 struct opp_table *opp_table = opp->opp_table; 1226 1227 _opp_kref_release(opp, opp_table); 1228 } 1229 1230 static void _opp_kref_release_locked(struct kref *kref) 1231 { 1232 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); 1233 struct opp_table *opp_table = opp->opp_table; 1234 1235 _opp_kref_release(opp, opp_table); 1236 mutex_unlock(&opp_table->lock); 1237 } 1238 1239 void dev_pm_opp_get(struct dev_pm_opp *opp) 1240 { 1241 kref_get(&opp->kref); 1242 } 1243 1244 void dev_pm_opp_put(struct dev_pm_opp *opp) 1245 { 1246 kref_put_mutex(&opp->kref, _opp_kref_release_locked, 1247 &opp->opp_table->lock); 1248 } 1249 EXPORT_SYMBOL_GPL(dev_pm_opp_put); 1250 1251 static void dev_pm_opp_put_unlocked(struct dev_pm_opp *opp) 1252 { 1253 kref_put(&opp->kref, _opp_kref_release_unlocked); 1254 } 1255 1256 /** 1257 * dev_pm_opp_remove() - Remove an OPP from OPP table 1258 * @dev: device for which we do this operation 1259 * @freq: OPP to remove with matching 'freq' 1260 * 1261 * This function removes an opp from the opp table. 1262 */ 1263 void dev_pm_opp_remove(struct device *dev, unsigned long freq) 1264 { 1265 struct dev_pm_opp *opp; 1266 struct opp_table *opp_table; 1267 bool found = false; 1268 1269 opp_table = _find_opp_table(dev); 1270 if (IS_ERR(opp_table)) 1271 return; 1272 1273 mutex_lock(&opp_table->lock); 1274 1275 list_for_each_entry(opp, &opp_table->opp_list, node) { 1276 if (opp->rate == freq) { 1277 found = true; 1278 break; 1279 } 1280 } 1281 1282 mutex_unlock(&opp_table->lock); 1283 1284 if (found) { 1285 dev_pm_opp_put(opp); 1286 1287 /* Drop the reference taken by dev_pm_opp_add() */ 1288 dev_pm_opp_put_opp_table(opp_table); 1289 } else { 1290 dev_warn(dev, "%s: Couldn't find OPP with freq: %lu\n", 1291 __func__, freq); 1292 } 1293 1294 /* Drop the reference taken by _find_opp_table() */ 1295 dev_pm_opp_put_opp_table(opp_table); 1296 } 1297 EXPORT_SYMBOL_GPL(dev_pm_opp_remove); 1298 1299 void _opp_remove_all_static(struct opp_table *opp_table) 1300 { 1301 struct dev_pm_opp *opp, *tmp; 1302 1303 mutex_lock(&opp_table->lock); 1304 1305 if (!opp_table->parsed_static_opps || --opp_table->parsed_static_opps) 1306 goto unlock; 1307 1308 list_for_each_entry_safe(opp, tmp, &opp_table->opp_list, node) { 1309 if (!opp->dynamic) 1310 dev_pm_opp_put_unlocked(opp); 1311 } 1312 1313 unlock: 1314 mutex_unlock(&opp_table->lock); 1315 } 1316 1317 /** 1318 * dev_pm_opp_remove_all_dynamic() - Remove all dynamically created OPPs 1319 * @dev: device for which we do this operation 1320 * 1321 * This function removes all dynamically created OPPs from the opp table. 1322 */ 1323 void dev_pm_opp_remove_all_dynamic(struct device *dev) 1324 { 1325 struct opp_table *opp_table; 1326 struct dev_pm_opp *opp, *temp; 1327 int count = 0; 1328 1329 opp_table = _find_opp_table(dev); 1330 if (IS_ERR(opp_table)) 1331 return; 1332 1333 mutex_lock(&opp_table->lock); 1334 list_for_each_entry_safe(opp, temp, &opp_table->opp_list, node) { 1335 if (opp->dynamic) { 1336 dev_pm_opp_put_unlocked(opp); 1337 count++; 1338 } 1339 } 1340 mutex_unlock(&opp_table->lock); 1341 1342 /* Drop the references taken by dev_pm_opp_add() */ 1343 while (count--) 1344 dev_pm_opp_put_opp_table(opp_table); 1345 1346 /* Drop the reference taken by _find_opp_table() */ 1347 dev_pm_opp_put_opp_table(opp_table); 1348 } 1349 EXPORT_SYMBOL_GPL(dev_pm_opp_remove_all_dynamic); 1350 1351 struct dev_pm_opp *_opp_allocate(struct opp_table *table) 1352 { 1353 struct dev_pm_opp *opp; 1354 int supply_count, supply_size, icc_size; 1355 1356 /* Allocate space for at least one supply */ 1357 supply_count = table->regulator_count > 0 ? table->regulator_count : 1; 1358 supply_size = sizeof(*opp->supplies) * supply_count; 1359 icc_size = sizeof(*opp->bandwidth) * table->path_count; 1360 1361 /* allocate new OPP node and supplies structures */ 1362 opp = kzalloc(sizeof(*opp) + supply_size + icc_size, GFP_KERNEL); 1363 1364 if (!opp) 1365 return NULL; 1366 1367 /* Put the supplies at the end of the OPP structure as an empty array */ 1368 opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); 1369 if (icc_size) 1370 opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->supplies + supply_count); 1371 INIT_LIST_HEAD(&opp->node); 1372 1373 return opp; 1374 } 1375 1376 static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, 1377 struct opp_table *opp_table) 1378 { 1379 struct regulator *reg; 1380 int i; 1381 1382 if (!opp_table->regulators) 1383 return true; 1384 1385 for (i = 0; i < opp_table->regulator_count; i++) { 1386 reg = opp_table->regulators[i]; 1387 1388 if (!regulator_is_supported_voltage(reg, 1389 opp->supplies[i].u_volt_min, 1390 opp->supplies[i].u_volt_max)) { 1391 pr_warn("%s: OPP minuV: %lu maxuV: %lu, not supported by regulator\n", 1392 __func__, opp->supplies[i].u_volt_min, 1393 opp->supplies[i].u_volt_max); 1394 return false; 1395 } 1396 } 1397 1398 return true; 1399 } 1400 1401 int _opp_compare_key(struct dev_pm_opp *opp1, struct dev_pm_opp *opp2) 1402 { 1403 if (opp1->rate != opp2->rate) 1404 return opp1->rate < opp2->rate ? -1 : 1; 1405 if (opp1->bandwidth && opp2->bandwidth && 1406 opp1->bandwidth[0].peak != opp2->bandwidth[0].peak) 1407 return opp1->bandwidth[0].peak < opp2->bandwidth[0].peak ? -1 : 1; 1408 if (opp1->level != opp2->level) 1409 return opp1->level < opp2->level ? -1 : 1; 1410 return 0; 1411 } 1412 1413 static int _opp_is_duplicate(struct device *dev, struct dev_pm_opp *new_opp, 1414 struct opp_table *opp_table, 1415 struct list_head **head) 1416 { 1417 struct dev_pm_opp *opp; 1418 int opp_cmp; 1419 1420 /* 1421 * Insert new OPP in order of increasing frequency and discard if 1422 * already present. 1423 * 1424 * Need to use &opp_table->opp_list in the condition part of the 'for' 1425 * loop, don't replace it with head otherwise it will become an infinite 1426 * loop. 1427 */ 1428 list_for_each_entry(opp, &opp_table->opp_list, node) { 1429 opp_cmp = _opp_compare_key(new_opp, opp); 1430 if (opp_cmp > 0) { 1431 *head = &opp->node; 1432 continue; 1433 } 1434 1435 if (opp_cmp < 0) 1436 return 0; 1437 1438 /* Duplicate OPPs */ 1439 dev_warn(dev, "%s: duplicate OPPs detected. Existing: freq: %lu, volt: %lu, enabled: %d. New: freq: %lu, volt: %lu, enabled: %d\n", 1440 __func__, opp->rate, opp->supplies[0].u_volt, 1441 opp->available, new_opp->rate, 1442 new_opp->supplies[0].u_volt, new_opp->available); 1443 1444 /* Should we compare voltages for all regulators here ? */ 1445 return opp->available && 1446 new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST; 1447 } 1448 1449 return 0; 1450 } 1451 1452 /* 1453 * Returns: 1454 * 0: On success. And appropriate error message for duplicate OPPs. 1455 * -EBUSY: For OPP with same freq/volt and is available. The callers of 1456 * _opp_add() must return 0 if they receive -EBUSY from it. This is to make 1457 * sure we don't print error messages unnecessarily if different parts of 1458 * kernel try to initialize the OPP table. 1459 * -EEXIST: For OPP with same freq but different volt or is unavailable. This 1460 * should be considered an error by the callers of _opp_add(). 1461 */ 1462 int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, 1463 struct opp_table *opp_table, bool rate_not_available) 1464 { 1465 struct list_head *head; 1466 int ret; 1467 1468 mutex_lock(&opp_table->lock); 1469 head = &opp_table->opp_list; 1470 1471 if (likely(!rate_not_available)) { 1472 ret = _opp_is_duplicate(dev, new_opp, opp_table, &head); 1473 if (ret) { 1474 mutex_unlock(&opp_table->lock); 1475 return ret; 1476 } 1477 } 1478 1479 list_add(&new_opp->node, head); 1480 mutex_unlock(&opp_table->lock); 1481 1482 new_opp->opp_table = opp_table; 1483 kref_init(&new_opp->kref); 1484 1485 opp_debug_create_one(new_opp, opp_table); 1486 1487 if (!_opp_supported_by_regulators(new_opp, opp_table)) { 1488 new_opp->available = false; 1489 dev_warn(dev, "%s: OPP not supported by regulators (%lu)\n", 1490 __func__, new_opp->rate); 1491 } 1492 1493 return 0; 1494 } 1495 1496 /** 1497 * _opp_add_v1() - Allocate a OPP based on v1 bindings. 1498 * @opp_table: OPP table 1499 * @dev: device for which we do this operation 1500 * @freq: Frequency in Hz for this OPP 1501 * @u_volt: Voltage in uVolts for this OPP 1502 * @dynamic: Dynamically added OPPs. 1503 * 1504 * This function adds an opp definition to the opp table and returns status. 1505 * The opp is made available by default and it can be controlled using 1506 * dev_pm_opp_enable/disable functions and may be removed by dev_pm_opp_remove. 1507 * 1508 * NOTE: "dynamic" parameter impacts OPPs added by the dev_pm_opp_of_add_table 1509 * and freed by dev_pm_opp_of_remove_table. 1510 * 1511 * Return: 1512 * 0 On success OR 1513 * Duplicate OPPs (both freq and volt are same) and opp->available 1514 * -EEXIST Freq are same and volt are different OR 1515 * Duplicate OPPs (both freq and volt are same) and !opp->available 1516 * -ENOMEM Memory allocation failure 1517 */ 1518 int _opp_add_v1(struct opp_table *opp_table, struct device *dev, 1519 unsigned long freq, long u_volt, bool dynamic) 1520 { 1521 struct dev_pm_opp *new_opp; 1522 unsigned long tol; 1523 int ret; 1524 1525 new_opp = _opp_allocate(opp_table); 1526 if (!new_opp) 1527 return -ENOMEM; 1528 1529 /* populate the opp table */ 1530 new_opp->rate = freq; 1531 tol = u_volt * opp_table->voltage_tolerance_v1 / 100; 1532 new_opp->supplies[0].u_volt = u_volt; 1533 new_opp->supplies[0].u_volt_min = u_volt - tol; 1534 new_opp->supplies[0].u_volt_max = u_volt + tol; 1535 new_opp->available = true; 1536 new_opp->dynamic = dynamic; 1537 1538 ret = _opp_add(dev, new_opp, opp_table, false); 1539 if (ret) { 1540 /* Don't return error for duplicate OPPs */ 1541 if (ret == -EBUSY) 1542 ret = 0; 1543 goto free_opp; 1544 } 1545 1546 /* 1547 * Notify the changes in the availability of the operable 1548 * frequency/voltage list. 1549 */ 1550 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ADD, new_opp); 1551 return 0; 1552 1553 free_opp: 1554 _opp_free(new_opp); 1555 1556 return ret; 1557 } 1558 1559 /** 1560 * dev_pm_opp_set_supported_hw() - Set supported platforms 1561 * @dev: Device for which supported-hw has to be set. 1562 * @versions: Array of hierarchy of versions to match. 1563 * @count: Number of elements in the array. 1564 * 1565 * This is required only for the V2 bindings, and it enables a platform to 1566 * specify the hierarchy of versions it supports. OPP layer will then enable 1567 * OPPs, which are available for those versions, based on its 'opp-supported-hw' 1568 * property. 1569 */ 1570 struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, 1571 const u32 *versions, unsigned int count) 1572 { 1573 struct opp_table *opp_table; 1574 1575 opp_table = dev_pm_opp_get_opp_table(dev); 1576 if (!opp_table) 1577 return ERR_PTR(-ENOMEM); 1578 1579 /* Make sure there are no concurrent readers while updating opp_table */ 1580 WARN_ON(!list_empty(&opp_table->opp_list)); 1581 1582 /* Another CPU that shares the OPP table has set the property ? */ 1583 if (opp_table->supported_hw) 1584 return opp_table; 1585 1586 opp_table->supported_hw = kmemdup(versions, count * sizeof(*versions), 1587 GFP_KERNEL); 1588 if (!opp_table->supported_hw) { 1589 dev_pm_opp_put_opp_table(opp_table); 1590 return ERR_PTR(-ENOMEM); 1591 } 1592 1593 opp_table->supported_hw_count = count; 1594 1595 return opp_table; 1596 } 1597 EXPORT_SYMBOL_GPL(dev_pm_opp_set_supported_hw); 1598 1599 /** 1600 * dev_pm_opp_put_supported_hw() - Releases resources blocked for supported hw 1601 * @opp_table: OPP table returned by dev_pm_opp_set_supported_hw(). 1602 * 1603 * This is required only for the V2 bindings, and is called for a matching 1604 * dev_pm_opp_set_supported_hw(). Until this is called, the opp_table structure 1605 * will not be freed. 1606 */ 1607 void dev_pm_opp_put_supported_hw(struct opp_table *opp_table) 1608 { 1609 /* Make sure there are no concurrent readers while updating opp_table */ 1610 WARN_ON(!list_empty(&opp_table->opp_list)); 1611 1612 kfree(opp_table->supported_hw); 1613 opp_table->supported_hw = NULL; 1614 opp_table->supported_hw_count = 0; 1615 1616 dev_pm_opp_put_opp_table(opp_table); 1617 } 1618 EXPORT_SYMBOL_GPL(dev_pm_opp_put_supported_hw); 1619 1620 /** 1621 * dev_pm_opp_set_prop_name() - Set prop-extn name 1622 * @dev: Device for which the prop-name has to be set. 1623 * @name: name to postfix to properties. 1624 * 1625 * This is required only for the V2 bindings, and it enables a platform to 1626 * specify the extn to be used for certain property names. The properties to 1627 * which the extension will apply are opp-microvolt and opp-microamp. OPP core 1628 * should postfix the property name with -<name> while looking for them. 1629 */ 1630 struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name) 1631 { 1632 struct opp_table *opp_table; 1633 1634 opp_table = dev_pm_opp_get_opp_table(dev); 1635 if (!opp_table) 1636 return ERR_PTR(-ENOMEM); 1637 1638 /* Make sure there are no concurrent readers while updating opp_table */ 1639 WARN_ON(!list_empty(&opp_table->opp_list)); 1640 1641 /* Another CPU that shares the OPP table has set the property ? */ 1642 if (opp_table->prop_name) 1643 return opp_table; 1644 1645 opp_table->prop_name = kstrdup(name, GFP_KERNEL); 1646 if (!opp_table->prop_name) { 1647 dev_pm_opp_put_opp_table(opp_table); 1648 return ERR_PTR(-ENOMEM); 1649 } 1650 1651 return opp_table; 1652 } 1653 EXPORT_SYMBOL_GPL(dev_pm_opp_set_prop_name); 1654 1655 /** 1656 * dev_pm_opp_put_prop_name() - Releases resources blocked for prop-name 1657 * @opp_table: OPP table returned by dev_pm_opp_set_prop_name(). 1658 * 1659 * This is required only for the V2 bindings, and is called for a matching 1660 * dev_pm_opp_set_prop_name(). Until this is called, the opp_table structure 1661 * will not be freed. 1662 */ 1663 void dev_pm_opp_put_prop_name(struct opp_table *opp_table) 1664 { 1665 /* Make sure there are no concurrent readers while updating opp_table */ 1666 WARN_ON(!list_empty(&opp_table->opp_list)); 1667 1668 kfree(opp_table->prop_name); 1669 opp_table->prop_name = NULL; 1670 1671 dev_pm_opp_put_opp_table(opp_table); 1672 } 1673 EXPORT_SYMBOL_GPL(dev_pm_opp_put_prop_name); 1674 1675 static int _allocate_set_opp_data(struct opp_table *opp_table) 1676 { 1677 struct dev_pm_set_opp_data *data; 1678 int len, count = opp_table->regulator_count; 1679 1680 if (WARN_ON(!opp_table->regulators)) 1681 return -EINVAL; 1682 1683 /* space for set_opp_data */ 1684 len = sizeof(*data); 1685 1686 /* space for old_opp.supplies and new_opp.supplies */ 1687 len += 2 * sizeof(struct dev_pm_opp_supply) * count; 1688 1689 data = kzalloc(len, GFP_KERNEL); 1690 if (!data) 1691 return -ENOMEM; 1692 1693 data->old_opp.supplies = (void *)(data + 1); 1694 data->new_opp.supplies = data->old_opp.supplies + count; 1695 1696 opp_table->set_opp_data = data; 1697 1698 return 0; 1699 } 1700 1701 static void _free_set_opp_data(struct opp_table *opp_table) 1702 { 1703 kfree(opp_table->set_opp_data); 1704 opp_table->set_opp_data = NULL; 1705 } 1706 1707 /** 1708 * dev_pm_opp_set_regulators() - Set regulator names for the device 1709 * @dev: Device for which regulator name is being set. 1710 * @names: Array of pointers to the names of the regulator. 1711 * @count: Number of regulators. 1712 * 1713 * In order to support OPP switching, OPP layer needs to know the name of the 1714 * device's regulators, as the core would be required to switch voltages as 1715 * well. 1716 * 1717 * This must be called before any OPPs are initialized for the device. 1718 */ 1719 struct opp_table *dev_pm_opp_set_regulators(struct device *dev, 1720 const char * const names[], 1721 unsigned int count) 1722 { 1723 struct opp_table *opp_table; 1724 struct regulator *reg; 1725 int ret, i; 1726 1727 opp_table = dev_pm_opp_get_opp_table(dev); 1728 if (!opp_table) 1729 return ERR_PTR(-ENOMEM); 1730 1731 /* This should be called before OPPs are initialized */ 1732 if (WARN_ON(!list_empty(&opp_table->opp_list))) { 1733 ret = -EBUSY; 1734 goto err; 1735 } 1736 1737 /* Another CPU that shares the OPP table has set the regulators ? */ 1738 if (opp_table->regulators) 1739 return opp_table; 1740 1741 opp_table->regulators = kmalloc_array(count, 1742 sizeof(*opp_table->regulators), 1743 GFP_KERNEL); 1744 if (!opp_table->regulators) { 1745 ret = -ENOMEM; 1746 goto err; 1747 } 1748 1749 for (i = 0; i < count; i++) { 1750 reg = regulator_get_optional(dev, names[i]); 1751 if (IS_ERR(reg)) { 1752 ret = PTR_ERR(reg); 1753 if (ret != -EPROBE_DEFER) 1754 dev_err(dev, "%s: no regulator (%s) found: %d\n", 1755 __func__, names[i], ret); 1756 goto free_regulators; 1757 } 1758 1759 opp_table->regulators[i] = reg; 1760 } 1761 1762 opp_table->regulator_count = count; 1763 1764 /* Allocate block only once to pass to set_opp() routines */ 1765 ret = _allocate_set_opp_data(opp_table); 1766 if (ret) 1767 goto free_regulators; 1768 1769 return opp_table; 1770 1771 free_regulators: 1772 while (i != 0) 1773 regulator_put(opp_table->regulators[--i]); 1774 1775 kfree(opp_table->regulators); 1776 opp_table->regulators = NULL; 1777 opp_table->regulator_count = -1; 1778 err: 1779 dev_pm_opp_put_opp_table(opp_table); 1780 1781 return ERR_PTR(ret); 1782 } 1783 EXPORT_SYMBOL_GPL(dev_pm_opp_set_regulators); 1784 1785 /** 1786 * dev_pm_opp_put_regulators() - Releases resources blocked for regulator 1787 * @opp_table: OPP table returned from dev_pm_opp_set_regulators(). 1788 */ 1789 void dev_pm_opp_put_regulators(struct opp_table *opp_table) 1790 { 1791 int i; 1792 1793 if (!opp_table->regulators) 1794 goto put_opp_table; 1795 1796 /* Make sure there are no concurrent readers while updating opp_table */ 1797 WARN_ON(!list_empty(&opp_table->opp_list)); 1798 1799 if (opp_table->regulator_enabled) { 1800 for (i = opp_table->regulator_count - 1; i >= 0; i--) 1801 regulator_disable(opp_table->regulators[i]); 1802 1803 opp_table->regulator_enabled = false; 1804 } 1805 1806 for (i = opp_table->regulator_count - 1; i >= 0; i--) 1807 regulator_put(opp_table->regulators[i]); 1808 1809 _free_set_opp_data(opp_table); 1810 1811 kfree(opp_table->regulators); 1812 opp_table->regulators = NULL; 1813 opp_table->regulator_count = -1; 1814 1815 put_opp_table: 1816 dev_pm_opp_put_opp_table(opp_table); 1817 } 1818 EXPORT_SYMBOL_GPL(dev_pm_opp_put_regulators); 1819 1820 /** 1821 * dev_pm_opp_set_clkname() - Set clk name for the device 1822 * @dev: Device for which clk name is being set. 1823 * @name: Clk name. 1824 * 1825 * In order to support OPP switching, OPP layer needs to get pointer to the 1826 * clock for the device. Simple cases work fine without using this routine (i.e. 1827 * by passing connection-id as NULL), but for a device with multiple clocks 1828 * available, the OPP core needs to know the exact name of the clk to use. 1829 * 1830 * This must be called before any OPPs are initialized for the device. 1831 */ 1832 struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name) 1833 { 1834 struct opp_table *opp_table; 1835 int ret; 1836 1837 opp_table = dev_pm_opp_get_opp_table(dev); 1838 if (!opp_table) 1839 return ERR_PTR(-ENOMEM); 1840 1841 /* This should be called before OPPs are initialized */ 1842 if (WARN_ON(!list_empty(&opp_table->opp_list))) { 1843 ret = -EBUSY; 1844 goto err; 1845 } 1846 1847 /* Already have default clk set, free it */ 1848 if (!IS_ERR(opp_table->clk)) 1849 clk_put(opp_table->clk); 1850 1851 /* Find clk for the device */ 1852 opp_table->clk = clk_get(dev, name); 1853 if (IS_ERR(opp_table->clk)) { 1854 ret = PTR_ERR(opp_table->clk); 1855 if (ret != -EPROBE_DEFER) { 1856 dev_err(dev, "%s: Couldn't find clock: %d\n", __func__, 1857 ret); 1858 } 1859 goto err; 1860 } 1861 1862 return opp_table; 1863 1864 err: 1865 dev_pm_opp_put_opp_table(opp_table); 1866 1867 return ERR_PTR(ret); 1868 } 1869 EXPORT_SYMBOL_GPL(dev_pm_opp_set_clkname); 1870 1871 /** 1872 * dev_pm_opp_put_clkname() - Releases resources blocked for clk. 1873 * @opp_table: OPP table returned from dev_pm_opp_set_clkname(). 1874 */ 1875 void dev_pm_opp_put_clkname(struct opp_table *opp_table) 1876 { 1877 /* Make sure there are no concurrent readers while updating opp_table */ 1878 WARN_ON(!list_empty(&opp_table->opp_list)); 1879 1880 clk_put(opp_table->clk); 1881 opp_table->clk = ERR_PTR(-EINVAL); 1882 1883 dev_pm_opp_put_opp_table(opp_table); 1884 } 1885 EXPORT_SYMBOL_GPL(dev_pm_opp_put_clkname); 1886 1887 /** 1888 * dev_pm_opp_register_set_opp_helper() - Register custom set OPP helper 1889 * @dev: Device for which the helper is getting registered. 1890 * @set_opp: Custom set OPP helper. 1891 * 1892 * This is useful to support complex platforms (like platforms with multiple 1893 * regulators per device), instead of the generic OPP set rate helper. 1894 * 1895 * This must be called before any OPPs are initialized for the device. 1896 */ 1897 struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, 1898 int (*set_opp)(struct dev_pm_set_opp_data *data)) 1899 { 1900 struct opp_table *opp_table; 1901 1902 if (!set_opp) 1903 return ERR_PTR(-EINVAL); 1904 1905 opp_table = dev_pm_opp_get_opp_table(dev); 1906 if (!opp_table) 1907 return ERR_PTR(-ENOMEM); 1908 1909 /* This should be called before OPPs are initialized */ 1910 if (WARN_ON(!list_empty(&opp_table->opp_list))) { 1911 dev_pm_opp_put_opp_table(opp_table); 1912 return ERR_PTR(-EBUSY); 1913 } 1914 1915 /* Another CPU that shares the OPP table has set the helper ? */ 1916 if (!opp_table->set_opp) 1917 opp_table->set_opp = set_opp; 1918 1919 return opp_table; 1920 } 1921 EXPORT_SYMBOL_GPL(dev_pm_opp_register_set_opp_helper); 1922 1923 /** 1924 * dev_pm_opp_unregister_set_opp_helper() - Releases resources blocked for 1925 * set_opp helper 1926 * @opp_table: OPP table returned from dev_pm_opp_register_set_opp_helper(). 1927 * 1928 * Release resources blocked for platform specific set_opp helper. 1929 */ 1930 void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table) 1931 { 1932 /* Make sure there are no concurrent readers while updating opp_table */ 1933 WARN_ON(!list_empty(&opp_table->opp_list)); 1934 1935 opp_table->set_opp = NULL; 1936 dev_pm_opp_put_opp_table(opp_table); 1937 } 1938 EXPORT_SYMBOL_GPL(dev_pm_opp_unregister_set_opp_helper); 1939 1940 static void _opp_detach_genpd(struct opp_table *opp_table) 1941 { 1942 int index; 1943 1944 for (index = 0; index < opp_table->required_opp_count; index++) { 1945 if (!opp_table->genpd_virt_devs[index]) 1946 continue; 1947 1948 dev_pm_domain_detach(opp_table->genpd_virt_devs[index], false); 1949 opp_table->genpd_virt_devs[index] = NULL; 1950 } 1951 1952 kfree(opp_table->genpd_virt_devs); 1953 opp_table->genpd_virt_devs = NULL; 1954 } 1955 1956 /** 1957 * dev_pm_opp_attach_genpd - Attach genpd(s) for the device and save virtual device pointer 1958 * @dev: Consumer device for which the genpd is getting attached. 1959 * @names: Null terminated array of pointers containing names of genpd to attach. 1960 * @virt_devs: Pointer to return the array of virtual devices. 1961 * 1962 * Multiple generic power domains for a device are supported with the help of 1963 * virtual genpd devices, which are created for each consumer device - genpd 1964 * pair. These are the device structures which are attached to the power domain 1965 * and are required by the OPP core to set the performance state of the genpd. 1966 * The same API also works for the case where single genpd is available and so 1967 * we don't need to support that separately. 1968 * 1969 * This helper will normally be called by the consumer driver of the device 1970 * "dev", as only that has details of the genpd names. 1971 * 1972 * This helper needs to be called once with a list of all genpd to attach. 1973 * Otherwise the original device structure will be used instead by the OPP core. 1974 * 1975 * The order of entries in the names array must match the order in which 1976 * "required-opps" are added in DT. 1977 */ 1978 struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, 1979 const char **names, struct device ***virt_devs) 1980 { 1981 struct opp_table *opp_table; 1982 struct device *virt_dev; 1983 int index = 0, ret = -EINVAL; 1984 const char **name = names; 1985 1986 opp_table = dev_pm_opp_get_opp_table(dev); 1987 if (!opp_table) 1988 return ERR_PTR(-ENOMEM); 1989 1990 /* 1991 * If the genpd's OPP table isn't already initialized, parsing of the 1992 * required-opps fail for dev. We should retry this after genpd's OPP 1993 * table is added. 1994 */ 1995 if (!opp_table->required_opp_count) { 1996 ret = -EPROBE_DEFER; 1997 goto put_table; 1998 } 1999 2000 mutex_lock(&opp_table->genpd_virt_dev_lock); 2001 2002 opp_table->genpd_virt_devs = kcalloc(opp_table->required_opp_count, 2003 sizeof(*opp_table->genpd_virt_devs), 2004 GFP_KERNEL); 2005 if (!opp_table->genpd_virt_devs) 2006 goto unlock; 2007 2008 while (*name) { 2009 if (index >= opp_table->required_opp_count) { 2010 dev_err(dev, "Index can't be greater than required-opp-count - 1, %s (%d : %d)\n", 2011 *name, opp_table->required_opp_count, index); 2012 goto err; 2013 } 2014 2015 if (opp_table->genpd_virt_devs[index]) { 2016 dev_err(dev, "Genpd virtual device already set %s\n", 2017 *name); 2018 goto err; 2019 } 2020 2021 virt_dev = dev_pm_domain_attach_by_name(dev, *name); 2022 if (IS_ERR(virt_dev)) { 2023 ret = PTR_ERR(virt_dev); 2024 dev_err(dev, "Couldn't attach to pm_domain: %d\n", ret); 2025 goto err; 2026 } 2027 2028 opp_table->genpd_virt_devs[index] = virt_dev; 2029 index++; 2030 name++; 2031 } 2032 2033 if (virt_devs) 2034 *virt_devs = opp_table->genpd_virt_devs; 2035 mutex_unlock(&opp_table->genpd_virt_dev_lock); 2036 2037 return opp_table; 2038 2039 err: 2040 _opp_detach_genpd(opp_table); 2041 unlock: 2042 mutex_unlock(&opp_table->genpd_virt_dev_lock); 2043 2044 put_table: 2045 dev_pm_opp_put_opp_table(opp_table); 2046 2047 return ERR_PTR(ret); 2048 } 2049 EXPORT_SYMBOL_GPL(dev_pm_opp_attach_genpd); 2050 2051 /** 2052 * dev_pm_opp_detach_genpd() - Detach genpd(s) from the device. 2053 * @opp_table: OPP table returned by dev_pm_opp_attach_genpd(). 2054 * 2055 * This detaches the genpd(s), resets the virtual device pointers, and puts the 2056 * OPP table. 2057 */ 2058 void dev_pm_opp_detach_genpd(struct opp_table *opp_table) 2059 { 2060 /* 2061 * Acquire genpd_virt_dev_lock to make sure virt_dev isn't getting 2062 * used in parallel. 2063 */ 2064 mutex_lock(&opp_table->genpd_virt_dev_lock); 2065 _opp_detach_genpd(opp_table); 2066 mutex_unlock(&opp_table->genpd_virt_dev_lock); 2067 2068 dev_pm_opp_put_opp_table(opp_table); 2069 } 2070 EXPORT_SYMBOL_GPL(dev_pm_opp_detach_genpd); 2071 2072 /** 2073 * dev_pm_opp_xlate_performance_state() - Find required OPP's pstate for src_table. 2074 * @src_table: OPP table which has dst_table as one of its required OPP table. 2075 * @dst_table: Required OPP table of the src_table. 2076 * @pstate: Current performance state of the src_table. 2077 * 2078 * This Returns pstate of the OPP (present in @dst_table) pointed out by the 2079 * "required-opps" property of the OPP (present in @src_table) which has 2080 * performance state set to @pstate. 2081 * 2082 * Return: Zero or positive performance state on success, otherwise negative 2083 * value on errors. 2084 */ 2085 int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, 2086 struct opp_table *dst_table, 2087 unsigned int pstate) 2088 { 2089 struct dev_pm_opp *opp; 2090 int dest_pstate = -EINVAL; 2091 int i; 2092 2093 if (!pstate) 2094 return 0; 2095 2096 /* 2097 * Normally the src_table will have the "required_opps" property set to 2098 * point to one of the OPPs in the dst_table, but in some cases the 2099 * genpd and its master have one to one mapping of performance states 2100 * and so none of them have the "required-opps" property set. Return the 2101 * pstate of the src_table as it is in such cases. 2102 */ 2103 if (!src_table->required_opp_count) 2104 return pstate; 2105 2106 for (i = 0; i < src_table->required_opp_count; i++) { 2107 if (src_table->required_opp_tables[i]->np == dst_table->np) 2108 break; 2109 } 2110 2111 if (unlikely(i == src_table->required_opp_count)) { 2112 pr_err("%s: Couldn't find matching OPP table (%p: %p)\n", 2113 __func__, src_table, dst_table); 2114 return -EINVAL; 2115 } 2116 2117 mutex_lock(&src_table->lock); 2118 2119 list_for_each_entry(opp, &src_table->opp_list, node) { 2120 if (opp->pstate == pstate) { 2121 dest_pstate = opp->required_opps[i]->pstate; 2122 goto unlock; 2123 } 2124 } 2125 2126 pr_err("%s: Couldn't find matching OPP (%p: %p)\n", __func__, src_table, 2127 dst_table); 2128 2129 unlock: 2130 mutex_unlock(&src_table->lock); 2131 2132 return dest_pstate; 2133 } 2134 2135 /** 2136 * dev_pm_opp_add() - Add an OPP table from a table definitions 2137 * @dev: device for which we do this operation 2138 * @freq: Frequency in Hz for this OPP 2139 * @u_volt: Voltage in uVolts for this OPP 2140 * 2141 * This function adds an opp definition to the opp table and returns status. 2142 * The opp is made available by default and it can be controlled using 2143 * dev_pm_opp_enable/disable functions. 2144 * 2145 * Return: 2146 * 0 On success OR 2147 * Duplicate OPPs (both freq and volt are same) and opp->available 2148 * -EEXIST Freq are same and volt are different OR 2149 * Duplicate OPPs (both freq and volt are same) and !opp->available 2150 * -ENOMEM Memory allocation failure 2151 */ 2152 int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) 2153 { 2154 struct opp_table *opp_table; 2155 int ret; 2156 2157 opp_table = dev_pm_opp_get_opp_table(dev); 2158 if (!opp_table) 2159 return -ENOMEM; 2160 2161 /* Fix regulator count for dynamic OPPs */ 2162 opp_table->regulator_count = 1; 2163 2164 ret = _opp_add_v1(opp_table, dev, freq, u_volt, true); 2165 if (ret) 2166 dev_pm_opp_put_opp_table(opp_table); 2167 2168 return ret; 2169 } 2170 EXPORT_SYMBOL_GPL(dev_pm_opp_add); 2171 2172 /** 2173 * _opp_set_availability() - helper to set the availability of an opp 2174 * @dev: device for which we do this operation 2175 * @freq: OPP frequency to modify availability 2176 * @availability_req: availability status requested for this opp 2177 * 2178 * Set the availability of an OPP, opp_{enable,disable} share a common logic 2179 * which is isolated here. 2180 * 2181 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 2182 * copy operation, returns 0 if no modification was done OR modification was 2183 * successful. 2184 */ 2185 static int _opp_set_availability(struct device *dev, unsigned long freq, 2186 bool availability_req) 2187 { 2188 struct opp_table *opp_table; 2189 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); 2190 int r = 0; 2191 2192 /* Find the opp_table */ 2193 opp_table = _find_opp_table(dev); 2194 if (IS_ERR(opp_table)) { 2195 r = PTR_ERR(opp_table); 2196 dev_warn(dev, "%s: Device OPP not found (%d)\n", __func__, r); 2197 return r; 2198 } 2199 2200 mutex_lock(&opp_table->lock); 2201 2202 /* Do we have the frequency? */ 2203 list_for_each_entry(tmp_opp, &opp_table->opp_list, node) { 2204 if (tmp_opp->rate == freq) { 2205 opp = tmp_opp; 2206 break; 2207 } 2208 } 2209 2210 if (IS_ERR(opp)) { 2211 r = PTR_ERR(opp); 2212 goto unlock; 2213 } 2214 2215 /* Is update really needed? */ 2216 if (opp->available == availability_req) 2217 goto unlock; 2218 2219 opp->available = availability_req; 2220 2221 dev_pm_opp_get(opp); 2222 mutex_unlock(&opp_table->lock); 2223 2224 /* Notify the change of the OPP availability */ 2225 if (availability_req) 2226 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ENABLE, 2227 opp); 2228 else 2229 blocking_notifier_call_chain(&opp_table->head, 2230 OPP_EVENT_DISABLE, opp); 2231 2232 dev_pm_opp_put(opp); 2233 goto put_table; 2234 2235 unlock: 2236 mutex_unlock(&opp_table->lock); 2237 put_table: 2238 dev_pm_opp_put_opp_table(opp_table); 2239 return r; 2240 } 2241 2242 /** 2243 * dev_pm_opp_adjust_voltage() - helper to change the voltage of an OPP 2244 * @dev: device for which we do this operation 2245 * @freq: OPP frequency to adjust voltage of 2246 * @u_volt: new OPP target voltage 2247 * @u_volt_min: new OPP min voltage 2248 * @u_volt_max: new OPP max voltage 2249 * 2250 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 2251 * copy operation, returns 0 if no modifcation was done OR modification was 2252 * successful. 2253 */ 2254 int dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq, 2255 unsigned long u_volt, unsigned long u_volt_min, 2256 unsigned long u_volt_max) 2257 2258 { 2259 struct opp_table *opp_table; 2260 struct dev_pm_opp *tmp_opp, *opp = ERR_PTR(-ENODEV); 2261 int r = 0; 2262 2263 /* Find the opp_table */ 2264 opp_table = _find_opp_table(dev); 2265 if (IS_ERR(opp_table)) { 2266 r = PTR_ERR(opp_table); 2267 dev_warn(dev, "%s: Device OPP not found (%d)\n", __func__, r); 2268 return r; 2269 } 2270 2271 mutex_lock(&opp_table->lock); 2272 2273 /* Do we have the frequency? */ 2274 list_for_each_entry(tmp_opp, &opp_table->opp_list, node) { 2275 if (tmp_opp->rate == freq) { 2276 opp = tmp_opp; 2277 break; 2278 } 2279 } 2280 2281 if (IS_ERR(opp)) { 2282 r = PTR_ERR(opp); 2283 goto adjust_unlock; 2284 } 2285 2286 /* Is update really needed? */ 2287 if (opp->supplies->u_volt == u_volt) 2288 goto adjust_unlock; 2289 2290 opp->supplies->u_volt = u_volt; 2291 opp->supplies->u_volt_min = u_volt_min; 2292 opp->supplies->u_volt_max = u_volt_max; 2293 2294 dev_pm_opp_get(opp); 2295 mutex_unlock(&opp_table->lock); 2296 2297 /* Notify the voltage change of the OPP */ 2298 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ADJUST_VOLTAGE, 2299 opp); 2300 2301 dev_pm_opp_put(opp); 2302 goto adjust_put_table; 2303 2304 adjust_unlock: 2305 mutex_unlock(&opp_table->lock); 2306 adjust_put_table: 2307 dev_pm_opp_put_opp_table(opp_table); 2308 return r; 2309 } 2310 EXPORT_SYMBOL_GPL(dev_pm_opp_adjust_voltage); 2311 2312 /** 2313 * dev_pm_opp_enable() - Enable a specific OPP 2314 * @dev: device for which we do this operation 2315 * @freq: OPP frequency to enable 2316 * 2317 * Enables a provided opp. If the operation is valid, this returns 0, else the 2318 * corresponding error value. It is meant to be used for users an OPP available 2319 * after being temporarily made unavailable with dev_pm_opp_disable. 2320 * 2321 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 2322 * copy operation, returns 0 if no modification was done OR modification was 2323 * successful. 2324 */ 2325 int dev_pm_opp_enable(struct device *dev, unsigned long freq) 2326 { 2327 return _opp_set_availability(dev, freq, true); 2328 } 2329 EXPORT_SYMBOL_GPL(dev_pm_opp_enable); 2330 2331 /** 2332 * dev_pm_opp_disable() - Disable a specific OPP 2333 * @dev: device for which we do this operation 2334 * @freq: OPP frequency to disable 2335 * 2336 * Disables a provided opp. If the operation is valid, this returns 2337 * 0, else the corresponding error value. It is meant to be a temporary 2338 * control by users to make this OPP not available until the circumstances are 2339 * right to make it available again (with a call to dev_pm_opp_enable). 2340 * 2341 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 2342 * copy operation, returns 0 if no modification was done OR modification was 2343 * successful. 2344 */ 2345 int dev_pm_opp_disable(struct device *dev, unsigned long freq) 2346 { 2347 return _opp_set_availability(dev, freq, false); 2348 } 2349 EXPORT_SYMBOL_GPL(dev_pm_opp_disable); 2350 2351 /** 2352 * dev_pm_opp_register_notifier() - Register OPP notifier for the device 2353 * @dev: Device for which notifier needs to be registered 2354 * @nb: Notifier block to be registered 2355 * 2356 * Return: 0 on success or a negative error value. 2357 */ 2358 int dev_pm_opp_register_notifier(struct device *dev, struct notifier_block *nb) 2359 { 2360 struct opp_table *opp_table; 2361 int ret; 2362 2363 opp_table = _find_opp_table(dev); 2364 if (IS_ERR(opp_table)) 2365 return PTR_ERR(opp_table); 2366 2367 ret = blocking_notifier_chain_register(&opp_table->head, nb); 2368 2369 dev_pm_opp_put_opp_table(opp_table); 2370 2371 return ret; 2372 } 2373 EXPORT_SYMBOL(dev_pm_opp_register_notifier); 2374 2375 /** 2376 * dev_pm_opp_unregister_notifier() - Unregister OPP notifier for the device 2377 * @dev: Device for which notifier needs to be unregistered 2378 * @nb: Notifier block to be unregistered 2379 * 2380 * Return: 0 on success or a negative error value. 2381 */ 2382 int dev_pm_opp_unregister_notifier(struct device *dev, 2383 struct notifier_block *nb) 2384 { 2385 struct opp_table *opp_table; 2386 int ret; 2387 2388 opp_table = _find_opp_table(dev); 2389 if (IS_ERR(opp_table)) 2390 return PTR_ERR(opp_table); 2391 2392 ret = blocking_notifier_chain_unregister(&opp_table->head, nb); 2393 2394 dev_pm_opp_put_opp_table(opp_table); 2395 2396 return ret; 2397 } 2398 EXPORT_SYMBOL(dev_pm_opp_unregister_notifier); 2399 2400 void _dev_pm_opp_find_and_remove_table(struct device *dev) 2401 { 2402 struct opp_table *opp_table; 2403 2404 /* Check for existing table for 'dev' */ 2405 opp_table = _find_opp_table(dev); 2406 if (IS_ERR(opp_table)) { 2407 int error = PTR_ERR(opp_table); 2408 2409 if (error != -ENODEV) 2410 WARN(1, "%s: opp_table: %d\n", 2411 IS_ERR_OR_NULL(dev) ? 2412 "Invalid device" : dev_name(dev), 2413 error); 2414 return; 2415 } 2416 2417 _opp_remove_all_static(opp_table); 2418 2419 /* Drop reference taken by _find_opp_table() */ 2420 dev_pm_opp_put_opp_table(opp_table); 2421 2422 /* Drop reference taken while the OPP table was added */ 2423 dev_pm_opp_put_opp_table(opp_table); 2424 } 2425 2426 /** 2427 * dev_pm_opp_remove_table() - Free all OPPs associated with the device 2428 * @dev: device pointer used to lookup OPP table. 2429 * 2430 * Free both OPPs created using static entries present in DT and the 2431 * dynamically added entries. 2432 */ 2433 void dev_pm_opp_remove_table(struct device *dev) 2434 { 2435 _dev_pm_opp_find_and_remove_table(dev); 2436 } 2437 EXPORT_SYMBOL_GPL(dev_pm_opp_remove_table); 2438