Merge branch 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 5 Oct 2020 11:31:32 +0000 (13:31 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 5 Oct 2020 11:31:32 +0000 (13:31 +0200)
Pull opertaing performance points (OPP) framework fixes for 5.10-rc1
from Viresh Kumar:

"- Return -EPROBE_DEFER properly from dev_pm_opp_get_opp_table()
   (Stephan Gerhold).

 - Minor cleanups around required-opps (Stephan Gerhold).

 - Extends opp-supported-hw property to contain multiple versions
   (Viresh Kumar).

 - Multiple cleanups around dev_pm_opp_attach_genpd() (Viresh Kumar).

 - Multiple fixes, cleanups in the OPP core for overall better design
   (Viresh Kumar)."

* 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm:
  opp: Allow opp-level to be set to 0
  opp: Prevent memory leak in dev_pm_opp_attach_genpd()
  ARM: tegra: Pass multiple versions in opp-supported-hw property
  opp: Allow opp-supported-hw to contain multiple versions
  dt-bindings: opp: Allow opp-supported-hw to contain multiple versions
  opp: Set required OPPs in reverse order when scaling down
  opp: Reduce code duplication in _set_required_opps()
  opp: Drop unnecessary check from dev_pm_opp_attach_genpd()
  opp: Handle multiple calls for same OPP table in _of_add_opp_table_v1()
  opp: Allow dev_pm_opp_get_opp_table() to return -EPROBE_DEFER
  opp: Remove _dev_pm_opp_find_and_remove_table() wrapper
  opp: Split out _opp_set_rate_zero()
  opp: Reuse the enabled flag in !target_freq path
  opp: Rename regulator_enabled and use it as status of all resources

Documentation/devicetree/bindings/opp/opp.txt
arch/arm/boot/dts/tegra20-cpu-opp-microvolt.dtsi
arch/arm/boot/dts/tegra20-cpu-opp.dtsi
arch/arm/boot/dts/tegra30-cpu-opp-microvolt.dtsi
arch/arm/boot/dts/tegra30-cpu-opp.dtsi
drivers/base/power/domain.c
drivers/opp/core.c
drivers/opp/cpu.c
drivers/opp/of.c
drivers/opp/opp.h
drivers/soc/samsung/exynos-asv.c

index 9d16d41..9847dfe 100644 (file)
@@ -154,25 +154,27 @@ Optional properties:
 - opp-suspend: Marks the OPP to be used during device suspend. If multiple OPPs
   in the table have this, the OPP with highest opp-hz will be used.
 
-- opp-supported-hw: This enables us to select only a subset of OPPs from the
-  larger OPP table, based on what version of the hardware we are running on. We
-  still can't have multiple nodes with the same opp-hz value in OPP table.
-
-  It's a user defined array containing a hierarchy of hardware version numbers,
-  supported by the OPP. For example: a platform with hierarchy of three levels
-  of versions (A, B and C), this field should be like <X Y Z>, where X
-  corresponds to Version hierarchy A, Y corresponds to version hierarchy B and Z
-  corresponds to version hierarchy C.
-
-  Each level of hierarchy is represented by a 32 bit value, and so there can be
-  only 32 different supported version per hierarchy. i.e. 1 bit per version. A
-  value of 0xFFFFFFFF will enable the OPP for all versions for that hierarchy
-  level. And a value of 0x00000000 will disable the OPP completely, and so we
-  never want that to happen.
-
-  If 32 values aren't sufficient for a version hierarchy, than that version
-  hierarchy can be contained in multiple 32 bit values. i.e. <X Y Z1 Z2> in the
-  above example, Z1 & Z2 refer to the version hierarchy Z.
+- opp-supported-hw: This property allows a platform to enable only a subset of
+  the OPPs from the larger set present in the OPP table, based on the current
+  version of the hardware (already known to the operating system).
+
+  Each block present in the array of blocks in this property, represents a
+  sub-group of hardware versions supported by the OPP. i.e. <sub-group A>,
+  <sub-group B>, etc. The OPP will be enabled if _any_ of these sub-groups match
+  the hardware's version.
+
+  Each sub-group is a platform defined array representing the hierarchy of
+  hardware versions supported by the platform. For a platform with three
+  hierarchical levels of version (X.Y.Z), this field shall look like
+
+  opp-supported-hw = <X1 Y1 Z1>, <X2 Y2 Z2>, <X3 Y3 Z3>.
+
+  Each level (eg. X1) in version hierarchy is represented by a 32 bit value, one
+  bit per version and so there can be maximum 32 versions per level. Logical AND
+  (&) operation is performed for each level with the hardware's level version
+  and a non-zero output for _all_ the levels in a sub-group means the OPP is
+  supported by hardware. A value of 0xFFFFFFFF for each level in the sub-group
+  will enable the OPP for all versions for the hardware.
 
 - status: Marks the node enabled/disabled.
 
@@ -503,7 +505,6 @@ Example 5: opp-supported-hw
                         */
                        opp-supported-hw = <0xF 0xFFFFFFFF 0xFFFFFFFF>
                        opp-hz = /bits/ 64 <600000000>;
-                       opp-microvolt = <915000 900000 925000>;
                        ...
                };
 
@@ -516,7 +517,17 @@ Example 5: opp-supported-hw
                         */
                        opp-supported-hw = <0x20 0xff0000ff 0x0000f4f0>
                        opp-hz = /bits/ 64 <800000000>;
-                       opp-microvolt = <915000 900000 925000>;
+                       ...
+               };
+
+               opp-900000000 {
+                       /*
+                        * Supports:
+                        * - All cuts and substrate where process version is 0x2.
+                        * - All cuts and process where substrate version is 0x2.
+                        */
+                       opp-supported-hw = <0xFFFFFFFF 0xFFFFFFFF 0x02>, <0xFFFFFFFF 0x01 0xFFFFFFFF>
+                       opp-hz = /bits/ 64 <900000000>;
                        ...
                };
        };
