summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorb02247 <b02247@freescale.com>2012-12-18 16:14:46 +0800
committerTapani <tapani@vmail.me>2013-03-29 11:41:53 +0800
commitf95a5d97dbe9addbf3c5fc69a84e8dcca307e8ef (patch)
treefe4563d5732652a0c650b70a361d0747bb545e3a
parent8fbc236195e44624738803bbfd032017ca5b66df (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.c26
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,