summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2018-04-23 07:18:33 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-05-16 06:10:37 -0400
commit0301cc01f6cbfb752290bc63a2ed4eb19129c7c1 (patch)
treefafe6562b8251c88f130f6368b9a41eb622669b9 /drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
parent4ff87c7d35f34e01e138cbedb143a37ff32a8926 (diff)
gpu: nvgpu: add HAL to insert semaphore commands
Add below new HALs gops.fifo.add_sema_cmd() to insert HOST semaphore acquire/release methods gops.fifo.get_sema_wait_cmd_size() to get size of acquire command buffer gops.fifo.get_sema_incr_cmd_size() to get size of release command buffer Separate out new API gk20a_fifo_add_sema_cmd() to implement semaphore acquire/ release sequence and set it to gops.fifo.add_sema_cmd() Add gk20a_fifo_get_sema_wait_cmd_size() and gk20a_fifo_get_sema_incr_cmd_size() to return respective command buffer sizes Jira NVGPUT-16 Change-Id: Ia81a50921a6a56ebc237f2f90b137268aaa2d749 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1704490 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c38
1 files changed, 2 insertions, 36 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
index 68fbb738..7a664bf8 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
@@ -372,41 +372,7 @@ static void add_sema_cmd(struct gk20a *g, struct channel_gk20a *c,
372 if (!acquire) 372 if (!acquire)
373 nvgpu_semaphore_prepare(s, c->hw_sema); 373 nvgpu_semaphore_prepare(s, c->hw_sema);
374 374
375 /* semaphore_a */ 375 g->ops.fifo.add_sema_cmd(g, s, va, cmd, off, acquire, wfi);
376 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010004);
377 /* offset_upper */
378 nvgpu_mem_wr32(g, cmd->mem, off++, (va >> 32) & 0xff);
379 /* semaphore_b */
380 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010005);
381 /* offset */
382 nvgpu_mem_wr32(g, cmd->mem, off++, va & 0xffffffff);
383
384 if (acquire) {
385 /* semaphore_c */
386 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010006);
387 /* payload */
388 nvgpu_mem_wr32(g, cmd->mem, off++,
389 nvgpu_semaphore_get_value(s));
390 /* semaphore_d */
391 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010007);
392 /* operation: acq_geq, switch_en */
393 nvgpu_mem_wr32(g, cmd->mem, off++, 0x4 | (0x1 << 12));
394 } else {
395 /* semaphore_c */
396 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010006);
397 /* payload */
398 nvgpu_mem_wr32(g, cmd->mem, off++,
399 nvgpu_semaphore_get_value(s));
400 /* semaphore_d */
401 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010007);
402 /* operation: release, wfi */
403 nvgpu_mem_wr32(g, cmd->mem, off++,
404 0x2 | ((wfi ? 0x0 : 0x1) << 20));
405 /* non_stall_int */
406 nvgpu_mem_wr32(g, cmd->mem, off++, 0x20010008);
407 /* ignored */
408 nvgpu_mem_wr32(g, cmd->mem, off++, 0);
409 }
410 376
411 if (acquire) 377 if (acquire)
412 gpu_sema_verbose_dbg(g, "(A) c=%d ACQ_GE %-4u pool=%-3d" 378 gpu_sema_verbose_dbg(g, "(A) c=%d ACQ_GE %-4u pool=%-3d"
@@ -495,7 +461,7 @@ static int __gk20a_channel_semaphore_incr(
495 return -ENOMEM; 461 return -ENOMEM;
496 } 462 }
497 463
498 incr_cmd_size = 10; 464 incr_cmd_size = c->g->ops.fifo.get_sema_incr_cmd_size();
499 err = gk20a_channel_alloc_priv_cmdbuf(c, incr_cmd_size, incr_cmd); 465 err = gk20a_channel_alloc_priv_cmdbuf(c, incr_cmd_size, incr_cmd);
500 if (err) { 466 if (err) {
501 nvgpu_err(c->g, 467 nvgpu_err(c->g,