From 3227958a5e30692c22433b3f8afe3f0254137b62 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Thu, 5 Jun 2014 17:06:17 +0530 Subject: gpu: nvgpu: allocate secure buffer in probe Allocate dummy secure buffer of size PAGE_SIZE during gk20a_probe(). This will also help to initiate first secure memory (VPR) resize call while GPU is rail gated and in reset. This dummy buffer is released after we allocate some more secure memory buffers in alloc_global_ctx_buffers() Bug 1487804 Change-Id: I61604d9e5ffb585801ee893435c98a0d3e69d666 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/421701 (cherry picked from commit 4236ab3323ee3c02fac562740d8b80d763589dea) Reviewed-on: http://git-master/r/419610 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gk20a.c | 21 +++++++++++++++++++++ drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 3 +++ 2 files changed, 24 insertions(+) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index b7872e73..12c36d33 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -1316,6 +1316,21 @@ static int gk20a_pm_init(struct platform_device *dev) return err; } +int gk20a_secure_page_alloc(struct platform_device *pdev) +{ + struct gk20a_platform *platform = platform_get_drvdata(pdev); + int err = 0; + + if (platform->secure_page_alloc) { + tegra_periph_reset_assert(platform->clk[0]); + udelay(10); + err = platform->secure_page_alloc(pdev); + tegra_periph_reset_deassert(platform->clk[0]); + } + + return err; +} + static int gk20a_probe(struct platform_device *dev) { struct gk20a *gk20a; @@ -1414,6 +1429,12 @@ static int gk20a_probe(struct platform_device *dev) } } + err = gk20a_secure_page_alloc(dev); + if (err) { + dev_err(&dev->dev, "failed to allocate secure buffer\n"); + return err; + } + gk20a_debug_init(dev); /* Set DMA parameters to allow larger sgt lists */ diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index f3e82243..0e178e9e 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -2348,6 +2348,9 @@ static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g) &gr->global_ctx_buffer[ATTRIBUTE_VPR], attr_buffer_size); + if (platform->secure_buffer.destroy) + platform->secure_buffer.destroy(pdev, &platform->secure_buffer); + gk20a_dbg_info("golden_image_size : %d", gr->ctx_vars.golden_image_size); -- cgit v1.2.2