add rknand
authorzhaoyifeng <zyf@ubuntu-fs.(none)>
Tue, 7 Dec 2010 08:13:40 +0000 (16:13 +0800)
committerzhaoyifeng <zyf@ubuntu-fs.(none)>
Tue, 7 Dec 2010 08:14:02 +0000 (16:14 +0800)
15 files changed:
arch/arm/mach-rk29/board-rk29sdk.c [changed mode: 0644->0755]
arch/arm/mach-rk29/devices.c
arch/arm/mach-rk29/devices.h
drivers/mtd/Kconfig
drivers/mtd/Makefile
drivers/mtd/rknand/Kconfig [new file with mode: 0755]
drivers/mtd/rknand/Makefile [new file with mode: 0755]
drivers/mtd/rknand/api_flash.h [new file with mode: 0755]
drivers/mtd/rknand/epphal.h [new file with mode: 0755]
drivers/mtd/rknand/flash.uu [new file with mode: 0755]
drivers/mtd/rknand/ftl.uu [new file with mode: 0755]
drivers/mtd/rknand/nand_config.h [new file with mode: 0755]
drivers/mtd/rknand/rknand_base.c [new file with mode: 0755]
drivers/mtd/rknand/typedef.h [new file with mode: 0755]
mkkrnlimg [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index 1727382..262e10d
@@ -906,6 +906,11 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_SDMMC1_RK29\r
        &rk29_device_sdmmc1,\r
 #endif\r
+\r
+#ifdef CONFIG_MTD_NAND_RK29XX\r
+       &rk29xx_device_nand,\r
+#endif\r
+\r
 #ifdef CONFIG_MTD_NAND_RK29\r
        &rk29_device_nand,\r
 #endif\r
index 14ab983243347e7983351ab76a5df47258fe7025..6fe13e75d3a338ee245448faaf072aad90230df9 100644 (file)
@@ -434,6 +434,29 @@ struct platform_device rk29_device_fb = {
        }
 };
 #endif
