aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-s5p/reserve_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/plat-s5p/reserve_mem.c')
-rw-r--r--arch/arm/plat-s5p/reserve_mem.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/arch/arm/plat-s5p/reserve_mem.c b/arch/arm/plat-s5p/reserve_mem.c
index 5b91823..a103ec9 100644
--- a/arch/arm/plat-s5p/reserve_mem.c
+++ b/arch/arm/plat-s5p/reserve_mem.c
@@ -155,14 +155,49 @@ void __init s5p_cma_region_reserve(struct cma_region *regions_normal,
}
if (paddr_last) {
+#ifndef CONFIG_DMA_CMA
while (memblock_reserve(paddr_last, size_secure))
paddr_last -= align_secure;
+#else
+ if (!reg->start) {
+ while (memblock_reserve(paddr_last,
+ size_secure))
+ paddr_last -= align_secure;
+ }
+#endif
do {
+#ifndef CONFIG_DMA_CMA
reg->start = paddr_last;
reg->reserved = 1;
paddr_last += reg->size;
-
+#else
+ if (reg->start) {
+ reg->reserved = 1;
+#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0)
+ if (reg->start == 0x5C100000) {
+ if (memblock_reserve(0x5C100000,
+ 0x700000))
+ panic("memblock\n");
+ if (memblock_reserve(0x5F000000,
+ 0x200000))
+ panic("memblock\n");
+ } else {
+ if (memblock_reserve(reg->start,
+ reg->size))
+ panic("memblock\n");
+ }
+#else
+ if (memblock_reserve(reg->start,
+ reg->size))
+ panic("memblock\n");
+#endif
+ } else {
+ reg->start = paddr_last;
+ reg->reserved = 1;
+ paddr_last += reg->size;
+ }
+#endif
pr_info("S5P/CMA: "
"Reserved 0x%08x/0x%08x for '%s'\n",
reg->start, reg->size, reg->name);