diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/bios_gp106.c')
-rw-r--r-- | drivers/gpu/nvgpu/gp106/bios_gp106.c | 19 |
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 | ||
138 | int 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 | |||
138 | static int gp106_bios_preos(struct gk20a *g) | 148 | static 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)); |