soc: qcom: rpmhpd: Use highest corner until sync_state
authorBjorn Andersson <bjorn.andersson@linaro.org>
Thu, 15 Sep 2022 20:55:59 +0000 (13:55 -0700)
committerBjorn Andersson <andersson@kernel.org>
Mon, 17 Oct 2022 18:19:40 +0000 (13:19 -0500)
commit3a39049f88e4e92823bcc43fa8f148cf7dfdda67
tree532d46ac10a0fe7b645c4c58712aa66608f948b2
parenta30c3c6a351c42c8a843f7631f0364dfddf337c7
soc: qcom: rpmhpd: Use highest corner until sync_state

In some cases the hardware that the bootloader has left configured
depends on RPMH power domains for their operation up until the point
where the related Linux device driver probes and can inherit that
configuration, or power down the hardware gracefully.

Unfortunately as Linux probes the releavant drivers in sequence there
are periods during the Linux boot flow where either the genpd refcount
will reach 0, or worse where the active performance_state votes does not
meet the requirements of the state that the hardware was left in.

One specific example of this is during boot of e.g. SM8150/SC8180X,
where the display clock controller probes, without any particular
performance state needs (to access its registers). This will drop the
MMCX rail to MIN_SVS, which isn't sufficient to sustain the clock rates
that the later probing MDP is configured to. This results in an
unrecoverable system state.

Handle both these cases by keeping the RPMH power-domais that are
referenced voted for highest state, until sync_state indicates that all
devices referencing the RPMH power-domain driver has been probed.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Caleb Connolly <caleb@connolly.tech>
Reviewed-by: Konrad Dybcio <konrad.dybcio@somainline.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
[bjorn: Added print for sync_state errors]
Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20220915205559.14574-1-quic_bjorande@quicinc.com
drivers/soc/qcom/rpmhpd.c