From 328a7bd3ffc9590c0c432724d45da9f25732c2a1 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Thu, 31 May 2018 15:33:50 -0700 Subject: gpu: nvgpu: initialze bundle64 state We receive bundle with address and 64 bit values from ucode on some platforms This patch adds the support to handle 64 bit values Add struct av64_gk20a to store an address and corresponding 64 bit value Add struct av64_list_gk20a to store count and list of av64_gk20a Add API alloc_av64_list_gk20a() to allocate the list that supports 64bit values In gr_gk20a_init_ctx_vars_fw(), if we see NETLIST_REGIONID_SW_BUNDLE64_INIT, load the bundle64 state into above local structures Add new HAL gops.gr.init_sw_bundle64() and call it from gk20a_init_sw_bundle() if defined Also load the bundle for simulation cases in gr_gk20a_init_ctx_vars_sim() Jira NVGPUT-96 Change-Id: I1ab7fb37ff91c5fbd968c93d714725b01fd4f59b Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1736450 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c index 3f22a1b7..e357db19 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c @@ -57,6 +57,18 @@ static int gr_gk20a_alloc_load_netlist_av(struct gk20a *g, u32 *src, u32 len, return 0; } +static int gr_gk20a_alloc_load_netlist_av64(struct gk20a *g, u32 *src, u32 len, + struct av64_list_gk20a *av64_list) +{ + av64_list->count = len / sizeof(struct av64_gk20a); + if (!alloc_av64_list_gk20a(g, av64_list)) + return -ENOMEM; + + memcpy(av64_list->l, src, len); + + return 0; +} + static int gr_gk20a_alloc_load_netlist_aiv(struct gk20a *g, u32 *src, u32 len, struct aiv_list_gk20a *aiv_list) { @@ -343,6 +355,14 @@ static int gr_gk20a_init_ctx_vars_fw(struct gk20a *g, struct gr_gk20a *gr) if (err) goto clean_up; break; + case NETLIST_REGIONID_SW_BUNDLE64_INIT: + nvgpu_log_info(g, "NETLIST_REGIONID_SW_BUNDLE64_INIT"); + err = gr_gk20a_alloc_load_netlist_av64(g, + src, size, + &g->gr.ctx_vars.sw_bundle64_init); + if (err) + goto clean_up; + break; case NETLIST_REGIONID_NVPERF_PMCAU: nvgpu_log_info(g, "NETLIST_REGIONID_NVPERF_PMCAU"); err = gr_gk20a_alloc_load_netlist_aiv(g, @@ -403,6 +423,7 @@ clean_up: nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_rop.l); nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_ucgpc.l); nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.etpc.l); + nvgpu_kfree(g, g->gr.ctx_vars.sw_bundle64_init.l); nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_cau.l); nvgpu_release_firmware(g, netlist_fw); err = -ENOENT; -- cgit v1.2.2