mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
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:
committed by
mobile promotions
parent
160df44c2c
commit
3344637ccd
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user