On 04/10/2013 06:54:25 AM, Wolfgang Denk wrote:
Dear Scott,

In message <1365555490.31043.20@snotra> you wrote:
>
> If that means you have some other reason for objecting that you *do*
> want to go into, could you elaborate?

I explained that before: we already have commands to operate with the
caches, and we should rather use the existingones and extend these as
needed instead of adding arbitrary new ones.

The existing ones have semantics that are mismatched to what we want to expose.
        
> This is just one implementation of flush_cache(). Here are all of them:

Thanks for the list.  But that was not my question.  I asked (ok, in
the other message):

It was my answer to your question.  If you don't like my answer, fine.

| ...  Can you please point me to
| the code (ideally in mainline U-Boot) which would cause problems with
| the suggested separation of invalidating the IC and flushing the DC
| into subcommands of the "icache" resp. "dcache" commands?

Yes, I did have a look at all these implementations, and I think none
of them will cause any issues.

Needing to touch them at all is a big issue. We don't know the details of all these architectures, and cannot test them. If there were a good *reason* for it we could engage the maintainers of those architectures, but I've yet to hear a reason that justifies the hassle. We'd probably be better off just keeping the patch in our internal tree, which is the tree that the user who ran into this problem is using.

Actually quite a number of them are actually just combiing calls like that:

Many have the instruction/data sequence inside the loop so we'd need to pick it apart (higher risk of introducing a bug, so more need for testing that we cannot do). Blackfin is weird -- if we did a simple split at the C-code level it looks like we'd have two dummy loops executing.

> This is what we're trying to expose as a command. If you want it split > into icache and dcache, it needs to be rewritten for every architecture

Actually it appears to be already split quite naturally for all
currently supported architectures (at least to the extend these
implement this functinality at all).  flush_cache() is just a
convenience, and if you think twice not even a very lucky one.
The openrisc example above shows this pretty clearly.

The openrisc example does not show any great difficulty implementing flush_cache().

> the actual need for splitting it? The semantics we're trying to expose
> as a command are the same as this function is meant to implement,

You defend this stupid function  flush_cache()  as if it was of major
achievement of the development of software in the last decades?

"Major achievement"? No, I just said it was a useful (but poorly named) abstraction, which it is. What do we gain by replacing every caller of flush_cache() with two function calls instead? When would we ever call one but not the other, and if there is such a case, what harm would come out of doing both anyway?

-Scott
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to