Commit 2c07b0fd authored by Viresh Kumar's avatar Viresh Kumar
Browse files

Merge branch 'opp/empty' into opp/linux-next

parents e91e3d90 6ee70e8c
Loading
Loading
Loading
Loading
+53 −1
Original line number Diff line number Diff line
@@ -65,7 +65,9 @@ Required properties:

- OPP nodes: One or more OPP nodes describing voltage-current-frequency
  combinations. Their name isn't significant but their phandle can be used to
  reference an OPP.
  reference an OPP. These are mandatory except for the case where the OPP table
  is present only to indicate dependency between devices using the opp-shared
  property.

Optional properties:
- opp-shared: Indicates that device nodes using this OPP Table Node's phandle
@@ -568,3 +570,53 @@ Example 6: opp-microvolt-<name>, opp-microamp-<name>:
		};
	};
};

Example 7: Single cluster Quad-core ARM cortex A53, OPP points from firmware,
distinct clock controls but two sets of clock/voltage/current lines.

/ {
	cpus {
		#address-cells = <2>;
		#size-cells = <0>;

		cpu@0 {
			compatible = "arm,cortex-a53";
			reg = <0x0 0x100>;
			next-level-cache = <&A53_L2>;
			clocks = <&dvfs_controller 0>;
			operating-points-v2 = <&cpu_opp0_table>;
		};
		cpu@1 {
			compatible = "arm,cortex-a53";
			reg = <0x0 0x101>;
			next-level-cache = <&A53_L2>;
			clocks = <&dvfs_controller 1>;
			operating-points-v2 = <&cpu_opp0_table>;
		};
		cpu@2 {
			compatible = "arm,cortex-a53";
			reg = <0x0 0x102>;
			next-level-cache = <&A53_L2>;
			clocks = <&dvfs_controller 2>;
			operating-points-v2 = <&cpu_opp1_table>;
		};
		cpu@3 {
			compatible = "arm,cortex-a53";
			reg = <0x0 0x103>;
			next-level-cache = <&A53_L2>;
			clocks = <&dvfs_controller 3>;
			operating-points-v2 = <&cpu_opp1_table>;
		};

	};

	cpu_opp0_table: opp0_table {
		compatible = "operating-points-v2";
		opp-shared;
	};

	cpu_opp1_table: opp1_table {
		compatible = "operating-points-v2";
		opp-shared;
	};
};
+5 −2
Original line number Diff line number Diff line
@@ -170,7 +170,8 @@ static void _opp_table_alloc_required_tables(struct opp_table *opp_table,
	/* Traversing the first OPP node is all we need */
	np = of_get_next_available_child(opp_np, NULL);
	if (!np) {
		dev_err(dev, "Empty OPP table\n");
		dev_warn(dev, "Empty OPP table\n");

		return;
	}

@@ -378,7 +379,9 @@ int dev_pm_opp_of_find_icc_paths(struct device *dev,
	struct icc_path **paths;

	ret = _bandwidth_supported(dev, opp_table);
	if (ret <= 0)
	if (ret == -EINVAL)
		return 0; /* Empty OPP table is a valid corner-case, let's not fail */
	else if (ret <= 0)
		return ret;

	ret = 0;