summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/cde_gk20a.c20
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c9
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c16
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c8
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h4
5 files changed, 30 insertions, 27 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
index 2187e833..18432c55 100644
--- a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
@@ -17,7 +17,6 @@
17 */ 17 */
18 18
19#include <linux/dma-mapping.h> 19#include <linux/dma-mapping.h>
20#include <linux/firmware.h>
21#include <linux/fs.h> 20#include <linux/fs.h>
22#include <linux/debugfs.h> 21#include <linux/debugfs.h>
23#include <linux/dma-buf.h> 22#include <linux/dma-buf.h>
@@ -30,6 +29,7 @@
30#include <nvgpu/kmem.h> 29#include <nvgpu/kmem.h>
31#include <nvgpu/log.h> 30#include <nvgpu/log.h>
32#include <nvgpu/bug.h> 31#include <nvgpu/bug.h>
32#include <nvgpu/firmware.h>
33 33
34#include "gk20a.h" 34#include "gk20a.h"
35#include "channel_gk20a.h" 35#include "channel_gk20a.h"
@@ -226,7 +226,7 @@ out:
226} 226}
227 227
228static int gk20a_init_cde_buf(struct gk20a_cde_ctx *cde_ctx, 228static int gk20a_init_cde_buf(struct gk20a_cde_ctx *cde_ctx,
229 const struct firmware *img, 229 struct nvgpu_firmware *img,
230 struct gk20a_cde_hdr_buf *buf) 230 struct gk20a_cde_hdr_buf *buf)
231{ 231{
232 struct nvgpu_mem *mem; 232 struct nvgpu_mem *mem;
@@ -314,7 +314,7 @@ static int gk20a_replace_data(struct gk20a_cde_ctx *cde_ctx, void *target,
314} 314}
315 315
316static int gk20a_init_cde_replace(struct gk20a_cde_ctx *cde_ctx, 316static int gk20a_init_cde_replace(struct gk20a_cde_ctx *cde_ctx,
317 const struct firmware *img, 317 struct nvgpu_firmware *img,
318 struct gk20a_cde_hdr_replace *replace) 318 struct gk20a_cde_hdr_replace *replace)
319{ 319{
320 struct nvgpu_mem *source_mem; 320 struct nvgpu_mem *source_mem;
@@ -454,7 +454,7 @@ static int gk20a_cde_patch_params(struct gk20a_cde_ctx *cde_ctx)
454} 454}
455 455
456static int gk20a_init_cde_param(struct gk20a_cde_ctx *cde_ctx, 456static int gk20a_init_cde_param(struct gk20a_cde_ctx *cde_ctx,
457 const struct firmware *img, 457 struct nvgpu_firmware *img,
458 struct gk20a_cde_hdr_param *param) 458 struct gk20a_cde_hdr_param *param)
459{ 459{
460 struct nvgpu_mem *target_mem; 460 struct nvgpu_mem *target_mem;
@@ -497,7 +497,7 @@ static int gk20a_init_cde_param(struct gk20a_cde_ctx *cde_ctx,
497} 497}
498 498
499static int gk20a_init_cde_required_class(struct gk20a_cde_ctx *cde_ctx, 499static int gk20a_init_cde_required_class(struct gk20a_cde_ctx *cde_ctx,
500 const struct firmware *img, 500 struct nvgpu_firmware *img,
501 u32 required_class) 501 u32 required_class)
502{ 502{
503 struct gk20a *g = cde_ctx->g; 503 struct gk20a *g = cde_ctx->g;
@@ -521,7 +521,7 @@ static int gk20a_init_cde_required_class(struct gk20a_cde_ctx *cde_ctx,
521} 521}
522 522
523static int gk20a_init_cde_command(struct gk20a_cde_ctx *cde_ctx, 523static int gk20a_init_cde_command(struct gk20a_cde_ctx *cde_ctx,
524 const struct firmware *img, 524 struct nvgpu_firmware *img,
525 u32 op, 525 u32 op,
526 struct gk20a_cde_cmd_elem *cmd_elem, 526 struct gk20a_cde_cmd_elem *cmd_elem,
527 u32 num_elems) 527 u32 num_elems)
@@ -622,7 +622,7 @@ static int gk20a_cde_pack_cmdbufs(struct gk20a_cde_ctx *cde_ctx)
622} 622}
623 623
624static int gk20a_init_cde_img(struct gk20a_cde_ctx *cde_ctx, 624static int gk20a_init_cde_img(struct gk20a_cde_ctx *cde_ctx,
625 const struct firmware *img) 625 struct nvgpu_firmware *img)
626{ 626{
627 struct gk20a *g = cde_ctx->g; 627 struct gk20a *g = cde_ctx->g;
628 struct gk20a_cde_app *cde_app = &cde_ctx->g->cde_app; 628 struct gk20a_cde_app *cde_app = &cde_ctx->g->cde_app;
@@ -1202,7 +1202,7 @@ __releases(&cde_app->mutex)
1202static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx) 1202static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx)
1203{ 1203{
1204 struct gk20a *g = cde_ctx->g; 1204 struct gk20a *g = cde_ctx->g;
1205 const struct firmware *img; 1205 struct nvgpu_firmware *img;
1206 struct channel_gk20a *ch; 1206 struct channel_gk20a *ch;
1207 struct gr_gk20a *gr = &g->gr; 1207 struct gr_gk20a *gr = &g->gr;
1208 int err = 0; 1208 int err = 0;
@@ -1265,7 +1265,7 @@ static int gk20a_cde_load(struct gk20a_cde_ctx *cde_ctx)
1265 } 1265 }
1266 1266
1267 /* initialisation done */ 1267 /* initialisation done */
1268 release_firmware(img); 1268 nvgpu_release_firmware(g, img);
1269 1269
1270 return 0; 1270 return 0;
1271 1271
@@ -1276,7 +1276,7 @@ err_alloc_gpfifo:
1276 gk20a_vm_put(ch->vm); 1276 gk20a_vm_put(ch->vm);
1277err_commit_va: 1277err_commit_va:
1278err_get_gk20a_channel: 1278err_get_gk20a_channel:
1279 release_firmware(img); 1279 nvgpu_release_firmware(g, img);
1280 nvgpu_err(g, "cde: couldn't initialise buffer converter: %d", err); 1280 nvgpu_err(g, "cde: couldn't initialise buffer converter: %d", err);
1281 return err; 1281 return err;
1282} 1282}
diff --git a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
index 712359e1..3c6d8924 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
@@ -19,11 +19,10 @@
19 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 19 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
20 */ 20 */
21 21
22#include <linux/firmware.h>
23
24#include <nvgpu/nvgpu_common.h> 22#include <nvgpu/nvgpu_common.h>
25#include <nvgpu/kmem.h> 23#include <nvgpu/kmem.h>
26#include <nvgpu/log.h> 24#include <nvgpu/log.h>
25#include <nvgpu/firmware.h>
27 26
28#include "gk20a.h" 27#include "gk20a.h"
29#include "gr_ctx_gk20a.h" 28#include "gr_ctx_gk20a.h"
@@ -112,7 +111,7 @@ static bool gr_gk20a_is_firmware_defined(void)
112 111
113static int gr_gk20a_init_ctx_vars_fw(struct gk20a *g, struct gr_gk20a *gr) 112static int gr_gk20a_init_ctx_vars_fw(struct gk20a *g, struct gr_gk20a *gr)
114{ 113{
115 const struct firmware *netlist_fw; 114 struct nvgpu_firmware *netlist_fw;
116 struct netlist_image *netlist = NULL; 115 struct netlist_image *netlist = NULL;
117 char name[MAX_NETLIST_NAME]; 116 char name[MAX_NETLIST_NAME];
118 u32 i, major_v = ~0, major_v_hw, netlist_num; 117 u32 i, major_v = ~0, major_v_hw, netlist_num;
@@ -392,7 +391,7 @@ static int gr_gk20a_init_ctx_vars_fw(struct gk20a *g, struct gr_gk20a *gr)
392 g->gr.ctx_vars.valid = true; 391 g->gr.ctx_vars.valid = true;
393 g->gr.netlist = net; 392 g->gr.netlist = net;
394 393
395 release_firmware(netlist_fw); 394 nvgpu_release_firmware(g, netlist_fw);
396 gk20a_dbg_fn("done"); 395 gk20a_dbg_fn("done");
397 goto done; 396 goto done;
398 397
@@ -427,7 +426,7 @@ clean_up:
427 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.perf_pma.l); 426 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.perf_pma.l);
428 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_rop.l); 427 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_rop.l);
429 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_ucgpc.l); 428 nvgpu_kfree(g, g->gr.ctx_vars.ctxsw_regs.pm_ucgpc.l);
430 release_firmware(netlist_fw); 429 nvgpu_release_firmware(g, netlist_fw);
431 err = -ENOENT; 430 err = -ENOENT;
432 } 431 }
433 432
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index a4419885..0e787356 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -17,7 +17,6 @@
17 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 17 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 */ 18 */
19 19
20#include <linux/firmware.h>
21#include <trace/events/gk20a.h> 20#include <trace/events/gk20a.h>
22 21
23#include <nvgpu/dma.h> 22#include <nvgpu/dma.h>
@@ -28,6 +27,7 @@
28#include <nvgpu/bsearch.h> 27#include <nvgpu/bsearch.h>
29#include <nvgpu/sort.h> 28#include <nvgpu/sort.h>
30#include <nvgpu/bug.h> 29#include <nvgpu/bug.h>
30#include <nvgpu/firmware.h>
31 31
32#include "gk20a.h" 32#include "gk20a.h"
33#include "kind_gk20a.h" 33#include "kind_gk20a.h"
@@ -2272,8 +2272,8 @@ int gr_gk20a_init_ctxsw_ucode(struct gk20a *g)
2272 struct vm_gk20a *vm = &mm->pmu.vm; 2272 struct vm_gk20a *vm = &mm->pmu.vm;
2273 struct gk20a_ctxsw_bootloader_desc *fecs_boot_desc; 2273 struct gk20a_ctxsw_bootloader_desc *fecs_boot_desc;
2274 struct gk20a_ctxsw_bootloader_desc *gpccs_boot_desc; 2274 struct gk20a_ctxsw_bootloader_desc *gpccs_boot_desc;
2275 const struct firmware *fecs_fw; 2275 struct nvgpu_firmware *fecs_fw;
2276 const struct firmware *gpccs_fw; 2276 struct nvgpu_firmware *gpccs_fw;
2277 u32 *fecs_boot_image; 2277 u32 *fecs_boot_image;
2278 u32 *gpccs_boot_image; 2278 u32 *gpccs_boot_image;
2279 struct gk20a_ctxsw_ucode_info *ucode_info = &g->ctxsw_ucode_info; 2279 struct gk20a_ctxsw_ucode_info *ucode_info = &g->ctxsw_ucode_info;
@@ -2292,7 +2292,7 @@ int gr_gk20a_init_ctxsw_ucode(struct gk20a *g)
2292 2292
2293 gpccs_fw = nvgpu_request_firmware(g, GK20A_GPCCS_UCODE_IMAGE, 0); 2293 gpccs_fw = nvgpu_request_firmware(g, GK20A_GPCCS_UCODE_IMAGE, 0);
2294 if (!gpccs_fw) { 2294 if (!gpccs_fw) {
2295 release_firmware(fecs_fw); 2295 nvgpu_release_firmware(g, fecs_fw);
2296 nvgpu_err(g, "failed to load gpccs ucode!!"); 2296 nvgpu_err(g, "failed to load gpccs ucode!!");
2297 return -ENOENT; 2297 return -ENOENT;
2298 } 2298 }
@@ -2321,7 +2321,7 @@ int gr_gk20a_init_ctxsw_ucode(struct gk20a *g)
2321 g->gr.ctx_vars.ucode.fecs.inst.l, 2321 g->gr.ctx_vars.ucode.fecs.inst.l,
2322 g->gr.ctx_vars.ucode.fecs.data.l); 2322 g->gr.ctx_vars.ucode.fecs.data.l);
2323 2323
2324 release_firmware(fecs_fw); 2324 nvgpu_release_firmware(g, fecs_fw);
2325 fecs_fw = NULL; 2325 fecs_fw = NULL;
2326 2326
2327 gr_gk20a_copy_ctxsw_ucode_segments(g, &ucode_info->surface_desc, 2327 gr_gk20a_copy_ctxsw_ucode_segments(g, &ucode_info->surface_desc,
@@ -2330,7 +2330,7 @@ int gr_gk20a_init_ctxsw_ucode(struct gk20a *g)
2330 g->gr.ctx_vars.ucode.gpccs.inst.l, 2330 g->gr.ctx_vars.ucode.gpccs.inst.l,
2331 g->gr.ctx_vars.ucode.gpccs.data.l); 2331 g->gr.ctx_vars.ucode.gpccs.data.l);
2332 2332
2333 release_firmware(gpccs_fw); 2333 nvgpu_release_firmware(g, gpccs_fw);
2334 gpccs_fw = NULL; 2334 gpccs_fw = NULL;
2335 2335
2336 err = gr_gk20a_init_ctxsw_ucode_vaspace(g); 2336 err = gr_gk20a_init_ctxsw_ucode_vaspace(g);
@@ -2345,9 +2345,9 @@ int gr_gk20a_init_ctxsw_ucode(struct gk20a *g)
2345 ucode_info->surface_desc.size, gk20a_mem_flag_none); 2345 ucode_info->surface_desc.size, gk20a_mem_flag_none);
2346 nvgpu_dma_free(g, &ucode_info->surface_desc); 2346 nvgpu_dma_free(g, &ucode_info->surface_desc);
2347 2347
2348 release_firmware(gpccs_fw); 2348 nvgpu_release_firmware(g, gpccs_fw);
2349 gpccs_fw = NULL; 2349 gpccs_fw = NULL;
2350 release_firmware(fecs_fw); 2350 nvgpu_release_firmware(g, fecs_fw);
2351 fecs_fw = NULL; 2351 fecs_fw = NULL;
2352 2352
2353 return err; 2353 return err;
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 49b9e78d..0ca8851f 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -16,7 +16,6 @@
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */ 17 */
18 18
19#include <linux/firmware.h>
20#include <linux/module.h> 19#include <linux/module.h>
21#include <linux/debugfs.h> 20#include <linux/debugfs.h>
22#include <linux/uaccess.h> 21#include <linux/uaccess.h>
@@ -27,6 +26,7 @@
27#include <nvgpu/dma.h> 26#include <nvgpu/dma.h>
28#include <nvgpu/log.h> 27#include <nvgpu/log.h>
29#include <nvgpu/bug.h> 28#include <nvgpu/bug.h>
29#include <nvgpu/firmware.h>
30 30
31#include "gk20a.h" 31#include "gk20a.h"
32#include "gr_gk20a.h" 32#include "gr_gk20a.h"
@@ -3099,12 +3099,14 @@ static int pmu_queue_close(struct pmu_gk20a *pmu,
3099 3099
3100void gk20a_remove_pmu_support(struct pmu_gk20a *pmu) 3100void gk20a_remove_pmu_support(struct pmu_gk20a *pmu)
3101{ 3101{
3102 struct gk20a *g = gk20a_from_pmu(pmu);
3103
3102 gk20a_dbg_fn(""); 3104 gk20a_dbg_fn("");
3103 3105
3104 if (nvgpu_alloc_initialized(&pmu->dmem)) 3106 if (nvgpu_alloc_initialized(&pmu->dmem))
3105 nvgpu_alloc_destroy(&pmu->dmem); 3107 nvgpu_alloc_destroy(&pmu->dmem);
3106 3108
3107 release_firmware(pmu->fw); 3109 nvgpu_release_firmware(g, pmu->fw);
3108 3110
3109 nvgpu_mutex_destroy(&pmu->elpg_mutex); 3111 nvgpu_mutex_destroy(&pmu->elpg_mutex);
3110 nvgpu_mutex_destroy(&pmu->pg_mutex); 3112 nvgpu_mutex_destroy(&pmu->pg_mutex);
@@ -3157,7 +3159,7 @@ static int gk20a_prepare_ucode(struct gk20a *g)
3157 return gk20a_init_pmu(pmu); 3159 return gk20a_init_pmu(pmu);
3158 3160
3159 err_release_fw: 3161 err_release_fw:
3160 release_firmware(pmu->fw); 3162 nvgpu_release_firmware(g, pmu->fw);
3161 pmu->fw = NULL; 3163 pmu->fw = NULL;
3162 3164
3163 return err; 3165 return err;
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
index 84161304..e7a8b7c2 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
@@ -25,6 +25,8 @@
25#include <nvgpu/flcnif_cmn.h> 25#include <nvgpu/flcnif_cmn.h>
26#include <nvgpu/pmuif/nvgpu_gpmu_cmdif.h> 26#include <nvgpu/pmuif/nvgpu_gpmu_cmdif.h>
27 27
28struct nvgpu_firmware;
29
28/* defined by pmu hw spec */ 30/* defined by pmu hw spec */
29#define GK20A_PMU_VA_SIZE (512 * 1024 * 1024) 31#define GK20A_PMU_VA_SIZE (512 * 1024 * 1024)
30#define GK20A_PMU_UCODE_SIZE_MAX (256 * 1024) 32#define GK20A_PMU_UCODE_SIZE_MAX (256 * 1024)
@@ -394,7 +396,7 @@ struct pmu_gk20a {
394 u32 aelpg_param[5]; 396 u32 aelpg_param[5];
395 u32 override_done; 397 u32 override_done;
396 398
397 const struct firmware *fw; 399 struct nvgpu_firmware *fw;
398}; 400};
399 401
400int gk20a_init_pmu_support(struct gk20a *g); 402int gk20a_init_pmu_support(struct gk20a *g);