* Resend: NAND 16bit ONFI problem
@ 2013-07-10 8:39 Alexander Shiyan
2013-07-18 7:02 ` Brian Norris
0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shiyan @ 2013-07-10 8:39 UTC (permalink / raw)
To: linux-mtd
Hello.
Updated: Same effect for 3.10 kernel.
--------
I have a problem with attach NAND UBI in 16 bit mode.
NAND works fine if I specify NAND_BUSWIDTH_16 option, but not
working with NAND_BUSWIDTH_AUTO option. In second case NAND
chip is identifyed with ONFI. Logs below.
Can anyone help me with this issue? Is it a known problem?
Thanks.
PS: Kernel 3.9.3
New chip, first start, NAND_BUSWIDTH_AUTO:
ONFI param page 0 valid
ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron MT29F2G16ABAEAWP), 256MiB, page size: 2048, OOB size: 64
Scanning device for bad blocks
Creating 1 MTD partitions on "MT29F2G16ABAEAWP":
0x000000000000-0x000010000000 : "nand-gpio"
UBI: attaching mtd4 to ubi0
UBI: scanning is finished
UBI: empty MTD device detected
UBI: attached mtd4 (name "nand-gpio", size 256 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
UBI: VID header offset: 512 (aligned 512), data offset: 2048
UBI: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2920475650
UBI: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
UBI: background thread "ubi_bgt0d" started, PID 22
sync && reboot:
ONFI param page 0 valid
ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron MT29F2G16ABAEAWP), 256MiB, page size: 2048, OOB size: 64
Scanning device for bad blocks
Creating 1 MTD partitions on "MT29F2G16ABAEAWP":
0x000000000000-0x000010000000 : "nand-gpio"
UBI: attaching mtd4 to ubi0
UBI: fixable bit-flip detected at PEB 2
UBI: fixable bit-flip detected at PEB 3
UBI: fixable bit-flip detected at PEB 4
UBI: fixable bit-flip detected at PEB 5
UBI: fixable bit-flip detected at PEB 6
UBI: fixable bit-flip detected at PEB 7
...
NAND_BUSWIDTH_16:
Trying ONFI probe in 16 bits mode, aborting !
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron NAND 256MiB 3,3V 16-bit), 256MiB, page size: 2048, OOB size: 64
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 256MiB 3,3V 16-bit":
0x000000000000-0x000010000000 : "nand-gpio"
UBI: attaching mtd4 to ubi0
UBI: scanning is finished
UBI: empty MTD device detected
UBI: attached mtd4 (name "nand-gpio", size 256 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
UBI: VID header offset: 512 (aligned 512), data offset: 2048
UBI: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2573182024
UBI: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
UBI: background thread "ubi_bgt0d" started, PID 23
----------------
---
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Resend: NAND 16bit ONFI problem
2013-07-10 8:39 Resend: NAND 16bit ONFI problem Alexander Shiyan
@ 2013-07-18 7:02 ` Brian Norris
2013-07-18 7:42 ` Alexander Shiyan
0 siblings, 1 reply; 4+ messages in thread
From: Brian Norris @ 2013-07-18 7:02 UTC (permalink / raw)
To: Alexander Shiyan; +Cc: linux-mtd, Matthieu CASTET
Adding Matthieu, since he introduced NAND_BUSWIDTH. Leaving full context intact.
On Wed, Jul 10, 2013 at 1:39 AM, Alexander Shiyan <shc_work@mail.ru> wrote:
> Hello.
>
> Updated: Same effect for 3.10 kernel.
>
> --------
>
> I have a problem with attach NAND UBI in 16 bit mode.
> NAND works fine if I specify NAND_BUSWIDTH_16 option, but not
> working with NAND_BUSWIDTH_AUTO option. In second case NAND
> chip is identifyed with ONFI. Logs below.
> Can anyone help me with this issue? Is it a known problem?
> Thanks.
> PS: Kernel 3.9.3
I'm inspecting the NAND_BUSWIDTH_AUTO code and it looks rather broken.
For chips with NAND_BUSWIDTH_AUTO, it calls nand_set_defaults() twice.
The second call will do exactly nothing. To do this right, you'll
probably have to hack up nand_set_defaults() so that it will check if
the function pointer is one of two options:
1. NULL
2. the 8-bit version
My (untested, not compiled, and possibly line-wrapped) patch:
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index acd2fc9..26aad56 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2786,7 +2786,7 @@ static void nand_set_defaults(struct nand_chip
*chip, int busw)
if (!chip->select_chip)
chip->select_chip = nand_select_chip;
- if (!chip->read_byte)
+ if (!chip->read_byte || chip->read_byte == nand_read_byte)
chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
if (!chip->read_word)
chip->read_word = nand_read_word;
@@ -2794,9 +2794,9 @@ static void nand_set_defaults(struct nand_chip
*chip, int busw)
chip->block_bad = nand_block_bad;
if (!chip->block_markbad)
chip->block_markbad = nand_default_block_markbad;
- if (!chip->write_buf)
+ if (!chip->write_buf || chip->write_buf == nand_write_buf)
chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
- if (!chip->read_buf)
+ if (!chip->read_buf || chip->read_buf == nand_read_buf)
chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
if (!chip->scan_bbt)
chip->scan_bbt = nand_default_bbt;
> New chip, first start, NAND_BUSWIDTH_AUTO:
>
> ONFI param page 0 valid
> ONFI flash detected
> NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron MT29F2G16ABAEAWP), 256MiB, page size: 2048, OOB size: 64
> Scanning device for bad blocks
> Creating 1 MTD partitions on "MT29F2G16ABAEAWP":
> 0x000000000000-0x000010000000 : "nand-gpio"
> UBI: attaching mtd4 to ubi0
> UBI: scanning is finished
> UBI: empty MTD device detected
> UBI: attached mtd4 (name "nand-gpio", size 256 MiB) to ubi0
> UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
> UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
> UBI: VID header offset: 512 (aligned 512), data offset: 2048
> UBI: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
> UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
> UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2920475650
> UBI: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
> UBI: background thread "ubi_bgt0d" started, PID 22
>
>
> sync && reboot:
>
> ONFI param page 0 valid
> ONFI flash detected
> NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron MT29F2G16ABAEAWP), 256MiB, page size: 2048, OOB size: 64
> Scanning device for bad blocks
> Creating 1 MTD partitions on "MT29F2G16ABAEAWP":
> 0x000000000000-0x000010000000 : "nand-gpio"
> UBI: attaching mtd4 to ubi0
> UBI: fixable bit-flip detected at PEB 2
> UBI: fixable bit-flip detected at PEB 3
> UBI: fixable bit-flip detected at PEB 4
> UBI: fixable bit-flip detected at PEB 5
> UBI: fixable bit-flip detected at PEB 6
> UBI: fixable bit-flip detected at PEB 7
> ...
>
>
> NAND_BUSWIDTH_16:
>
> Trying ONFI probe in 16 bits mode, aborting !
> NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron NAND 256MiB 3,3V 16-bit), 256MiB, page size: 2048, OOB size: 64
> Scanning device for bad blocks
> Creating 1 MTD partitions on "NAND 256MiB 3,3V 16-bit":
> 0x000000000000-0x000010000000 : "nand-gpio"
> UBI: attaching mtd4 to ubi0
> UBI: scanning is finished
> UBI: empty MTD device detected
> UBI: attached mtd4 (name "nand-gpio", size 256 MiB) to ubi0
> UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
> UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
> UBI: VID header offset: 512 (aligned 512), data offset: 2048
> UBI: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
> UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
> UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2573182024
> UBI: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
> UBI: background thread "ubi_bgt0d" started, PID 23
>
> ----------------
>
Brian
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: Resend: NAND 16bit ONFI problem
2013-07-18 7:02 ` Brian Norris
@ 2013-07-18 7:42 ` Alexander Shiyan
2013-07-18 8:20 ` Brian Norris
0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shiyan @ 2013-07-18 7:42 UTC (permalink / raw)
To: Brian Norris; +Cc: linux-mtd, Matthieu CASTET
> Adding Matthieu, since he introduced NAND_BUSWIDTH. Leaving full context intact.
>
> On Wed, Jul 10, 2013 at 1:39 AM, Alexander Shiyan <shc_work@mail.ru> wrote:
> > Hello.
> >
> > Updated: Same effect for 3.10 kernel.
> >
> > --------
> >
> > I have a problem with attach NAND UBI in 16 bit mode.
> > NAND works fine if I specify NAND_BUSWIDTH_16 option, but not
> > working with NAND_BUSWIDTH_AUTO option. In second case NAND
> > chip is identifyed with ONFI. Logs below.
> > Can anyone help me with this issue? Is it a known problem?
> > Thanks.
> > PS: Kernel 3.9.3
>
> I'm inspecting the NAND_BUSWIDTH_AUTO code and it looks rather broken.
> For chips with NAND_BUSWIDTH_AUTO, it calls nand_set_defaults() twice.
> The second call will do exactly nothing. To do this right, you'll
> probably have to hack up nand_set_defaults() so that it will check if
> the function pointer is one of two options:
>
> 1. NULL
> 2. the 8-bit version
>
> My (untested, not compiled, and possibly line-wrapped) patch:
>
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index acd2fc9..26aad56 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -2786,7 +2786,7 @@ static void nand_set_defaults(struct nand_chip
> *chip, int busw)
>
> if (!chip->select_chip)
> chip->select_chip = nand_select_chip;
> - if (!chip->read_byte)
> + if (!chip->read_byte || chip->read_byte == nand_read_byte)
> chip->read_byte = busw ? nand_read_byte16 : nand_read_byte;
> if (!chip->read_word)
> chip->read_word = nand_read_word;
> @@ -2794,9 +2794,9 @@ static void nand_set_defaults(struct nand_chip
> *chip, int busw)
> chip->block_bad = nand_block_bad;
> if (!chip->block_markbad)
> chip->block_markbad = nand_default_block_markbad;
> - if (!chip->write_buf)
> + if (!chip->write_buf || chip->write_buf == nand_write_buf)
> chip->write_buf = busw ? nand_write_buf16 : nand_write_buf;
> - if (!chip->read_buf)
> + if (!chip->read_buf || chip->read_buf == nand_read_buf)
> chip->read_buf = busw ? nand_read_buf16 : nand_read_buf;
> if (!chip->scan_bbt)
> chip->scan_bbt = nand_default_bbt;
>
Thanks Brian! Tested by me and it works now as expected.
ONFI param page 0 valid
ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xca (Micron MT29F2G16ABAEAWP), 256MiB, page size: 2048, OOB size: 64
Scanning device for bad blocks
Creating 1 MTD partitions on "MT29F2G16ABAEAWP":
0x000000000000-0x000010000000 : "nand-gpio"
UBI: attaching mtd4 to ubi0
UBI: scanning is finished
UBI: attached mtd4 (name "nand-gpio", size 256 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
UBI: VID header offset: 512 (aligned 512), data offset: 2048
UBI: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 3483347360
UBI: available PEBs: 0, total reserved PEBs: 2048, PEBs reserved for bad PEB handling: 40
UBI: background thread "ubi_bgt0d" started, PID 28
...
UBIFS: default file-system created
UBIFS: background thread "ubifs_bgt0_0" started, PID 45
UBIFS: mounted UBI device 0, volume 0, name "bbox"(null)
UBIFS: LEB size: 129024 bytes (126 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS: FS size: 256886784 bytes (244 MiB, 1991 LEBs), journal size 12902400 bytes (12 MiB, 100 LEBs)
UBIFS: reserved for root: 4952683 bytes (4836 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 39D861DA-6C42-4A27-97F2-F11FA4A5B334, small LPT model
Can you make a patch for stable?
Thanks again.
---
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Resend: NAND 16bit ONFI problem
2013-07-18 7:42 ` Alexander Shiyan
@ 2013-07-18 8:20 ` Brian Norris
0 siblings, 0 replies; 4+ messages in thread
From: Brian Norris @ 2013-07-18 8:20 UTC (permalink / raw)
To: Alexander Shiyan; +Cc: linux-mtd, Matthieu CASTET
On Thu, Jul 18, 2013 at 12:42 AM, Alexander Shiyan <shc_work@mail.ru> wrote:
>> My (untested, not compiled, and possibly line-wrapped) patch:
...
> Thanks Brian! Tested by me and it works now as expected.
Great, glad to hear.
...
> Can you make a patch for stable?
Sent.
> Thanks again.
You're welcome.
Brian
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-07-18 8:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-10 8:39 Resend: NAND 16bit ONFI problem Alexander Shiyan
2013-07-18 7:02 ` Brian Norris
2013-07-18 7:42 ` Alexander Shiyan
2013-07-18 8:20 ` Brian Norris
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.