* [U-Boot] [PATCH 1/2] ubi: Only read the actual size of the VID header
@ 2012-11-01 22:49 Joe Hershberger
2012-11-01 22:49 ` [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
2012-11-05 16:46 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
0 siblings, 2 replies; 8+ messages in thread
From: Joe Hershberger @ 2012-11-01 22:49 UTC (permalink / raw)
To: u-boot
If sub-page reads are supported, this will save reading unneeded data
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
---
drivers/mtd/ubi/io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
index 8423894..23660e3 100644
--- a/drivers/mtd/ubi/io.c
+++ b/drivers/mtd/ubi/io.c
@@ -916,7 +916,7 @@ int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
p = (char *)vid_hdr - ubi->vid_hdr_shift;
err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
- ubi->vid_hdr_alsize);
+ UBI_VID_HDR_SIZE);
if (err) {
if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
return err;
--
1.7.11.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag
2012-11-01 22:49 [U-Boot] [PATCH 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
@ 2012-11-01 22:49 ` Joe Hershberger
2012-11-02 22:41 ` Scott Wood
2012-11-05 16:46 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
1 sibling, 1 reply; 8+ messages in thread
From: Joe Hershberger @ 2012-11-01 22:49 UTC (permalink / raw)
To: u-boot
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).
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
---
drivers/mtd/nand/nand_base.c | 9 +++++++--
include/linux/mtd/nand.h | 7 ++++---
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 71f5027..4f2963b 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1245,7 +1245,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
if (unlikely(ops->mode == MTD_OOB_RAW))
ret = chip->ecc.read_page_raw(mtd, chip,
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,
col, bytes, bufpoi);
else
@@ -1256,7 +1257,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
/* Transfer not aligned data */
if (!aligned) {
- if (!NAND_SUBPAGE_READ(chip) && !oob &&
+ if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
!(mtd->ecc_stats.failed - stats.failed))
chip->pagebuf = realpage;
memcpy(buf, chip->buffers->databuf + col, bytes);
@@ -3149,6 +3150,10 @@ int nand_scan_tail(struct mtd_info *mtd)
/* Invalidate the pagebuffer reference */
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 */
mtd->type = MTD_NANDFLASH;
mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index f63e04b..e9e9045 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -194,6 +194,9 @@ typedef enum {
/* Device behaves just like nand, but is readonly */
#define NAND_ROM 0x00000800
+/* Device supports subpage reads */
+#define NAND_SUBPAGE_READ 0x00001000
+
/* Options valid for Samsung large page devices */
#define NAND_SAMSUNG_LP_OPTIONS \
(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_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
-/* Large page NAND with SOFT_ECC should support subpage reads */
-#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
- && (chip->page_shift > 9))
+#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
/* Non chip related options */
/*
--
1.7.11.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag
2012-11-01 22:49 ` [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
@ 2012-11-02 22:41 ` Scott Wood
0 siblings, 0 replies; 8+ messages in thread
From: Scott Wood @ 2012-11-02 22:41 UTC (permalink / raw)
To: u-boot
On 11/01/2012 05:49:29 PM, Joe Hershberger wrote:
> 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).
>
> Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
> ---
> drivers/mtd/nand/nand_base.c | 9 +++++++--
> include/linux/mtd/nand.h | 7 ++++---
> 2 files changed, 11 insertions(+), 5 deletions(-)
This looks a lot like commit a5ff4f102937a3492bca4a9ff0c341d78813414c
in Linux, but I don't see any attribution...
-Scott
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header
2012-11-01 22:49 [U-Boot] [PATCH 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
2012-11-01 22:49 ` [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
@ 2012-11-05 16:46 ` Joe Hershberger
2012-11-05 16:46 ` [U-Boot] [PATCH v2 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
2012-11-06 8:19 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Stefan Roese
1 sibling, 2 replies; 8+ messages in thread
From: Joe Hershberger @ 2012-11-05 16:46 UTC (permalink / raw)
To: u-boot
If sub-page reads are supported, this will save reading unneeded data
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
---
drivers/mtd/ubi/io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
index 8423894..23660e3 100644
--- a/drivers/mtd/ubi/io.c
+++ b/drivers/mtd/ubi/io.c
@@ -916,7 +916,7 @@ int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
p = (char *)vid_hdr - ubi->vid_hdr_shift;
err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
- ubi->vid_hdr_alsize);
+ UBI_VID_HDR_SIZE);
if (err) {
if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
return err;
--
1.7.11.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v2 2/2] nand: Move the sub-page read support enable to a flag
2012-11-05 16:46 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
@ 2012-11-05 16:46 ` Joe Hershberger
2012-11-16 0:10 ` [U-Boot] [U-Boot, v2, " Scott Wood
2012-11-06 8:19 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Stefan Roese
1 sibling, 1 reply; 8+ messages in thread
From: Joe Hershberger @ 2012-11-05 16:46 UTC (permalink / raw)
To: u-boot
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>
---
Changes in v2:
- Added Linux commit ID to commit message
drivers/mtd/nand/nand_base.c | 9 +++++++--
include/linux/mtd/nand.h | 7 ++++---
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 71f5027..4f2963b 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1245,7 +1245,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
if (unlikely(ops->mode == MTD_OOB_RAW))
ret = chip->ecc.read_page_raw(mtd, chip,
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,
col, bytes, bufpoi);
else
@@ -1256,7 +1257,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
/* Transfer not aligned data */
if (!aligned) {
- if (!NAND_SUBPAGE_READ(chip) && !oob &&
+ if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
!(mtd->ecc_stats.failed - stats.failed))
chip->pagebuf = realpage;
memcpy(buf, chip->buffers->databuf + col, bytes);
@@ -3149,6 +3150,10 @@ int nand_scan_tail(struct mtd_info *mtd)
/* Invalidate the pagebuffer reference */
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 */
mtd->type = MTD_NANDFLASH;
mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index f63e04b..e9e9045 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -194,6 +194,9 @@ typedef enum {
/* Device behaves just like nand, but is readonly */
#define NAND_ROM 0x00000800
+/* Device supports subpage reads */
+#define NAND_SUBPAGE_READ 0x00001000
+
/* Options valid for Samsung large page devices */
#define NAND_SAMSUNG_LP_OPTIONS \
(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_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
-/* Large page NAND with SOFT_ECC should support subpage reads */
-#define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
- && (chip->page_shift > 9))
+#define NAND_HAS_SUBPAGE_READ(chip) ((chip->options & NAND_SUBPAGE_READ))
/* Non chip related options */
/*
--
1.7.11.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header
2012-11-05 16:46 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
2012-11-05 16:46 ` [U-Boot] [PATCH v2 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
@ 2012-11-06 8:19 ` Stefan Roese
2012-11-06 23:47 ` Joe Hershberger
1 sibling, 1 reply; 8+ messages in thread
From: Stefan Roese @ 2012-11-06 8:19 UTC (permalink / raw)
To: u-boot
On 11/05/2012 05:46 PM, Joe Hershberger wrote:
> If sub-page reads are supported, this will save reading unneeded data
>
> Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
> ---
>
> drivers/mtd/ubi/io.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
> index 8423894..23660e3 100644
> --- a/drivers/mtd/ubi/io.c
> +++ b/drivers/mtd/ubi/io.c
> @@ -916,7 +916,7 @@ int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
>
> p = (char *)vid_hdr - ubi->vid_hdr_shift;
> err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
> - ubi->vid_hdr_alsize);
> + UBI_VID_HDR_SIZE);
> if (err) {
> if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
> return err;
Joe, are you pushing this change to Linux as well? I would really like
to see Artem commenting on this.
Thanks,
Stefan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header
2012-11-06 8:19 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Stefan Roese
@ 2012-11-06 23:47 ` Joe Hershberger
0 siblings, 0 replies; 8+ messages in thread
From: Joe Hershberger @ 2012-11-06 23:47 UTC (permalink / raw)
To: u-boot
Hi Stefan,
On Tue, Nov 6, 2012 at 2:19 AM, Stefan Roese <sr@denx.de> wrote:
> On 11/05/2012 05:46 PM, Joe Hershberger wrote:
>> If sub-page reads are supported, this will save reading unneeded data
>>
>> Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
>> ---
>>
>> drivers/mtd/ubi/io.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
>> index 8423894..23660e3 100644
>> --- a/drivers/mtd/ubi/io.c
>> +++ b/drivers/mtd/ubi/io.c
>> @@ -916,7 +916,7 @@ int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
>>
>> p = (char *)vid_hdr - ubi->vid_hdr_shift;
>> err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
>> - ubi->vid_hdr_alsize);
>> + UBI_VID_HDR_SIZE);
>> if (err) {
>> if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
>> return err;
>
> Joe, are you pushing this change to Linux as well? I would really like
> to see Artem commenting on this.
Yes. We will post this to Linux as well.
-Joe
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [U-Boot, v2, 2/2] nand: Move the sub-page read support enable to a flag
2012-11-05 16:46 ` [U-Boot] [PATCH v2 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
@ 2012-11-16 0:10 ` Scott Wood
0 siblings, 0 replies; 8+ messages in thread
From: Scott Wood @ 2012-11-16 0:10 UTC (permalink / raw)
To: u-boot
On Mon, Nov 05, 2012 at 06:46:31AM -0000, Joe Hershberger wrote:
> 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>
Applied to u-boot-nand-flash
-Scott
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-11-16 0:10 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-01 22:49 [U-Boot] [PATCH 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
2012-11-01 22:49 ` [U-Boot] [PATCH 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
2012-11-02 22:41 ` Scott Wood
2012-11-05 16:46 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Joe Hershberger
2012-11-05 16:46 ` [U-Boot] [PATCH v2 2/2] nand: Move the sub-page read support enable to a flag Joe Hershberger
2012-11-16 0:10 ` [U-Boot] [U-Boot, v2, " Scott Wood
2012-11-06 8:19 ` [U-Boot] [PATCH v2 1/2] ubi: Only read the actual size of the VID header Stefan Roese
2012-11-06 23:47 ` Joe Hershberger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox