linux/drivers/soc/qcom
Bjorn Andersson 0779521576 pmdomain: qcom: rpmhpd: Fix enabled_corner aggregation
commit 2a93c6cbd5 upstream.

Commit 'e3e56c050a ("soc: qcom: rpmhpd: Make power_on actually enable
the domain")' aimed to make sure that a power-domain that is being
enabled without any particular performance-state requested will at least
turn the rail on, to avoid filling DeviceTree with otherwise unnecessary
required-opps properties.

But in the event that aggregation happens on a disabled power-domain, with
an enabled peer without performance-state, both the local and peer
corner are 0. The peer's enabled_corner is not considered, with the
result that the underlying (shared) resource is disabled.

One case where this can be observed is when the display stack keeps mmcx
enabled (but without a particular performance-state vote) in order to
access registers and sync_state happens in the rpmhpd driver. As mmcx_ao
is flushed the state of the peer (mmcx) is not considered and mmcx_ao
ends up turning off "mmcx.lvl" underneath mmcx. This has been observed
several times, but has been painted over in DeviceTree by adding an
explicit vote for the lowest non-disabled performance-state.

Fixes: e3e56c050a ("soc: qcom: rpmhpd: Make power_on actually enable the domain")
Reported-by: Johan Hovold <johan@kernel.org>
Closes: https://lore.kernel.org/linux-arm-msm/ZdMwZa98L23mu3u6@hovoldconsulting.com/
Cc:  <stable@vger.kernel.org>
Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Tested-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20240226-rpmhpd-enable-corner-fix-v1-1-68c004cec48c@quicinc.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-03-06 14:38:49 +00:00
..
apr.c soc: qcom: apr: Make qcom,protection-domain optional again 2023-01-24 07:22:49 +01:00
cmd-db.c soc: qcom: cmd-db: allow loading as a module 2020-10-26 16:02:29 -05:00
cpr.c PM: AVS: qcom-cpr: Fix an error handling path in cpr_probe() 2023-02-01 08:27:06 +01:00
Kconfig soc: qcom: Select REMAP_MMIO for LLCC driver 2023-01-12 11:58:49 +01:00
kryo-l2-accessors.c soc: qcom: kryo-l2-accessors: Fix misnaming of 'val' 2020-11-10 23:23:02 -06:00
llcc-qcom.c soc: qcom: llcc: Fix dis_cap_alloc and retain_on_pc configuration 2024-01-25 14:52:39 -08:00
Makefile PM: AVS: qcom-cpr: Move the driver to the qcom specific drivers 2020-10-22 18:38:21 +02:00
mdt_loader.c soc: qcom: mdt_loader: Drop PT_LOAD check on hash segment 2021-09-19 19:55:20 -05:00
ocmem.c soc: qcom: ocmem: Fix NUM_PORTS & NUM_MACROS macros 2023-09-19 12:22:35 +02:00
pdr_interface.c soc: qcom: pdr: Fix error return code in pdr_register_listener 2021-04-07 22:31:39 -05:00
pdr_internal.h soc: qcom: pdr: Fixup array type of get_domain_list_resp message 2020-09-14 23:53:29 +00:00
qcom-geni-se.c soc: qcom: geni: Add support for gpi dma 2021-08-04 14:23:31 -05:00
qcom_aoss.c soc: qcom: aoss: Fix refcount leak in qmp_cooling_devices_register 2022-08-17 14:23:10 +02:00
qcom_gsbi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 409 2019-06-05 17:37:14 +02:00
qmi_encdec.c soc: qcom: qmi_encdec: Restrict string length in decode 2023-09-19 12:22:56 +02:00
qmi_interface.c soc: qcom: qmi: Return EPROBE_DEFER if no address family 2019-12-10 22:44:34 -08:00
rmtfs_mem.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
rpmh-internal.h soc: qcom: rpmh-rsc: Sleep waiting for tcs slots to be free 2020-09-10 16:56:12 +00:00
rpmh-rsc.c soc: qcom: rpmh-rsc: Fold WARN_ON() into if condition 2021-03-11 20:22:21 -06:00
rpmh.c soc: qcom: rpmh: Use __fill_rpmh_msg API during rpmh_write() 2020-11-26 11:43:00 -06:00
rpmhpd.c pmdomain: qcom: rpmhpd: Fix enabled_corner aggregation 2024-03-06 14:38:49 +00:00
rpmpd.c soc: qcom: rpmpd: Check for null return of devm_kcalloc 2022-04-08 14:23:15 +02:00
smd-rpm.c soc: qcom: smd-rpm: Add SM6115 compatible 2021-08-04 18:22:22 -05:00
smem.c soc: qcom: smem: Update max processor count 2021-03-11 20:22:20 -06:00
smem_state.c soc: qcom: smem_state: Add refcounting for the 'state->of_node' 2022-10-26 12:34:58 +02:00
smp2p.c soc: qcom: smp2p: Fix missing of_node_put() in smp2p_parse_ipc 2022-06-09 10:23:04 +02:00
smsm.c soc: qcom: smsm: Fix refcount leak bugs in qcom_smsm_probe() 2022-10-26 12:34:58 +02:00
socinfo.c soc: qcom: socinfo: add two missing PMIC IDs 2021-11-18 19:16:53 +01:00
trace-rpmh.h drivers: qcom: rpmh-rsc: log RPMH requests in FTRACE 2018-07-21 13:32:31 -05:00
wcnss_ctrl.c soc: qcom: wcnss_ctrl: Allow reading firmware-name from DT 2021-04-05 22:35:06 -05:00