Linux Audio

Check our new training course

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