msm: ipa: Clear IEOB for stopped channels with MSI IRQ

Clear IEOBs as part of CH stop for channels with MSI IRQ type

Change-Id: I7b9af7f385b0876fc2f43314bd3588110911a021
Acked-by: Nadav Levintov <nadav@qti.qualcomm.com>
Signed-off-by: Sivan Reinstein <sivanr@codeaurora.org>
This commit is contained in:
Sivan Reinstein 2021-05-12 09:03:45 +03:00
commit 16e70b68ee

View file

@ -3213,6 +3213,7 @@ int gsi_stop_channel(unsigned long chan_hdl)
int res;
uint32_t val;
struct gsi_chan_ctx *ctx;
unsigned long flags;
if (!gsi_ctx) {
pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__);
@ -3279,6 +3280,15 @@ int gsi_stop_channel(unsigned long chan_hdl)
goto free_lock;
}
/* If channel is stopped succesfully and has an event with IRQ type MSI
- clear IEOB */
if (ctx->evtr && ctx->evtr->props.intr == GSI_INTR_MSI) {
spin_lock_irqsave(&ctx->evtr->ring.slock, flags);
gsi_writel(1 << ctx->evtr->id, gsi_ctx->base +
GSI_EE_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS(gsi_ctx->per.ee));
spin_unlock_irqrestore(&ctx->evtr->ring.slock, flags);
}
res = GSI_STATUS_SUCCESS;
free_lock: