[U-Boot] [PATCH] lib_ppc: rework the flush_cache

Scott Wood
2008-12-02T18:13:26Z

Dave Liu wrote:
> - It is possible to miss flush/invalidate the last
> cache line, we fix it at here.

That comment was on the version you posted in the NAND patch; the
lib_ppc version actually looks worse -- it tried to round down to avoid
the issue, but it was missing a ~. Thus, it flushed everything from
address 0 to the end.

> + start = start_addr & ~(CONFIG_SYS_CACHELINE_SIZE - 1);
> + end = (start_addr + size) & ~(CONFIG_SYS_CACHELINE_SIZE - 1);

end = start_addr + size - 1;

The rounding is unnecessary for end, and without the - 1, if start_addr
+ size is on a cacheline boundary, you'll flush one cache line too many
(which might not be mapped, or might cause end to wrap around to zero if
flushing at the end of the address space).

-Scott