Merge remote-tracking branch 'remotes/aosp/android-3.0' into develop-3.0
[firefly-linux-kernel-4.4.55.git] / drivers / mtd / rknand / rknand_base_ko.c
index 74d486e31e2c1f32bdcf1d5141a84d272b9be0e8..483e8a977102bbcff3aff57b2e37dba17d8e7653 100755 (executable)
@@ -25,7 +25,7 @@
 \r
 \r
 #define DRIVER_NAME    "rk29xxnand"\r
-const char rknand_base_version[] = "rknand_base.c version: 4.26 20110610";\r
+const char rknand_base_version[] = "rknand_base.c version: 4.30 20111009";\r
 #define NAND_DEBUG_LEVEL0 0\r
 #define NAND_DEBUG_LEVEL1 1\r
 #define NAND_DEBUG_LEVEL2 2\r
@@ -58,8 +58,12 @@ static const int s_debug = 0;
 #define NANDPROC_ROOT  NULL\r
 #endif\r
 \r
+#define     DATA_LEN            (1024*8*2/4)              //Êý¾Ý¿éµ¥Î»word\r
+#define     SPARE_LEN           (32*8*2/4)               //УÑéÊý¾Ý³¤¶È\r
+#define     PAGE_LEN            (DATA_LEN+SPARE_LEN)    //ÿ¸öÊý¾Ýµ¥Î»µÄ³¤¶È\r
 #define MAX_BUFFER_SIZE     (long)(2048 * 8) //sector\r
 long grknand_buf[MAX_BUFFER_SIZE * 512/4] __attribute__((aligned(4096)));\r
+long grknand_dma_buf[PAGE_LEN*4*5] __attribute__((aligned(4096)));\r
 \r
 static struct proc_dir_entry *my_proc_entry;\r
 extern int rkNand_proc_ftlread(char *page);\r
@@ -113,7 +117,8 @@ static int rk28xxnand_read(struct mtd_info *mtd, loff_t from, size_t len,
        int ret = 0;\r
        int sector = len>>9;\r
        int LBA = (int)(from>>9);\r
-    //printk("rk28xxnand_read: from=%x,len=%x,\n",(int)from,len);\r
+       //if(rknand_debug)\r
+    //   printk("rk28xxnand_read: from=%x,sector=%x,\n",(int)LBA,sector);\r
     if(sector && gpNandInfo->ftl_read)\r
     {\r
                ret = gpNandInfo->ftl_read(LBA, sector, buf);\r
@@ -129,7 +134,8 @@ static int rk28xxnand_write(struct mtd_info *mtd, loff_t from, size_t len,
        int sector = len>>9;\r
        int LBA = (int)(from>>9);\r
        //printk("*");\r
-    //printk(KERN_NOTICE "write: from=%lx,len=%x\n",(int)LBA,sector);\r
+       //if(rknand_debug)\r
+    //    printk(KERN_NOTICE "write: from=%lx,sector=%x\n",(int)LBA,sector);\r
     //printk_write_log(LBA,sector,buf);\r
        if(sector && gpNandInfo->ftl_write)// cmy\r
        {\r
@@ -201,6 +207,31 @@ char GetChipSectorInfo(char * pbuf)
     return 0;\r
 }\r
 \r
+int  GetParamterInfo(char * pbuf , int len)\r
+{\r
+    int ret = -1;\r
+       int sector = (len)>>9;\r
+       int LBA = 0;\r
+       if(sector && gpNandInfo->ftl_read)\r
+       {\r
+               ret = gpNandInfo->ftl_read(LBA, sector, pbuf);\r
+       }\r
+       return ret?-1:(sector<<9);\r
+}\r
+\r
+int  GetflashDataByLba(int lba,char * pbuf , int len)\r
+{\r
+    int ret = -1;\r
+       int sector = (len)>>9;\r
+       int LBA = lba;\r
+       if(sector && gpNandInfo->ftl_read)\r
+       {\r
+               ret = gpNandInfo->ftl_read(LBA, sector, pbuf);\r
+       }\r
+       return ret?-1:(sector<<9);\r
+}\r
+\r
+\r
 static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
 {\r
        return 0;\r
@@ -333,8 +364,9 @@ static int rknand_probe(struct platform_device *pdev)
     memset(gpNandInfo,0,sizeof(struct rknand_info));\r
 \r
     gpNandInfo->bufSize = MAX_BUFFER_SIZE * 512;\r
-    gpNandInfo->pbuf = grknand_buf;\r
-\r
+    gpNandInfo->pbuf = (char *)grknand_buf;\r
+    gpNandInfo->pdmaBuf = (char *)grknand_dma_buf;\r
+    //printk(" gpNandInfo->pdmaBuf=0x%x\n",  gpNandInfo->pdmaBuf); \r
 #ifdef CONFIG_MTD_EMMC_CLK_POWER_SAVE\r
     gpNandInfo->emmc_clk_power_save_en = 1;\r
 #endif\r