From 402bdd57e8d47c96d4b31079b3a5dbb169e8ac75 Mon Sep 17 00:00:00 2001 From: Supriya Date: Fri, 12 Dec 2014 15:20:40 +0530 Subject: 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 Reviewed-on: http://git-master/r/663140 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a') 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, for (i = 0; i < PMU_QUEUE_COUNT; i++) pmu_queue_init(pmu, i, init); - if (!pmu->dmem.alloc) - gk20a_allocator_init(&pmu->dmem, "gk20a_pmu_dmem", - pv->get_pmu_init_msg_pmu_sw_mg_off(init), - pv->get_pmu_init_msg_pmu_sw_mg_size(init)); + if (!pmu->dmem.alloc) { + /*Align start and end addresses*/ + u32 start = ALIGN(pv->get_pmu_init_msg_pmu_sw_mg_off(init), + PMU_DMEM_ALLOC_ALIGNMENT); + u32 end = (pv->get_pmu_init_msg_pmu_sw_mg_off(init) + + pv->get_pmu_init_msg_pmu_sw_mg_size(init)) & + ~(PMU_DMEM_ALLOC_ALIGNMENT - 1); + u32 size = end - start; + gk20a_allocator_init(&pmu->dmem, "gk20a_pmu_dmem", start, size); + } pmu->pmu_ready = true; pmu->pmu_state = PMU_STATE_INIT_RECEIVED; -- cgit v1.2.2