summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h5
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c23
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.h5
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c3
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c3
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c3
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c3
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c3
-rw-r--r--drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c3
-rw-r--r--drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c3
10 files changed, 39 insertions, 15 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 8b7315f6..a2b2e53f 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -476,6 +476,11 @@ struct gpu_ops {
476 u32 *priv_addr_table_index); 476 u32 *priv_addr_table_index);
477 u32 (*fecs_ctxsw_mailbox_size)(void); 477 u32 (*fecs_ctxsw_mailbox_size)(void);
478 int (*init_sw_bundle64)(struct gk20a *g); 478 int (*init_sw_bundle64)(struct gk20a *g);
479 int (*alloc_global_ctx_buffers)(struct gk20a *g);
480 int (*map_global_ctx_buffers)(struct gk20a *g,
481 struct channel_gk20a *c);
482 int (*commit_global_ctx_buffers)(struct gk20a *g,
483 struct channel_gk20a *c, bool patch);
479 } gr; 484 } gr;
480 struct { 485 struct {
481 void (*init_hw)(struct gk20a *g); 486 void (*init_hw)(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 42e96715..5d9e3218 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -40,6 +40,7 @@
40#include <nvgpu/error_notifier.h> 40#include <nvgpu/error_notifier.h>
41 41
42#include "gk20a.h" 42#include "gk20a.h"
43#include "gr_gk20a.h"
43#include "gr_ctx_gk20a.h" 44#include "gr_ctx_gk20a.h"
44#include "gr_pri_gk20a.h" 45#include "gr_pri_gk20a.h"
45#include "regops_gk20a.h" 46#include "regops_gk20a.h"
@@ -73,14 +74,6 @@
73 74
74static int gk20a_init_gr_bind_fecs_elpg(struct gk20a *g); 75static int gk20a_init_gr_bind_fecs_elpg(struct gk20a *g);
75 76
76/* global ctx buffer */
77static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g);
78static void gr_gk20a_free_global_ctx_buffers(struct gk20a *g);
79static int gr_gk20a_map_global_ctx_buffers(struct gk20a *g,
80 struct channel_gk20a *c);
81static void gr_gk20a_unmap_global_ctx_buffers(struct gk20a *g,
82 struct vm_gk20a *vm,
83 struct nvgpu_gr_ctx *gr_ctx);
84static void gr_gk20a_free_channel_pm_ctx(struct gk20a *g, 77static void gr_gk20a_free_channel_pm_ctx(struct gk20a *g,
85 struct vm_gk20a *vm, 78 struct vm_gk20a *vm,
86 struct nvgpu_gr_ctx *gr_ctx); 79 struct nvgpu_gr_ctx *gr_ctx);
@@ -1535,7 +1528,7 @@ static int gr_gk20a_init_golden_ctx_image(struct gk20a *g,
1535 gk20a_writel(g, gr_fe_go_idle_timeout_r(), 1528 gk20a_writel(g, gr_fe_go_idle_timeout_r(),
1536 gr_fe_go_idle_timeout_count_disabled_f()); 1529 gr_fe_go_idle_timeout_count_disabled_f());
1537 1530
1538 err = gr_gk20a_commit_global_ctx_buffers(g, c, false); 1531 err = g->ops.gr.commit_global_ctx_buffers(g, c, false);
1539 if (err) 1532 if (err)
1540 goto clean_up; 1533 goto clean_up;
1541 1534
@@ -2558,7 +2551,7 @@ static void gr_gk20a_free_global_ctx_buffers(struct gk20a *g)
2558 nvgpu_log_fn(g, "done"); 2551 nvgpu_log_fn(g, "done");
2559} 2552}
2560 2553
2561static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g) 2554int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2562{ 2555{
2563 struct gr_gk20a *gr = &g->gr; 2556 struct gr_gk20a *gr = &g->gr;
2564 int attr_buffer_size, err; 2557 int attr_buffer_size, err;
@@ -2679,8 +2672,8 @@ static void gr_gk20a_unmap_global_ctx_buffers(struct gk20a *g,
2679 gr_ctx->global_ctx_buffer_mapped = false; 2672 gr_ctx->global_ctx_buffer_mapped = false;
2680} 2673}
2681 2674
2682static int gr_gk20a_map_global_ctx_buffers(struct gk20a *g, 2675int gr_gk20a_map_global_ctx_buffers(struct gk20a *g,
2683 struct channel_gk20a *c) 2676 struct channel_gk20a *c)
2684{ 2677{
2685 struct tsg_gk20a *tsg; 2678 struct tsg_gk20a *tsg;
2686 struct vm_gk20a *ch_vm = c->vm; 2679 struct vm_gk20a *ch_vm = c->vm;
@@ -3004,13 +2997,13 @@ int gk20a_alloc_obj_ctx(struct channel_gk20a *c, u32 class_num, u32 flags)
3004 } 2997 }
3005 2998
3006 /* map global buffer to channel gpu_va and commit */ 2999 /* map global buffer to channel gpu_va and commit */
3007 err = gr_gk20a_map_global_ctx_buffers(g, c); 3000 err = g->ops.gr.map_global_ctx_buffers(g, c);
3008 if (err) { 3001 if (err) {
3009 nvgpu_err(g, 3002 nvgpu_err(g,
3010 "fail to map global ctx buffer"); 3003 "fail to map global ctx buffer");
3011 goto out; 3004 goto out;
3012 } 3005 }
3013 gr_gk20a_commit_global_ctx_buffers(g, c, true); 3006 g->ops.gr.commit_global_ctx_buffers(g, c, true);
3014 3007
3015 /* commit gr ctx buffer */ 3008 /* commit gr ctx buffer */
3016 err = g->ops.gr.commit_inst(c, gr_ctx->mem.gpu_va); 3009 err = g->ops.gr.commit_inst(c, gr_ctx->mem.gpu_va);
@@ -4877,7 +4870,7 @@ static int gk20a_init_gr_setup_sw(struct gk20a *g)
4877 if (err) 4870 if (err)
4878 goto clean_up; 4871 goto clean_up;
4879 4872
4880 err = gr_gk20a_alloc_global_ctx_buffers(g); 4873 err = g->ops.gr.alloc_global_ctx_buffers(g);
4881 if (err) 4874 if (err)
4882 goto clean_up; 4875 goto clean_up;
4883 4876
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
index 43b89b12..32bd41f2 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
@@ -806,8 +806,13 @@ void gk20a_gr_init_ctxsw_hdr_data(struct gk20a *g,
806u32 gr_gk20a_get_patch_slots(struct gk20a *g); 806u32 gr_gk20a_get_patch_slots(struct gk20a *g);
807int gk20a_gr_handle_notify_pending(struct gk20a *g, 807int gk20a_gr_handle_notify_pending(struct gk20a *g,
808 struct gr_gk20a_isr_data *isr_data); 808 struct gr_gk20a_isr_data *isr_data);
809
810int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g);
811int gr_gk20a_map_global_ctx_buffers(struct gk20a *g,
812 struct channel_gk20a *c);
809int gr_gk20a_commit_global_ctx_buffers(struct gk20a *g, 813int gr_gk20a_commit_global_ctx_buffers(struct gk20a *g,
810 struct channel_gk20a *c, bool patch); 814 struct channel_gk20a *c, bool patch);
815
811int gr_gk20a_fecs_ctx_bind_channel(struct gk20a *g, 816int gr_gk20a_fecs_ctx_bind_channel(struct gk20a *g,
812 struct channel_gk20a *c); 817 struct channel_gk20a *c);
813u32 gk20a_init_sw_bundle(struct gk20a *g); 818u32 gk20a_init_sw_bundle(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
index 9f93d0eb..715946be 100644
--- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
@@ -327,6 +327,9 @@ static const struct gpu_ops gm20b_ops = {
327 gr_gm20b_get_pmm_per_chiplet_offset, 327 gr_gm20b_get_pmm_per_chiplet_offset,
328 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 328 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
329 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v, 329 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v,
330 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
331 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
332 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
330 }, 333 },
331 .fb = { 334 .fb = {
332 .reset = fb_gk20a_reset, 335 .reset = fb_gk20a_reset,
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c
index a525d117..61c6cb0f 100644
--- a/drivers/gpu/nvgpu/gp106/hal_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c
@@ -395,6 +395,9 @@ static const struct gpu_ops gp106_ops = {
395 gr_gm20b_get_pmm_per_chiplet_offset, 395 gr_gm20b_get_pmm_per_chiplet_offset,
396 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 396 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
397 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v, 397 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v,
398 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
399 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
400 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
398 }, 401 },
399 .fb = { 402 .fb = {
400 .reset = gp106_fb_reset, 403 .reset = gp106_fb_reset,
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index d966f49a..62164d16 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -360,6 +360,9 @@ static const struct gpu_ops gp10b_ops = {
360 gr_gm20b_get_pmm_per_chiplet_offset, 360 gr_gm20b_get_pmm_per_chiplet_offset,
361 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 361 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
362 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v, 362 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v,
363 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
364 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
365 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
363 }, 366 },
364 .fb = { 367 .fb = {
365 .reset = fb_gk20a_reset, 368 .reset = fb_gk20a_reset,
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index b3d97f89..00840448 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -446,6 +446,9 @@ static const struct gpu_ops gv100_ops = {
446 gr_gv11b_get_pmm_per_chiplet_offset, 446 gr_gv11b_get_pmm_per_chiplet_offset,
447 .split_fbpa_broadcast_addr = gr_gv100_split_fbpa_broadcast_addr, 447 .split_fbpa_broadcast_addr = gr_gv100_split_fbpa_broadcast_addr,
448 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v, 448 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v,
449 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
450 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
451 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
449 }, 452 },
450 .fb = { 453 .fb = {
451 .reset = gv100_fb_reset, 454 .reset = gv100_fb_reset,
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index cae55609..ce8f5051 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -412,6 +412,9 @@ static const struct gpu_ops gv11b_ops = {
412 gr_gv11b_get_pmm_per_chiplet_offset, 412 gr_gv11b_get_pmm_per_chiplet_offset,
413 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 413 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
414 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v, 414 .fecs_ctxsw_mailbox_size = gr_fecs_ctxsw_mailbox__size_1_v,
415 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
416 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
417 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
415 }, 418 },
416 .fb = { 419 .fb = {
417 .reset = gv11b_fb_reset, 420 .reset = gv11b_fb_reset,
diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
index 8c2b613f..6a946a6e 100644
--- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
+++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c
@@ -231,6 +231,9 @@ static const struct gpu_ops vgpu_gp10b_ops = {
231 .get_pmm_per_chiplet_offset = 231 .get_pmm_per_chiplet_offset =
232 gr_gm20b_get_pmm_per_chiplet_offset, 232 gr_gm20b_get_pmm_per_chiplet_offset,
233 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 233 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
234 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
235 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
236 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
234 }, 237 },
235 .fb = { 238 .fb = {
236 .reset = fb_gk20a_reset, 239 .reset = fb_gk20a_reset,
diff --git a/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c b/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
index 450c9c87..f81e8503 100644
--- a/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
+++ b/drivers/gpu/nvgpu/vgpu/gv11b/vgpu_hal_gv11b.c
@@ -267,6 +267,9 @@ static const struct gpu_ops vgpu_gv11b_ops = {
267 .get_pmm_per_chiplet_offset = 267 .get_pmm_per_chiplet_offset =
268 gr_gv11b_get_pmm_per_chiplet_offset, 268 gr_gv11b_get_pmm_per_chiplet_offset,
269 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr, 269 .split_fbpa_broadcast_addr = gr_gk20a_split_fbpa_broadcast_addr,
270 .alloc_global_ctx_buffers = gr_gk20a_alloc_global_ctx_buffers,
271 .map_global_ctx_buffers = gr_gk20a_map_global_ctx_buffers,
272 .commit_global_ctx_buffers = gr_gk20a_commit_global_ctx_buffers,
270 }, 273 },
271 .fb = { 274 .fb = {
272 .reset = gv11b_fb_reset, 275 .reset = gv11b_fb_reset,