From 8da1bde7dbdcfe3c738ba8dce7d7376c77acd983 Mon Sep 17 00:00:00 2001 From: Sagar Kamble Date: Tue, 19 Feb 2019 12:03:36 +0530 Subject: [PATCH] gpu: nvgpu: define nvgpu_falcon_get_mem_size Currently we have DMEM version of the API to get the size of falcon memory. Let us convert it to generic as needed at multiple places. JIRA: NVGPU-1993 Change-Id: If612b0a10e27619e4b6132773907eb21f0569a27 Signed-off-by: Sagar Kamble Reviewed-on: https://git-master.nvidia.com/r/2023074 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/falcon/falcon.c | 22 +++++++++++-------- drivers/gpu/nvgpu/common/falcon/falcon_priv.h | 5 ----- drivers/gpu/nvgpu/common/pmu/pmu.c | 2 +- drivers/gpu/nvgpu/include/nvgpu/falcon.h | 8 ++++++- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/nvgpu/common/falcon/falcon.c b/drivers/gpu/nvgpu/common/falcon/falcon.c index ebe2faf8e..bae45a0e5 100644 --- a/drivers/gpu/nvgpu/common/falcon/falcon.c +++ b/drivers/gpu/nvgpu/common/falcon/falcon.c @@ -284,7 +284,6 @@ int nvgpu_falcon_copy_to_emem(struct nvgpu_falcon *flcn, static int falcon_memcpy_params_check(struct nvgpu_falcon *flcn, u32 offset, u32 size, enum falcon_mem_type mem_type) { - struct nvgpu_falcon_ops *flcn_ops = &flcn->flcn_ops; struct gk20a *g = flcn->g; u32 mem_size = 0; int ret = -EINVAL; @@ -299,13 +298,11 @@ static int falcon_memcpy_params_check(struct nvgpu_falcon *flcn, goto exit; } - if (flcn_ops->get_mem_size == NULL) { - nvgpu_warn(flcn->g, "Invalid op on falcon 0x%x ", - flcn->flcn_id); + ret = nvgpu_falcon_get_mem_size(flcn, mem_type, &mem_size); + if (ret != 0) { goto exit; } - mem_size = flcn_ops->get_mem_size(flcn, mem_type); if (!(offset <= mem_size && (offset + size) <= mem_size)) { nvgpu_err(g, "flcn-id 0x%x, copy overflow ", flcn->flcn_id); @@ -628,7 +625,11 @@ int nvgpu_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, goto exit; } - imem_size = flcn_ops->get_mem_size(flcn, MEM_IMEM); + status = nvgpu_falcon_get_mem_size(flcn, MEM_IMEM, &imem_size); + if (status != 0) { + goto exit; + } + if (bl_info->bl_size > imem_size) { nvgpu_err(flcn->g, "bootloader size greater than IMEM size"); goto exit; @@ -658,9 +659,11 @@ void nvgpu_falcon_get_ctls(struct nvgpu_falcon *flcn, u32 *sctl, u32 *cpuctl) } } -int nvgpu_falcon_get_dmem_size(struct nvgpu_falcon *flcn, u32 *dmem_size) +int nvgpu_falcon_get_mem_size(struct nvgpu_falcon *flcn, + enum falcon_mem_type type, u32 *size) { struct nvgpu_falcon_ops *flcn_ops; + int err = -EINVAL; if (flcn == NULL) { return -EINVAL; @@ -669,13 +672,14 @@ int nvgpu_falcon_get_dmem_size(struct nvgpu_falcon *flcn, u32 *dmem_size) flcn_ops = &flcn->flcn_ops; if (flcn_ops->get_mem_size != NULL) { - *dmem_size = flcn_ops->get_mem_size(flcn, MEM_DMEM); + *size = flcn_ops->get_mem_size(flcn, type); + err = 0; } else { nvgpu_warn(flcn->g, "Invalid op on falcon 0x%x ", flcn->flcn_id); } - return 0; + return err; } struct gk20a *nvgpu_falcon_to_gk20a(struct nvgpu_falcon *flcn) diff --git a/drivers/gpu/nvgpu/common/falcon/falcon_priv.h b/drivers/gpu/nvgpu/common/falcon/falcon_priv.h index 2df365012..318ac0a0d 100644 --- a/drivers/gpu/nvgpu/common/falcon/falcon_priv.h +++ b/drivers/gpu/nvgpu/common/falcon/falcon_priv.h @@ -65,11 +65,6 @@ struct gk20a; struct nvgpu_falcon; struct nvgpu_falcon_bl_info; -enum falcon_mem_type { - MEM_DMEM = 0, - MEM_IMEM -}; - /* ops which are falcon engine specific */ struct nvgpu_falcon_engine_dependency_ops { int (*reset_eng)(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/common/pmu/pmu.c b/drivers/gpu/nvgpu/common/pmu/pmu.c index 7a179fb35..035d358c6 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu.c @@ -641,7 +641,7 @@ void nvgpu_pmu_get_cmd_line_args_offset(struct gk20a *g, u32 dmem_size = 0; int err = 0; - err = nvgpu_falcon_get_dmem_size(pmu->flcn, &dmem_size); + err = nvgpu_falcon_get_mem_size(pmu->flcn, MEM_DMEM, &dmem_size); if (err != 0) { nvgpu_err(g, "dmem size request failed"); *args_offset = 0; diff --git a/drivers/gpu/nvgpu/include/nvgpu/falcon.h b/drivers/gpu/nvgpu/include/nvgpu/falcon.h index b934b8cc3..db78f751c 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/falcon.h +++ b/drivers/gpu/nvgpu/include/nvgpu/falcon.h @@ -79,6 +79,11 @@ struct gk20a; struct nvgpu_falcon; +enum falcon_mem_type { + MEM_DMEM = 0, + MEM_IMEM +}; + struct nvgpu_falcon_bl_info { void *bl_src; u8 *bl_desc; @@ -117,7 +122,8 @@ void nvgpu_falcon_dump_stats(struct nvgpu_falcon *flcn); int nvgpu_falcon_bl_bootstrap(struct nvgpu_falcon *flcn, struct nvgpu_falcon_bl_info *bl_info); void nvgpu_falcon_get_ctls(struct nvgpu_falcon *flcn, u32 *sctl, u32 *cpuctl); -int nvgpu_falcon_get_dmem_size(struct nvgpu_falcon *flcn, u32 *dmem_size); +int nvgpu_falcon_get_mem_size(struct nvgpu_falcon *flcn, + enum falcon_mem_type type, u32 *size); struct gk20a *nvgpu_falcon_to_gk20a(struct nvgpu_falcon *flcn); u32 nvgpu_falcon_get_id(struct nvgpu_falcon *flcn);