mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 02:52:51 +03:00
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:
committed by
mobile promotions
parent
85d7b3c5cc
commit
6266a1210d
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user