diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index d5901354..d36b5d34 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -36,6 +36,8 @@ | |||
36 | #include "fence_gk20a.h" | 36 | #include "fence_gk20a.h" |
37 | #include "semaphore_gk20a.h" | 37 | #include "semaphore_gk20a.h" |
38 | 38 | ||
39 | #include <nvgpu/timers.h> | ||
40 | |||
39 | #include <nvgpu/hw/gk20a/hw_ram_gk20a.h> | 41 | #include <nvgpu/hw/gk20a/hw_ram_gk20a.h> |
40 | #include <nvgpu/hw/gk20a/hw_fifo_gk20a.h> | 42 | #include <nvgpu/hw/gk20a/hw_fifo_gk20a.h> |
41 | #include <nvgpu/hw/gk20a/hw_pbdma_gk20a.h> | 43 | #include <nvgpu/hw/gk20a/hw_pbdma_gk20a.h> |
@@ -557,8 +559,10 @@ void gk20a_channel_abort(struct channel_gk20a *ch, bool channel_preempt) | |||
557 | int gk20a_wait_channel_idle(struct channel_gk20a *ch) | 559 | int gk20a_wait_channel_idle(struct channel_gk20a *ch) |
558 | { | 560 | { |
559 | bool channel_idle = false; | 561 | bool channel_idle = false; |
560 | unsigned long end_jiffies = jiffies + | 562 | struct nvgpu_timeout timeout; |
561 | msecs_to_jiffies(gk20a_get_gr_idle_timeout(ch->g)); | 563 | |
564 | nvgpu_timeout_init(ch->g, &timeout, gk20a_get_gr_idle_timeout(ch->g), | ||
565 | NVGPU_TIMER_CPU_TIMER); | ||
562 | 566 | ||
563 | do { | 567 | do { |
564 | channel_gk20a_joblist_lock(ch); | 568 | channel_gk20a_joblist_lock(ch); |
@@ -568,8 +572,7 @@ int gk20a_wait_channel_idle(struct channel_gk20a *ch) | |||
568 | break; | 572 | break; |
569 | 573 | ||
570 | usleep_range(1000, 3000); | 574 | usleep_range(1000, 3000); |
571 | } while (time_before(jiffies, end_jiffies) | 575 | } while (!nvgpu_timeout_expired(&timeout)); |
572 | || !tegra_platform_is_silicon()); | ||
573 | 576 | ||
574 | if (!channel_idle) { | 577 | if (!channel_idle) { |
575 | gk20a_err(dev_from_gk20a(ch->g), "jobs not freed for channel %d\n", | 578 | gk20a_err(dev_from_gk20a(ch->g), "jobs not freed for channel %d\n", |