index dce85d3..6f3e8c5 100644 (file)
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@456000000,800,2,2 {
-                       opp-microvolt = <800000 800000 1125000>;
-               };
-
-               opp@456000000,800,3,2 {
-                       opp-microvolt = <800000 800000 1125000>;
-               };
-
                opp@456000000,825 {
                        opp-microvolt = <825000 825000 1125000>;
                };
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@608000000,800,3,2 {
-                       opp-microvolt = <800000 800000 1125000>;
-               };
-
                opp@608000000,825 {
                        opp-microvolt = <825000 825000 1125000>;
                };
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@760000000,875,1,1 {
-                       opp-microvolt = <875000 875000 1125000>;
-               };
-
-               opp@760000000,875,0,2 {
-                       opp-microvolt = <875000 875000 1125000>;
-               };
-
-               opp@760000000,875,1,2 {
-                       opp-microvolt = <875000 875000 1125000>;
-               };
-
                opp@760000000,900 {
                        opp-microvolt = <900000 900000 1125000>;
                };
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@912000000,950,0,2 {
-                       opp-microvolt = <950000 950000 1125000>;
-               };
-
-               opp@912000000,950,2,2 {
-                       opp-microvolt = <950000 950000 1125000>;
-               };
-
                opp@912000000,1000 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@1000000000,1000,0,2 {
-                       opp-microvolt = <1000000 1000000 1125000>;
-               };
-
                opp@1000000000,1025 {
                        opp-microvolt = <1025000 1025000 1125000>;
                };
