summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2018-05-04 06:22:50 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-05-18 12:28:36 -0400
commit6266a1210d9fa36916e7469a0107b73a076b43a1 (patch)
tree2b43d34febd670df381f1c0460dd01ad250b33f5
parent85d7b3c5cc2e081c8bc81f43cef08738a254fc32 (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>
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h3
-rw-r--r--drivers/gpu/nvgpu/gp106/bios_gp106.c28
-rw-r--r--drivers/gpu/nvgpu/gp106/bios_gp106.h2
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c3
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c3
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
76static int gp106_bios_devinit(struct gk20a *g) 76int 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
145static int gp106_bios_preos(struct gk20a *g) 145int 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
29int gp106_bios_init(struct gk20a *g); 29int gp106_bios_init(struct gk20a *g);
30int gp106_bios_preos_wait_for_halt(struct gk20a *g); 30int gp106_bios_preos_wait_for_halt(struct gk20a *g);
31int gp106_bios_devinit(struct gk20a *g);
32int 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,