diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-04-01 01:28:44 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:09:53 -0400 |
commit | 2fbf6e7afb316d698d0062828876eeed1a1b43b2 (patch) | |
tree | facd78d1a24f074e5b4894169ae3ef30ef651d97 /drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |
parent | af8c1dc3a834850512f1fba863077048a3e14f21 (diff) |
gpu: nvgpu: Allow suppressing WFI on submit
Allow suppressing WFI when submitting work and requesting a fence
back.
Bug 1491545
Change-Id: Ic3d061bb4f116cf7ea68dbd6a1b2ace9f11d0ab5
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/390457
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 61938f8e..cf239b55 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -1450,6 +1450,7 @@ static int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, | |||
1450 | /* we might need two extra gpfifo entries - one for pre fence | 1450 | /* we might need two extra gpfifo entries - one for pre fence |
1451 | * and one for post fence. */ | 1451 | * and one for post fence. */ |
1452 | const int extra_entries = 2; | 1452 | const int extra_entries = 2; |
1453 | bool need_wfi = !(flags & NVHOST_SUBMIT_GPFIFO_FLAGS_SUPPRESS_WFI); | ||
1453 | 1454 | ||
1454 | if (c->has_timedout) | 1455 | if (c->has_timedout) |
1455 | return -ETIMEDOUT; | 1456 | return -ETIMEDOUT; |
@@ -1549,10 +1550,12 @@ static int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, | |||
1549 | flags & NVHOST_SUBMIT_GPFIFO_FLAGS_SYNC_FENCE) | 1550 | flags & NVHOST_SUBMIT_GPFIFO_FLAGS_SYNC_FENCE) |
1550 | err = c->sync->incr_user_fd(c->sync, &incr_cmd, | 1551 | err = c->sync->incr_user_fd(c->sync, &incr_cmd, |
1551 | &c->last_submit_fence, | 1552 | &c->last_submit_fence, |
1553 | need_wfi, | ||
1552 | &fence->syncpt_id); | 1554 | &fence->syncpt_id); |
1553 | else if (flags & NVHOST_SUBMIT_GPFIFO_FLAGS_FENCE_GET) | 1555 | else if (flags & NVHOST_SUBMIT_GPFIFO_FLAGS_FENCE_GET) |
1554 | err = c->sync->incr_user_syncpt(c->sync, &incr_cmd, | 1556 | err = c->sync->incr_user_syncpt(c->sync, &incr_cmd, |
1555 | &c->last_submit_fence, | 1557 | &c->last_submit_fence, |
1558 | need_wfi, | ||
1556 | &fence->syncpt_id, | 1559 | &fence->syncpt_id, |
1557 | &fence->value); | 1560 | &fence->value); |
1558 | else | 1561 | else |
@@ -1569,7 +1572,8 @@ static int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, | |||
1569 | c->gpfifo.cpu_va[c->gpfifo.put].entry1 = | 1572 | c->gpfifo.cpu_va[c->gpfifo.put].entry1 = |
1570 | u64_hi32(wait_cmd->gva) | | 1573 | u64_hi32(wait_cmd->gva) | |
1571 | pbdma_gp_entry1_length_f(wait_cmd->size); | 1574 | pbdma_gp_entry1_length_f(wait_cmd->size); |
1572 | trace_write_pushbuffer(c, &c->gpfifo.cpu_va[c->gpfifo.put]); | 1575 | trace_gk20a_push_cmdbuf(c->g->dev->name, |
1576 | 0, wait_cmd->size, 0, wait_cmd->ptr); | ||
1573 | 1577 | ||
1574 | c->gpfifo.put = (c->gpfifo.put + 1) & | 1578 | c->gpfifo.put = (c->gpfifo.put + 1) & |
1575 | (c->gpfifo.entry_num - 1); | 1579 | (c->gpfifo.entry_num - 1); |
@@ -1594,7 +1598,8 @@ static int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, | |||
1594 | c->gpfifo.cpu_va[c->gpfifo.put].entry1 = | 1598 | c->gpfifo.cpu_va[c->gpfifo.put].entry1 = |
1595 | u64_hi32(incr_cmd->gva) | | 1599 | u64_hi32(incr_cmd->gva) | |
1596 | pbdma_gp_entry1_length_f(incr_cmd->size); | 1600 | pbdma_gp_entry1_length_f(incr_cmd->size); |
1597 | trace_write_pushbuffer(c, &c->gpfifo.cpu_va[c->gpfifo.put]); | 1601 | trace_gk20a_push_cmdbuf(c->g->dev->name, |
1602 | 0, incr_cmd->size, 0, incr_cmd->ptr); | ||
1598 | 1603 | ||
1599 | c->gpfifo.put = (c->gpfifo.put + 1) & | 1604 | c->gpfifo.put = (c->gpfifo.put + 1) & |
1600 | (c->gpfifo.entry_num - 1); | 1605 | (c->gpfifo.entry_num - 1); |