diff options
author | Antony Clince Alex <aalex@nvidia.com> | 2018-04-30 03:27:29 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-05-09 21:26:16 -0400 |
commit | 560e243f2d8b6cf3fafd8e79560cbf6dffe58e9e (patch) | |
tree | 263e9cefffae71b5e4d2c9bf709dbcb6458ba862 /drivers/gpu/nvgpu/common/sim.c | |
parent | dd739fcb039d51606e9a5454ec0aab17bcb01965 (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.c | 35 |
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 | ||
254 | int nvgpu_init_sim_support(struct gk20a *g) | 253 | static 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 | |||
298 | int 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; |