summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-09-13 08:05:03 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-09-15 15:48:21 -0400
commit52f50addc6cedf57fc3d8ff06314921499fb59e3 (patch)
treebd09a629f0a3c3e15bb4b8a98d9a9e3adcd2570a
parent56d03664d00f77fa760757467e23d9dbc1a08cf8 (diff)
gpu: nvgpu: add TSG enable/disable operations
Add TSG enable/disable operations for gv11b/gv100 To disable a TSG we continue to use gk20a_disable_tsg() To enable a TSG add new API gv11b_fifo_enable_tsg() since TSG enable sequence is different for Volta than previous versions For Volta it is sufficient to loop over all the channels in TSG and enable them sequentially Bug 1739362 Change-Id: Id4b4684959204c6101ceda83487a41fbfcba8b5f Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1560642 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c2
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c15
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.h1
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c2
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_ccsr_gv100.h36
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_ccsr_gv11b.h38
6 files changed, 93 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index cd121455..cc20fa43 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -397,6 +397,8 @@ static const struct gpu_ops gv100_ops = {
397 .pbdma_acquire_val = gk20a_fifo_pbdma_acquire_val, 397 .pbdma_acquire_val = gk20a_fifo_pbdma_acquire_val,
398 .preempt_channel = gv11b_fifo_preempt_channel, 398 .preempt_channel = gv11b_fifo_preempt_channel,
399 .preempt_tsg = gv11b_fifo_preempt_tsg, 399 .preempt_tsg = gv11b_fifo_preempt_tsg,
400 .enable_tsg = gv11b_fifo_enable_tsg,
401 .disable_tsg = gk20a_disable_tsg,
400 .update_runlist = gk20a_fifo_update_runlist, 402 .update_runlist = gk20a_fifo_update_runlist,
401 .trigger_mmu_fault = NULL, 403 .trigger_mmu_fault = NULL,
402 .get_mmu_fault_info = NULL, 404 .get_mmu_fault_info = NULL,
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index 80bb64a0..1d5e593c 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -785,6 +785,21 @@ static int __locked_fifo_preempt_runlists(struct gk20a *g, u32 runlists_mask)
785 return ret; 785 return ret;
786} 786}
787 787
788/* TSG enable sequence applicable for Volta and onwards */
789int gv11b_fifo_enable_tsg(struct tsg_gk20a *tsg)
790{
791 struct gk20a *g = tsg->g;
792 struct channel_gk20a *ch;
793
794 down_read(&tsg->ch_list_lock);
795 nvgpu_list_for_each_entry(ch, &tsg->ch_list, channel_gk20a, ch_entry) {
796 g->ops.fifo.enable_channel(ch);
797 }
798 up_read(&tsg->ch_list_lock);
799
800 return 0;
801}
802
788int gv11b_fifo_preempt_tsg(struct gk20a *g, u32 tsgid) 803int gv11b_fifo_preempt_tsg(struct gk20a *g, u32 tsgid)
789{ 804{
790 struct fifo_gk20a *f = &g->fifo; 805 struct fifo_gk20a *f = &g->fifo;
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
index 3fb2f6e9..e576714c 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
@@ -69,6 +69,7 @@ int gv11b_fifo_is_preempt_pending(struct gk20a *g, u32 id,
69 unsigned int id_type, unsigned int timeout_rc_type); 69 unsigned int id_type, unsigned int timeout_rc_type);
70int gv11b_fifo_preempt_channel(struct gk20a *g, u32 chid); 70int gv11b_fifo_preempt_channel(struct gk20a *g, u32 chid);
71int gv11b_fifo_preempt_tsg(struct gk20a *g, u32 tsgid); 71int gv11b_fifo_preempt_tsg(struct gk20a *g, u32 tsgid);
72int gv11b_fifo_enable_tsg(struct tsg_gk20a *tsg);
72int gv11b_fifo_preempt_ch_tsg(struct gk20a *g, u32 id, 73int gv11b_fifo_preempt_ch_tsg(struct gk20a *g, u32 id,
73 unsigned int id_type, unsigned int timeout_rc_type); 74 unsigned int id_type, unsigned int timeout_rc_type);
74void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask, 75void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index e9053081..947ac503 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -430,6 +430,8 @@ static const struct gpu_ops gv11b_ops = {
430 .pbdma_acquire_val = gk20a_fifo_pbdma_acquire_val, 430 .pbdma_acquire_val = gk20a_fifo_pbdma_acquire_val,
431 .preempt_channel = gv11b_fifo_preempt_channel, 431 .preempt_channel = gv11b_fifo_preempt_channel,
432 .preempt_tsg = gv11b_fifo_preempt_tsg, 432 .preempt_tsg = gv11b_fifo_preempt_tsg,
433 .enable_tsg = gv11b_fifo_enable_tsg,
434 .disable_tsg = gk20a_disable_tsg,
433 .update_runlist = gk20a_fifo_update_runlist, 435 .update_runlist = gk20a_fifo_update_runlist,
434 .trigger_mmu_fault = NULL, 436 .trigger_mmu_fault = NULL,
435 .get_mmu_fault_info = NULL, 437 .get_mmu_fault_info = NULL,
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_ccsr_gv100.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_ccsr_gv100.h
index f64f542c..664c0b80 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_ccsr_gv100.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_ccsr_gv100.h
@@ -110,6 +110,42 @@ static inline u32 ccsr_channel_status_v(u32 r)
110{ 110{
111 return (r >> 24) & 0xf; 111 return (r >> 24) & 0xf;
112} 112}
113static inline u32 ccsr_channel_status_pending_ctx_reload_v(void)
114{
115 return 0x00000002;
116}
117static inline u32 ccsr_channel_status_pending_acq_ctx_reload_v(void)
118{
119 return 0x00000004;
120}
121static inline u32 ccsr_channel_status_on_pbdma_ctx_reload_v(void)
122{
123 return 0x0000000a;
124}
125static inline u32 ccsr_channel_status_on_pbdma_and_eng_ctx_reload_v(void)
126{
127 return 0x0000000b;
128}
129static inline u32 ccsr_channel_status_on_eng_ctx_reload_v(void)
130{
131 return 0x0000000c;
132}
133static inline u32 ccsr_channel_status_on_eng_pending_ctx_reload_v(void)
134{
135 return 0x0000000d;
136}
137static inline u32 ccsr_channel_status_on_eng_pending_acq_ctx_reload_v(void)
138{
139 return 0x0000000e;
140}
141static inline u32 ccsr_channel_next_v(u32 r)
142{
143 return (r >> 1) & 0x1;
144}
145static inline u32 ccsr_channel_next_true_v(void)
146{
147 return 0x00000001;
148}
113static inline u32 ccsr_channel_pbdma_faulted_f(u32 v) 149static inline u32 ccsr_channel_pbdma_faulted_f(u32 v)
114{ 150{
115 return (v & 0x1) << 22; 151 return (v & 0x1) << 22;
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_ccsr_gv11b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_ccsr_gv11b.h
index 618c4806..7e30c34b 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_ccsr_gv11b.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_ccsr_gv11b.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 5 * under the terms and conditions of the GNU General Public License,
@@ -110,6 +110,42 @@ static inline u32 ccsr_channel_status_v(u32 r)
110{ 110{
111 return (r >> 24) & 0xf; 111 return (r >> 24) & 0xf;
112} 112}
113static inline u32 ccsr_channel_status_pending_ctx_reload_v(void)
114{
115 return 0x00000002;
116}
117static inline u32 ccsr_channel_status_pending_acq_ctx_reload_v(void)
118{
119 return 0x00000004;
120}
121static inline u32 ccsr_channel_status_on_pbdma_ctx_reload_v(void)
122{
123 return 0x0000000a;
124}
125static inline u32 ccsr_channel_status_on_pbdma_and_eng_ctx_reload_v(void)
126{
127 return 0x0000000b;
128}
129static inline u32 ccsr_channel_status_on_eng_ctx_reload_v(void)
130{
131 return 0x0000000c;
132}
133static inline u32 ccsr_channel_status_on_eng_pending_ctx_reload_v(void)
134{
135 return 0x0000000d;
136}
137static inline u32 ccsr_channel_status_on_eng_pending_acq_ctx_reload_v(void)
138{
139 return 0x0000000e;
140}
141static inline u32 ccsr_channel_next_v(u32 r)
142{
143 return (r >> 1) & 0x1;
144}
145static inline u32 ccsr_channel_next_true_v(void)
146{
147 return 0x00000001;
148}
113static inline u32 ccsr_channel_pbdma_faulted_f(u32 v) 149static inline u32 ccsr_channel_pbdma_faulted_f(u32 v)
114{ 150{
115 return (v & 0x1) << 22; 151 return (v & 0x1) << 22;