summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-10-03 03:51:07 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-10-04 06:37:14 -0400
commit3cd0603c4218ee33eb1e5a36322b25d369ed487b (patch)
tree05f9ce31c00335e308841a454918ceec38e8c413 /drivers
parente400475a915f73abb823b00945179eec470f73e0 (diff)
gpu: nvgpu: verify channel status while closing per-platform
We right now call gk20a_fifo_tsg_unbind_channel_verify_status() to verify channel status while unbinding a channel from TSG while closing Add support to do this verification per-platform and keep this disabled for vgpu platforms Bug 200327095 Change-Id: I19fab41c74d10d528d22bd9b3982a4ed73c3b4ca Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1572368 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c10
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c1
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c1
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c1
6 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index 7fc773f8..8e78b95e 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -1908,7 +1908,7 @@ int gk20a_fifo_force_reset_ch(struct channel_gk20a *ch,
1908 return 0; 1908 return 0;
1909} 1909}
1910 1910
1911static int gk20a_fifo_tsg_unbind_channel_verify_status(struct channel_gk20a *ch) 1911int gk20a_fifo_tsg_unbind_channel_verify_status(struct channel_gk20a *ch)
1912{ 1912{
1913 struct gk20a *g = ch->g; 1913 struct gk20a *g = ch->g;
1914 1914
@@ -1939,9 +1939,11 @@ int gk20a_fifo_tsg_unbind_channel(struct channel_gk20a *ch)
1939 if (err) 1939 if (err)
1940 goto fail_enable_tsg; 1940 goto fail_enable_tsg;
1941 1941
1942 err = gk20a_fifo_tsg_unbind_channel_verify_status(ch); 1942 if (g->ops.fifo.tsg_verify_channel_status) {
1943 if (err) 1943 err = g->ops.fifo.tsg_verify_channel_status(ch);
1944 goto fail_enable_tsg; 1944 if (err)
1945 goto fail_enable_tsg;
1946 }
1945 1947
1946 /* Channel should be seen as TSG channel while updating runlist */ 1948 /* Channel should be seen as TSG channel while updating runlist */
1947 err = channel_gk20a_update_runlist(ch, false); 1949 err = channel_gk20a_update_runlist(ch, false);
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
index ceea21fa..68f53316 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
@@ -373,6 +373,7 @@ void gk20a_fifo_disable_channel(struct channel_gk20a *ch);
373 373
374bool gk20a_fifo_channel_status_is_next(struct gk20a *g, u32 chid); 374bool gk20a_fifo_channel_status_is_next(struct gk20a *g, u32 chid);
375bool gk20a_fifo_channel_status_is_ctx_reload(struct gk20a *g, u32 chid); 375bool gk20a_fifo_channel_status_is_ctx_reload(struct gk20a *g, u32 chid);
376int gk20a_fifo_tsg_unbind_channel_verify_status(struct channel_gk20a *ch);
376 377
377struct channel_gk20a *gk20a_refch_from_inst_ptr(struct gk20a *g, u64 inst_ptr); 378struct channel_gk20a *gk20a_refch_from_inst_ptr(struct gk20a *g, u64 inst_ptr);
378void gk20a_fifo_channel_unbind(struct channel_gk20a *ch_gk20a); 379void gk20a_fifo_channel_unbind(struct channel_gk20a *ch_gk20a);
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index db38fae4..97b40474 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -491,6 +491,7 @@ struct gpu_ops {
491 int (*preempt_tsg)(struct gk20a *g, u32 tsgid); 491 int (*preempt_tsg)(struct gk20a *g, u32 tsgid);
492 int (*enable_tsg)(struct tsg_gk20a *tsg); 492 int (*enable_tsg)(struct tsg_gk20a *tsg);
493 int (*disable_tsg)(struct tsg_gk20a *tsg); 493 int (*disable_tsg)(struct tsg_gk20a *tsg);
494 int (*tsg_verify_channel_status)(struct channel_gk20a *ch);
494 void (*tsg_verify_status_ctx_reload)(struct channel_gk20a *ch); 495 void (*tsg_verify_status_ctx_reload)(struct channel_gk20a *ch);
495 void (*tsg_verify_status_faulted)(struct channel_gk20a *ch); 496 void (*tsg_verify_status_faulted)(struct channel_gk20a *ch);
496 int (*reschedule_runlist)(struct gk20a *g, u32 runlist_id); 497 int (*reschedule_runlist)(struct gk20a *g, u32 runlist_id);
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
index 98c4ddfb..76c87c00 100644
--- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
@@ -379,6 +379,7 @@ static const struct gpu_ops gm20b_ops = {
379 .preempt_tsg = gk20a_fifo_preempt_tsg, 379 .preempt_tsg = gk20a_fifo_preempt_tsg,
380 .enable_tsg = gk20a_enable_tsg, 380 .enable_tsg = gk20a_enable_tsg,
381 .disable_tsg = gk20a_disable_tsg, 381 .disable_tsg = gk20a_disable_tsg,
382 .tsg_verify_channel_status = gk20a_fifo_tsg_unbind_channel_verify_status,
382 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload, 383 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload,
383 .update_runlist = gk20a_fifo_update_runlist, 384 .update_runlist = gk20a_fifo_update_runlist,
384 .trigger_mmu_fault = gm20b_fifo_trigger_mmu_fault, 385 .trigger_mmu_fault = gm20b_fifo_trigger_mmu_fault,
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c
index 89fe66c9..1c423785 100644
--- a/drivers/gpu/nvgpu/gp106/hal_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c
@@ -438,6 +438,7 @@ static const struct gpu_ops gp106_ops = {
438 .preempt_tsg = gk20a_fifo_preempt_tsg, 438 .preempt_tsg = gk20a_fifo_preempt_tsg,
439 .enable_tsg = gk20a_enable_tsg, 439 .enable_tsg = gk20a_enable_tsg,
440 .disable_tsg = gk20a_disable_tsg, 440 .disable_tsg = gk20a_disable_tsg,
441 .tsg_verify_channel_status = gk20a_fifo_tsg_unbind_channel_verify_status,
441 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload, 442 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload,
442 .update_runlist = gk20a_fifo_update_runlist, 443 .update_runlist = gk20a_fifo_update_runlist,
443 .trigger_mmu_fault = gm20b_fifo_trigger_mmu_fault, 444 .trigger_mmu_fault = gm20b_fifo_trigger_mmu_fault,
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index 0db6b3f7..f298f26c 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -400,6 +400,7 @@ static const struct gpu_ops gp10b_ops = {
400 .preempt_tsg = gk20a_fifo_preempt_tsg, 400 .preempt_tsg = gk20a_fifo_preempt_tsg,
401 .enable_tsg = gk20a_enable_tsg, 401 .enable_tsg = gk20a_enable_tsg,
402 .disable_tsg = gk20a_disable_tsg, 402 .disable_tsg = gk20a_disable_tsg,
403 .tsg_verify_channel_status = gk20a_fifo_tsg_unbind_channel_verify_status,
403 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload, 404 .tsg_verify_status_ctx_reload = gm20b_fifo_tsg_verify_status_ctx_reload,
404 .reschedule_runlist = gk20a_fifo_reschedule_runlist, 405 .reschedule_runlist = gk20a_fifo_reschedule_runlist,
405 .update_runlist = gk20a_fifo_update_runlist, 406 .update_runlist = gk20a_fifo_update_runlist,