summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
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)