at v4.6 2050 lines 58 kB view raw
1/* 2 * Generic OPP Interface 3 * 4 * Copyright (C) 2009-2010 Texas Instruments Incorporated. 5 * Nishanth Menon 6 * Romit Dasgupta 7 * Kevin Hilman 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 14#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 15 16#include <linux/clk.h> 17#include <linux/errno.h> 18#include <linux/err.h> 19#include <linux/slab.h> 20#include <linux/device.h> 21#include <linux/of.h> 22#include <linux/export.h> 23#include <linux/regulator/consumer.h> 24 25#include "opp.h" 26 27/* 28 * The root of the list of all opp-tables. All opp_table structures branch off 29 * from here, with each opp_table containing the list of opps it supports in 30 * various states of availability. 31 */ 32static LIST_HEAD(opp_tables); 33/* Lock to allow exclusive modification to the device and opp lists */ 34DEFINE_MUTEX(opp_table_lock); 35 36#define opp_rcu_lockdep_assert() \ 37do { \ 38 RCU_LOCKDEP_WARN(!rcu_read_lock_held() && \ 39 !lockdep_is_held(&opp_table_lock), \ 40 "Missing rcu_read_lock() or " \ 41 "opp_table_lock protection"); \ 42} while (0) 43 44static struct opp_device *_find_opp_dev(const struct device *dev, 45 struct opp_table *opp_table) 46{ 47 struct opp_device *opp_dev; 48 49 list_for_each_entry(opp_dev, &opp_table->dev_list, node) 50 if (opp_dev->dev == dev) 51 return opp_dev; 52 53 return NULL; 54} 55 56static struct opp_table *_managed_opp(const struct device_node *np) 57{ 58 struct opp_table *opp_table; 59 60 list_for_each_entry_rcu(opp_table, &opp_tables, node) { 61 if (opp_table->np == np) { 62 /* 63 * Multiple devices can point to the same OPP table and 64 * so will have same node-pointer, np. 65 * 66 * But the OPPs will be considered as shared only if the 67 * OPP table contains a "opp-shared" property. 68 */ 69 return opp_table->shared_opp ? opp_table : NULL; 70 } 71 } 72 73 return NULL; 74} 75 76/** 77 * _find_opp_table() - find opp_table struct using device pointer 78 * @dev: device pointer used to lookup OPP table 79 * 80 * Search OPP table for one containing matching device. Does a RCU reader 81 * operation to grab the pointer needed. 82 * 83 * Return: pointer to 'struct opp_table' if found, otherwise -ENODEV or 84 * -EINVAL based on type of error. 85 * 86 * Locking: For readers, this function must be called under rcu_read_lock(). 87 * opp_table is a RCU protected pointer, which means that opp_table is valid 88 * as long as we are under RCU lock. 89 * 90 * For Writers, this function must be called with opp_table_lock held. 91 */ 92struct opp_table *_find_opp_table(struct device *dev) 93{ 94 struct opp_table *opp_table; 95 96 opp_rcu_lockdep_assert(); 97 98 if (IS_ERR_OR_NULL(dev)) { 99 pr_err("%s: Invalid parameters\n", __func__); 100 return ERR_PTR(-EINVAL); 101 } 102 103 list_for_each_entry_rcu(opp_table, &opp_tables, node) 104 if (_find_opp_dev(dev, opp_table)) 105 return opp_table; 106 107 return ERR_PTR(-ENODEV); 108} 109 110/** 111 * dev_pm_opp_get_voltage() - Gets the voltage corresponding to an opp 112 * @opp: opp for which voltage has to be returned for 113 * 114 * Return: voltage in micro volt corresponding to the opp, else 115 * return 0 116 * 117 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 118 * protected pointer. This means that opp which could have been fetched by 119 * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are 120 * under RCU lock. The pointer returned by the opp_find_freq family must be 121 * used in the same section as the usage of this function with the pointer 122 * prior to unlocking with rcu_read_unlock() to maintain the integrity of the 123 * pointer. 124 */ 125unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 126{ 127 struct dev_pm_opp *tmp_opp; 128 unsigned long v = 0; 129 130 opp_rcu_lockdep_assert(); 131 132 tmp_opp = rcu_dereference(opp); 133 if (IS_ERR_OR_NULL(tmp_opp)) 134 pr_err("%s: Invalid parameters\n", __func__); 135 else 136 v = tmp_opp->u_volt; 137 138 return v; 139} 140EXPORT_SYMBOL_GPL(dev_pm_opp_get_voltage); 141 142/** 143 * dev_pm_opp_get_freq() - Gets the frequency corresponding to an available opp 144 * @opp: opp for which frequency has to be returned for 145 * 146 * Return: frequency in hertz corresponding to the opp, else 147 * return 0 148 * 149 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 150 * protected pointer. This means that opp which could have been fetched by 151 * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are 152 * under RCU lock. The pointer returned by the opp_find_freq family must be 153 * used in the same section as the usage of this function with the pointer 154 * prior to unlocking with rcu_read_unlock() to maintain the integrity of the 155 * pointer. 156 */ 157unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 158{ 159 struct dev_pm_opp *tmp_opp; 160 unsigned long f = 0; 161 162 opp_rcu_lockdep_assert(); 163 164 tmp_opp = rcu_dereference(opp); 165 if (IS_ERR_OR_NULL(tmp_opp) || !tmp_opp->available) 166 pr_err("%s: Invalid parameters\n", __func__); 167 else 168 f = tmp_opp->rate; 169 170 return f; 171} 172EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); 173 174/** 175 * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not 176 * @opp: opp for which turbo mode is being verified 177 * 178 * Turbo OPPs are not for normal use, and can be enabled (under certain 179 * conditions) for short duration of times to finish high throughput work 180 * quickly. Running on them for longer times may overheat the chip. 181 * 182 * Return: true if opp is turbo opp, else false. 183 * 184 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 185 * protected pointer. This means that opp which could have been fetched by 186 * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are 187 * under RCU lock. The pointer returned by the opp_find_freq family must be 188 * used in the same section as the usage of this function with the pointer 189 * prior to unlocking with rcu_read_unlock() to maintain the integrity of the 190 * pointer. 191 */ 192bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 193{ 194 struct dev_pm_opp *tmp_opp; 195 196 opp_rcu_lockdep_assert(); 197 198 tmp_opp = rcu_dereference(opp); 199 if (IS_ERR_OR_NULL(tmp_opp) || !tmp_opp->available) { 200 pr_err("%s: Invalid parameters\n", __func__); 201 return false; 202 } 203 204 return tmp_opp->turbo; 205} 206EXPORT_SYMBOL_GPL(dev_pm_opp_is_turbo); 207 208/** 209 * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds 210 * @dev: device for which we do this operation 211 * 212 * Return: This function returns the max clock latency in nanoseconds. 213 * 214 * Locking: This function takes rcu_read_lock(). 215 */ 216unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 217{ 218 struct opp_table *opp_table; 219 unsigned long clock_latency_ns; 220 221 rcu_read_lock(); 222 223 opp_table = _find_opp_table(dev); 224 if (IS_ERR(opp_table)) 225 clock_latency_ns = 0; 226 else 227 clock_latency_ns = opp_table->clock_latency_ns_max; 228 229 rcu_read_unlock(); 230 return clock_latency_ns; 231} 232EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_clock_latency); 233 234/** 235 * dev_pm_opp_get_max_volt_latency() - Get max voltage latency in nanoseconds 236 * @dev: device for which we do this operation 237 * 238 * Return: This function returns the max voltage latency in nanoseconds. 239 * 240 * Locking: This function takes rcu_read_lock(). 241 */ 242unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) 243{ 244 struct opp_table *opp_table; 245 struct dev_pm_opp *opp; 246 struct regulator *reg; 247 unsigned long latency_ns = 0; 248 unsigned long min_uV = ~0, max_uV = 0; 249 int ret; 250 251 rcu_read_lock(); 252 253 opp_table = _find_opp_table(dev); 254 if (IS_ERR(opp_table)) { 255 rcu_read_unlock(); 256 return 0; 257 } 258 259 reg = opp_table->regulator; 260 if (IS_ERR(reg)) { 261 /* Regulator may not be required for device */ 262 rcu_read_unlock(); 263 return 0; 264 } 265 266 list_for_each_entry_rcu(opp, &opp_table->opp_list, node) { 267 if (!opp->available) 268 continue; 269 270 if (opp->u_volt_min < min_uV) 271 min_uV = opp->u_volt_min; 272 if (opp->u_volt_max > max_uV) 273 max_uV = opp->u_volt_max; 274 } 275 276 rcu_read_unlock(); 277 278 /* 279 * The caller needs to ensure that opp_table (and hence the regulator) 280 * isn't freed, while we are executing this routine. 281 */ 282 ret = regulator_set_voltage_time(reg, min_uV, max_uV); 283 if (ret > 0) 284 latency_ns = ret * 1000; 285 286 return latency_ns; 287} 288EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_volt_latency); 289 290/** 291 * dev_pm_opp_get_max_transition_latency() - Get max transition latency in 292 * nanoseconds 293 * @dev: device for which we do this operation 294 * 295 * Return: This function returns the max transition latency, in nanoseconds, to 296 * switch from one OPP to other. 297 * 298 * Locking: This function takes rcu_read_lock(). 299 */ 300unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) 301{ 302 return dev_pm_opp_get_max_volt_latency(dev) + 303 dev_pm_opp_get_max_clock_latency(dev); 304} 305EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_transition_latency); 306 307/** 308 * dev_pm_opp_get_suspend_opp() - Get suspend opp 309 * @dev: device for which we do this operation 310 * 311 * Return: This function returns pointer to the suspend opp if it is 312 * defined and available, otherwise it returns NULL. 313 * 314 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 315 * protected pointer. The reason for the same is that the opp pointer which is 316 * returned will remain valid for use with opp_get_{voltage, freq} only while 317 * under the locked area. The pointer returned must be used prior to unlocking 318 * with rcu_read_unlock() to maintain the integrity of the pointer. 319 */ 320struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev) 321{ 322 struct opp_table *opp_table; 323 324 opp_rcu_lockdep_assert(); 325 326 opp_table = _find_opp_table(dev); 327 if (IS_ERR(opp_table) || !opp_table->suspend_opp || 328 !opp_table->suspend_opp->available) 329 return NULL; 330 331 return opp_table->suspend_opp; 332} 333EXPORT_SYMBOL_GPL(dev_pm_opp_get_suspend_opp); 334 335/** 336 * dev_pm_opp_get_opp_count() - Get number of opps available in the opp table 337 * @dev: device for which we do this operation 338 * 339 * Return: This function returns the number of available opps if there are any, 340 * else returns 0 if none or the corresponding error value. 341 * 342 * Locking: This function takes rcu_read_lock(). 343 */ 344int dev_pm_opp_get_opp_count(struct device *dev) 345{ 346 struct opp_table *opp_table; 347 struct dev_pm_opp *temp_opp; 348 int count = 0; 349 350 rcu_read_lock(); 351 352 opp_table = _find_opp_table(dev); 353 if (IS_ERR(opp_table)) { 354 count = PTR_ERR(opp_table); 355 dev_err(dev, "%s: OPP table not found (%d)\n", 356 __func__, count); 357 goto out_unlock; 358 } 359 360 list_for_each_entry_rcu(temp_opp, &opp_table->opp_list, node) { 361 if (temp_opp->available) 362 count++; 363 } 364 365out_unlock: 366 rcu_read_unlock(); 367 return count; 368} 369EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_count); 370 371/** 372 * dev_pm_opp_find_freq_exact() - search for an exact frequency 373 * @dev: device for which we do this operation 374 * @freq: frequency to search for 375 * @available: true/false - match for available opp 376 * 377 * Return: Searches for exact match in the opp table and returns pointer to the 378 * matching opp if found, else returns ERR_PTR in case of error and should 379 * be handled using IS_ERR. Error return values can be: 380 * EINVAL: for bad pointer 381 * ERANGE: no match found for search 382 * ENODEV: if device not found in list of registered devices 383 * 384 * Note: available is a modifier for the search. if available=true, then the 385 * match is for exact matching frequency and is available in the stored OPP 386 * table. if false, the match is for exact frequency which is not available. 387 * 388 * This provides a mechanism to enable an opp which is not available currently 389 * or the opposite as well. 390 * 391 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 392 * protected pointer. The reason for the same is that the opp pointer which is 393 * returned will remain valid for use with opp_get_{voltage, freq} only while 394 * under the locked area. The pointer returned must be used prior to unlocking 395 * with rcu_read_unlock() to maintain the integrity of the pointer. 396 */ 397struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 398 unsigned long freq, 399 bool available) 400{ 401 struct opp_table *opp_table; 402 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 403 404 opp_rcu_lockdep_assert(); 405 406 opp_table = _find_opp_table(dev); 407 if (IS_ERR(opp_table)) { 408 int r = PTR_ERR(opp_table); 409 410 dev_err(dev, "%s: OPP table not found (%d)\n", __func__, r); 411 return ERR_PTR(r); 412 } 413 414 list_for_each_entry_rcu(temp_opp, &opp_table->opp_list, node) { 415 if (temp_opp->available == available && 416 temp_opp->rate == freq) { 417 opp = temp_opp; 418 break; 419 } 420 } 421 422 return opp; 423} 424EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_exact); 425 426/** 427 * dev_pm_opp_find_freq_ceil() - Search for an rounded ceil freq 428 * @dev: device for which we do this operation 429 * @freq: Start frequency 430 * 431 * Search for the matching ceil *available* OPP from a starting freq 432 * for a device. 433 * 434 * Return: matching *opp and refreshes *freq accordingly, else returns 435 * ERR_PTR in case of error and should be handled using IS_ERR. Error return 436 * values can be: 437 * EINVAL: for bad pointer 438 * ERANGE: no match found for search 439 * ENODEV: if device not found in list of registered devices 440 * 441 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 442 * protected pointer. The reason for the same is that the opp pointer which is 443 * returned will remain valid for use with opp_get_{voltage, freq} only while 444 * under the locked area. The pointer returned must be used prior to unlocking 445 * with rcu_read_unlock() to maintain the integrity of the pointer. 446 */ 447struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 448 unsigned long *freq) 449{ 450 struct opp_table *opp_table; 451 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 452 453 opp_rcu_lockdep_assert(); 454 455 if (!dev || !freq) { 456 dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq); 457 return ERR_PTR(-EINVAL); 458 } 459 460 opp_table = _find_opp_table(dev); 461 if (IS_ERR(opp_table)) 462 return ERR_CAST(opp_table); 463 464 list_for_each_entry_rcu(temp_opp, &opp_table->opp_list, node) { 465 if (temp_opp->available && temp_opp->rate >= *freq) { 466 opp = temp_opp; 467 *freq = opp->rate; 468 break; 469 } 470 } 471 472 return opp; 473} 474EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil); 475 476/** 477 * dev_pm_opp_find_freq_floor() - Search for a rounded floor freq 478 * @dev: device for which we do this operation 479 * @freq: Start frequency 480 * 481 * Search for the matching floor *available* OPP from a starting freq 482 * for a device. 483 * 484 * Return: matching *opp and refreshes *freq accordingly, else returns 485 * ERR_PTR in case of error and should be handled using IS_ERR. Error return 486 * values can be: 487 * EINVAL: for bad pointer 488 * ERANGE: no match found for search 489 * ENODEV: if device not found in list of registered devices 490 * 491 * Locking: This function must be called under rcu_read_lock(). opp is a rcu 492 * protected pointer. The reason for the same is that the opp pointer which is 493 * returned will remain valid for use with opp_get_{voltage, freq} only while 494 * under the locked area. The pointer returned must be used prior to unlocking 495 * with rcu_read_unlock() to maintain the integrity of the pointer. 496 */ 497struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 498 unsigned long *freq) 499{ 500 struct opp_table *opp_table; 501 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); 502 503 opp_rcu_lockdep_assert(); 504 505 if (!dev || !freq) { 506 dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq); 507 return ERR_PTR(-EINVAL); 508 } 509 510 opp_table = _find_opp_table(dev); 511 if (IS_ERR(opp_table)) 512 return ERR_CAST(opp_table); 513 514 list_for_each_entry_rcu(temp_opp, &opp_table->opp_list, node) { 515 if (temp_opp->available) { 516 /* go to the next node, before choosing prev */ 517 if (temp_opp->rate > *freq) 518 break; 519 else 520 opp = temp_opp; 521 } 522 } 523 if (!IS_ERR(opp)) 524 *freq = opp->rate; 525 526 return opp; 527} 528EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor); 529 530/* 531 * The caller needs to ensure that opp_table (and hence the clk) isn't freed, 532 * while clk returned here is used. 533 */ 534static struct clk *_get_opp_clk(struct device *dev) 535{ 536 struct opp_table *opp_table; 537 struct clk *clk; 538 539 rcu_read_lock(); 540 541 opp_table = _find_opp_table(dev); 542 if (IS_ERR(opp_table)) { 543 dev_err(dev, "%s: device opp doesn't exist\n", __func__); 544 clk = ERR_CAST(opp_table); 545 goto unlock; 546 } 547 548 clk = opp_table->clk; 549 if (IS_ERR(clk)) 550 dev_err(dev, "%s: No clock available for the device\n", 551 __func__); 552 553unlock: 554 rcu_read_unlock(); 555 return clk; 556} 557 558static int _set_opp_voltage(struct device *dev, struct regulator *reg, 559 unsigned long u_volt, unsigned long u_volt_min, 560 unsigned long u_volt_max) 561{ 562 int ret; 563 564 /* Regulator not available for device */ 565 if (IS_ERR(reg)) { 566 dev_dbg(dev, "%s: regulator not available: %ld\n", __func__, 567 PTR_ERR(reg)); 568 return 0; 569 } 570 571 dev_dbg(dev, "%s: voltages (mV): %lu %lu %lu\n", __func__, u_volt_min, 572 u_volt, u_volt_max); 573 574 ret = regulator_set_voltage_triplet(reg, u_volt_min, u_volt, 575 u_volt_max); 576 if (ret) 577 dev_err(dev, "%s: failed to set voltage (%lu %lu %lu mV): %d\n", 578 __func__, u_volt_min, u_volt, u_volt_max, ret); 579 580 return ret; 581} 582 583/** 584 * dev_pm_opp_set_rate() - Configure new OPP based on frequency 585 * @dev: device for which we do this operation 586 * @target_freq: frequency to achieve 587 * 588 * This configures the power-supplies and clock source to the levels specified 589 * by the OPP corresponding to the target_freq. 590 * 591 * Locking: This function takes rcu_read_lock(). 592 */ 593int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 594{ 595 struct opp_table *opp_table; 596 struct dev_pm_opp *old_opp, *opp; 597 struct regulator *reg; 598 struct clk *clk; 599 unsigned long freq, old_freq; 600 unsigned long u_volt, u_volt_min, u_volt_max; 601 unsigned long ou_volt, ou_volt_min, ou_volt_max; 602 int ret; 603 604 if (unlikely(!target_freq)) { 605 dev_err(dev, "%s: Invalid target frequency %lu\n", __func__, 606 target_freq); 607 return -EINVAL; 608 } 609 610 clk = _get_opp_clk(dev); 611 if (IS_ERR(clk)) 612 return PTR_ERR(clk); 613 614 freq = clk_round_rate(clk, target_freq); 615 if ((long)freq <= 0) 616 freq = target_freq; 617 618 old_freq = clk_get_rate(clk); 619 620 /* Return early if nothing to do */ 621 if (old_freq == freq) { 622 dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", 623 __func__, freq); 624 return 0; 625 } 626 627 rcu_read_lock(); 628 629 opp_table = _find_opp_table(dev); 630 if (IS_ERR(opp_table)) { 631 dev_err(dev, "%s: device opp doesn't exist\n", __func__); 632 rcu_read_unlock(); 633 return PTR_ERR(opp_table); 634 } 635 636 old_opp = dev_pm_opp_find_freq_ceil(dev, &old_freq); 637 if (!IS_ERR(old_opp)) { 638 ou_volt = old_opp->u_volt; 639 ou_volt_min = old_opp->u_volt_min; 640 ou_volt_max = old_opp->u_volt_max; 641 } else { 642 dev_err(dev, "%s: failed to find current OPP for freq %lu (%ld)\n", 643 __func__, old_freq, PTR_ERR(old_opp)); 644 } 645 646 opp = dev_pm_opp_find_freq_ceil(dev, &freq); 647 if (IS_ERR(opp)) { 648 ret = PTR_ERR(opp); 649 dev_err(dev, "%s: failed to find OPP for freq %lu (%d)\n", 650 __func__, freq, ret); 651 rcu_read_unlock(); 652 return ret; 653 } 654 655 u_volt = opp->u_volt; 656 u_volt_min = opp->u_volt_min; 657 u_volt_max = opp->u_volt_max; 658 659 reg = opp_table->regulator; 660 661 rcu_read_unlock(); 662 663 /* Scaling up? Scale voltage before frequency */ 664 if (freq > old_freq) { 665 ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min, 666 u_volt_max); 667 if (ret) 668 goto restore_voltage; 669 } 670 671 /* Change frequency */ 672 673 dev_dbg(dev, "%s: switching OPP: %lu Hz --> %lu Hz\n", 674 __func__, old_freq, freq); 675 676 ret = clk_set_rate(clk, freq); 677 if (ret) { 678 dev_err(dev, "%s: failed to set clock rate: %d\n", __func__, 679 ret); 680 goto restore_voltage; 681 } 682 683 /* Scaling down? Scale voltage after frequency */ 684 if (freq < old_freq) { 685 ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min, 686 u_volt_max); 687 if (ret) 688 goto restore_freq; 689 } 690 691 return 0; 692 693restore_freq: 694 if (clk_set_rate(clk, old_freq)) 695 dev_err(dev, "%s: failed to restore old-freq (%lu Hz)\n", 696 __func__, old_freq); 697restore_voltage: 698 /* This shouldn't harm even if the voltages weren't updated earlier */ 699 if (!IS_ERR(old_opp)) 700 _set_opp_voltage(dev, reg, ou_volt, ou_volt_min, ou_volt_max); 701 702 return ret; 703} 704EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate); 705 706/* OPP-dev Helpers */ 707static void _kfree_opp_dev_rcu(struct rcu_head *head) 708{ 709 struct opp_device *opp_dev; 710 711 opp_dev = container_of(head, struct opp_device, rcu_head); 712 kfree_rcu(opp_dev, rcu_head); 713} 714 715static void _remove_opp_dev(struct opp_device *opp_dev, 716 struct opp_table *opp_table) 717{ 718 opp_debug_unregister(opp_dev, opp_table); 719 list_del(&opp_dev->node); 720 call_srcu(&opp_table->srcu_head.srcu, &opp_dev->rcu_head, 721 _kfree_opp_dev_rcu); 722} 723 724struct opp_device *_add_opp_dev(const struct device *dev, 725 struct opp_table *opp_table) 726{ 727 struct opp_device *opp_dev; 728 int ret; 729 730 opp_dev = kzalloc(sizeof(*opp_dev), GFP_KERNEL); 731 if (!opp_dev) 732 return NULL; 733 734 /* Initialize opp-dev */ 735 opp_dev->dev = dev; 736 list_add_rcu(&opp_dev->node, &opp_table->dev_list); 737 738 /* Create debugfs entries for the opp_table */ 739 ret = opp_debug_register(opp_dev, opp_table); 740 if (ret) 741 dev_err(dev, "%s: Failed to register opp debugfs (%d)\n", 742 __func__, ret); 743 744 return opp_dev; 745} 746 747/** 748 * _add_opp_table() - Find OPP table or allocate a new one 749 * @dev: device for which we do this operation 750 * 751 * It tries to find an existing table first, if it couldn't find one, it 752 * allocates a new OPP table and returns that. 753 * 754 * Return: valid opp_table pointer if success, else NULL. 755 */ 756static struct opp_table *_add_opp_table(struct device *dev) 757{ 758 struct opp_table *opp_table; 759 struct opp_device *opp_dev; 760 struct device_node *np; 761 int ret; 762 763 /* Check for existing table for 'dev' first */ 764 opp_table = _find_opp_table(dev); 765 if (!IS_ERR(opp_table)) 766 return opp_table; 767 768 /* 769 * Allocate a new OPP table. In the infrequent case where a new 770 * device is needed to be added, we pay this penalty. 771 */ 772 opp_table = kzalloc(sizeof(*opp_table), GFP_KERNEL); 773 if (!opp_table) 774 return NULL; 775 776 INIT_LIST_HEAD(&opp_table->dev_list); 777 778 opp_dev = _add_opp_dev(dev, opp_table); 779 if (!opp_dev) { 780 kfree(opp_table); 781 return NULL; 782 } 783 784 /* 785 * Only required for backward compatibility with v1 bindings, but isn't 786 * harmful for other cases. And so we do it unconditionally. 787 */ 788 np = of_node_get(dev->of_node); 789 if (np) { 790 u32 val; 791 792 if (!of_property_read_u32(np, "clock-latency", &val)) 793 opp_table->clock_latency_ns_max = val; 794 of_property_read_u32(np, "voltage-tolerance", 795 &opp_table->voltage_tolerance_v1); 796 of_node_put(np); 797 } 798 799 /* Set regulator to a non-NULL error value */ 800 opp_table->regulator = ERR_PTR(-ENXIO); 801 802 /* Find clk for the device */ 803 opp_table->clk = clk_get(dev, NULL); 804 if (IS_ERR(opp_table->clk)) { 805 ret = PTR_ERR(opp_table->clk); 806 if (ret != -EPROBE_DEFER) 807 dev_dbg(dev, "%s: Couldn't find clock: %d\n", __func__, 808 ret); 809 } 810 811 srcu_init_notifier_head(&opp_table->srcu_head); 812 INIT_LIST_HEAD(&opp_table->opp_list); 813 814 /* Secure the device table modification */ 815 list_add_rcu(&opp_table->node, &opp_tables); 816 return opp_table; 817} 818 819/** 820 * _kfree_device_rcu() - Free opp_table RCU handler 821 * @head: RCU head 822 */ 823static void _kfree_device_rcu(struct rcu_head *head) 824{ 825 struct opp_table *opp_table = container_of(head, struct opp_table, 826 rcu_head); 827 828 kfree_rcu(opp_table, rcu_head); 829} 830 831/** 832 * _remove_opp_table() - Removes a OPP table 833 * @opp_table: OPP table to be removed. 834 * 835 * Removes/frees OPP table if it doesn't contain any OPPs. 836 */ 837static void _remove_opp_table(struct opp_table *opp_table) 838{ 839 struct opp_device *opp_dev; 840 841 if (!list_empty(&opp_table->opp_list)) 842 return; 843 844 if (opp_table->supported_hw) 845 return; 846 847 if (opp_table->prop_name) 848 return; 849 850 if (!IS_ERR(opp_table->regulator)) 851 return; 852 853 /* Release clk */ 854 if (!IS_ERR(opp_table->clk)) 855 clk_put(opp_table->clk); 856 857 opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device, 858 node); 859 860 _remove_opp_dev(opp_dev, opp_table); 861 862 /* dev_list must be empty now */ 863 WARN_ON(!list_empty(&opp_table->dev_list)); 864 865 list_del_rcu(&opp_table->node); 866 call_srcu(&opp_table->srcu_head.srcu, &opp_table->rcu_head, 867 _kfree_device_rcu); 868} 869 870/** 871 * _kfree_opp_rcu() - Free OPP RCU handler 872 * @head: RCU head 873 */ 874static void _kfree_opp_rcu(struct rcu_head *head) 875{ 876 struct dev_pm_opp *opp = container_of(head, struct dev_pm_opp, rcu_head); 877 878 kfree_rcu(opp, rcu_head); 879} 880 881/** 882 * _opp_remove() - Remove an OPP from a table definition 883 * @opp_table: points back to the opp_table struct this opp belongs to 884 * @opp: pointer to the OPP to remove 885 * @notify: OPP_EVENT_REMOVE notification should be sent or not 886 * 887 * This function removes an opp definition from the opp table. 888 * 889 * Locking: The internal opp_table and opp structures are RCU protected. 890 * It is assumed that the caller holds required mutex for an RCU updater 891 * strategy. 892 */ 893static void _opp_remove(struct opp_table *opp_table, 894 struct dev_pm_opp *opp, bool notify) 895{ 896 /* 897 * Notify the changes in the availability of the operable 898 * frequency/voltage list. 899 */ 900 if (notify) 901 srcu_notifier_call_chain(&opp_table->srcu_head, 902 OPP_EVENT_REMOVE, opp); 903 opp_debug_remove_one(opp); 904 list_del_rcu(&opp->node); 905 call_srcu(&opp_table->srcu_head.srcu, &opp->rcu_head, _kfree_opp_rcu); 906 907 _remove_opp_table(opp_table); 908} 909 910/** 911 * dev_pm_opp_remove() - Remove an OPP from OPP table 912 * @dev: device for which we do this operation 913 * @freq: OPP to remove with matching 'freq' 914 * 915 * This function removes an opp from the opp table. 916 * 917 * Locking: The internal opp_table and opp structures are RCU protected. 918 * Hence this function internally uses RCU updater strategy with mutex locks 919 * to keep the integrity of the internal data structures. Callers should ensure 920 * that this function is *NOT* called under RCU protection or in contexts where 921 * mutex cannot be locked. 922 */ 923void dev_pm_opp_remove(struct device *dev, unsigned long freq) 924{ 925 struct dev_pm_opp *opp; 926 struct opp_table *opp_table; 927 bool found = false; 928 929 /* Hold our table modification lock here */ 930 mutex_lock(&opp_table_lock); 931 932 opp_table = _find_opp_table(dev); 933 if (IS_ERR(opp_table)) 934 goto unlock; 935 936 list_for_each_entry(opp, &opp_table->opp_list, node) { 937 if (opp->rate == freq) { 938 found = true; 939 break; 940 } 941 } 942 943 if (!found) { 944 dev_warn(dev, "%s: Couldn't find OPP with freq: %lu\n", 945 __func__, freq); 946 goto unlock; 947 } 948 949 _opp_remove(opp_table, opp, true); 950unlock: 951 mutex_unlock(&opp_table_lock); 952} 953EXPORT_SYMBOL_GPL(dev_pm_opp_remove); 954 955static struct dev_pm_opp *_allocate_opp(struct device *dev, 956 struct opp_table **opp_table) 957{ 958 struct dev_pm_opp *opp; 959 960 /* allocate new OPP node */ 961 opp = kzalloc(sizeof(*opp), GFP_KERNEL); 962 if (!opp) 963 return NULL; 964 965 INIT_LIST_HEAD(&opp->node); 966 967 *opp_table = _add_opp_table(dev); 968 if (!*opp_table) { 969 kfree(opp); 970 return NULL; 971 } 972 973 return opp; 974} 975 976static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, 977 struct opp_table *opp_table) 978{ 979 struct regulator *reg = opp_table->regulator; 980 981 if (!IS_ERR(reg) && 982 !regulator_is_supported_voltage(reg, opp->u_volt_min, 983 opp->u_volt_max)) { 984 pr_warn("%s: OPP minuV: %lu maxuV: %lu, not supported by regulator\n", 985 __func__, opp->u_volt_min, opp->u_volt_max); 986 return false; 987 } 988 989 return true; 990} 991 992static int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, 993 struct opp_table *opp_table) 994{ 995 struct dev_pm_opp *opp; 996 struct list_head *head = &opp_table->opp_list; 997 int ret; 998 999 /* 1000 * Insert new OPP in order of increasing frequency and discard if 1001 * already present. 1002 * 1003 * Need to use &opp_table->opp_list in the condition part of the 'for' 1004 * loop, don't replace it with head otherwise it will become an infinite 1005 * loop. 1006 */ 1007 list_for_each_entry_rcu(opp, &opp_table->opp_list, node) { 1008 if (new_opp->rate > opp->rate) { 1009 head = &opp->node; 1010 continue; 1011 } 1012 1013 if (new_opp->rate < opp->rate) 1014 break; 1015 1016 /* Duplicate OPPs */ 1017 dev_warn(dev, "%s: duplicate OPPs detected. Existing: freq: %lu, volt: %lu, enabled: %d. New: freq: %lu, volt: %lu, enabled: %d\n", 1018 __func__, opp->rate, opp->u_volt, opp->available, 1019 new_opp->rate, new_opp->u_volt, new_opp->available); 1020 1021 return opp->available && new_opp->u_volt == opp->u_volt ? 1022 0 : -EEXIST; 1023 } 1024 1025 new_opp->opp_table = opp_table; 1026 list_add_rcu(&new_opp->node, head); 1027 1028 ret = opp_debug_create_one(new_opp, opp_table); 1029 if (ret) 1030 dev_err(dev, "%s: Failed to register opp to debugfs (%d)\n", 1031 __func__, ret); 1032 1033 if (!_opp_supported_by_regulators(new_opp, opp_table)) { 1034 new_opp->available = false; 1035 dev_warn(dev, "%s: OPP not supported by regulators (%lu)\n", 1036 __func__, new_opp->rate); 1037 } 1038 1039 return 0; 1040} 1041 1042/** 1043 * _opp_add_v1() - Allocate a OPP based on v1 bindings. 1044 * @dev: device for which we do this operation 1045 * @freq: Frequency in Hz for this OPP 1046 * @u_volt: Voltage in uVolts for this OPP 1047 * @dynamic: Dynamically added OPPs. 1048 * 1049 * This function adds an opp definition to the opp table and returns status. 1050 * The opp is made available by default and it can be controlled using 1051 * dev_pm_opp_enable/disable functions and may be removed by dev_pm_opp_remove. 1052 * 1053 * NOTE: "dynamic" parameter impacts OPPs added by the dev_pm_opp_of_add_table 1054 * and freed by dev_pm_opp_of_remove_table. 1055 * 1056 * Locking: The internal opp_table and opp structures are RCU protected. 1057 * Hence this function internally uses RCU updater strategy with mutex locks 1058 * to keep the integrity of the internal data structures. Callers should ensure 1059 * that this function is *NOT* called under RCU protection or in contexts where 1060 * mutex cannot be locked. 1061 * 1062 * Return: 1063 * 0 On success OR 1064 * Duplicate OPPs (both freq and volt are same) and opp->available 1065 * -EEXIST Freq are same and volt are different OR 1066 * Duplicate OPPs (both freq and volt are same) and !opp->available 1067 * -ENOMEM Memory allocation failure 1068 */ 1069static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, 1070 bool dynamic) 1071{ 1072 struct opp_table *opp_table; 1073 struct dev_pm_opp *new_opp; 1074 unsigned long tol; 1075 int ret; 1076 1077 /* Hold our table modification lock here */ 1078 mutex_lock(&opp_table_lock); 1079 1080 new_opp = _allocate_opp(dev, &opp_table); 1081 if (!new_opp) { 1082 ret = -ENOMEM; 1083 goto unlock; 1084 } 1085 1086 /* populate the opp table */ 1087 new_opp->rate = freq; 1088 tol = u_volt * opp_table->voltage_tolerance_v1 / 100; 1089 new_opp->u_volt = u_volt; 1090 new_opp->u_volt_min = u_volt - tol; 1091 new_opp->u_volt_max = u_volt + tol; 1092 new_opp->available = true; 1093 new_opp->dynamic = dynamic; 1094 1095 ret = _opp_add(dev, new_opp, opp_table); 1096 if (ret) 1097 goto free_opp; 1098 1099 mutex_unlock(&opp_table_lock); 1100 1101 /* 1102 * Notify the changes in the availability of the operable 1103 * frequency/voltage list. 1104 */ 1105 srcu_notifier_call_chain(&opp_table->srcu_head, OPP_EVENT_ADD, new_opp); 1106 return 0; 1107 1108free_opp: 1109 _opp_remove(opp_table, new_opp, false); 1110unlock: 1111 mutex_unlock(&opp_table_lock); 1112 return ret; 1113} 1114 1115/* TODO: Support multiple regulators */ 1116static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev, 1117 struct opp_table *opp_table) 1118{ 1119 u32 microvolt[3] = {0}; 1120 u32 val; 1121 int count, ret; 1122 struct property *prop = NULL; 1123 char name[NAME_MAX]; 1124 1125 /* Search for "opp-microvolt-<name>" */ 1126 if (opp_table->prop_name) { 1127 snprintf(name, sizeof(name), "opp-microvolt-%s", 1128 opp_table->prop_name); 1129 prop = of_find_property(opp->np, name, NULL); 1130 } 1131 1132 if (!prop) { 1133 /* Search for "opp-microvolt" */ 1134 sprintf(name, "opp-microvolt"); 1135 prop = of_find_property(opp->np, name, NULL); 1136 1137 /* Missing property isn't a problem, but an invalid entry is */ 1138 if (!prop) 1139 return 0; 1140 } 1141 1142 count = of_property_count_u32_elems(opp->np, name); 1143 if (count < 0) { 1144 dev_err(dev, "%s: Invalid %s property (%d)\n", 1145 __func__, name, count); 1146 return count; 1147 } 1148 1149 /* There can be one or three elements here */ 1150 if (count != 1 && count != 3) { 1151 dev_err(dev, "%s: Invalid number of elements in %s property (%d)\n", 1152 __func__, name, count); 1153 return -EINVAL; 1154 } 1155 1156 ret = of_property_read_u32_array(opp->np, name, microvolt, count); 1157 if (ret) { 1158 dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret); 1159 return -EINVAL; 1160 } 1161 1162 opp->u_volt = microvolt[0]; 1163 1164 if (count == 1) { 1165 opp->u_volt_min = opp->u_volt; 1166 opp->u_volt_max = opp->u_volt; 1167 } else { 1168 opp->u_volt_min = microvolt[1]; 1169 opp->u_volt_max = microvolt[2]; 1170 } 1171 1172 /* Search for "opp-microamp-<name>" */ 1173 prop = NULL; 1174 if (opp_table->prop_name) { 1175 snprintf(name, sizeof(name), "opp-microamp-%s", 1176 opp_table->prop_name); 1177 prop = of_find_property(opp->np, name, NULL); 1178 } 1179 1180 if (!prop) { 1181 /* Search for "opp-microamp" */ 1182 sprintf(name, "opp-microamp"); 1183 prop = of_find_property(opp->np, name, NULL); 1184 } 1185 1186 if (prop && !of_property_read_u32(opp->np, name, &val)) 1187 opp->u_amp = val; 1188 1189 return 0; 1190} 1191 1192/** 1193 * dev_pm_opp_set_supported_hw() - Set supported platforms 1194 * @dev: Device for which supported-hw has to be set. 1195 * @versions: Array of hierarchy of versions to match. 1196 * @count: Number of elements in the array. 1197 * 1198 * This is required only for the V2 bindings, and it enables a platform to 1199 * specify the hierarchy of versions it supports. OPP layer will then enable 1200 * OPPs, which are available for those versions, based on its 'opp-supported-hw' 1201 * property. 1202 * 1203 * Locking: The internal opp_table and opp structures are RCU protected. 1204 * Hence this function internally uses RCU updater strategy with mutex locks 1205 * to keep the integrity of the internal data structures. Callers should ensure 1206 * that this function is *NOT* called under RCU protection or in contexts where 1207 * mutex cannot be locked. 1208 */ 1209int dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, 1210 unsigned int count) 1211{ 1212 struct opp_table *opp_table; 1213 int ret = 0; 1214 1215 /* Hold our table modification lock here */ 1216 mutex_lock(&opp_table_lock); 1217 1218 opp_table = _add_opp_table(dev); 1219 if (!opp_table) { 1220 ret = -ENOMEM; 1221 goto unlock; 1222 } 1223 1224 /* Make sure there are no concurrent readers while updating opp_table */ 1225 WARN_ON(!list_empty(&opp_table->opp_list)); 1226 1227 /* Do we already have a version hierarchy associated with opp_table? */ 1228 if (opp_table->supported_hw) { 1229 dev_err(dev, "%s: Already have supported hardware list\n", 1230 __func__); 1231 ret = -EBUSY; 1232 goto err; 1233 } 1234 1235 opp_table->supported_hw = kmemdup(versions, count * sizeof(*versions), 1236 GFP_KERNEL); 1237 if (!opp_table->supported_hw) { 1238 ret = -ENOMEM; 1239 goto err; 1240 } 1241 1242 opp_table->supported_hw_count = count; 1243 mutex_unlock(&opp_table_lock); 1244 return 0; 1245 1246err: 1247 _remove_opp_table(opp_table); 1248unlock: 1249 mutex_unlock(&opp_table_lock); 1250 1251 return ret; 1252} 1253EXPORT_SYMBOL_GPL(dev_pm_opp_set_supported_hw); 1254 1255/** 1256 * dev_pm_opp_put_supported_hw() - Releases resources blocked for supported hw 1257 * @dev: Device for which supported-hw has to be put. 1258 * 1259 * This is required only for the V2 bindings, and is called for a matching 1260 * dev_pm_opp_set_supported_hw(). Until this is called, the opp_table structure 1261 * will not be freed. 1262 * 1263 * Locking: The internal opp_table and opp structures are RCU protected. 1264 * Hence this function internally uses RCU updater strategy with mutex locks 1265 * to keep the integrity of the internal data structures. Callers should ensure 1266 * that this function is *NOT* called under RCU protection or in contexts where 1267 * mutex cannot be locked. 1268 */ 1269void dev_pm_opp_put_supported_hw(struct device *dev) 1270{ 1271 struct opp_table *opp_table; 1272 1273 /* Hold our table modification lock here */ 1274 mutex_lock(&opp_table_lock); 1275 1276 /* Check for existing table for 'dev' first */ 1277 opp_table = _find_opp_table(dev); 1278 if (IS_ERR(opp_table)) { 1279 dev_err(dev, "Failed to find opp_table: %ld\n", 1280 PTR_ERR(opp_table)); 1281 goto unlock; 1282 } 1283 1284 /* Make sure there are no concurrent readers while updating opp_table */ 1285 WARN_ON(!list_empty(&opp_table->opp_list)); 1286 1287 if (!opp_table->supported_hw) { 1288 dev_err(dev, "%s: Doesn't have supported hardware list\n", 1289 __func__); 1290 goto unlock; 1291 } 1292 1293 kfree(opp_table->supported_hw); 1294 opp_table->supported_hw = NULL; 1295 opp_table->supported_hw_count = 0; 1296 1297 /* Try freeing opp_table if this was the last blocking resource */ 1298 _remove_opp_table(opp_table); 1299 1300unlock: 1301 mutex_unlock(&opp_table_lock); 1302} 1303EXPORT_SYMBOL_GPL(dev_pm_opp_put_supported_hw); 1304 1305/** 1306 * dev_pm_opp_set_prop_name() - Set prop-extn name 1307 * @dev: Device for which the prop-name has to be set. 1308 * @name: name to postfix to properties. 1309 * 1310 * This is required only for the V2 bindings, and it enables a platform to 1311 * specify the extn to be used for certain property names. The properties to 1312 * which the extension will apply are opp-microvolt and opp-microamp. OPP core 1313 * should postfix the property name with -<name> while looking for them. 1314 * 1315 * Locking: The internal opp_table and opp structures are RCU protected. 1316 * Hence this function internally uses RCU updater strategy with mutex locks 1317 * to keep the integrity of the internal data structures. Callers should ensure 1318 * that this function is *NOT* called under RCU protection or in contexts where 1319 * mutex cannot be locked. 1320 */ 1321int dev_pm_opp_set_prop_name(struct device *dev, const char *name) 1322{ 1323 struct opp_table *opp_table; 1324 int ret = 0; 1325 1326 /* Hold our table modification lock here */ 1327 mutex_lock(&opp_table_lock); 1328 1329 opp_table = _add_opp_table(dev); 1330 if (!opp_table) { 1331 ret = -ENOMEM; 1332 goto unlock; 1333 } 1334 1335 /* Make sure there are no concurrent readers while updating opp_table */ 1336 WARN_ON(!list_empty(&opp_table->opp_list)); 1337 1338 /* Do we already have a prop-name associated with opp_table? */ 1339 if (opp_table->prop_name) { 1340 dev_err(dev, "%s: Already have prop-name %s\n", __func__, 1341 opp_table->prop_name); 1342 ret = -EBUSY; 1343 goto err; 1344 } 1345 1346 opp_table->prop_name = kstrdup(name, GFP_KERNEL); 1347 if (!opp_table->prop_name) { 1348 ret = -ENOMEM; 1349 goto err; 1350 } 1351 1352 mutex_unlock(&opp_table_lock); 1353 return 0; 1354 1355err: 1356 _remove_opp_table(opp_table); 1357unlock: 1358 mutex_unlock(&opp_table_lock); 1359 1360 return ret; 1361} 1362EXPORT_SYMBOL_GPL(dev_pm_opp_set_prop_name); 1363 1364/** 1365 * dev_pm_opp_put_prop_name() - Releases resources blocked for prop-name 1366 * @dev: Device for which the prop-name has to be put. 1367 * 1368 * This is required only for the V2 bindings, and is called for a matching 1369 * dev_pm_opp_set_prop_name(). Until this is called, the opp_table structure 1370 * will not be freed. 1371 * 1372 * Locking: The internal opp_table and opp structures are RCU protected. 1373 * Hence this function internally uses RCU updater strategy with mutex locks 1374 * to keep the integrity of the internal data structures. Callers should ensure 1375 * that this function is *NOT* called under RCU protection or in contexts where 1376 * mutex cannot be locked. 1377 */ 1378void dev_pm_opp_put_prop_name(struct device *dev) 1379{ 1380 struct opp_table *opp_table; 1381 1382 /* Hold our table modification lock here */ 1383 mutex_lock(&opp_table_lock); 1384 1385 /* Check for existing table for 'dev' first */ 1386 opp_table = _find_opp_table(dev); 1387 if (IS_ERR(opp_table)) { 1388 dev_err(dev, "Failed to find opp_table: %ld\n", 1389 PTR_ERR(opp_table)); 1390 goto unlock; 1391 } 1392 1393 /* Make sure there are no concurrent readers while updating opp_table */ 1394 WARN_ON(!list_empty(&opp_table->opp_list)); 1395 1396 if (!opp_table->prop_name) { 1397 dev_err(dev, "%s: Doesn't have a prop-name\n", __func__); 1398 goto unlock; 1399 } 1400 1401 kfree(opp_table->prop_name); 1402 opp_table->prop_name = NULL; 1403 1404 /* Try freeing opp_table if this was the last blocking resource */ 1405 _remove_opp_table(opp_table); 1406 1407unlock: 1408 mutex_unlock(&opp_table_lock); 1409} 1410EXPORT_SYMBOL_GPL(dev_pm_opp_put_prop_name); 1411 1412/** 1413 * dev_pm_opp_set_regulator() - Set regulator name for the device 1414 * @dev: Device for which regulator name is being set. 1415 * @name: Name of the regulator. 1416 * 1417 * In order to support OPP switching, OPP layer needs to know the name of the 1418 * device's regulator, as the core would be required to switch voltages as well. 1419 * 1420 * This must be called before any OPPs are initialized for the device. 1421 * 1422 * Locking: The internal opp_table and opp structures are RCU protected. 1423 * Hence this function internally uses RCU updater strategy with mutex locks 1424 * to keep the integrity of the internal data structures. Callers should ensure 1425 * that this function is *NOT* called under RCU protection or in contexts where 1426 * mutex cannot be locked. 1427 */ 1428int dev_pm_opp_set_regulator(struct device *dev, const char *name) 1429{ 1430 struct opp_table *opp_table; 1431 struct regulator *reg; 1432 int ret; 1433 1434 mutex_lock(&opp_table_lock); 1435 1436 opp_table = _add_opp_table(dev); 1437 if (!opp_table) { 1438 ret = -ENOMEM; 1439 goto unlock; 1440 } 1441 1442 /* This should be called before OPPs are initialized */ 1443 if (WARN_ON(!list_empty(&opp_table->opp_list))) { 1444 ret = -EBUSY; 1445 goto err; 1446 } 1447 1448 /* Already have a regulator set */ 1449 if (WARN_ON(!IS_ERR(opp_table->regulator))) { 1450 ret = -EBUSY; 1451 goto err; 1452 } 1453 /* Allocate the regulator */ 1454 reg = regulator_get_optional(dev, name); 1455 if (IS_ERR(reg)) { 1456 ret = PTR_ERR(reg); 1457 if (ret != -EPROBE_DEFER) 1458 dev_err(dev, "%s: no regulator (%s) found: %d\n", 1459 __func__, name, ret); 1460 goto err; 1461 } 1462 1463 opp_table->regulator = reg; 1464 1465 mutex_unlock(&opp_table_lock); 1466 return 0; 1467 1468err: 1469 _remove_opp_table(opp_table); 1470unlock: 1471 mutex_unlock(&opp_table_lock); 1472 1473 return ret; 1474} 1475EXPORT_SYMBOL_GPL(dev_pm_opp_set_regulator); 1476 1477/** 1478 * dev_pm_opp_put_regulator() - Releases resources blocked for regulator 1479 * @dev: Device for which regulator was set. 1480 * 1481 * Locking: The internal opp_table and opp structures are RCU protected. 1482 * Hence this function internally uses RCU updater strategy with mutex locks 1483 * to keep the integrity of the internal data structures. Callers should ensure 1484 * that this function is *NOT* called under RCU protection or in contexts where 1485 * mutex cannot be locked. 1486 */ 1487void dev_pm_opp_put_regulator(struct device *dev) 1488{ 1489 struct opp_table *opp_table; 1490 1491 mutex_lock(&opp_table_lock); 1492 1493 /* Check for existing table for 'dev' first */ 1494 opp_table = _find_opp_table(dev); 1495 if (IS_ERR(opp_table)) { 1496 dev_err(dev, "Failed to find opp_table: %ld\n", 1497 PTR_ERR(opp_table)); 1498 goto unlock; 1499 } 1500 1501 if (IS_ERR(opp_table->regulator)) { 1502 dev_err(dev, "%s: Doesn't have regulator set\n", __func__); 1503 goto unlock; 1504 } 1505 1506 /* Make sure there are no concurrent readers while updating opp_table */ 1507 WARN_ON(!list_empty(&opp_table->opp_list)); 1508 1509 regulator_put(opp_table->regulator); 1510 opp_table->regulator = ERR_PTR(-ENXIO); 1511 1512 /* Try freeing opp_table if this was the last blocking resource */ 1513 _remove_opp_table(opp_table); 1514 1515unlock: 1516 mutex_unlock(&opp_table_lock); 1517} 1518EXPORT_SYMBOL_GPL(dev_pm_opp_put_regulator); 1519 1520static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table, 1521 struct device_node *np) 1522{ 1523 unsigned int count = opp_table->supported_hw_count; 1524 u32 version; 1525 int ret; 1526 1527 if (!opp_table->supported_hw) 1528 return true; 1529 1530 while (count--) { 1531 ret = of_property_read_u32_index(np, "opp-supported-hw", count, 1532 &version); 1533 if (ret) { 1534 dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n", 1535 __func__, count, ret); 1536 return false; 1537 } 1538 1539 /* Both of these are bitwise masks of the versions */ 1540 if (!(version & opp_table->supported_hw[count])) 1541 return false; 1542 } 1543 1544 return true; 1545} 1546 1547/** 1548 * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings) 1549 * @dev: device for which we do this operation 1550 * @np: device node 1551 * 1552 * This function adds an opp definition to the opp table and returns status. The 1553 * opp can be controlled using dev_pm_opp_enable/disable functions and may be 1554 * removed by dev_pm_opp_remove. 1555 * 1556 * Locking: The internal opp_table and opp structures are RCU protected. 1557 * Hence this function internally uses RCU updater strategy with mutex locks 1558 * to keep the integrity of the internal data structures. Callers should ensure 1559 * that this function is *NOT* called under RCU protection or in contexts where 1560 * mutex cannot be locked. 1561 * 1562 * Return: 1563 * 0 On success OR 1564 * Duplicate OPPs (both freq and volt are same) and opp->available 1565 * -EEXIST Freq are same and volt are different OR 1566 * Duplicate OPPs (both freq and volt are same) and !opp->available 1567 * -ENOMEM Memory allocation failure 1568 * -EINVAL Failed parsing the OPP node 1569 */ 1570static int _opp_add_static_v2(struct device *dev, struct device_node *np) 1571{ 1572 struct opp_table *opp_table; 1573 struct dev_pm_opp *new_opp; 1574 u64 rate; 1575 u32 val; 1576 int ret; 1577 1578 /* Hold our table modification lock here */ 1579 mutex_lock(&opp_table_lock); 1580 1581 new_opp = _allocate_opp(dev, &opp_table); 1582 if (!new_opp) { 1583 ret = -ENOMEM; 1584 goto unlock; 1585 } 1586 1587 ret = of_property_read_u64(np, "opp-hz", &rate); 1588 if (ret < 0) { 1589 dev_err(dev, "%s: opp-hz not found\n", __func__); 1590 goto free_opp; 1591 } 1592 1593 /* Check if the OPP supports hardware's hierarchy of versions or not */ 1594 if (!_opp_is_supported(dev, opp_table, np)) { 1595 dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate); 1596 goto free_opp; 1597 } 1598 1599 /* 1600 * Rate is defined as an unsigned long in clk API, and so casting 1601 * explicitly to its type. Must be fixed once rate is 64 bit 1602 * guaranteed in clk API. 1603 */ 1604 new_opp->rate = (unsigned long)rate; 1605 new_opp->turbo = of_property_read_bool(np, "turbo-mode"); 1606 1607 new_opp->np = np; 1608 new_opp->dynamic = false; 1609 new_opp->available = true; 1610 1611 if (!of_property_read_u32(np, "clock-latency-ns", &val)) 1612 new_opp->clock_latency_ns = val; 1613 1614 ret = opp_parse_supplies(new_opp, dev, opp_table); 1615 if (ret) 1616 goto free_opp; 1617 1618 ret = _opp_add(dev, new_opp, opp_table); 1619 if (ret) 1620 goto free_opp; 1621 1622 /* OPP to select on device suspend */ 1623 if (of_property_read_bool(np, "opp-suspend")) { 1624 if (opp_table->suspend_opp) { 1625 dev_warn(dev, "%s: Multiple suspend OPPs found (%lu %lu)\n", 1626 __func__, opp_table->suspend_opp->rate, 1627 new_opp->rate); 1628 } else { 1629 new_opp->suspend = true; 1630 opp_table->suspend_opp = new_opp; 1631 } 1632 } 1633 1634 if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max) 1635 opp_table->clock_latency_ns_max = new_opp->clock_latency_ns; 1636 1637 mutex_unlock(&opp_table_lock); 1638 1639 pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu\n", 1640 __func__, new_opp->turbo, new_opp->rate, new_opp->u_volt, 1641 new_opp->u_volt_min, new_opp->u_volt_max, 1642 new_opp->clock_latency_ns); 1643 1644 /* 1645 * Notify the changes in the availability of the operable 1646 * frequency/voltage list. 1647 */ 1648 srcu_notifier_call_chain(&opp_table->srcu_head, OPP_EVENT_ADD, new_opp); 1649 return 0; 1650 1651free_opp: 1652 _opp_remove(opp_table, new_opp, false); 1653unlock: 1654 mutex_unlock(&opp_table_lock); 1655 return ret; 1656} 1657 1658/** 1659 * dev_pm_opp_add() - Add an OPP table from a table definitions 1660 * @dev: device for which we do this operation 1661 * @freq: Frequency in Hz for this OPP 1662 * @u_volt: Voltage in uVolts for this OPP 1663 * 1664 * This function adds an opp definition to the opp table and returns status. 1665 * The opp is made available by default and it can be controlled using 1666 * dev_pm_opp_enable/disable functions. 1667 * 1668 * Locking: The internal opp_table and opp structures are RCU protected. 1669 * Hence this function internally uses RCU updater strategy with mutex locks 1670 * to keep the integrity of the internal data structures. Callers should ensure 1671 * that this function is *NOT* called under RCU protection or in contexts where 1672 * mutex cannot be locked. 1673 * 1674 * Return: 1675 * 0 On success OR 1676 * Duplicate OPPs (both freq and volt are same) and opp->available 1677 * -EEXIST Freq are same and volt are different OR 1678 * Duplicate OPPs (both freq and volt are same) and !opp->available 1679 * -ENOMEM Memory allocation failure 1680 */ 1681int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) 1682{ 1683 return _opp_add_v1(dev, freq, u_volt, true); 1684} 1685EXPORT_SYMBOL_GPL(dev_pm_opp_add); 1686 1687/** 1688 * _opp_set_availability() - helper to set the availability of an opp 1689 * @dev: device for which we do this operation 1690 * @freq: OPP frequency to modify availability 1691 * @availability_req: availability status requested for this opp 1692 * 1693 * Set the availability of an OPP with an RCU operation, opp_{enable,disable} 1694 * share a common logic which is isolated here. 1695 * 1696 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 1697 * copy operation, returns 0 if no modification was done OR modification was 1698 * successful. 1699 * 1700 * Locking: The internal opp_table and opp structures are RCU protected. 1701 * Hence this function internally uses RCU updater strategy with mutex locks to 1702 * keep the integrity of the internal data structures. Callers should ensure 1703 * that this function is *NOT* called under RCU protection or in contexts where 1704 * mutex locking or synchronize_rcu() blocking calls cannot be used. 1705 */ 1706static int _opp_set_availability(struct device *dev, unsigned long freq, 1707 bool availability_req) 1708{ 1709 struct opp_table *opp_table; 1710 struct dev_pm_opp *new_opp, *tmp_opp, *opp = ERR_PTR(-ENODEV); 1711 int r = 0; 1712 1713 /* keep the node allocated */ 1714 new_opp = kmalloc(sizeof(*new_opp), GFP_KERNEL); 1715 if (!new_opp) 1716 return -ENOMEM; 1717 1718 mutex_lock(&opp_table_lock); 1719 1720 /* Find the opp_table */ 1721 opp_table = _find_opp_table(dev); 1722 if (IS_ERR(opp_table)) { 1723 r = PTR_ERR(opp_table); 1724 dev_warn(dev, "%s: Device OPP not found (%d)\n", __func__, r); 1725 goto unlock; 1726 } 1727 1728 /* Do we have the frequency? */ 1729 list_for_each_entry(tmp_opp, &opp_table->opp_list, node) { 1730 if (tmp_opp->rate == freq) { 1731 opp = tmp_opp; 1732 break; 1733 } 1734 } 1735 if (IS_ERR(opp)) { 1736 r = PTR_ERR(opp); 1737 goto unlock; 1738 } 1739 1740 /* Is update really needed? */ 1741 if (opp->available == availability_req) 1742 goto unlock; 1743 /* copy the old data over */ 1744 *new_opp = *opp; 1745 1746 /* plug in new node */ 1747 new_opp->available = availability_req; 1748 1749 list_replace_rcu(&opp->node, &new_opp->node); 1750 mutex_unlock(&opp_table_lock); 1751 call_srcu(&opp_table->srcu_head.srcu, &opp->rcu_head, _kfree_opp_rcu); 1752 1753 /* Notify the change of the OPP availability */ 1754 if (availability_req) 1755 srcu_notifier_call_chain(&opp_table->srcu_head, 1756 OPP_EVENT_ENABLE, new_opp); 1757 else 1758 srcu_notifier_call_chain(&opp_table->srcu_head, 1759 OPP_EVENT_DISABLE, new_opp); 1760 1761 return 0; 1762 1763unlock: 1764 mutex_unlock(&opp_table_lock); 1765 kfree(new_opp); 1766 return r; 1767} 1768 1769/** 1770 * dev_pm_opp_enable() - Enable a specific OPP 1771 * @dev: device for which we do this operation 1772 * @freq: OPP frequency to enable 1773 * 1774 * Enables a provided opp. If the operation is valid, this returns 0, else the 1775 * corresponding error value. It is meant to be used for users an OPP available 1776 * after being temporarily made unavailable with dev_pm_opp_disable. 1777 * 1778 * Locking: The internal opp_table and opp structures are RCU protected. 1779 * Hence this function indirectly uses RCU and mutex locks to keep the 1780 * integrity of the internal data structures. Callers should ensure that 1781 * this function is *NOT* called under RCU protection or in contexts where 1782 * mutex locking or synchronize_rcu() blocking calls cannot be used. 1783 * 1784 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 1785 * copy operation, returns 0 if no modification was done OR modification was 1786 * successful. 1787 */ 1788int dev_pm_opp_enable(struct device *dev, unsigned long freq) 1789{ 1790 return _opp_set_availability(dev, freq, true); 1791} 1792EXPORT_SYMBOL_GPL(dev_pm_opp_enable); 1793 1794/** 1795 * dev_pm_opp_disable() - Disable a specific OPP 1796 * @dev: device for which we do this operation 1797 * @freq: OPP frequency to disable 1798 * 1799 * Disables a provided opp. If the operation is valid, this returns 1800 * 0, else the corresponding error value. It is meant to be a temporary 1801 * control by users to make this OPP not available until the circumstances are 1802 * right to make it available again (with a call to dev_pm_opp_enable). 1803 * 1804 * Locking: The internal opp_table and opp structures are RCU protected. 1805 * Hence this function indirectly uses RCU and mutex locks to keep the 1806 * integrity of the internal data structures. Callers should ensure that 1807 * this function is *NOT* called under RCU protection or in contexts where 1808 * mutex locking or synchronize_rcu() blocking calls cannot be used. 1809 * 1810 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the 1811 * copy operation, returns 0 if no modification was done OR modification was 1812 * successful. 1813 */ 1814int dev_pm_opp_disable(struct device *dev, unsigned long freq) 1815{ 1816 return _opp_set_availability(dev, freq, false); 1817} 1818EXPORT_SYMBOL_GPL(dev_pm_opp_disable); 1819 1820/** 1821 * dev_pm_opp_get_notifier() - find notifier_head of the device with opp 1822 * @dev: device pointer used to lookup OPP table. 1823 * 1824 * Return: pointer to notifier head if found, otherwise -ENODEV or 1825 * -EINVAL based on type of error casted as pointer. value must be checked 1826 * with IS_ERR to determine valid pointer or error result. 1827 * 1828 * Locking: This function must be called under rcu_read_lock(). opp_table is a 1829 * RCU protected pointer. The reason for the same is that the opp pointer which 1830 * is returned will remain valid for use with opp_get_{voltage, freq} only while 1831 * under the locked area. The pointer returned must be used prior to unlocking 1832 * with rcu_read_unlock() to maintain the integrity of the pointer. 1833 */ 1834struct srcu_notifier_head *dev_pm_opp_get_notifier(struct device *dev) 1835{ 1836 struct opp_table *opp_table = _find_opp_table(dev); 1837 1838 if (IS_ERR(opp_table)) 1839 return ERR_CAST(opp_table); /* matching type */ 1840 1841 return &opp_table->srcu_head; 1842} 1843EXPORT_SYMBOL_GPL(dev_pm_opp_get_notifier); 1844 1845#ifdef CONFIG_OF 1846/** 1847 * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT 1848 * entries 1849 * @dev: device pointer used to lookup OPP table. 1850 * 1851 * Free OPPs created using static entries present in DT. 1852 * 1853 * Locking: The internal opp_table and opp structures are RCU protected. 1854 * Hence this function indirectly uses RCU updater strategy with mutex locks 1855 * to keep the integrity of the internal data structures. Callers should ensure 1856 * that this function is *NOT* called under RCU protection or in contexts where 1857 * mutex cannot be locked. 1858 */ 1859void dev_pm_opp_of_remove_table(struct device *dev) 1860{ 1861 struct opp_table *opp_table; 1862 struct dev_pm_opp *opp, *tmp; 1863 1864 /* Hold our table modification lock here */ 1865 mutex_lock(&opp_table_lock); 1866 1867 /* Check for existing table for 'dev' */ 1868 opp_table = _find_opp_table(dev); 1869 if (IS_ERR(opp_table)) { 1870 int error = PTR_ERR(opp_table); 1871 1872 if (error != -ENODEV) 1873 WARN(1, "%s: opp_table: %d\n", 1874 IS_ERR_OR_NULL(dev) ? 1875 "Invalid device" : dev_name(dev), 1876 error); 1877 goto unlock; 1878 } 1879 1880 /* Find if opp_table manages a single device */ 1881 if (list_is_singular(&opp_table->dev_list)) { 1882 /* Free static OPPs */ 1883 list_for_each_entry_safe(opp, tmp, &opp_table->opp_list, node) { 1884 if (!opp->dynamic) 1885 _opp_remove(opp_table, opp, true); 1886 } 1887 } else { 1888 _remove_opp_dev(_find_opp_dev(dev, opp_table), opp_table); 1889 } 1890 1891unlock: 1892 mutex_unlock(&opp_table_lock); 1893} 1894EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table); 1895 1896/* Returns opp descriptor node for a device, caller must do of_node_put() */ 1897struct device_node *_of_get_opp_desc_node(struct device *dev) 1898{ 1899 /* 1900 * TODO: Support for multiple OPP tables. 1901 * 1902 * There should be only ONE phandle present in "operating-points-v2" 1903 * property. 1904 */ 1905 1906 return of_parse_phandle(dev->of_node, "operating-points-v2", 0); 1907} 1908 1909/* Initializes OPP tables based on new bindings */ 1910static int _of_add_opp_table_v2(struct device *dev, struct device_node *opp_np) 1911{ 1912 struct device_node *np; 1913 struct opp_table *opp_table; 1914 int ret = 0, count = 0; 1915 1916 mutex_lock(&opp_table_lock); 1917 1918 opp_table = _managed_opp(opp_np); 1919 if (opp_table) { 1920 /* OPPs are already managed */ 1921 if (!_add_opp_dev(dev, opp_table)) 1922 ret = -ENOMEM; 1923 mutex_unlock(&opp_table_lock); 1924 return ret; 1925 } 1926 mutex_unlock(&opp_table_lock); 1927 1928 /* We have opp-table node now, iterate over it and add OPPs */ 1929 for_each_available_child_of_node(opp_np, np) { 1930 count++; 1931 1932 ret = _opp_add_static_v2(dev, np); 1933 if (ret) { 1934 dev_err(dev, "%s: Failed to add OPP, %d\n", __func__, 1935 ret); 1936 goto free_table; 1937 } 1938 } 1939 1940 /* There should be one of more OPP defined */ 1941 if (WARN_ON(!count)) 1942 return -ENOENT; 1943 1944 mutex_lock(&opp_table_lock); 1945 1946 opp_table = _find_opp_table(dev); 1947 if (WARN_ON(IS_ERR(opp_table))) { 1948 ret = PTR_ERR(opp_table); 1949 mutex_unlock(&opp_table_lock); 1950 goto free_table; 1951 } 1952 1953 opp_table->np = opp_np; 1954 opp_table->shared_opp = of_property_read_bool(opp_np, "opp-shared"); 1955 1956 mutex_unlock(&opp_table_lock); 1957 1958 return 0; 1959 1960free_table: 1961 dev_pm_opp_of_remove_table(dev); 1962 1963 return ret; 1964} 1965 1966/* Initializes OPP tables based on old-deprecated bindings */ 1967static int _of_add_opp_table_v1(struct device *dev) 1968{ 1969 const struct property *prop; 1970 const __be32 *val; 1971 int nr; 1972 1973 prop = of_find_property(dev->of_node, "operating-points", NULL); 1974 if (!prop) 1975 return -ENODEV; 1976 if (!prop->value) 1977 return -ENODATA; 1978 1979 /* 1980 * Each OPP is a set of tuples consisting of frequency and 1981 * voltage like <freq-kHz vol-uV>. 1982 */ 1983 nr = prop->length / sizeof(u32); 1984 if (nr % 2) { 1985 dev_err(dev, "%s: Invalid OPP table\n", __func__); 1986 return -EINVAL; 1987 } 1988 1989 val = prop->value; 1990 while (nr) { 1991 unsigned long freq = be32_to_cpup(val++) * 1000; 1992 unsigned long volt = be32_to_cpup(val++); 1993 1994 if (_opp_add_v1(dev, freq, volt, false)) 1995 dev_warn(dev, "%s: Failed to add OPP %ld\n", 1996 __func__, freq); 1997 nr -= 2; 1998 } 1999 2000 return 0; 2001} 2002 2003/** 2004 * dev_pm_opp_of_add_table() - Initialize opp table from device tree 2005 * @dev: device pointer used to lookup OPP table. 2006 * 2007 * Register the initial OPP table with the OPP library for given device. 2008 * 2009 * Locking: The internal opp_table and opp structures are RCU protected. 2010 * Hence this function indirectly uses RCU updater strategy with mutex locks 2011 * to keep the integrity of the internal data structures. Callers should ensure 2012 * that this function is *NOT* called under RCU protection or in contexts where 2013 * mutex cannot be locked. 2014 * 2015 * Return: 2016 * 0 On success OR 2017 * Duplicate OPPs (both freq and volt are same) and opp->available 2018 * -EEXIST Freq are same and volt are different OR 2019 * Duplicate OPPs (both freq and volt are same) and !opp->available 2020 * -ENOMEM Memory allocation failure 2021 * -ENODEV when 'operating-points' property is not found or is invalid data 2022 * in device node. 2023 * -ENODATA when empty 'operating-points' property is found 2024 * -EINVAL when invalid entries are found in opp-v2 table 2025 */ 2026int dev_pm_opp_of_add_table(struct device *dev) 2027{ 2028 struct device_node *opp_np; 2029 int ret; 2030 2031 /* 2032 * OPPs have two version of bindings now. The older one is deprecated, 2033 * try for the new binding first. 2034 */ 2035 opp_np = _of_get_opp_desc_node(dev); 2036 if (!opp_np) { 2037 /* 2038 * Try old-deprecated bindings for backward compatibility with 2039 * older dtbs. 2040 */ 2041 return _of_add_opp_table_v1(dev); 2042 } 2043 2044 ret = _of_add_opp_table_v2(dev, opp_np); 2045 of_node_put(opp_np); 2046 2047 return ret; 2048} 2049EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table); 2050#endif