[PATCH] MTD NAND: Fix ECC errors in au1550nd.c
Vitaly Wool
vwool at ru.mvista.com
Wed Oct 5 15:22:59 EDT 2005
Vitaly Bordug wrote:
> Thomas Gleixner wrote:
>
>> On Tue, 2005-10-04 at 15:53 +0400, Vitaly Bordug wrote:
>>
>>> Actually, yes, a sort of. The issue was in some bytes lost during
>>> read cycles (ECC errors reported) when PCMCIA (board AMD Alchemy
>>> 1550) is active. This does not take place when 4 CS drives happen -
>>> as shown on the timing diagram - e.g.
>>> cs: \__/\__/\__/\__/\_<CS low>______ [works fine]
>>> ^
>>> asserted by SoC controller
>>> unchanged code:
>>> cs:\______________/\_[PCMCIA driver steals bytes ]...
>>> ^
>>> asserted by SoC controller
>>
>>
>>
>> Right. Thats a known problem with those FLASH types. You have to hold CS
>> low until the busy pin goes high.
>>
>> Hmm, you have to protect against interrupts during this time I guess ?
>> If not you can use the existing controller lock implementation to
>> protect against concurrent access.
>>
> Yes. That's because making a global locking mechanism across 3
> different divers looks more ugly than just local_irq_save() for a
> short period in one callback.
Enabling interrupts in callback looks quite dangerous to me. I'm also
afraid that real-time responsiveness of that system is not gonna be
satisfactory.
So why not implement mutex-based bus_lock()/bus_unlock() routines
somewhere in arch/mips/somewhere and call those from wherever they are
needed to prevent concurrent access? It'a a question due to the fact
that I haven't seen evidence that you really need to disable interrupts,
if that's not the case, please elaborate :)
Vitaly
More information about the linux-mtd
mailing list