mips: cache: Bulletproof the code against cornercases
authorMarek Vasut <marex@denx.de>
Wed, 27 Jan 2016 02:13:59 +0000 (03:13 +0100)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Mon, 1 Feb 2016 21:13:24 +0000 (22:13 +0100)
commitfbb0de088b86a0f87e876531b5ae6077cc0ab14c
treee0f603f4509365e245742deaf7c3b5bb1df0ff67
parente26e8dc8f4da08eb0a58f14e23e78c008e6a6440
mips: cache: Bulletproof the code against cornercases

This patch makes sure that the flush/invalidate_dcache_range() functions
can handle corner-case calls like this -- invalidate_dcache_range(0, 0, 0);
This call is valid and is happily produced by USB EHCI code for example.
The expected behavior of the cache function(s) in this case is that they
will do no operation, since the size is zero.

The current implementation though has a problem where such invocation will
result in a hard CPU hang. This is because under such conditions, where the
start_addr = 0 and stop = 0, the addr = 0 and aend = 0xffffffe0 . The loop
will then try to iterate over the entire address space, which in itself is
wrong. But iterating over the entire address space might also hit some odd
address which will cause bus hang. The later happens on the Atheros MIPS.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>
arch/mips/lib/cache.c