diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2014-06-24 18:11:25 +0530 |
---|---|---|
committer | Harshada Kale <hkale@nvidia.com> | 2014-06-26 09:34:47 -0700 |
commit | 41f89c9eb5f6e8b492f514a80f703159b20e4836 (patch) | |
tree | 43b2ff0bacf888141cb58b1623beaf5000f20c70 /drivers/gpu | |
parent | 21f97241a800436a72046c39ced766583f1fdd0a (diff) |
gpu: nvgpu: do not abort probe if secure page alloc fails
Do not abort GPU probe if secure page alloc fails.
We can just note that this allocation failed (using bool
secure_alloc_ready) and prevent further secure memory
allocation if this flag is not set.
Bug 1525465
Change-Id: Ie4eb6393951690174013d2de3db507876d7b657f
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/427730
(cherry picked from commit e7e47bb45d5ff5dcb48d8a961e9908b71db9e02f)
Reviewed-on: http://git-master/r/428306
GVS: Gerrit_Virtual_Submit
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/platform_gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c | 4 |
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index c1ba88926a4b..f3dbf31ed2b8 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -1296,6 +1296,9 @@ int gk20a_secure_page_alloc(struct platform_device *pdev) tegra_periph_reset_deassert(platform->clk[0]); } + if (!err) + platform->secure_alloc_ready = true; + return err; } @@ -1398,10 +1401,9 @@ 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; - } + if (err) + dev_err(&dev->dev, + "failed to allocate secure buffer %d\n", err); gk20a_debug_init(dev); diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h index f34dfe9a8e19..50358af6f11d 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h @@ -93,6 +93,7 @@ struct gk20a_platform { */ int (*secure_page_alloc)(struct platform_device *dev); struct secure_page_buffer secure_buffer; + bool secure_alloc_ready; /* Device is going to be suspended */ int (*suspend)(struct device *); diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c index 417112e712b4..a20ad8f116a1 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c @@ -134,6 +134,7 @@ static int gk20a_tegra_secure_alloc(struct platform_device *pdev, struct gr_ctx_buffer_desc *desc, size_t size) { + struct gk20a_platform *platform = platform_get_drvdata(pdev); struct device *dev = &pdev->dev; DEFINE_DMA_ATTRS(attrs); dma_addr_t iova; @@ -141,6 +142,9 @@ static int gk20a_tegra_secure_alloc(struct platform_device *pdev, struct page *page; int err = 0; + if (!platform->secure_alloc_ready) + return -EINVAL; + (void)dma_alloc_attrs(&tegra_vpr_dev, size, &iova, DMA_MEMORY_NOMAP, &attrs); if (dma_mapping_error(&tegra_vpr_dev, iova)) |