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 <skamble@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2015594
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Sagar Kamble
2019-02-06 20:13:14 +05:30
committed by mobile promotions
parent 160df44c2c
commit 3344637ccd
2 changed files with 15 additions and 16 deletions

View File

@@ -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;
}

View File

@@ -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),