@ -83,37 +83,35 @@ static void nfc_nand_command(unsigned short command)
nfc_wait_ready ( ) ;
}
static void nfc_nand_address ( unsigned short address )
{
writew ( address , & nfc - > flash_addr ) ;
writew ( NFC_ADDR , & nfc - > config2 ) ;
nfc_wait_ready ( ) ;
}
static void nfc_nand_page_address ( unsigned int page_address )
{
unsigned int page_count ;
writew ( 0x00 , & nfc - > flash_addr ) ;
writew ( NFC_ADDR , & nfc - > config2 ) ;
nfc_wait_ready ( ) ;
nfc_nand_address ( 0x00 ) ;
/* code only for large page flash */
if ( CONFIG_SYS_NAND_PAGE_SIZE > 512 ) {
writew ( 0x00 , & nfc - > flash_addr ) ;
writew ( NFC_ADDR , & nfc - > config2 ) ;
nfc_wait_ready ( ) ;
}
if ( CONFIG_SYS_NAND_PAGE_SIZE > 512 )
nfc_nand_address ( 0x00 ) ;
page_count = CONFIG_SYS_NAND_SIZE / CONFIG_SYS_NAND_PAGE_SIZE ;
if ( page_address < = page_count ) {
page_count - - ; /* transform 0x01000000 to 0x00ffffff */
do {
writew ( page_address & 0xff , & nfc - > flash_addr ) ;
writew ( NFC_ADDR , & nfc - > config2 ) ;
nfc_wait_ready ( ) ;
nfc_nand_address ( page_address & 0xff ) ;
page_address = page_address > > 8 ;
page_count = page_count > > 8 ;
} while ( page_count ) ;
}
writew ( 0x00 , & nfc - > flash_addr ) ;
writew ( NFC_ADDR , & nfc - > config2 ) ;
nfc_wait_ready ( ) ;
nfc_nand_address ( 0x00 ) ;
}
static void nfc_nand_data_output ( void )
@ -149,12 +147,8 @@ static int nfc_nand_check_ecc(void)
return readw ( & nfc - > ecc_status_result ) ;
}
static int nfc _read_page( unsigned int page_address , unsigned char * buf )
static void nfc_nand _read_page( unsigned int page_address )
{
int i ;
u32 * src ;
u32 * dst ;
writew ( 0 , & nfc - > buf_addr ) ; /* read in first 0 buffer */
nfc_nand_command ( NAND_CMD_READ0 ) ;
nfc_nand_page_address ( page_address ) ;
@ -163,6 +157,15 @@ static int nfc_read_page(unsigned int page_address, unsigned char *buf)
nfc_nand_command ( NAND_CMD_READSTART ) ;
nfc_nand_data_output ( ) ; /* fill the main buffer 0 */
}
static int nfc_read_page ( unsigned int page_address , unsigned char * buf )
{
int i ;
u32 * src ;
u32 * dst ;
nfc_nand_read_page ( page_address ) ;
if ( nfc_nand_check_ecc ( ) )
return - 1 ;
@ -188,14 +191,7 @@ static int is_badblock(int pagenumber)
/* Check the first two pages for bad block markers */
for ( page = pagenumber ; page < pagenumber + 2 ; page + + ) {
writew ( 0 , & nfc - > buf_addr ) ; /* read in first 0 buffer */
nfc_nand_command ( NAND_CMD_READ0 ) ;
nfc_nand_page_address ( page ) ;
if ( CONFIG_SYS_NAND_PAGE_SIZE > 512 )
nfc_nand_command ( NAND_CMD_READSTART ) ;
nfc_nand_data_output ( ) ; /* fill the main buffer 0 */
nfc_nand_read_page ( page ) ;
src = ( u32 * ) & nfc - > spare_area [ 0 ] [ 0 ] ;