Re: [PATCH V2 5/5] OPP: decouple dt properties in opp_parse_supplies()

From: Viresh Kumar
Date: Fri Nov 04 2022 - 01:08:52 EST


On 03-11-22, 16:31, Viresh Kumar wrote:
> From: James Calligeros <jcalligeros99@xxxxxxxxx>
>
> The opp-microwatt property was added with the intention of providing
> platforms a way to specify a precise value for the power consumption
> of a device at a given OPP to enable better energy-aware scheduling
> decisions by informing the kernel of the total static and dynamic
> power of a device at a given OPP, removing the reliance on the EM
> subsystem's often flawed estimations. This property is parsed by
> opp_parse_supplies(), which creates a hard dependency on the
> opp-microvolt property.
>
> Some platforms, such as Apple Silicon, do not describe their device's
> voltage regulators in the DT as they cannot be controlled by the kernel
> and/or rely on opaque firmware algorithms to control their voltage and
> current characteristics at runtime. We can, however, experimentally
> determine the power consumption of a given device at a given OPP, taking
> advantage of opp-microwatt to provide EAS on such devices as was
> initially intended.
>
> Allow platforms to specify and consume any subset of opp-microvolt,
> opp-microamp, or opp-microwatt without a hard dependency on
> opp-microvolt to enable this functionality on such platforms.
>
> Signed-off-by: James Calligeros <jcalligeros99@xxxxxxxxx>
> Co-developed-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx>
> Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx>
> ---
> V2: Rewritten by Viresh on top of his changes.
>
> drivers/opp/of.c | 36 +++++++++++++++++++++++++-----------
> 1 file changed, 25 insertions(+), 11 deletions(-)

Plus this fix:

diff --git a/drivers/opp/of.c b/drivers/opp/of.c
index 273fa9c0e1c0..e55c6095adf0 100644
--- a/drivers/opp/of.c
+++ b/drivers/opp/of.c
@@ -673,7 +673,7 @@ static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
struct opp_table *opp_table)
{
u32 *microvolt, *microamp, *microwatt;
- int ret, i, j;
+ int ret = 0, i, j;
bool triplet;

microvolt = opp_parse_microvolt(opp, dev, opp_table, &triplet);

--
viresh