summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2014-09-10 07:04:32 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:11:17 -0400
commit1c7dcfdeef3b0672317fca947cb2097e97c623a9 (patch)
treef5e9c6a843d3e0079f1a124d2b9ffc21bb7585b5 /drivers/gpu/nvgpu/gk20a/channel_gk20a.c
parent2f232348e686f92a6a34e5fa7b98884d4b48313b (diff)
gpu: nvgpu: use TSG recover API
Use TSG specific API gk20a_fifo_recover_tsg() in following cases : - IOCTL_CHANNEL_FORCE_RESET to force reset a channel in TSG, reset all the channels - handle pbdma intr while resetting in case of pbdma intr, if channel is part of TSG, recover entire TSG - TSG preempt failure when TSG preempt times out, use TSG recover API Use preempt_tsg() API to preempt if channel is part of TSG Add below two generic APIs which will take care of preempting/ recovering either of channel or TSG as required gk20a_fifo_preempt() gk20a_fifo_force_reset_ch() Bug 1470692 Change-Id: I8d46e252af79136be85a9a2accf8b51bd924ca8c Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/497875 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 7a3132c9..1e71c1c7 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -2293,8 +2293,6 @@ long gk20a_channel_ioctl(struct file *filp,
2293 gk20a_idle(dev); 2293 gk20a_idle(dev);
2294 break; 2294 break;
2295 case NVHOST_IOCTL_CHANNEL_PREEMPT: 2295 case NVHOST_IOCTL_CHANNEL_PREEMPT:
2296 if (gk20a_is_channel_marked_as_tsg(ch))
2297 return -EINVAL;
2298 err = gk20a_busy(dev); 2296 err = gk20a_busy(dev);
2299 if (err) { 2297 if (err) {
2300 dev_err(&dev->dev, 2298 dev_err(&dev->dev,
@@ -2302,8 +2300,7 @@ long gk20a_channel_ioctl(struct file *filp,
2302 __func__, cmd); 2300 __func__, cmd);
2303 return err; 2301 return err;
2304 } 2302 }
2305 /* preempt channel */ 2303 err = gk20a_fifo_preempt(ch->g, ch);
2306 err = gk20a_fifo_preempt_channel(ch->g, ch->hw_chid);
2307 gk20a_idle(dev); 2304 gk20a_idle(dev);
2308 break; 2305 break;
2309 case NVHOST_IOCTL_CHANNEL_FORCE_RESET: 2306 case NVHOST_IOCTL_CHANNEL_FORCE_RESET:
@@ -2314,9 +2311,7 @@ long gk20a_channel_ioctl(struct file *filp,
2314 __func__, cmd); 2311 __func__, cmd);
2315 return err; 2312 return err;
2316 } 2313 }
2317 gk20a_set_error_notifier(ch, 2314 err = gk20a_fifo_force_reset_ch(ch, true);
2318 NVHOST_CHANNEL_RESETCHANNEL_VERIF_ERROR);
2319 gk20a_fifo_recover_ch(ch->g, ch->hw_chid, true);
2320 gk20a_idle(dev); 2315 gk20a_idle(dev);
2321 break; 2316 break;
2322 default: 2317 default: