]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
gpu: nvgpu: gk20a: export wait_channel_idle()
authorDeepak Nibade <dnibade@nvidia.com>
Tue, 20 May 2014 09:30:30 +0000 (15:00 +0530)
committerRiham Haidar <rhaidar@nvidia.com>
Fri, 13 Jun 2014 00:33:26 +0000 (17:33 -0700)
- Export gk20a_wait_channel_idle() function from channel_gk20a.h
- also, return error -EBUSY from this function when channel is
  found to be not idle

Bug 1487804

Change-Id: Ia7425e9b1332260ee9a53dca55ab07541f2755a9
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/412059
(cherry picked from commit 24c474f62c44a9c0b62b66342336876536481831)
Reviewed-on: http://git-master/r/421694
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
GVS: Gerrit_Virtual_Submit

drivers/gpu/nvgpu/gk20a/channel_gk20a.c
drivers/gpu/nvgpu/gk20a/channel_gk20a.h

index 7cfb3c244be4c70b2e61abfb8eefd44efe5d57b7..1f650e0c13dfef55d43d80a331e3d0bf8724c643 100644 (file)
@@ -431,7 +431,7 @@ void gk20a_disable_channel_no_update(struct channel_gk20a *ch)
                     ccsr_channel_enable_clr_true_f());
 }
 
-static int gk20a_wait_channel_idle(struct channel_gk20a *ch)
+int gk20a_wait_channel_idle(struct channel_gk20a *ch)
 {
        bool channel_idle = false;
        unsigned long end_jiffies = jiffies +
@@ -448,8 +448,11 @@ static int gk20a_wait_channel_idle(struct channel_gk20a *ch)
        } while (time_before(jiffies, end_jiffies)
                        || !tegra_platform_is_silicon());
 
-       if (!channel_idle)
-               gk20a_err(dev_from_gk20a(ch->g), "channel jobs not freed");
+       if (!channel_idle) {
+               gk20a_err(dev_from_gk20a(ch->g), "jobs not freed for channel %d\n",
+                               ch->hw_chid);
+               return -EBUSY;
+       }
 
        return 0;
 }
index 47fc714cd922e9b9ea589f56f6ee4d59bba69816..320ada62a965eee7f32907963a6d4efba68b91db 100644 (file)
@@ -169,4 +169,6 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed);
 
 void gk20a_init_channel(struct gpu_ops *gops);
 
+int gk20a_wait_channel_idle(struct channel_gk20a *ch);
+
 #endif /*__CHANNEL_GK20A_H__*/