mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 09:12:08 +02:00
nand: Move the sub-page read support enable to a flag
Use a flag instead of a hard-coded macro so that sub-page reads can be enabled in other cases (such as on-die ecc). This is the same as a5ff4f102937a3492bca4a9ff0c341d78813414c in Linux Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
committed by
Scott Wood
parent
79da5e3d5d
commit
c788ecfdc3
@@ -1245,7 +1245,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
|
|||||||
if (unlikely(ops->mode == MTD_OOB_RAW))
|
if (unlikely(ops->mode == MTD_OOB_RAW))
|
||||||
ret = chip->ecc.read_page_raw(mtd, chip,
|
ret = chip->ecc.read_page_raw(mtd, chip,
|
||||||
bufpoi, page);
|
bufpoi, page);
|
||||||
else if (!aligned && NAND_SUBPAGE_READ(chip) && !oob)
|
else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
|
||||||
|
!oob)
|
||||||
ret = chip->ecc.read_subpage(mtd, chip,
|
ret = chip->ecc.read_subpage(mtd, chip,
|
||||||
col, bytes, bufpoi);
|
col, bytes, bufpoi);
|
||||||
else
|
else
|
||||||
@@ -1256,7 +1257,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
|
|||||||
|
|
||||||
/* Transfer not aligned data */
|
/* Transfer not aligned data */
|
||||||
if (!aligned) {
|
if (!aligned) {
|
||||||
if (!NAND_SUBPAGE_READ(chip) && !oob &&
|
if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
|
||||||
!(mtd->ecc_stats.failed - stats.failed))
|
!(mtd->ecc_stats.failed - stats.failed))
|
||||||
chip->pagebuf = realpage;
|
chip->pagebuf = realpage;
|
||||||
memcpy(buf, chip->buffers->databuf + col, bytes);
|
memcpy(buf, chip->buffers->databuf + col, bytes);
|
||||||
@@ -3150,6 +3151,10 @@ int nand_scan_tail(struct mtd_info *mtd)
|
|||||||
/* Invalidate the pagebuffer reference */
|
/* Invalidate the pagebuffer reference */
|
||||||
chip->pagebuf = -1;
|
chip->pagebuf = -1;
|
||||||
|
|
||||||
|
/* Large page NAND with SOFT_ECC should support subpage reads */
|
||||||
|
if ((chip->ecc.mode == NAND_ECC_SOFT) && (chip->page_shift > 9))
|
||||||
|
chip->options |= NAND_SUBPAGE_READ;
|
||||||
|
|
||||||
/* Fill in remaining MTD driver data */
|
/* Fill in remaining MTD driver data */
|
||||||
mtd->type = MTD_NANDFLASH;
|
mtd->type = MTD_NANDFLASH;
|
||||||
mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
|
mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
|
||||||
|
@@ -194,6 +194,9 @@ typedef enum {
|
|||||||
/* Device behaves just like nand, but is readonly */
|
/* Device behaves just like nand, but is readonly */
|
||||||
#define NAND_ROM 0x00000800
|
#define NAND_ROM 0x00000800
|
||||||
|
|
||||||
|
/* Device supports subpage reads */
|
||||||
|
#define NAND_SUBPAGE_READ 0x00001000
|
||||||
|
|
||||||
/* Options valid for Samsung large page devices */
|
/* Options valid for Samsung large page devices */
|
||||||
#define NAND_SAMSUNG_LP_OPTIONS \
|
#define NAND_SAMSUNG_LP_OPTIONS \
|
||||||
(NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
|
(NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
|
||||||
@@ -203,9 +206,7 @@ typedef enum {
|
|||||||
#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
|
#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
|
||||||
#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
|
#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
|
||||||
#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
|
#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
|
||||||
/* Large page NAND with SOFT_ECC should support subpage reads */
|
#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
|
||||||
#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
|
|
||||||
&& (chip->page_shift > 9))
|
|
||||||
|
|
||||||
/* Non chip related options */
|
/* Non chip related options */
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user