summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanh-arm <dan.handley@arm.com>2015-09-01 12:31:30 +0100
committerdanh-arm <dan.handley@arm.com>2015-09-01 12:31:30 +0100
commitf81bdb6e76a19e719731ce430150c9261a184cc2 (patch)
tree812e89fa96cc808cd106e9a4d3d87a4958791690
parente04723e21362c322b7725662871153dadb9d3167 (diff)
parentd49b9c80886b5d0873f90fe750e0ab292d532b99 (diff)
Merge pull request #375 from vwadekar/clear-videomem-region-v2
Tegra: fix logic to clear videomem regions
-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: