From mboxrd@z Thu Jan 1 00:00:00 1970 From: Raju P L S S S N Subject: Re: [PATCH v8 10/10] drivers: qcom: rpmh-rsc: allow active requests from wake TCS Date: Wed, 23 May 2018 19:51:05 +0530 Message-ID: <8d7f1fd2-1429-577f-309e-ffff8b7824bb@codeaurora.org> References: <20180509170159.29682-1-ilina@codeaurora.org> <20180509170159.29682-11-ilina@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Doug Anderson , Lina Iyer Cc: Andy Gross , David Brown , linux-arm-msm@vger.kernel.org, "open list:ARM/QUALCOMM SUPPORT" , Rajendra Nayak , msivasub@codeaurora.org, mkshah@codeaurora.org, Bjorn Andersson , LKML , Stephen Boyd , Evan Green , Matthias Kaehlcke List-Id: linux-arm-msm@vger.kernel.org Hi, On 5/12/2018 1:47 AM, Doug Anderson wrote: > Hi, > > On Wed, May 9, 2018 at 10:01 AM, Lina Iyer wrote: >> Some RSCs may only have sleep and wake TCS, i.e, there is no dedicated >> TCS for active mode request, but drivers may still want to make active >> requests from these RSCs. In such cases re-purpose the wake TCS to send >> active state requests. >> >> The requirement for this is that the driver is aware that the wake TCS >> is being repurposed to send active request, hence the sleep and wake >> TCSes be invalidated before the active request is sent. >> >> Signed-off-by: Lina Iyer >> Reviewed-by: Matthias Kaehlcke >> --- >> drivers/soc/qcom/rpmh-rsc.c | 18 +++++++++++++++++- >> 1 file changed, 17 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c >> index 68c25ebbbe09..369b9b3eedc5 100644 >> --- a/drivers/soc/qcom/rpmh-rsc.c >> +++ b/drivers/soc/qcom/rpmh-rsc.c >> @@ -153,6 +153,7 @@ static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv, >> const struct tcs_request *msg) >> { >> int type; >> + struct tcs_group *tcs; >> >> switch (msg->state) { >> case RPMH_ACTIVE_ONLY_STATE: >> @@ -168,7 +169,22 @@ static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv, >> return ERR_PTR(-EINVAL); >> } >> >> - return get_tcs_of_type(drv, type); >> + /* >> + * If we are making an active request on a RSC that does not have a >> + * dedicated TCS for active state use, then re-purpose a wake TCS to >> + * send active votes. >> + * NOTE: The driver must be aware that this RSC does not have a >> + * dedicated AMC, and therefore would invalidate the sleep and wake >> + * TCSes before making an active state request. >> + */ >> + tcs = get_tcs_of_type(drv, type); >> + if (msg->state == RPMH_ACTIVE_ONLY_STATE && IS_ERR(tcs)) { >> + tcs = get_tcs_of_type(drv, WAKE_TCS); >> + if (!IS_ERR(tcs)) >> + rpmh_rsc_invalidate(drv); > > I noticed that rpmh_rsc_invalidate() can return -EAGAIN. Do you need > to deal with that here? Yes. will add the check here. Thanks, Raju. > > > -Doug >