BUG in nand_base.c
Hi all, I have been playing with large size nand devices & have found what I think is a bug in nand_base.c::nand_command. I have the latest daily snapshot. Starting at line 546, there is the following code
/* One more address cycle for higher density
devices */
if (this->chipsize & 0x0c000000)
this->write_byte(mtd, (unsigned char)
((page_addr >> 16) & 0x0f));
Which will correctly trap the 4th write cycle for 64 & 128MiB parts, but not for larger sizes of 256 & 512 MiB.
In my code I have changed the line to read
if (this->chipsize & 0xfc000000)Also, I noticed that for the large page devices (nand_command_lp) a proper compare (>) is used instead of a mask - should one of these be changed to make both functions consistant?
Cheers
Brad
Signature · 7 lines
Bluewater Systems Ltd - ARM Technology Solution Centre
Brad Beveridge Bluewater Systems Ltd
Phone: +64 3 3779127 (Aus +1 800 148 751) Level 17, 119 Armagh St
Fax: +64 3 3779135 PO Box 13889
Email: [email protected] Christchurch
Web: http://www.bluewatersys.com New Zealand Quoted 12 lines · Brad Beveridge
Hi all, I have been playing with large size nand devices & have found what I think is a bug in
nand_base.c::nand_command. I have the latest daily snapshot.
Starting at line 546, there is the following code/* One more address cycle for higher density devices */ if (this->chipsize & 0x0c000000) this->write_byte(mtd, (unsigned char)((
page_addr>> 16) &0x0f));
Which will correctly trap the 4th write cycle for 64 & 128MiB parts, but not for larger sizes of 256 & 512 MiB.
In my code I have changed the line to read
Quoted 5 lines
if (this->chipsize & 0xfc000000)Also, I noticed that for the large page devices (
nand_command_lp) a proper compare (>) is used instead of a mask - should one of these be changed to make both functions consistant?
You're right. I will fix this later when I have CVS access again.
Thanks
tglx