• Bjorn Andersson's avatar
    soc: qcom: rpmhpd: Make power_on actually enable the domain · e3e56c05
    Bjorn Andersson authored
    The general expectation is that powering on a power-domain should make
    the power domain deliver some power, and if a specific performance state
    is needed further requests has to be made.
    
    But in contrast with other power-domain implementations (e.g. rpmpd) the
    RPMh does not have an interface to enable the power, so the driver has
    to vote for a particular corner (performance level) in rpmh_power_on().
    
    But the corner is never initialized, so a typical request to simply
    enable the power domain would not actually turn on the hardware. Further
    more, when no more clients vote for a performance state (i.e. the
    aggregated vote is 0) the power domain would be turned off.
    
    Fix both of these issues by always voting for a corner with non-zero
    value, when the power domain is enabled.
    
    The tracking of the lowest non-zero corner is performed to handle the
    corner case if there's ever a domain with a non-zero lowest corner, in
    which case both rpmh_power_on() and rpmh_rpmhpd_set_performance_state()
    would be allowed to use this lowest corner.
    
    Fixes: 279b7e8a
    
     ("soc: qcom: rpmhpd: Add RPMh power domain driver")
    Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
    Link: https://lore.kernel.org/r/20211005033732.2284447-1-bjorn.andersson@linaro.org
    e3e56c05
rpmhpd.c 14.6 KB