diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-04-23 07:18:33 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-05-16 06:10:37 -0400 |
commit | 0301cc01f6cbfb752290bc63a2ed4eb19129c7c1 (patch) | |
tree | fafe6562b8251c88f130f6368b9a41eb622669b9 /drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c | |
parent | 4ff87c7d35f34e01e138cbedb143a37ff32a8926 (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.c | 38 |
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, |