gpu: nvgpu: fix timeout retry usage in mm_gk20a.c

Loop conditions of timeout checking introduced in commit
2109478311 ("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
030ef82bdd ("gpu: nvgpu: increase l2 flush
timeout") but overwritten by the above "use timeout" commit.

Bug 200260715

Change-Id: I0db16be79a1a27caa3d97fac9d4361582cc232e8
Signed-off-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-on: http://git-master/r/1268482
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Reviewed-by: Alex Waterman <alexw@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Konsta Holtta
2016-12-09 13:15:51 +02:00
committed by mobile promotions
parent 0859cf9539
commit 54810444d2

View File

@@ -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));