summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-30 06:28:02 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-30 06:28:02 -0800
commit3e0cf8f89db101bd47b1438de5da4e14c46488bf (patch)
tree6da635853de6db5d263d65635eafd33627dd2482
parentdc351565001d8570c7e8519b85f2327cfff41455 (diff)
parenta3d3c7f534c22d71977e309b03966d9c1a1a7a39 (diff)
Merge "msm: sde: correct polling to use software timestamp"
-rw-r--r--drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
index 79013344b615..f2a9da737453 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_r3.c
@@ -1078,21 +1078,33 @@ static u32 sde_hw_rotator_wait_done_regdma(
spin_unlock_irqrestore(&rot->rotisr_lock, flags);
} else {
int cnt = 200;
+ bool pending;
do {
udelay(500);
- status = SDE_ROTREG_READ(rot->mdss_base, ROTTOP_STATUS);
+ last_isr = SDE_ROTREG_READ(rot->mdss_base,
+ REGDMA_CSR_REGDMA_INT_STATUS);
+ pending = sde_hw_rotator_pending_swts(rot, ctx, &swts);
cnt--;
- } while ((cnt > 0) && (status & ROT_BUSY_BIT)
- && ((status & ROT_ERROR_BIT) == 0));
+ } while ((cnt > 0) && pending &&
+ ((last_isr & REGDMA_INT_ERR_MASK) == 0));
- if (status & ROT_ERROR_BIT)
- SDEROT_ERR("Rotator error\n");
- else if (status & ROT_BUSY_BIT)
- SDEROT_ERR("Rotator busy\n");
+ if (last_isr & REGDMA_INT_ERR_MASK) {
+ SDEROT_ERR("Rotator error, ts:0x%X/0x%X status:%x\n",
+ ctx->timestamp, swts, last_isr);
+ sde_hw_rotator_dump_status(rot);
+ status = ROT_ERROR_BIT;
+ } else if (pending) {
+ SDEROT_ERR("Rotator timeout, ts:0x%X/0x%X status:%x\n",
+ ctx->timestamp, swts, last_isr);
+ sde_hw_rotator_dump_status(rot);
+ status = ROT_ERROR_BIT;
+ } else {
+ status = 0;
+ }
SDE_ROTREG_WRITE(rot->mdss_base, REGDMA_CSR_REGDMA_INT_CLEAR,
- 0xFFFF);
+ last_isr);
}
sts = (status & ROT_ERROR_BIT) ? -ENODEV : 0;