summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLakshmanan M <lm@nvidia.com>2016-09-13 11:45:56 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-10-25 14:14:49 -0400
commiteca45ed722cd9eaf73edf934e9e3611d0211fb24 (patch)
tree2c3703495c74ebe7e7647104a70ce61b3606c2d5 /drivers/gpu
parent78e93b7e9d4b21082bd0348288ac5a5389d2fc0f (diff)
gpu: nvgpu: Add proper memset size during cleanup
This CL covers the following small modifications, 1) Add proper memset size handling during pmu surface cleanup 2) Reset the pmu surface mem desc pointer after deallocate the memory JIRA DNVGPU-47 Change-Id: I400f8c4d3f5dc650d4fc6669cef6a1e41a70f4ab Signed-off-by: Lakshmanan M <lm@nvidia.com> Reviewed-on: http://git-master/r/1220100 (cherry picked from commit 1f171b977be51db20c2dfc56b3f6e3dd6b4b9095) Reviewed-on: http://git-master/r/1240881 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c17
2 files changed, 17 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 67cb5912..635dddc4 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -424,6 +424,8 @@ struct gpu_ops {
424 void *pmu_alloc_ptr, u32 offset); 424 void *pmu_alloc_ptr, u32 offset);
425 void * (*pmu_allocation_get_fb_addr)( 425 void * (*pmu_allocation_get_fb_addr)(
426 struct pmu_gk20a *pmu, void *pmu_alloc_ptr); 426 struct pmu_gk20a *pmu, void *pmu_alloc_ptr);
427 u32 (*pmu_allocation_get_fb_size)(
428 struct pmu_gk20a *pmu, void *pmu_alloc_ptr);
427 void (*get_pmu_init_msg_pmu_queue_params)( 429 void (*get_pmu_init_msg_pmu_queue_params)(
428 struct pmu_queue *queue, u32 id, 430 struct pmu_queue *queue, u32 id,
429 void *pmu_init_msg); 431 void *pmu_init_msg);
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index fc95b5bc..0a9a1fde 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -529,6 +529,14 @@ static void *pmu_allocation_get_fb_addr_v3(
529 return (void *)&pmu_a_ptr->alloc.fb; 529 return (void *)&pmu_a_ptr->alloc.fb;
530} 530}
531 531
532u32 pmu_allocation_get_fb_size_v3(
533 struct pmu_gk20a *pmu, void *pmu_alloc_ptr)
534{
535 struct pmu_allocation_v3 *pmu_a_ptr =
536 (struct pmu_allocation_v3 *)pmu_alloc_ptr;
537 return sizeof(pmu_a_ptr->alloc.fb);
538}
539
532static u32 *pmu_allocation_get_dmem_offset_addr_v2(struct pmu_gk20a *pmu, 540static u32 *pmu_allocation_get_dmem_offset_addr_v2(struct pmu_gk20a *pmu,
533 void *pmu_alloc_ptr) 541 void *pmu_alloc_ptr)
534{ 542{
@@ -1526,6 +1534,8 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu)
1526 pmu_allocation_set_dmem_offset_v3; 1534 pmu_allocation_set_dmem_offset_v3;
1527 g->ops.pmu_ver.pmu_allocation_get_fb_addr = 1535 g->ops.pmu_ver.pmu_allocation_get_fb_addr =
1528 pmu_allocation_get_fb_addr_v3; 1536 pmu_allocation_get_fb_addr_v3;
1537 g->ops.pmu_ver.pmu_allocation_get_fb_size =
1538 pmu_allocation_get_fb_size_v3;
1529 if(pmu->desc->app_version != APP_VERSION_NV_GPU && 1539 if(pmu->desc->app_version != APP_VERSION_NV_GPU &&
1530 pmu->desc->app_version != APP_VERSION_NV_GPU_1) { 1540 pmu->desc->app_version != APP_VERSION_NV_GPU_1) {
1531 g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params = 1541 g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params =
@@ -3792,7 +3802,8 @@ static int pmu_response_handle(struct pmu_gk20a *pmu,
3792 if (seq->out_mem != NULL) { 3802 if (seq->out_mem != NULL) {
3793 memset(pv->pmu_allocation_get_fb_addr(pmu, 3803 memset(pv->pmu_allocation_get_fb_addr(pmu,
3794 pv->get_pmu_seq_out_a_ptr(seq)), 0x0, 3804 pv->get_pmu_seq_out_a_ptr(seq)), 0x0,
3795 pv->get_pmu_allocation_struct_size(pmu)); 3805 pv->pmu_allocation_get_fb_size(pmu,
3806 pv->get_pmu_seq_out_a_ptr(seq)));
3796 3807
3797 gk20a_pmu_surface_free(g, seq->out_mem); 3808 gk20a_pmu_surface_free(g, seq->out_mem);
3798 if (seq->out_mem != seq->in_mem) 3809 if (seq->out_mem != seq->in_mem)
@@ -3804,10 +3815,12 @@ static int pmu_response_handle(struct pmu_gk20a *pmu,
3804 if (seq->in_mem != NULL) { 3815 if (seq->in_mem != NULL) {
3805 memset(pv->pmu_allocation_get_fb_addr(pmu, 3816 memset(pv->pmu_allocation_get_fb_addr(pmu,
3806 pv->get_pmu_seq_in_a_ptr(seq)), 0x0, 3817 pv->get_pmu_seq_in_a_ptr(seq)), 0x0,
3807 pv->get_pmu_allocation_struct_size(pmu)); 3818 pv->pmu_allocation_get_fb_size(pmu,
3819 pv->get_pmu_seq_in_a_ptr(seq)));
3808 3820
3809 gk20a_pmu_surface_free(g, seq->in_mem); 3821 gk20a_pmu_surface_free(g, seq->in_mem);
3810 kfree(seq->in_mem); 3822 kfree(seq->in_mem);
3823 seq->in_mem = NULL;
3811 } 3824 }
3812 3825
3813 if (seq->callback) 3826 if (seq->callback)