summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2017-11-06 07:25:47 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-11-06 15:27:35 -0500
commit8bdce5337ee5f4d1e1f6d4c7b2dc0abe4a532893 (patch)
tree26274011c5223478744127fe0edf60ca99bd1a35 /drivers/gpu/nvgpu/gk20a
parent1480afeb013decec1d5451fd0d3eeaffa8e17bb6 (diff)
gpu: nvgpu: support tuning per-ch deterministic opts
Add a new ioctl NVGPU_GPU_IOCTL_SET_DETERMINISTIC_OPTS to adjust deterministic options on a per-channel basis. Currently, the only supported option is to relax the no-railgating requirement on open deterministic channels. This also disallows submits on such channels, until the railgate option is reset. Bug 200327089 Change-Id: If4f0f51fd1d40ad7407d13638150d7402479aff0 Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1554563 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c5
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c2
3 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 805902eb..6c607ae2 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -578,7 +578,10 @@ unbind:
578 if (ch->deterministic) { 578 if (ch->deterministic) {
579 nvgpu_rwsem_down_read(&g->deterministic_busy); 579 nvgpu_rwsem_down_read(&g->deterministic_busy);
580 ch->deterministic = false; 580 ch->deterministic = false;
581 gk20a_idle(g); 581 if (!ch->deterministic_railgate_allowed)
582 gk20a_idle(g);
583 ch->deterministic_railgate_allowed = false;
584
582 nvgpu_rwsem_up_read(&g->deterministic_busy); 585 nvgpu_rwsem_up_read(&g->deterministic_busy);
583 } 586 }
584 587
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
index 762daea9..0cb60200 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h
@@ -208,6 +208,8 @@ struct channel_gk20a {
208 bool first_init; 208 bool first_init;
209 bool vpr; 209 bool vpr;
210 bool deterministic; 210 bool deterministic;
211 /* deterministic, but explicitly idle and submits disallowed */
212 bool deterministic_railgate_allowed;
211 bool cde; 213 bool cde;
212 pid_t pid; 214 pid_t pid;
213 pid_t tgid; 215 pid_t tgid;
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index e8db9d2c..756db415 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -439,6 +439,8 @@ int gk20a_init_gpu_characteristics(struct gk20a *g)
439 NVGPU_SUPPORT_DETERMINISTIC_SUBMIT_FULL, 439 NVGPU_SUPPORT_DETERMINISTIC_SUBMIT_FULL,
440 true); 440 true);
441 441
442 __nvgpu_set_enabled(g, NVGPU_SUPPORT_DETERMINISTIC_OPTS, true);
443
442 __nvgpu_set_enabled(g, NVGPU_SUPPORT_USERSPACE_MANAGED_AS, true); 444 __nvgpu_set_enabled(g, NVGPU_SUPPORT_USERSPACE_MANAGED_AS, true);
443 __nvgpu_set_enabled(g, NVGPU_SUPPORT_TSG, true); 445 __nvgpu_set_enabled(g, NVGPU_SUPPORT_TSG, true);
444 446