summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/sim.c
diff options
context:
space:
mode:
authorAntony Clince Alex <aalex@nvidia.com>2018-04-30 03:27:29 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-05-09 21:26:16 -0400
commit560e243f2d8b6cf3fafd8e79560cbf6dffe58e9e (patch)
tree263e9cefffae71b5e4d2c9bf709dbcb6458ba862 /drivers/gpu/nvgpu/common/sim.c
parentdd739fcb039d51606e9a5454ec0aab17bcb01965 (diff)
gpu: nvgpu: added nvgpu_sim_init_late
Split sim initialization to two parts, first part gets invoked as part of probe and second part gets invoked in the finalize_poweron after the hal has been initialized. This is done because some of the sim init code uses mm api's which are assigned as part of hal init. replaced sim buffer allocation api's with nvgpu_dma_sys_alloc. Change-Id: Ib019fbb747bdf6dcc74e7deba732ab41f0869e96 Signed-off-by: Antony Clince Alex <aalex@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1705424 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/sim.c')
-rw-r--r--drivers/gpu/nvgpu/common/sim.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/drivers/gpu/nvgpu/common/sim.c b/drivers/gpu/nvgpu/common/sim.c
index 6094d063..81146cd9 100644
--- a/drivers/gpu/nvgpu/common/sim.c
+++ b/drivers/gpu/nvgpu/common/sim.c
@@ -33,8 +33,7 @@ int nvgpu_alloc_sim_buffer(struct gk20a *g, struct nvgpu_mem *mem)
33{ 33{
34 int err; 34 int err;
35 35
36 err = nvgpu_dma_alloc(g, PAGE_SIZE, mem); 36 err = nvgpu_dma_alloc_sys(g, PAGE_SIZE, mem);
37
38 if (err) 37 if (err)
39 return err; 38 return err;
40 /* 39 /*
@@ -251,21 +250,14 @@ static int nvgpu_sim_esc_readl(struct gk20a *g,
251 return err; 250 return err;
252} 251}
253 252
254int nvgpu_init_sim_support(struct gk20a *g) 253static void nvgpu_sim_init_late(struct gk20a *g)
255{ 254{
256 int err = -ENOMEM;
257 u64 phys; 255 u64 phys;
258 256
259 if (!g->sim) 257 if (!g->sim)
260 return 0; 258 return;
261
262 /* allocate sim event/msg buffers */
263 err = nvgpu_alloc_sim_buffer(g, &g->sim->send_bfr);
264 err = err || nvgpu_alloc_sim_buffer(g, &g->sim->recv_bfr);
265 err = err || nvgpu_alloc_sim_buffer(g, &g->sim->msg_bfr);
266 259
267 if (err) 260 nvgpu_info(g, "sim init late");
268 goto fail;
269 /*mark send ring invalid*/ 261 /*mark send ring invalid*/
270 sim_writel(g->sim, sim_send_ring_r(), sim_send_ring_status_invalid_f()); 262 sim_writel(g->sim, sim_send_ring_r(), sim_send_ring_status_invalid_f());
271 263
@@ -300,6 +292,25 @@ int nvgpu_init_sim_support(struct gk20a *g)
300 sim_recv_ring_size_4kb_f() | 292 sim_recv_ring_size_4kb_f() |
301 sim_recv_ring_addr_lo_f(phys >> PAGE_SHIFT)); 293 sim_recv_ring_addr_lo_f(phys >> PAGE_SHIFT));
302 294
295 return;
296}
297
298int nvgpu_init_sim_support(struct gk20a *g)
299{
300 int err = -ENOMEM;
301
302 if (!g->sim)
303 return 0;
304
305 /* allocate sim event/msg buffers */
306 err = nvgpu_alloc_sim_buffer(g, &g->sim->send_bfr);
307 err = err || nvgpu_alloc_sim_buffer(g, &g->sim->recv_bfr);
308 err = err || nvgpu_alloc_sim_buffer(g, &g->sim->msg_bfr);
309
310 if (err)
311 goto fail;
312
313 g->sim->sim_init_late = nvgpu_sim_init_late;
303 g->sim->remove_support = nvgpu_remove_sim_support; 314 g->sim->remove_support = nvgpu_remove_sim_support;
304 g->sim->esc_readl = nvgpu_sim_esc_readl; 315 g->sim->esc_readl = nvgpu_sim_esc_readl;
305 return 0; 316 return 0;