Skip to contentSkip to conversation

BUG in nand_base.c

DISCUSSION Brad Beveridge 2 participants 2 messages Oct 6, 2004 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

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 
#1 lore raw
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