
Dear Henrik Nordström,
In message 1368792981.765.21.camel@localhost you wrote:
There is a common, architecture-independent C API that implements cache flushing/invalidation; please re-read the summary at [1]
Sorry I missed that discussion. Had a bit too much mail for a while.
No problem; that's why I pointed you to the sumnmary (and the rest of the thread).
The cache commands currently do not support subcommands for flushing / invalidating the caches. See again [1].
From what I see the cache commands do have a sub commands for flushing.
"icache flush" calls icache_invalidate_all().
"dcache flush" calls flush_dcache_all().
Indeed. I was not aware of this :-(
but imho the user shouldn't really need to care for these and is why I hooked into the go command.
In this case you should use the common C API.
I don't see much of a performance problem with a automatic full cache flush when using the go command on platforms with incoherent caches. In most use cases it's not very different from the bootm command which also needs to do the same (and using a similar hooking mechanism as what I used for go, but not saying that is a good thing)
No. bootm knows exactly the location and size of the image, so it is sufficient to flush / invalidate a part of the memory, usually a pretty small one compared to the total RAM size.
And I do not think there needs to be commands for flushing specific regions other than for testing. Region based flushing is better done by code which knows what is needed. It's hard for users to get this right as most times it works anyway.
The code should know which ranges need flushing, not the user.
Best regards,
Wolfgang Denk