Other Parts Discussed in Thread: DM3730
Hi,
We are facing a problem using the DM3730 chip to communicate with a NAND device.
the NAND chip is connected over GPMC, and the software we are using is the standard Linux driver for OMAP NAND (mtd/nand/omap2.c).
The problem is that occasinally, incorrect data is being read from the NAND chip. Tests showed that the occasional incorrect data is received when the DM sometimes read from the NAND ahead of time (during the tR, while the NAND is still busy prepearing the requested block data). in other words, the DM sometimes does not wait (sleep) long enough between its command and its following read acceses.
The driver indeed sleeps between the read command and the following read acceses using a simple loop (udealy) 50µs. However, in practice, it was shown that the sleep usually takes the expected amount of time, but sometimes it's extremely short - significantly less than 1µs. This proves that the NAND commands executed by ARM before the sleep were somehow stalled inside the DM untill near the end of the sleep period.
Extra tests showed that a simlar problem exists with the GPIO controller: a loop of GPIO swinging code with udelay in between, demonstrated normal delays most of the time, but rarely an approximate zero delay time appeared. This proves that stalls exists also for the ARM GPIO commands.
Our tests included using memory barriers and uncached io remaps, and were run on several chips.
Are the stalls inside the DM a normal behavior? And are the any specifc workarounds to avoid theses stalls?
Thanks in advance,
Daniel