summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp106/bios_gp106.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/bios_gp106.c')
-rw-r--r--drivers/gpu/nvgpu/gp106/bios_gp106.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gp106/bios_gp106.c b/drivers/gpu/nvgpu/gp106/bios_gp106.c
index b7e031c6..3178ae53 100644
--- a/drivers/gpu/nvgpu/gp106/bios_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/bios_gp106.c
@@ -135,6 +135,16 @@ out:
135 return err; 135 return err;
136} 136}
137 137
138int gp106_bios_preos_wait_for_halt(struct gk20a *g)
139{
140 int err = 0;
141
142 if (nvgpu_flcn_wait_for_halt(g->pmu.flcn, PMU_BOOT_TIMEOUT_MAX / 1000))
143 err = -ETIMEDOUT;
144
145 return err;
146}
147
138static int gp106_bios_preos(struct gk20a *g) 148static int gp106_bios_preos(struct gk20a *g)
139{ 149{
140 int err = 0; 150 int err = 0;
@@ -146,6 +156,9 @@ static int gp106_bios_preos(struct gk20a *g)
146 goto out; 156 goto out;
147 } 157 }
148 158
159 if (g->ops.bios.preos_reload_check)
160 g->ops.bios.preos_reload_check(g);
161
149 upload_code(g, g->bios.preos.bootloader_phys_base, 162 upload_code(g, g->bios.preos.bootloader_phys_base,
150 g->bios.preos.bootloader, 163 g->bios.preos.bootloader,
151 g->bios.preos.bootloader_size, 164 g->bios.preos.bootloader_size,
@@ -161,11 +174,7 @@ static int gp106_bios_preos(struct gk20a *g)
161 174
162 nvgpu_flcn_bootstrap(g->pmu.flcn, g->bios.preos.code_entry_point); 175 nvgpu_flcn_bootstrap(g->pmu.flcn, g->bios.preos.code_entry_point);
163 176
164 if (nvgpu_flcn_wait_for_halt(g->pmu.flcn, 177 err = g->ops.bios.preos_wait_for_halt(g);
165 PMU_BOOT_TIMEOUT_MAX / 1000)) {
166 err = -ETIMEDOUT;
167 goto out;
168 }
169 178
170 nvgpu_flcn_clear_halt_intr_status(g->pmu.flcn, 179 nvgpu_flcn_clear_halt_intr_status(g->pmu.flcn,
171 gk20a_get_gr_idle_timeout(g)); 180 gk20a_get_gr_idle_timeout(g));