summaryrefslogtreecommitdiff
path: root/plat/nvidia/tegra/common/drivers/memctrl/memctrl.c
diff options
context:
space:
mode:
authorVarun Wadekar <vwadekar@nvidia.com>2015-08-26 15:06:14 +0530
committerVarun Wadekar <vwadekar@nvidia.com>2015-08-26 15:57:56 +0530
commitd49b9c80886b5d0873f90fe750e0ab292d532b99 (patch)
tree812e89fa96cc808cd106e9a4d3d87a4958791690 /plat/nvidia/tegra/common/drivers/memctrl/memctrl.c
parente04723e21362c322b7725662871153dadb9d3167 (diff)
Tegra: fix logic to clear videomem regions
The previous logic in the memctrl driver was not catering to cases where the new memory region lied inside the older region. This patch fixes the if/elseif/elseif logic in the driver to take care of this case. Reported by: Vikram Kanigiri <vikram.kanigiri@arm.com> Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'plat/nvidia/tegra/common/drivers/memctrl/memctrl.c')
-rw-r--r--plat/nvidia/tegra/common/drivers/memctrl/memctrl.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/plat/nvidia/tegra/common/drivers/memctrl/memctrl.c b/plat/nvidia/tegra/common/drivers/memctrl/memctrl.c
index fff89519..0d8e370f 100644
--- a/plat/nvidia/tegra/common/drivers/memctrl/memctrl.c
+++ b/plat/nvidia/tegra/common/drivers/memctrl/memctrl.c
@@ -118,6 +118,7 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
uintptr_t vmem_end_old = video_mem_base + (video_mem_size << 20);
uintptr_t vmem_end_new = phys_base + size_in_bytes;
uint32_t regval;
+ uint64_t size;
/*
* The GPU is the user of the Video Memory region. In order to
@@ -153,12 +154,18 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
INFO("Cleaning previous Video Memory Carveout\n");
disable_mmu_el3();
- if (phys_base > vmem_end_old || video_mem_base > vmem_end_new)
+ if (phys_base > vmem_end_old || video_mem_base > vmem_end_new) {
zeromem16((void *)video_mem_base, video_mem_size << 20);
- else if (video_mem_base < phys_base)
- zeromem16((void *)video_mem_base, phys_base - video_mem_base);
- else if (vmem_end_old > vmem_end_new)
- zeromem16((void *)vmem_end_new, vmem_end_old - vmem_end_new);
+ } else {
+ if (video_mem_base < phys_base) {
+ size = phys_base - video_mem_base;
+ zeromem16((void *)video_mem_base, size);
+ }
+ if (vmem_end_old > vmem_end_new) {
+ size = vmem_end_old - vmem_end_new;
+ zeromem16((void *)vmem_end_new, size);
+ }
+ }
enable_mmu_el3(0);
done: