| From 758df3b0f9af992fee782d8e5ffd6a946ed559fe Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 5 Sep 2018 14:14:38 -0600 |
| Subject: drivers: qcom: rpmh-rsc: clear wait_for_compl after use |
| |
| From: Lina Iyer <ilina@codeaurora.org> |
| |
| [ Upstream commit 09e97b6c8754c91470455e69ebd827b741f80af5 ] |
| |
| The wait_for_compl register ensures the request sequence is maintained |
| when sending requests from the TCS. Clear the register after sending |
| active request and during invalidate of the sleep and wake TCS. |
| |
| Reported-by: Raju P.L.S.S.S.N <rplsssn@codeaurora.org> |
| Signed-off-by: Lina Iyer <ilina@codeaurora.org> |
| Signed-off-by: Andy Gross <andy.gross@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/soc/qcom/rpmh-rsc.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c |
| index ee75da66d64bf..75bd9a83aef00 100644 |
| --- a/drivers/soc/qcom/rpmh-rsc.c |
| +++ b/drivers/soc/qcom/rpmh-rsc.c |
| @@ -121,6 +121,7 @@ static int tcs_invalidate(struct rsc_drv *drv, int type) |
| return -EAGAIN; |
| } |
| write_tcs_reg_sync(drv, RSC_DRV_CMD_ENABLE, m, 0); |
| + write_tcs_reg_sync(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, m, 0); |
| } |
| bitmap_zero(tcs->slots, MAX_TCS_SLOTS); |
| spin_unlock(&tcs->lock); |
| @@ -239,6 +240,7 @@ static irqreturn_t tcs_tx_done(int irq, void *p) |
| skip: |
| /* Reclaim the TCS */ |
| write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0); |
| + write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, i, 0); |
| write_tcs_reg(drv, RSC_DRV_IRQ_CLEAR, 0, BIT(i)); |
| spin_lock(&drv->lock); |
| clear_bit(i, drv->tcs_in_use); |
| -- |
| 2.20.1 |
| |