Re: Possible bug in onenand_base ?

2010-07-12 Thread Enric Balletbò i Serra
Hello,

2010/7/8 Artem Bityutskiy dedeki...@gmail.com:
 On Thu, 2010-07-08 at 12:11 +0200, Enric Balletbò i Serra wrote:
 Hello,

 2010/7/8 Artem Bityutskiy dedeki...@gmail.com:
  On Thu, 2010-07-08 at 11:55 +0200, Enric Balletbò i Serra wrote:
  Hello,
 
  I made new tests regarding this issue. Looks like the problem is
  reading from the OneNAND device.
 
  Did you try older kernel and then bisecting who is responsible for the
  breakage?

 Yes, before commit

 5988af2319781bc8e0ce418affec4e09cfa77907 (mtd: Flex-OneNAND support)

 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5988af2319781bc8e0ce418affec4e09cfa77907

 my  OneNAND is working, after the commit, the OneNAND support is broken.

 Ok, we could revert it, but it is better to fix it. CCing the author of
 the commit.


Comparing the onenand_base.c file before commit

  5988af2319781bc8e0ce418affec4e09cfa77907 (mtd: Flex-OneNAND support)

and after the commit I made a little patch which seems solves the
issue. The patch has two parts.

The first part replaces line 380 with  'page = (int) (addr 
this-page_shift);' like before apply the Flex-OneNAND support. I
suppose this is not the better solution, but with this the nandtest
tool works for me. Maybe the author of the commit can clarify this.

The second part (1964) adds two lines which I think are missed when
the Flex-OneNAND support was applied.

