Re: [PATCH v2 1/3] PM/OPP: Support to match OPP based on both frequency and level.
From: Viresh Kumar
Date: Mon Aug 18 2025 - 04:58:43 EST
On 18-08-25, 13:52, Krishna Chaitanya Chundru wrote:
> +static bool _compare_opp_key_exact(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp,
> + struct dev_pm_opp_key opp_key, struct dev_pm_opp_key key)
> +{
> + bool freq_match = (opp_key.freq == 0 || key.freq == 0 || opp_key.freq == key.freq);
Why !opp_key.freq is okay ? If the user has provided a freq value,
then it must match. Isn't it ?
> + bool level_match = (opp_key.level == OPP_LEVEL_UNSET ||
> + key.level == OPP_LEVEL_UNSET || opp_key.level == key.level);
We should compare bw too I guess in the same routine.
> + if (freq_match && level_match) {
> + *opp = temp_opp;
> + return true;
> + }
> +
> + return false;
> +}
> +/**
> + * dev_pm_opp_find_freq_level_exact() - Search for an exact frequency and level
Instead dev_pm_opp_find_key_exact() and let the user pass the key
struct itself.
> +struct dev_pm_opp *dev_pm_opp_find_freq_level_exact(struct device *dev,
> + unsigned long freq,
> + unsigned int level,
> + bool available)
> +{
> + struct opp_table *opp_table __free(put_opp_table);
The constructor here must be real, i.e. initialize opp_table here
itself. This is well documented in cleanup.h. Yes there are examples
like this in the OPP core which are required to be fixed too.
--
viresh