diff options
Diffstat (limited to 'arch/arm/plat-s5p/reserve_mem.c')
-rw-r--r-- | arch/arm/plat-s5p/reserve_mem.c | 37 |
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); |