#include <linux/i2c.h>\r
#include <linux/spi/spi.h>\r
#include <linux/mmc/host.h>\r
+#include <linux/android_pmem.h>\r
\r
#include <mach/hardware.h>\r
+#include <asm/setup.h>\r
#include <asm/mach-types.h>\r
#include <asm/mach/arch.h>\r
#include <asm/mach/map.h>\r
\r
#include "devices.h"\r
\r
+/* Set memory size of pmem */\r
+#define SDRAM_SIZE SZ_128M\r
+#define PMEM_GPU_SIZE (12 * SZ_1M)\r
+#define PMEM_UI_SIZE SZ_16M\r
+#define PMEM_VPU_SIZE SZ_32M\r
+\r
+#define PMEM_GPU_BASE (RK29_SDRAM_PHYS + SDRAM_SIZE - PMEM_GPU_SIZE)\r
+#define PMEM_UI_BASE (PMEM_GPU_BASE - PMEM_UI_SIZE)\r
+#define PMEM_VPU_BASE (PMEM_UI_BASE - PMEM_VPU_SIZE)\r
+#define LINUX_SIZE (PMEM_VPU_BASE - RK29_SDRAM_PHYS)\r
+\r
extern struct sys_timer rk29_timer;\r
\r
int rk29_nand_io_init(void)\r
.io_init = rk29_fb_io_init,\r
};\r
\r
+static struct android_pmem_platform_data android_pmem_pdata = {\r
+ .name = "pmem",\r
+ .start = PMEM_UI_BASE,\r
+ .size = PMEM_UI_SIZE,\r
+ .no_allocator = 0,\r
+ .cached = 1,\r
+};\r
+\r
+static struct platform_device android_pmem_device = {\r
+ .name = "android_pmem",\r
+ .id = 0,\r
+ .dev = {\r
+ .platform_data = &android_pmem_pdata,\r
+ },\r
+};\r
+\r
+static struct android_pmem_platform_data android_pmem_gpu_pdata = {\r
+ .name = "pmem_gpu",\r
+ .start = PMEM_GPU_BASE,\r
+ .size = PMEM_GPU_SIZE,\r
+ .no_allocator = 0,\r
+ .cached = 0,\r
+};\r
+\r
+static struct platform_device android_pmem_gpu_device = {\r
+ .name = "android_pmem",\r
+ .id = 1,\r
+ .dev = {\r
+ .platform_data = &android_pmem_gpu_pdata,\r
+ },\r
+};\r
+\r
+static struct android_pmem_platform_data android_pmem_vpu_pdata = {\r
+ .name = "pmem_vpu",\r
+ .start = PMEM_VPU_BASE,\r
+ .size = PMEM_VPU_SIZE,\r
+ .no_allocator = 0,\r
+ .cached = 1,\r
+};\r
+\r
+static struct platform_device android_pmem_vpu_device = {\r
+ .name = "android_pmem",\r
+ .id = 2,\r
+ .dev = {\r
+ .platform_data = &android_pmem_vpu_pdata,\r
+ },\r
+};\r
\r
/*****************************************************************************************\r
* SDMMC devices\r
#endif\r
};\r
#endif\r
+\r
static void __init rk29_board_iomux_init(void)\r
{\r
#ifdef CONFIG_UART0_RK29 \r
}\r
\r
static struct platform_device *devices[] __initdata = {\r
-#ifdef CONFIG_UART1_RK29 \r
+#ifdef CONFIG_UART1_RK29\r
&rk29_device_uart1,\r
#endif \r
#ifdef CONFIG_SDMMC0_RK29 \r
#endif\r
\r
#ifdef CONFIG_FB_RK29\r
- &rk29_device_fb,\r
+ &rk29_device_fb,\r
#endif\r
-\r
#ifdef CONFIG_VIVANTE\r
&rk29_device_gpu,\r
#endif\r
-\r
+ &android_pmem_device,\r
+ &android_pmem_gpu_device,\r
+ &android_pmem_vpu_device,\r
};\r
\r
static void __init rk29_gic_init_irq(void)\r
rk29_gpio_init(rk29_gpiobankinit, MAX_BANK);\r
rk29_gpio_irq_setup();\r
}\r
+\r
static void __init machine_rk29_board_init(void)\r
{ \r
platform_add_devices(devices, ARRAY_SIZE(devices)); \r
rk29_board_iomux_init();\r
}\r
\r
+static void __init machine_rk29_fixup(struct machine_desc *desc, struct tag *tags,\r
+ char **cmdline, struct meminfo *mi)\r
+{\r
+ mi->nr_banks = 1;\r
+ mi->bank[0].start = RK29_SDRAM_PHYS;\r
+ mi->bank[0].node = PHYS_TO_NID(RK29_SDRAM_PHYS);\r
+ mi->bank[0].size = LINUX_SIZE;\r
+}\r
+\r
static void __init machine_rk29_mapio(void)\r
{\r
rk29_map_common_io();\r
}\r
\r
MACHINE_START(RK29, "RK29board")\r
-\r
-/* UART for LL DEBUG */\r
+ /* UART for LL DEBUG */\r
.phys_io = RK29_UART1_PHYS, \r
.io_pg_offst = ((RK29_UART1_BASE) >> 18) & 0xfffc,\r
.boot_params = RK29_SDRAM_PHYS + 0x88000,\r
+ .fixup = machine_rk29_fixup,\r
.map_io = machine_rk29_mapio,\r
.init_irq = machine_rk29_init_irq,\r
.init_machine = machine_rk29_board_init,\r