From 3344637ccd65430a4a51164faffe70df3b8786bf Mon Sep 17 00:00:00 2001 From: Sagar Kamble Date: Wed, 6 Feb 2019 20:13:14 +0530 Subject: [PATCH] gpu: nvgpu: isolate common & hal falcon_bl_bootstrap functions nvgpu_falcon_bl_bootstrap should validate bootloader parameters. And gk20a_falcon_bl_bootstrap is supposed to be hal API that will program the bootloader bootstrap settings. JIRA NVGPU-1459 Change-Id: I5b46ce2fcdcc938815cdd9eb4b7e449f63578c41 Signed-off-by: Sagar Kamble Reviewed-on: https://git-master.nvidia.com/r/2015594 Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra GVS: Gerrit_Virtual_Submit Reviewed-by: Mahantesh Kumbar Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/falcon/falcon.c | 21 ++++++++++++------- .../gpu/nvgpu/common/falcon/falcon_gk20a.c | 10 +-------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/nvgpu/common/falcon/falcon.c b/drivers/gpu/nvgpu/common/falcon/falcon.c index 5f778f95b..76944f431 100644 --- a/drivers/gpu/nvgpu/common/falcon/falcon.c +++ b/drivers/gpu/nvgpu/common/falcon/falcon.c @@ -608,23 +608,30 @@ int nvgpu_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, struct nvgpu_falcon_bl_info *bl_info) { struct nvgpu_falcon_ops *flcn_ops; - int status = 0; + int status = -EINVAL; + u32 imem_size; if (flcn == NULL) { - return -EINVAL; + goto exit; } flcn_ops = &flcn->flcn_ops; - if (flcn_ops->bl_bootstrap != NULL) { - status = flcn_ops->bl_bootstrap(flcn, bl_info); - } - else { + if (flcn_ops->bl_bootstrap == NULL) { nvgpu_warn(flcn->g, "Invalid op on falcon 0x%x ", flcn->flcn_id); - status = -EINVAL; + goto exit; } + imem_size = flcn_ops->get_mem_size(flcn, MEM_IMEM); + if (bl_info->bl_size > imem_size) { + nvgpu_err(flcn->g, "bootloader size greater than IMEM size"); + goto exit; + } + + status = flcn_ops->bl_bootstrap(flcn, bl_info); + +exit: return status; } diff --git a/drivers/gpu/nvgpu/common/falcon/falcon_gk20a.c b/drivers/gpu/nvgpu/common/falcon/falcon_gk20a.c index 75b39fd4c..5e6dd3566 100644 --- a/drivers/gpu/nvgpu/common/falcon/falcon_gk20a.c +++ b/drivers/gpu/nvgpu/common/falcon/falcon_gk20a.c @@ -367,7 +367,6 @@ static int gk20a_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, struct nvgpu_falcon_bl_info *bl_info) { struct gk20a *g = flcn->g; - u32 base_addr = flcn->flcn_base; u32 virt_addr = 0; u32 imem_size; u32 dst = 0; @@ -381,14 +380,7 @@ static int gk20a_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, } /* copy bootloader to TOP of IMEM */ - imem_size = falcon_falcon_hwcfg_imem_size_v(gk20a_readl(g, - base_addr + falcon_falcon_hwcfg_r())) << 8; - - if (bl_info->bl_size > imem_size) { - err = -EINVAL; - goto exit; - } - + imem_size = gk20a_falcon_get_mem_size(flcn, MEM_IMEM); dst = imem_size - bl_info->bl_size; err = gk20a_falcon_copy_to_imem(flcn, dst, (u8 *)(bl_info->bl_src),