From 54810444d24bd8ca820f88eadbfd227b5fe8c492 Mon Sep 17 00:00:00 2001 From: Konsta Holtta Date: Fri, 9 Dec 2016 13:15:51 +0200 Subject: gpu: nvgpu: fix timeout retry usage in mm_gk20a.c Loop conditions of timeout checking introduced in commit 21094783114b9314d57f412196544a34b3a40f4a ("gpu: nvgpu: Use timeout retry API in mm_gk20a.c") were flipped by accident, so each usage in a loop actually did not wait enough but ran only one iteration. Fix the conditions to loop as long as the timeout is NOT expired. Also restore l2 flush timeout to 10 ms from 1, which was done in commit 030ef82bdd474ef4261a2f40995b8db57857899e ("gpu: nvgpu: increase l2 flush timeout") but overwritten by the above "use timeout" commit. Bug 200260715 Change-Id: I0db16be79a1a27caa3d97fac9d4361582cc232e8 Signed-off-by: Konsta Holtta Reviewed-on: http://git-master/r/1268482 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seshendra Gadagottu Reviewed-by: Alex Waterman GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 7ecef39b..13dc4241 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -5049,7 +5049,7 @@ int gk20a_mm_fb_flush(struct gk20a *g) udelay(5); } else break; - } while (nvgpu_timeout_check(&timeout)); + } while (!nvgpu_timeout_check(&timeout)); if (nvgpu_timeout_peek(&timeout)) { if (g->ops.fb.dump_vpr_wpr_info) @@ -5092,7 +5092,7 @@ static void gk20a_mm_l2_invalidate_locked(struct gk20a *g) udelay(5); } else break; - } while (nvgpu_timeout_check(&timeout)); + } while (!nvgpu_timeout_check(&timeout)); if (nvgpu_timeout_peek(&timeout)) gk20a_warn(dev_from_gk20a(g), @@ -5125,7 +5125,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate) if (!g->power_on) goto hw_was_off; - nvgpu_timeout_init(g, &timeout, 200, NVGPU_TIMER_RETRY_TIMER); + nvgpu_timeout_init(g, &timeout, 2000, NVGPU_TIMER_RETRY_TIMER); mutex_lock(&mm->l2_op_lock); @@ -5147,7 +5147,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate) udelay(5); } else break; - } while (nvgpu_timeout_check_msg(&timeout, + } while (!nvgpu_timeout_check_msg(&timeout, "l2_flush_dirty too many retries")); trace_gk20a_mm_l2_flush_done(dev_name(g->dev)); @@ -5192,7 +5192,7 @@ void gk20a_mm_cbc_clean(struct gk20a *g) udelay(5); } else break; - } while (nvgpu_timeout_check_msg(&timeout, + } while (!nvgpu_timeout_check_msg(&timeout, "l2_clean_comptags too many retries")); mutex_unlock(&mm->l2_op_lock); @@ -5259,7 +5259,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm) if (fb_mmu_ctrl_pri_fifo_space_v(data) != 0) break; udelay(2); - } while (nvgpu_timeout_check_msg(&timeout, + } while (!nvgpu_timeout_check_msg(&timeout, "wait mmu fifo space")); if (nvgpu_timeout_peek(&timeout)) @@ -5283,7 +5283,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm) fb_mmu_ctrl_pri_fifo_empty_false_f()) break; udelay(2); - } while (nvgpu_timeout_check_msg(&timeout, + } while (!nvgpu_timeout_check_msg(&timeout, "wait mmu invalidate")); trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev)); -- cgit v1.2.2