summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2018-02-09 17:42:07 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-02-15 00:43:43 -0500
commitec00a6c2db2b6e163c2bb1245584a2d009fa1252 (patch)
tree7676cdb8840ccbbac287e31b2a5087d210854a8f /drivers/gpu/nvgpu/gk20a
parent1582bdb5eeff44a93f53987080a652910d51c3c4 (diff)
gpu: nvgpu: Use preallocated VPR buffer
To prevent deadlock while allocating VPR in nvgpu, allocate all the needed VPR memory at probe time and use an internal allocator to hand out space for VPR buffers. Change-Id: I584b9a0f746d5d1dec021cdfbd6f26b4b92e4412 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1655324 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index fb02bb81..0e21f749 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -2532,10 +2532,13 @@ static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2532 if (err) 2532 if (err)
2533 goto clean_up; 2533 goto clean_up;
2534 2534
2535 if (g->ops.secure_alloc) 2535 if (g->ops.secure_alloc) {
2536 g->ops.secure_alloc(g, 2536 err = g->ops.secure_alloc(g,
2537 &gr->global_ctx_buffer[CIRCULAR_VPR], 2537 &gr->global_ctx_buffer[CIRCULAR_VPR],
2538 cb_buffer_size); 2538 cb_buffer_size);
2539 if (err)
2540 goto clean_up;
2541 }
2539 2542
2540 gk20a_dbg_info("pagepool_buffer_size : %d", pagepool_buffer_size); 2543 gk20a_dbg_info("pagepool_buffer_size : %d", pagepool_buffer_size);
2541 2544
@@ -2544,10 +2547,13 @@ static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2544 if (err) 2547 if (err)
2545 goto clean_up; 2548 goto clean_up;
2546 2549
2547 if (g->ops.secure_alloc) 2550 if (g->ops.secure_alloc) {
2548 g->ops.secure_alloc(g, 2551 err = g->ops.secure_alloc(g,
2549 &gr->global_ctx_buffer[PAGEPOOL_VPR], 2552 &gr->global_ctx_buffer[PAGEPOOL_VPR],
2550 pagepool_buffer_size); 2553 pagepool_buffer_size);
2554 if (err)
2555 goto clean_up;
2556 }
2551 2557
2552 gk20a_dbg_info("attr_buffer_size : %d", attr_buffer_size); 2558 gk20a_dbg_info("attr_buffer_size : %d", attr_buffer_size);
2553 2559
@@ -2556,10 +2562,13 @@ static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2556 if (err) 2562 if (err)
2557 goto clean_up; 2563 goto clean_up;
2558 2564
2559 if (g->ops.secure_alloc) 2565 if (g->ops.secure_alloc) {
2560 g->ops.secure_alloc(g, 2566 err = g->ops.secure_alloc(g,
2561 &gr->global_ctx_buffer[ATTRIBUTE_VPR], 2567 &gr->global_ctx_buffer[ATTRIBUTE_VPR],
2562 attr_buffer_size); 2568 attr_buffer_size);
2569 if (err)
2570 goto clean_up;
2571 }
2563 2572
2564 gk20a_dbg_info("golden_image_size : %d", 2573 gk20a_dbg_info("golden_image_size : %d",
2565 gr->ctx_vars.golden_image_size); 2574 gr->ctx_vars.golden_image_size);