summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
authorVijayakumar <vsubbu@nvidia.com>2016-08-19 09:18:06 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-09-19 02:34:21 -0400
commit4ae85fd8c9bc24cac0ab2da7401df1f4cfc7a143 (patch)
tree9654a73acb0519878918611bd57047e7b971f152 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
parent4894ebbda5bcf3f93a79cbce95dad1585996b19d (diff)
gpu: nvgpu: fix handling of return data in pmu messages
Irrespective generic MSG ptr, pick up data that PMU sends as response to commands JIRA DNVGPU-85 Change-Id: I97dd2abcd9e2a7ad7bfe1270f9905a5b69e196f3 Signed-off-by: Vijayakumar <vsubbu@nvidia.com> Reviewed-on: http://git-master/r/1205119 Reviewed-on: http://git-master/r/1205447 (cherry picked from commit b1130124157acb2cfb4d04a0dd6ee8c4c0c830e5) Reviewed-on: http://git-master/r/1222684 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index f64aa608..2540ab12 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -3748,21 +3748,24 @@ static int pmu_response_handle(struct pmu_gk20a *pmu,
3748 if (seq->msg) { 3748 if (seq->msg) {
3749 if (seq->msg->hdr.size >= msg->hdr.size) { 3749 if (seq->msg->hdr.size >= msg->hdr.size) {
3750 memcpy(seq->msg, msg, msg->hdr.size); 3750 memcpy(seq->msg, msg, msg->hdr.size);
3751 if (pv->pmu_allocation_get_dmem_size(pmu, 3751 } else {
3752 pv->get_pmu_seq_out_a_ptr(seq)) != 0) {
3753 pmu_copy_from_dmem(pmu,
3754 pv->pmu_allocation_get_dmem_offset(pmu,
3755 pv->get_pmu_seq_out_a_ptr(seq)),
3756 seq->out_payload,
3757 pv->pmu_allocation_get_dmem_size(pmu,
3758 pv->get_pmu_seq_out_a_ptr(seq)), 0);
3759 }
3760 } else {
3761 gk20a_err(dev_from_gk20a(g), 3752 gk20a_err(dev_from_gk20a(g),
3762 "sequence %d msg buffer too small", 3753 "sequence %d msg buffer too small",
3763 seq->id); 3754 seq->id);
3764 } 3755 }
3765 } 3756 }
3757 if (pv->pmu_allocation_get_dmem_size(pmu,
3758 pv->get_pmu_seq_out_a_ptr(seq)) != 0) {
3759 gk20a_err(dev_from_gk20a(g), "dmem offs %x size %x\n", pv->pmu_allocation_get_dmem_offset(pmu,pv->get_pmu_seq_out_a_ptr(seq)), pv->pmu_allocation_get_dmem_size(pmu,
3760pv->get_pmu_seq_out_a_ptr(seq)));
3761 gk20a_err(dev_from_gk20a(g), "copying to %p \n", seq->out_payload);
3762 pmu_copy_from_dmem(pmu,
3763 pv->pmu_allocation_get_dmem_offset(pmu,
3764 pv->get_pmu_seq_out_a_ptr(seq)),
3765 seq->out_payload,
3766 pv->pmu_allocation_get_dmem_size(pmu,
3767 pv->get_pmu_seq_out_a_ptr(seq)), 0);
3768 }
3766 } else 3769 } else
3767 seq->callback = NULL; 3770 seq->callback = NULL;
3768 if (pv->pmu_allocation_get_dmem_size(pmu, 3771 if (pv->pmu_allocation_get_dmem_size(pmu,
@@ -4584,6 +4587,7 @@ int gk20a_pmu_cmd_post(struct gk20a *g, struct pmu_cmd *cmd,
4584 4587
4585 4588
4586 seq->state = PMU_SEQ_STATE_USED; 4589 seq->state = PMU_SEQ_STATE_USED;
4590
4587 err = pmu_write_cmd(pmu, cmd, queue_id, timeout); 4591 err = pmu_write_cmd(pmu, cmd, queue_id, timeout);
4588 if (err) 4592 if (err)
4589 seq->state = PMU_SEQ_STATE_PENDING; 4593 seq->state = PMU_SEQ_STATE_PENDING;