@ -367,7 +367,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
this - > write_word ( value ,
this - > base + ONENAND_REG_START_ADDRESS2 ) ;
if ( ONENAND_IS_MLC ( this ) )
if ( ONENAND_IS_4KB_PAGE ( this ) )
ONENAND_SET_BUFFERRAM0 ( this ) ;
else
/* Switch to the next data buffer */
@ -395,7 +395,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
case FLEXONENAND_CMD_RECOVER_LSB :
case ONENAND_CMD_READ :
case ONENAND_CMD_READOOB :
if ( ONENAND_IS_MLC ( this ) )
if ( ONENAND_IS_4KB_PAGE ( this ) )
dataram = ONENAND_SET_BUFFERRAM0 ( this ) ;
else
dataram = ONENAND_SET_NEXT_BUFFERRAM ( this ) ;
@ -893,7 +893,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
while ( ! ret ) {
/* If there is more to load then start next load */
from + = thislen ;
if ( ! ONENAND_IS_MLC ( this ) & & read + thislen < len ) {
if ( ! ONENAND_IS_4KB_PAGE ( this ) & & read + thislen < len ) {
this - > main_buf = buf + thislen ;
this - > command ( mtd , ONENAND_CMD_READ , from , writesize ) ;
/*
@ -927,7 +927,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
oobcolumn = 0 ;
}
if ( ONENAND_IS_MLC ( this ) & & ( read + thislen < len ) ) {
if ( ONENAND_IS_4KB_PAGE ( this ) & & ( read + thislen < len ) ) {
this - > command ( mtd , ONENAND_CMD_READ , from , writesize ) ;
ret = this - > wait ( mtd , FL_READING ) ;
if ( unlikely ( ret ) )
@ -944,13 +944,13 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
/* Set up for next read from bufferRAM */
if ( unlikely ( boundary ) )
this - > write_word ( ONENAND_DDP_CHIP1 , this - > base + ONENAND_REG_START_ADDRESS2 ) ;
if ( ! ONENAND_IS_MLC ( this ) )
if ( ! ONENAND_IS_4KB_PAGE ( this ) )
ONENAND_SET_NEXT_BUFFERRAM ( this ) ;
buf + = thislen ;
thislen = min_t ( int , writesize , len - read ) ;
column = 0 ;
if ( ! ONENAND_IS_MLC ( this ) ) {
if ( ! ONENAND_IS_4KB_PAGE ( this ) ) {
/* Now wait for load */
ret = this - > wait ( mtd , FL_READING ) ;
onenand_update_bufferram ( mtd , from , ! ret ) ;
@ -1024,7 +1024,8 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from,
stats = mtd - > ecc_stats ;
readcmd = ONENAND_IS_MLC ( this ) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
readcmd = ONENAND_IS_4KB_PAGE ( this ) ?
ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
while ( read < len ) {
thislen = oobsize - column ;
@ -1202,7 +1203,8 @@ int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
MTDDEBUG ( MTD_DEBUG_LEVEL3 , " onenand_bbt_read_oob: from = 0x%08x, len = %zi \n " , ( unsigned int ) from , len ) ;
readcmd = ONENAND_IS_MLC ( this ) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
readcmd = ONENAND_IS_4KB_PAGE ( this ) ?
ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
/* Initialize return value */
ops - > oobretlen = 0 ;
@ -1271,7 +1273,8 @@ static int onenand_verify_oob(struct mtd_info *mtd, const u_char *buf, loff_t to
u_char * oob_buf = this - > oob_buf ;
int status , i , readcmd ;
readcmd = ONENAND_IS_MLC ( this ) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
readcmd = ONENAND_IS_4KB_PAGE ( this ) ?
ONENAND_CMD_READ : ONENAND_CMD_READOOB ;
this - > command ( mtd , readcmd , to , mtd - > oobsize ) ;
onenand_update_bufferram ( mtd , to , 0 ) ;
@ -1560,7 +1563,8 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
oobbuf = this - > oob_buf ;
oobcmd = ONENAND_IS_MLC ( this ) ? ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB ;
oobcmd = ONENAND_IS_4KB_PAGE ( this ) ?
ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB ;
/* Loop until all data write */
while ( written < len ) {
@ -1577,7 +1581,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
memcpy ( oobbuf + column , buf , thislen ) ;
this - > write_bufferram ( mtd , 0 , ONENAND_SPARERAM , oobbuf , 0 , mtd - > oobsize ) ;
if ( ONENAND_IS_MLC ( this ) ) {
if ( ONENAND_IS_4KB_PAGE ( this ) ) {
/* Set main area of DataRAM to 0xff*/
memset ( this - > page_buf , 0xff , mtd - > writesize ) ;
this - > write_bufferram ( mtd , 0 , ONENAND_DATARAM ,
@ -2140,7 +2144,10 @@ static void onenand_check_features(struct mtd_info *mtd)
/* Lock scheme */
switch ( density ) {
case ONENAND_DEVICE_DENSITY_4Gb :
this - > options | = ONENAND_HAS_2PLANE ;
if ( ONENAND_IS_DDP ( this ) )
this - > options | = ONENAND_HAS_2PLANE ;
else
this - > options | = ONENAND_HAS_4KB_PAGE ;
case ONENAND_DEVICE_DENSITY_2Gb :
/* 2Gb DDP don't have 2 plane */
@ -2162,6 +2169,9 @@ static void onenand_check_features(struct mtd_info *mtd)
}
if ( ONENAND_IS_MLC ( this ) )
this - > options | = ONENAND_HAS_4KB_PAGE ;
if ( ONENAND_IS_4KB_PAGE ( this ) )
this - > options & = ~ ONENAND_HAS_2PLANE ;
if ( FLEXONENAND ( this ) ) {
@ -2175,6 +2185,9 @@ static void onenand_check_features(struct mtd_info *mtd)
printk ( KERN_DEBUG " Chip support all block unlock \n " ) ;
if ( this - > options & ONENAND_HAS_2PLANE )
printk ( KERN_DEBUG " Chip has 2 plane \n " ) ;
if ( this - > options & ONENAND_HAS_4KB_PAGE )
printk ( KERN_DEBUG " Chip has 4KiB pagesize \n " ) ;
}
/**
@ -2580,6 +2593,9 @@ int onenand_probe(struct mtd_info *mtd)
this - > device_id = dev_id ;
this - > version_id = ver_id ;
/* Check OneNAND features */
onenand_check_features ( mtd ) ;
density = onenand_get_density ( dev_id ) ;
if ( FLEXONENAND ( this ) ) {
this - > dies = ONENAND_IS_DDP ( this ) ? 2 : 1 ;
@ -2602,7 +2618,7 @@ int onenand_probe(struct mtd_info *mtd)
mtd - > writesize =
this - > read_word ( this - > base + ONENAND_REG_DATA_BUFFER_SIZE ) ;
/* We use the full BufferRAM */
if ( ONENAND_IS_MLC ( this ) )
if ( ONENAND_IS_4KB_PAGE ( this ) )
mtd - > writesize < < = 1 ;
mtd - > oobsize = mtd - > writesize > > 5 ;
@ -2633,9 +2649,6 @@ int onenand_probe(struct mtd_info *mtd)
else
mtd - > size = this - > chipsize ;
/* Check OneNAND features */
onenand_check_features ( mtd ) ;
mtd - > flags = MTD_CAP_NANDFLASH ;
mtd - > erase = onenand_erase ;
mtd - > read = onenand_read ;