diff --git a/drivers/mtd/onenand/onenand_base.c
b/drivers/mtd/onenand/onenand_base.c
index 26caf25..a39d906 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -377,7 +377,7 @@ static int onenand_command(struct mtd_info *mtd,
int cmd, loff_t addr, size_t le

default:
block = onenand_block(this, addr);
-   page = (int) (addr - onenand_addr(this, block)) 
this-page_shift;
+   page = (int) (addr  this-page_shift);

if (ONENAND_IS_2PLANE(this)) {
/* Make the even block number */
@@ -1961,6 +1961,9 @@ static int onenand_write_ops_nolock(struct
mtd_info *mtd, loff_t to,

/* In partial page write we don't update bufferram */
onenand_update_bufferram(mtd, to, !ret  !subpage);
+   ONENAND_SET_BUFFERRAM1(this);
+   onenand_update_bufferram(mtd, to +
this-writesize, !ret  !subpage);
+
if (ret) {
printk(KERN_ERR %s: write failed %d\n,
__func__, ret);

Best regards,

Enric
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Possible bug in onenand_base ?

2010-07-08 Thread Enric Balletbò i Serra
Hello,

I made new tests regarding this issue. Looks like the problem is
reading from the OneNAND device.

TEST 1
# modprobe mtd_pagetest dev=4
[  126.505340]
[  126.506866] =
[  126.512756] mtd_pagetest: MTD device: 4
[  126.520477] mtd_pagetest: MTD device size 262668288, eraseblock
size 262144, page size 4096, count of eraseblocks 1002, pages per
eraseblock 64, OOB size 64
[  126.535034] mtd_pagetest: scanning for bad eraseblocks
[  126.540771] mtd_pagetest: scanned 1002 eraseblocks, 0 are bad
[  126.546630] mtd_pagetest: erasing whole device
[  128.406890] mtd_pagetest: erased 1002 eraseblocks
[  128.411712] mtd_pagetest: writing whole device
[  128.451721] mtd_pagetest: written up to eraseblock 0
[  137.443817] mtd_pagetest: written up to eraseblock 256
[  146.440216] mtd_pagetest: written up to eraseblock 512
[  155.430755] mtd_pagetest: written up to eraseblock 768
[  163.618225] mtd_pagetest: written 1002 eraseblocks
[  163.623168] mtd_pagetest: verifying all eraseblocks
[  163.632965] onenand_wait: ECC error = 0x4488
[  163.638031] onenand_wait: ECC error = 0x4884
[  163.642486] onenand_wait: ECC error = 0x
[  163.647247] onenand_wait: ECC error = 0x
[  163.651733] mtd_pagetest: error: read failed at 0x0
[  163.656890] mtd_pagetest: error -74 occurred
[  163.661224] =


TEST 2
# nandtest -l 262144 /dev/mtd4
ECC corrections: 0
ECC failures   : 260
Bad blocks : 0
BBT blocks : 0
: reading...[  837.103302] onenand_wait: ECC error = 0x8488
[  837.109832] onenand_wait: ECC error = 0x8488
[  837.114532] onenand_wait: ECC error = 0x
(...)
[  837.683624] onenand_wait: ECC error = 0x8448
[  837.688079] onenand_wait: ECC error = 0x8488

ECC failed at 
: checking...
compare failed. seed 1804289383
Byte 0x1 is 5a should be da
Byte 0x3 is 82 should be 92
(...)

I suspect currently OneNAND with 2 planes is broken. Someone with this
type of device can try these tests ?

Thanks in advance,
Enric

2010/5/12 Enric Balletbò i Serra eballe...@gmail.com:
 I answer to myself.

 DDP (dual die plane) not implies 'ONENAND_HAS_2PLANE'.  A device with
 a single die can also have '2 planes'. I'm right ?

 Sorry for these newbie questions, I'm just introducing to OneNAND devices.

 Cheers,

 Enric

 2010/5/12 Enric Balletbò i Serra eballe...@gmail.com:
 Hello,

 I have a bit of time to investigate more.

 I have two boards with two different OneNAND chips populated.

 The first one is a dual Die Plan 4-Gbit (2 dice of 2-Gbit)

 [   26.406890] Muxed OneNAND(DDP) 512MB 1.8V 16-bit (0x58)
 [   26.412170] OneNAND version = 0x0031
 [   26.415771] Chip support all block unlock
 [   26.419830] Chip has 2 plane

 The second is a single die of 2-Gbit.

 [   32.897735] Muxed OneNAND 256MB 1.8V 16-bit (0x40)
 [   32.902557] OneNAND version = 0x0031
 [   32.906188] Chip support all block unlock
 [   32.910247] Chip has 2 plane

 As I understand the bit 3 of DEVICE_ID register indicates if package
 is a single-die or a dual-die, so

 - Muxed OneNAND(DDP) 512MB 1.8V 16-bit - device id: 0x58 - bit 3 is
 1 - dual-die
 - Muxed OneNAND 256MB 1.8V 16-bit - device id: 0x40 - bit 3 is 0 
 -single-die

 The question is, why those devices are reporting 'Chip has 2 plane' ?

 Sorry if this is a trivial question but I'm not sure about DDP and '2
 plane' concepts. Are the same ?

 Cheers,

 Enric

 2010/5/6 Enric Balletbò i Serra eballe...@gmail.com:
 Hi,

 2010/5/6 Kyungmin Park kmp...@infradead.org:
 Hi,

 What's your chip version? maybe some mis-probe it seems to be probed
 at 4KiB pagesize OneNAND.

 Is a 4-Gbit DDP OneNAND device from Numonyx composed of two 2-Gbit 2KB
 page dice stacked together, the device is equipped with two DataRAMs,
 and two-plane NAND Flash memory array,

 These two component enables simultaneous program of 4KiB (
 CONFIG_MTD_ONENAND_2X_PROGRAM)

 Cheers,

 Enric


 Thank you,
 Kyungmin Park

 On Thu, May 6, 2010 at 8:22 PM, Enric Balletbò i Serra
 eballe...@gmail.com wrote:
 Hi,

 2010/5/6 Kyungmin Park kyungmin.p...@samsung.com:
 Hi,

 Can you add this statement at below the code?
 printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__, page, (int)
 onenand_addr(this, block), ((int) addr  this-page_shift) 
 this-page_mask);

 Yes,

 With this code nandtest fails:

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
 /*  (line disabled)   page = (int) (addr  this-page_shift); */
                  page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift;

                printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
 page, (int)
                        onenand_addr(this, block), ((int) addr 
 this-page_shift) 
                        this-page_mask);

                if (ONENAND_IS_2PLANE(this)) {
                        /* Make the even block number */
                        block = ~1;
                        /* Is it the odd plane? */

Re: Possible bug in onenand_base ?

2010-07-08 Thread Enric Balletbò i Serra
Hello,

2010/7/8 Artem Bityutskiy dedeki...@gmail.com:
 On Thu, 2010-07-08 at 11:55 +0200, Enric Balletbò i Serra wrote:
 Hello,

 I made new tests regarding this issue. Looks like the problem is
 reading from the OneNAND device.

 Did you try older kernel and then bisecting who is responsible for the
 breakage?

Yes, before commit

5988af2319781bc8e0ce418affec4e09cfa77907 (mtd: Flex-OneNAND support)

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5988af2319781bc8e0ce418affec4e09cfa77907

my  OneNAND is working, after the commit, the OneNAND support is broken.

Cheers,
Enric


 --
 Best Regards,
 Artem Bityutskiy (Артём Битюцкий)


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Possible bug in onenand_base ?

2010-07-08 Thread Artem Bityutskiy
On Thu, 2010-07-08 at 12:11 +0200, Enric Balletbò i Serra wrote:
 Hello,
 
 2010/7/8 Artem Bityutskiy dedeki...@gmail.com:
  On Thu, 2010-07-08 at 11:55 +0200, Enric Balletbò i Serra wrote:
  Hello,
 
  I made new tests regarding this issue. Looks like the problem is
  reading from the OneNAND device.
 
  Did you try older kernel and then bisecting who is responsible for the
  breakage?
 
 Yes, before commit
 
 5988af2319781bc8e0ce418affec4e09cfa77907 (mtd: Flex-OneNAND support)
 
 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5988af2319781bc8e0ce418affec4e09cfa77907
 
 my  OneNAND is working, after the commit, the OneNAND support is broken.

Ok, we could revert it, but it is better to fix it. CCing the author of
the commit.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Possible bug in onenand_base ?

2010-05-12 Thread Enric Balletbò i Serra
Hello,

I have a bit of time to investigate more.

I have two boards with two different OneNAND chips populated.

The first one is a dual Die Plan 4-Gbit (2 dice of 2-Gbit)

[   26.406890] Muxed OneNAND(DDP) 512MB 1.8V 16-bit (0x58)
[   26.412170] OneNAND version = 0x0031
[   26.415771] Chip support all block unlock
[   26.419830] Chip has 2 plane

The second is a single die of 2-Gbit.

[   32.897735] Muxed OneNAND 256MB 1.8V 16-bit (0x40)
[   32.902557] OneNAND version = 0x0031
[   32.906188] Chip support all block unlock
[   32.910247] Chip has 2 plane

As I understand the bit 3 of DEVICE_ID register indicates if package
is a single-die or a dual-die, so

- Muxed OneNAND(DDP) 512MB 1.8V 16-bit - device id: 0x58 - bit 3 is
1 - dual-die
- Muxed OneNAND 256MB 1.8V 16-bit - device id: 0x40 - bit 3 is 0 -single-die

The question is, why those devices are reporting 'Chip has 2 plane' ?

Sorry if this is a trivial question but I'm not sure about DDP and '2
plane' concepts. Are the same ?

Cheers,

Enric

2010/5/6 Enric Balletbò i Serra eballe...@gmail.com:
 Hi,

 2010/5/6 Kyungmin Park kmp...@infradead.org:
 Hi,

 What's your chip version? maybe some mis-probe it seems to be probed
 at 4KiB pagesize OneNAND.

 Is a 4-Gbit DDP OneNAND device from Numonyx composed of two 2-Gbit 2KB
 page dice stacked together, the device is equipped with two DataRAMs,
 and two-plane NAND Flash memory array,

 These two component enables simultaneous program of 4KiB (
 CONFIG_MTD_ONENAND_2X_PROGRAM)

 Cheers,

 Enric


 Thank you,
 Kyungmin Park

 On Thu, May 6, 2010 at 8:22 PM, Enric Balletbò i Serra
 eballe...@gmail.com wrote:
 Hi,

 2010/5/6 Kyungmin Park kyungmin.p...@samsung.com:
 Hi,

 Can you add this statement at below the code?
 printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__, page, (int)
 onenand_addr(this, block), ((int) addr  this-page_shift) 
 this-page_mask);

 Yes,

 With this code nandtest fails:

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
 /*  (line disabled)   page = (int) (addr  this-page_shift); */
                  page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift;

                printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
 page, (int)
                        onenand_addr(this, block), ((int) addr 
 this-page_shift) 
                        this-page_mask);

                if (ONENAND_IS_2PLANE(this)) {
                        /* Make the even block number */
                        block = ~1;
                        /* Is it the odd plane? */
                        if (addr  this-writesize)
                                block++;
                        page = 1;
                }
                page = this-page_mask;
                break;


 --- start log nandtest fail ---
 # nandtest -l 262144 /dev/mtd3
 ECC corrections: 0
 ECC failures   : 0
 Bad blocks     : 0
 BBT blocks     : 0
 : writing...
 [  243.144287] onenand_command[382] page 0, 2621440, 0
 [  243.150787] onenand_command[382] page 2, 2621440, 2
 [  243.156158] onenand_command[382] page 4, 2621440, 4
 (...)
 [  243.310729] onenand_command[382] page 60, 2621440, 60
 [  243.316223] onenand_command[382] page 62, 2621440, 62
 [  243.322204] onenand_command[382] page 0, 2752512, 0
 [  243.327636] onenand_command[382] page 2, 2752512, 2
 [  243.332977] onenand_command[382] page 4, 2752512, 4
 (...)
 [  243.487487] onenand_command[382] page 60, 2752512, 60
 [  243.493041] onenand_command[382] page 62, 2752512, 62
 : reading...
 [  243.498535] onenand_command[382] page 0, 2621440, 0
 [  243.505249] onenand_wait: ECC error = 0x8488
 [  243.509552] onenand_command[382] page 1, 2621440, 1
 [  243.514587] onenand_wait: ECC error = 0x8488
 [  243.518890] onenand_command[382] page 2, 2621440, 2
 (...)
 [  244.089050] onenand_command[382] page 62, 2621440, 62
 [  244.094268] onenand_wait: ECC error = 0x8448
 [  244.098602] onenand_command[382] page 63, 2621440, 63
 [  244.103790] onenand_wait: ECC error = 0x8488
 [  244.109191] onenand_command[382] page 0, 2752512, 0
 [  244.114196] onenand_wait: ECC error = 0x8488
 [  244.118469] onenand_command[382] page 1, 2752512, 1
 [  244.123535] onenand_wait: ECC error = 0x8488
 [  244.127838] onenand_command[382] page 2, 2752512, 2
 (...)
 [  244.698150] onenand_command[382] page 62, 2752512, 62
 [  244.703369] onenand_wait: ECC error = 0x8448
 [  244.707672] onenand_command[382] page 63, 2752512, 63
 [  244.712890] onenand_wait: ECC error = 0x8488

 ECC failed at 
 : checking...
 compare failed. seed 1804289383
 Byte 0x1 is 5a should be da
 Byte 0x3 is 82 should be 92
 Byte 0x4 is 10 should be 1a
 Byte 0x5 is 21 should be b7

 --- end log nandtest fail ---


 With this other code nandtest pass

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
                page = (int) (addr  this-page_shift);
 /* (line disabled)  page = (int) (addr - onenand_addr(this, block)) 
 

Re: Possible bug in onenand_base ?

2010-05-12 Thread Enric Balletbò i Serra
I answer to myself.

DDP (dual die plane) not implies 'ONENAND_HAS_2PLANE'.  A device with
a single die can also have '2 planes'. I'm right ?

Sorry for these newbie questions, I'm just introducing to OneNAND devices.

Cheers,

Enric

2010/5/12 Enric Balletbò i Serra eballe...@gmail.com:
 Hello,

 I have a bit of time to investigate more.

 I have two boards with two different OneNAND chips populated.

 The first one is a dual Die Plan 4-Gbit (2 dice of 2-Gbit)

 [   26.406890] Muxed OneNAND(DDP) 512MB 1.8V 16-bit (0x58)
 [   26.412170] OneNAND version = 0x0031
 [   26.415771] Chip support all block unlock
 [   26.419830] Chip has 2 plane

 The second is a single die of 2-Gbit.

 [   32.897735] Muxed OneNAND 256MB 1.8V 16-bit (0x40)
 [   32.902557] OneNAND version = 0x0031
 [   32.906188] Chip support all block unlock
 [   32.910247] Chip has 2 plane

 As I understand the bit 3 of DEVICE_ID register indicates if package
 is a single-die or a dual-die, so

 - Muxed OneNAND(DDP) 512MB 1.8V 16-bit - device id: 0x58 - bit 3 is
 1 - dual-die
 - Muxed OneNAND 256MB 1.8V 16-bit - device id: 0x40 - bit 3 is 0 
 -single-die

 The question is, why those devices are reporting 'Chip has 2 plane' ?

 Sorry if this is a trivial question but I'm not sure about DDP and '2
 plane' concepts. Are the same ?

 Cheers,

 Enric

 2010/5/6 Enric Balletbò i Serra eballe...@gmail.com:
 Hi,

 2010/5/6 Kyungmin Park kmp...@infradead.org:
 Hi,

 What's your chip version? maybe some mis-probe it seems to be probed
 at 4KiB pagesize OneNAND.

 Is a 4-Gbit DDP OneNAND device from Numonyx composed of two 2-Gbit 2KB
 page dice stacked together, the device is equipped with two DataRAMs,
 and two-plane NAND Flash memory array,

 These two component enables simultaneous program of 4KiB (
 CONFIG_MTD_ONENAND_2X_PROGRAM)

 Cheers,

 Enric


 Thank you,
 Kyungmin Park

 On Thu, May 6, 2010 at 8:22 PM, Enric Balletbò i Serra
 eballe...@gmail.com wrote:
 Hi,

 2010/5/6 Kyungmin Park kyungmin.p...@samsung.com:
 Hi,

 Can you add this statement at below the code?
 printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__, page, (int)
 onenand_addr(this, block), ((int) addr  this-page_shift) 
 this-page_mask);

 Yes,

 With this code nandtest fails:

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
 /*  (line disabled)   page = (int) (addr  this-page_shift); */
                  page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift;

                printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
 page, (int)
                        onenand_addr(this, block), ((int) addr 
 this-page_shift) 
                        this-page_mask);

                if (ONENAND_IS_2PLANE(this)) {
                        /* Make the even block number */
                        block = ~1;
                        /* Is it the odd plane? */
                        if (addr  this-writesize)
                                block++;
                        page = 1;
                }
                page = this-page_mask;
                break;


 --- start log nandtest fail ---
 # nandtest -l 262144 /dev/mtd3
 ECC corrections: 0
 ECC failures   : 0
 Bad blocks     : 0
 BBT blocks     : 0
 : writing...
 [  243.144287] onenand_command[382] page 0, 2621440, 0
 [  243.150787] onenand_command[382] page 2, 2621440, 2
 [  243.156158] onenand_command[382] page 4, 2621440, 4
 (...)
 [  243.310729] onenand_command[382] page 60, 2621440, 60
 [  243.316223] onenand_command[382] page 62, 2621440, 62
 [  243.322204] onenand_command[382] page 0, 2752512, 0
 [  243.327636] onenand_command[382] page 2, 2752512, 2
 [  243.332977] onenand_command[382] page 4, 2752512, 4
 (...)
 [  243.487487] onenand_command[382] page 60, 2752512, 60
 [  243.493041] onenand_command[382] page 62, 2752512, 62
 : reading...
 [  243.498535] onenand_command[382] page 0, 2621440, 0
 [  243.505249] onenand_wait: ECC error = 0x8488
 [  243.509552] onenand_command[382] page 1, 2621440, 1
 [  243.514587] onenand_wait: ECC error = 0x8488
 [  243.518890] onenand_command[382] page 2, 2621440, 2
 (...)
 [  244.089050] onenand_command[382] page 62, 2621440, 62
 [  244.094268] onenand_wait: ECC error = 0x8448
 [  244.098602] onenand_command[382] page 63, 2621440, 63
 [  244.103790] onenand_wait: ECC error = 0x8488
 [  244.109191] onenand_command[382] page 0, 2752512, 0
 [  244.114196] onenand_wait: ECC error = 0x8488
 [  244.118469] onenand_command[382] page 1, 2752512, 1
 [  244.123535] onenand_wait: ECC error = 0x8488
 [  244.127838] onenand_command[382] page 2, 2752512, 2
 (...)
 [  244.698150] onenand_command[382] page 62, 2752512, 62
 [  244.703369] onenand_wait: ECC error = 0x8448
 [  244.707672] onenand_command[382] page 63, 2752512, 63
 [  244.712890] onenand_wait: ECC error = 0x8488

 ECC failed at 
 : checking...
 compare failed. seed 1804289383
 Byte 0x1 is 5a should be da
 Byte 0x3 is 82 should be 92
 Byte 0x4 is 10 should be 1a
 

