diff options
author | Supriya <ssharatkumar@nvidia.com> | 2014-12-12 04:50:40 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:33 -0400 |
commit | 402bdd57e8d47c96d4b31079b3a5dbb169e8ac75 (patch) | |
tree | 9524488eca1383372453827868878b266e7b442f | |
parent | 0bc513fc4618feb5262079b4ef8842ba419d8111 (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>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 14 |
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; |