
Sure, reducing the reliance on volatile is a good idea, but I'm at a loss for anything better to do.
I'm seeing a real problem that is only fixed by qualifying the container of the pointer as volatile, i.e. "void *volatile". "volatile void *" has no effect as expected given that the read/write accessors are used now.
The old data type was essentially "volatile void *volatile addr" and the new type is simply "void *addr". I seem to need at least "void *volatile addr" for things to work.
Note, I'm only seeing this problem on our PXA250 boards.
Adrian -- Linux Software Engineer | EuroTech, Inc. | www.eurotech-inc.com
On Tue, 29 Apr 2008, Wolfgang Denk wrote:
In message alpine.DEB.1.10.0804291604250.32753@pmy.adscville you wrote:
I narrowed down the source of the problem to the loss of the volatile qualifier on the addr pointer in flash_write_cmd(). Adding the qualifier gets rid of the corruption. In the older 1.2.0 sources, addr was declared as "volatile cfiptr_t addr;".
The volatile should not be needed - the CFI driver should use correct accessor macros instead. See Documentation/volatile-considered-harmful.txt in your Linux kernel source tree...
Best regards,
Wolfgang Denk