Re: Possible bug in onenand_base ?

2010-05-06 Thread Enric Balletbò i Serra
Hi,

2010/5/6 Kyungmin Park kyungmin.p...@samsung.com:
 Hi,

 Can you add this statement at below the code?
 printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__, page, (int)
 onenand_addr(this, block), ((int) addr  this-page_shift) 
 this-page_mask);

Yes,

With this code nandtest fails:

onenand_base.c

377: default:
block = onenand_block(this, addr);
/*  (line disabled)   page = (int) (addr  this-page_shift); */
  page = (int) (addr - onenand_addr(this, block)) 
this-page_shift;

printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
page, (int)
onenand_addr(this, block), ((int) addr 
this-page_shift) 
this-page_mask);

if (ONENAND_IS_2PLANE(this)) {
/* Make the even block number */
block = ~1;
/* Is it the odd plane? */
if (addr  this-writesize)
block++;
page = 1;
}
page = this-page_mask;
break;


--- start log nandtest fail ---
# nandtest -l 262144 /dev/mtd3
ECC corrections: 0
ECC failures   : 0
Bad blocks : 0
BBT blocks : 0
: writing...
[  243.144287] onenand_command[382] page 0, 2621440, 0
[  243.150787] onenand_command[382] page 2, 2621440, 2
[  243.156158] onenand_command[382] page 4, 2621440, 4
(...)
[  243.310729] onenand_command[382] page 60, 2621440, 60
[  243.316223] onenand_command[382] page 62, 2621440, 62
[  243.322204] onenand_command[382] page 0, 2752512, 0
[  243.327636] onenand_command[382] page 2, 2752512, 2
[  243.332977] onenand_command[382] page 4, 2752512, 4
(...)
[  243.487487] onenand_command[382] page 60, 2752512, 60
[  243.493041] onenand_command[382] page 62, 2752512, 62
: reading...
[  243.498535] onenand_command[382] page 0, 2621440, 0
[  243.505249] onenand_wait: ECC error = 0x8488
[  243.509552] onenand_command[382] page 1, 2621440, 1
[  243.514587] onenand_wait: ECC error = 0x8488
[  243.518890] onenand_command[382] page 2, 2621440, 2
(...)
[  244.089050] onenand_command[382] page 62, 2621440, 62
[  244.094268] onenand_wait: ECC error = 0x8448
[  244.098602] onenand_command[382] page 63, 2621440, 63
[  244.103790] onenand_wait: ECC error = 0x8488
[  244.109191] onenand_command[382] page 0, 2752512, 0
[  244.114196] onenand_wait: ECC error = 0x8488
[  244.118469] onenand_command[382] page 1, 2752512, 1
[  244.123535] onenand_wait: ECC error = 0x8488
[  244.127838] onenand_command[382] page 2, 2752512, 2
(...)
[  244.698150] onenand_command[382] page 62, 2752512, 62
[  244.703369] onenand_wait: ECC error = 0x8448
[  244.707672] onenand_command[382] page 63, 2752512, 63
[  244.712890] onenand_wait: ECC error = 0x8488

