diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/bios_gp106.c')
-rw-r--r-- | drivers/gpu/nvgpu/gp106/bios_gp106.c | 28 |
1 files changed, 20 insertions, 8 deletions
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) | |||
73 | gk20a_writel(g, pwr_falcon_dmemd_r(port), src_u32[i]); | 73 | gk20a_writel(g, pwr_falcon_dmemd_r(port), src_u32[i]); |
74 | } | 74 | } |
75 | 75 | ||
76 | static int gp106_bios_devinit(struct gk20a *g) | 76 | int gp106_bios_devinit(struct gk20a *g) |
77 | { | 77 | { |
78 | int err = 0; | 78 | int err = 0; |
79 | int devinit_completed; | 79 | int devinit_completed; |
@@ -142,7 +142,7 @@ int gp106_bios_preos_wait_for_halt(struct gk20a *g) | |||
142 | return err; | 142 | return err; |
143 | } | 143 | } |
144 | 144 | ||
145 | static int gp106_bios_preos(struct gk20a *g) | 145 | int gp106_bios_preos(struct gk20a *g) |
146 | { | 146 | { |
147 | int err = 0; | 147 | int err = 0; |
148 | 148 | ||
@@ -220,19 +220,31 @@ int gp106_bios_init(struct gk20a *g) | |||
220 | 220 | ||
221 | nvgpu_log_fn(g, "done"); | 221 | nvgpu_log_fn(g, "done"); |
222 | 222 | ||
223 | err = gp106_bios_devinit(g); | 223 | if (g->ops.bios.devinit) { |
224 | if (err) { | 224 | err = g->ops.bios.devinit(g); |
225 | nvgpu_err(g, "devinit failed"); | 225 | if (err) { |
226 | goto free_firmware; | 226 | nvgpu_err(g, "devinit failed"); |
227 | goto free_firmware; | ||
228 | } | ||
227 | } | 229 | } |
228 | 230 | ||
229 | if (nvgpu_is_enabled(g, NVGPU_PMU_RUN_PREOS)) { | 231 | if (nvgpu_is_enabled(g, NVGPU_PMU_RUN_PREOS) && |
230 | err = gp106_bios_preos(g); | 232 | g->ops.bios.preos) { |
233 | err = g->ops.bios.preos(g); | ||
231 | if (err) { | 234 | if (err) { |
232 | nvgpu_err(g, "pre-os failed"); | 235 | nvgpu_err(g, "pre-os failed"); |
233 | goto free_firmware; | 236 | goto free_firmware; |
234 | } | 237 | } |
235 | } | 238 | } |
239 | |||
240 | if (g->ops.bios.verify_devinit) { | ||
241 | err = g->ops.bios.verify_devinit(g); | ||
242 | if (err) { | ||
243 | nvgpu_err(g, "devinit status verification failed"); | ||
244 | goto free_firmware; | ||
245 | } | ||
246 | } | ||
247 | |||
236 | g->bios_is_init = true; | 248 | g->bios_is_init = true; |
237 | 249 | ||
238 | return 0; | 250 | return 0; |