diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/bios_gp106.c | 28 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/bios_gp106.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/hal_gp106.c | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv100/hal_gv100.c | 3 |
5 files changed, 31 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 45fa58f1..076bf89f 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -1124,6 +1124,9 @@ struct gpu_ops { | |||
1124 | int (*init)(struct gk20a *g); | 1124 | int (*init)(struct gk20a *g); |
1125 | int (*preos_wait_for_halt)(struct gk20a *g); | 1125 | int (*preos_wait_for_halt)(struct gk20a *g); |
1126 | void (*preos_reload_check)(struct gk20a *g); | 1126 | void (*preos_reload_check)(struct gk20a *g); |
1127 | int (*devinit)(struct gk20a *g); | ||
1128 | int (*preos)(struct gk20a *g); | ||
1129 | int (*verify_devinit)(struct gk20a *g); | ||
1127 | } bios; | 1130 | } bios; |
1128 | 1131 | ||
1129 | #if defined(CONFIG_GK20A_CYCLE_STATS) | 1132 | #if defined(CONFIG_GK20A_CYCLE_STATS) |
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; |
diff --git a/drivers/gpu/nvgpu/gp106/bios_gp106.h b/drivers/gpu/nvgpu/gp106/bios_gp106.h index a5229fff..37ec91e6 100644 --- a/drivers/gpu/nvgpu/gp106/bios_gp106.h +++ b/drivers/gpu/nvgpu/gp106/bios_gp106.h | |||
@@ -28,4 +28,6 @@ struct gpu_ops; | |||
28 | 28 | ||
29 | int gp106_bios_init(struct gk20a *g); | 29 | int gp106_bios_init(struct gk20a *g); |
30 | int gp106_bios_preos_wait_for_halt(struct gk20a *g); | 30 | int gp106_bios_preos_wait_for_halt(struct gk20a *g); |
31 | int gp106_bios_devinit(struct gk20a *g); | ||
32 | int gp106_bios_preos(struct gk20a *g); | ||
31 | #endif | 33 | #endif |
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c index 4111ac7d..66123fab 100644 --- a/drivers/gpu/nvgpu/gp106/hal_gp106.c +++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c | |||
@@ -234,6 +234,9 @@ static const struct gpu_ops gp106_ops = { | |||
234 | .bios = { | 234 | .bios = { |
235 | .init = gp106_bios_init, | 235 | .init = gp106_bios_init, |
236 | .preos_wait_for_halt = gp106_bios_preos_wait_for_halt, | 236 | .preos_wait_for_halt = gp106_bios_preos_wait_for_halt, |
237 | .devinit = gp106_bios_devinit, | ||
238 | .preos = gp106_bios_preos, | ||
239 | .verify_devinit = NULL, | ||
237 | }, | 240 | }, |
238 | .ltc = { | 241 | .ltc = { |
239 | .determine_L2_size_bytes = gp10b_determine_L2_size_bytes, | 242 | .determine_L2_size_bytes = gp10b_determine_L2_size_bytes, |
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 4a710689..595dbdaf 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c | |||
@@ -263,6 +263,9 @@ static const struct gpu_ops gv100_ops = { | |||
263 | .init = gp106_bios_init, | 263 | .init = gp106_bios_init, |
264 | .preos_wait_for_halt = gv100_bios_preos_wait_for_halt, | 264 | .preos_wait_for_halt = gv100_bios_preos_wait_for_halt, |
265 | .preos_reload_check = gv100_bios_preos_reload_check, | 265 | .preos_reload_check = gv100_bios_preos_reload_check, |
266 | .devinit = gp106_bios_devinit, | ||
267 | .preos = gp106_bios_preos, | ||
268 | .verify_devinit = NULL, | ||
266 | }, | 269 | }, |
267 | .ltc = { | 270 | .ltc = { |
268 | .determine_L2_size_bytes = gp10b_determine_L2_size_bytes, | 271 | .determine_L2_size_bytes = gp10b_determine_L2_size_bytes, |