summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSupriya <ssharatkumar@nvidia.com>2014-12-12 04:50:40 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:12:33 -0400
commit402bdd57e8d47c96d4b31079b3a5dbb169e8ac75 (patch)
tree9524488eca1383372453827868878b266e7b442f /drivers
parent0bc513fc4618feb5262079b4ef8842ba419d8111 (diff)
gpu: nvgpu: Send aligned addresses to allocator
Bug 1587090 Bug 200050711 PMU dmem start address is unaligned. Allocator allocates aligned length amount of memory But address alloced is nto checked to be aligned, but free checks for alignment of addresses before free. For dmem case, frees never actually happened. This fix ensures addresses are aligned. Change-Id: I8b95f89940aa4d23355c3788dc95afb5c8867373 Signed-off-by: Supriya <ssharatkumar@nvidia.com> Reviewed-on: http://git-master/r/663140 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index e7199d35..7bcda89f 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -2706,10 +2706,16 @@ static int pmu_process_init_msg(struct pmu_gk20a *pmu,
2706 for (i = 0; i < PMU_QUEUE_COUNT; i++) 2706 for (i = 0; i < PMU_QUEUE_COUNT; i++)
2707 pmu_queue_init(pmu, i, init); 2707 pmu_queue_init(pmu, i, init);
2708 2708
2709 if (!pmu->dmem.alloc) 2709 if (!pmu->dmem.alloc) {
2710 gk20a_allocator_init(&pmu->dmem, "gk20a_pmu_dmem", 2710 /*Align start and end addresses*/
2711 pv->get_pmu_init_msg_pmu_sw_mg_off(init), 2711 u32 start = ALIGN(pv->get_pmu_init_msg_pmu_sw_mg_off(init),
2712 pv->get_pmu_init_msg_pmu_sw_mg_size(init)); 2712 PMU_DMEM_ALLOC_ALIGNMENT);
2713 u32 end = (pv->get_pmu_init_msg_pmu_sw_mg_off(init) +
2714 pv->get_pmu_init_msg_pmu_sw_mg_size(init)) &
2715 ~(PMU_DMEM_ALLOC_ALIGNMENT - 1);
2716 u32 size = end - start;
2717 gk20a_allocator_init(&pmu->dmem, "gk20a_pmu_dmem", start, size);
2718 }
2713 2719
2714 pmu->pmu_ready = true; 2720 pmu->pmu_ready = true;
2715 pmu->pmu_state = PMU_STATE_INIT_RECEIVED; 2721 pmu->pmu_state = PMU_STATE_INIT_RECEIVED;