Two bug fixes of Denali NAND controller driver
Subsystems (2)
cover Two bug fixes of Denali NAND controller driver
Masahiro Yamada (2):
mtd: denali: fix NAND_CMD_PARAM command
mtd: denali: support NAND_CMD_RNDOUT command
drivers/mtd/nand/denali.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
Signature · 1 line
1.9.1
PATCH 1/2 mtd: denali: fix NAND_CMD_PARAM command
NAND_CMD_PARAM (0xEC) command is not working on the Denali NAND controller driver.
Unlike NAND_CMD_READID (0x90), when the NAND_CMD_PARAM command is followed by an address cycle, the target device goes busy. (R/B# is deasserted)
Wait until the parameter data are ready.
In addition, unnecessary clear_interrupts() should be removed.
---
drivers/mtd/nand/denali.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/mtd/nand/denali.c +3 -2
@@ -1059,9 +1059,8 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, addr =MODE_11 |BANK (denali->flash_bank);index_addr (denali, addr |0 , cmd);break ; -case NAND_CMD_PARAM : -clear_interrupts (denali);case NAND_CMD_READID : +case NAND_CMD_PARAM :reset_buf (denali);/* sometimes ManufactureId read from register is not right * e.g. some of Micron MT29F32G08QAA MLC NAND chips
@@ -1070,6 +1069,8 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, addr =MODE_11 |BANK (denali->flash_bank);index_addr (denali, addr |0 , cmd);index_addr (denali, addr |1 , col &0xFF ); +if (cmd ==NAND_CMD_PARAM ) +udelay (50 );break ;case NAND_CMD_READ0 :case NAND_CMD_SEQIN :
Signature · 1 line
1.9.1
PATCH 1/2 mtd: denali: fix NAND_CMD_PARAM command
Quoted 32 lines · Masahiro Yamada
NAND_CMD_PARAM(0xEC) command is not working on the Denali NAND controller driver.Unlike
NAND_CMD_READID(0x90), when theNAND_CMD_PARAMcommand is followed by an address cycle, the target device goes busy. (R/B# is deasserted)
Wait until the parameter data are ready.In addition, unnecessary
clear_interrupts()should be removed.Signed-off-by Masahiro Yamada <[email protected]>---
drivers/mtd/nand/denali.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/mtd/nand/denali.c +1
-2@@ -1059,9 +1059,8 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, addr =MODE_11 |BANK (denali->flash_bank);index_addr (denali, addr |0 , cmd);break ; -case NAND_CMD_PARAM : -clear_interrupts (denali);case NAND_CMD_READID : +case NAND_CMD_PARAM :reset_buf (denali);/* sometimes ManufactureId read from register is not right * e.g. some of Micron MT29F32G08QAA MLC NAND chips
drivers/mtd/nand/denali.c static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, · line 1076
Quoted 8 lines
drivers/mtd/nand/denali.c +2
-0@@ -1070,6 +1069,8 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, addr =MODE_11 |BANK (denali->flash_bank);index_addr (denali, addr |0 , cmd);index_addr (denali, addr |1 , col &0xFF ); +if (cmd ==NAND_CMD_PARAM ) +udelay (50 );break ;case NAND_CMD_READ0 :case NAND_CMD_SEQIN :
PATCH 2/2 mtd: denali: support NAND_CMD_RNDOUT command
In reply to Masahiro YamadaThe function nand_flash_detect_ext_param_page() requires NAND_CMD_RNDOUT command supported. It is necessary to detect some types of ONFi-compliant devices. Without it, the error message "unsupported command received 0x5" is shown.
Let's support this command on the Denali NAND controller driver.
---
drivers/mtd/nand/denali.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/mtd/nand/denali.c +7 -0
@@ -1072,6 +1072,13 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,if (cmd ==NAND_CMD_PARAM )udelay (50 );break ; +case NAND_CMD_RNDOUT : + addr =MODE_11 |BANK (denali->flash_bank); +index_addr (denali, addr |0 , cmd); +index_addr (denali, addr |1 , col &0xFF ); +index_addr (denali, addr |1 , col >>8 ); +index_addr (denali, addr |0 ,NAND_CMD_RNDOUTSTART ); +break ;case NAND_CMD_READ0 :case NAND_CMD_SEQIN : denali->page = page;
Signature · 1 line
1.9.1
PATCH 2/2 mtd: denali: support NAND_CMD_RNDOUT command
Quoted 21 lines · Masahiro Yamada
The function
nand_flash_detect_ext_param_page()requiresNAND_CMD_RNDOUTcommand supported. It is necessary to detect some types of ONFi-compliant devices. Without it, the error message "unsupported command received0x5" is shown.Let's support this command on the Denali NAND controller driver.
Signed-off-by Masahiro Yamada <[email protected]>---
drivers/mtd/nand/denali.c | 7 +++++++ 1 file changed, 7 insertions(+)drivers/mtd/nand/denali.c +0
-0@@ -1072,6 +1072,13 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,if (cmd ==NAND_CMD_PARAM )udelay (50 );break ;
drivers/mtd/nand/denali.c static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, · line 1084
Quoted 10 lines
drivers/mtd/nand/denali.c +7
-0+case NAND_CMD_RNDOUT : + addr =MODE_11 |BANK (denali->flash_bank); +index_addr (denali, addr |0 , cmd); +index_addr (denali, addr |1 , col &0xFF ); +index_addr (denali, addr |1 , col >>8 ); +index_addr (denali, addr |0 ,NAND_CMD_RNDOUTSTART ); +break ;case NAND_CMD_READ0 :case NAND_CMD_SEQIN : denali->page = page;
PATCH 2/2 mtd: denali: support NAND_CMD_RNDOUT command
In reply to Masahiro YamadaQuoted 18 lines · Masahiro Yamada
The function
nand_flash_detect_ext_param_page()requiresNAND_CMD_RNDOUTcommand supported. It is necessary to detect some types of ONFi-compliant devices. Without it, the error message "unsupported command received0x5" is shown.Let's support this command on the Denali NAND controller driver.
Signed-off-by Masahiro Yamada <[email protected]>---
drivers/mtd/nand/denali.c | 7 +++++++ 1 file changed, 7 insertions(+)drivers/mtd/nand/denali.c +0
-0
drivers/mtd/nand/denali.c static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, · line 1081
Quoted 10 lines
drivers/mtd/nand/denali.c +7
-0@@ -1072,6 +1072,13 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,if (cmd ==NAND_CMD_PARAM )udelay (50 );break ; +case NAND_CMD_RNDOUT : + addr =MODE_11 |BANK (denali->flash_bank); +index_addr (denali, addr |0 , cmd); +index_addr (denali, addr |1 , col &0xFF ); +index_addr (denali, addr |1 , col >>8 ); +index_addr (denali, addr |0 ,NAND_CMD_RNDOUTSTART ); +break ;
This usage of RNDOUT is a regression for other drivers as well, such as fsl_ifc_nand... I really wish emulating a simple controller weren't the API used to talk to higher level drivers. :-(
-Scott