diff --git a/drivers/gpu/nvgpu/common/falcon/falcon.c b/drivers/gpu/nvgpu/common/falcon/falcon.c index a0f88de30..b1d6558ac 100644 --- a/drivers/gpu/nvgpu/common/falcon/falcon.c +++ b/drivers/gpu/nvgpu/common/falcon/falcon.c @@ -219,6 +219,34 @@ bool nvgpu_flcn_get_idle_status(struct nvgpu_falcon *flcn) return status; } +int nvgpu_flcn_copy_from_emem(struct nvgpu_falcon *flcn, + u32 src, u8 *dst, u32 size, u8 port) +{ + struct nvgpu_falcon_engine_dependency_ops *flcn_dops = + &flcn->flcn_engine_dep_ops; + int status = -EINVAL; + + if (flcn_dops->copy_from_emem != NULL) { + status = flcn_dops->copy_from_emem(flcn, src, dst, size, port); + } + + return status; +} + +int nvgpu_flcn_copy_to_emem(struct nvgpu_falcon *flcn, + u32 dst, u8 *src, u32 size, u8 port) +{ + struct nvgpu_falcon_engine_dependency_ops *flcn_dops = + &flcn->flcn_engine_dep_ops; + int status = -EINVAL; + + if (flcn_dops->copy_to_emem != NULL) { + status = flcn_dops->copy_to_emem(flcn, dst, src, size, port); + } + + return status; +} + int nvgpu_flcn_copy_from_dmem(struct nvgpu_falcon *flcn, u32 src, u8 *dst, u32 size, u8 port) { diff --git a/drivers/gpu/nvgpu/include/nvgpu/falcon.h b/drivers/gpu/nvgpu/include/nvgpu/falcon.h index 9f8c97ea8..cf15061d3 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/falcon.h +++ b/drivers/gpu/nvgpu/include/nvgpu/falcon.h @@ -219,6 +219,10 @@ struct nvgpu_falcon_engine_dependency_ops { int (*queue_tail)(struct gk20a *g, struct nvgpu_falcon_queue *queue, u32 *tail, bool set); void (*msgq_tail)(struct gk20a *g, u32 *tail, bool set); + int (*copy_from_emem)(struct nvgpu_falcon *flcn, u32 src, u8 *dst, + u32 size, u8 port); + int (*copy_to_emem)(struct nvgpu_falcon *flcn, u32 dst, u8 *src, + u32 size, u8 port); }; struct nvgpu_falcon_ops { @@ -283,6 +287,10 @@ bool nvgpu_flcn_get_mem_scrubbing_status(struct nvgpu_falcon *flcn); int nvgpu_flcn_mem_scrub_wait(struct nvgpu_falcon *flcn); bool nvgpu_flcn_get_cpu_halted_status(struct nvgpu_falcon *flcn); bool nvgpu_flcn_get_idle_status(struct nvgpu_falcon *flcn); +int nvgpu_flcn_copy_from_emem(struct nvgpu_falcon *flcn, + u32 src, u8 *dst, u32 size, u8 port); +int nvgpu_flcn_copy_to_emem(struct nvgpu_falcon *flcn, + u32 dst, u8 *src, u32 size, u8 port); int nvgpu_flcn_copy_from_dmem(struct nvgpu_falcon *flcn, u32 src, u8 *dst, u32 size, u8 port); int nvgpu_flcn_copy_to_dmem(struct nvgpu_falcon *flcn,