• Sergei Shtylyov's avatar
    NAND: Fix NAND ECC errors on AMD Au1550 · 35af68b5
    Sergei Shtylyov authored
        On AMD Au1550 the static bus controller fails to keep -CE asserted during
    chip ready delay on read commands and the NAND chip being used requires this.
    So, the current driver allows nand_base.c to drive -CE manually during the
    entire sector read. When the PCMCIA driver is enabled however, occasionally
    the ECC errors occur on NAND reads. This happens because the PCMCIA driver
    polls sockets periodically and reads one of the board's control/status regs
    (BCSRs) which are on the same static bus as the NAND flash, and just use
    another chip select (and the NOR flash also resides on that bus), so as the
    NAND driver forces NAND chip select asserted and the -RE signal is shared, a
    contention occurs on the static bus when BCSR or NOR flash is read while we're
    reading from NAND.
        So, we either can't keep interrupts enabled during the whole NAND sector
    read (which is hardly acceptable), or have to implement some interlocking
    scheme between multiple drivers (which is painful, and makes me shudder :-).
        There's a third way which has proven to work: to force -CE asserted only
    while we're waiting for a NAND chip to become ready after a read command,
    disabling interrupts for a maximum of 25 microseconds (according to Toshiba
    TC58DVM92A1FT00 datasheet -- this chip is mentioned in the board schematics);
    for Samsung NAND chip which seems to be actually used this delay is even less,
    12 us.
    Signed-off-by: default avatarKonstantin Baydarov <kbaidarov@ru.mvista.com>
    Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
    Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
    35af68b5
au1550nd.c 14.7 KB