summaryrefslogtreecommitdiff
path: root/arch/arm/mach-mx6/board-mx6q_arm2.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-mx6/board-mx6q_arm2.c')
-rw-r--r--arch/arm/mach-mx6/board-mx6q_arm2.c44
1 files changed, 41 insertions, 3 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_arm2.c b/arch/arm/mach-mx6/board-mx6q_arm2.c
index 1e42f4f2193a..d627324d77ab 100644
--- a/arch/arm/mach-mx6/board-mx6q_arm2.c
+++ b/arch/arm/mach-mx6/board-mx6q_arm2.c
@@ -45,6 +45,7 @@
#include <linux/fec.h>
#include <linux/memblock.h>
#include <linux/gpio.h>
+#include <linux/ion.h>
#include <linux/etherdevice.h>
#include <linux/regulator/anatop-regulator.h>
#include <linux/regulator/consumer.h>
@@ -1261,7 +1262,7 @@ static void __init mx6_arm2_init_usb(void)
}
static struct viv_gpu_platform_data imx6_gpu_pdata __initdata = {
- .reserved_mem_size = SZ_128M,
+ .reserved_mem_size = SZ_128M + SZ_64M,
};
/* HW Initialization, if return 0, initialization is successful. */
@@ -1509,6 +1510,17 @@ static struct platform_pwm_backlight_data mx6_arm2_pwm_backlight_data = {
.pwm_period_ns = 50000,
};
+static struct ion_platform_data imx_ion_data = {
+ .nr = 1,
+ .heaps = {
+ {
+ .type = ION_HEAP_TYPE_CARVEOUT,
+ .name = "vpu_ion",
+ .size = SZ_64M,
+ },
+ },
+};
+
static struct gpio mx6_flexcan_gpios[] = {
{ MX6_ARM2_CAN1_EN, GPIOF_OUT_INIT_LOW, "flexcan1-en" },
{ MX6_ARM2_CAN1_STBY, GPIOF_OUT_INIT_LOW, "flexcan1-stby" },
@@ -1932,6 +1944,21 @@ static struct mxc_dvfs_platform_data arm2_dvfscore_data = {
static void __init mx6_arm2_fixup(struct machine_desc *desc, struct tag *tags,
char **cmdline, struct meminfo *mi)
{
+ char *str;
+ struct tag *t;
+
+ for_each_tag(t, tags) {
+ if (t->hdr.tag == ATAG_CMDLINE) {
+ /* GPU reserved memory */
+ str = t->u.cmdline.cmdline;
+ str = strstr(str, "gpumem=");
+ if (str != NULL) {
+ str += 7;
+ imx6_gpu_pdata.reserved_mem_size = memparse(str, &str);
+ }
+ break;
+ }
+ }
}
static int __init early_enable_sgtl5000(char *p)
@@ -2220,6 +2247,9 @@ static void __init mx6_arm2_init(void)
imx6q_add_dvfs_core(&arm2_dvfscore_data);
+ imx6q_add_ion(0, &imx_ion_data,
+ sizeof(imx_ion_data) + sizeof(struct ion_platform_heap));
+
imx6q_add_mxc_pwm(0);
imx6q_add_mxc_pwm_backlight(0, &mx6_arm2_pwm_backlight_data);
@@ -2280,9 +2310,8 @@ static struct sys_timer mxc_timer = {
static void __init mx6_arm2_reserve(void)
{
-#if defined(CONFIG_MXC_GPU_VIV) || defined(CONFIG_MXC_GPU_VIV_MODULE)
phys_addr_t phys;
-
+#if defined(CONFIG_MXC_GPU_VIV) || defined(CONFIG_MXC_GPU_VIV_MODULE)
if (imx6_gpu_pdata.reserved_mem_size) {
phys = memblock_alloc_base(
imx6_gpu_pdata.reserved_mem_size, SZ_4K, SZ_2G);
@@ -2290,6 +2319,15 @@ static void __init mx6_arm2_reserve(void)
imx6_gpu_pdata.reserved_mem_base = phys;
}
#endif
+
+#if defined(CONFIG_ION)
+ if (imx_ion_data.heaps[0].size) {
+ phys = memblock_alloc(imx_ion_data.heaps[0].size, SZ_4K);
+ memblock_free(phys, imx_ion_data.heaps[0].size);
+ memblock_remove(phys, imx_ion_data.heaps[0].size);
+ imx_ion_data.heaps[0].base = phys;
+ }
+#endif
}
MACHINE_START(MX6Q_ARM2, "Freescale i.MX 6Quad/Solo/DualLite Armadillo2 Board")