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/flcn_gk20a.c23
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c7
2 files changed, 24 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
index 158f4d8b..0ef10a56 100644
--- a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c
@@ -324,6 +324,26 @@ static int gk20a_flcn_copy_to_imem(struct nvgpu_falcon *flcn, u32 dst,
324 return 0; 324 return 0;
325} 325}
326 326
327static int gk20a_falcon_bootstrap(struct nvgpu_falcon *flcn,
328 u32 boot_vector)
329{
330 struct gk20a *g = flcn->g;
331 u32 base_addr = flcn->flcn_base;
332
333 nvgpu_log_info(g, "boot vec 0x%x", boot_vector);
334
335 gk20a_writel(g, base_addr + falcon_falcon_dmactl_r(),
336 falcon_falcon_dmactl_require_ctx_f(0));
337
338 gk20a_writel(g, base_addr + falcon_falcon_bootvec_r(),
339 falcon_falcon_bootvec_vec_f(boot_vector));
340
341 gk20a_writel(g, base_addr + falcon_falcon_cpuctl_r(),
342 falcon_falcon_cpuctl_startcpu_f(1));
343
344 return 0;
345}
346
327static void gk20a_falcon_engine_dependency_ops(struct nvgpu_falcon *flcn) 347static void gk20a_falcon_engine_dependency_ops(struct nvgpu_falcon *flcn)
328{ 348{
329 struct nvgpu_falcon_engine_dependency_ops *flcn_eng_dep_ops = 349 struct nvgpu_falcon_engine_dependency_ops *flcn_eng_dep_ops =
@@ -357,6 +377,7 @@ void gk20a_falcon_ops(struct nvgpu_falcon *flcn)
357 flcn_ops->copy_from_dmem = gk20a_flcn_copy_from_dmem; 377 flcn_ops->copy_from_dmem = gk20a_flcn_copy_from_dmem;
358 flcn_ops->copy_to_dmem = gk20a_flcn_copy_to_dmem; 378 flcn_ops->copy_to_dmem = gk20a_flcn_copy_to_dmem;
359 flcn_ops->copy_to_imem = gk20a_flcn_copy_to_imem; 379 flcn_ops->copy_to_imem = gk20a_flcn_copy_to_imem;
380 flcn_ops->bootstrap = gk20a_falcon_bootstrap;
360 381
361 gk20a_falcon_engine_dependency_ops(flcn); 382 gk20a_falcon_engine_dependency_ops(flcn);
362} 383}
@@ -396,7 +417,7 @@ static void gk20a_falcon_hal_sw_init(struct nvgpu_falcon *flcn)
396 nvgpu_mutex_init(&flcn->copy_lock); 417 nvgpu_mutex_init(&flcn->copy_lock);
397 gk20a_falcon_ops(flcn); 418 gk20a_falcon_ops(flcn);
398 } else 419 } else
399 nvgpu_info(g, "falcon 0x%x not supported on %s", 420 nvgpu_log_info(g, "falcon 0x%x not supported on %s",
400 flcn->flcn_id, g->name); 421 flcn->flcn_id, g->name);
401} 422}
402 423
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index b3cacb86..7cf8c475 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -23,6 +23,7 @@
23#include <nvgpu/log.h> 23#include <nvgpu/log.h>
24#include <nvgpu/bug.h> 24#include <nvgpu/bug.h>
25#include <nvgpu/firmware.h> 25#include <nvgpu/firmware.h>
26#include <nvgpu/falcon.h>
26 27
27#include "gk20a.h" 28#include "gk20a.h"
28#include "gr_gk20a.h" 29#include "gr_gk20a.h"
@@ -239,11 +240,7 @@ int pmu_bootstrap(struct nvgpu_pmu *pmu)
239 pwr_falcon_dmatrfcmd_ctxdma_f(GK20A_PMU_DMAIDX_UCODE)); 240 pwr_falcon_dmatrfcmd_ctxdma_f(GK20A_PMU_DMAIDX_UCODE));
240 } 241 }
241 242
242 gk20a_writel(g, pwr_falcon_bootvec_r(), 243 nvgpu_flcn_bootstrap(g->pmu.flcn, desc->bootloader_entry_point);
243 pwr_falcon_bootvec_vec_f(desc->bootloader_entry_point));
244
245 gk20a_writel(g, pwr_falcon_cpuctl_r(),
246 pwr_falcon_cpuctl_startcpu_f(1));
247 244
248 gk20a_writel(g, pwr_falcon_os_r(), desc->app_version); 245 gk20a_writel(g, pwr_falcon_os_r(), desc->app_version);
249 246