ECC failed at 
: checking...
compare failed. seed 1804289383
Byte 0x1 is 5a should be da
Byte 0x3 is 82 should be 92
Byte 0x4 is 10 should be 1a
Byte 0x5 is 21 should be b7

--- end log nandtest fail ---


With this other code nandtest pass

onenand_base.c

377: default:
block = onenand_block(this, addr);
page = (int) (addr  this-page_shift);
/* (line disabled)  page = (int) (addr - onenand_addr(this, block)) 
this-page_shift; */

printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
page, (int)
onenand_addr(this, block), ((int) addr 
this-page_shift) 
this-page_mask);

if (ONENAND_IS_2PLANE(this)) {
/* Make the even block number */
block = ~1;
/* Is it the odd plane? */
if (addr  this-writesize)
block++;
page = 1;
}
page = this-page_mask;
break;

--- start log nandtest pass ---
# nandtest -l 262144 /dev/mtd3
ECC corrections: 0
ECC failures   : 33
Bad blocks : 0
BBT blocks : 0
: writing...
[ 2024.624664] onenand_command[382] page 1280, 2621440, 0
[ 2024.631530] onenand_command[382] page 1282, 2621440, 2
[ 2024.637145] onenand_command[382] page 1284, 2621440, 4
(...)
[ 2024.796813] onenand_command[382] page 1340, 2621440, 60
[ 2024.802520] onenand_command[382] page 1342, 2621440, 62
[ 2024.808593] onenand_command[382] page 1344, 2752512, 0
[ 2024.814239] onenand_command[382] page 1346, 2752512, 2
(...)
[ 2024.979644] onenand_command[382] page 1404, 2752512, 60
[ 2024.985351] onenand_command[382] page 1406, 2752512, 62
: reading...
[ 2024.990997] onenand_command[382] page 1280, 2621440, 0
[ 2024.997985] onenand_command[382] page 1281, 2621440, 1
[ 2025.003295] onenand_command[382] page 1282, 2621440, 2
(...)

