summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorTimo Alho <talho@nvidia.com>2014-12-04 03:53:17 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:12:26 -0400
commit31a436b3a1720f0ff3ab51d102c55c09c7e247fd (patch)
tree602eea3c57e1d841de4a681527910a50a8fe3404 /drivers/gpu/nvgpu
parent383f176a9db510e51a04b2dc00fad47aa0a1ed6b (diff)
Revert "gpu: nvgpu: Enable syncpt reclaim only on gm20b"
This reverts commit 8eefb93c21934b101d7f423c38d9ea384a45fad6. Bug 1585422 Change-Id: I217e0ffe6c230ee3c63d9aec1c48ce9c41770468 Signed-off-by: Timo Alho <talho@nvidia.com> Reviewed-on: http://git-master/r/659426
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c6
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c6
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h3
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c5
-rw-r--r--drivers/gpu/nvgpu/vgpu/fifo_vgpu.c2
6 files changed, 12 insertions, 11 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 03163575..de51e83e 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -318,7 +318,6 @@ static void channel_gk20a_bind(struct channel_gk20a *ch_gk20a)
318void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a) 318void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a)
319{ 319{
320 struct gk20a *g = ch_gk20a->g; 320 struct gk20a *g = ch_gk20a->g;
321 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
322 321
323 gk20a_dbg_fn(""); 322 gk20a_dbg_fn("");
324 323
@@ -334,7 +333,7 @@ void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a)
334 * resource at this point 333 * resource at this point
335 * if not, then it will be destroyed at channel_free() 334 * if not, then it will be destroyed at channel_free()
336 */ 335 */
337 if (ch_gk20a->sync && platform->sync_aggressive_destroy) { 336 if (ch_gk20a->sync && ch_gk20a->sync->aggressive_destroy) {
338 ch_gk20a->sync->destroy(ch_gk20a->sync); 337 ch_gk20a->sync->destroy(ch_gk20a->sync);
339 ch_gk20a->sync = NULL; 338 ch_gk20a->sync = NULL;
340 } 339 }
@@ -1470,7 +1469,6 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed)
1470{ 1469{
1471 struct vm_gk20a *vm = c->vm; 1470 struct vm_gk20a *vm = c->vm;
1472 struct channel_gk20a_job *job, *n; 1471 struct channel_gk20a_job *job, *n;
1473 struct gk20a_platform *platform = gk20a_get_platform(c->g->dev);
1474 1472
1475 trace_gk20a_channel_update(c); 1473 trace_gk20a_channel_update(c);
1476 1474
@@ -1508,7 +1506,7 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed)
1508 * the sync resource 1506 * the sync resource
1509 */ 1507 */
1510 if (list_empty(&c->jobs)) { 1508 if (list_empty(&c->jobs)) {
1511 if (c->sync && platform->sync_aggressive_destroy && 1509 if (c->sync && c->sync->aggressive_destroy &&
1512 gk20a_fence_is_expired(c->last_submit.post_fence)) { 1510 gk20a_fence_is_expired(c->last_submit.post_fence)) {
1513 c->sync->destroy(c->sync); 1511 c->sync->destroy(c->sync);
1514 c->sync = NULL; 1512 c->sync = NULL;
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
index a27f08a4..746a2de3 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
@@ -305,6 +305,8 @@ gk20a_channel_syncpt_create(struct channel_gk20a *c)
305 sp->ops.signal_timeline = gk20a_channel_syncpt_signal_timeline; 305 sp->ops.signal_timeline = gk20a_channel_syncpt_signal_timeline;
306 sp->ops.destroy = gk20a_channel_syncpt_destroy; 306 sp->ops.destroy = gk20a_channel_syncpt_destroy;
307 307
308 sp->ops.aggressive_destroy = true;
309
308 return &sp->ops; 310 return &sp->ops;
309} 311}
310#endif /* CONFIG_TEGRA_GK20A */ 312#endif /* CONFIG_TEGRA_GK20A */
@@ -642,6 +644,10 @@ gk20a_channel_semaphore_create(struct channel_gk20a *c)
642 sema->ops.signal_timeline = gk20a_channel_semaphore_signal_timeline; 644 sema->ops.signal_timeline = gk20a_channel_semaphore_signal_timeline;
643 sema->ops.destroy = gk20a_channel_semaphore_destroy; 645 sema->ops.destroy = gk20a_channel_semaphore_destroy;
644 646
647 /* Aggressively destroying the semaphore sync would cause overhead
648 * since the pool needs to be mapped to GMMU. */
649 sema->ops.aggressive_destroy = false;
650
645 return &sema->ops; 651 return &sema->ops;
646clean_up: 652clean_up:
647 gk20a_channel_semaphore_destroy(&sema->ops); 653 gk20a_channel_semaphore_destroy(&sema->ops);
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
index b2deaff8..a3cd8208 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.h
@@ -86,6 +86,9 @@ struct gk20a_channel_sync {
86 * expired. */ 86 * expired. */
87 void (*signal_timeline)(struct gk20a_channel_sync *s); 87 void (*signal_timeline)(struct gk20a_channel_sync *s);
88 88
89 /* flag to set sync destroy aggressiveness */
90 bool aggressive_destroy;
91
89 /* Free the resources allocated by gk20a_channel_sync_create. */ 92 /* Free the resources allocated by gk20a_channel_sync_create. */
90 void (*destroy)(struct gk20a_channel_sync *s); 93 void (*destroy)(struct gk20a_channel_sync *s);
91}; 94};
diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h
index cd68f8e1..f4301dab 100644
--- a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h
@@ -46,7 +46,6 @@ struct gk20a_platform {
46 46
47 /* Should be populated at probe. */ 47 /* Should be populated at probe. */
48 bool has_syncpoints; 48 bool has_syncpoints;
49 bool sync_aggressive_destroy;
50 49
51 /* Should be populated by probe. */ 50 /* Should be populated by probe. */
52 struct dentry *debugfs; 51 struct dentry *debugfs;
diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
index 9d17aa86..dfbc1ae0 100644
--- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
+++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
@@ -584,11 +584,6 @@ struct gk20a_platform gk20a_tegra_platform = {
584 584
585struct gk20a_platform gm20b_tegra_platform = { 585struct gk20a_platform gm20b_tegra_platform = {
586 .has_syncpoints = true, 586 .has_syncpoints = true,
587 /*
588 * Enable aggressive reclaiming of sync point, becuase we have
589 * fewer sync points than channels
590 */
591 .sync_aggressive_destroy = true,
592 587
593 /* power management configuration */ 588 /* power management configuration */
594 .railgate_delay = 500, 589 .railgate_delay = 500,
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
index 5310088f..24b9f4be 100644
--- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
@@ -63,7 +63,7 @@ static void vgpu_channel_unbind(struct channel_gk20a *ch)
63 * resource at this point 63 * resource at this point
64 * if not, then it will be destroyed at channel_free() 64 * if not, then it will be destroyed at channel_free()
65 */ 65 */
66 if (ch->sync && platform->sync_aggressive_destroy) { 66 if (ch->sync && ch->sync->aggressive_destroy) {
67 ch->sync->destroy(ch->sync); 67 ch->sync->destroy(ch->sync);
68 ch->sync = NULL; 68 ch->sync = NULL;
69 } 69 }