Re: [PATCH v2 28/48] soc/tegra: Introduce core power domain driver

From: Dmitry Osipenko
Date: Tue Dec 22 2020 - 14:22:04 EST


22.12.2020 09:40, Viresh Kumar пишет:
> On 17-12-20, 21:06, Dmitry Osipenko wrote:
>> +++ b/drivers/soc/tegra/core-power-domain.c
>> @@ -0,0 +1,125 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * NVIDIA Tegra SoC Core Power Domain Driver
>> + */
>> +
>> +#include <linux/of_device.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/pm_domain.h>
>> +#include <linux/pm_opp.h>
>> +#include <linux/slab.h>
>> +
>> +#include <soc/tegra/common.h>
>> +
>> +static struct lock_class_key tegra_core_domain_lock_class;
>> +static bool tegra_core_domain_state_synced;
>> +
>> +static int tegra_genpd_set_performance_state(struct generic_pm_domain *genpd,
>> + unsigned int level)
>> +{
>> + struct dev_pm_opp *opp;
>> + int err;
>> +
>> + opp = dev_pm_opp_find_level_ceil(&genpd->dev, &level);
>
> We don't need ceil or floor versions for level, but rather _exact() version. Or
> maybe just call it dev_pm_opp_find_level().

The _exact() version won't find OPP for level=0 if levels don't start
with 0.

>> + if (IS_ERR(opp)) {
>> + dev_err(&genpd->dev, "failed to find OPP for level %u: %pe\n",
>> + level, opp);
>> + return PTR_ERR(opp);
>> + }
>> +
>> + err = dev_pm_opp_set_voltage(&genpd->dev, opp);
>
> IIUC, you implemented this callback because you want to use the voltage triplet
> present in the OPP table ?
>
> And so you are setting the regulator ("power") later in this patch ?

yes

> I am not in favor of implementing this routine, as it just adds a wrapper above
> the regulator API. What you should be doing rather is get the regulator by
> yourself here (instead of depending on the OPP core). And then you can do
> dev_pm_opp_get_voltage() here and set the voltage yourself. You may want to
> implement a version supporting triplet here though for the same.
>
> And you won't require the sync version of the API as well then.
>

That's what I initially did for this driver. I don't mind to revert back
to the initial variant in v3, it appeared to me that it will be nicer
and cleaner to have OPP API managing everything here.