summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2014-06-24 18:11:25 +0530
committerHarshada Kale <hkale@nvidia.com>2014-06-26 09:34:47 -0700
commit41f89c9eb5f6e8b492f514a80f703159b20e4836 (patch)
tree43b2ff0bacf888141cb58b1623beaf5000f20c70 /drivers/gpu
parent21f97241a800436a72046c39ced766583f1fdd0a (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.c10
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c4
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))