diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2014-06-05 07:36:17 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:11 -0400 |
commit | 3227958a5e30692c22433b3f8afe3f0254137b62 (patch) | |
tree | 1ee6e6dce9aa5686975dd8caabf3267bdd8735a3 /drivers/gpu/nvgpu/gk20a | |
parent | 725b56f71aa321816368d54332e68a2e93eda6fa (diff) |
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 <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/421701
(cherry picked from commit 4236ab3323ee3c02fac562740d8b80d763589dea)
Reviewed-on: http://git-master/r/419610
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 21 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 3 |
2 files changed, 24 insertions, 0 deletions
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) | |||
1316 | return err; | 1316 | return err; |
1317 | } | 1317 | } |
1318 | 1318 | ||
1319 | int gk20a_secure_page_alloc(struct platform_device *pdev) | ||
1320 | { | ||
1321 | struct gk20a_platform *platform = platform_get_drvdata(pdev); | ||
1322 | int err = 0; | ||
1323 | |||
1324 | if (platform->secure_page_alloc) { | ||
1325 | tegra_periph_reset_assert(platform->clk[0]); | ||
1326 | udelay(10); | ||
1327 | err = platform->secure_page_alloc(pdev); | ||
1328 | tegra_periph_reset_deassert(platform->clk[0]); | ||
1329 | } | ||
1330 | |||
1331 | return err; | ||
1332 | } | ||
1333 | |||
1319 | static int gk20a_probe(struct platform_device *dev) | 1334 | static int gk20a_probe(struct platform_device *dev) |
1320 | { | 1335 | { |
1321 | struct gk20a *gk20a; | 1336 | struct gk20a *gk20a; |
@@ -1414,6 +1429,12 @@ static int gk20a_probe(struct platform_device *dev) | |||
1414 | } | 1429 | } |
1415 | } | 1430 | } |
1416 | 1431 | ||
1432 | err = gk20a_secure_page_alloc(dev); | ||
1433 | if (err) { | ||
1434 | dev_err(&dev->dev, "failed to allocate secure buffer\n"); | ||
1435 | return err; | ||
1436 | } | ||
1437 | |||
1417 | gk20a_debug_init(dev); | 1438 | gk20a_debug_init(dev); |
1418 | 1439 | ||
1419 | /* Set DMA parameters to allow larger sgt lists */ | 1440 | /* 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) | |||
2348 | &gr->global_ctx_buffer[ATTRIBUTE_VPR], | 2348 | &gr->global_ctx_buffer[ATTRIBUTE_VPR], |
2349 | attr_buffer_size); | 2349 | attr_buffer_size); |
2350 | 2350 | ||
2351 | if (platform->secure_buffer.destroy) | ||
2352 | platform->secure_buffer.destroy(pdev, &platform->secure_buffer); | ||
2353 | |||
2351 | gk20a_dbg_info("golden_image_size : %d", | 2354 | gk20a_dbg_info("golden_image_size : %d", |
2352 | gr->ctx_vars.golden_image_size); | 2355 | gr->ctx_vars.golden_image_size); |
2353 | 2356 | ||