From 6266a1210d9fa36916e7469a0107b73a076b43a1 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Fri, 4 May 2018 03:22:50 -0700 Subject: gpu: nvgpu: add HALs for devinit and preos bios operations Add below new HALs for bios operations gops.bios.devinit() gops.bios.preos() gops.bios.verify_devinit() Export existing APIs gp106_bios_devinit() and gp106_bios_preos() and set them to above HALs on gp106 and gv100 And call new HALs from gp106_bios_init() if supported instead of directly calling APIs Jira NVGPUT-48 Change-Id: Ic89f1c86cf6e3e0785b3663fe733b201d6f2f773 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1708382 GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gp106/bios_gp106.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'drivers/gpu/nvgpu/gp106/bios_gp106.c') diff --git a/drivers/gpu/nvgpu/gp106/bios_gp106.c b/drivers/gpu/nvgpu/gp106/bios_gp106.c index 3363aeba..b102eef2 100644 --- a/drivers/gpu/nvgpu/gp106/bios_gp106.c +++ b/drivers/gpu/nvgpu/gp106/bios_gp106.c @@ -73,7 +73,7 @@ static void upload_data(struct gk20a *g, u32 dst, u8 *src, u32 size, u8 port) gk20a_writel(g, pwr_falcon_dmemd_r(port), src_u32[i]); } -static int gp106_bios_devinit(struct gk20a *g) +int gp106_bios_devinit(struct gk20a *g) { int err = 0; int devinit_completed; @@ -142,7 +142,7 @@ int gp106_bios_preos_wait_for_halt(struct gk20a *g) return err; } -static int gp106_bios_preos(struct gk20a *g) +int gp106_bios_preos(struct gk20a *g) { int err = 0; @@ -220,19 +220,31 @@ int gp106_bios_init(struct gk20a *g) nvgpu_log_fn(g, "done"); - err = gp106_bios_devinit(g); - if (err) { - nvgpu_err(g, "devinit failed"); - goto free_firmware; + if (g->ops.bios.devinit) { + err = g->ops.bios.devinit(g); + if (err) { + nvgpu_err(g, "devinit failed"); + goto free_firmware; + } } - if (nvgpu_is_enabled(g, NVGPU_PMU_RUN_PREOS)) { - err = gp106_bios_preos(g); + if (nvgpu_is_enabled(g, NVGPU_PMU_RUN_PREOS) && + g->ops.bios.preos) { + err = g->ops.bios.preos(g); if (err) { nvgpu_err(g, "pre-os failed"); goto free_firmware; } } + + if (g->ops.bios.verify_devinit) { + err = g->ops.bios.verify_devinit(g); + if (err) { + nvgpu_err(g, "devinit status verification failed"); + goto free_firmware; + } + } + g->bios_is_init = true; return 0; -- cgit v1.2.2