• Ulf Hansson's avatar
    OPP: Fix support for required OPPs for multiple PM domains · 9ec87c59
    Ulf Hansson authored
    It has turned out that having _set_required_opps() to recursively call
    dev_pm_opp_set_opp() to set the required OPPs, doesn't really work as well
    as we expected.
    
    More precisely, at each recursive call to dev_pm_opp_set_opp() we are
    changing an OPP for a required_dev that belongs to a required-OPP table.
    The problem with this, is that we may have several devices sharing the same
    required-OPP table, which leads to an incorrect behaviour in regards to
    aggregating the per device votes.
    
    To fix the problem for a required-OPP table belonging to a PM domain, which
    is the only existing usecase for now, let's simply replace the call to
    dev_pm_opp_set_opp() in _set_required_opps() by a call to _set_opp_level().
    
    Moving forward we may potentially need to add support for other types of
    required-OPP tables. In this case, the aggregation needs to be thought of.
    
    Fixes: e37440e7 ("OPP: Call dev_pm_opp_set_opp() for required OPPs")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Link: https://lore.kernel.org/r/20240822224547.385095-2-ulf.hansson@linaro.org
    9ec87c59
core.c 84.2 KB