summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAparna Das <aparnad@nvidia.com>2018-02-15 18:39:10 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-03-06 17:52:21 -0500
commit98d91dd2609faadfa4aa9aafad5e295c924ae08f (patch)
tree40daaafbb2756a1defa0f299a8881799b6b0161c /drivers/gpu
parentd654ab48638b0160ccef6f7be0faa8b3b3ee1fab (diff)
gpu: nvgpu: add hal op to handle post event id
The vserver variant for gr post event id needs different functionality to send interrupt to VM. Add HAL operation to allow overriding vserver usecase. Jira VQRM-2982 Change-Id: I915d089ef751023968c1e8ab181c21afeec997a5 Signed-off-by: Aparna Das <aparnad@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1658382 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c2
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c8
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c1
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c1
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c8
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c1
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c1
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c1
-rw-r--r--drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c1
-rw-r--r--drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c1
11 files changed, 16 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 2c98797d..f9b9c6e6 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -2229,7 +2229,7 @@ void gk20a_channel_semaphore_wakeup(struct gk20a *g, bool post_events)
2229 struct tsg_gk20a *tsg = 2229 struct tsg_gk20a *tsg =
2230 &g->fifo.tsg[c->tsgid]; 2230 &g->fifo.tsg[c->tsgid];
2231 2231
2232 gk20a_tsg_event_id_post_event(tsg, 2232 g->ops.fifo.post_event_id(tsg,
2233 NVGPU_EVENT_ID_BLOCKING_SYNC); 2233 NVGPU_EVENT_ID_BLOCKING_SYNC);
2234 } 2234 }
2235 } 2235 }
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index d9e3c97d..6f99b3f9 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -610,6 +610,7 @@ struct gpu_ops {
610 void (*deinit_eng_method_buffers)(struct gk20a *g, 610 void (*deinit_eng_method_buffers)(struct gk20a *g,
611 struct tsg_gk20a *tsg); 611 struct tsg_gk20a *tsg);
612 u32 (*get_preempt_timeout)(struct gk20a *g); 612 u32 (*get_preempt_timeout)(struct gk20a *g);
613 void (*post_event_id)(struct tsg_gk20a *tsg, int event_id);
613#ifdef CONFIG_TEGRA_GK20A_NVHOST 614#ifdef CONFIG_TEGRA_GK20A_NVHOST
614 int (*alloc_syncpt_buf)(struct channel_gk20a *c, 615 int (*alloc_syncpt_buf)(struct channel_gk20a *c,
615 u32 syncpt_id, struct nvgpu_mem *syncpt_buf); 616 u32 syncpt_id, struct nvgpu_mem *syncpt_buf);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 8f263e67..c64900bd 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -5274,7 +5274,7 @@ static int gk20a_gr_handle_semaphore_pending(struct gk20a *g,
5274 struct channel_gk20a *ch = &f->channel[isr_data->chid]; 5274 struct channel_gk20a *ch = &f->channel[isr_data->chid];
5275 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid]; 5275 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid];
5276 5276
5277 gk20a_tsg_event_id_post_event(tsg, 5277 g->ops.fifo.post_event_id(tsg,
5278 NVGPU_EVENT_ID_GR_SEMAPHORE_WRITE_AWAKEN); 5278 NVGPU_EVENT_ID_GR_SEMAPHORE_WRITE_AWAKEN);
5279 5279
5280 nvgpu_cond_broadcast(&ch->semaphore_wq); 5280 nvgpu_cond_broadcast(&ch->semaphore_wq);
@@ -5818,14 +5818,12 @@ static int gk20a_gr_post_bpt_events(struct gk20a *g, struct channel_gk20a *ch,
5818 if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_int_pending_f()) { 5818 if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_int_pending_f()) {
5819 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid]; 5819 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid];
5820 5820
5821 gk20a_tsg_event_id_post_event(tsg, 5821 g->ops.fifo.post_event_id(tsg, NVGPU_EVENT_ID_BPT_INT);
5822 NVGPU_EVENT_ID_BPT_INT);
5823 } 5822 }
5824 if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_pause_pending_f()) { 5823 if (global_esr & gr_gpc0_tpc0_sm_hww_global_esr_bpt_pause_pending_f()) {
5825 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid]; 5824 struct tsg_gk20a *tsg = &g->fifo.tsg[ch->tsgid];
5826 5825
5827 gk20a_tsg_event_id_post_event(tsg, 5826 g->ops.fifo.post_event_id(tsg, NVGPU_EVENT_ID_BPT_PAUSE);
5828 NVGPU_EVENT_ID_BPT_PAUSE);
5829 } 5827 }
5830 5828
5831 return 0; 5829 return 0;
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
index 2d53a926..e390e4dd 100644
--- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
@@ -431,6 +431,7 @@ static const struct gpu_ops gm20b_ops = {
431 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 431 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
432 .tsg_bind_channel = gk20a_tsg_bind_channel, 432 .tsg_bind_channel = gk20a_tsg_bind_channel,
433 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel, 433 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel,
434 .post_event_id = gk20a_tsg_event_id_post_event,
434#ifdef CONFIG_TEGRA_GK20A_NVHOST 435#ifdef CONFIG_TEGRA_GK20A_NVHOST
435 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf, 436 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf,
436 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf, 437 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c
index a0068a6f..82ef0461 100644
--- a/drivers/gpu/nvgpu/gp106/hal_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c
@@ -491,6 +491,7 @@ static const struct gpu_ops gp106_ops = {
491 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 491 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
492 .tsg_bind_channel = gk20a_tsg_bind_channel, 492 .tsg_bind_channel = gk20a_tsg_bind_channel,
493 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel, 493 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel,
494 .post_event_id = gk20a_tsg_event_id_post_event,
494#ifdef CONFIG_TEGRA_GK20A_NVHOST 495#ifdef CONFIG_TEGRA_GK20A_NVHOST
495 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf, 496 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf,
496 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf, 497 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 17685f59..8cbda409 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -1814,8 +1814,8 @@ int gr_gp10b_set_cilp_preempt_pending(struct gk20a *g,
1814 1814
1815 tsg = &g->fifo.tsg[fault_ch->tsgid]; 1815 tsg = &g->fifo.tsg[fault_ch->tsgid];
1816 1816
1817 gk20a_tsg_event_id_post_event(tsg, 1817 g->ops.fifo.post_event_id(tsg,
1818 NVGPU_EVENT_ID_CILP_PREEMPTION_STARTED); 1818 NVGPU_EVENT_ID_CILP_PREEMPTION_STARTED);
1819 1819
1820 return 0; 1820 return 0;
1821} 1821}
@@ -2036,8 +2036,8 @@ int gr_gp10b_handle_fecs_error(struct gk20a *g,
2036 2036
2037 tsg = &g->fifo.tsg[ch->tsgid]; 2037 tsg = &g->fifo.tsg[ch->tsgid];
2038 2038
2039 gk20a_tsg_event_id_post_event(tsg, 2039 g->ops.fifo.post_event_id(tsg,
2040 NVGPU_EVENT_ID_CILP_PREEMPTION_COMPLETE); 2040 NVGPU_EVENT_ID_CILP_PREEMPTION_COMPLETE);
2041 2041
2042 gk20a_channel_put(ch); 2042 gk20a_channel_put(ch);
2043 } 2043 }
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index 65fdf714..783dfcdd 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -464,6 +464,7 @@ static const struct gpu_ops gp10b_ops = {
464 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 464 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
465 .tsg_bind_channel = gk20a_tsg_bind_channel, 465 .tsg_bind_channel = gk20a_tsg_bind_channel,
466 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel, 466 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel,
467 .post_event_id = gk20a_tsg_event_id_post_event,
467#ifdef CONFIG_TEGRA_GK20A_NVHOST 468#ifdef CONFIG_TEGRA_GK20A_NVHOST
468 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf, 469 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf,
469 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf, 470 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index 6598d7f6..677f2a89 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -506,6 +506,7 @@ static const struct gpu_ops gv100_ops = {
506 gv11b_fifo_deinit_eng_method_buffers, 506 gv11b_fifo_deinit_eng_method_buffers,
507 .tsg_bind_channel = gk20a_tsg_bind_channel, 507 .tsg_bind_channel = gk20a_tsg_bind_channel,
508 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel, 508 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel,
509 .post_event_id = gk20a_tsg_event_id_post_event,
509#ifdef CONFIG_TEGRA_GK20A_NVHOST 510#ifdef CONFIG_TEGRA_GK20A_NVHOST
510 .alloc_syncpt_buf = gv11b_fifo_alloc_syncpt_buf, 511 .alloc_syncpt_buf = gv11b_fifo_alloc_syncpt_buf,
511 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf, 512 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index 700dc7fc..d55d51ba 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -522,6 +522,7 @@ static const struct gpu_ops gv11b_ops = {
522 gv11b_fifo_deinit_eng_method_buffers, 522 gv11b_fifo_deinit_eng_method_buffers,
523 .tsg_bind_channel = gk20a_tsg_bind_channel, 523 .tsg_bind_channel = gk20a_tsg_bind_channel,
524 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel, 524 .tsg_unbind_channel = gk20a_fifo_tsg_unbind_channel,
525 .post_event_id = gk20a_tsg_event_id_post_event,
525#ifdef CONFIG_TEGRA_GK20A_NVHOST 526#ifdef CONFIG_TEGRA_GK20A_NVHOST
526 .alloc_syncpt_buf = gv11b_fifo_alloc_syncpt_buf, 527 .alloc_syncpt_buf = gv11b_fifo_alloc_syncpt_buf,
527 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf, 528 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
index f1ced1c8..bfdd0788 100644
--- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
+++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
@@ -340,6 +340,7 @@ static const struct gpu_ops vgpu_gp10b_ops = {
340 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 340 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
341 .tsg_bind_channel = vgpu_tsg_bind_channel, 341 .tsg_bind_channel = vgpu_tsg_bind_channel,
342 .tsg_unbind_channel = vgpu_tsg_unbind_channel, 342 .tsg_unbind_channel = vgpu_tsg_unbind_channel,
343 .post_event_id = gk20a_tsg_event_id_post_event,
343#ifdef CONFIG_TEGRA_GK20A_NVHOST 344#ifdef CONFIG_TEGRA_GK20A_NVHOST
344 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf, 345 .alloc_syncpt_buf = gk20a_fifo_alloc_syncpt_buf,
345 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf, 346 .free_syncpt_buf = gk20a_fifo_free_syncpt_buf,
diff --git a/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c b/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
index 76f7b389..b4e03ecd 100644
--- a/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
+++ b/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
@@ -383,6 +383,7 @@ static const struct gpu_ops vgpu_gv11b_ops = {
383 gv11b_fifo_deinit_eng_method_buffers, 383 gv11b_fifo_deinit_eng_method_buffers,
384 .tsg_bind_channel = vgpu_gv11b_tsg_bind_channel, 384 .tsg_bind_channel = vgpu_gv11b_tsg_bind_channel,
385 .tsg_unbind_channel = vgpu_tsg_unbind_channel, 385 .tsg_unbind_channel = vgpu_tsg_unbind_channel,
386 .post_event_id = gk20a_tsg_event_id_post_event,
386#ifdef CONFIG_TEGRA_GK20A_NVHOST 387#ifdef CONFIG_TEGRA_GK20A_NVHOST
387 .alloc_syncpt_buf = vgpu_gv11b_fifo_alloc_syncpt_buf, 388 .alloc_syncpt_buf = vgpu_gv11b_fifo_alloc_syncpt_buf,
388 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf, 389 .free_syncpt_buf = gv11b_fifo_free_syncpt_buf,