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 <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1708382
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Deepak Nibade
2018-05-04 03:22:50 -07:00
committed by mobile promotions
parent 85d7b3c5cc
commit 6266a1210d
5 changed files with 31 additions and 8 deletions

View File

@@ -1124,6 +1124,9 @@ struct gpu_ops {
int (*init)(struct gk20a *g);
int (*preos_wait_for_halt)(struct gk20a *g);
void (*preos_reload_check)(struct gk20a *g);
int (*devinit)(struct gk20a *g);
int (*preos)(struct gk20a *g);
int (*verify_devinit)(struct gk20a *g);
} bios;
#if defined(CONFIG_GK20A_CYCLE_STATS)

View File

@@ -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;

View File

@@ -28,4 +28,6 @@ struct gpu_ops;
int gp106_bios_init(struct gk20a *g);
int gp106_bios_preos_wait_for_halt(struct gk20a *g);
int gp106_bios_devinit(struct gk20a *g);
int gp106_bios_preos(struct gk20a *g);
#endif

View File

@@ -234,6 +234,9 @@ static const struct gpu_ops gp106_ops = {
.bios = {
.init = gp106_bios_init,
.preos_wait_for_halt = gp106_bios_preos_wait_for_halt,
.devinit = gp106_bios_devinit,
.preos = gp106_bios_preos,
.verify_devinit = NULL,
},
.ltc = {
.determine_L2_size_bytes = gp10b_determine_L2_size_bytes,

View File

@@ -263,6 +263,9 @@ static const struct gpu_ops gv100_ops = {
.init = gp106_bios_init,
.preos_wait_for_halt = gv100_bios_preos_wait_for_halt,
.preos_reload_check = gv100_bios_preos_reload_check,
.devinit = gp106_bios_devinit,
.preos = gp106_bios_preos,
.verify_devinit = NULL,
},
.ltc = {
.determine_L2_size_bytes = gp10b_determine_L2_size_bytes,