+
+#if defined(CONFIG_MTD_NAND_RK29XX)  
+static struct resource rk29xxnand_resources[] = {
+       {
+               .start  = RK29_NANDC_PHYS,
+               .end    =       RK29_NANDC_PHYS+RK29_NANDC_SIZE -1,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
+struct platform_device rk29xx_device_nand = {
+       .name   = "rk29xxnand", 
+       .id             =  -1, 
+       .resource       = rk29xxnand_resources,
+       .num_resources= ARRAY_SIZE(rk29xxnand_resources),
+       .dev    = {
+               .platform_data= &rk29_nand_data,
+       },
+       
+};
+#endif
+
+
 #if defined(CONFIG_MTD_NAND_RK29)  
 static struct resource nand_resources[] = {
        {
index 41e15afdeec244612f1e4d33f2ba59953ebf2414..6becc8ecb8fbb51a433e09192a0b135fd8a13c81 100755 (executable)
@@ -41,6 +41,7 @@ extern struct rk29xx_spi_platform_data rk29xx_spi0_platdata;
 extern struct rk29xx_spi_platform_data rk29xx_spi1_platdata;
 extern struct platform_device rk29_device_fb;
 extern struct platform_device rk29_device_nand;
+extern struct platform_device rk29xx_device_nand;
 extern struct rk29_sdmmc_platform_data default_sdmmc0_data;
 extern struct rk29_sdmmc_platform_data default_sdmmc1_data;
 extern struct platform_device rk29_device_sdmmc0;
index ecf90f5c97c2bce84983d2567dc7933c8bb060c4..8bc9f6f4b43014790e85294c66e8e9e839dfb859 100644 (file)
@@ -323,6 +323,8 @@ source "drivers/mtd/devices/Kconfig"
 
 source "drivers/mtd/nand/Kconfig"
 
+source "drivers/mtd/rknand/Kconfig"
+
 source "drivers/mtd/onenand/Kconfig"
 
 source "drivers/mtd/lpddr/Kconfig"
index 82d1e4de475bba283870d8a590416f9fc55161a8..1414402b17e6e8139cbf1dfeaf8620c0343d2472 100644 (file)
@@ -29,6 +29,6 @@ obj-$(CONFIG_MTD_OOPS)                += mtdoops.o
 nftl-objs              := nftlcore.o nftlmount.o
 inftl-objs             := inftlcore.o inftlmount.o
 
-obj-y          += chips/ lpddr/ maps/ devices/ nand/ onenand/ tests/
+obj-y          += chips/ lpddr/ maps/ devices/ nand/ onenand/ tests/  rknand/
 
 obj-$(CONFIG_MTD_UBI)          += ubi/
diff --git a/drivers/mtd/rknand/Kconfig b/drivers/mtd/rknand/Kconfig
new file mode 100755 (executable)
index 0000000..b373b06
--- /dev/null
@@ -0,0 +1,41 @@
+# \r
+# linux/drivers/mtd/rknand/Kconfig \r
+# \r
\r
+config MTD_RKNAND \r
+       tristate "RK NAND Device Support" \r
+       depends on MTD \r
+       select MTD_RK_NAND_IDS \r
+       help \r
+         RK NAND Device Support \r
+if MTD_RKNAND \r
\r
+config MTD_NAND_RK29XX \r
+       tristate "RK29 on-chip NAND Flash Controller driver with FTL" \r
+       depends on MTD_RKNAND \r
+    default y \r
+       help \r
+         This enables the RK28xx on-chip NAND flash controller and NFTL driver. \r
\r
+config RKFTL_PAGECACHE_SIZE \r
+       int "config page remap mtd part size(MB),MAX is 128MB,this mtd part will mount in /data/data" \r
+       depends on MTD_RKNAND \r
+       default "64" \r
+       help \r
+         default size is 64MB,and "swap" size is (128 - 64)MB.if you config this size up to 128MB,then "swap" funtion will disable. \r
\r
+config MTD_NAND_RK29XX_DEBUG \r
+       tristate "RK29 Nand driver debug enables" \r
+       depends on MTD_RKNAND \r
+    default n \r
+       help \r
+        \r
+config MTD_NAND_RK29XX_DEBUG_VERBOSE \r
+       int "Debugging verbosity (0 = quiet, 3 = noisy)" \r
+       depends on MTD_NAND_RK29XX_DEBUG \r
+       default "0" \r
+       help \r
+         Determines the verbosity level of the MTD NAND debugging messages. \r
+          \r
+endif # MTD_RKNAND \r
\r
diff --git a/drivers/mtd/rknand/Makefile b/drivers/mtd/rknand/Makefile
new file mode 100755 (executable)
index 0000000..26555f1
--- /dev/null
@@ -0,0 +1,13 @@
+#\r
+# linux/drivers/nand/Makefile\r
+#\r
+# $Id: Makefile,v 1.2.4.1 2010/07/14 02:28:12 Administrator Exp $\r
+#\r
+obj-$(CONFIG_MTD_NAND_RK29XX)          += flash.o\r
+obj-$(CONFIG_MTD_NAND_RK29XX)          += ftl.o\r
+obj-$(CONFIG_MTD_NAND_RK29XX)          += rknand_base.o\r
+#obj-$(CONFIG_MTD_UBI)         += ubi/\r
+$(obj)/flash.o: $(obj)/flash.uu\r
+       uudecode $(obj)/flash.uu -o $(obj)/flash.o\r
+$(obj)/ftl.o: $(obj)/ftl.uu\r
+       uudecode $(obj)/ftl.uu -o $(obj)/ftl.o\r
diff --git a/drivers/mtd/rknand/api_flash.h b/drivers/mtd/rknand/api_flash.h
new file mode 100755 (executable)
index 0000000..a399468
--- /dev/null
@@ -0,0 +1,191 @@
+/********************************************************************************\r
+*********************************************************************************\r
+                       COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU\r
+                               --  ALL RIGHTS RESERVED  --\r
+\r
+File Name:  api_flash.h\r
+Author:     XUESHAN LIN\r
+Created:    1st Dec 2008\r
+Modified:\r
+Revision:   1.00\r
+Modify log:\r
+            1.01    Ôö¼ÓFtlClose½Ó¿Úº¯Êý    2009.10.15  lxs\r
+********************************************************************************\r
+********************************************************************************/\r
+#ifndef _API_FLASH_H\r
+#define _API_FLASH_H\r
+\r
+//1º¯ÊýÔ­ÐÍÉùÃ÷\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:FTLºÍFLASH³õʼ»¯\r
+Èë¿Ú²ÎÊý:ÎÞ\r
+³ö¿Ú²ÎÊý:\r
+        0=Õý³£·µ»Ø \r
+        1=Ó³Éä±í³ö´í, ±»Ç¿ÖƵ͸ñ\r
+        2=flash³õʼ»¯Ê§°Ü,¿ÉÄÜÊÇÓ²¼þ´íÎó»òÒª½øÐй̼þÉý¼¶\r
+        ÆäËüÖµ:ÄÚ²¿´íÎó, ¸ÃÇý¶¯²»¿ÉʹÓÃ\r
+˵    Ã÷:ÉϵçÖ»Ðèµ÷ÓÃÒ»´Î³õʼ»¯¼´¿É\r
+***************************************************************************/\r
+extern int FtlInit(unsigned int nandcBaseAddr,unsigned char pageRemapEn);\r
+extern int FTLInit(void);\r
+\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:»ñÈ¡FLASH´ÅÅÌÈÝÁ¿\r
+Èë¿Ú²ÎÊý:\r
+        DISK_NAND_CODE:¹Ì¼þÅÌ\r
+        DISK_NAND_DATA:ϵͳ²ÎÊýÅÌ\r
+        DISK_NAND_USER:Óû§ÅÌ\r
+³ö¿Ú²ÎÊý:´ÅÅÌ×ÜÉÈÇøÊý\r
+˵    Ã÷:\r
+***************************************************************************/\r
+extern unsigned int FtlGetCapacity(unsigned char LUN);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:¶ÁÉÈÇø½Ó¿Ú\r
+Èë¿Ú²ÎÊý:LUN=Âß¼­·ÖÇøºÅ, Index=ÆðʼÉÈÇøµØÖ·, buf=Êý¾Ý»º³åÇø, nSec=ÉÈÇøÊý\r
+³ö¿Ú²ÎÊý:0=¶ÁÈ¡ÕýÈ·; ·Ç0=¶ÁÈ¡³ö´í, Êý¾Ý²»¿ÉÓÃ\r
+µ÷Óú¯Êý:\r
+˵    Ã÷:\r
+***************************************************************************/\r
+extern int FtlRead(unsigned char LUN, unsigned int Index, unsigned int nSec, void *buf);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:дÉÈÇø½Ó¿Ú\r
+Èë¿Ú²ÎÊý:LUN=Âß¼­·ÖÇøºÅ, Index=ÆðʼÉÈÇøµØÖ·, buf=Êý¾Ý»º³åÇø, nSec=ÉÈÇøÊý\r
+³ö¿Ú²ÎÊý:0=ÕýȷдÈë; ·Ç0=д²Ù×÷ʧ°Ü, Êý¾ÝûÓб»ÕýȷдÈë\r
+µ÷Óú¯Êý:\r
+˵    Ã÷:\r
+***************************************************************************/\r
+extern int FtlWrite(unsigned char LUN, unsigned int Index, unsigned int nSec, void *buf);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:MLC FLASHÊý¾ÝË¢ÐÂ\r
+Èë¿Ú²ÎÊý:\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+˵    Ã÷:ÔÚϵͳIDLE/ÔڱȽϼ¯ÖжÁÊý¾Ýʱ(ÈçA-B²¥·Å¡¢Æµ·±¶Á×ÊÔ´µÈ)µ÷Óøú¯Êý, \r
+                                Äܼ°Ê±ÐÞÕý±»Æµ·±¼¯ÖжÁ»µµÄÊý¾Ý,º¯ÊýÖ´ÐÐʱ¼ä¿ÉÄܽϳ¤(¼¸°ÙmsÉõÖÁ¼¸s)\r
+***************************************************************************/\r
+extern void    FlashRefreshHook(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:AHBÖ÷Ƶ¸üÐÂʱÐèÒªµ÷Óô˽ӿÚÀ´ÅäÖÃFLASHʱÐò\r
+Èë¿Ú²ÎÊý:AHBnKHz=Ö÷Ƶ(AHB)\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void    FlashTimingCfg(unsigned int AHBnKHz);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:FTL ¹Ø±Õ£¬¹Ø»úʱµ÷ÓÃ\r
+Èë¿Ú²ÎÊý:ÎÞ\r
+³ö¿Ú²ÎÊý:ÎÞ\r
+˵    Ã÷:¹Ø»úʱ£¬ÔÚËùÓÐдÎļþ²Ù×÷½áÊøºóµ÷ÓÃ\r
+***************************************************************************/\r
+extern void  FtlClose(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:FTL ¶¨Ê±»Øµ÷º¯Êý£¬ÏµÍ³1S×óÓÒµ÷ÓÃÒ»´Î\r
+Èë¿Ú²ÎÊý:ÎÞ\r
+³ö¿Ú²ÎÊý:ÎÞ\r
+˵    Ã÷:FTLÖÐһЩCACHEÔÚ¶¨Ê±ÖлØдflash\r
+***************************************************************************/\r
+extern void  FtlTimeHook(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:»ñÈ¡ flash page ´óС£¬ÒÔ±ãÍâÃ濪»º³å,\r
+Èë¿Ú²ÎÊý:ÎÞ\r
+³ö¿Ú²ÎÊý:page´óС£¬sectorµ¥Î»\r
+µ÷Óú¯Êý:\r
+˵Ã÷: ÐèÒªÔÚFTLInitºó²Å¿ÉÓÃ\r
+***************************************************************************/\r
+extern int   FlashGetPageSize(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:AHBÖ÷Ƶ¸üÐÂʱÐèÒªµ÷Óô˽ӿÚÀ´ÅäÖÃFLASHʱÐò\r
+Èë¿Ú²ÎÊý:AHBnMHz=Ö÷Ƶ(AHB)\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void    FlashTimingCfg(unsigned int AHBnKHz);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:ϵͳÅÌд²»ÔÊÐí\r
+Èë¿Ú²ÎÊý:\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void FtlFlashSysProtSetOn(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:ϵͳÅÌдÔÊÐí\r
+Èë¿Ú²ÎÊý:\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void FtlFlashSysProtSetOff(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:²Á³ýϵͳÅÌ£¬Éý¼¶Ê±Ê¹ÓÃ\r
+Èë¿Ú²ÎÊý:\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void FtlLowFormatSysDisk(void);\r
+\r
+extern int FtlWriteImage(unsigned int Index, unsigned int nSec, void *buf);\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:½«ËùÓлº´æµÄcache Ð´µ½cache ¿é\r
+Èë¿Ú²ÎÊý:\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+extern void    FtlCacheDelayWriteALL(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:ÉèÖôÅÅÌд±£»¤µØÖ·£¬\r
+Èë¿Ú²ÎÊý:LBAµØÖ·£¬Ð¡ÓÚLBAµÄµØַд±£»¤\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+void FtlSetSysProtAddr(int LBA);\r
+\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:»ñÈ¡FLASH´ÅÅÌÈÝÁ¿\r
+Èë¿Ú²ÎÊý:ÅÌ·û\r
+³ö¿Ú²ÎÊý:ÈÝÁ¿,ÒÔÉÈÇøΪµ¥Î»\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+int FtlGetPageZoneCapacity(void);\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:¶Á¶àÉÈÇø\r
+Èë¿Ú²ÎÊý:Index=ÉÈÇøºÅ, nSec=ÉÈÇøÊý\r
+³ö¿Ú²ÎÊý:¶Áµ½µÄÊý¾ÝÔÚ»º³åÇøbufÖÐ\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+int FtlPageWrite(int Index, int nSec, void *buf);\r
+\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:¶Á¶àÉÈÇø\r
+Èë¿Ú²ÎÊý:Index=ÉÈÇøºÅ, nSec=ÉÈÇøÊý\r
+³ö¿Ú²ÎÊý:¶Áµ½µÄÊý¾ÝÔÚ»º³åÇøbufÖÐ\r
+µ÷Óú¯Êý:\r
+***************************************************************************/\r
+int FtlPageRead(int Index, int nSec, void *buf);\r
+\r
+\r
+/***************************************************************************\r
+º¯ÊýÃèÊö:¶ÁÈ¡ SN sectorÐÅÏ¢\r
+Èë¿Ú²ÎÊý:pbuf\r
+³ö¿Ú²ÎÊý:\r
+µ÷Óú¯Êý:\r
+×¢ÒâÐÅÏ¢£ºÐèÒªÔÚFTLInitºó²ÅÄܵ÷Óã¬pbuf´óСÐèÒª´óÓÚµÈÓÚ512 bytes£¬·µ»ØÐÅϢΪ512\r
+          bytes¡£\r
+***************************************************************************/\r
+char GetSNSectorInfo(char * pbuf);\r
+\r
+#endif\r
diff --git a/drivers/mtd/rknand/epphal.h b/drivers/mtd/rknand/epphal.h
new file mode 100755 (executable)
index 0000000..1ad8f3b
--- /dev/null
@@ -0,0 +1,165 @@
+/********************************************************************************\r
+*********************************************************************************\r
+                       COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU\r
+                               --  ALL RIGHTS RESERVED  --\r
+\r
+File Name:         epphal.h\r
+Author:                    XUESHAN LIN\r
+Created:        1st Dec 2008\r
+Modified:\r
+Revision:              1.00\r
+********************************************************************************\r
+********************************************************************************/\r
+#ifndef _EPPHAL_H\r
+#define _EPPHAL_H\r
+    #define     read_XDATA32(address)           (*((uint32 volatile*)(address)))\r
+    #define     write_XDATA32(address, value)   (*((uint32 volatile*)(address)) = value)\r
+\r
+    #define     USB_OTG_INT_CH                  (1<<8)\r
+\r
+//1¼Ä´æÆ÷½á¹¹¶¨Òå\r
+#ifndef DRIVERS_INTC\r
+    //INTC Registers\r
+    typedef volatile struct tagINTC_STRUCT \r
+    {\r
+        uint32 IRQ_INTEN_L; \r
+        uint32 IRQ_INTEN_H;\r
+        uint32 IRQ_INTMASK_L;\r
+        uint32 IRQ_INTMASK_H; \r
+        uint32 IRQ_INTFORCE_L; \r
+        uint32 IRQ_INTFORCE_H; \r
+        uint32 IRQ_RAWSTATUS_L; \r
+        uint32 IRQ_RAWSTATUS_H; \r
+        uint32 IRQ_STATUS_L; \r
+        uint32 IRQ_STATUS_H; \r
+        uint32 IRQ_MASKSTATUS_L; \r
+        uint32 IRQ_MASKSTATUS_H; \r
+        uint32 IRQ_FINALSTATUS_L; \r
+        uint32 IRQ_FINALSTATUS_H; \r
+        uint32 RESERVED1[(0xc0-0x38)/4];\r
+        uint32 FIQ_INTEN; \r
+        uint32 FIQ_INTMASK; \r
+        uint32 FIQ_INTFORCE;\r
+        uint32 FIQ_RAWSTATUS; \r
+        uint32 FIQ_STATUS;\r
+        uint32 FIQ_FINALSTATUS;\r
+        uint32 IRQ_PLEVEL;\r
+        uint32 RESERVED2[(0xe8-0xdc)/4];\r
+        uint32 IRQ_PN_OFFSET[40];\r
+        uint32 RESERVED3[(0x3f8-0x188)/4]; \r
+        uint32 AHB_ICTL_COMP_VERSION;\r
+        uint32 ICTL_COMP_TYPE;\r
+    } INTC_REG, *pINTC_REG;\r
+\r
+    //SCU Registers\r
+    typedef volatile struct tagSCU_STRUCT \r
+    {\r
+        uint32 SCU_APLL_CON; \r
+        uint32 SCU_DPLL_CON;\r
+        uint32 SCU_CPLL_CON;\r
+        uint32 SCU_MODE_CON; \r
+        uint32 SCU_PMU_CON; \r
+        uint32 SCU_CLKSEL0_CON; \r
+        uint32 SCU_CLESEL1_CON; \r
+        uint32 SCU_CLKGATE0_CON; \r
+        uint32 SCU_CLKGATE1_CON; \r
+        uint32 SCU_CLKGATE2_CON; \r
+        uint32 SCU_SOFTRST_CON; \r
+        uint32 SCU_CHIPCFG_CON; \r
+        uint32 SCU_CPUPD; \r
+    } SCU_REG, *pSCU_REG;\r
+\r
+    //REG FILE registers\r
+    typedef volatile struct tagREG_FILE\r
+    {\r
+        uint32 CPU_APB_REG0; \r
+        uint32 CPU_APB_REG1;\r
+        uint32 CPU_APB_REG2;\r
+        uint32 CPU_APB_REG3; \r
+        uint32 CPU_APB_REG4; \r
+        uint32 CPU_APB_REG5; \r
+        uint32 CPU_APB_REG6; \r
+        uint32 CPU_APB_REG7; \r
+        uint32 IOMUX_A_CON; \r
+        uint32 IOMUX_B_CON; \r
+        uint32 GPIO0_AB_PU_CON; \r
+        uint32 GPIO0_CD_PU_CON; \r
+        uint32 GPIO1_AB_PU_CON; \r
+        uint32 GPIO1_CD_PU_CON; \r
+        uint32 OTGPHY_CON0; \r
+        uint32 OTGPHY_CON1; \r
+    } REG_FILE, *pREG_FILE;\r
+\r
+    /********************************************************************\r
+    **                          ½á¹¹¶¨Òå                                *\r
+    ********************************************************************/\r
+    //GRF Registers\r
+    typedef volatile struct tagGRF_REG\r
+    {\r
+        uint32  CPU_APB_REG0;\r
+        uint32  CPU_APB_REG1;\r
+        uint32  CPU_APB_REG2;\r
+        uint32  CPU_APB_REG3;\r
+        uint32  CPU_APB_REG4;\r
+        uint32  CPU_APB_REG5;\r
+        uint32  CPU_APB_REG6;\r
+        uint32  CPU_APB_REG7;\r
+        uint32  IOMUX_A_CON;\r
+        uint32  IOMUX_B_CON;\r
+        uint32  GPIO0_AB_PU_CON;\r
+        uint32  GPIO0_CD_PU_CON;\r
+        uint32  GPIO1_AB_PU_CON;\r
+        uint32  GPIO1_CD_PU_CON;\r
+        uint32  OTGPHY_CON0;\r
+        uint32  OTGPHY_CON1;\r
+    }GRF_REG, *pGRF_REG,*pAPB_REG;\r
+\r
+    //GPIO Registers\r
+    typedef volatile struct tagGPIO_STRUCT\r
+    {\r
+        uint32 GPIO_SWPORTA_DR;\r
+        uint32 GPIO_SWPORTA_DDR;\r
+        uint32 RESERVED1;\r
+        uint32 GPIO_SWPORTB_DR;\r
+        uint32 GPIO_SWPORTB_DDR;\r
+        uint32 RESERVED2;\r
+        uint32 GPIO_SWPORTC_DR;\r
+        uint32 GPIO_SWPORTC_DDR;\r
+        uint32 RESERVED3;\r
+        uint32 GPIO_SWPORTD_DR;\r
+        uint32 GPIO_SWPORTD_DDR;\r
+        uint32 RESERVED4;\r
+        uint32 GPIO_INTEN;\r
+        uint32 GPIO_INTMASK;\r
+        uint32 GPIO_INTTYPE_LEVEL;\r
+        uint32 GPIO_INT_POLARITY;\r
+        uint32 GPIO_INT_STATUS;\r
+        uint32 GPIO_INT_RAWSTATUS;\r
+        uint32 GPIO_DEBOUNCE;\r
+        uint32 GPIO_PORTS_EOI;\r
+        uint32 GPIO_EXT_PORTA;\r
+        uint32 GPIO_EXT_PORTB;\r
+        uint32 GPIO_EXT_PORTC;\r
+        uint32 GPIO_EXT_PORTD;\r
+        uint32 GPIO_LS_SYNC;\r
+    }GPIO_REG,*pGPIO_REG;\r
+    \r
+#endif\r
+\r
+//1È«¾Ö±äÁ¿\r
+#undef EXT\r
+#ifdef IN_EPPHAL\r
+               #define EXT\r
+#else\r
+               #define EXT             extern\r
+#endif         \r
+\r
+//1º¯ÊýÔ­ÐÍÉùÃ÷\r
+\r
+    extern     void    EnableIRQ(void);\r
+    extern     void    DisableIRQ(void);\r
+    extern     void    EnableOtgIntr(void);\r
+    extern     void    DisableOtgIntr(void);\r
+    extern     void    InterruptInit(void);\r
+#endif\r
+       \r
diff --git a/drivers/mtd/rknand/flash.uu b/drivers/mtd/rknand/flash.uu
new file mode 100755 (executable)
index 0000000..80b6662
--- /dev/null
@@ -0,0 +1,591 @@
+begin 644 flash.o
+M?T5,1@$!`0````````````$`*``!``````````````!$2@``````!30`````
+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
+MP(WE"_G_ZP`0H.,`D*#A"@"@X?[__^L!`'GC`P``"@4`5N,'0*#A%0``F@H`
+M`.H!8(;B"@!6X[/__QH<@)WE\`"?Y0@0H.'^___K``!8XP&`2!*I__\:!T"@
+MX;PPG^42,-/E#0!3XP0@H(,"(*"3`S!BX`,`6>$!```Z"@"@X8KO_^L$`*#A
+M=.__ZY`0G^6L,*#C`0"@XP01@>`V(*#C"""%Y00PA>70(-'A`""%Y2``C>4@
+M()WE``!2XP'`0N(@P(WE^O__&@$P@^(!$('BL`!3X_+__QI`,)_E%A"@XP@0
+MA>4`$)/E`@!1XP00DQ4`,)$5$C#'%P0``!H#`%3C!!"3E0`PD942,,.7````
+MB@`P@>4)`*#A+-"-XO"/O>@`````4`$``,4!```L`0``>````(````#D`0``
+M[)BMP2P'((EU=GAY<?'1VMS3U:JLHZ77V4AHB*C>.CP```$````"````!```
+M``0````(````!`````0````(````$````"````!`````"````!`````@````
+M0````(```````0``0````(```````0````(````!`````0````+W^/?W]_CY
+M^0KW^??W^/G[^PKX^OCX^?K\_`KY^_GY^OO]_0KZ_/KZ^_S^_@K[_?O[_/W_
+M_PK\_OS\_?X```K\__W\_O\!`0K\`/[\_P`"`@K_`?__``$#`PH`!````00$
+M!`H!`P`!`@,%!0H"!``"`P0&!@H"!0$"!`4'!PH"!@("!08("`H#!P,#!@<)
+M"0H$"`0$!P@,"@H%"04%"`D-"PH&"@8&"0H.#`H````"```#!00`!@@&``@+
+M"``*#@H`_OOZ`/SV]0#Y\N\`]N[J``#IY`>Q`8&PL%^$`````):R`8&PL*\!
+M``````````"PL+"`$````+"PL(`@````L+"P@&0```"PL+"`D````+"PL(`,
+M`0``L+"P@"0!``"PL+"`=`$``+"PJ(#P`0``L+"L@,0"``"PL*J`4`,``+"P
+ML(#<`P``K`^Q@#P&``"L#[&`[`<``+"K!(!L"0``J`.Q@$P*``"K![&`F`H`
+M`+"PKX#<"P``L+"P@,0,``"PL*B`!`X```````#T#@``L+"P@/@.``"PL+"`
+M_`X``+"PK(!X#P``L%^$@/`/``"J/P6`0!```+"PL(!($```L+"P@%`0``"P
+ML+"`5!```+"PL(!D$```L+"P@'00``"PL+"`A!```+"PK(`L$0``L+"H@%@1
+M``"O![&`5!(``+"PK("L$P``L+"P@+`3``"PL+"`M!,``+"PKH!$%0``L+"J
+M@)`5``"PL*B`I!4``+"PJ("X%0``L+"H@-05``"PL*J`-!<``+"PL(`X%P``
+ML+"P@$`7``"N`[&`3!D``+"O!(#T&@``K@^Q@&P=``"J`[&`:!X``+"PK("`
+M'P``L*\*@`0B``"PKQ"`_"8``+"O$H`P+P``L*\$@(0P``"PKPJ`A#,``*P#
+ML8"`-```#````)@]``"PKPJ`"$$``+"O"H!\3@,$504)!RTL>S@7#1<10U)5
+M7T%03$Q?0T]..B`E>`H`07)M4&QL.B`E9"!-2'H*`$-255]#3$M314PP7T-/
+M3CH@)7@*`$%H8D-L:SH@)60@34AZ"@!!2$(@/25D($U(>@`\-3Y(>6YI>$=E
+M=%)E8612971R>41E9F%U;'0@5F%L=64@.B``/#4^("5X(``\-3X*`$%C8V5S
+M<U1I;64Z("5D(&YS"@!!2$)N2TAZ.B`E9"!-:'H*`$9L87-H('1I;6UI;F<Z
+M("5X"@!&;&%S:%!R;V=%;FAA;F-E9"!&;&%S:%-Y<U!R;W1#:&L@('-E8R`]
+M("5L>`H`9T9L87-H26YF;RYS>7-);F9O+G-Y<U!R;W1!9&1R(#T@)6QX"@`\
+M-3Y"0T@@9F%U;'0@0#!X)7@*`#PU/F5R<F]R('-E8STE>"P@97)R;W(@8FET
+M/25D"@`\-3YE<G)O<B!S96,])7@L3F5E9"!2969R97-H(2$A"@!&;&%S:%)E
+M8612971R>2!E<G)O<B$A+')O=R`]("5L>`H`1FQA<VA296%D4&%G92!E<G)O
+M<B$A+')O=R`]("5L>`H`1FQA<V@@)60@240Z("5X("5X("5X("5X("5X(`H`
+M/#4^2'EN:7A296%D4F5T<FEA;"!686QU92`E9#H@`#PU/DAY;FEX4F5A9%)E
+M=')I86P@<F5T<GD@)60Z(```1T-#.B`H1TY5*2`T+C0N,`!!*@```&%E86)I
+M``$@````!3<M00`&"@=!"`$2!!0!%0$7`Q@!&0$:`AX$`"YS>6UT86(`+G-T
+M<G1A8@`N<VAS=')T86(`+G)E;"YT97AT`"YD871A`"YB<W,`+D%232YE>'1A
+M8@`N<F5L+D%232YE>&ED>``N<F]D871A`"YR;V1A=&$N<W1R,2XQ`"YC;VUM
+M96YT`"Y!4DTN871T<FEB=71E<P``````````````````````````````````
+M```````````````````````?`````0````8`````````-`````!$````````
+M``````0`````````&P````D``````````````&A>``#H!@``#0````$````$
+M````"````"4````!`````P`````````T1```5`$`````````````!```````
+M```K````"`````,`````````B$4``/0*``````````````0`````````,```
+M``$````"`````````(A%```8```````````````$`````````#\````!``!P
+M@@````````"@10``V`$```$`````````!``````````[````"0``````````
+M````4&4``/@!```-````!@````0````(````2@````$````"`````````'A'
+M```0```````````````$`````````%(````!````,@````````"(1P```P(`
+M`````````````0````$```!A`````0``````````````BTD``!(`````````
+M``````$`````````:@````,``'```````````)U)```K```````````````!
+M`````````!$````#``````````````#(20``>@```````````````0``````
+M```!`````@``````````````G$P``+`,```.````@@````0````0````"0``
+M``,``````````````$Q9```;!0`````````````!````````````````````
+M```````````!```````````````$`/'_`````````````````P`!````````
+M``````````,``P`````````````````#``0`"0`````````````````!``P`
+M```,`````````````0`````````````````#``4``````````````````P`&
+M``D````0`````````````0`,````'`````````````$`"0```"``````````
+M```!``P```!<`````````````0`)````9`````````````$`#````(P`````
+M```````!``D```"0`````````````0`,````"`$```````````$`"0````P!
+M```````````!``P````@`0```````````0`/````)`$``%`````"``$`"0``
+M`"0!```````````!``P```!P`0```````````0`7````=`$``'P````"``$`
+M"0```'0!```````````!``P```#L`0```````````0`G````\`$``-0````"
+M``$`"0```/`!```````````!``P```#``@```````````0`Z````Q`(``(P`
+M```"``$`"0```,0"```````````!``P```!,`P```````````0!+````4`,`
+M`(P````"``$`"0```%`#```````````!``P```#8`P```````````0!;````
+MW`,``&`"```"``$`"0```-P#```````````!``P````X!@```````````0!H
+M````/`8``+`!```"``$`"0```#P&```````````!``P```#H!P``````````
+M`0!U````[`<``(`!```"``$`"0```.P'```````````!``P```!H"0``````
+M`````0"(````;`D``.`````"``$`"0```&P)```````````!``P```!("@``
+M`````````0`)````3`H```````````$`F````)@*``!$`0```@`!``D```"8
+M"@```````````0`,````V`L```````````$`"0```-P+```````````!``P`
+M``"L#````````````0`)````Q`P```````````$`#``````.```````````!
+M``D````$#@```````````0`,````\`X```````````$`"0```/0.````````
+M```!``D```#X#@```````````0`)````_`X```````````$`"0```'@/````
+M```````!``D```#P#P```````````0`,````/!````````````$`"0```$`0
+M```````````!``D```!($````````````0`)````4!````````````$`"0``
+M`%00```````````!``P```!@$````````````0`)````9!````````````$`
+M#````'`0```````````!``D```!T$````````````0`,````@!``````````
+M``$`"0```(00```````````!``P````<$0```````````0`)````+!$`````
+M``````$`#````%`1```````````!``D```!8$0```````````0`,````0!(`
+M``````````$`"0```%02```````````!``P```"<$P```````````0`)````
+MK!,```````````$`"0```+`3```````````!`*@```"T$P``D`$```(``0`)
+M````M!,```````````$`#````#P5```````````!``D```!$%0``````````
+M`0`,````C!4```````````$`"0```)`5```````````!``D```"D%0``````
+M`````0`)````N!4```````````$`"0```-05```````````!``P````H%P``
+M`````````0`)````-!<```````````$`"0```#@7```````````!``D```!`
+M%P```````````0`,````1!D```````````$`"0```$P9```````````!``P`
+M``#L&@```````````0`)````]!H```````````$`#````&0=```````````!
+M``D```!L'0```````````0`,````9!X```````````$`M0```&@>```8`0``
+M`@`!``D```!H'@```````````0`,````?!\```````````$`"0```(`?````
+M```````!``P```#X(0```````````0`)````!"(```````````$`#````.@F
+M```````````!`,P```#\)@``-`@```(``0`)````_"8```````````$`#```
+M`"`O```````````!``D````P+P```````````0`,````=#````````````$`
+M"0```(0P```````````!``P```"`,P```````````0`)````A#,`````````
+M``$`#````'0T```````````!``D```"`-````````````0`,````<#T`````
+M``````$`"0```)@]```````````!``P`````00```````````0`)````"$$`
+M``````````$`#````.1#```````````!``````````````````,`"`#:````
+M`````!`````!``@`#``````````````````(``````````````````,`"0`,
+M``````````````````,``````````````````P`*``````````````````,`
+M"P#F`````````!`````2``$`]P``````````````$`````X!```0````$```
+M`!(``0`>`0``(````$0````2``$`+@$``&0````L````$@`!`#X!``"0````
+M?````!(``0!%`0``#`$``!@````2``$`3@$`````````````$````%\!````
+M`````````!````!M`0``3`H``$P````2``$`@@$``-P+``#H````$@`!`(\!
+M``#$#```0`$``!(``0"F`0``!`X``/`````2``$`OP$`````````````$```
+M`-8!``#T#@``!````!(``0#G`0``^`X```0````2``$`\@$``/P.``!\````
+M$@`!``0"``!X#P``>````!(``0`4`@``\`\``%`````2``$`*`(``$`0```(
+M````$@`!`#4"``!($```"````!(``0!$`@``4!````0````2``$`5`(`````
+M````````$````&D"``!4$```$````!(``0"&`@`````````````0````C@(`
+M`&00```0````$@`!`)H"``!T$```$````!(``0"S`@``A!```*@````2``$`
+MO0(`````````````$````,0"```L$0``+````!(``0#,`@``6!$``/P````2
+M``$`Y0(``%02``!8`0``$@`!`/0"``"L$P``!````!(``0#_`@``````````
+M```0````!@,``+`3```$````$@`!`!$#`````````````!`````8`P``1!4`
+M`$P````2``$`*@,``)`5```4````$@`!`#P#``"D%0``%````!(``0!,`P``
+MN!4``!P````2``$`5P,`````````````$````%X#``#4%0``8`$``!(``0!L
+M`P``-!<```0````2``$`=0,`````````````$````'L#```X%P``"````!(`
+M`0"&`P`````````````0````D`,``$`7```,`@``$@`!`)X#````````````
+M`!````"R`P`````````````0````P0,`````````````$````,X#``!,&0``
+MJ`$``!(``0#G`P``]!H``'@"```2``$`]P,``&P=``#\````$@`!``,$``"`
+M'P``A`(``!(``0`6!```!"(``/@$```2``$`*`0``#`O``!4`0``$@`!`#H$
+M`````````````!````!*!```A#`````#```2``$`6`0`````````````$```
+M`&8$``"$,P``_````!(``0!V!```@#0``!@)```2``$`@`0```A!``#X`@``
+M$@`!`)$$``"8/0``<`,``!(``0"D!`````````@````1``,`M00```@````8
+M````$0`#`,`$```@````8````!$``P#+!```+`$``"@````1``,`U00``(``
+M``"K````$0`#`-X$``#0````@````!$`!`#K!````````-`````1``0`]@0`
+M`&`)``"4`0``$0`$``,%``!@`0````@``!$`!``.!0``4`$``!`````1``0`
+M`&9L87-H+F,`)&$`)&0`1FQA<VA#<P!&;&%S:%)E9G)E<VA296,`1FQA<VA!
+M9&1R5')A;G-F;W)M`$9L87-H4VMI<$%D9')'87``1FQA<VA'971#;VQ!9&1R
+M`$9L87-H4F5A9$-M9`!&;&%S:%!R;V=#;60`1FQA<VA";&]C:T5R87-E0VUD
+M`$9L87-H4F5A9%-T871U<P!&;&%S:%AF97)">7!A<W,`1FQA<VA"=69#;W!Y
+M`$9L87-H6&9E<E-T87)T+F-L;VYE+C``1FQA<VA296%D4&%G90!#+C,T-2XQ
+M-30X-0!&;&%S:$=E=%!A9V53:7IE`%]?865A8FE?=6YW:6YD7V-P<%]P<C``
+M1FQA<VA3>7-0<F]T4V5T`$9L87-H4WES4')O=$-H:P!&;&%S:%)S=F1";&M#
+M:&L`0F-H4V5L`$)C:%)E<V5T`%]?865A8FE?=6ED:79M;V0`7U]A96%B:5]U
+M:61I=@!&;&%S:%=A:713=&%T=7-296%D>0!&;&%S:$-M9$EN:70`0G5I;&1&
+M;&%S:$QS8E!A9V5486)L90!&;&%S:%-E=%)E8612971R>41E9F%U;'0`7U]A
+M96%B:5]U;G=I;F1?8W!P7W!R,0!&;&%S:%AF97)#;VUP25-2`$9L87-H4D))
+M4U(`3D%.1%]20S1?2V5Y4V5T=7``3D%.1%]20S1?0VEP:&5R`$=E=$ED8FQO
+M8VM$871A3F]28S0`1FQA<VA#<TEO375X`$9L87-H1&5#<TEO375X`$9T;%=R
+M:71E0V%C:&5%;@!&=&Q$96QA>5=R:71E0V%C:&5%;@!&5$Q?34-026YI=%]7
+M:71H;W5T4&%G95)E;6%P`$9T;$EN:70`1E1,7TU#4$EN:70`1E1,26YI=%]7
+M:71H;W5T4&%G95)E;6%P`$=E=$%(0D-,2P!P<FEN=&L`1E1,26YI=`!(>6YI
+M>$=E=%)E8612971R>41E9F%U;'0`1FQA<VA4:6UI;F=#9F<`9G1L7VUE;6-M
+M<`!M96UC;7``9G1L7VUE;6-P>0!M96UC<'D`1V5T261";&]C:U-Y<T1A=&$`
+M1V5T0VAI<%-E8W1O<DEN9F\`1V5T4TY396-T;W));F9O`&9T;%]M96US970`
+M;65M<V5T`%)E861&;&%S:$EN9F\`9G1L7V9R964`:V9R964`9G1L7VUA;&QO
+M8P!?7VMM86QL;V,`1FQA<VA786ET0G5S>0!R:TYA;F1?8V]N9%]R97-C:&5D
+M`$9L87-H4')O9T5R<F]R`%]?865A8FE?:61I=@!&;&%S:$)L;V-K17)A<V53
+M;6%L;%!A9V4`1FQA<VA";&]C:T5R87-E`%)E861&;&%S:$E$`$9L87-H4')O
+M9U-M86QL4&%G90!&;&%S:%!R;V=%;FAA;F-E9`!&;&%S:%)E861%;FAA;F-E
+M9`!?7V%E86)I7VED:79M;V0`1FQA<VA#;W!Y4')O9P!&=&PR1FQA<VA0<F]G
+M`%)E;&]A9$9L87-H26YF;P!&;&%S:$EN:70`2'EN:7A296%D4F5T<FEA;`!3
+M86US=6YG4F5A9%)E=')I86P`36%N=69A8W1U<F5)1%1B;`!$979I8V5#;V1E
+M`$1E=FEC94EN9F\`<F5F5F%L=64Q`')E9E9A;'5E`$9L87-H3'-B4&%G90!G
+M1FQA<VA);F9O`&=&;&%S:$E$26YF;P!G261$871A0G5F`&1E9F%U;'1686QU
+M90``#`````($```<`````@0``%P````"!```C`````($```(`0```@0``"`!
+M```"!```<`$```($``"D`0``'(D``.P!```"!```&`(``!R)``!$`@``'(D`
+M`%`"```<B@``?`(``!R)``"0`@``'(H``,`"```"!```/`,``!R*``!,`P``
+M`@0``-@#```"!```=`0``!R*``"<!0``'(H``+@%```<B0``.`8```($``#4
+M!@``'(H``$P'```<B@``:`<``!R)``#H!P```@0``'@(```<B@``'`D``!R*
+M``!H"0```@0``$@*```"!```V`L```($``"L#````@0````.```"!```\`X`
+M``($``!D#P``'(D``"`0```<D@``,!```!R3```\$````GL``%`0```=F```
+M7!```!V:``!L$```'9H``'P0```=F@``G!```!R>``#$$```'(H``-00```<
+MG@``Y!```!R>````$0``'(H``!`1```<G@``'!$```)^```@$0```GX``"01
+M```"?@``*!$```)^```P$0``')T``#P1```<G@``3!$``!V:``!0$0```GX`
+M`*01```<G@``X!$``!R>``#P$0``')X``$`2```"!```1!(```)^``!($@``
+M`@0``$P2```"?@``4!(```)^``!<$@``'(H``'P2```<B@``E!(``!R>``"@
+M$@``')X``+P2```<B@``)!,``!R*``!,$P``'(H``)@3```=G@``G!,```($
+M``"@$P```GX``*03```"?@``J!,```)^``"L$P``':,``+`3```=I0``$!0`
+M`!RD``"P%```'*0``.04```=I```/!4```($``!H%0``'*4``(`5```<E```
+MC!4```($``"8%0``'*8``*P5```<I@``R!4``!RJ``#X%0``'*D``!06```<
+MJ0``)!<``!VD```H%P```@0``#`7```"!```-!<``!VM```\%P``':\``/P7
+M```<L0``M!@``!RR``#$&```'+```/08```<B@``!!D``!R*```@&0``'(D`
+M`#`9```<B@``1!D```($``!<&0``'+```(P:```<L```M!H``!RS``#L&@``
+M`@0```P;```<L```4!L``!RT``#H'```'+```&0=```"!```U!T``!RP``!D
+M'@```@0``'P?```"!```P!\``!RP``"L(```'+```/@A```"!```9"(``!RW
+M``"H(@``'+```'PD```<B@``X"4``!R)``#,)@``')X``-PF```<G@``Z"8`
+M``($``#T)@```GX``/@F```"?@``2"<``!RP``#@)P``'+```'@H```<G@``
+MN"@``!R>``!`*0``'+```/@I```<L```R"P``!R>```@+P```@0``"0O```"
+M?@``*"\```)^```L+P```GX``'@O```<B0``["\``!R>``#\+P``')X``#@P
+M```<G@``=#````($``!X,````GX``'PP```"?@``@#````)^``"@,```'*X`
+M`,`P```<K@``T#```!RN``!`,0``'+H``%0Q```<B0``<#$``!RY``#`,0``
+M'(H``-@Q```<B@``(#(``!RY``"D,@``'+P``-@R```<B0``[#(``!RP```L
+M,P``'+```%PS```<K```@#,```($``"0,P``'*X``+`S```<J0``R#,``!RY
+M``!0-```'*0``&`T```<I```:#0``!RL``!T-````@0``'@T```"!```H#0`
+M`!RI``"P-```'*D``,`T```<J0``T#0``!RI``#@-```'*D``(PU```<H0``
+MN#4``!R=``#0-0``'+8``/@U```<G@``$#@``!R@``!<.```'+,``)`X```<
+MB@``H#@``!R*``"\.```'(P``.@X```<B@``)#D``!R'``!`.0``'+D``%PY
+M```<AP``>#D``!RY``#\.0``'+D``%@Z```<B@``:#H``!R*``"X.@``'(T`
+M`!@[```<O0``=#P``!R=``"`/```'*$``.`\```<B@``_#P``!R*```,/0``
+M'(<``#@]```<B@``<#T```($``!X/0```@,``(`]```"?@``A#T```(#``"(
+M/0```K\``(P]```"P```S#T``!RP```,0```'+````!!```"!```!$$```(#
+M```D00``'+```/!!```<G@``)$(``!R>``!@0@``')X``-A"```<L```#$,`
+M`!R>``#D0P```@0``.A#```"!```[$,```)^``#P0P```@,``/1#```"?@``
+M^$,```)^``#\0P```GX````````J`@````````"#```(````*@(``!`````J
+M`@``&````"H"```@````*@(``"@````J`@``,````"H"```X````*@(``$``
+M```J`@``2````"H"``!0````*@(``%@````J`@``8````"H"``!H````*@(`
+M`'`````J`@``>````"H"``"`````*@(``(@````J`@``D````"H"``"8````
+M*@(``)@`````CP``G````"H'``"@````*@(``*@````J`@``L````"H"``"X
+M````*@(``,`````J`@``R````"H"``#0````*@(``-@````J`@``X````"H"
+M``#H````*@(``/`````J`@``^````"H"`````0``*@(```@!```J`@``$`$`
+M`"H"```8`0``*@(``"`!```J`@``*`$``"H"```P`0``*@(``#@!```J`@``
+M0`$``"H"``!(`0``*@(``%`!```J`@``6`$``"H"``!@`0``*@(``&@!```J
+M`@``<`$``"H"``!X`0``*@(``(`!```J`@``B`$``"H"``"0`0``*@(``)@!
+M```J`@``H`$``"H"``"H`0``*@(``+`!```J`@``N`$``"H"``#``0``*@(`
+9`,0!```J!P``R`$``"H"``#0`0``*@(`````
+`
+end
diff --git a/drivers/mtd/rknand/ftl.uu b/drivers/mtd/rknand/ftl.uu
new file mode 100755 (executable)
index 0000000..2ce1701
--- /dev/null
@@ -0,0 +1,837 @@
+begin 644 ftl.o
+M?T5,1@$!`0````````````$`*``!```````````````X9P``````!30`````
+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
+M,#$Q,3@@`#PU/DQO86173$5C26YF;R!E<G)O<B!I("5X"@`\-3Y&;&%S:$)L
+M;V-K17)A<V4@97)R;W(Z('-E8STE;'@*`#PU/D)A9"!B;&L@:6YF;R!C;G0@
+M/2`E9`H`/#4^3F\@0F%D(&)L:R!I;F9O"@`\-3YS<&%R92`P>"5X+#!X)7@L
+M,'@E>"PP>"5X+#!X)7@L,'@E>"PP>"5X+#!X)7@*`#PU/G-P87)E6S0J.%T@
+M)7@@+"!P1G1L26YF;RT^<W1A<G10:'E";&L@/2`E>`H`/#4^<$9T;$EN9F\M
+M/F9T;%9E<B`E>"`L($943%]615)324].(#T@)7@*`#PU/G!&=&Q);F9O+3YT
+M;W1A;$QO9VEC0FQK("5X("P@<$9T;$EN9F\M/FUA>%!H>4)L:R`]("5X"@`\
+M-3YP0F%D0FQK26YF;RT^8VYT("5D"@`\-3Y'971"861";&M48FP@=&]O(&UA
+M;GD@8F%D(&)L:PH`<FLR.&YA;F0`)7,*`#PU/@H]/3T]5TP@24Y&3ST]/3T]
+M"@!S96-097)086=E("`]("5D"@!S96-097)";&L@(#T@)60*`'1O=&%L3&]G
+M:6-";&L@(#T@)60*`'1O=&%L3&]G:6-";&M287<@(#T@)60*`')E<W0@8FQK
+M(&YU;2`]("5D"@!F<F5E(&)L:R!N=6T@/2`E9`H`5&]T;&4@17)A<V4@0V]U
+M;G0@/2`E9`H`5&]T;&4@;W9E<DAE860@/2`E9`H`5&AE(&UA>"!%<F%S92!#
+M;W5N="`]("5D"@!4:&4@;6EN($5R87-E($-O=6YT(#T@)60*`%1H92!M87A,
+M979E;"!%<F%S92!#;W5N="`]("5D"@!4:&4@;6EN3&5V96P@17)A<V4@0V]U
+M;G0@/2`E9`H`5&AE(&%V9R!%<F%S92!#;W5N="`]("5D"@!#86-H92!697(@
+M/2`E9`H`3&)A5&]T;&5#;W5N="`]("5L9`H`3&)A079G0V]U;G0@/2`E9`H`
+M/#4^4V%V95=,16-);F9O('!7;$EN9F\M/G!A9V5!9&1R("5X"@`\-3Y3879E
+M4F5M87!";&L`/#4^4V%V95)E;6%P0FQK(')E;6%P26YF;RYP86=E061D<B`E
+M>`H`/#4^1FQA<VA0<F]G17)R;W(@870@861D<CTE>`H`/#4^97)R;W(Z1V5T
+M4F5M87`@4$%"(&ES(#`@+$Q"02`]("5X("P@;F5W(%!"02`]("5X("P@)7@@
+M"@`\-3Y00D%,87-T('!B82`]("5D("`*`$9T;%-E=%-Y<U!R;W1!9&1R(&5R
+M<F]R(&H]("5D(`H`/#4^1G1L4V5T4WES4')O=$%D9'(@<%=L26YF;RT^<W1A
+M<G1";&L@/2`E9"`*`$9T;%-E=%-Y<U!R;W1!9&1R(&5X8V@@)60@8FQK(#T@
+M)60@:6X@<WES(&%R96$A(0H`1G1L4V5T4WES4')O=$%D9'(@9T9L87-H26YF
+M;RYS>7-);F9O+G-Y<U!R;W1!9&1R(#T@)60@"@`\-3Y&:6YD36EN16-#;W5N
+M="!P5VQ);F9O+3YM:6X@=7!D871E(#T@)60@"@`\-3YP5VQ);F9O+3YS=&%R
+M=$)L:R`]("5D(`H`/#4^4'=R3V9F4V%V95)E;6%P5&)L(#H@)7@@"@`\-3Y0
+M=W)/9F93879E4F5M87!48FP@<F-V4F5M87!086=E061D<B`].B`E>"`*`$9T
+M;$-A8VAE5W)I=&5"86-K"@`\-3Y&=&Q4:6UE2&]O:SI&=&Q#86-H941E;&%Y
+M5W)I=&5!3$P*`#PU/F5X8VAA9V4@8FQO8VL@<F5C;W9E<B!D971E8W1E9"!F
+M;&%S:"!P<F]G<F%M(&5R<B$A(0H`/#4^1G1L5TQ297!L86-E($Q"02`Z("5X
+M("QC;W5N="`]("5D(`H`/#4^4'=R3VY,;V%D4F5M87!48FP@<F-V4F5M87!0
+M86=E061D<CTZ("5X(`H`/#4^4'=R3VY,;V%D4F5M87!48FP@<F5M87!);F9O
+M('1A8FQE(&5R<F]R/3H@)7@@"@`\-3Y0=W)/;DQO861296UA<%1B;"!,;V%D
+M5TQ%8TEN9F\@97)R;W(@"@`\-3Y0=W)/;DQO861296UA<%1B;"!P26YF;R!D
+M871A(&5R<F]R(&5R<F]R"@`\-3Y0=W)/;DQO861296UA<%1B;"!324=.7U)%
+M34%07T),2R!E<G)O<@H`/#4^4'=R3VY,;V%D4F5M87!48FP@9FQA<V@@<F5A
+M9"!E<G)O<@H`/#4^1V5T4F5M87!48FP*`$943"!)3D9/.E9E<G-I;VX@/2`E
+M>"Q$871E(#T@)7,*`#(P,3`Q,3@`3$]!1$52($943"!)3D9/.E9E<G-I;VX@
+M/2`E>`H`3F5E9"!U<&1A=&4@3&]A9&5R(2$A`#PU/D-A8VAE(%9E<B`]("5D
+M"@`\-3Y&<F5E($)L:R!N=6T@/2`E9`H`/#4^=&]T86Q,;V=I8T)L:R`@/2`E
+M9`H``$=#0SH@*$=.52D@-"XT+C``02H```!A96%B:0`!(`````4W+4$`!@H'
+M00@!$@04`14!%P,8`1D!&@(>!``N<WEM=&%B`"YS=')T86(`+G-H<W1R=&%B
+M`"YR96PN=&5X=``N9&%T80`N8G-S`"Y!4DTN97AT86(`+G)E;"Y!4DTN97AI
+M9'@`+G)O9&%T80`N<F]D871A+G-T<C$N,0`N8V]M;65N=``N05)-+F%T=')I
+M8G5T97,`````````````````````````````````````````````````````
+M`````!\````!````!@`````````T````A%P`````````````!``````````;
+M````"0``````````````P'\``&@0```-`````0````0````(````)0````$`
+M```#`````````+A<```$```````````````$`````````"L````(`````P``
+M``````"\7```[,`,````````````!``````````P`````0````(`````````
+MO%P```````````````````$`````````/P````$``'""`````````+Q<``!(
+M`@```0`````````$`````````#L````)```````````````HD```4`(```T`
+M```&````!`````@```!*`````0````(`````````!%\``!P`````````````
+M``0`````````4@````$````R`````````"!?``!>!P`````````````!````
+M`0```&$````!``````````````!^9@``$@```````````````0````````!J
+M`````P``<```````````D&8``"L```````````````$`````````$0````,`
+M`````````````+MF``!Z```````````````!``````````$````"````````
+M``````"0:0``(!````X```"P````!````!`````)`````P``````````````
+ML'D```\&``````````````$```````````````````````````````$`````
+M``````````0`\?\````````````````#``$``````````````````P`#````
+M``````````````,`!``'``````````````````$`"@```$`````````````!
+M``````````````````,`!0`````````````````#``8`!P```$0`````````
+M```!``H```"8`````````````0`'````G`````````````$`"@```'@!````
+M```````!``<```!\`0```````````0`*````V`$```````````$`!P```-P!
+M```````````!``H```#H`0```````````0`-````[`$``&P````"``$`!P``
+M`.P!```````````!``H```!4`@```````````0`'````6`(```````````$`
+M!P```%P"```````````!``<```!D`@```````````0`'````;`(`````````
+M``$`!P```'0"```````````!``<```!X`@```````````0`*````V`(`````
+M``````$`!P```.`"```````````!``H````<`P```````````0`'````)`,`
+M``````````$`"@```)@#```````````!`!X```"<`P``Z`````(``0`'````
+MG`,```````````$`"@```(`$```````````!``<```"$!````````````0`*
+M````C`4```````````$`!P```)`%```````````!``H```!P!@``````````
+M`0`'````?`8```````````$`!P```(0&```````````!``H```",!@``````
+M`````0`F````D`8``)`````"``$`!P```)`&```````````!``H````4!P``
+M`````````0`S````(`<``$@````"``$`!P```"`'```````````!``H```!@
+M!P```````````0`'````:`<```````````$`"@```.@'```````````!``<`
+M``#P!P```````````0`*````*`@```````````$`!P```"P(```````````!
+M``H````\"0```````````0`'````4`D```````````$`"@```&P*````````
+M```!`$4```!T"@``5`0```(``0`'````=`H```````````$`"@```)0.````
+M```````!`%(```#(#@``G`$```(``0`'````R`X```````````$`"@```%`0
+M```````````!`&````!D$```?`$```(``0`'````9!````````````$`"@``
+M`-01```````````!``<```#@$0```````````0`*````&!(```````````$`
+M;0```"02``#T`0```@`!``<````D$@```````````0`*````R!,`````````
+M``$`?@```!@4```8`0```@`!``<````8%````````````0`*````+!4`````
+M``````$`DP```#`5``!P`0```@`!``<````P%0```````````0`*````G!8`
+M``````````$`HP```*`6```L`0```@`!``<```"@%@```````````0`*````
+MR!<```````````$`N````,P7``"4`````@`!``<```#,%P```````````0`*
+M````7!@```````````$`!P```&`8```````````!``H```!4&0``````````
+M`0`'````8!D```````````$`"@````P<```````````!``<````<'```````
+M`````0`*````;!T```````````$`!P```'0=```````````!``H```#$'0``
+M`````````0`'````R!T```````````$`"@```*`?```````````!``<```"L
+M'P```````````0`*````W"````````````$`R0```.@@``"<`````@`!``<`
+M``#H(````````````0`*````?"$```````````$`!P```(0A```````````!
+M``H```!`(@```````````0`'````3"(```````````$`"@```)@F````````
+M```!``<```"\)@```````````0`*````Q"<```````````$`!P```,PG````
+M```````!``H````T*0```````````0`'````0"D```````````$`"@```'PJ
+M```````````!`-8```"4*@``E`(```(``0`'````E"H```````````$`"@``
+M`!PM```````````!``<````H+0```````````0`*````F"T```````````$`
+M!P```*0M```````````!``H```#@+0```````````0`'````Y"T`````````
+M``$`"@```$`N```````````!`.0```!(+@``I`````(``0`'````2"X`````
+M``````$`"@```.0N```````````!``<```#L+@```````````0`*````2"\`
+M``````````$`!P```$PO```````````!``H```#`+P```````````0#T````
+MS"\``(P!```"``$`!P```,PO```````````!``H```!(,0```````````0`&
+M`0``6#$``)`"```"``$`!P```%@Q```````````!``H```#8,P``````````
+M`0`9`0``Z#,``-0#```"``$`!P```.@S```````````!``H```"P-P``````
+M`````0`'````O#<```````````$`"@```%@X```````````!``<```!@.```
+M`````````0`*````V#@```````````$`!P```-PX```````````!``H````<
+M.P```````````0`'````*#L```````````$`"@```/@[```````````!``<`
+M````/````````````0`*````$#T```````````$`!P```!P]```````````!
+M``H```!D/P```````````0`'````>#\```````````$`"@```%A!````````
+M```!`"D!``!D00``?`````(``0`'````9$$```````````$`"@```-Q!````
+M```````!`#8!``#@00``G`0```(``0`'````X$$```````````$`"@```&Q&
+M```````````!`$,!``!\1@``P`$```(``0`'````?$8```````````$`"@``
+M`#A(```````````!``<````\2````````````0`*````/$L```````````$`
+M!P```%Q+```````````!``H````,3P```````````0`'````($\`````````
+M``$`"@```(A0```````````!``<```"44````````````0`*````Q%$`````
+M``````$`5`$``,Q1```P`0```@`!``<```#,40```````````0`*````]%(`
+M``````````$`80$``/Q2``!D"````@`!``<```#\4@```````````0`*````
+M3%L```````````$`!P```&!;```````````!``H```!<7````````````0``
+M```````````````#``@``````````````````P`)``H`````````````````
+M`P!M`0``X,`,``0````!``0``````````````````P`*````````````````
+M``,`"P![`0```````$0````2``$`B0$`````````````$````*`!``!$````
+M6````!(``0"N`0`````````````0````O@$``)P```#@````$@`!`,X!````
+M`````````!````#<`0``?`$``&`````2``$`Z@$``-P!```0````$@`!`/P!
+M`````````````!`````-`@``6`(```0````2``$`&`(``%P"```(````$@`!
+M`"\"``!D`@``"````!(``0`[`@``;`(```@````2``$`2`(``'0"```$````
+M$@`!`&`"``!X`@``:````!(``0!O`@`````````````0````>@(``.`"``!$
+M````$@`!`(@"```D`P``>````!(``0":`@`````````````0````K`(``(0$
+M```,`0``$@`!`+X"``"0!0``[````!(``0#+`@`````````````0````T@(`
+M`'P&```(````$@`!`.<"`````````````!````#W`@``A`8```P````2``$`
+M#0,`````````````$````!@#`````````````!`````E`P``:`<``(@````2
+M``$`+`,``/`'```\````$@`!`#T#`````````````!````!'`P``+`@``"0!
+M```2``$`4@,``%`)```D`0``$@`!`&`#`````````````!````!P`P``````
+M```````0````@@,`````````````$````(T#`````````````!````";`P``
+MX!$``$0````2``$`L@,`````````````$````,0#`````````````!````#,
+M`P``8!@````!```2``$`V0,``&`9``"\`@``$@`!`.8#```<'```6`$``!(`
+M`0#R`P``=!T``%0````2``$`_0,``,@=``#D`0``$@`!``P$``"L'P``/`$`
+M`!(``0`5!```A"$``,@````2``$`(P0``$PB``!P!```$@`!`#4$``"\)@``
+M$`$``!(``0!*!```S"<``'0!```2``$`500``$`I``!4`0``$@`!`&@$```H
+M+0``?````!(``0!Z!```I"T``$`````2``$`CP0``.0M``!D````$@`!`)L$
+M``#L+@``8````!(``0"N!```3"\``(`````2``$`MP0`````````````$```
+M`-`$`````````````!````#;!``````````````0````Y`0``+PW``"D````
+M$@`!`/$$``!@.```?````!(``0`#!0``W#@``$P"```2``$`%04``"@[``#8
+M````$@`!`!\%````/```'`$``!(``0`L!0``'#T``%P"```2``$`/04``'@_
+M``#L`0``$@`!`$@%`````````````!````!/!0``/$@``"`#```2``$`804`
+M`%Q+``#$`P``$@`!`&H%```@3P``=`$``!(``0!U!0``E%```#@!```2``$`
+M?04``&!;```D`0``$@`!`(4%`````````````!````"/!0```````!P````1
+M``@`FP4````````$````$0`#`*4%````````X"`!`!$`!`"N!0``X"`$```@
+M"``1``0`N`4``.`@`0````(`$0`$`,8%``#@0`P``(```!$`!`#8!0``Z,`,
+M``0````1``0`Y@4``.`@`P````$`$0`$`.P%``#DP`P``0```!$`!`#\!0``
+MY<`,``$````1``0``&9T;"YC`"1A`"1D`$5X8VA086=E4F5M87!!9&0`1D9&
+M4&%G90!&=&Q#86-H94EN:70`17AC:%!A9V5296UA<$EN:70`1V5T0F%D0FQK
+M5&)L`$QO<W10=W)(86YD;&4`4V5T0F%D0FQK5&)L`')K3F%N9%]P<F]C7W)E
+M860`475E=65&<F5E3W5T+F-L;VYE+C$`475E=65);BYC;&]N92XR`%%U975E
+M4F5S=$]U="YC;&]N92XS`%%U975E3W5T+F-L;VYE+C``17AC:$)L:TUA=&-H
+M`$9T;$-A8VAE5W)I=&4`1G1L0V%C:&5);G9A;&ED`$5X8VA,;W-T4'=R2&%N
+M9&QE`$5X8VA086=E4F5M87!#;&]S90!%>&-H0FQK4F5C;W9E<GD`1G1L0V%C
+M:&5&<F5E`$9T;$-A8VAE3W!E;@!&=&Q#86-H95)E8V]V97)Y`%)E;6%P5&)L
+M26YI=`!'971296UA<%1B;`!M>5]P<F]C7V5N=')Y`$=E=$)L:T5C0V]U;G0`
+M7U]A96%B:5]U;G=I;F1?8W!P7W!R,`!3971";&M%8T-O=6YT`%]?865A8FE?
+M:61I=FUO9`!!9&I.97=4:')E<VAO;&0`7U]A96%B:5]U:61I=@!73%=R:71E
+M0VYT4F5C`%=,3&%S=$Q"05=R:71E3&]G`%]?865A8FE?=6ED:79M;V0`4')I
+M;G1#86-H90!&=&Q'971086=E6F]N94-A<&%C:71Y`$9T;%!A9V5296%D`$9T
+M;%!A9V57<FET90!&=&Q$96QA>5=R:71E06QL0V%C:&5%;@!&=&Q'971#87!A
+M8VET>0!G1FQA<VA);F9O`%)E861#86-H94EN:70`1G1L4F5A9$)U9DEN=F%L
+M:60`1FQA<VA296%D16YH86YC960`1FQA<VA296%D0V]U;G1,;V<`3&]A9%=,
+M16-);F9O`'!R:6YT:P!&=&Q&;&%S:%-Y<U!R;W13971/;@!&;&%S:%-Y<U!R
+M;W13970`1G1L1FQA<VA3>7-0<F]T4V5T3V9F`&9T;%]M96US970`7U]A96%B
+M:5]I9&EV`%=,26YI=`!";&M296%D0V]U;G1);FET`%]?;65M>F5R;P!&=&Q6
+M87));FET`$9T;#)&;&%S:%!R;V<`1FQA<VA";&]C:T5R87-E`$9L87-H4')O
+M9T5N:&%N8V5D`&9T;%]M96UC<'D`1FQA<VA#;W!Y4')O9P!R:S(X;F%N9%]C
+M<F5A=&5?<')O8V9S`&-R96%T95]P<F]C7V5N=')Y`'-P<FEN=&8`4V%V95=,
+M16-);F9O`%-A=F5296UA<$)L:P!'971296UA<$)L:P!'9715;G)E;6%P`$9L
+M87-H4')O9T5R<F]R`$=E=%)E;6%P`$9T;%=R:71E26UA9V4`1G1L4V5T4WES
+M4')O=$%D9'(`1FEN9$UI;DQB845C0V]U;G1,8F$`5TQ296-O=F5R>0!0=W)/
+M9F93879E4F5M87!48FP`1G1L0V%C:&57<FET94)A8VL`1G1L1&5L87E7<FET
+M94-A8VAE16X`1G1L5&EM94AO;VL`1G1L0V%C:&5$96QA>5=R:71E`$9T;$-L
+M;W-E`$9L87-H4V5T4F5A9%)E=')Y1&5F875L=`!F=&Q?;6%L;&]C`&9T;%]F
+M<F5E`$5X8VA";&M#;&]S90!%>&-H0FQK36%T8VA#;&]S90!%>&-H0FQK5W)I
+M=&5-871C:`!73%)E<&QA8V4`1G1L5W)I=&5086=E`$9L87-H4F5F<F5S:$AO
+M;VL`1G1L4F5A9%)A=P!M96UC<'D`4'=R3VY,;V%D4F5M87!48FP`1G1L5W)I
+M=&4`1G1L4F5A9$)U9@!&=&Q296%D`$9T;$EN:70`1FQA<VA);FET`$9T;%]V
+M97)S:6]N`&1E8G5G1FQA9P!G1G1L26YF;P!G0V%C:&5"=68`9U)E861#86-H
+M94)U9@!G17AC:%!A9V5296UA<$)U9@!#=7)%<F%S94)L;V-K`$5C5&)L`$9T
+M;%1I;65(;V]K1FQA9P!&=&Q4:6UE2&]O:U1I;65O=70``$`````"!```F```
+M``($```H`0``'+,``'@!```"!```I`$``!RU``#8`0```@0``.@!```"!```
+M"`(``!RX```8`@``'+4``"@"```<N```-`(``!RU``!4`@```@0``-@"```"
+MOP``W`(```($```<`P```@0``"`#```"!```F`,```($``#``P``'+4``.0#
+M```<P@``(`0``!S"``"`!````@0``)0$```<M0``1`4``!S"``",!0```@0`
+M`/@%```<P@``,`8``!S%``!P!@```@0``'0&```"!```>`8```*K``"`!@``
+M'<<``(@&```=QP``W`8``!S)```4!P```@0``!@'```"!```'`<```($``!<
+M!P``'<D``&`'```"!```9`<```($``"`!P``',D``,`'```<R0``W`<``!S*
+M``#H!P```@0``.P'```"!```!`@``!S-```H"````@0``'0(```<M0``S`@`
+M`!S)``#T"```',L``#`)```<S```/`D```*_``!`"0```@0``$0)```"!```
+M2`D```($``!,"0```@0``'0)```<M0``V`D``!S0``#L"0``',4``!`*```<
+MM0``7`H``!S1``!L"@```@0``'`*```"JP``P`H``!S)``#<"@``',D``/0*
+M```<P@``I`L``!S%``"X"P``',4``-`+```<N```Y`L``!RX```H#```',(`
+M`&P,```<Q0``@`P``!RU``#8#```',<``.P,```<SP````T``!S/```(#0``
+M',<``*@-```<T@``R`T``!RU``#D#0``'+4``/@-```<N```-`X``!S%``!(
+M#@``',4``&@.```<Q0``A`X``!S%``"4#@```@0``)@.```"!```G`X```($
+M``"@#@```JL``*0.```"JP``K`X```*K``"P#@```JL``+@.```"JP``O`X`
+M``*K``#`#@```JL``,0.```"JP``+`\``!RX``!H#P``'+@``'P/```<SP``
+MS`\``!S"``#T#P``',<```@0```<TP``*!```!RX```\$```',\``$00```<
+MQP``4!````($```\$0``',<``&@1```<SP``I!$``!S/``#`$0``',\``,@1
+M```<QP``U!$```($``#<$0```@0``/`1```<U0``&!(```*K```<$@```@0`
+M`"`2```"0@``3!(``!S6``!<$@``',4``&P2```<U@``@!(``!S6``"4$@``
+M'-8``*@2```<U@``P!(``!S6``#8$@``'-8``.P2```<U@```!,``!S6```4
+M$P``'-8``"@3```<U@``/!,``!S6``!0$P``'-8``&`3```<M0``<!,``!S6
+M``"$$P``'-8``)@3```<U@``K!,``!S6``#($P```JL``,P3```"J@``T!,`
+M``($``#4$P```JL``-@3```"JP``W!,```*K``#@$P```JL``.03```"JP``
+MZ!,```*K``#L$P```JL``/`3```"JP``]!,```*K``#X$P```JL``/P3```"
+MJP```!0```*K```$%````JL```@4```"JP``#!0```*K```0%````JL``!04
+M```"JP``A!0``!RS``"8%```'+,``+`4```<LP``'!4``!RS```L%0```@0`
+M`*`5```<LP``!!8``!RS``!P%@``'+,``)P6```"!```V!8``!RS```D%P``
+M'+,``#P7```<LP``J!<``!RS``#(%P```@0``%P8```"!```$!D``!S%```T
+M&0``',\``%09```"!```7!D```*K``"$&0``',4``+@:```<Q0``V!H``!S/
+M``"(&P``',(``-@;```<SP``#!P```($```0'````JL``!0<```"JP``&!P`
+M``($``#T'```',(``&`=```<V```;!T```($``!P'0```@0``(@=```<V0``
+MF!T``!RU``#$'0```@0``.P=```<Q0``#!X``!S:```D'@``'-D``$@>```<
+MM0``6!X``!RU``!L'@``'+@``+P>```<M0``"!\``!RX```P'P``',(``$@?
+M```<TP``;!\``!S/``"$'P``'+4``*`?```"!```I!\```*K``"H'P```@0`
+M`,0?```<N```U!\``!RU``#D'P``'-D```@@```<V0``%"```!S9```H(```
+M',4``%0@```<M0``9"```!RU``"`(```'+4``+`@```<N```W"````($``#@
+M(````JL``.0@```"!```_"```!S<```H(0``'+4``#@A```<M0``?"$```($
+M``"`(0```@0``+PA```<R0``Q"$``!S<``#D(0``'+4``/@A```<QP``#"(`
+M`!S/```4(@``',<``$`B```"!```<"(``!RU``"$(@``'-D``)@B```<V0``
+MS"(``!S%``!,(P``',4``'PC```<TP``K",``!RS``"D)```'+4``/0D```<
+MV0``$"4``!S"``!,)0``'-,``*PE```<W```R"4``!S<``#0)0``'+4``/0E
+M```<R@``!"8``!S%```\)@``'+4``$PF```<Q0``6"8``!RU``"`)@``'+4`
+M`(PF```<Q0``F"8```($``"<)@```JL``*`F```"JP``I"8```($``"H)@``
+M`@0``*PF```"OP``L"8```*K``"T)@```JL``+@F```"JP```"<``!S9``!8
+M)P``'-D``+@G```<Q0``Q"<```($``#()P```JL``/0G```<W```_"<``!RU
+M```<*```'+4``$`H```<Q0``R"@``!RU```P*0``'=\``#0I```"OP``."D`
+M``($```\*0```JL``'PI```<Q0``G"D``!S'``"D*0``',<``-`I```<V```
+MU"D``!S7```T*@``',<``$`J```<Q0``6"H``!S/``!@*@``',<``(`J```"
+M!```A"H```*K``"0*@```JL```0K```<X0``!"T``!S/```<+0```@0``"0M
+M```"!```,"T``!S%``"0+0``',(``)@M```"JP``G"T```($``"@+0```K\`
+M`.`M```"!```$"X``!S%```D+@``'.,``#PN```=XP``0"X```($``!$+@``
+M`JL``.0N```"!```Z"X```($``!(+P```@0``'@O```<X0``?"\``!SG``"X
+M+P``',(``,`O```"!```R"\```*_``#@,```'+4``/`P```<M0``+#$``!S/
+M``!(,0```@0``'@Q```<M0``L#$``!S9``#4,@``',(``!`S```<M0``.#,`
+M`!S3``!H,P``'-,``)@S```<M0``K#,``!RU``#(,P``',D``-@S```"!```
+M##0``!SH```D-```'.@``'PT```<P@``+#4``!S"``!T-0``'.D``%0V```<
+MP@```#<``!S%``!<-P``'-D``'0W```<TP``I#<``!WI``"P-P```@0``+0W
+M```"!```N#<```*K```$.```'+@``"0X```<TP``,#@``!RU``!8.````@0`
+M`%PX```"!```:#@``!S<``"4.```'+4``*0X```<M0``N#@``!SJ``#8.```
+M`@0``.PX```<W```'#D``!RU```L.0``'+4``(`Y```<W```G#D``!RU``"L
+M.0``'+4``+PY```<Z@``&#H``!SJ```T.@``'+@``%`Z```<P@``<#H``!RU
+M``"`.@``'+8``)@Z```<V0``P#H``!RX```<.P```@0``"`[```"!```)#L`
+M``($``!(.P``'-\``&@[```<M```B#L``!S9``"P.P``',4``-`[```<ZP``
+MX#L``!SL``#D.P``'.H``/@[```"!```_#L```*K```H/```'.$``#@\```<
+M[```8#P``!RU``!P/```'+4``(`\```<M0``F#P``!RX``"H/```'+4``-`\
+M```<SP``\#P``!SJ```0/0```@0``*`]```<TP``L#T``!S'``#4/0``'-,`
+M`/0]```<X0``_#T``!S:```</@``'.L``"P^```<[```,#X``!SJ``!,/@``
+M'+4``%P^```<M0``;#X``!SJ``"H/@``'+4``-@^```<QP``[#X``!S3```0
+M/P``'-,``"@_```<QP``9#\```($``!H/P```K\``.@_```<W```_#\``!RX
+M```80```',,``#!````<P@``1$```!RX``#X0```'/$``$A!```<[P``6$$`
+M``*_``!<00```@0``&!!```"!```J$$``!SP``#,00``'.X``-Q!```"!```
+M^$$``!RX``"`10``'+@``&Q&```"!```<$8```($``!T1@```@0``'A&```"
+M!```D$8``!RU``"@1@``'.@``,A&```<R0``4$<``!S"``#41P``',(``"Q(
+M```<Z0``.$@```($``"02```',(``.1(```<Q0``'$D``!S"``!\20``'/$`
+M`,Q)```<P@``[$D``!S%``#P20``',X``"!*```<Q```-$H``!S%```X2@``
+M',X``%Q*```<R0``B$H``!RU``"82@``'+4``.Q*```<Q0``^$H``!S%```$
+M2P``',4``#Q+```"!```0$L```*K``!$2P```@0``$A+```"JP``3$L```*K
+M``!02P```JL``%1+```"JP``6$L```*K``#<2P``',$``.A+```<M0``_$L`
+M`!RX``!03```'-(``/A,```<[@``%$T``!S2``"430``'+@``"Q.```<[@``
+M0$X``!RX``!83@``'+@``*Q.```<T@``_$X``!SM```,3P```@0``!!/```"
+MOP``%$\```($```83P```@0``!Q/```"!```1$\``!RX``!X3P``'?```+A/
+M```<\0``'%```!SP```T4```'/$``(A0```"OP``C%````($``"04````@0`
+M`/A0```<N```,%$``!ST``"$40``'/```*Q1```<]```Q%$```*_``#(40``
+M`@0```A2```<T@``L%(``!S/``#T4@```@0``/A2```"!```3%,``!S%``!D
+M4P``',D``'13```<R0``E%,``!S)``"D4P``',D``+13```<R0``7%0``!S"
+M``!X5```'+(``$Q6```<M0``A%8``!S"```X60``',(``'!9```<P@``I%D`
+M`!S"``!,6P```@0``%!;```"JP``6%L```($``!<6P```K\``(!;```<U```
+ME%L``!SW``"D6P``',X``,!;```<Q0``S%L``!S%``#46P``',4``.!;```<
+M\@``\%L``!S@```47```',4``"!<```<Q0``,%P``!S%```\7```',4``$A<
+M```<Q0``4%P``!SC``!<7````@0``&!<```"!```9%P```*K``!H7````JL`
+M`&Q<```"JP``<%P```*K``!T7````JL``'A<```"JP``?%P```*K``"`7```
+M`JL````````J`@````````"Q```(````*@(``!`````J`@``&````"H"```@
+M````*@(``"@````J`@``,````"H"```X````*@(``$`````J`@``2````"H"
+M``!0````*@(``%@````J`@``8````"H"``!H````*@(``'`````J`@``>```
+M`"H"``"`````*@(``(@````J`@``D````"H"``"8````*@(``*`````J`@``
+MJ````"H"``"P````*@(``+@````J`@``P````"H"``#(````*@(``-`````J
+M`@``V````"H"``#@````*@(``.@````J`@``\````"H"``#X````*@(````!
+M```J`@``"`$``"H"```0`0``*@(``!@!```J`@``(`$``"H"```H`0``*@(`
+M`#`!```J`@``.`$``"H"``!``0``*@(``$@!```J`@``4`$``"H"``!8`0``
+M*@(``&`!```J`@``:`$``"H"``!P`0``*@(``'@!```J`@``@`$``"H"``"(
+M`0``*@(``)`!```J`@``F`$``"H"``"@`0``*@(``*@!```J`@``L`$``"H"
+M``"X`0``*@(``,`!```J`@``R`$``"H"``#0`0``*@(``-@!```J`@``X`$`
+M`"H"``#H`0``*@(``/`!```J`@``^`$``"H"`````@``*@(```@"```J`@``
+M$`(``"H"```8`@``*@(``"`"```J`@``*`(``"H"```P`@``*@(``#@"```J
++`@``0`(``"H"````
+`
+end
diff --git a/drivers/mtd/rknand/nand_config.h b/drivers/mtd/rknand/nand_config.h
new file mode 100755 (executable)
index 0000000..573f267
--- /dev/null
@@ -0,0 +1,58 @@
+/********************************************************************************\r
+*********************************************************************************\r
+                       COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU\r
+                               --  ALL RIGHTS RESERVED  --\r
+\r
+File Name:  nand_config.h\r
+Author:     RK28XX Driver Develop Group\r
+Created:    25th OCT 2008\r
+Modified:\r
+Revision:   1.00\r
+********************************************************************************\r
+********************************************************************************/\r
+#ifndef     _NAND_CONFIG_H\r
+#define     _NAND_CONFIG_H\r
+#define     DRIVERS_NAND\r
+#define     LINUX\r
+\r
+#include    <linux/kernel.h>\r
+#include    <linux/string.h>\r
+#include    <linux/sched.h>\r
+#include    <linux/delay.h>\r
+//#include     <asm/arch-rockchip/hardware.h>\r
+#include    "typedef.h"\r
+#include    <mach/rk29_iomap.h>\r
+#include    <mach/iomux.h>\r
+//#include    "epphal.h"\r
+#ifndef        TRUE\r
+#define        TRUE    1\r
+#endif\r
+\r
+#ifndef                FALSE\r
+#define        FALSE   0\r
+#endif\r
+\r
+#ifndef                NULL\r
+#define        NULL   (void*)0\r
+#endif\r
+\r
+#include    "FTL_OSDepend.h"\r
+#include    "flash.h"\r
+#include    "ftl.h"\r
+\r
+#ifdef CONFIG_MTD_NAND_RK29XX_DEBUG\r
+#undef RKNAND_DEBUG\r
+#define RKNAND_DEBUG(format, arg...) \\r
+               printk(KERN_NOTICE format, ## arg);\r
+#else\r
+#undef RKNAND_DEBUG\r
+#define RKNAND_DEBUG(n, arg...)\r
+#endif\r
+\r
+extern void rkNand_cond_resched(void);\r
+\r
+#define COND_RESCHED() rkNand_cond_resched()//cond_resched()\r
+\r
+#define PRINTF RKNAND_DEBUG\r
+#endif\r
+\r
diff --git a/drivers/mtd/rknand/rknand_base.c b/drivers/mtd/rknand/rknand_base.c
new file mode 100755 (executable)
index 0000000..0d6e081
--- /dev/null
@@ -0,0 +1,737 @@
+/*\r
+ *  linux/drivers/mtd/rknand/rknand_base.c\r
+ *\r
+ *  Copyright (C) 2005-2009 Fuzhou Rockchip Electronics\r
+ *  ZYF <zyf@rock-chips.com>\r
+ *\r
+ *   \r
+ */\r
+\r
+#include <linux/module.h>\r
+#include <linux/sched.h>\r
+#include <linux/delay.h>\r
+#include <linux/init.h>\r
+#include <linux/slab.h>\r
+#include <linux/platform_device.h>\r
+#include <linux/mtd/mtd.h>\r
+#include <linux/mtd/partitions.h>\r
+#include <linux/mutex.h>\r
+#include <linux/kthread.h>\r
+#include <linux/reboot.h>\r
+#include <asm/io.h>\r
+#include <asm/mach/flash.h>\r
+#include "api_flash.h"\r
+\r
+\r
+#define DRIVER_NAME    "rk29xxnand"\r
+\r
+#define NAND_DEBUG_LEVEL0 0\r
+#define NAND_DEBUG_LEVEL1 1\r
+#define NAND_DEBUG_LEVEL2 2\r
+#define NAND_DEBUG_LEVEL3 3\r
+long FTLWriteCount =0;\r
+long FTLReadWriteTime  =0;\r
+long FTLSwapWriteCount =0;\r
+long FTLPageWriteCount =0;\r
+\r
+\r
+#ifndef CONFIG_RKFTL_PAGECACHE_SIZE\r
+#define CONFIG_RKFTL_PAGECACHE_SIZE  64 //¶¨ÒåpageÓ³ÉäÇø´óС£¬µ¥Î»ÎªMB,mount ÔÚ/data/dataÏ¡£\r
+#endif\r
+\r
+#define use_image\r
+\r
+#ifdef use_image\r
+unsigned long SysImageWriteEndAdd = 0;\r
+int g_num_partitions = 0;\r
+#endif\r
+\r
+#ifdef CONFIG_MTD_NAND_RK29XX_DEBUG\r
+static int s_debug = CONFIG_MTD_NAND_RK29XX_DEBUG_VERBOSE;\r
+//module_param(s_debug, int, 0);\r
+//MODULE_PARM_DESC(s_debug, "Set Debug Level 0=quiet, 5=noisy");\r
+#undef NAND_DEBUG\r
+/*#define NAND_DEBUG(n, format, arg...) \\r
+       if (n <= s_debug) {      \\r
+               printk(KERN_NOTICE __FILE__ ":%s(): " format "\n", __FUNCTION__ , ## arg); \\r
+       }*/\r
+#define NAND_DEBUG(n, format, arg...) \\r
+       if (n <= s_debug) {      \\r
+               printk(format,##arg); \\r
+       }\r
+#else\r
+#undef NAND_DEBUG\r
+#define NAND_DEBUG(n, arg...)\r
+static const int s_debug = 0;\r
+#endif\r
+\r
+long RkFtlWriteCount;\r
+\r
+/*\r
+* RK28 LBA PARTITIONS,the size and offset value below is default value in this program,\r
+* when RK28 LBA FLASH init,the value will be modify to the value in the nand flash.\r
+*/\r
+#define MAX_FLASH_PARTITION  2\r
+\r
+#define ROOTFS_PART_SIZE     300\r
+#define PARA_PART_SIZE       1\r
+#define KERNEL_PART_SIZE     4\r
+\r
+static struct mtd_partition rk28_partition_info[] = {\r
+       { \r
+         name: "misc",\r
+         offset:  0x2000*0x200,\r
+         size:    0x2000*0x200,//100MB\r
+       },\r
+\r
+       { \r
+         name: "kernel",\r
+         offset:  0x4000*0x200,\r
+         size:   0x4000*0x200,//200MB\r
+       },\r
+\r
+       { \r
+         name: "boot",\r
+         offset:  0x8000*0x200,\r
+         size:   0x2000*0x200,//200MB\r
+       },\r
+\r
+       { \r
+         name: "system",\r
+         offset:  0xE000*0x200,\r
+         size:   0x38000*0x200,//200MB\r
+       },\r
+     \r
+};\r
+\r
+\r
+static struct mtd_partition rk28_page_part_info[] = {\r
+       { \r
+         name: "pagecache",\r
+         offset:  0,\r
+         size:    CONFIG_RKFTL_PAGECACHE_SIZE * 0x800,//32MB\r
+       },\r
+\r
+       { \r
+         name: "swap",\r
+         offset:  (CONFIG_RKFTL_PAGECACHE_SIZE) * 0x800,\r
+         size:    64 * 0x800,//64MB\r
+       },\r
+};\r
+\r
+/*\r
+ * onenand_state_t - chip states\r
+ * Enumeration for OneNAND flash chip state\r
+ */\r
+typedef enum {\r
+       FL_READY,\r
+       FL_READING,\r
+       FL_WRITING,\r
+       FL_ERASING,\r
+       FL_SYNCING,\r
+       FL_UNVALID,\r
+} rknand_state_t;\r
+\r
+struct rknand_chip {\r
+       wait_queue_head_t       wq;\r
+       rknand_state_t          state;\r
+       int rknand_schedule_enable;//1 enable ,0 disable\r
+    void (*pFlashCallBack)(void);//call back funtion\r
+};\r
+\r
+struct rknand_info {\r
+       struct mtd_info         mtd;\r
+    struct mtd_info            page_mtd;    \r
+       struct mtd_partition *parts;\r
+       struct rknand_chip      rknand;\r
+    struct task_struct *thread;\r
+};\r
+\r
+struct rknand_info * gpNandInfo;\r
+static int rknand_get_device(int new_state)\r
+{\r
+       struct rknand_chip *nand_info = &gpNandInfo->rknand;\r
+       DECLARE_WAITQUEUE(wait, current);\r
+       while (1) {\r
+               if (nand_info->state == FL_READY) {\r
+                       nand_info->state = new_state;\r
+                       break;\r
+               }\r
+               NAND_DEBUG(NAND_DEBUG_LEVEL1,"FLASH not ready\n");\r
+               set_current_state(TASK_UNINTERRUPTIBLE);\r
+               add_wait_queue(&nand_info->wq, &wait);\r
+               schedule();\r
+               remove_wait_queue(&nand_info->wq, &wait);\r
+       }\r
+       return 0;\r
+}\r
+\r
+static void rknand_release_device(void)\r
+{\r
+       struct rknand_chip *nand_info = &gpNandInfo->rknand;\r
+       if(nand_info->pFlashCallBack)\r
+           nand_info->pFlashCallBack();//call back\r
+       nand_info->pFlashCallBack = NULL;\r
+       nand_info->state = FL_READY;\r
+       wake_up(&nand_info->wq);\r
+}\r
+\r
+void rkNand_cond_resched(void)\r
+{\r
+    if(gpNandInfo->rknand.rknand_schedule_enable == 1)\r
+       {\r
+        //msleep(1);\r
+        //mdelay(1);\r
+        cond_resched();\r
+    }\r
+}\r
+\r
+static int rk28xxnand_read(struct mtd_info *mtd, loff_t from, size_t len,\r
+       size_t *retlen, u_char *buf)\r
+{\r
+       int ret = 0;\r
+       int sector = len>>9;\r
+       int LBA = (int)(from>>9);\r
+       //printk(KERN_NOTICE "read: from=%x,len=%x,\n",(int)from,len);\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL1,"-");\r
+    //FTLReadWriteTime++;\r
+    //if(len&511)\r
+    //    printk("rk28xxnand_read: from=%x,len=%x,\n",(int)from,len);\r
+    rknand_get_device(FL_READING);\r
+    if(sector)\r
+    {\r
+        {\r
+                   ret = FtlRead(2,LBA, sector, buf);\r
+        }\r
+    }\r
+    rknand_release_device();\r
+       *retlen = len;\r
+       return 0;//ret;\r
+}\r
+\r
+// cmy: before cache part use FtlWriteImage, after cache(include cache) use FtlWrite\r
+static int write_Image(int LBA, int sector, u_char* buf)\r
+{\r
+       int remain_sector = sector;\r
+       int write_sector = 0;\r
+       u_char* data = buf;\r
+       int index = LBA;\r
+       int ret = 0;\r
+       while(remain_sector > 0)\r
+    {\r
+               write_sector = remain_sector>32?32:remain_sector;\r
+               ret = FtlWriteImage(index, write_sector, data);\r
+               data += write_sector<<9;\r
+               index += write_sector;\r
+               remain_sector -= write_sector;\r
+    }\r
+       return ret;\r
+}\r
+\r
+static int rk28xxnand_write(struct mtd_info *mtd, loff_t from, size_t len,\r
+       size_t *retlen, u_char *buf)\r
+{\r
+       int ret = 0;\r
+       int sector = len>>9;\r
+       int LBA = (int)(from>>9);\r
+    //NAND_DEBUG(NAND_DEBUG_LEVEL0,"+");\r
+    FTLWriteCount+=sector;\r
+    FTLReadWriteTime++;\r
+    //dump_stack();\r
+       //printk(KERN_NOTICE "write: from=%lx,len=%x\n",(int)from,len);\r
+    rknand_get_device(FL_WRITING);\r
+       if(sector)// cmy\r
+       {\r
+#ifdef use_image\r
+               if(LBA < SysImageWriteEndAdd)//0x4E000)\r
+               {\r
+                       printk(">>> FtlWriteImage: LBA=0x%08X  sector=%d\n",LBA, sector);\r
+                        \r
+                       ret = FtlWriteImage(LBA&0xFFFFFFE0, sector, buf);// LBA align to 32\r
+        }\r
+#else\r
+               if(LBA<0x4E000)\r
+                       ret = write_Image(LBA, sector, buf);\r
+#endif\r
+               else\r
+        {\r
+            ret = FtlWrite(2,LBA, sector, buf);\r
+        }\r
+       }\r
+    rknand_release_device();\r
+       *retlen = len;\r
+       return 0;//ret;\r
+}\r
+\r
+static int rk28xxnand_page_write(struct mtd_info *mtd, loff_t from, size_t len,\r
+       size_t *retlen, u_char *buf)\r
+{\r
+       int ret = 0;\r
+       int sector = len;\r
+       int LBA = (int)(from);\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL1,"*");\r
+    FTLWriteCount+=sector;\r
+    //printk("+");\r
+       //printk(KERN_NOTICE "pagewrite: from=%lx,len=%x\n",(int)from,len);\r
+    rknand_get_device(FL_WRITING);\r
+       if(sector)// cmy\r
+       {\r
+        ret = FtlPageWrite(LBA, sector, buf);\r
+       }\r
+    rknand_release_device();\r
+       *retlen = len;\r
+       return 0;//ret;\r
+}\r
+\r
+static int rk28xxnand_page_read(struct mtd_info *mtd, loff_t from, size_t len,\r
+       size_t *retlen, u_char *buf)\r
+{\r
+       int ret = 0;\r
+       int sector = len;\r
+       int LBA = (int)(from);\r
+       //printk(KERN_NOTICE "read: from=%x,len=%x,\n",(int)from,len);\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL2,"-");\r
+    //printk("-");\r
+    //if(len&511)\r
+    //    printk("rk28xxnand_read: from=%x,len=%x,\n",(int)from,len);\r
+    rknand_get_device(FL_READING);\r
+    if(sector)\r
+    {\r
+        ret = FtlPageRead(LBA, sector, buf);\r
+    }\r
+    rknand_release_device();\r
+       *retlen = len;\r
+       return 0;//ret;\r
+}\r
+\r
+\r
+static int rk28xxnand_erase(struct mtd_info *mtd, struct erase_info *instr)\r
+{\r
+       int ret = 0;\r
+    if (instr->callback)\r
+               instr->callback(instr);\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_erase,add:%x,len:%x\n",instr->addr,instr->len);\r
+       return ret;\r
+}\r
+\r
+static int rk28xxnand_read_oob(struct mtd_info *mtd, loff_t from,\r
+                           struct mtd_oob_ops *ops)\r
+{\r
+       int ret = 0;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_read_oob\n");\r
+       return ret;\r
+}\r
+\r
+\r
+static int rk28xxnand_write_oob(struct mtd_info *mtd, loff_t to,\r
+                            struct mtd_oob_ops *ops)\r
+{\r
+       int ret=0;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_write_oob\n");\r
+       return ret;\r
+}\r
+\r
+static int rk28xxnand_suspend(struct platform_device *dev, pm_message_t pm)\r
+{\r
+    gpNandInfo->rknand.rknand_schedule_enable = 0;\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xx_nand_suspend: \n");\r
+       return 0;\r
+}\r
+\r
+static int rk28xxnand_resume(struct platform_device *dev)\r
+{\r
+    gpNandInfo->rknand.rknand_schedule_enable = 1;\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xx_nand_resume: \n");\r
+       return 0;\r
+}\r
+\r
+static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
+{\r
+       //printk("rk28xxnand_block_isbad: \n");\r
+       return 0;\r
+}\r
+\r
+static int rk28xxnand_block_markbad(struct mtd_info *mtd, loff_t ofs)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_block_markbad: \n");\r
+       return 0;\r
+}\r
+\r
+static void rk28xxnand_sync(struct mtd_info *mtd)\r
+{\r
+    /* Grab the lock and see if the device is available */\r
+    rknand_get_device(FL_SYNCING);\r
+       /* Release it and go back */\r
+    rknand_release_device();\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_sync: \n");\r
+}\r
+\r
+static int rk28xxnand_lock(struct mtd_info *mtd, loff_t ofs, size_t len)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_lock: \n");\r
+       return 0;\r
+}\r
+\r
+static int rk28xxnand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_unlock: \n");\r
+       return 0;\r
+}\r
+\r
+static int rk28xxnand_init(struct rknand_info *nand_info)\r
+{\r
+       struct mtd_info    *mtd = &nand_info->mtd;\r
+       struct mtd_info    *page_mtd = &nand_info->page_mtd;\r
+       struct rknand_chip *rknand = &nand_info->rknand;\r
+\r
+       rknand->state = FL_READY;\r
+       rknand->rknand_schedule_enable = 1;\r
+       rknand->pFlashCallBack = NULL;\r
+       init_waitqueue_head(&rknand->wq);\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"FTLInit ...: \n");\r
+       if(FTLInit())\r
+       {\r
+               NAND_DEBUG(NAND_DEBUG_LEVEL0,"FTLInit Error: \n");\r
+               return -ENXIO;\r
+    }\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"FTLInit OK: \n");\r
+    mtd->size = (uint64_t)FtlGetCapacity(0xFF)*0x200;\r
+    //readflash modify rk28_partition_info\r
+    \r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"mtd->size: 0x%012llx\n",mtd->size);\r
+    mtd->oobsize = 0;\r
+    mtd->oobavail = 0;\r
+    mtd->ecclayout = 0;\r
+    mtd->erasesize = FlashGetPageSize()*0x200; //sector\r
+    mtd->writesize = FlashGetPageSize()*0x200;\r
+\r
+       // Fill in remaining MTD driver data \r
+       mtd->type = MTD_NANDFLASH;//MTD_RAM;//\r
+       mtd->flags = (MTD_WRITEABLE|MTD_NO_ERASE);//\r
+       mtd->erase = rk28xxnand_erase;\r
+       mtd->point = NULL;\r
+       mtd->unpoint = NULL;\r
+       mtd->read = rk28xxnand_read;\r
+       mtd->write = rk28xxnand_write;\r
+       mtd->read_oob = rk28xxnand_read_oob;\r
+       mtd->write_oob = rk28xxnand_write_oob;\r
+       mtd->panic_write = NULL;\r
+\r
+       mtd->sync = rk28xxnand_sync;\r
+       mtd->lock = rk28xxnand_lock;\r
+       mtd->unlock = rk28xxnand_unlock;\r
+       mtd->suspend = rk28xxnand_suspend;\r
+       mtd->resume = rk28xxnand_resume;\r
+       mtd->block_isbad = rk28xxnand_block_isbad;\r
+       mtd->block_markbad = rk28xxnand_block_markbad;\r
+       mtd->owner = THIS_MODULE;\r
+\r
+    page_mtd->size = FtlGetPageZoneCapacity();\r
+    //readflash modify rk28_partition_info\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"page_mtd->size: %x\n",page_mtd->size);\r
+    page_mtd->oobsize = 0;\r
+    page_mtd->oobavail = 0;\r
+    page_mtd->ecclayout = 0;\r
+    page_mtd->erasesize = FlashGetPageSize(); //sector\r
+    page_mtd->writesize = FlashGetPageSize();\r
+\r
+       // Fill in remaining MTD driver data \r
+       page_mtd->type = MTD_NANDFLASH;//MTD_RAM;//\r
+       page_mtd->flags = (MTD_WRITEABLE|MTD_NO_ERASE);//\r
+       page_mtd->erase = rk28xxnand_erase;\r
+       page_mtd->point = NULL;\r
+       page_mtd->unpoint = NULL;\r
+       page_mtd->read = rk28xxnand_page_read;\r
+       page_mtd->write = rk28xxnand_page_write;\r
+       page_mtd->read_oob = rk28xxnand_read_oob;\r
+       page_mtd->write_oob = rk28xxnand_write_oob;\r
+       page_mtd->panic_write = NULL;\r
+\r
+       page_mtd->sync = rk28xxnand_sync;\r
+       page_mtd->lock = rk28xxnand_lock;\r
+       page_mtd->unlock = rk28xxnand_unlock;\r
+       page_mtd->suspend = rk28xxnand_suspend;\r
+       page_mtd->resume = rk28xxnand_resume;\r
+       page_mtd->block_isbad = rk28xxnand_block_isbad;\r
+       page_mtd->block_markbad = rk28xxnand_block_markbad;\r
+       page_mtd->owner = THIS_MODULE;\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+/*\r
+ * CMY: Ôö¼ÓÁ˶ÔÃüÁîÐзÖÇøÐÅÏ¢µÄÖ§³Ö\r
+ *             ÈôcmdlineÓÐÌṩ·ÖÇøÐÅÏ¢£¬ÔòʹÓÃcmdlineµÄ·ÖÇøÐÅÏ¢½øÐзÖÇø\r
+ *             ÈôcmdlineûÓÐÌṩ·ÖÇøÐÅÏ¢£¬ÔòʹÓÃĬÈϵķÖÇøÐÅÏ¢(rk28_partition_info)½øÐзÖÇø\r
+ */\r
+\r
+#ifdef CONFIG_MTD_CMDLINE_PARTS\r
+const char *part_probes[] = { "cmdlinepart", NULL }; \r
+#endif \r
+\r
+static int rk28xxnand_add_partitions(struct rknand_info *nand_info)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"Enter rk28xxnand_add_partitions\n");\r
+#ifdef CONFIG_MTD_CMDLINE_PARTS\r
+    int num_partitions = 0; \r
+\r
+       // ´ÓÃüÁîÐнâÎö·ÖÇøµÄÐÅÏ¢\r
+    num_partitions = parse_mtd_partitions(&(nand_info->mtd), part_probes, &nand_info->parts, 0); \r
+    printk("num_partitions = %d\n",num_partitions);\r
+    if(num_partitions > 0) { \r
+       int i;\r
+       for (i = 0; i < num_partitions; i++) \r
+        {\r
+                   //printk(KERN_ERR"111 offset 0x%012llx  size :0x%012llx\n",nand_info->parts[i].offset, nand_info->parts[i].size);\r
+            nand_info->parts[i].offset *= 0x200;\r
+            nand_info->parts[i].size   *=0x200;\r
+                   //printk(KERN_ERR"offset 0x%012llx  size :0x%012llx\n",nand_info->parts[i].offset, nand_info->parts[i].size);\r
+       }\r
+        nand_info->parts[num_partitions - 1].size = nand_info->mtd.size - nand_info->parts[num_partitions - 1].offset;\r
+        \r
+#ifdef use_image\r
+               g_num_partitions = num_partitions;\r
+#endif\r
+               return add_mtd_partitions(&nand_info->mtd, nand_info->parts, num_partitions);\r
+    } \r
+#endif \r
+       // Èç¹ûÃüÁîÐÐûÓÐÌṩ·ÖÇøÐÅÏ¢£¬ÔòʹÓÃĬÈϵķÖÇøÐÅÏ¢\r
+       printk("parse_mtd_partitions\n");\r
+\r
+//     rk28_partition_info[1].size = nand_info->mtd.size - ((ROOTFS_PART_SIZE + PARA_PART_SIZE + KERNEL_PART_SIZE)*0x100000);\r
+//     rk28_partition_info[2].offset = rk28_partition_info[1].size + rk28_partition_info[1].offset;\r
+#ifdef use_image\r
+       g_num_partitions = sizeof(rk28_partition_info)/sizeof(struct mtd_partition);\r
+#endif\r
+       return add_mtd_partitions(&nand_info->mtd, rk28_partition_info, sizeof(rk28_partition_info)/sizeof(struct mtd_partition));//MAX_FLASH_PARTITION);\r
+}\r
+\r
+static int __devinit rk28xxnand_probe(struct platform_device *pdev)\r
+{\r
+       struct rknand_info *nand_info;\r
+    struct mtd_partition *parts;\r
+    int i;\r
+       struct resource *res = pdev->resource;\r
+       int err = 0;\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_probe: \n");\r
+       gpNandInfo = kzalloc(sizeof(struct rknand_info), GFP_KERNEL);\r
+       if (!gpNandInfo)\r
+               return -ENOMEM;\r
+    \r
+    nand_info = gpNandInfo;\r
+    \r
+       nand_info->mtd.name = dev_name(&pdev->dev);//pdev->dev.bus_id\r
+       nand_info->mtd.priv = &nand_info->rknand;\r
+       nand_info->mtd.owner = THIS_MODULE;\r
+    \r
+       nand_info->page_mtd.name = dev_name(&pdev->dev);//pdev->dev.bus_id\r
+       nand_info->page_mtd.priv = &nand_info->rknand;\r
+       nand_info->page_mtd.owner = THIS_MODULE;\r
+\r
+       if(rk28xxnand_init(nand_info))\r
+       {\r
+               err = -ENXIO;\r
+               goto  exit_free;\r
+       }\r
+       \r
+       /*{\r
+           char pbuf[512];\r
+           GetSNSectorInfo(pbuf);\r
+        printk("SN: %x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x",pbuf[2],pbuf[3],pbuf[4],pbuf[5],pbuf[6],pbuf[7],pbuf[8],pbuf[9],\r
+            pbuf[10],pbuf[11],pbuf[12],pbuf[13],pbuf[14],pbuf[15],pbuf[16],pbuf[17]);\r
+    } */  \r
+       \r
+       rk28xxnand_add_partitions(nand_info);\r
+    return 0;\r
+    \r
+    #if 0\r
+    nand_info->page_mtd.name = "pagecache";\r
+    add_mtd_device(&nand_info->page_mtd);\r
+    #else\r
+    //rk28_page_part_info[1].size = nand_info->page_mtd.size - rk28_page_part_info[0].size;\r
+    //add_mtd_partitions(&nand_info->page_mtd, rk28_page_part_info, 2);\r
+    #endif\r
+    \r
+#ifdef use_image\r
+    parts = nand_info->parts;\r
+    for(i=0;i<g_num_partitions;i++)\r
+    {\r
+        printk(">>> part[%d]: name=%s offset=0x%X\n", i, parts[i].name, parts[i].offset);\r
+        if(strcmp(parts[i].name,"cache") == 0)\r
+        {\r
+            SysImageWriteEndAdd = parts[i].offset;\r
+               printk(">>> SysImageWriteEndAdd=0x%X\n", SysImageWriteEndAdd);\r
+            break;\r
+        }\r
+    }\r
+#endif\r
+\r
+    FtlSetSysProtAddr(SysImageWriteEndAdd);\r
+       dev_set_drvdata(&pdev->dev, nand_info);\r
+\r
+       return 0;\r
+\r
+exit_free:\r
+       if(nand_info)\r
+       kfree(nand_info);\r
+\r
+       return err;\r
+}\r
+\r
+static int __devexit rknand_remove(struct device *dev)\r
+{\r
+       struct platform_device *pdev = to_platform_device(dev);\r
+       struct rknand_info *nand_info = dev_get_drvdata(&pdev->dev);\r
+       struct resource *res = pdev->resource;\r
+       unsigned long size = res->end - res->start + 1;\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xx_rknand_remove: \n");\r
+       dev_set_drvdata(&pdev->dev, NULL);\r
+\r
+       if (nand_info) {\r
+               if (nand_info->parts)\r
+                       del_mtd_partitions(&nand_info->mtd);\r
+               else\r
+                       del_mtd_device(&nand_info->mtd);\r
+\r
+               //rknand_release(&nand_info->mtd);\r
+               release_mem_region(res->start, size);           \r
+               kfree(nand_info);\r
+       }\r
+       return 0;\r
+}\r
+\r
+void rk28xxnand_shutdown(struct platform_device *pdev)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk28xxnand_shutdown\n");\r
+    //rknand_get_device(FL_UNVALID);\r
+    //FtlClose();\r
+    //rknand_release_device();\r
+}\r
+\r
+static struct platform_driver rknand_driver = {\r
+       .probe          = rk28xxnand_probe,\r
+       .remove         = rknand_remove,\r
+       .suspend        = rk28xxnand_suspend,\r
+       .resume         = rk28xxnand_resume,\r
+       .shutdown   = rk28xxnand_shutdown,\r
+       .driver         = {\r
+               .name   = DRIVER_NAME,\r
+               .owner  = THIS_MODULE,\r
+               //.bus          = &platform_bus_type,\r
+       },\r
+};\r
+\r
+\r
+MODULE_ALIAS(DRIVER_NAME);\r
+\r
+static int __init rknand_init(void)\r
+{\r
+       int ret;\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rknand_init: \n");\r
+       ret = platform_driver_register(&rknand_driver);\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"platform_driver_register:ret = %x \n",ret);\r
+       return ret;\r
+}\r
+\r
+static void __exit rknand_exit(void)\r
+{\r
+       NAND_DEBUG(NAND_DEBUG_LEVEL0,"rknand_exit: \n");\r
+    rknand_get_device(FL_UNVALID);\r
+    FtlClose();\r
+    rknand_release_device();\r
+    platform_driver_unregister(&rknand_driver);\r
+}\r
+\r
+module_init(rknand_init);\r
+module_exit(rknand_exit);\r
+\r
+\r
+#if 0//def CONFIG_rknand\r
+/*\r
+×¢²áÒ»¸ösys dev £¬ÔڹػúºÍ¸´Î»Ê±»Øµ÷£¬°Ñflash¹Ø¼üÐÅϢдµ½nand flashÖУ¬Ï´οª»úʱ¿ÉÒÔ¿ìËÙ¿ª»ú¡£\r
+*/\r
+\r
+#include <linux/sysdev.h>\r
+#include <linux/timer.h>\r
+\r
+static int rknand_sys_suspend(struct sys_device *dev, pm_message_t state)\r
+{\r
+       struct rknand_chip *nand_info = &gpNandInfo->rknand;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"...rknand_sys_suspend...\n");\r
+    extern void FtlCacheWriteBack(void);\r
+    nand_info->rknand_schedule_enable = 0;\r
+    if (nand_info->state == FL_READY)\r
+    {\r
+        nand_info->state = FL_WRITING;\r
+        FtlCacheWriteBack();\r
+        rknand_release_device();\r
+    }\r
+    else\r
+    {\r
+        nand_info->pFlashCallBack = FtlCacheWriteBack;\r
+    }  \r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"...rknand_sys_suspend done...\n");\r
+       return 0;\r
+\r
+}\r
+\r
+static int rknand_sys_resume(struct sys_device *dev)\r
+{\r
+       struct rknand_chip *nand_info = &gpNandInfo->rknand;\r
+    nand_info->rknand_schedule_enable = 1;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"...rknand_sys_resume...\n");\r
+       return 0;\r
+}\r
+\r
+static int rknand_sys_shutdown(struct sys_device *dev)\r
+{\r
+       struct rknand_chip *nand_info = &gpNandInfo->rknand;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"...rknand_sys_shutdown...\n");\r
+    nand_info->rknand_schedule_enable = 0;\r
+    \r
+    if (nand_info->state == FL_READY)\r
+    {\r
+        //rknand_get_device(FL_UNVALID);\r
+        nand_info->state = FL_UNVALID;\r
+        FtlClose();\r
+        rknand_release_device();\r
+    }\r
+    else\r
+    {//flash not ready,use call back\r
+        nand_info->pFlashCallBack = FtlClose;\r
+    } \r
+       return 0;\r
+}\r
+\r
+static struct sysdev_class rknand_sysclass = {\r
+       .name           = "rknand_sysdev",\r
+       .shutdown       = rknand_sys_shutdown,\r
+       .suspend        = rknand_sys_suspend,\r
+       .resume         = rknand_sys_resume,\r
+};\r
+\r
+static struct sys_device rknand_sysdevice = {\r
+       .id             = 0,\r
+       .cls            = &rknand_sysclass,\r
+};\r
+\r
+static int __init rknand_sys_init(void)\r
+{\r
+       int ret;\r
+    NAND_DEBUG(NAND_DEBUG_LEVEL0,"rknand_sys_init!!!!!!!!!!!!!!\n");\r
+       ret = sysdev_class_register(&rknand_sysclass);\r
+       if (ret == 0)\r
+               ret = sysdev_register(&rknand_sysdevice);\r
+       return ret;\r
+}\r
+\r
+device_initcall(rknand_sys_init);\r
+#endif\r
+\r
+\r
+MODULE_LICENSE("");\r
+MODULE_AUTHOR("ZYF <zyf@rock-chips.com>");\r
+MODULE_DESCRIPTION("FTL layer for SLC and MlC nand flash on RK28xx SDK boards");\r
+\r
+\r
diff --git a/drivers/mtd/rknand/typedef.h b/drivers/mtd/rknand/typedef.h
new file mode 100755 (executable)
index 0000000..0ec7570
--- /dev/null
@@ -0,0 +1,56 @@
+\r
+#ifndef        __TYPEDEF_H\r
+#define __TYPEDEF_H\r
+\r
+typedef volatile unsigned int       REG32;\r
+typedef volatile unsigned short        REG16;\r
+typedef volatile unsigned char         REG8;\r
+\r
+typedef int BOOLEAN;\r
+typedef BOOLEAN BOOL;\r
+\r
+#define        FALSE   0\r
+#define TRUE    (!FALSE)\r
+#define        NULL    0\r
+#define     OK                  0\r
+#define     ERROR               !0\r
+\r
+//typedef char * va_list; \r
+\r
+\r
+typedef unsigned int            uint32;\r
+typedef unsigned int                   UINT32;\r
+typedef unsigned short                 UINT16;\r
+typedef unsigned char                  UINT8;\r
+typedef int                                            INT32;\r
+typedef short                                  INT16;\r
+typedef char                                   INT8;\r
+\r
+typedef unsigned char                  INT8U;\r
+typedef signed char                    INT8S;\r
+typedef unsigned short                 INT16U;\r
+typedef signed short                   INT16S;\r
+typedef int                                    INT32S;\r
+typedef unsigned int                           INT32U;\r
+\r
+typedef unsigned long  L32U;\r
+typedef signed long  L32S;\r
+\r
+typedef unsigned char  BYTE;\r
+\r
+//typedef volatile unsigned int  data_t;\r
+//typedef volatile unsigned int* addr_t;\r
+\r
+typedef        void (*pFunc)(void);    //¶¨Ò庯ÊýÖ¸Õë, ÓÃÓÚµ÷Óþø¶ÔµØÖ·\r
+\r
+typedef                unsigned char           uint8;\r
+typedef                signed char                 int8;\r
+typedef                unsigned short      uint16;\r
+typedef                signed short        int16;\r
+typedef                signed long                     int32;\r
+typedef                unsigned long long      uint64;\r
+typedef                signed long long        int64;\r
+//typedef              unsigned char           bool;\r
+typedef     unsigned short      WCHAR;\r
+\r
+#endif  /*__TYPEDEF_H */\r
diff --git a/mkkrnlimg b/mkkrnlimg
new file mode 100755 (executable)
index 0000000..234f68d
Binary files /dev/null and b/mkkrnlimg differ