summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-03-20 15:59:09 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 22:17:24 -0400
commit1b7b271980094637cf34a9d8ad14cb36f2c36363 (patch)
treea897b5d9a013c14866f938673da6a8d8fe80ef51 /drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
parent21f1396d1c80010470e0f071fabe84279b3aebae (diff)
gpu: nvgpu: Use common allocator for context
Reduce amount of duplicate code around memory allocation by using common helpers, and common data structure for storing results of allocations. Bug 1605769 Change-Id: I10c226e2377aa867a5cf11be61d08a9d67206b1d Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/720507
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
index fea2c774..126f9633 100644
--- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
+++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
@@ -80,19 +80,18 @@ static int gk20a_tegra_secure_page_alloc(struct platform_device *pdev)
80 return 0; 80 return 0;
81} 81}
82 82
83static void gk20a_tegra_secure_destroy(struct platform_device *pdev, 83static void gk20a_tegra_secure_destroy(struct gk20a *g,
84 struct gr_ctx_buffer_desc *desc) 84 struct gr_ctx_buffer_desc *desc)
85{ 85{
86 if (desc->sgt) { 86 DEFINE_DMA_ATTRS(attrs);
87 gk20a_free_sgtable(&desc->sgt);
88 desc->sgt = NULL;
89 }
90 87
91 if (desc->iova) { 88 if (desc->mem.sgt) {
92 dma_free_attrs(&tegra_vpr_dev, desc->size, 89 phys_addr_t pa = sg_phys(desc->mem.sgt->sgl);
93 (void *)(uintptr_t)desc->iova, 90 dma_free_attrs(&tegra_vpr_dev, desc->mem.size,
94 desc->iova, &desc->attrs); 91 (void *)(uintptr_t)pa,
95 desc->iova = 0; 92 pa, &attrs);
93 gk20a_free_sgtable(&desc->mem.sgt);
94 desc->mem.sgt = NULL;
96 } 95 }
97} 96}
98 97
@@ -116,9 +115,7 @@ static int gk20a_tegra_secure_alloc(struct platform_device *pdev,
116 if (dma_mapping_error(&tegra_vpr_dev, iova)) 115 if (dma_mapping_error(&tegra_vpr_dev, iova))
117 return -ENOMEM; 116 return -ENOMEM;
118 117
119 desc->iova = iova; 118 desc->mem.size = size;
120 desc->size = size;
121 desc->attrs = attrs;
122 desc->destroy = gk20a_tegra_secure_destroy; 119 desc->destroy = gk20a_tegra_secure_destroy;
123 120
124 sgt = kzalloc(sizeof(*sgt), GFP_KERNEL); 121 sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
@@ -136,16 +133,15 @@ static int gk20a_tegra_secure_alloc(struct platform_device *pdev,
136 /* This bypasses SMMU for VPR during gmmu_map. */ 133 /* This bypasses SMMU for VPR during gmmu_map. */
137 sg_dma_address(sgt->sgl) = 0; 134 sg_dma_address(sgt->sgl) = 0;
138 135
139 desc->sgt = sgt; 136 desc->mem.sgt = sgt;
140 137
141 return err; 138 return err;
142 139
143fail_sgt: 140fail_sgt:
144 kfree(sgt); 141 kfree(sgt);
145fail: 142fail:
146 dma_free_attrs(&tegra_vpr_dev, desc->size, 143 dma_free_attrs(&tegra_vpr_dev, desc->mem.size,
147 (void *)(uintptr_t)&desc->iova, 144 (void *)(uintptr_t)iova, iova, &attrs);
148 desc->iova, &desc->attrs);
149 return err; 145 return err;
150} 146}
151 147