linux/arch/mn10300/mm
David Howells b75bb2365d MN10300: The icache invalidate functions should disable the icache first
The icache invalidate functions should disable the icache on AM33 and wait for
it to quiesce before attempting to invalidate it, and should then wait for it
to quiesce again before reenabling it, but on AM34 they should invalidate
directly.  The same goes for the dcache invalidation, but this isn't used much.

Whilst we're at it, this can be wrapped in assembler macros to remove duplicate
code.

The AM33 manual states that:

	An operation that invalidates the cache, switches the writing mode, or
	changes the way mode must be performed after disabling the cache,
	checking the busy bit, and confirming that the cache is not in
	operation.

for the dcache [sec 2.8.3.2.1].  This is not stated so for the icache [sec
2.8.3.1.1] but the example code there suggests that it is.

Whilst the AM34 manual states that the cache must be disabled for both the
icache [sec 1.8.3.2.1] and the dcache [sec 1.8.3.2.1], the Panasonic hardware
engineers say the manual is wrong and that disabling the caches for
invalidation is wrong.

Furthermore, they say that disabling the caches on the AM34 whilst running an
SMP kernel can lead to incoherency between the various CPU caches and should
thus be avoided.

Signed-off-by: David Howells <dhowells@redhat.com>
2011-03-18 16:54:29 +00:00
..
Kconfig.cache MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
Makefile MN10300: SMP TLB flushing 2010-10-27 17:28:51 +01:00
cache-disabled.c MN10300: Handle missing sys_cacheflush() when caching disabled 2010-09-28 18:01:14 -07:00
cache-flush-by-reg.S MN10300: AM34: Add cacheflushing by using the AM34 purge registers 2010-10-27 17:28:45 +01:00
cache-flush-by-tag.S MN10300: SMP: Differentiate local cache flushing 2010-10-27 17:28:45 +01:00
cache-flush-icache.c MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache-inv-by-reg.S MN10300: The icache invalidate functions should disable the icache first 2011-03-18 16:54:29 +00:00
cache-inv-by-tag.S MN10300: The icache invalidate functions should disable the icache first 2011-03-18 16:54:29 +00:00
cache-inv-icache.c MN10300: The SMP_ICACHE_INV_FLUSH_RANGE IPI command does not exist 2011-03-14 14:45:29 +00:00
cache-smp-flush.c MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache-smp-inv.c MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache-smp.c MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache-smp.h MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache.c MN10300: Cache: Implement SMP global cache flushing 2010-10-27 17:28:47 +01:00
cache.inc MN10300: The icache invalidate functions should disable the icache first 2011-03-18 16:54:29 +00:00
dma-alloc.c arch/mn10300/mm: eliminate NULL dereference 2010-08-23 11:41:24 -07:00
extable.c mn10300: add the MN10300/AM33 architecture to the kernel 2008-02-08 09:22:30 -08:00
fault.c MN10300: And Panasonic AM34 subarch and implement SMP 2010-10-27 17:28:55 +01:00
init.c MN10300: Map userspace atomic op regs as a vmalloc page 2010-10-27 17:28:56 +01:00
misalignment.c MN10300: BUG to BUG_ON changes 2010-10-27 17:28:33 +01:00
mmu-context.c MN10300: Make the use of PIDR to mark TLB entries controllable 2010-10-27 17:28:49 +01:00
pgtable.c MN10300: Rename __flush_tlb*() to local_flush_tlb*() 2010-10-27 17:28:49 +01:00
tlb-mn10300.S MN10300: Use the [ID]PTEL2 registers rather than [ID]PTEL for TLB control 2010-10-27 17:28:50 +01:00
tlb-smp.c MN10300: SMP TLB flushing 2010-10-27 17:28:51 +01:00