diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-05-04 06:22:50 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-05-18 12:28:36 -0400 |
commit | 6266a1210d9fa36916e7469a0107b73a076b43a1 (patch) | |
tree | 2b43d34febd670df381f1c0460dd01ad250b33f5 /drivers/gpu/nvgpu/gp106 | |
parent | 85d7b3c5cc2e081c8bc81f43cef08738a254fc32 (diff) |
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>
Diffstat (limited to 'drivers/gpu/nvgpu/gp106')
-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 |
3 files changed, 25 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; |
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, |