From 0ff7f65382d84f74902a8d2ead0ac3fac3ddad78 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Thu, 26 Feb 2015 12:45:08 -0800 Subject: gpu: nvgpu: Fix some GPU boot error paths Fix panics in error path when FECS cannot be booted. Change-Id: I354e37579386e27f46b80cd4172fe12897a3b92f Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/712698 --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 11 ++++++++--- drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c | 11 +++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 9ed4febb..f632245e 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -2235,10 +2235,15 @@ static void gk20a_gr_destroy_ctx_buffer(struct platform_device *pdev, struct device *dev = &pdev->dev; if (!desc) return; - if (desc->sgt) + if (desc->sgt) { gk20a_free_sgtable(&desc->sgt); - dma_free_attrs(dev, desc->size, desc->pages, + desc->sgt = NULL; + } + if (desc->pages) { + dma_free_attrs(dev, desc->size, desc->pages, desc->iova, &desc->attrs); + desc->pages = NULL; + } } static int gk20a_gr_alloc_ctx_buffer(struct platform_device *pdev, @@ -4510,7 +4515,7 @@ out: else gk20a_dbg_fn("done"); - return 0; + return err; } static int gk20a_init_gr_reset_enable_hw(struct gk20a *g) diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c index 0d5f32dd..313962a1 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c @@ -78,10 +78,17 @@ static int gk20a_tegra_secure_page_alloc(struct platform_device *pdev) static void gk20a_tegra_secure_destroy(struct platform_device *pdev, struct gr_ctx_buffer_desc *desc) { - gk20a_free_sgtable(&desc->sgt); - dma_free_attrs(&tegra_vpr_dev, desc->size, + if (desc->sgt) { + gk20a_free_sgtable(&desc->sgt); + desc->sgt = NULL; + } + + if (desc->iova) { + dma_free_attrs(&tegra_vpr_dev, desc->size, (void *)(uintptr_t)desc->iova, desc->iova, &desc->attrs); + desc->iova = 0; + } } static int gk20a_tegra_secure_alloc(struct platform_device *pdev, -- cgit v1.2.2