summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c')
-rw-r--r--drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c
index 99c7e8b3..996fd251 100644
--- a/drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c
+++ b/drivers/gpu/nvgpu/tegra/linux/platform_gk20a_tegra.c
@@ -110,6 +110,8 @@ static void gk20a_tegra_secure_page_destroy(struct device *dev,
110 dma_free_attrs(&tegra_vpr_dev, secure_buffer->size, 110 dma_free_attrs(&tegra_vpr_dev, secure_buffer->size,
111 (void *)(uintptr_t)secure_buffer->iova, 111 (void *)(uintptr_t)secure_buffer->iova,
112 secure_buffer->iova, __DMA_ATTR(attrs)); 112 secure_buffer->iova, __DMA_ATTR(attrs));
113
114 secure_buffer->destroy = NULL;
113} 115}
114 116
115int gk20a_tegra_secure_page_alloc(struct device *dev) 117int gk20a_tegra_secure_page_alloc(struct device *dev)
@@ -153,7 +155,7 @@ static void gk20a_tegra_secure_destroy(struct gk20a *g,
153 } 155 }
154} 156}
155 157
156int gk20a_tegra_secure_alloc(struct device *dev, 158static int gk20a_tegra_secure_alloc(struct device *dev,
157 struct gr_ctx_buffer_desc *desc, 159 struct gr_ctx_buffer_desc *desc,
158 size_t size) 160 size_t size)
159{ 161{
@@ -164,9 +166,6 @@ int gk20a_tegra_secure_alloc(struct device *dev,
164 struct page *page; 166 struct page *page;
165 int err = 0; 167 int err = 0;
166 168
167 if (!platform->secure_alloc_ready)
168 return -EINVAL;
169
170 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, __DMA_ATTR(attrs)); 169 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, __DMA_ATTR(attrs));
171 (void)dma_alloc_attrs(&tegra_vpr_dev, size, &iova, 170 (void)dma_alloc_attrs(&tegra_vpr_dev, size, &iova,
172 GFP_KERNEL, __DMA_ATTR(attrs)); 171 GFP_KERNEL, __DMA_ATTR(attrs));
@@ -194,6 +193,9 @@ int gk20a_tegra_secure_alloc(struct device *dev,
194 desc->mem.size = size; 193 desc->mem.size = size;
195 desc->mem.aperture = APERTURE_SYSMEM; 194 desc->mem.aperture = APERTURE_SYSMEM;
196 195
196 if (platform->secure_buffer.destroy)
197 platform->secure_buffer.destroy(dev, &platform->secure_buffer);
198
197 return err; 199 return err;
198 200
199fail_sgt: 201fail_sgt:
@@ -896,6 +898,11 @@ void gk20a_tegra_idle(struct device *dev)
896#endif 898#endif
897} 899}
898 900
901void gk20a_tegra_init_secure_alloc(struct gk20a *g)
902{
903 g->ops.mm.secure_alloc = gk20a_tegra_secure_alloc;
904}
905
899static int gk20a_tegra_probe(struct device *dev) 906static int gk20a_tegra_probe(struct device *dev)
900{ 907{
901 struct gk20a_platform *platform = dev_get_drvdata(dev); 908 struct gk20a_platform *platform = dev_get_drvdata(dev);
@@ -974,6 +981,7 @@ static int gk20a_tegra_probe(struct device *dev)
974 981
975 gk20a_tegra_get_clocks(dev); 982 gk20a_tegra_get_clocks(dev);
976 nvgpu_linux_init_clk_support(platform->g); 983 nvgpu_linux_init_clk_support(platform->g);
984 gk20a_tegra_init_secure_alloc(platform->g);
977 985
978 if (platform->clk_register) { 986 if (platform->clk_register) {
979 ret = platform->clk_register(platform->g); 987 ret = platform->clk_register(platform->g);
@@ -988,8 +996,11 @@ static int gk20a_tegra_probe(struct device *dev)
988 return 0; 996 return 0;
989} 997}
990 998
991static int gk20a_tegra_late_probe(struct device *dev) 999int gk20a_tegra_late_probe(struct device *dev)
992{ 1000{
1001 /* Cause early VPR resize */
1002 gk20a_tegra_secure_page_alloc(dev);
1003
993 /* Initialise tegra specific scaling quirks */ 1004 /* Initialise tegra specific scaling quirks */
994 gk20a_tegra_scale_init(dev); 1005 gk20a_tegra_scale_init(dev);
995 1006
@@ -1085,8 +1096,6 @@ struct gk20a_platform gk20a_tegra_platform = {
1085 .devfreq_governor = "nvhost_podgov", 1096 .devfreq_governor = "nvhost_podgov",
1086 .qos_notify = gk20a_scale_qos_notify, 1097 .qos_notify = gk20a_scale_qos_notify,
1087 1098
1088 .secure_alloc = gk20a_tegra_secure_alloc,
1089 .secure_page_alloc = gk20a_tegra_secure_page_alloc,
1090 .dump_platform_dependencies = gk20a_tegra_debug_dump, 1099 .dump_platform_dependencies = gk20a_tegra_debug_dump,
1091 1100
1092 .soc_name = "tegra12x", 1101 .soc_name = "tegra12x",
@@ -1157,8 +1166,6 @@ struct gk20a_platform gm20b_tegra_platform = {
1157 .devfreq_governor = "nvhost_podgov", 1166 .devfreq_governor = "nvhost_podgov",
1158 .qos_notify = gk20a_scale_qos_notify, 1167 .qos_notify = gk20a_scale_qos_notify,
1159 1168
1160 .secure_alloc = gk20a_tegra_secure_alloc,
1161 .secure_page_alloc = gk20a_tegra_secure_page_alloc,
1162 .dump_platform_dependencies = gk20a_tegra_debug_dump, 1169 .dump_platform_dependencies = gk20a_tegra_debug_dump,
1163 1170
1164 .has_cde = true, 1171 .has_cde = true,