From fb9c36e4b2988d9b8ec156eaaf3c6d701b5daafa Mon Sep 17 00:00:00 2001 From: Maulik Shah Date: Fri, 26 Jun 2020 13:55:34 +0530 Subject: [PATCH] soc: qcom: rpmh-rsc: Correctly handle zero active TCS for solver mode If we made an active request on a RSC that does not have a dedicated TCS for active state use, then re-purposed wake TCSes should be checked for not busy before setting solver mode. Change-Id: I8a493f4ac15d31df5b1963e5ae0d5d9966b482cc Signed-off-by: Maulik Shah --- drivers/soc/qcom/rpmh-rsc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c index 24bfb4b3928d..9b4c507bf62e 100644 --- a/drivers/soc/qcom/rpmh-rsc.c +++ b/drivers/soc/qcom/rpmh-rsc.c @@ -617,6 +617,14 @@ void rpmh_rsc_mode_solver_set(struct rsc_drv *drv, bool enable) int m; struct tcs_group *tcs = get_tcs_of_type(drv, ACTIVE_TCS); + /* + * If we made an active request on a RSC that does not have a + * dedicated TCS for active state use, then re-purposed wake TCSes + * should be checked for not busy, because we used wake TCSes for + * active requests in this case. + */ + if (!tcs->num_tcs) + tcs = get_tcs_of_type(drv, WAKE_TCS); again: spin_lock(&drv->lock); for (m = tcs->offset; m < tcs->offset + tcs->num_tcs; m++) {