X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=drivers%2Fmtd%2Frknand%2Frknand_base_ko.c;h=483e8a977102bbcff3aff57b2e37dba17d8e7653;hb=677ea8d595b6d546394b43a49794d6e9bca1f73d;hp=71e59bcb49d8aba2d3345f95bf87a899a1b76e78;hpb=971a633cd7476e9c176f2dfbd73676a36f8e0798;p=firefly-linux-kernel-4.4.55.git diff --git a/drivers/mtd/rknand/rknand_base_ko.c b/drivers/mtd/rknand/rknand_base_ko.c old mode 100644 new mode 100755 index 71e59bcb49d8..483e8a977102 --- a/drivers/mtd/rknand/rknand_base_ko.c +++ b/drivers/mtd/rknand/rknand_base_ko.c @@ -25,7 +25,7 @@ #define DRIVER_NAME "rk29xxnand" -const char rknand_base_version[] = "rknand_base.c version: 4.26 20110610"; +const char rknand_base_version[] = "rknand_base.c version: 4.30 20111009"; #define NAND_DEBUG_LEVEL0 0 #define NAND_DEBUG_LEVEL1 1 #define NAND_DEBUG_LEVEL2 2 @@ -58,8 +58,12 @@ static const int s_debug = 0; #define NANDPROC_ROOT NULL #endif +#define DATA_LEN (1024*8*2/4) //Êý¾Ý¿éµ¥Î»word +#define SPARE_LEN (32*8*2/4) //УÑéÊý¾Ý³¤¶È +#define PAGE_LEN (DATA_LEN+SPARE_LEN) //ÿ¸öÊý¾Ýµ¥Î»µÄ³¤¶È #define MAX_BUFFER_SIZE (long)(2048 * 8) //sector long grknand_buf[MAX_BUFFER_SIZE * 512/4] __attribute__((aligned(4096))); +long grknand_dma_buf[PAGE_LEN*4*5] __attribute__((aligned(4096))); static struct proc_dir_entry *my_proc_entry; extern int rkNand_proc_ftlread(char *page); @@ -113,7 +117,8 @@ static int rk28xxnand_read(struct mtd_info *mtd, loff_t from, size_t len, int ret = 0; int sector = len>>9; int LBA = (int)(from>>9); - //printk("rk28xxnand_read: from=%x,len=%x,\n",(int)from,len); + //if(rknand_debug) + // printk("rk28xxnand_read: from=%x,sector=%x,\n",(int)LBA,sector); if(sector && gpNandInfo->ftl_read) { ret = gpNandInfo->ftl_read(LBA, sector, buf); @@ -129,7 +134,8 @@ static int rk28xxnand_write(struct mtd_info *mtd, loff_t from, size_t len, int sector = len>>9; int LBA = (int)(from>>9); //printk("*"); - //printk(KERN_NOTICE "write: from=%lx,len=%x\n",(int)LBA,sector); + //if(rknand_debug) + // printk(KERN_NOTICE "write: from=%lx,sector=%x\n",(int)LBA,sector); //printk_write_log(LBA,sector,buf); if(sector && gpNandInfo->ftl_write)// cmy { @@ -203,7 +209,7 @@ char GetChipSectorInfo(char * pbuf) int GetParamterInfo(char * pbuf , int len) { - int ret = -1; + int ret = -1; int sector = (len)>>9; int LBA = 0; if(sector && gpNandInfo->ftl_read) @@ -213,6 +219,18 @@ int GetParamterInfo(char * pbuf , int len) return ret?-1:(sector<<9); } +int GetflashDataByLba(int lba,char * pbuf , int len) +{ + int ret = -1; + int sector = (len)>>9; + int LBA = lba; + if(sector && gpNandInfo->ftl_read) + { + ret = gpNandInfo->ftl_read(LBA, sector, pbuf); + } + return ret?-1:(sector<<9); +} + static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs) { @@ -263,7 +281,7 @@ static int rk28xxnand_init(struct rknand_info *nand_info) return 0; } - + /* * CMY: Ôö¼ÓÁ˶ÔÃüÁîÐзÖÇøÐÅÏ¢µÄÖ§³Ö * ÈôcmdlineÓÐÌṩ·ÖÇøÐÅÏ¢£¬ÔòʹÓÃcmdlineµÄ·ÖÇøÐÅÏ¢½øÐзÖÇø @@ -346,8 +364,9 @@ static int rknand_probe(struct platform_device *pdev) memset(gpNandInfo,0,sizeof(struct rknand_info)); gpNandInfo->bufSize = MAX_BUFFER_SIZE * 512; - gpNandInfo->pbuf = grknand_buf; - + gpNandInfo->pbuf = (char *)grknand_buf; + gpNandInfo->pdmaBuf = (char *)grknand_dma_buf; + //printk(" gpNandInfo->pdmaBuf=0x%x\n", gpNandInfo->pdmaBuf); #ifdef CONFIG_MTD_EMMC_CLK_POWER_SAVE gpNandInfo->emmc_clk_power_save_en = 1; #endif