On 12/06/2011 09:55 PM, LiuShuo wrote:The function nand_do_write_ops() in nandbase.c is a Nand internal interface.ä 2011å12æ07æ 08:09, Scott Wood åé:It should not be a special image, and there should be some way to markOn 12/03/2011 10:31 PM, shuo.liu@xxxxxxxxxxxxx wrote:This patch has been ported to uboot now, I think we can make a specialFrom: Liu Shuo<shuo.liu@xxxxxxxxxxxxx>What is the plan for bad block marker migration?
Freescale FCM controller has a 2K size limitation of buffer RAM. In
order
to support the Nand flash chip whose page size is larger than 2K bytes,
we read/write 2k data repeatedly by issuing FIR_OP_RB/FIR_OP_WB and save
them to a large buffer.
Signed-off-by: Liu Shuo<shuo.liu@xxxxxxxxxxxxx>
---
v3:
-remove page_size of struct fsl_elbc_mtd.
-do a oob write by NAND_CMD_RNDIN.
drivers/mtd/nand/fsl_elbc_nand.c | 243
++++++++++++++++++++++++++++++++++----
1 files changed, 218 insertions(+), 25 deletions(-)
uboot image for bad
block marker migration when first use the chip.
that the migration has happened. Even if we do the migration in U-Boot,
Linux could check for the marker and if absent, disallow access and tell
the user to run the migration tool.
Right. column is start, and index is end + 1. We have the bounds ofI have considered this case, but I don't think it is useful.@@ -473,13 +568,72 @@ static void fsl_elbc_cmdfunc(struct mtd_infoWe need to limit ourselves to the regions that have actually been
*mtd, unsigned int command,
* write so the HW generates the ECC.
*/
if (elbc_fcm_ctrl->oob || elbc_fcm_ctrl->column != 0 ||
- elbc_fcm_ctrl->index != mtd->writesize + mtd->oobsize)
- out_be32(&lbc->fbcr,
- elbc_fcm_ctrl->index - elbc_fcm_ctrl->column);
- else
+ elbc_fcm_ctrl->index != mtd->writesize + mtd->oobsize) {
+ if (elbc_fcm_ctrl->oob&& mtd->writesize> 2048) {
+ out_be32(&lbc->fbcr, 64);
+ } else {
+ out_be32(&lbc->fbcr, elbc_fcm_ctrl->index
+ - elbc_fcm_ctrl->column);
+ }
written to in the buffer. fbcr needs to be set separately for first and
last subpages, with intermediate subpages having 0, 64, or 2112 as
appropriate. Subpages that are entirely before column or entirely after
column + index should be skipped.
1.There isn't a 'length' parameter in driver interface, although we
can get it from 'index - column'.
what has been written.
2.To see nand_do_write_oob() in nand_base.c, it fill '0xff' toDo we really want to assume that that's what it will always do?
entire oob area first and write the user data by nand_fill_oob(), then
call ecc.write_oob (default is nand_write_oob_std()).
And if we do want to make such assumptions, we could rip out all usage
of index/column here, and just handle "oob" and "full page" cases.
-Scott