[ 2025.326782] onenand_command[382] page 1342, 2621440, 62
[ 2025.332214] onenand_command[382] page 1343, 2621440, 63
[ 2025.338592] onenand_command[382] page 1344, 2752512, 0

Re: Possible bug in onenand_base ?

2010-05-06 Thread Kyungmin Park
Hi,

What's your chip version? maybe some mis-probe it seems to be probed
at 4KiB pagesize OneNAND.

Thank you,
Kyungmin Park

On Thu, May 6, 2010 at 8:22 PM, Enric Balletbò i Serra
eballe...@gmail.com wrote:
 Hi,

 2010/5/6 Kyungmin Park kyungmin.p...@samsung.com:
 Hi,

 Can you add this statement at below the code?
 printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__, page, (int)
 onenand_addr(this, block), ((int) addr  this-page_shift) 
 this-page_mask);

 Yes,

 With this code nandtest fails:

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
 /*  (line disabled)   page = (int) (addr  this-page_shift); */
                  page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift;

                printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
 page, (int)
                        onenand_addr(this, block), ((int) addr 
 this-page_shift) 
                        this-page_mask);

                if (ONENAND_IS_2PLANE(this)) {
                        /* Make the even block number */
                        block = ~1;
                        /* Is it the odd plane? */
                        if (addr  this-writesize)
                                block++;
                        page = 1;
                }
                page = this-page_mask;
                break;


 --- start log nandtest fail ---
 # nandtest -l 262144 /dev/mtd3
 ECC corrections: 0
 ECC failures   : 0
 Bad blocks     : 0
 BBT blocks     : 0
 : writing...
 [  243.144287] onenand_command[382] page 0, 2621440, 0
 [  243.150787] onenand_command[382] page 2, 2621440, 2
 [  243.156158] onenand_command[382] page 4, 2621440, 4
 (...)
 [  243.310729] onenand_command[382] page 60, 2621440, 60
 [  243.316223] onenand_command[382] page 62, 2621440, 62
 [  243.322204] onenand_command[382] page 0, 2752512, 0
 [  243.327636] onenand_command[382] page 2, 2752512, 2
 [  243.332977] onenand_command[382] page 4, 2752512, 4
 (...)
 [  243.487487] onenand_command[382] page 60, 2752512, 60
 [  243.493041] onenand_command[382] page 62, 2752512, 62
 : reading...
 [  243.498535] onenand_command[382] page 0, 2621440, 0
 [  243.505249] onenand_wait: ECC error = 0x8488
 [  243.509552] onenand_command[382] page 1, 2621440, 1
 [  243.514587] onenand_wait: ECC error = 0x8488
 [  243.518890] onenand_command[382] page 2, 2621440, 2
 (...)
 [  244.089050] onenand_command[382] page 62, 2621440, 62
 [  244.094268] onenand_wait: ECC error = 0x8448
 [  244.098602] onenand_command[382] page 63, 2621440, 63
 [  244.103790] onenand_wait: ECC error = 0x8488
 [  244.109191] onenand_command[382] page 0, 2752512, 0
 [  244.114196] onenand_wait: ECC error = 0x8488
 [  244.118469] onenand_command[382] page 1, 2752512, 1
 [  244.123535] onenand_wait: ECC error = 0x8488
 [  244.127838] onenand_command[382] page 2, 2752512, 2
 (...)
 [  244.698150] onenand_command[382] page 62, 2752512, 62
 [  244.703369] onenand_wait: ECC error = 0x8448
 [  244.707672] onenand_command[382] page 63, 2752512, 63
 [  244.712890] onenand_wait: ECC error = 0x8488

 ECC failed at 
 : checking...
 compare failed. seed 1804289383
 Byte 0x1 is 5a should be da
 Byte 0x3 is 82 should be 92
 Byte 0x4 is 10 should be 1a
 Byte 0x5 is 21 should be b7

 --- end log nandtest fail ---


 With this other code nandtest pass

 onenand_base.c

 377:     default:
                block = onenand_block(this, addr);
                page = (int) (addr  this-page_shift);
 /* (line disabled)  page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift; */

                printk(%s[%d] page %d, %d, %d\n, __func__, __LINE__,
 page, (int)
                        onenand_addr(this, block), ((int) addr 
 this-page_shift) 
                        this-page_mask);

                if (ONENAND_IS_2PLANE(this)) {
                        /* Make the even block number */
                        block = ~1;
                        /* Is it the odd plane? */
                        if (addr  this-writesize)
                                block++;
                        page = 1;
                }
                page = this-page_mask;
                break;

 --- start log nandtest pass ---
 # nandtest -l 262144 /dev/mtd3
 ECC corrections: 0
 ECC failures   : 33
 Bad blocks     : 0
 BBT blocks     : 0
 : writing...
 [ 2024.624664] onenand_command[382] page 1280, 2621440, 0
 [ 2024.631530] onenand_command[382] page 1282, 2621440, 2
 [ 2024.637145] onenand_command[382] page 1284, 2621440, 4
 (...)
 [ 2024.796813] onenand_command[382] page 1340, 2621440, 60
 [ 2024.802520] onenand_command[382] page 1342, 2621440, 62
 [ 2024.808593] onenand_command[382] page 1344, 2752512, 0
 [ 2024.814239] onenand_command[382] page 1346, 2752512, 2
 (...)
 [ 2024.979644] onenand_command[382] page 1404, 2752512, 60
 [ 2024.985351] onenand_command[382] page 1406, 2752512, 62
 : reading...
 [ 2024.990997] onenand_command[382] page 1280, 2621440, 0
 [ 

Re: Possible bug in onenand_base ?

2010-05-05 Thread Artem Bityutskiy
Probably Adrian could comment on this?

On Fri, 2010-04-30 at 12:05 +0200, Enric Balletbò i Serra wrote:
 Hello all,
 
 After commit 5988af2319781bc8e0ce418affec4e09cfa77907 (mtd:
 Flex-OneNAND support) the onenand support for my device is broken.
 
 Before this commit when I run the nandtest program all is ok
 ---
 # nandtest /dev/mtd3
 ECC corrections: 0
 ECC failures   : 0
 Bad blocks : 0
 BBT blocks : 0
 002c: checking...
 Finished pass 1 successfully
 --
 
 Introduced commit 5988af2319781bc8e0ce418affec4e09cfa7790 the nandtest
 fails with:
 ---
 # nandtest /dev/mtd3
 ECC corrections: 0
 ECC failures   : 0
 Bad blocks : 0
 BBT blocks : 0
 : reading...
 [  299.092041] onenand_wait: ECC error = 0x8488
 ( ... lots of ECC errors ... )
 [  299.092041] onenand_wait: ECC error = 0x8488
 ECC failed at 
 : checking...
 compare failed. seed 1804289383
 Byte 0x1 is 5a should be da
 Byte 0x3 is 82 should be 92
 Byte 0x4 is 10 should be 1a
 ( ... )
 ---
 
 Investigating a little I see a significant difference introduced by
 this patch. In line
 
 347:page = (int) (addr - onenand_addr(this, block)) 
 this-page_shift;   (patch applied)
 
 instead of
 
 347:page = (int) (addr  this-page_shift);  (without patch)
 
 I applied commit 5988af2319781bc8e0ce418affec4e09cfa7790 and replaced
 the line 347 and now works again. Fantastic, but I suspect this is not
 the proper solution (probably this breaks other onenands devices, I
 can't test).
 
 I'm just introducing in OneNAND devices so anyone can help me to
 understand and solve the problem ? Note that my device is a Numonyx
 4-Gbit DDP (DUAL DIE PLAN) OneNAND flash memory ( 2 dice of 2Gb, 2KB
 page )
 
 Thanks in advance,
 
 ///:~Enric
 
 ---
 diff --git a/drivers/mtd/onenand/onenand_base.c
 b/drivers/mtd/onenand/onenand_base.c
 index 081f97d..b1d50a3 100644
 --- a/drivers/mtd/onenand/onenand_base.c
 +++ b/drivers/mtd/onenand/onenand_base.c
 @@ -344,7 +344,7 @@ static int onenand_command(struct mtd_info *mtd,
 int cmd, loff_t addr, size_t le
 
   default:
   block = (int) onenand_block(this, addr);
 - page = (int) (addr - onenand_addr(this, block))  
 this-page_shift;
 + page = (int) (addr  this-page_shift);
 
   if (ONENAND_IS_2PLANE(this)) {
   /* Make the even block number */
 ---
 
 __
 Linux MTD discussion mailing list
 http://lists.infradead.org/mailman/listinfo/linux-mtd/

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html