diff options
author | b02247 <b02247@freescale.com> | 2012-12-18 16:14:46 +0800 |
---|---|---|
committer | Tapani <tapani@vmail.me> | 2013-03-29 11:41:53 +0800 |
commit | f95a5d97dbe9addbf3c5fc69a84e8dcca307e8ef (patch) | |
tree | fe4563d5732652a0c650b70a361d0747bb545e3a | |
parent | 8fbc236195e44624738803bbfd032017ca5b66df (diff) |
ENGR00235540-1 reserve mem for framebuffer in sabreauto
reserve mem according the fbmem value
Signed-off-by: b02247 <b02247@freescale.com>
-rw-r--r-- | arch/arm/mach-mx6/board-mx6q_sabreauto.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_sabreauto.c b/arch/arm/mach-mx6/board-mx6q_sabreauto.c index 1fb47b091b3b..fd99bcdc9442 100644 --- a/arch/arm/mach-mx6/board-mx6q_sabreauto.c +++ b/arch/arm/mach-mx6/board-mx6q_sabreauto.c @@ -1727,6 +1727,32 @@ static struct sys_timer mxc_timer = { static void __init mx6q_reserve(void) { phys_addr_t phys; + int i, fb0_reserved = 0, fb_array_size; + + /* + * Reserve primary framebuffer memory if its base address + * is set by kernel command line. + */ + fb_array_size = ARRAY_SIZE(sabr_fb_data); + if (fb_array_size > 0 && sabr_fb_data[0].res_base[0] && + sabr_fb_data[0].res_size[0]) { + memblock_reserve(sabr_fb_data[0].res_base[0], + sabr_fb_data[0].res_size[0]); + memblock_remove(sabr_fb_data[0].res_base[0], + sabr_fb_data[0].res_size[0]); + sabr_fb_data[0].late_init = true; + ipu_data[ldb_data.ipu_id].bypass_reset = true; + fb0_reserved = 1; + } + for (i = fb0_reserved; i < fb_array_size; i++) + if (sabr_fb_data[i].res_size[0]) { + /* Reserve for other background buffer. */ + phys = memblock_alloc(sabr_fb_data[i].res_size[0], + SZ_4K); + memblock_remove(phys, sabr_fb_data[i].res_size[0]); + sabr_fb_data[i].res_base[0] = phys; + } + #if defined(CONFIG_MXC_GPU_VIV) || defined(CONFIG_MXC_GPU_VIV_MODULE) if (imx6q_gpu_pdata.reserved_mem_size) { phys = memblock_alloc_base(imx6q_gpu_pdata.reserved_mem_size, |