index 9b8fedb..702a635 100644 (file)
 
                opp@456000000,800 {
                        clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x03 0x0006>;
-                       opp-hz = /bits/ 64 <456000000>;
-               };
-
-               opp@456000000,800,2,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <456000000>;
-               };
-
-               opp@456000000,800,3,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x08 0x0004>;
+                       opp-supported-hw = <0x03 0x0006>, <0x04 0x0004>,
+                                          <0x08 0x0004>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
 
                opp@608000000,800 {
                        clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x04 0x0006>;
-                       opp-hz = /bits/ 64 <608000000>;
-               };
-
-               opp@608000000,800,3,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x08 0x0004>;
+                       opp-supported-hw = <0x04 0x0006>, <0x08 0x0004>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
 
                opp@760000000,875 {
                        clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x04 0x0001>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,875,1,1 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x02 0x0002>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,875,0,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x01 0x0004>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,875,1,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x02 0x0004>;
+                       opp-supported-hw = <0x04 0x0001>, <0x02 0x0002>,
+                                          <0x01 0x0004>, <0x02 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
 
                opp@912000000,950 {
                        clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x02 0x0006>;
-                       opp-hz = /bits/ 64 <912000000>;
-               };
-
-               opp@912000000,950,0,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x01 0x0004>;
-                       opp-hz = /bits/ 64 <912000000>;
-               };
-
-               opp@912000000,950,2,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x04 0x0004>;
+                       opp-supported-hw = <0x02 0x0006>, <0x01 0x0004>,
+                                          <0x04 0x0004>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
 
                opp@1000000000,1000 {
                        clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x02 0x0006>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,1000,0,2 {
-                       clock-latency-ns = <400000>;
-                       opp-supported-hw = <0x01 0x0004>;
+                       opp-supported-hw = <0x02 0x0006>, <0x01 0x0004>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
index d682f74..1be715d 100644 (file)
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@475000000,850,0,1 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@475000000,850,0,4 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@475000000,850,0,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@475000000,850,0,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
                opp@608000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000,850,1,1 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,2,1 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,3,1 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,1,4 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,2,4 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,3,4 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,1,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,2,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,3,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,4,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,1,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,2,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,3,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@640000000,850,4,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
                opp@640000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000,850,3,1 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,3,2 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,3,3 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,3,4 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,3,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,4,7 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,3,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,4,8 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
-               opp@760000000,850,0,10 {
-                       opp-microvolt = <850000 850000 1250000>;
-               };
-
                opp@760000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000,900,1,1 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,1 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,1,2 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,2 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,1,3 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,3 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,1,4 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,4 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,1,7 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,7 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,1,8 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@760000000,900,2,8 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
                opp@760000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000,900,2,1 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,1 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,2,2 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,2 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,2,3 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,3 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,2,4 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,4 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,2,7 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,7 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,4,7 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,2,8 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,3,8 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
-               opp@860000000,900,4,8 {
-                       opp-microvolt = <900000 900000 1250000>;
-               };
-
                opp@860000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000,975,1,1 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@860000000,975,1,2 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@860000000,975,1,3 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@860000000,975,1,4 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@860000000,975,1,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@860000000,975,1,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
                opp@860000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000,975,2,1 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,1 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,2,2 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,2 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,2,3 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,3 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,2,4 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,4 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,2,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,4,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,2,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,3,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1000000000,975,4,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
                opp@1000000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000,975,3,1 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,3,2 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,3,3 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,3,4 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,3,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,4,7 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,3,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
-               opp@1100000000,975,4,8 {
-                       opp-microvolt = <975000 975000 1250000>;
-               };
-
                opp@1100000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000,1000,2,1 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1100000000,1000,2,2 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1100000000,1000,2,3 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1100000000,1000,2,4 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1100000000,1000,2,7 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1100000000,1000,2,8 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
                opp@1100000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000,1000,3,1 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,3,2 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,3,3 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,3,4 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,3,7 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,4,7 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,3,8 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1200000000,1000,4,8 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
                opp@1200000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000,1025,2,1 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1200000000,1025,2,2 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1200000000,1025,2,3 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1200000000,1025,2,4 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1200000000,1025,2,7 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1200000000,1025,2,8 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
                opp@1200000000,1050 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1300000000,1000,4,7 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
-               opp@1300000000,1000,4,8 {
-                       opp-microvolt = <1000000 1000000 1250000>;
-               };
-
                opp@1300000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1300000000,1025,3,1 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1300000000,1025,3,7 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
-               opp@1300000000,1025,3,8 {
-                       opp-microvolt = <1025000 1025000 1250000>;
-               };
-
                opp@1300000000,1050 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000,1050,2,1 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,2 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,3 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,4 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,5 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,6 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,2,7 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,2,8 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,12 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
-               opp@1300000000,1050,3,13 {
-                       opp-microvolt = <1050000 1050000 1250000>;
-               };
-
                opp@1300000000,1075 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1300000000,1075,2,2 {
-                       opp-microvolt = <1075000 1075000 1250000>;
-               };
-
-               opp@1300000000,1075,2,3 {
-                       opp-microvolt = <1075000 1075000 1250000>;
-               };
-
-               opp@1300000000,1075,2,4 {
-                       opp-microvolt = <1075000 1075000 1250000>;
-               };
-
                opp@1300000000,1100 {
                        opp-microvolt = <1100000 1100000 1250000>;
                };
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1400000000,1150,2,4 {
-                       opp-microvolt = <1150000 1150000 1250000>;
-               };
-
                opp@1400000000,1175 {
                        opp-microvolt = <1175000 1175000 1250000>;
                };
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000,1125,4,5 {
-                       opp-microvolt = <1125000 1125000 1250000>;
-               };
-
-               opp@1500000000,1125,4,6 {
-                       opp-microvolt = <1125000 1125000 1250000>;
-               };
-
-               opp@1500000000,1125,4,12 {
-                       opp-microvolt = <1125000 1125000 1250000>;
-               };
-
-               opp@1500000000,1125,4,13 {
-                       opp-microvolt = <1125000 1125000 1250000>;
-               };
-
                opp@1500000000,1150 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000,1150,3,5 {
-                       opp-microvolt = <1150000 1150000 1250000>;
-               };
-
-               opp@1500000000,1150,3,6 {
-                       opp-microvolt = <1150000 1150000 1250000>;
-               };
-
-               opp@1500000000,1150,3,12 {
-                       opp-microvolt = <1150000 1150000 1250000>;
-               };
-
-               opp@1500000000,1150,3,13 {
-                       opp-microvolt = <1150000 1150000 1250000>;
-               };
-
                opp@1500000000,1200 {
                        opp-microvolt = <1200000 1200000 1250000>;
                };
index 8e434f6..0f71350 100644 (file)
 
                opp@475000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x0F 0x0001>;
-                       opp-hz = /bits/ 64 <475000000>;
-               };
-
-               opp@475000000,850,0,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0002>;
-                       opp-hz = /bits/ 64 <475000000>;
-               };
-
-               opp@475000000,850,0,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0010>;
-                       opp-hz = /bits/ 64 <475000000>;
-               };
-
-               opp@475000000,850,0,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0080>;
-                       opp-hz = /bits/ 64 <475000000>;
-               };
-
-               opp@475000000,850,0,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0100>;
-                       opp-hz = /bits/ 64 <475000000>;
-               };
-
-               opp@608000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1F 0x0400>;
-                       opp-hz = /bits/ 64 <608000000>;
-               };
-
-               opp@608000000,912 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1F 0x0200>;
-                       opp-hz = /bits/ 64 <608000000>;
-               };
-
-               opp@620000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1E 0x306C>;
-                       opp-hz = /bits/ 64 <620000000>;
-               };
-
-               opp@640000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x0F 0x0001>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,1,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0002>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,1,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0010>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,1,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0080>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,4,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,1,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0100>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,2,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,3,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,850,4,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@640000000,900 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0192>;
-                       opp-hz = /bits/ 64 <640000000>;
-               };
-
-               opp@760000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1E 0x3461>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,4,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,3,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,4,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,850,0,10 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0400>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0001>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0002>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0004>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0008>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0010>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0080>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,1,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0100>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,900,2,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,912 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1F 0x0200>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@760000000,975 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0192>;
-                       opp-hz = /bits/ 64 <760000000>;
-               };
-
-               opp@816000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1F 0x0400>;
-                       opp-hz = /bits/ 64 <816000000>;
-               };
-
-               opp@816000000,912 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x1F 0x0200>;
-                       opp-hz = /bits/ 64 <816000000>;
-               };
-
-               opp@860000000,850 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x0C 0x0001>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0001>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,4,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,2,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,3,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,900,4,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0001>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0002>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0004>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0008>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0010>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0080>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,975,1,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0100>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@860000000,1000 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0192>;
-                       opp-hz = /bits/ 64 <860000000>;
-               };
-
-               opp@910000000,900 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x18 0x3060>;
-                       opp-hz = /bits/ 64 <910000000>;
-               };
-
-               opp@1000000000,900 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x0C 0x0001>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x03 0x0001>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,2,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,3,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,2,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,3,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <1000000000>;
-               };
-
-               opp@1000000000,975,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x0F 0x0001>, <0x01 0x0002>,
+                                          <0x01 0x0010>, <0x01 0x0080>,
+                                          <0x01 0x0100>;
+                       opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@1000000000,975,4,7 {
+               opp@608000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x1F 0x0400>;
+                       opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@1000000000,975,2,8 {
+               opp@608000000,912 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x1F 0x0200>;
+                       opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@1000000000,975,3,8 {
+               opp@620000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x1E 0x306C>;
+                       opp-hz = /bits/ 64 <620000000>;
                };
 
-               opp@1000000000,975,4,8 {
+               opp@640000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x0F 0x0001>, <0x02 0x0002>,
+                                          <0x04 0x0002>, <0x08 0x0002>,
+                                          <0x02 0x0010>, <0x04 0x0010>,
+                                          <0x08 0x0010>, <0x02 0x0080>,
+                                          <0x04 0x0080>, <0x08 0x0080>,
+                                          <0x10 0x0080>, <0x02 0x0100>,
+                                          <0x04 0x0100>, <0x08 0x0100>,
+                                          <0x10 0x0100>;
+                       opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@1000000000,1000 {
+               opp@640000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x019E>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x01 0x0192>;
+                       opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@1000000000,1025 {
+               opp@760000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0192>;
-                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-supported-hw = <0x1E 0x3461>, <0x08 0x0002>,
+                                          <0x08 0x0004>, <0x08 0x0008>,
+                                          <0x08 0x0010>, <0x08 0x0080>,
+                                          <0x10 0x0080>, <0x08 0x0100>,
+                                          <0x10 0x0100>, <0x01 0x0400>;
+                       opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@1100000000,900 {
+               opp@760000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0001>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x01 0x0001>, <0x02 0x0002>,
+                                          <0x04 0x0002>, <0x02 0x0004>,
+                                          <0x04 0x0004>, <0x02 0x0008>,
+                                          <0x04 0x0008>, <0x02 0x0010>,
+                                          <0x04 0x0010>, <0x02 0x0080>,
+                                          <0x04 0x0080>, <0x02 0x0100>,
+                                          <0x04 0x0100>;
+                       opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@1100000000,975 {
+               opp@760000000,912 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x06 0x0001>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x1F 0x0200>;
+                       opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@1100000000,975,3,1 {
+               opp@760000000,975 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x01 0x0192>;
+                       opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@1100000000,975,3,2 {
+               opp@816000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x1F 0x0400>;
+                       opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@1100000000,975,3,3 {
+               opp@816000000,912 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x1F 0x0200>;
+                       opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@1100000000,975,3,4 {
+               opp@860000000,850 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x0C 0x0001>;
+                       opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@1100000000,975,3,7 {
+               opp@860000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x02 0x0001>, <0x04 0x0002>,
+                                          <0x08 0x0002>, <0x04 0x0004>,
+                                          <0x08 0x0004>, <0x04 0x0008>,
+                                          <0x08 0x0008>, <0x04 0x0010>,
+                                          <0x08 0x0010>, <0x04 0x0080>,
+                                          <0x08 0x0080>, <0x10 0x0080>,
+                                          <0x04 0x0100>, <0x08 0x0100>,
+                                          <0x10 0x0100>;
+                       opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@1100000000,975,4,7 {
+               opp@860000000,975 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x01 0x0001>, <0x02 0x0002>,
+                                          <0x02 0x0004>, <0x02 0x0008>,
+                                          <0x02 0x0010>, <0x02 0x0080>,
+                                          <0x02 0x0100>;
+                       opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@1100000000,975,3,8 {
+               opp@860000000,1000 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x01 0x0192>;
+                       opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@1100000000,975,4,8 {
+               opp@910000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x18 0x3060>;
+                       opp-hz = /bits/ 64 <910000000>;
                };
 
-               opp@1100000000,1000 {
+               opp@1000000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x01 0x0001>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x0C 0x0001>;
+                       opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1100000000,1000,2,1 {
+               opp@1000000000,975 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x03 0x0001>, <0x04 0x0002>,
+                                          <0x08 0x0002>, <0x04 0x0004>,
+                                          <0x08 0x0004>, <0x04 0x0008>,
+                                          <0x08 0x0008>, <0x04 0x0010>,
+                                          <0x08 0x0010>, <0x04 0x0080>,
+                                          <0x08 0x0080>, <0x10 0x0080>,
+                                          <0x04 0x0100>, <0x08 0x0100>,
+                                          <0x10 0x0100>;
+                       opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1100000000,1000,2,2 {
+               opp@1000000000,1000 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x02 0x019E>;
+                       opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1100000000,1000,2,3 {
+               opp@1000000000,1025 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <1100000000>;
+                       opp-supported-hw = <0x01 0x0192>;
+                       opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1100000000,1000,2,4 {
+               opp@1100000000,900 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
+                       opp-supported-hw = <0x08 0x0001>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000,1000,2,7 {
+               opp@1100000000,975 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
+                       opp-supported-hw = <0x06 0x0001>, <0x08 0x0002>,
+                                          <0x08 0x0004>, <0x08 0x0008>,
+                                          <0x08 0x0010>, <0x08 0x0080>,
+                                          <0x10 0x0080>, <0x08 0x0100>,
+                                          <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000,1000,2,8 {
+               opp@1100000000,1000 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
+                       opp-supported-hw = <0x01 0x0001>, <0x04 0x0002>,
+                                          <0x04 0x0004>, <0x04 0x0008>,
+                                          <0x04 0x0010>, <0x04 0x0080>,
+                                          <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
 
                opp@1200000000,1000 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0001>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,4,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,3,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1000,4,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
+                       opp-supported-hw = <0x04 0x0001>, <0x08 0x0002>,
+                                          <0x08 0x0004>, <0x08 0x0008>,
+                                          <0x08 0x0010>, <0x08 0x0080>,
+                                          <0x10 0x0080>, <0x08 0x0100>,
+                                          <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
                opp@1200000000,1025 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0001>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <1200000000>;
-               };
-
-               opp@1200000000,1025,2,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
+                       opp-supported-hw = <0x02 0x0001>, <0x04 0x0002>,
+                                          <0x04 0x0004>, <0x04 0x0008>,
+                                          <0x04 0x0010>, <0x04 0x0080>,
+                                          <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
 
                opp@1300000000,1000 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0001>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1000,4,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0080>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1000,4,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0100>;
+                       opp-supported-hw = <0x08 0x0001>, <0x10 0x0080>,
+                                          <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
                opp@1300000000,1025 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0001>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1025,3,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0002>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1025,3,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0080>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1025,3,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0100>;
+                       opp-supported-hw = <0x04 0x0001>, <0x08 0x0002>,
+                                          <0x08 0x0080>, <0x08 0x0100>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
                opp@1300000000,1050 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x12 0x3061>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,2,1 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0002>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0004>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0008>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,5 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0020>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,6 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0040>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,2,7 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0080>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,2,8 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0100>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,12 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x1000>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1050,3,13 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x2000>;
+                       opp-supported-hw = <0x12 0x3061>, <0x04 0x0002>,
+                                          <0x08 0x0004>, <0x08 0x0008>,
+                                          <0x08 0x0010>, <0x08 0x0020>,
+                                          <0x08 0x0040>, <0x04 0x0080>,
+                                          <0x04 0x0100>, <0x08 0x1000>,
+                                          <0x08 0x2000>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
                opp@1300000000,1075 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x0182>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1075,2,2 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0004>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1075,2,3 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0008>;
-                       opp-hz = /bits/ 64 <1300000000>;
-               };
-
-               opp@1300000000,1075,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
+                       opp-supported-hw = <0x02 0x0182>, <0x04 0x0004>,
+                                          <0x04 0x0008>, <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
 
                opp@1400000000,1150 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x02 0x000C>;
-                       opp-hz = /bits/ 64 <1400000000>;
-               };
-
-               opp@1400000000,1150,2,4 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
+                       opp-supported-hw = <0x02 0x000C>, <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
 
                opp@1500000000,1125 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0010>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1125,4,5 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0020>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1125,4,6 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x0040>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1125,4,12 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x1000>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1125,4,13 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x10 0x2000>;
+                       opp-supported-hw = <0x08 0x0010>, <0x10 0x0020>,
+                                          <0x10 0x0040>, <0x10 0x1000>,
+                                          <0x10 0x2000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
                opp@1500000000,1150 {
                        clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x04 0x0010>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1150,3,5 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0020>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1150,3,6 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x0040>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1150,3,12 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x1000>;
-                       opp-hz = /bits/ 64 <1500000000>;
-               };
-
-               opp@1500000000,1150,3,13 {
-                       clock-latency-ns = <100000>;
-                       opp-supported-hw = <0x08 0x2000>;
+                       opp-supported-hw = <0x04 0x0010>, <0x08 0x0020>,
+                                          <0x08 0x0040>, <0x08 0x1000>,
+                                          <0x08 0x2000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
index 2cb5e04..b92bb61 100644 (file)
@@ -2044,8 +2044,9 @@ int of_genpd_add_provider_simple(struct device_node *np,
        if (genpd->set_performance_state) {
                ret = dev_pm_opp_of_add_table(&genpd->dev);
                if (ret) {
-                       dev_err(&genpd->dev, "Failed to add OPP table: %d\n",
-                               ret);
+                       if (ret != -EPROBE_DEFER)
+                               dev_err(&genpd->dev, "Failed to add OPP table: %d\n",
+                                       ret);
                        goto unlock;
                }
 
@@ -2054,7 +2055,7 @@ int of_genpd_add_provider_simple(struct device_node *np,
                 * state.
                 */
                genpd->opp_table = dev_pm_opp_get_opp_table(&genpd->dev);
-               WARN_ON(!genpd->opp_table);
+               WARN_ON(IS_ERR(genpd->opp_table));
        }
 
        ret = genpd_add_provider(np, genpd_xlate_simple, genpd);
@@ -2111,8 +2112,9 @@ int of_genpd_add_provider_onecell(struct device_node *np,
                if (genpd->set_performance_state) {
                        ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i);
                        if (ret) {
-                               dev_err(&genpd->dev, "Failed to add OPP table for index %d: %d\n",
-                                       i, ret);
+                               if (ret != -EPROBE_DEFER)
+                                       dev_err(&genpd->dev, "Failed to add OPP table for index %d: %d\n",
+                                               i, ret);
                                goto error;
                        }
 
@@ -2121,7 +2123,7 @@ int of_genpd_add_provider_onecell(struct device_node *np,
                         * performance state.
                         */
                        genpd->opp_table = dev_pm_opp_get_opp_table_indexed(&genpd->dev, i);
-                       WARN_ON(!genpd->opp_table);
+                       WARN_ON(IS_ERR(genpd->opp_table));
                }
 
                genpd->provider = &np->fwnode;
index 3ca7543..2483e76 100644 (file)
@@ -703,12 +703,10 @@ static int _generic_set_opp_regulator(struct opp_table *opp_table,
         * Enable the regulator after setting its voltages, otherwise it breaks
         * some boot-enabled regulators.
         */
-       if (unlikely(!opp_table->regulator_enabled)) {
+       if (unlikely(!opp_table->enabled)) {
                ret = regulator_enable(reg);
                if (ret < 0)
                        dev_warn(dev, "Failed to enable regulator: %d", ret);
-               else
-                       opp_table->regulator_enabled = true;
        }
 
        return 0;
@@ -781,29 +779,39 @@ static int _set_opp_custom(const struct opp_table *opp_table,
        return opp_table->set_opp(data);
 }
 
+static int _set_required_opp(struct device *dev, struct device *pd_dev,
+                            struct dev_pm_opp *opp, int i)
+{
+       unsigned int pstate = likely(opp) ? opp->required_opps[i]->pstate : 0;
+       int ret;
+
+       if (!pd_dev)
+               return 0;
+
+       ret = dev_pm_genpd_set_performance_state(pd_dev, pstate);
+       if (ret) {
+               dev_err(dev, "Failed to set performance rate of %s: %d (%d)\n",
+                       dev_name(pd_dev), pstate, ret);
+       }
+
+       return ret;
+}
+
 /* This is only called for PM domain for now */
 static int _set_required_opps(struct device *dev,
                              struct opp_table *opp_table,
-                             struct dev_pm_opp *opp)
+                             struct dev_pm_opp *opp, bool up)
 {
        struct opp_table **required_opp_tables = opp_table->required_opp_tables;
        struct device **genpd_virt_devs = opp_table->genpd_virt_devs;
-       unsigned int pstate;
        int i, ret = 0;
 
        if (!required_opp_tables)
                return 0;
 
        /* Single genpd case */
-       if (!genpd_virt_devs) {
-               pstate = likely(opp) ? opp->required_opps[0]->pstate : 0;
-               ret = dev_pm_genpd_set_performance_state(dev, pstate);
-               if (ret) {
-                       dev_err(dev, "Failed to set performance state of %s: %d (%d)\n",
-                               dev_name(dev), pstate, ret);
-               }
-               return ret;
-       }
+       if (!genpd_virt_devs)
+               return _set_required_opp(dev, dev, opp, 0);
 
        /* Multiple genpd case */
 
@@ -813,19 +821,21 @@ static int _set_required_opps(struct device *dev,
         */
        mutex_lock(&opp_table->genpd_virt_dev_lock);
 
-       for (i = 0; i < opp_table->required_opp_count; i++) {
-               pstate = likely(opp) ? opp->required_opps[i]->pstate : 0;
-
-               if (!genpd_virt_devs[i])
-                       continue;
-
-               ret = dev_pm_genpd_set_performance_state(genpd_virt_devs[i], pstate);
-               if (ret) {
-                       dev_err(dev, "Failed to set performance rate of %s: %d (%d)\n",
-                               dev_name(genpd_virt_devs[i]), pstate, ret);
-                       break;
+       /* Scaling up? Set required OPPs in normal order, else reverse */
+       if (up) {
+               for (i = 0; i < opp_table->required_opp_count; i++) {
+                       ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i);
+                       if (ret)
+                               break;
+               }
+       } else {
+               for (i = opp_table->required_opp_count - 1; i >= 0; i--) {
+                       ret = _set_required_opp(dev, genpd_virt_devs[i], opp, i);
+                       if (ret)
+                               break;
                }
        }
+
        mutex_unlock(&opp_table->genpd_virt_dev_lock);
 
        return ret;
@@ -862,6 +872,34 @@ int dev_pm_opp_set_bw(struct device *dev, struct dev_pm_opp *opp)
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_set_bw);
 
+static int _opp_set_rate_zero(struct device *dev, struct opp_table *opp_table)
+{
+       int ret;
+
+       if (!opp_table->enabled)
+               return 0;
+
+       /*
+        * Some drivers need to support cases where some platforms may
+        * have OPP table for the device, while others don't and
+        * opp_set_rate() just needs to behave like clk_set_rate().
+        */
+       if (!_get_opp_count(opp_table))
+               return 0;
+
+       ret = _set_opp_bw(opp_table, NULL, dev, true);
+       if (ret)
+               return ret;
+
+       if (opp_table->regulators)
+               regulator_disable(opp_table->regulators[0]);
+
+       ret = _set_required_opps(dev, opp_table, NULL, false);
+
+       opp_table->enabled = false;
+       return ret;
+}
+
 /**
  * dev_pm_opp_set_rate() - Configure new OPP based on frequency
  * @dev:        device for which we do this operation
@@ -888,33 +926,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
        }
 
        if (unlikely(!target_freq)) {
-               /*
-                * Some drivers need to support cases where some platforms may
-                * have OPP table for the device, while others don't and
-                * opp_set_rate() just needs to behave like clk_set_rate().
-                */
-               if (!_get_opp_count(opp_table)) {
-                       ret = 0;
-                       goto put_opp_table;
-               }
-
-               if (!opp_table->required_opp_tables && !opp_table->regulators &&
-                   !opp_table->paths) {
-                       dev_err(dev, "target frequency can't be 0\n");
-                       ret = -EINVAL;
-                       goto put_opp_table;
-               }
-
-               ret = _set_opp_bw(opp_table, NULL, dev, true);
-               if (ret)
-                       goto put_opp_table;
-
-               if (opp_table->regulator_enabled) {
-                       regulator_disable(opp_table->regulators[0]);
-                       opp_table->regulator_enabled = false;
-               }
-
-               ret = _set_required_opps(dev, opp_table, NULL);
+               ret = _opp_set_rate_zero(dev, opp_table);
                goto put_opp_table;
        }
 
@@ -933,14 +945,11 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
        old_freq = clk_get_rate(clk);
 
        /* Return early if nothing to do */
-       if (old_freq == freq) {
-               if (!opp_table->required_opp_tables && !opp_table->regulators &&
-                   !opp_table->paths) {
-                       dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n",
-                               __func__, freq);
-                       ret = 0;
-                       goto put_opp_table;
-               }
+       if (opp_table->enabled && old_freq == freq) {
+               dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n",
+                       __func__, freq);
+               ret = 0;
+               goto put_opp_table;
        }
 
        /*
@@ -976,7 +985,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 
        /* Scaling up? Configure required OPPs before frequency */
        if (freq >= old_freq) {
-               ret = _set_required_opps(dev, opp_table, opp);
+               ret = _set_required_opps(dev, opp_table, opp, true);
                if (ret)
                        goto put_opp;
        }
@@ -996,13 +1005,16 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
 
        /* Scaling down? Configure required OPPs after frequency */
        if (!ret && freq < old_freq) {
-               ret = _set_required_opps(dev, opp_table, opp);
+               ret = _set_required_opps(dev, opp_table, opp, false);
                if (ret)
                        dev_err(dev, "Failed to set required opps: %d\n", ret);
        }
 
-       if (!ret)
+       if (!ret) {
                ret = _set_opp_bw(opp_table, opp, dev, false);
+               if (!ret)
+                       opp_table->enabled = true;
+       }
 
 put_opp:
        dev_pm_opp_put(opp);
@@ -1068,7 +1080,7 @@ static struct opp_table *_allocate_opp_table(struct device *dev, int index)
         */
        opp_table = kzalloc(sizeof(*opp_table), GFP_KERNEL);
        if (!opp_table)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        mutex_init(&opp_table->lock);
        mutex_init(&opp_table->genpd_virt_dev_lock);
@@ -1079,8 +1091,8 @@ static struct opp_table *_allocate_opp_table(struct device *dev, int index)
 
        opp_dev = _add_opp_dev(dev, opp_table);
        if (!opp_dev) {
-               kfree(opp_table);
-               return NULL;
+               ret = -ENOMEM;
+               goto err;
        }
 
        _of_init_opp_table(opp_table, dev, index);
@@ -1089,16 +1101,21 @@ static struct opp_table *_allocate_opp_table(struct device *dev, int index)
        opp_table->clk = clk_get(dev, NULL);
        if (IS_ERR(opp_table->clk)) {
                ret = PTR_ERR(opp_table->clk);
-               if (ret != -EPROBE_DEFER)
-                       dev_dbg(dev, "%s: Couldn't find clock: %d\n", __func__,
-                               ret);
+               if (ret == -EPROBE_DEFER)
+                       goto err;
+
+               dev_dbg(dev, "%s: Couldn't find clock: %d\n", __func__, ret);
        }
 
        /* Find interconnect path(s) for the device */
        ret = dev_pm_opp_of_find_icc_paths(dev, opp_table);
-       if (ret)
+       if (ret) {
+               if (ret == -EPROBE_DEFER)
+                       goto err;
+
                dev_warn(dev, "%s: Error finding interconnect paths: %d\n",
                         __func__, ret);
+       }
 
        BLOCKING_INIT_NOTIFIER_HEAD(&opp_table->head);
        INIT_LIST_HEAD(&opp_table->opp_list);
@@ -1107,6 +1124,10 @@ static struct opp_table *_allocate_opp_table(struct device *dev, int index)
        /* Secure the device table modification */
        list_add(&opp_table->node, &opp_tables);
        return opp_table;
+
+err:
+       kfree(opp_table);
+       return ERR_PTR(ret);
 }
 
 void _get_opp_table_kref(struct opp_table *opp_table)
@@ -1129,7 +1150,7 @@ static struct opp_table *_opp_get_opp_table(struct device *dev, int index)
        if (opp_table) {
                if (!_add_opp_dev_unlocked(dev, opp_table)) {
                        dev_pm_opp_put_opp_table(opp_table);
-                       opp_table = NULL;
+                       opp_table = ERR_PTR(-ENOMEM);
                }
                goto unlock;
        }
@@ -1581,8 +1602,8 @@ struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev,
        struct opp_table *opp_table;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(opp_table))
+               return opp_table;
 
        /* Make sure there are no concurrent readers while updating opp_table */
        WARN_ON(!list_empty(&opp_table->opp_list));
@@ -1640,8 +1661,8 @@ struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name)
        struct opp_table *opp_table;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(opp_table))
+               return opp_table;
 
        /* Make sure there are no concurrent readers while updating opp_table */
        WARN_ON(!list_empty(&opp_table->opp_list));
@@ -1733,8 +1754,8 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev,
        int ret, i;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(opp_table))
+               return opp_table;
 
        /* This should be called before OPPs are initialized */
        if (WARN_ON(!list_empty(&opp_table->opp_list))) {
@@ -1804,11 +1825,9 @@ void dev_pm_opp_put_regulators(struct opp_table *opp_table)
        /* Make sure there are no concurrent readers while updating opp_table */
        WARN_ON(!list_empty(&opp_table->opp_list));
 
-       if (opp_table->regulator_enabled) {
+       if (opp_table->enabled) {
                for (i = opp_table->regulator_count - 1; i >= 0; i--)
                        regulator_disable(opp_table->regulators[i]);
-
-               opp_table->regulator_enabled = false;
        }
 
        for (i = opp_table->regulator_count - 1; i >= 0; i--)
@@ -1843,8 +1862,8 @@ struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name)
        int ret;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(opp_table))
+               return opp_table;
 
        /* This should be called before OPPs are initialized */
        if (WARN_ON(!list_empty(&opp_table->opp_list))) {
@@ -1911,8 +1930,8 @@ struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev,
                return ERR_PTR(-EINVAL);
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (!IS_ERR(opp_table))
+               return opp_table;
 
        /* This should be called before OPPs are initialized */
        if (WARN_ON(!list_empty(&opp_table->opp_list))) {
@@ -1949,6 +1968,9 @@ static void _opp_detach_genpd(struct opp_table *opp_table)
 {
        int index;
 
+       if (!opp_table->genpd_virt_devs)
+               return;
+
        for (index = 0; index < opp_table->required_opp_count; index++) {
                if (!opp_table->genpd_virt_devs[index])
                        continue;
@@ -1992,8 +2014,11 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev,
        const char **name = names;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(opp_table))
+               return opp_table;
+
+       if (opp_table->genpd_virt_devs)
+               return opp_table;
 
        /*
         * If the genpd's OPP table isn't already initialized, parsing of the
@@ -2020,12 +2045,6 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev,
                        goto err;
                }
 
-               if (opp_table->genpd_virt_devs[index]) {
-                       dev_err(dev, "Genpd virtual device already set %s\n",
-                               *name);
-                       goto err;
-               }
-
                virt_dev = dev_pm_domain_attach_by_name(dev, *name);
                if (IS_ERR(virt_dev)) {
                        ret = PTR_ERR(virt_dev);
@@ -2098,9 +2117,6 @@ int dev_pm_opp_xlate_performance_state(struct opp_table *src_table,
        int dest_pstate = -EINVAL;
        int i;
 
-       if (!pstate)
-               return 0;
-
        /*
         * Normally the src_table will have the "required_opps" property set to
         * point to one of the OPPs in the dst_table, but in some cases the
@@ -2163,8 +2179,8 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt)
        int ret;
 
        opp_table = dev_pm_opp_get_opp_table(dev);
-       if (!opp_table)
-               return -ENOMEM;
+       if (IS_ERR(opp_table))
+               return PTR_ERR(opp_table);
 
        /* Fix regulator count for dynamic OPPs */
        opp_table->regulator_count = 1;
@@ -2405,7 +2421,14 @@ int dev_pm_opp_unregister_notifier(struct device *dev,
 }
 EXPORT_SYMBOL(dev_pm_opp_unregister_notifier);
 
-void _dev_pm_opp_find_and_remove_table(struct device *dev)
+/**
+ * dev_pm_opp_remove_table() - Free all OPPs associated with the device
+ * @dev:       device pointer used to lookup OPP table.
+ *
+ * Free both OPPs created using static entries present in DT and the
+ * dynamically added entries.
+ */
+void dev_pm_opp_remove_table(struct device *dev)
 {
        struct opp_table *opp_table;
 
@@ -2432,16 +2455,4 @@ void _dev_pm_opp_find_and_remove_table(struct device *dev)
        /* Drop reference taken by _find_opp_table() */
        dev_pm_opp_put_opp_table(opp_table);
 }
-
-/**
- * dev_pm_opp_remove_table() - Free all OPPs associated with the device
- * @dev:       device pointer used to lookup OPP table.
- *
- * Free both OPPs created using static entries present in DT and the
- * dynamically added entries.
- */
-void dev_pm_opp_remove_table(struct device *dev)
-{
-       _dev_pm_opp_find_and_remove_table(dev);
-}
 EXPORT_SYMBOL_GPL(dev_pm_opp_remove_table);
index b5055cc..5004335 100644 (file)
@@ -124,7 +124,7 @@ void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask,
                        continue;
                }
 
-               _dev_pm_opp_find_and_remove_table(cpu_dev);
+               dev_pm_opp_remove_table(cpu_dev);
        }
 }
 
index 0430290..874b587 100644 (file)
@@ -434,9 +434,9 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_of_find_icc_paths);
 static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
                              struct device_node *np)
 {
-       unsigned int count = opp_table->supported_hw_count;
-       u32 version;
-       int ret;
+       unsigned int levels = opp_table->supported_hw_count;
+       int count, versions, ret, i, j;
+       u32 val;
 
        if (!opp_table->supported_hw) {
                /*
@@ -451,21 +451,40 @@ static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
                        return true;
        }
 
-       while (count--) {
-               ret = of_property_read_u32_index(np, "opp-supported-hw", count,
-                                                &version);
-               if (ret) {
-                       dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
-                                __func__, count, ret);
-                       return false;
+       count = of_property_count_u32_elems(np, "opp-supported-hw");
+       if (count <= 0 || count % levels) {
+               dev_err(dev, "%s: Invalid opp-supported-hw property (%d)\n",
+                       __func__, count);
+               return false;
+       }
+
+       versions = count / levels;
+
+       /* All levels in at least one of the versions should match */
+       for (i = 0; i < versions; i++) {
+               bool supported = true;
+
+               for (j = 0; j < levels; j++) {
+                       ret = of_property_read_u32_index(np, "opp-supported-hw",
+                                                        i * levels + j, &val);
+                       if (ret) {
+                               dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
+                                        __func__, i * levels + j, ret);
+                               return false;
+                       }
+
+                       /* Check if the level is supported */
+                       if (!(val & opp_table->supported_hw[j])) {
+                               supported = false;
+                               break;
+                       }
                }
 
-               /* Both of these are bitwise masks of the versions */
-               if (!(version & opp_table->supported_hw[count]))
-                       return false;
+               if (supported)
+                       return true;
        }
 
-       return true;
+       return false;
 }
 
 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
@@ -616,7 +635,7 @@ free_microvolt:
  */
 void dev_pm_opp_of_remove_table(struct device *dev)
 {
-       _dev_pm_opp_find_and_remove_table(dev);
+       dev_pm_opp_remove_table(dev);
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
 
@@ -823,7 +842,7 @@ free_opp:
 static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table)
 {
        struct device_node *np;
-       int ret, count = 0, pstate_count = 0;
+       int ret, count = 0;
        struct dev_pm_opp *opp;
 
        /* OPP table is already initialized for the device */
@@ -857,20 +876,14 @@ static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table)
                goto remove_static_opp;
        }
 
-       list_for_each_entry(opp, &opp_table->opp_list, node)
-               pstate_count += !!opp->pstate;
-
-       /* Either all or none of the nodes shall have performance state set */
-       if (pstate_count && pstate_count != count) {
-               dev_err(dev, "Not all nodes have performance state set (%d: %d)\n",
-                       count, pstate_count);
-               ret = -ENOENT;
-               goto remove_static_opp;
+       list_for_each_entry(opp, &opp_table->opp_list, node) {
+               /* Any non-zero performance state would enable the feature */
+               if (opp->pstate) {
+                       opp_table->genpd_performance_state = true;
+                       break;
+               }
        }
 
-       if (pstate_count)
-               opp_table->genpd_performance_state = true;
-
        return 0;
 
 remove_static_opp:
@@ -886,11 +899,25 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table)
        const __be32 *val;
        int nr, ret = 0;
 
+       mutex_lock(&opp_table->lock);
+       if (opp_table->parsed_static_opps) {
+               opp_table->parsed_static_opps++;
+               mutex_unlock(&opp_table->lock);
+               return 0;
+       }
+
+       opp_table->parsed_static_opps = 1;
+       mutex_unlock(&opp_table->lock);
+
        prop = of_find_property(dev->of_node, "operating-points", NULL);
-       if (!prop)
-               return -ENODEV;
-       if (!prop->value)
-               return -ENODATA;
+       if (!prop) {
+               ret = -ENODEV;
+               goto remove_static_opp;
+       }
+       if (!prop->value) {
+               ret = -ENODATA;
+               goto remove_static_opp;
+       }
 
        /*
         * Each OPP is a set of tuples consisting of frequency and
@@ -899,13 +926,10 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table)
        nr = prop->length / sizeof(u32);
        if (nr % 2) {
                dev_err(dev, "%s: Invalid OPP table\n", __func__);
-               return -EINVAL;
+               ret = -EINVAL;
+               goto remove_static_opp;
        }
 
-       mutex_lock(&opp_table->lock);
-       opp_table->parsed_static_opps = 1;
-       mutex_unlock(&opp_table->lock);
-
        val = prop->value;
        while (nr) {
                unsigned long freq = be32_to_cpup(val++) * 1000;
@@ -915,12 +939,14 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table)
                if (ret) {
                        dev_err(dev, "%s: Failed to add OPP %ld (%d)\n",
                                __func__, freq, ret);
-                       _opp_remove_all_static(opp_table);
-                       return ret;
+                       goto remove_static_opp;
                }
                nr -= 2;
        }
 
+remove_static_opp:
+       _opp_remove_all_static(opp_table);
+
        return ret;
 }
 
@@ -947,8 +973,8 @@ int dev_pm_opp_of_add_table(struct device *dev)
        int ret;
 
        opp_table = dev_pm_opp_get_opp_table_indexed(dev, 0);
-       if (!opp_table)
-               return -ENOMEM;
+       if (IS_ERR(opp_table))
+               return PTR_ERR(opp_table);
 
        /*
         * OPPs have two version of bindings now. Also try the old (v1)
@@ -1002,8 +1028,8 @@ int dev_pm_opp_of_add_table_indexed(struct device *dev, int index)
        }
 
        opp_table = dev_pm_opp_get_opp_table_indexed(dev, index);
-       if (!opp_table)
-               return -ENOMEM;
+       if (IS_ERR(opp_table))
+               return PTR_ERR(opp_table);
 
        ret = _of_add_opp_table_v2(dev, opp_table);
        if (ret)
index c3fcd57..ebd930e 100644 (file)
@@ -147,11 +147,11 @@ enum opp_table_access {
  * @clk: Device's clock handle
  * @regulators: Supply regulators
  * @regulator_count: Number of power supply regulators. Its value can be -1
- * @regulator_enabled: Set to true if regulators were previously enabled.
  * (uninitialized), 0 (no opp-microvolt property) or > 0 (has opp-microvolt
  * property).
  * @paths: Interconnect path handles
  * @path_count: Number of interconnect paths
+ * @enabled: Set to true if the device's resources are enabled/configured.
  * @genpd_performance_state: Device's power domain support performance state.
  * @is_genpd: Marks if the OPP table belongs to a genpd.
  * @set_opp: Platform specific set_opp callback
@@ -195,9 +195,9 @@ struct opp_table {
        struct clk *clk;
        struct regulator **regulators;
        int regulator_count;
-       bool regulator_enabled;
        struct icc_path **paths;
        unsigned int path_count;
+       bool enabled;
        bool genpd_performance_state;
        bool is_genpd;
 
@@ -217,7 +217,6 @@ void _get_opp_table_kref(struct opp_table *opp_table);
 int _get_opp_count(struct opp_table *opp_table);
 struct opp_table *_find_opp_table(struct device *dev);
 struct opp_device *_add_opp_dev(const struct device *dev, struct opp_table *opp_table);
-void _dev_pm_opp_find_and_remove_table(struct device *dev);
 struct dev_pm_opp *_opp_allocate(struct opp_table *opp_table);
 void _opp_free(struct dev_pm_opp *opp);
 int _opp_compare_key(struct dev_pm_opp *opp1, struct dev_pm_opp *opp2);
index 30bb7b7..8abf4df 100644 (file)
@@ -93,7 +93,7 @@ static int exynos_asv_update_opps(struct exynos_asv *asv)
                        continue;
 
                opp_table = dev_pm_opp_get_opp_table(cpu);
-               if (IS_ERR_OR_NULL(opp_table))
+               if (IS_ERR(opp_table))
                        continue;
 
                if (!last_opp_table || opp_table != last_opp_table) {