m68knommu: reorganize the no-MMU cache flushing to match m68k
Introduce cache_push() and cache_clear() functions for the non-MMU m68k devices. With these in place we can more easily merge some of the common m68k arch code. In particular by reorganizing the __flush_cache_all() code and separating the cache push and clear functions it becomes trivial to implement the new cache_push() and cache_clear() functions. Signed-off-by: Greg Ungerer <gerg@uclinux.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
@@ -30,11 +30,8 @@
|
|||||||
|
|
||||||
void mcf_cache_push(void);
|
void mcf_cache_push(void);
|
||||||
|
|
||||||
static inline void __flush_cache_all(void)
|
static inline void __clear_cache_all(void)
|
||||||
{
|
{
|
||||||
#ifdef CACHE_PUSH
|
|
||||||
mcf_cache_push();
|
|
||||||
#endif
|
|
||||||
#ifdef CACHE_INVALIDATE
|
#ifdef CACHE_INVALIDATE
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"movel %0, %%d0\n\t"
|
"movel %0, %%d0\n\t"
|
||||||
@@ -44,6 +41,14 @@ static inline void __flush_cache_all(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __flush_cache_all(void)
|
||||||
|
{
|
||||||
|
#ifdef CACHE_PUSH
|
||||||
|
mcf_cache_push();
|
||||||
|
#endif
|
||||||
|
__clear_cache_all();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some ColdFire parts implement separate instruction and data caches,
|
* Some ColdFire parts implement separate instruction and data caches,
|
||||||
* on those we should just flush the appropriate cache. If we don't need
|
* on those we should just flush the appropriate cache. If we don't need
|
||||||
@@ -76,4 +81,23 @@ static inline void __flush_dcache_all(void)
|
|||||||
__asm__ __volatile__ ( "nop" );
|
__asm__ __volatile__ ( "nop" );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Push cache entries at supplied address. We want to write back any dirty
|
||||||
|
* data and the invalidate the cache lines associated with this address.
|
||||||
|
*/
|
||||||
|
static inline void cache_push(unsigned long paddr, int len)
|
||||||
|
{
|
||||||
|
__flush_cache_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear cache entries at supplied address (that is don't write back any
|
||||||
|
* dirty data).
|
||||||
|
*/
|
||||||
|
static inline void cache_clear(unsigned long paddr, int len)
|
||||||
|
{
|
||||||
|
__clear_cache_all();
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _M68KNOMMU_CACHEFLUSH_H */
|
#endif /* _M68KNOMMU_CACHEFLUSH_H */
|
||||||
|
Reference in New Issue
Block a user