rk29sdk: add pmem devices
author黄涛 <huangtao@rock-chips.com>
Tue, 9 Nov 2010 12:29:12 +0000 (20:29 +0800)
committer黄涛 <huangtao@rock-chips.com>
Tue, 9 Nov 2010 12:29:12 +0000 (20:29 +0800)
arch/arm/configs/rk29_sdk_defconfig
arch/arm/mach-rk29/board-rk29sdk.c

index b6b6d5269af69fbd369909b997995359a215616e..c34b9aafcc78c16f291c17c0899c9e3559bb6e2d 100644 (file)
@@ -196,6 +196,11 @@ CONFIG_MMU=y
 CONFIG_ARCH_RK29=y
 CONFIG_MACH_RK29SDK=y
 
+#
+# RK29 VPU (Video Processing Unit) support
+#
+# CONFIG_RK29_VPU is not set
+
 #
 # Processor Type
 #
@@ -217,7 +222,7 @@ CONFIG_CPU_CP15_MMU=y
 # Processor Features
 #
 CONFIG_ARM_THUMB=y
-# CONFIG_ARM_THUMBEE is not set
+CONFIG_ARM_THUMBEE=y
 # CONFIG_CPU_ICACHE_DISABLE is not set
 # CONFIG_CPU_DCACHE_DISABLE is not set
 # CONFIG_CPU_BPREDICT_DISABLE is not set
@@ -513,7 +518,7 @@ CONFIG_BLK_DEV_LOOP=y
 # CONFIG_ATA_OVER_ETH is not set
 # CONFIG_MG_DISK is not set
 CONFIG_MISC_DEVICES=y
-# CONFIG_ANDROID_PMEM is not set
+CONFIG_ANDROID_PMEM=y
 # CONFIG_ENCLOSURE_SERVICES is not set
 # CONFIG_KERNEL_DEBUGGER_CORE is not set
 # CONFIG_UID_STAT is not set
@@ -1038,7 +1043,7 @@ CONFIG_DEBUG_ERRORS=y
 #
 # CONFIG_KEYS is not set
 # CONFIG_SECURITY is not set
-CONFIG_SECURITYFS=y
+# CONFIG_SECURITYFS is not set
 # CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
 
index afabec683d58fdc9f566c1626a67ddde782c827f..5183139842017d2094268aa957affe2191a4e750 100755 (executable)
 #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
@@ -287,6 +300,53 @@ struct rk29fb_info rk29_fb_info = {
     .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
@@ -347,6 +407,7 @@ struct rk29_sdmmc_platform_data default_sdmmc1_data = {
 #endif\r
 };\r
 #endif\r
+\r
 static void __init rk29_board_iomux_init(void)\r
 {\r
        #ifdef CONFIG_UART0_RK29        \r
@@ -380,7 +441,7 @@ static void __init rk29_board_iomux_init(void)
 }\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
@@ -394,13 +455,14 @@ static struct platform_device *devices[] __initdata = {
 #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
@@ -415,12 +477,22 @@ static void __init machine_rk29_init_irq(void)
        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
@@ -429,11 +501,11 @@ static void __init machine_rk29_mapio(void)
 }\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