diff options
author | Konsta Holtta <kholtta@nvidia.com> | 2016-12-09 06:15:51 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-12-09 16:44:53 -0500 |
commit | 54810444d24bd8ca820f88eadbfd227b5fe8c492 (patch) | |
tree | 95b4ad4882e3babc162bbcb381e14e59bba1f786 /drivers/gpu/nvgpu/gk20a | |
parent | 0859cf9539841ed8e6af09472f4253e497e4248d (diff) |
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 <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>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 14 |
1 files changed, 7 insertions, 7 deletions
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) | |||
5049 | udelay(5); | 5049 | udelay(5); |
5050 | } else | 5050 | } else |
5051 | break; | 5051 | break; |
5052 | } while (nvgpu_timeout_check(&timeout)); | 5052 | } while (!nvgpu_timeout_check(&timeout)); |
5053 | 5053 | ||
5054 | if (nvgpu_timeout_peek(&timeout)) { | 5054 | if (nvgpu_timeout_peek(&timeout)) { |
5055 | if (g->ops.fb.dump_vpr_wpr_info) | 5055 | if (g->ops.fb.dump_vpr_wpr_info) |
@@ -5092,7 +5092,7 @@ static void gk20a_mm_l2_invalidate_locked(struct gk20a *g) | |||
5092 | udelay(5); | 5092 | udelay(5); |
5093 | } else | 5093 | } else |
5094 | break; | 5094 | break; |
5095 | } while (nvgpu_timeout_check(&timeout)); | 5095 | } while (!nvgpu_timeout_check(&timeout)); |
5096 | 5096 | ||
5097 | if (nvgpu_timeout_peek(&timeout)) | 5097 | if (nvgpu_timeout_peek(&timeout)) |
5098 | gk20a_warn(dev_from_gk20a(g), | 5098 | gk20a_warn(dev_from_gk20a(g), |
@@ -5125,7 +5125,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate) | |||
5125 | if (!g->power_on) | 5125 | if (!g->power_on) |
5126 | goto hw_was_off; | 5126 | goto hw_was_off; |
5127 | 5127 | ||
5128 | nvgpu_timeout_init(g, &timeout, 200, NVGPU_TIMER_RETRY_TIMER); | 5128 | nvgpu_timeout_init(g, &timeout, 2000, NVGPU_TIMER_RETRY_TIMER); |
5129 | 5129 | ||
5130 | mutex_lock(&mm->l2_op_lock); | 5130 | mutex_lock(&mm->l2_op_lock); |
5131 | 5131 | ||
@@ -5147,7 +5147,7 @@ void gk20a_mm_l2_flush(struct gk20a *g, bool invalidate) | |||
5147 | udelay(5); | 5147 | udelay(5); |
5148 | } else | 5148 | } else |
5149 | break; | 5149 | break; |
5150 | } while (nvgpu_timeout_check_msg(&timeout, | 5150 | } while (!nvgpu_timeout_check_msg(&timeout, |
5151 | "l2_flush_dirty too many retries")); | 5151 | "l2_flush_dirty too many retries")); |
5152 | 5152 | ||
5153 | trace_gk20a_mm_l2_flush_done(dev_name(g->dev)); | 5153 | trace_gk20a_mm_l2_flush_done(dev_name(g->dev)); |
@@ -5192,7 +5192,7 @@ void gk20a_mm_cbc_clean(struct gk20a *g) | |||
5192 | udelay(5); | 5192 | udelay(5); |
5193 | } else | 5193 | } else |
5194 | break; | 5194 | break; |
5195 | } while (nvgpu_timeout_check_msg(&timeout, | 5195 | } while (!nvgpu_timeout_check_msg(&timeout, |
5196 | "l2_clean_comptags too many retries")); | 5196 | "l2_clean_comptags too many retries")); |
5197 | 5197 | ||
5198 | mutex_unlock(&mm->l2_op_lock); | 5198 | mutex_unlock(&mm->l2_op_lock); |
@@ -5259,7 +5259,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm) | |||
5259 | if (fb_mmu_ctrl_pri_fifo_space_v(data) != 0) | 5259 | if (fb_mmu_ctrl_pri_fifo_space_v(data) != 0) |
5260 | break; | 5260 | break; |
5261 | udelay(2); | 5261 | udelay(2); |
5262 | } while (nvgpu_timeout_check_msg(&timeout, | 5262 | } while (!nvgpu_timeout_check_msg(&timeout, |
5263 | "wait mmu fifo space")); | 5263 | "wait mmu fifo space")); |
5264 | 5264 | ||
5265 | if (nvgpu_timeout_peek(&timeout)) | 5265 | if (nvgpu_timeout_peek(&timeout)) |
@@ -5283,7 +5283,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm) | |||
5283 | fb_mmu_ctrl_pri_fifo_empty_false_f()) | 5283 | fb_mmu_ctrl_pri_fifo_empty_false_f()) |
5284 | break; | 5284 | break; |
5285 | udelay(2); | 5285 | udelay(2); |
5286 | } while (nvgpu_timeout_check_msg(&timeout, | 5286 | } while (!nvgpu_timeout_check_msg(&timeout, |
5287 | "wait mmu invalidate")); | 5287 | "wait mmu invalidate")); |
5288 | 5288 | ||
5289 | trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev)); | 5289 | trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev)); |