1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Generic OPP OF helpers 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/cpu.h> 14 #include <linux/errno.h> 15 #include <linux/device.h> 16 #include <linux/of_device.h> 17 #include <linux/pm_domain.h> 18 #include <linux/slab.h> 19 #include <linux/export.h> 20 #include <linux/energy_model.h> 21 22 #include "opp.h" 23 24 /* 25 * Returns opp descriptor node for a device node, caller must 26 * do of_node_put(). 27 */ 28 static struct device_node *_opp_of_get_opp_desc_node(struct device_node *np, 29 int index) 30 { 31 /* "operating-points-v2" can be an array for power domain providers */ 32 return of_parse_phandle(np, "operating-points-v2", index); 33 } 34 35 /* Returns opp descriptor node for a device, caller must do of_node_put() */ 36 struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev) 37 { 38 return _opp_of_get_opp_desc_node(dev->of_node, 0); 39 } 40 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_opp_desc_node); 41 42 struct opp_table *_managed_opp(struct device *dev, int index) 43 { 44 struct opp_table *opp_table, *managed_table = NULL; 45 struct device_node *np; 46 47 np = _opp_of_get_opp_desc_node(dev->of_node, index); 48 if (!np) 49 return NULL; 50 51 list_for_each_entry(opp_table, &opp_tables, node) { 52 if (opp_table->np == np) { 53 /* 54 * Multiple devices can point to the same OPP table and 55 * so will have same node-pointer, np. 56 * 57 * But the OPPs will be considered as shared only if the 58 * OPP table contains a "opp-shared" property. 59 */ 60 if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) { 61 _get_opp_table_kref(opp_table); 62 managed_table = opp_table; 63 } 64 65 break; 66 } 67 } 68 69 of_node_put(np); 70 71 return managed_table; 72 } 73 74 /* The caller must call dev_pm_opp_put() after the OPP is used */ 75 static struct dev_pm_opp *_find_opp_of_np(struct opp_table *opp_table, 76 struct device_node *opp_np) 77 { 78 struct dev_pm_opp *opp; 79 80 mutex_lock(&opp_table->lock); 81 82 list_for_each_entry(opp, &opp_table->opp_list, node) { 83 if (opp->np == opp_np) { 84 dev_pm_opp_get(opp); 85 mutex_unlock(&opp_table->lock); 86 return opp; 87 } 88 } 89 90 mutex_unlock(&opp_table->lock); 91 92 return NULL; 93 } 94 95 static struct device_node *of_parse_required_opp(struct device_node *np, 96 int index) 97 { 98 struct device_node *required_np; 99 100 required_np = of_parse_phandle(np, "required-opps", index); 101 if (unlikely(!required_np)) { 102 pr_err("%s: Unable to parse required-opps: %pOF, index: %d\n", 103 __func__, np, index); 104 } 105 106 return required_np; 107 } 108 109 /* The caller must call dev_pm_opp_put_opp_table() after the table is used */ 110 static struct opp_table *_find_table_of_opp_np(struct device_node *opp_np) 111 { 112 struct opp_table *opp_table; 113 struct device_node *opp_table_np; 114 115 opp_table_np = of_get_parent(opp_np); 116 if (!opp_table_np) 117 goto err; 118 119 /* It is safe to put the node now as all we need now is its address */ 120 of_node_put(opp_table_np); 121 122 mutex_lock(&opp_table_lock); 123 list_for_each_entry(opp_table, &opp_tables, node) { 124 if (opp_table_np == opp_table->np) { 125 _get_opp_table_kref(opp_table); 126 mutex_unlock(&opp_table_lock); 127 return opp_table; 128 } 129 } 130 mutex_unlock(&opp_table_lock); 131 132 err: 133 return ERR_PTR(-ENODEV); 134 } 135 136 /* Free resources previously acquired by _opp_table_alloc_required_tables() */ 137 static void _opp_table_free_required_tables(struct opp_table *opp_table) 138 { 139 struct opp_table **required_opp_tables = opp_table->required_opp_tables; 140 int i; 141 142 if (!required_opp_tables) 143 return; 144 145 for (i = 0; i < opp_table->required_opp_count; i++) { 146 if (IS_ERR_OR_NULL(required_opp_tables[i])) 147 break; 148 149 dev_pm_opp_put_opp_table(required_opp_tables[i]); 150 } 151 152 kfree(required_opp_tables); 153 154 opp_table->required_opp_count = 0; 155 opp_table->required_opp_tables = NULL; 156 } 157 158 /* 159 * Populate all devices and opp tables which are part of "required-opps" list. 160 * Checking only the first OPP node should be enough. 161 */ 162 static void _opp_table_alloc_required_tables(struct opp_table *opp_table, 163 struct device *dev, 164 struct device_node *opp_np) 165 { 166 struct opp_table **required_opp_tables; 167 struct device_node *required_np, *np; 168 int count, i; 169 170 /* Traversing the first OPP node is all we need */ 171 np = of_get_next_available_child(opp_np, NULL); 172 if (!np) { 173 dev_warn(dev, "Empty OPP table\n"); 174 175 return; 176 } 177 178 count = of_count_phandle_with_args(np, "required-opps", NULL); 179 if (!count) 180 goto put_np; 181 182 required_opp_tables = kcalloc(count, sizeof(*required_opp_tables), 183 GFP_KERNEL); 184 if (!required_opp_tables) 185 goto put_np; 186 187 opp_table->required_opp_tables = required_opp_tables; 188 opp_table->required_opp_count = count; 189 190 for (i = 0; i < count; i++) { 191 required_np = of_parse_required_opp(np, i); 192 if (!required_np) 193 goto free_required_tables; 194 195 required_opp_tables[i] = _find_table_of_opp_np(required_np); 196 of_node_put(required_np); 197 198 if (IS_ERR(required_opp_tables[i])) 199 goto free_required_tables; 200 201 /* 202 * We only support genpd's OPPs in the "required-opps" for now, 203 * as we don't know how much about other cases. Error out if the 204 * required OPP doesn't belong to a genpd. 205 */ 206 if (!required_opp_tables[i]->is_genpd) { 207 dev_err(dev, "required-opp doesn't belong to genpd: %pOF\n", 208 required_np); 209 goto free_required_tables; 210 } 211 } 212 213 goto put_np; 214 215 free_required_tables: 216 _opp_table_free_required_tables(opp_table); 217 put_np: 218 of_node_put(np); 219 } 220 221 void _of_init_opp_table(struct opp_table *opp_table, struct device *dev, 222 int index) 223 { 224 struct device_node *np, *opp_np; 225 u32 val; 226 227 /* 228 * Only required for backward compatibility with v1 bindings, but isn't 229 * harmful for other cases. And so we do it unconditionally. 230 */ 231 np = of_node_get(dev->of_node); 232 if (!np) 233 return; 234 235 if (!of_property_read_u32(np, "clock-latency", &val)) 236 opp_table->clock_latency_ns_max = val; 237 of_property_read_u32(np, "voltage-tolerance", 238 &opp_table->voltage_tolerance_v1); 239 240 if (of_find_property(np, "#power-domain-cells", NULL)) 241 opp_table->is_genpd = true; 242 243 /* Get OPP table node */ 244 opp_np = _opp_of_get_opp_desc_node(np, index); 245 of_node_put(np); 246 247 if (!opp_np) 248 return; 249 250 if (of_property_read_bool(opp_np, "opp-shared")) 251 opp_table->shared_opp = OPP_TABLE_ACCESS_SHARED; 252 else 253 opp_table->shared_opp = OPP_TABLE_ACCESS_EXCLUSIVE; 254 255 opp_table->np = opp_np; 256 257 _opp_table_alloc_required_tables(opp_table, dev, opp_np); 258 of_node_put(opp_np); 259 } 260 261 void _of_clear_opp_table(struct opp_table *opp_table) 262 { 263 _opp_table_free_required_tables(opp_table); 264 } 265 266 /* 267 * Release all resources previously acquired with a call to 268 * _of_opp_alloc_required_opps(). 269 */ 270 void _of_opp_free_required_opps(struct opp_table *opp_table, 271 struct dev_pm_opp *opp) 272 { 273 struct dev_pm_opp **required_opps = opp->required_opps; 274 int i; 275 276 if (!required_opps) 277 return; 278 279 for (i = 0; i < opp_table->required_opp_count; i++) { 280 if (!required_opps[i]) 281 break; 282 283 /* Put the reference back */ 284 dev_pm_opp_put(required_opps[i]); 285 } 286 287 kfree(required_opps); 288 opp->required_opps = NULL; 289 } 290 291 /* Populate all required OPPs which are part of "required-opps" list */ 292 static int _of_opp_alloc_required_opps(struct opp_table *opp_table, 293 struct dev_pm_opp *opp) 294 { 295 struct dev_pm_opp **required_opps; 296 struct opp_table *required_table; 297 struct device_node *np; 298 int i, ret, count = opp_table->required_opp_count; 299 300 if (!count) 301 return 0; 302 303 required_opps = kcalloc(count, sizeof(*required_opps), GFP_KERNEL); 304 if (!required_opps) 305 return -ENOMEM; 306 307 opp->required_opps = required_opps; 308 309 for (i = 0; i < count; i++) { 310 required_table = opp_table->required_opp_tables[i]; 311 312 np = of_parse_required_opp(opp->np, i); 313 if (unlikely(!np)) { 314 ret = -ENODEV; 315 goto free_required_opps; 316 } 317 318 required_opps[i] = _find_opp_of_np(required_table, np); 319 of_node_put(np); 320 321 if (!required_opps[i]) { 322 pr_err("%s: Unable to find required OPP node: %pOF (%d)\n", 323 __func__, opp->np, i); 324 ret = -ENODEV; 325 goto free_required_opps; 326 } 327 } 328 329 return 0; 330 331 free_required_opps: 332 _of_opp_free_required_opps(opp_table, opp); 333 334 return ret; 335 } 336 337 static int _bandwidth_supported(struct device *dev, struct opp_table *opp_table) 338 { 339 struct device_node *np, *opp_np; 340 struct property *prop; 341 342 if (!opp_table) { 343 np = of_node_get(dev->of_node); 344 if (!np) 345 return -ENODEV; 346 347 opp_np = _opp_of_get_opp_desc_node(np, 0); 348 of_node_put(np); 349 } else { 350 opp_np = of_node_get(opp_table->np); 351 } 352 353 /* Lets not fail in case we are parsing opp-v1 bindings */ 354 if (!opp_np) 355 return 0; 356 357 /* Checking only first OPP is sufficient */ 358 np = of_get_next_available_child(opp_np, NULL); 359 if (!np) { 360 dev_err(dev, "OPP table empty\n"); 361 return -EINVAL; 362 } 363 of_node_put(opp_np); 364 365 prop = of_find_property(np, "opp-peak-kBps", NULL); 366 of_node_put(np); 367 368 if (!prop || !prop->length) 369 return 0; 370 371 return 1; 372 } 373 374 int dev_pm_opp_of_find_icc_paths(struct device *dev, 375 struct opp_table *opp_table) 376 { 377 struct device_node *np; 378 int ret, i, count, num_paths; 379 struct icc_path **paths; 380 381 ret = _bandwidth_supported(dev, opp_table); 382 if (ret == -EINVAL) 383 return 0; /* Empty OPP table is a valid corner-case, let's not fail */ 384 else if (ret <= 0) 385 return ret; 386 387 ret = 0; 388 389 np = of_node_get(dev->of_node); 390 if (!np) 391 return 0; 392 393 count = of_count_phandle_with_args(np, "interconnects", 394 "#interconnect-cells"); 395 of_node_put(np); 396 if (count < 0) 397 return 0; 398 399 /* two phandles when #interconnect-cells = <1> */ 400 if (count % 2) { 401 dev_err(dev, "%s: Invalid interconnects values\n", __func__); 402 return -EINVAL; 403 } 404 405 num_paths = count / 2; 406 paths = kcalloc(num_paths, sizeof(*paths), GFP_KERNEL); 407 if (!paths) 408 return -ENOMEM; 409 410 for (i = 0; i < num_paths; i++) { 411 paths[i] = of_icc_get_by_index(dev, i); 412 if (IS_ERR(paths[i])) { 413 ret = PTR_ERR(paths[i]); 414 if (ret != -EPROBE_DEFER) { 415 dev_err(dev, "%s: Unable to get path%d: %d\n", 416 __func__, i, ret); 417 } 418 goto err; 419 } 420 } 421 422 if (opp_table) { 423 opp_table->paths = paths; 424 opp_table->path_count = num_paths; 425 return 0; 426 } 427 428 err: 429 while (i--) 430 icc_put(paths[i]); 431 432 kfree(paths); 433 434 return ret; 435 } 436 EXPORT_SYMBOL_GPL(dev_pm_opp_of_find_icc_paths); 437 438 static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table, 439 struct device_node *np) 440 { 441 unsigned int levels = opp_table->supported_hw_count; 442 int count, versions, ret, i, j; 443 u32 val; 444 445 if (!opp_table->supported_hw) { 446 /* 447 * In the case that no supported_hw has been set by the 448 * platform but there is an opp-supported-hw value set for 449 * an OPP then the OPP should not be enabled as there is 450 * no way to see if the hardware supports it. 451 */ 452 if (of_find_property(np, "opp-supported-hw", NULL)) 453 return false; 454 else 455 return true; 456 } 457 458 count = of_property_count_u32_elems(np, "opp-supported-hw"); 459 if (count <= 0 || count % levels) { 460 dev_err(dev, "%s: Invalid opp-supported-hw property (%d)\n", 461 __func__, count); 462 return false; 463 } 464 465 versions = count / levels; 466 467 /* All levels in at least one of the versions should match */ 468 for (i = 0; i < versions; i++) { 469 bool supported = true; 470 471 for (j = 0; j < levels; j++) { 472 ret = of_property_read_u32_index(np, "opp-supported-hw", 473 i * levels + j, &val); 474 if (ret) { 475 dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n", 476 __func__, i * levels + j, ret); 477 return false; 478 } 479 480 /* Check if the level is supported */ 481 if (!(val & opp_table->supported_hw[j])) { 482 supported = false; 483 break; 484 } 485 } 486 487 if (supported) 488 return true; 489 } 490 491 return false; 492 } 493 494 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev, 495 struct opp_table *opp_table) 496 { 497 u32 *microvolt, *microamp = NULL; 498 int supplies = opp_table->regulator_count, vcount, icount, ret, i, j; 499 struct property *prop = NULL; 500 char name[NAME_MAX]; 501 502 /* Search for "opp-microvolt-<name>" */ 503 if (opp_table->prop_name) { 504 snprintf(name, sizeof(name), "opp-microvolt-%s", 505 opp_table->prop_name); 506 prop = of_find_property(opp->np, name, NULL); 507 } 508 509 if (!prop) { 510 /* Search for "opp-microvolt" */ 511 sprintf(name, "opp-microvolt"); 512 prop = of_find_property(opp->np, name, NULL); 513 514 /* Missing property isn't a problem, but an invalid entry is */ 515 if (!prop) { 516 if (unlikely(supplies == -1)) { 517 /* Initialize regulator_count */ 518 opp_table->regulator_count = 0; 519 return 0; 520 } 521 522 if (!supplies) 523 return 0; 524 525 dev_err(dev, "%s: opp-microvolt missing although OPP managing regulators\n", 526 __func__); 527 return -EINVAL; 528 } 529 } 530 531 if (unlikely(supplies == -1)) { 532 /* Initialize regulator_count */ 533 supplies = opp_table->regulator_count = 1; 534 } else if (unlikely(!supplies)) { 535 dev_err(dev, "%s: opp-microvolt wasn't expected\n", __func__); 536 return -EINVAL; 537 } 538 539 vcount = of_property_count_u32_elems(opp->np, name); 540 if (vcount < 0) { 541 dev_err(dev, "%s: Invalid %s property (%d)\n", 542 __func__, name, vcount); 543 return vcount; 544 } 545 546 /* There can be one or three elements per supply */ 547 if (vcount != supplies && vcount != supplies * 3) { 548 dev_err(dev, "%s: Invalid number of elements in %s property (%d) with supplies (%d)\n", 549 __func__, name, vcount, supplies); 550 return -EINVAL; 551 } 552 553 microvolt = kmalloc_array(vcount, sizeof(*microvolt), GFP_KERNEL); 554 if (!microvolt) 555 return -ENOMEM; 556 557 ret = of_property_read_u32_array(opp->np, name, microvolt, vcount); 558 if (ret) { 559 dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret); 560 ret = -EINVAL; 561 goto free_microvolt; 562 } 563 564 /* Search for "opp-microamp-<name>" */ 565 prop = NULL; 566 if (opp_table->prop_name) { 567 snprintf(name, sizeof(name), "opp-microamp-%s", 568 opp_table->prop_name); 569 prop = of_find_property(opp->np, name, NULL); 570 } 571 572 if (!prop) { 573 /* Search for "opp-microamp" */ 574 sprintf(name, "opp-microamp"); 575 prop = of_find_property(opp->np, name, NULL); 576 } 577 578 if (prop) { 579 icount = of_property_count_u32_elems(opp->np, name); 580 if (icount < 0) { 581 dev_err(dev, "%s: Invalid %s property (%d)\n", __func__, 582 name, icount); 583 ret = icount; 584 goto free_microvolt; 585 } 586 587 if (icount != supplies) { 588 dev_err(dev, "%s: Invalid number of elements in %s property (%d) with supplies (%d)\n", 589 __func__, name, icount, supplies); 590 ret = -EINVAL; 591 goto free_microvolt; 592 } 593 594 microamp = kmalloc_array(icount, sizeof(*microamp), GFP_KERNEL); 595 if (!microamp) { 596 ret = -EINVAL; 597 goto free_microvolt; 598 } 599 600 ret = of_property_read_u32_array(opp->np, name, microamp, 601 icount); 602 if (ret) { 603 dev_err(dev, "%s: error parsing %s: %d\n", __func__, 604 name, ret); 605 ret = -EINVAL; 606 goto free_microamp; 607 } 608 } 609 610 for (i = 0, j = 0; i < supplies; i++) { 611 opp->supplies[i].u_volt = microvolt[j++]; 612 613 if (vcount == supplies) { 614 opp->supplies[i].u_volt_min = opp->supplies[i].u_volt; 615 opp->supplies[i].u_volt_max = opp->supplies[i].u_volt; 616 } else { 617 opp->supplies[i].u_volt_min = microvolt[j++]; 618 opp->supplies[i].u_volt_max = microvolt[j++]; 619 } 620 621 if (microamp) 622 opp->supplies[i].u_amp = microamp[i]; 623 } 624 625 free_microamp: 626 kfree(microamp); 627 free_microvolt: 628 kfree(microvolt); 629 630 return ret; 631 } 632 633 /** 634 * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT 635 * entries 636 * @dev: device pointer used to lookup OPP table. 637 * 638 * Free OPPs created using static entries present in DT. 639 */ 640 void dev_pm_opp_of_remove_table(struct device *dev) 641 { 642 dev_pm_opp_remove_table(dev); 643 } 644 EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table); 645 646 static int _read_bw(struct dev_pm_opp *new_opp, struct opp_table *table, 647 struct device_node *np, bool peak) 648 { 649 const char *name = peak ? "opp-peak-kBps" : "opp-avg-kBps"; 650 struct property *prop; 651 int i, count, ret; 652 u32 *bw; 653 654 prop = of_find_property(np, name, NULL); 655 if (!prop) 656 return -ENODEV; 657 658 count = prop->length / sizeof(u32); 659 if (table->path_count != count) { 660 pr_err("%s: Mismatch between %s and paths (%d %d)\n", 661 __func__, name, count, table->path_count); 662 return -EINVAL; 663 } 664 665 bw = kmalloc_array(count, sizeof(*bw), GFP_KERNEL); 666 if (!bw) 667 return -ENOMEM; 668 669 ret = of_property_read_u32_array(np, name, bw, count); 670 if (ret) { 671 pr_err("%s: Error parsing %s: %d\n", __func__, name, ret); 672 goto out; 673 } 674 675 for (i = 0; i < count; i++) { 676 if (peak) 677 new_opp->bandwidth[i].peak = kBps_to_icc(bw[i]); 678 else 679 new_opp->bandwidth[i].avg = kBps_to_icc(bw[i]); 680 } 681 682 out: 683 kfree(bw); 684 return ret; 685 } 686 687 static int _read_opp_key(struct dev_pm_opp *new_opp, struct opp_table *table, 688 struct device_node *np, bool *rate_not_available) 689 { 690 bool found = false; 691 u64 rate; 692 int ret; 693 694 ret = of_property_read_u64(np, "opp-hz", &rate); 695 if (!ret) { 696 /* 697 * Rate is defined as an unsigned long in clk API, and so 698 * casting explicitly to its type. Must be fixed once rate is 64 699 * bit guaranteed in clk API. 700 */ 701 new_opp->rate = (unsigned long)rate; 702 found = true; 703 } 704 *rate_not_available = !!ret; 705 706 /* 707 * Bandwidth consists of peak and average (optional) values: 708 * opp-peak-kBps = <path1_value path2_value>; 709 * opp-avg-kBps = <path1_value path2_value>; 710 */ 711 ret = _read_bw(new_opp, table, np, true); 712 if (!ret) { 713 found = true; 714 ret = _read_bw(new_opp, table, np, false); 715 } 716 717 /* The properties were found but we failed to parse them */ 718 if (ret && ret != -ENODEV) 719 return ret; 720 721 if (!of_property_read_u32(np, "opp-level", &new_opp->level)) 722 found = true; 723 724 if (found) 725 return 0; 726 727 return ret; 728 } 729 730 /** 731 * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings) 732 * @opp_table: OPP table 733 * @dev: device for which we do this operation 734 * @np: device node 735 * 736 * This function adds an opp definition to the opp table and returns status. The 737 * opp can be controlled using dev_pm_opp_enable/disable functions and may be 738 * removed by dev_pm_opp_remove. 739 * 740 * Return: 741 * Valid OPP pointer: 742 * On success 743 * NULL: 744 * Duplicate OPPs (both freq and volt are same) and opp->available 745 * OR if the OPP is not supported by hardware. 746 * ERR_PTR(-EEXIST): 747 * Freq are same and volt are different OR 748 * Duplicate OPPs (both freq and volt are same) and !opp->available 749 * ERR_PTR(-ENOMEM): 750 * Memory allocation failure 751 * ERR_PTR(-EINVAL): 752 * Failed parsing the OPP node 753 */ 754 static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table, 755 struct device *dev, struct device_node *np) 756 { 757 struct dev_pm_opp *new_opp; 758 u64 rate = 0; 759 u32 val; 760 int ret; 761 bool rate_not_available = false; 762 763 new_opp = _opp_allocate(opp_table); 764 if (!new_opp) 765 return ERR_PTR(-ENOMEM); 766 767 ret = _read_opp_key(new_opp, opp_table, np, &rate_not_available); 768 if (ret < 0 && !opp_table->is_genpd) { 769 dev_err(dev, "%s: opp key field not found\n", __func__); 770 goto free_opp; 771 } 772 773 /* Check if the OPP supports hardware's hierarchy of versions or not */ 774 if (!_opp_is_supported(dev, opp_table, np)) { 775 dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate); 776 goto free_opp; 777 } 778 779 new_opp->turbo = of_property_read_bool(np, "turbo-mode"); 780 781 new_opp->np = np; 782 new_opp->dynamic = false; 783 new_opp->available = true; 784 785 ret = _of_opp_alloc_required_opps(opp_table, new_opp); 786 if (ret) 787 goto free_opp; 788 789 if (!of_property_read_u32(np, "clock-latency-ns", &val)) 790 new_opp->clock_latency_ns = val; 791 792 ret = opp_parse_supplies(new_opp, dev, opp_table); 793 if (ret) 794 goto free_required_opps; 795 796 if (opp_table->is_genpd) 797 new_opp->pstate = pm_genpd_opp_to_performance_state(dev, new_opp); 798 799 ret = _opp_add(dev, new_opp, opp_table, rate_not_available); 800 if (ret) { 801 /* Don't return error for duplicate OPPs */ 802 if (ret == -EBUSY) 803 ret = 0; 804 goto free_required_opps; 805 } 806 807 /* OPP to select on device suspend */ 808 if (of_property_read_bool(np, "opp-suspend")) { 809 if (opp_table->suspend_opp) { 810 /* Pick the OPP with higher rate as suspend OPP */ 811 if (new_opp->rate > opp_table->suspend_opp->rate) { 812 opp_table->suspend_opp->suspend = false; 813 new_opp->suspend = true; 814 opp_table->suspend_opp = new_opp; 815 } 816 } else { 817 new_opp->suspend = true; 818 opp_table->suspend_opp = new_opp; 819 } 820 } 821 822 if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max) 823 opp_table->clock_latency_ns_max = new_opp->clock_latency_ns; 824 825 pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu\n", 826 __func__, new_opp->turbo, new_opp->rate, 827 new_opp->supplies[0].u_volt, new_opp->supplies[0].u_volt_min, 828 new_opp->supplies[0].u_volt_max, new_opp->clock_latency_ns); 829 830 /* 831 * Notify the changes in the availability of the operable 832 * frequency/voltage list. 833 */ 834 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ADD, new_opp); 835 return new_opp; 836 837 free_required_opps: 838 _of_opp_free_required_opps(opp_table, new_opp); 839 free_opp: 840 _opp_free(new_opp); 841 842 return ERR_PTR(ret); 843 } 844 845 /* Initializes OPP tables based on new bindings */ 846 static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table) 847 { 848 struct device_node *np; 849 int ret, count = 0; 850 struct dev_pm_opp *opp; 851 852 /* OPP table is already initialized for the device */ 853 mutex_lock(&opp_table->lock); 854 if (opp_table->parsed_static_opps) { 855 opp_table->parsed_static_opps++; 856 mutex_unlock(&opp_table->lock); 857 return 0; 858 } 859 860 opp_table->parsed_static_opps = 1; 861 mutex_unlock(&opp_table->lock); 862 863 /* We have opp-table node now, iterate over it and add OPPs */ 864 for_each_available_child_of_node(opp_table->np, np) { 865 opp = _opp_add_static_v2(opp_table, dev, np); 866 if (IS_ERR(opp)) { 867 ret = PTR_ERR(opp); 868 dev_err(dev, "%s: Failed to add OPP, %d\n", __func__, 869 ret); 870 of_node_put(np); 871 goto remove_static_opp; 872 } else if (opp) { 873 count++; 874 } 875 } 876 877 /* There should be one of more OPP defined */ 878 if (WARN_ON(!count)) { 879 ret = -ENOENT; 880 goto remove_static_opp; 881 } 882 883 list_for_each_entry(opp, &opp_table->opp_list, node) { 884 /* Any non-zero performance state would enable the feature */ 885 if (opp->pstate) { 886 opp_table->genpd_performance_state = true; 887 break; 888 } 889 } 890 891 return 0; 892 893 remove_static_opp: 894 _opp_remove_all_static(opp_table); 895 896 return ret; 897 } 898 899 /* Initializes OPP tables based on old-deprecated bindings */ 900 static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table) 901 { 902 const struct property *prop; 903 const __be32 *val; 904 int nr, ret = 0; 905 906 mutex_lock(&opp_table->lock); 907 if (opp_table->parsed_static_opps) { 908 opp_table->parsed_static_opps++; 909 mutex_unlock(&opp_table->lock); 910 return 0; 911 } 912 913 opp_table->parsed_static_opps = 1; 914 mutex_unlock(&opp_table->lock); 915 916 prop = of_find_property(dev->of_node, "operating-points", NULL); 917 if (!prop) { 918 ret = -ENODEV; 919 goto remove_static_opp; 920 } 921 if (!prop->value) { 922 ret = -ENODATA; 923 goto remove_static_opp; 924 } 925 926 /* 927 * Each OPP is a set of tuples consisting of frequency and 928 * voltage like <freq-kHz vol-uV>. 929 */ 930 nr = prop->length / sizeof(u32); 931 if (nr % 2) { 932 dev_err(dev, "%s: Invalid OPP table\n", __func__); 933 ret = -EINVAL; 934 goto remove_static_opp; 935 } 936 937 val = prop->value; 938 while (nr) { 939 unsigned long freq = be32_to_cpup(val++) * 1000; 940 unsigned long volt = be32_to_cpup(val++); 941 942 ret = _opp_add_v1(opp_table, dev, freq, volt, false); 943 if (ret) { 944 dev_err(dev, "%s: Failed to add OPP %ld (%d)\n", 945 __func__, freq, ret); 946 goto remove_static_opp; 947 } 948 nr -= 2; 949 } 950 951 return 0; 952 953 remove_static_opp: 954 _opp_remove_all_static(opp_table); 955 956 return ret; 957 } 958 959 /** 960 * dev_pm_opp_of_add_table() - Initialize opp table from device tree 961 * @dev: device pointer used to lookup OPP table. 962 * 963 * Register the initial OPP table with the OPP library for given device. 964 * 965 * Return: 966 * 0 On success OR 967 * Duplicate OPPs (both freq and volt are same) and opp->available 968 * -EEXIST Freq are same and volt are different OR 969 * Duplicate OPPs (both freq and volt are same) and !opp->available 970 * -ENOMEM Memory allocation failure 971 * -ENODEV when 'operating-points' property is not found or is invalid data 972 * in device node. 973 * -ENODATA when empty 'operating-points' property is found 974 * -EINVAL when invalid entries are found in opp-v2 table 975 */ 976 int dev_pm_opp_of_add_table(struct device *dev) 977 { 978 struct opp_table *opp_table; 979 int ret; 980 981 opp_table = _add_opp_table_indexed(dev, 0); 982 if (IS_ERR(opp_table)) 983 return PTR_ERR(opp_table); 984 985 /* 986 * OPPs have two version of bindings now. Also try the old (v1) 987 * bindings for backward compatibility with older dtbs. 988 */ 989 if (opp_table->np) 990 ret = _of_add_opp_table_v2(dev, opp_table); 991 else 992 ret = _of_add_opp_table_v1(dev, opp_table); 993 994 if (ret) 995 dev_pm_opp_put_opp_table(opp_table); 996 997 return ret; 998 } 999 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table); 1000 1001 /** 1002 * dev_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree 1003 * @dev: device pointer used to lookup OPP table. 1004 * @index: Index number. 1005 * 1006 * Register the initial OPP table with the OPP library for given device only 1007 * using the "operating-points-v2" property. 1008 * 1009 * Return: 1010 * 0 On success OR 1011 * Duplicate OPPs (both freq and volt are same) and opp->available 1012 * -EEXIST Freq are same and volt are different OR 1013 * Duplicate OPPs (both freq and volt are same) and !opp->available 1014 * -ENOMEM Memory allocation failure 1015 * -ENODEV when 'operating-points' property is not found or is invalid data 1016 * in device node. 1017 * -ENODATA when empty 'operating-points' property is found 1018 * -EINVAL when invalid entries are found in opp-v2 table 1019 */ 1020 int dev_pm_opp_of_add_table_indexed(struct device *dev, int index) 1021 { 1022 struct opp_table *opp_table; 1023 int ret, count; 1024 1025 if (index) { 1026 /* 1027 * If only one phandle is present, then the same OPP table 1028 * applies for all index requests. 1029 */ 1030 count = of_count_phandle_with_args(dev->of_node, 1031 "operating-points-v2", NULL); 1032 if (count == 1) 1033 index = 0; 1034 } 1035 1036 opp_table = _add_opp_table_indexed(dev, index); 1037 if (IS_ERR(opp_table)) 1038 return PTR_ERR(opp_table); 1039 1040 ret = _of_add_opp_table_v2(dev, opp_table); 1041 if (ret) 1042 dev_pm_opp_put_opp_table(opp_table); 1043 1044 return ret; 1045 } 1046 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table_indexed); 1047 1048 /* CPU device specific helpers */ 1049 1050 /** 1051 * dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask 1052 * @cpumask: cpumask for which OPP table needs to be removed 1053 * 1054 * This removes the OPP tables for CPUs present in the @cpumask. 1055 * This should be used only to remove static entries created from DT. 1056 */ 1057 void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask) 1058 { 1059 _dev_pm_opp_cpumask_remove_table(cpumask, -1); 1060 } 1061 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table); 1062 1063 /** 1064 * dev_pm_opp_of_cpumask_add_table() - Adds OPP table for @cpumask 1065 * @cpumask: cpumask for which OPP table needs to be added. 1066 * 1067 * This adds the OPP tables for CPUs present in the @cpumask. 1068 */ 1069 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask) 1070 { 1071 struct device *cpu_dev; 1072 int cpu, ret; 1073 1074 if (WARN_ON(cpumask_empty(cpumask))) 1075 return -ENODEV; 1076 1077 for_each_cpu(cpu, cpumask) { 1078 cpu_dev = get_cpu_device(cpu); 1079 if (!cpu_dev) { 1080 pr_err("%s: failed to get cpu%d device\n", __func__, 1081 cpu); 1082 ret = -ENODEV; 1083 goto remove_table; 1084 } 1085 1086 ret = dev_pm_opp_of_add_table(cpu_dev); 1087 if (ret) { 1088 /* 1089 * OPP may get registered dynamically, don't print error 1090 * message here. 1091 */ 1092 pr_debug("%s: couldn't find opp table for cpu:%d, %d\n", 1093 __func__, cpu, ret); 1094 1095 goto remove_table; 1096 } 1097 } 1098 1099 return 0; 1100 1101 remove_table: 1102 /* Free all other OPPs */ 1103 _dev_pm_opp_cpumask_remove_table(cpumask, cpu); 1104 1105 return ret; 1106 } 1107 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table); 1108 1109 /* 1110 * Works only for OPP v2 bindings. 1111 * 1112 * Returns -ENOENT if operating-points-v2 bindings aren't supported. 1113 */ 1114 /** 1115 * dev_pm_opp_of_get_sharing_cpus() - Get cpumask of CPUs sharing OPPs with 1116 * @cpu_dev using operating-points-v2 1117 * bindings. 1118 * 1119 * @cpu_dev: CPU device for which we do this operation 1120 * @cpumask: cpumask to update with information of sharing CPUs 1121 * 1122 * This updates the @cpumask with CPUs that are sharing OPPs with @cpu_dev. 1123 * 1124 * Returns -ENOENT if operating-points-v2 isn't present for @cpu_dev. 1125 */ 1126 int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, 1127 struct cpumask *cpumask) 1128 { 1129 struct device_node *np, *tmp_np, *cpu_np; 1130 int cpu, ret = 0; 1131 1132 /* Get OPP descriptor node */ 1133 np = dev_pm_opp_of_get_opp_desc_node(cpu_dev); 1134 if (!np) { 1135 dev_dbg(cpu_dev, "%s: Couldn't find opp node.\n", __func__); 1136 return -ENOENT; 1137 } 1138 1139 cpumask_set_cpu(cpu_dev->id, cpumask); 1140 1141 /* OPPs are shared ? */ 1142 if (!of_property_read_bool(np, "opp-shared")) 1143 goto put_cpu_node; 1144 1145 for_each_possible_cpu(cpu) { 1146 if (cpu == cpu_dev->id) 1147 continue; 1148 1149 cpu_np = of_cpu_device_node_get(cpu); 1150 if (!cpu_np) { 1151 dev_err(cpu_dev, "%s: failed to get cpu%d node\n", 1152 __func__, cpu); 1153 ret = -ENOENT; 1154 goto put_cpu_node; 1155 } 1156 1157 /* Get OPP descriptor node */ 1158 tmp_np = _opp_of_get_opp_desc_node(cpu_np, 0); 1159 of_node_put(cpu_np); 1160 if (!tmp_np) { 1161 pr_err("%pOF: Couldn't find opp node\n", cpu_np); 1162 ret = -ENOENT; 1163 goto put_cpu_node; 1164 } 1165 1166 /* CPUs are sharing opp node */ 1167 if (np == tmp_np) 1168 cpumask_set_cpu(cpu, cpumask); 1169 1170 of_node_put(tmp_np); 1171 } 1172 1173 put_cpu_node: 1174 of_node_put(np); 1175 return ret; 1176 } 1177 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus); 1178 1179 /** 1180 * of_get_required_opp_performance_state() - Search for required OPP and return its performance state. 1181 * @np: Node that contains the "required-opps" property. 1182 * @index: Index of the phandle to parse. 1183 * 1184 * Returns the performance state of the OPP pointed out by the "required-opps" 1185 * property at @index in @np. 1186 * 1187 * Return: Zero or positive performance state on success, otherwise negative 1188 * value on errors. 1189 */ 1190 int of_get_required_opp_performance_state(struct device_node *np, int index) 1191 { 1192 struct dev_pm_opp *opp; 1193 struct device_node *required_np; 1194 struct opp_table *opp_table; 1195 int pstate = -EINVAL; 1196 1197 required_np = of_parse_required_opp(np, index); 1198 if (!required_np) 1199 return -EINVAL; 1200 1201 opp_table = _find_table_of_opp_np(required_np); 1202 if (IS_ERR(opp_table)) { 1203 pr_err("%s: Failed to find required OPP table %pOF: %ld\n", 1204 __func__, np, PTR_ERR(opp_table)); 1205 goto put_required_np; 1206 } 1207 1208 opp = _find_opp_of_np(opp_table, required_np); 1209 if (opp) { 1210 pstate = opp->pstate; 1211 dev_pm_opp_put(opp); 1212 } 1213 1214 dev_pm_opp_put_opp_table(opp_table); 1215 1216 put_required_np: 1217 of_node_put(required_np); 1218 1219 return pstate; 1220 } 1221 EXPORT_SYMBOL_GPL(of_get_required_opp_performance_state); 1222 1223 /** 1224 * dev_pm_opp_get_of_node() - Gets the DT node corresponding to an opp 1225 * @opp: opp for which DT node has to be returned for 1226 * 1227 * Return: DT node corresponding to the opp, else 0 on success. 1228 * 1229 * The caller needs to put the node with of_node_put() after using it. 1230 */ 1231 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp) 1232 { 1233 if (IS_ERR_OR_NULL(opp)) { 1234 pr_err("%s: Invalid parameters\n", __func__); 1235 return NULL; 1236 } 1237 1238 return of_node_get(opp->np); 1239 } 1240 EXPORT_SYMBOL_GPL(dev_pm_opp_get_of_node); 1241 1242 /* 1243 * Callback function provided to the Energy Model framework upon registration. 1244 * This computes the power estimated by @dev at @kHz if it is the frequency 1245 * of an existing OPP, or at the frequency of the first OPP above @kHz otherwise 1246 * (see dev_pm_opp_find_freq_ceil()). This function updates @kHz to the ceiled 1247 * frequency and @mW to the associated power. The power is estimated as 1248 * P = C * V^2 * f with C being the device's capacitance and V and f 1249 * respectively the voltage and frequency of the OPP. 1250 * 1251 * Returns -EINVAL if the power calculation failed because of missing 1252 * parameters, 0 otherwise. 1253 */ 1254 static int __maybe_unused _get_power(unsigned long *mW, unsigned long *kHz, 1255 struct device *dev) 1256 { 1257 struct dev_pm_opp *opp; 1258 struct device_node *np; 1259 unsigned long mV, Hz; 1260 u32 cap; 1261 u64 tmp; 1262 int ret; 1263 1264 np = of_node_get(dev->of_node); 1265 if (!np) 1266 return -EINVAL; 1267 1268 ret = of_property_read_u32(np, "dynamic-power-coefficient", &cap); 1269 of_node_put(np); 1270 if (ret) 1271 return -EINVAL; 1272 1273 Hz = *kHz * 1000; 1274 opp = dev_pm_opp_find_freq_ceil(dev, &Hz); 1275 if (IS_ERR(opp)) 1276 return -EINVAL; 1277 1278 mV = dev_pm_opp_get_voltage(opp) / 1000; 1279 dev_pm_opp_put(opp); 1280 if (!mV) 1281 return -EINVAL; 1282 1283 tmp = (u64)cap * mV * mV * (Hz / 1000000); 1284 do_div(tmp, 1000000000); 1285 1286 *mW = (unsigned long)tmp; 1287 *kHz = Hz / 1000; 1288 1289 return 0; 1290 } 1291 1292 /** 1293 * dev_pm_opp_of_register_em() - Attempt to register an Energy Model 1294 * @dev : Device for which an Energy Model has to be registered 1295 * @cpus : CPUs for which an Energy Model has to be registered. For 1296 * other type of devices it should be set to NULL. 1297 * 1298 * This checks whether the "dynamic-power-coefficient" devicetree property has 1299 * been specified, and tries to register an Energy Model with it if it has. 1300 * Having this property means the voltages are known for OPPs and the EM 1301 * might be calculated. 1302 */ 1303 int dev_pm_opp_of_register_em(struct device *dev, struct cpumask *cpus) 1304 { 1305 struct em_data_callback em_cb = EM_DATA_CB(_get_power); 1306 struct device_node *np; 1307 int ret, nr_opp; 1308 u32 cap; 1309 1310 if (IS_ERR_OR_NULL(dev)) { 1311 ret = -EINVAL; 1312 goto failed; 1313 } 1314 1315 nr_opp = dev_pm_opp_get_opp_count(dev); 1316 if (nr_opp <= 0) { 1317 ret = -EINVAL; 1318 goto failed; 1319 } 1320 1321 np = of_node_get(dev->of_node); 1322 if (!np) { 1323 ret = -EINVAL; 1324 goto failed; 1325 } 1326 1327 /* 1328 * Register an EM only if the 'dynamic-power-coefficient' property is 1329 * set in devicetree. It is assumed the voltage values are known if that 1330 * property is set since it is useless otherwise. If voltages are not 1331 * known, just let the EM registration fail with an error to alert the 1332 * user about the inconsistent configuration. 1333 */ 1334 ret = of_property_read_u32(np, "dynamic-power-coefficient", &cap); 1335 of_node_put(np); 1336 if (ret || !cap) { 1337 dev_dbg(dev, "Couldn't find proper 'dynamic-power-coefficient' in DT\n"); 1338 ret = -EINVAL; 1339 goto failed; 1340 } 1341 1342 ret = em_dev_register_perf_domain(dev, nr_opp, &em_cb, cpus, true); 1343 if (ret) 1344 goto failed; 1345 1346 return 0; 1347 1348 failed: 1349 dev_dbg(dev, "Couldn't register Energy Model %d\n", ret); 1350 return ret; 1351 } 1352 EXPORT_SYMBOL_GPL(dev_pm_opp_of_register_em); 1353