diff --git a/msm/sde/sde_rm.c b/msm/sde/sde_rm.c index 0b98f88d06..76df522d1b 100644 --- a/msm/sde/sde_rm.c +++ b/msm/sde/sde_rm.c @@ -1388,7 +1388,7 @@ static int _sde_rm_reserve_ctls( u8 *_ctl_ids) { struct sde_rm_hw_blk *ctls[MAX_BLOCKS]; - struct sde_rm_hw_iter iter; + struct sde_rm_hw_iter iter, curr; int i = 0; if (!top->num_ctl) { @@ -1398,6 +1398,7 @@ static int _sde_rm_reserve_ctls( memset(&ctls, 0, sizeof(ctls)); + sde_rm_init_hw_iter(&curr, rsvp->enc_id, SDE_HW_BLK_CTL); sde_rm_init_hw_iter(&iter, 0, SDE_HW_BLK_CTL); while (_sde_rm_get_hw_locked(rm, &iter)) { const struct sde_hw_ctl *ctl = to_sde_hw_ctl(iter.blk->hw); @@ -1432,6 +1433,12 @@ static int _sde_rm_reserve_ctls( continue; } + if (_sde_rm_get_hw_locked(rm, &curr) && (curr.blk->id != iter.blk->id)) { + SDE_EVT32(curr.blk->id, iter.blk->id, SDE_EVTLOG_FUNC_CASE1); + SDE_DEBUG("ctl in use:%d avoiding new:%d\n", curr.blk->id, iter.blk->id); + continue; + } + ctls[i] = iter.blk; SDE_DEBUG("blk id = %d, _ctl_ids[%d] = %d\n",