diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/Makefile.nvgpu | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm206/hal_gm206.c | 4 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm206/pmu_gm206.c | 174 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm206/pmu_gm206.h | 22 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/acr_gp106.c | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/pmu_gp106.c | 110 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/sec2_gp106.c | 4 |
7 files changed, 110 insertions, 211 deletions
diff --git a/drivers/gpu/nvgpu/Makefile.nvgpu b/drivers/gpu/nvgpu/Makefile.nvgpu index 5c2bbb79..a07289ce 100644 --- a/drivers/gpu/nvgpu/Makefile.nvgpu +++ b/drivers/gpu/nvgpu/Makefile.nvgpu | |||
@@ -88,7 +88,6 @@ nvgpu-y := \ | |||
88 | gm206/gr_gm206.o \ | 88 | gm206/gr_gm206.o \ |
89 | gm206/acr_gm206.o \ | 89 | gm206/acr_gm206.o \ |
90 | gm206/mm_gm206.o \ | 90 | gm206/mm_gm206.o \ |
91 | gm206/pmu_gm206.o \ | ||
92 | gm206/ce_gm206.o \ | 91 | gm206/ce_gm206.o \ |
93 | boardobj/boardobj.o \ | 92 | boardobj/boardobj.o \ |
94 | boardobj/boardobjgrp.o \ | 93 | boardobj/boardobjgrp.o \ |
diff --git a/drivers/gpu/nvgpu/gm206/hal_gm206.c b/drivers/gpu/nvgpu/gm206/hal_gm206.c index 6ecbbfed..d6c73b53 100644 --- a/drivers/gpu/nvgpu/gm206/hal_gm206.c +++ b/drivers/gpu/nvgpu/gm206/hal_gm206.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -37,7 +37,6 @@ | |||
37 | #include "gm20b/clk_gm20b.h" | 37 | #include "gm20b/clk_gm20b.h" |
38 | #include "gm20b/debug_gm20b.h" | 38 | #include "gm20b/debug_gm20b.h" |
39 | #include "gm206/mm_gm206.h" | 39 | #include "gm206/mm_gm206.h" |
40 | #include "gm206/pmu_gm206.h" | ||
41 | #include "gm206/acr_gm206.h" | 40 | #include "gm206/acr_gm206.h" |
42 | 41 | ||
43 | #include <nvgpu/hw/gm206/hw_proj_gm206.h> | 42 | #include <nvgpu/hw/gm206/hw_proj_gm206.h> |
@@ -190,7 +189,6 @@ int gm206_init_hal(struct gk20a *g) | |||
190 | gm206_init_ce(gops); | 189 | gm206_init_ce(gops); |
191 | gm20b_init_gr_ctx(gops); | 190 | gm20b_init_gr_ctx(gops); |
192 | gm206_init_mm(gops); | 191 | gm206_init_mm(gops); |
193 | gm206_init_pmu_ops(gops); | ||
194 | gm20b_init_clk_ops(gops); | 192 | gm20b_init_clk_ops(gops); |
195 | gm20b_init_regops(gops); | 193 | gm20b_init_regops(gops); |
196 | gm20b_init_debug_ops(gops); | 194 | gm20b_init_debug_ops(gops); |
diff --git a/drivers/gpu/nvgpu/gm206/pmu_gm206.c b/drivers/gpu/nvgpu/gm206/pmu_gm206.c deleted file mode 100644 index ffcf0bf1..00000000 --- a/drivers/gpu/nvgpu/gm206/pmu_gm206.c +++ /dev/null | |||
@@ -1,174 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | */ | ||
13 | |||
14 | #include <linux/delay.h> | ||
15 | |||
16 | #include "gk20a/gk20a.h" | ||
17 | #include "gk20a/pmu_gk20a.h" | ||
18 | #include "gk20a/pmu_gk20a.h" | ||
19 | #include "gm20b/acr_gm20b.h" | ||
20 | #include "gm206/acr_gm206.h" | ||
21 | #include "gm20b/pmu_gm20b.h" | ||
22 | #include "gm206/pmu_gm206.h" | ||
23 | |||
24 | #include <nvgpu/hw/gm206/hw_gr_gm206.h> | ||
25 | #include <nvgpu/hw/gm206/hw_pwr_gm206.h> | ||
26 | |||
27 | #define gm206_dbg_pmu(fmt, arg...) \ | ||
28 | gk20a_dbg(gpu_dbg_pmu, fmt, ##arg) | ||
29 | |||
30 | bool gm206_is_lazy_bootstrap(u32 falcon_id) | ||
31 | { | ||
32 | bool enable_status = false; | ||
33 | |||
34 | switch (falcon_id) { | ||
35 | case LSF_FALCON_ID_FECS: | ||
36 | enable_status = true; | ||
37 | break; | ||
38 | case LSF_FALCON_ID_GPCCS: | ||
39 | enable_status = true; | ||
40 | break; | ||
41 | default: | ||
42 | break; | ||
43 | } | ||
44 | |||
45 | return enable_status; | ||
46 | } | ||
47 | |||
48 | bool gm206_is_priv_load(u32 falcon_id) | ||
49 | { | ||
50 | bool enable_status = false; | ||
51 | |||
52 | switch (falcon_id) { | ||
53 | case LSF_FALCON_ID_FECS: | ||
54 | enable_status = true; | ||
55 | break; | ||
56 | case LSF_FALCON_ID_GPCCS: | ||
57 | enable_status = true; | ||
58 | break; | ||
59 | default: | ||
60 | break; | ||
61 | } | ||
62 | |||
63 | return enable_status; | ||
64 | } | ||
65 | |||
66 | static void gm206_pmu_load_multiple_falcons(struct gk20a *g, u32 falconidmask, | ||
67 | u32 flags) | ||
68 | { | ||
69 | struct pmu_gk20a *pmu = &g->pmu; | ||
70 | struct pmu_cmd cmd; | ||
71 | u32 seq; | ||
72 | |||
73 | gk20a_dbg_fn(""); | ||
74 | |||
75 | gm206_dbg_pmu("wprinit status = %x\n", g->ops.pmu.lspmuwprinitdone); | ||
76 | if (g->ops.pmu.lspmuwprinitdone) { | ||
77 | /* send message to load FECS falcon */ | ||
78 | memset(&cmd, 0, sizeof(struct pmu_cmd)); | ||
79 | cmd.hdr.unit_id = PMU_UNIT_ACR; | ||
80 | cmd.hdr.size = PMU_CMD_HDR_SIZE + | ||
81 | sizeof(struct pmu_acr_cmd_bootstrap_multiple_falcons); | ||
82 | cmd.cmd.acr.boot_falcons.cmd_type = | ||
83 | PMU_ACR_CMD_ID_BOOTSTRAP_MULTIPLE_FALCONS; | ||
84 | cmd.cmd.acr.boot_falcons.flags = flags; | ||
85 | cmd.cmd.acr.boot_falcons.falconidmask = | ||
86 | falconidmask; | ||
87 | cmd.cmd.acr.boot_falcons.usevamask = 0; | ||
88 | cmd.cmd.acr.boot_falcons.wprvirtualbase.lo = 0; | ||
89 | cmd.cmd.acr.boot_falcons.wprvirtualbase.hi = 0; | ||
90 | |||
91 | gm206_dbg_pmu("PMU_ACR_CMD_ID_BOOTSTRAP_MULTIPLE_FALCONS:%x\n", | ||
92 | falconidmask); | ||
93 | gk20a_pmu_cmd_post(g, &cmd, NULL, NULL, PMU_COMMAND_QUEUE_HPQ, | ||
94 | pmu_handle_fecs_boot_acr_msg, pmu, &seq, ~0); | ||
95 | } | ||
96 | |||
97 | gk20a_dbg_fn("done"); | ||
98 | } | ||
99 | |||
100 | int gm206_load_falcon_ucode(struct gk20a *g, u32 falconidmask) | ||
101 | { | ||
102 | u32 flags = PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_YES; | ||
103 | |||
104 | /* GM20B PMU supports loading FECS and GPCCS only */ | ||
105 | if (falconidmask == 0) | ||
106 | return -EINVAL; | ||
107 | if (falconidmask & ~((1 << LSF_FALCON_ID_FECS) | | ||
108 | (1 << LSF_FALCON_ID_GPCCS))) | ||
109 | return -EINVAL; | ||
110 | g->ops.pmu.lsfloadedfalconid = 0; | ||
111 | /* check whether pmu is ready to bootstrap lsf if not wait for it */ | ||
112 | if (!g->ops.pmu.lspmuwprinitdone) { | ||
113 | pmu_wait_message_cond(&g->pmu, | ||
114 | gk20a_get_gr_idle_timeout(g), | ||
115 | &g->ops.pmu.lspmuwprinitdone, 1); | ||
116 | /* check again if it still not ready indicate an error */ | ||
117 | if (!g->ops.pmu.lspmuwprinitdone) { | ||
118 | gk20a_err(dev_from_gk20a(g), | ||
119 | "PMU not ready to load LSF"); | ||
120 | return -ETIMEDOUT; | ||
121 | } | ||
122 | } | ||
123 | /* load falcon(s) */ | ||
124 | gm206_pmu_load_multiple_falcons(g, falconidmask, flags); | ||
125 | pmu_wait_message_cond(&g->pmu, | ||
126 | gk20a_get_gr_idle_timeout(g), | ||
127 | &g->ops.pmu.lsfloadedfalconid, falconidmask); | ||
128 | if (g->ops.pmu.lsfloadedfalconid != falconidmask) | ||
129 | return -ETIMEDOUT; | ||
130 | return 0; | ||
131 | } | ||
132 | |||
133 | static bool gm206_is_pmu_supported(struct gk20a *g) | ||
134 | { | ||
135 | return true; | ||
136 | } | ||
137 | |||
138 | |||
139 | void gm206_init_pmu_ops(struct gpu_ops *gops) | ||
140 | { | ||
141 | gops->pmu.is_pmu_supported = gm206_is_pmu_supported; | ||
142 | if (gops->privsecurity) { | ||
143 | gm206_init_secure_pmu(gops); | ||
144 | gops->pmu.init_wpr_region = gm20b_pmu_init_acr; | ||
145 | gops->pmu.load_lsfalcon_ucode = gm206_load_falcon_ucode; | ||
146 | gops->pmu.is_lazy_bootstrap = gm206_is_lazy_bootstrap; | ||
147 | gops->pmu.is_priv_load = gm206_is_priv_load; | ||
148 | } else { | ||
149 | gk20a_init_pmu_ops(gops); | ||
150 | gops->pmu.pmu_setup_hw_and_bootstrap = | ||
151 | gm20b_init_nspmu_setup_hw1; | ||
152 | gops->pmu.load_lsfalcon_ucode = NULL; | ||
153 | gops->pmu.init_wpr_region = NULL; | ||
154 | } | ||
155 | gops->pmu.pmu_setup_elpg = NULL; | ||
156 | gops->pmu.pmu_get_queue_head = pwr_pmu_queue_head_r; | ||
157 | gops->pmu.pmu_get_queue_head_size = pwr_pmu_queue_head__size_1_v; | ||
158 | gops->pmu.pmu_get_queue_tail = pwr_pmu_queue_tail_r; | ||
159 | gops->pmu.pmu_get_queue_tail_size = pwr_pmu_queue_tail__size_1_v; | ||
160 | gops->pmu.lspmuwprinitdone = 0; | ||
161 | gops->pmu.fecsbootstrapdone = false; | ||
162 | gops->pmu.write_dmatrfbase = gm20b_write_dmatrfbase; | ||
163 | gops->pmu.pmu_elpg_statistics = NULL; | ||
164 | gops->pmu.pmu_pg_init_param = NULL; | ||
165 | gops->pmu.pmu_pg_supported_engines_list = NULL; | ||
166 | gops->pmu.pmu_pg_engines_feature_list = NULL; | ||
167 | gops->pmu.pmu_lpwr_enable_pg = NULL; | ||
168 | gops->pmu.pmu_is_lpwr_feature_supported = NULL; | ||
169 | gops->pmu.pmu_lpwr_disable_pg = NULL; | ||
170 | gops->pmu.pmu_pg_param_post_init = NULL; | ||
171 | gops->pmu.send_lrf_tex_ltc_dram_overide_en_dis_cmd = NULL; | ||
172 | gops->pmu.dump_secure_fuses = NULL; | ||
173 | gops->pmu.reset = gk20a_pmu_reset; | ||
174 | } | ||
diff --git a/drivers/gpu/nvgpu/gm206/pmu_gm206.h b/drivers/gpu/nvgpu/gm206/pmu_gm206.h deleted file mode 100644 index 418f30ac..00000000 --- a/drivers/gpu/nvgpu/gm206/pmu_gm206.h +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | */ | ||
13 | |||
14 | #ifndef __PMU_GM206_H_ | ||
15 | #define __PMU_GM206_H_ | ||
16 | |||
17 | void gm206_init_pmu_ops(struct gpu_ops *gops); | ||
18 | bool gm206_is_priv_load(u32 falcon_id); | ||
19 | bool gm206_is_lazy_bootstrap(u32 falcon_id); | ||
20 | int gm206_load_falcon_ucode(struct gk20a *g, u32 falconidmask); | ||
21 | |||
22 | #endif /*__PMU_GM206_H_*/ | ||
diff --git a/drivers/gpu/nvgpu/gp106/acr_gp106.c b/drivers/gpu/nvgpu/gp106/acr_gp106.c index f8d7ba70..f5a4053b 100644 --- a/drivers/gpu/nvgpu/gp106/acr_gp106.c +++ b/drivers/gpu/nvgpu/gp106/acr_gp106.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2015-2017, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | #include "gm206/acr_gm206.h" | 25 | #include "gm206/acr_gm206.h" |
26 | #include "gm20b/acr_gm20b.h" | 26 | #include "gm20b/acr_gm20b.h" |
27 | #include "gm206/pmu_gm206.h" | 27 | #include "gp106/pmu_gp106.h" |
28 | 28 | ||
29 | #include "sec2_gp106.h" | 29 | #include "sec2_gp106.h" |
30 | #include "nvgpu_gpuid_t18x.h" | 30 | #include "nvgpu_gpuid_t18x.h" |
@@ -122,8 +122,6 @@ void gp106_init_secure_pmu(struct gpu_ops *gops) | |||
122 | { | 122 | { |
123 | gops->pmu.prepare_ucode = gp106_prepare_ucode_blob; | 123 | gops->pmu.prepare_ucode = gp106_prepare_ucode_blob; |
124 | gops->pmu.pmu_setup_hw_and_bootstrap = gp106_bootstrap_hs_flcn; | 124 | gops->pmu.pmu_setup_hw_and_bootstrap = gp106_bootstrap_hs_flcn; |
125 | gops->pmu.is_lazy_bootstrap = gm206_is_lazy_bootstrap; | ||
126 | gops->pmu.is_priv_load = gm206_is_priv_load; | ||
127 | gops->pmu.get_wpr = gp106_wpr_info; | 125 | gops->pmu.get_wpr = gp106_wpr_info; |
128 | gops->pmu.alloc_blob_space = gp106_alloc_blob_space; | 126 | gops->pmu.alloc_blob_space = gp106_alloc_blob_space; |
129 | gops->pmu.pmu_populate_loader_cfg = gp106_pmu_populate_loader_cfg; | 127 | gops->pmu.pmu_populate_loader_cfg = gp106_pmu_populate_loader_cfg; |
diff --git a/drivers/gpu/nvgpu/gp106/pmu_gp106.c b/drivers/gpu/nvgpu/gp106/pmu_gp106.c index 9aac5328..5a9d5ba6 100644 --- a/drivers/gpu/nvgpu/gp106/pmu_gp106.c +++ b/drivers/gpu/nvgpu/gp106/pmu_gp106.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include "gk20a/pmu_gk20a.h" | 17 | #include "gk20a/pmu_gk20a.h" |
18 | 18 | ||
19 | #include "gm20b/pmu_gm20b.h" | 19 | #include "gm20b/pmu_gm20b.h" |
20 | #include "gm206/pmu_gm206.h" | ||
21 | #include "gp10b/pmu_gp10b.h" | 20 | #include "gp10b/pmu_gp10b.h" |
22 | #include "gp106/pmu_gp106.h" | 21 | #include "gp106/pmu_gp106.h" |
23 | #include "gp106/acr_gp106.h" | 22 | #include "gp106/acr_gp106.h" |
@@ -299,6 +298,109 @@ static bool gp106_pmu_is_lpwr_feature_supported(struct gk20a *g, u32 feature_id) | |||
299 | return is_feature_supported; | 298 | return is_feature_supported; |
300 | } | 299 | } |
301 | 300 | ||
301 | static bool gp106_is_lazy_bootstrap(u32 falcon_id) | ||
302 | { | ||
303 | bool enable_status = false; | ||
304 | |||
305 | switch (falcon_id) { | ||
306 | case LSF_FALCON_ID_FECS: | ||
307 | enable_status = true; | ||
308 | break; | ||
309 | case LSF_FALCON_ID_GPCCS: | ||
310 | enable_status = true; | ||
311 | break; | ||
312 | default: | ||
313 | break; | ||
314 | } | ||
315 | |||
316 | return enable_status; | ||
317 | } | ||
318 | |||
319 | static bool gp106_is_priv_load(u32 falcon_id) | ||
320 | { | ||
321 | bool enable_status = false; | ||
322 | |||
323 | switch (falcon_id) { | ||
324 | case LSF_FALCON_ID_FECS: | ||
325 | enable_status = true; | ||
326 | break; | ||
327 | case LSF_FALCON_ID_GPCCS: | ||
328 | enable_status = true; | ||
329 | break; | ||
330 | default: | ||
331 | break; | ||
332 | } | ||
333 | |||
334 | return enable_status; | ||
335 | } | ||
336 | |||
337 | static void gp106_pmu_load_multiple_falcons(struct gk20a *g, u32 falconidmask, | ||
338 | u32 flags) | ||
339 | { | ||
340 | struct pmu_gk20a *pmu = &g->pmu; | ||
341 | struct pmu_cmd cmd; | ||
342 | u32 seq; | ||
343 | |||
344 | gk20a_dbg_fn(""); | ||
345 | |||
346 | gp106_dbg_pmu("wprinit status = %x\n", g->ops.pmu.lspmuwprinitdone); | ||
347 | if (g->ops.pmu.lspmuwprinitdone) { | ||
348 | /* send message to load FECS falcon */ | ||
349 | memset(&cmd, 0, sizeof(struct pmu_cmd)); | ||
350 | cmd.hdr.unit_id = PMU_UNIT_ACR; | ||
351 | cmd.hdr.size = PMU_CMD_HDR_SIZE + | ||
352 | sizeof(struct pmu_acr_cmd_bootstrap_multiple_falcons); | ||
353 | cmd.cmd.acr.boot_falcons.cmd_type = | ||
354 | PMU_ACR_CMD_ID_BOOTSTRAP_MULTIPLE_FALCONS; | ||
355 | cmd.cmd.acr.boot_falcons.flags = flags; | ||
356 | cmd.cmd.acr.boot_falcons.falconidmask = | ||
357 | falconidmask; | ||
358 | cmd.cmd.acr.boot_falcons.usevamask = 0; | ||
359 | cmd.cmd.acr.boot_falcons.wprvirtualbase.lo = 0; | ||
360 | cmd.cmd.acr.boot_falcons.wprvirtualbase.hi = 0; | ||
361 | |||
362 | gp106_dbg_pmu("PMU_ACR_CMD_ID_BOOTSTRAP_MULTIPLE_FALCONS:%x\n", | ||
363 | falconidmask); | ||
364 | gk20a_pmu_cmd_post(g, &cmd, NULL, NULL, PMU_COMMAND_QUEUE_HPQ, | ||
365 | pmu_handle_fecs_boot_acr_msg, pmu, &seq, ~0); | ||
366 | } | ||
367 | |||
368 | gk20a_dbg_fn("done"); | ||
369 | } | ||
370 | |||
371 | static int gp106_load_falcon_ucode(struct gk20a *g, u32 falconidmask) | ||
372 | { | ||
373 | u32 flags = PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_YES; | ||
374 | |||
375 | /* GM20B PMU supports loading FECS and GPCCS only */ | ||
376 | if (falconidmask == 0) | ||
377 | return -EINVAL; | ||
378 | if (falconidmask & ~((1 << LSF_FALCON_ID_FECS) | | ||
379 | (1 << LSF_FALCON_ID_GPCCS))) | ||
380 | return -EINVAL; | ||
381 | g->ops.pmu.lsfloadedfalconid = 0; | ||
382 | /* check whether pmu is ready to bootstrap lsf if not wait for it */ | ||
383 | if (!g->ops.pmu.lspmuwprinitdone) { | ||
384 | pmu_wait_message_cond(&g->pmu, | ||
385 | gk20a_get_gr_idle_timeout(g), | ||
386 | &g->ops.pmu.lspmuwprinitdone, 1); | ||
387 | /* check again if it still not ready indicate an error */ | ||
388 | if (!g->ops.pmu.lspmuwprinitdone) { | ||
389 | gk20a_err(dev_from_gk20a(g), | ||
390 | "PMU not ready to load LSF"); | ||
391 | return -ETIMEDOUT; | ||
392 | } | ||
393 | } | ||
394 | /* load falcon(s) */ | ||
395 | gp106_pmu_load_multiple_falcons(g, falconidmask, flags); | ||
396 | pmu_wait_message_cond(&g->pmu, | ||
397 | gk20a_get_gr_idle_timeout(g), | ||
398 | &g->ops.pmu.lsfloadedfalconid, falconidmask); | ||
399 | if (g->ops.pmu.lsfloadedfalconid != falconidmask) | ||
400 | return -ETIMEDOUT; | ||
401 | return 0; | ||
402 | } | ||
403 | |||
302 | void gp106_init_pmu_ops(struct gpu_ops *gops) | 404 | void gp106_init_pmu_ops(struct gpu_ops *gops) |
303 | { | 405 | { |
304 | gk20a_dbg_fn(""); | 406 | gk20a_dbg_fn(""); |
@@ -306,9 +408,9 @@ void gp106_init_pmu_ops(struct gpu_ops *gops) | |||
306 | if (gops->privsecurity) { | 408 | if (gops->privsecurity) { |
307 | gp106_init_secure_pmu(gops); | 409 | gp106_init_secure_pmu(gops); |
308 | gops->pmu.init_wpr_region = gm20b_pmu_init_acr; | 410 | gops->pmu.init_wpr_region = gm20b_pmu_init_acr; |
309 | gops->pmu.load_lsfalcon_ucode = gm206_load_falcon_ucode; | 411 | gops->pmu.load_lsfalcon_ucode = gp106_load_falcon_ucode; |
310 | gops->pmu.is_lazy_bootstrap = gm206_is_lazy_bootstrap; | 412 | gops->pmu.is_lazy_bootstrap = gp106_is_lazy_bootstrap; |
311 | gops->pmu.is_priv_load = gm206_is_priv_load; | 413 | gops->pmu.is_priv_load = gp106_is_priv_load; |
312 | } else { | 414 | } else { |
313 | gk20a_init_pmu_ops(gops); | 415 | gk20a_init_pmu_ops(gops); |
314 | gops->pmu.pmu_setup_hw_and_bootstrap = | 416 | gops->pmu.pmu_setup_hw_and_bootstrap = |
diff --git a/drivers/gpu/nvgpu/gp106/sec2_gp106.c b/drivers/gpu/nvgpu/gp106/sec2_gp106.c index 738519cf..9af16886 100644 --- a/drivers/gpu/nvgpu/gp106/sec2_gp106.c +++ b/drivers/gpu/nvgpu/gp106/sec2_gp106.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -17,8 +17,6 @@ | |||
17 | #include "gk20a/gk20a.h" | 17 | #include "gk20a/gk20a.h" |
18 | #include "gk20a/pmu_gk20a.h" | 18 | #include "gk20a/pmu_gk20a.h" |
19 | 19 | ||
20 | #include "gm206/pmu_gm206.h" | ||
21 | |||
22 | #include "gm20b/pmu_gm20b.h" | 20 | #include "gm20b/pmu_gm20b.h" |
23 | 21 | ||
24 | #include "gp10b/pmu_gp10b.h" | 22 | #include "gp10b/pmu_gp10b.h" |