diff options
author | Mahantesh Kumbar <mkumbar@nvidia.com> | 2018-06-20 14:42:01 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-07-10 02:40:10 -0400 |
commit | 4cd59404a2d4ab1c31605d96cff848dd4e93c3b4 (patch) | |
tree | 24884407db02f117d90cccb28b9e713731f18274 /drivers/gpu/nvgpu/gk20a | |
parent | 876953fbb85f9440bbcc1d7d59435593886b53c4 (diff) |
gpu: nvgpu: falcon code cleanup
-Created common falcon function nvgpu_flcn_bl_bootstrap() to
bootstrap falcon bootloader
-Created HAL gk20a_falcon_bl_bootstrap() which does actual
bootloader bootstrap by fetching parameters and loading
code/parameters as needed.
-Created HAL ops bl_bootstrap under nvgpu_falcon_ops.
-Created struct nvgpu_falcon_bl_info to hold info required
for bootloader to pass to common function
-Removed falcons bootstrap code in multiple file & made
changes to fill struct nvgpu_falcon_bl_info & call
nvgpu_flcn_bl_bootstrap().
Change-Id: Iee275233915ff11f9afb5207ac0c3338ca9dacc1
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1756104
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-misra-checker <svc-misra-checker@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/flcn_gk20a.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c index 83850a19..520d9bb2 100644 --- a/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/flcn_gk20a.c | |||
@@ -432,6 +432,46 @@ static void gk20a_falcon_mailbox_write(struct nvgpu_falcon *flcn, | |||
432 | nvgpu_err(g, "incorrect mailbox id %d", mailbox_index); | 432 | nvgpu_err(g, "incorrect mailbox id %d", mailbox_index); |
433 | } | 433 | } |
434 | 434 | ||
435 | static int gk20a_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, | ||
436 | struct nvgpu_falcon_bl_info *bl_info) | ||
437 | { | ||
438 | struct gk20a *g = flcn->g; | ||
439 | u32 base_addr = flcn->flcn_base; | ||
440 | u32 virt_addr = 0; | ||
441 | u32 dst = 0; | ||
442 | int err = 0; | ||
443 | |||
444 | /*copy bootloader interface structure to dmem*/ | ||
445 | err = gk20a_flcn_copy_to_dmem(flcn, 0, (u8 *)bl_info->bl_desc, | ||
446 | bl_info->bl_desc_size, (u8)0); | ||
447 | if (err != 0) { | ||
448 | goto exit; | ||
449 | } | ||
450 | |||
451 | /* copy bootloader to TOP of IMEM */ | ||
452 | dst = (falcon_falcon_hwcfg_imem_size_v(gk20a_readl(g, | ||
453 | base_addr + falcon_falcon_hwcfg_r())) << 8) - bl_info->bl_size; | ||
454 | |||
455 | err = gk20a_flcn_copy_to_imem(flcn, dst, (u8 *)(bl_info->bl_src), | ||
456 | bl_info->bl_size, (u8)0, false, bl_info->bl_start_tag); | ||
457 | if (err != 0) { | ||
458 | goto exit; | ||
459 | } | ||
460 | |||
461 | gk20a_falcon_mailbox_write(flcn, FALCON_MAILBOX_0, 0xDEADA5A5U); | ||
462 | |||
463 | virt_addr = bl_info->bl_start_tag << 8; | ||
464 | |||
465 | err = gk20a_falcon_bootstrap(flcn, virt_addr); | ||
466 | |||
467 | exit: | ||
468 | if (err != 0) { | ||
469 | nvgpu_err(g, "falcon id-0x%x bootstrap failed", flcn->flcn_id); | ||
470 | } | ||
471 | |||
472 | return err; | ||
473 | } | ||
474 | |||
435 | static void gk20a_falcon_dump_imblk(struct nvgpu_falcon *flcn) | 475 | static void gk20a_falcon_dump_imblk(struct nvgpu_falcon *flcn) |
436 | { | 476 | { |
437 | struct gk20a *g = flcn->g; | 477 | struct gk20a *g = flcn->g; |
@@ -644,6 +684,7 @@ void gk20a_falcon_ops(struct nvgpu_falcon *flcn) | |||
644 | flcn_ops->dump_falcon_stats = gk20a_falcon_dump_stats; | 684 | flcn_ops->dump_falcon_stats = gk20a_falcon_dump_stats; |
645 | flcn_ops->mailbox_read = gk20a_falcon_mailbox_read; | 685 | flcn_ops->mailbox_read = gk20a_falcon_mailbox_read; |
646 | flcn_ops->mailbox_write = gk20a_falcon_mailbox_write; | 686 | flcn_ops->mailbox_write = gk20a_falcon_mailbox_write; |
687 | flcn_ops->bl_bootstrap = gk20a_falcon_bl_bootstrap; | ||
647 | 688 | ||
648 | gk20a_falcon_engine_dependency_ops(flcn); | 689 | gk20a_falcon_engine_dependency_ops(flcn); |
649 | } | 690 | } |