ea49f8ffae
Add a very basic mmu-less support for coldfire m548x family. This is perhaps also valid for m547x family. The port comprises the serial, tick timer and reboot support. The gpio part compiles but is empty. This gives a functional albeit limited linux for the m548x coldfire family. This has been tested on a Freescale M548xEVB Lite board with a M5484 processor and the default dbug monitor. Signed-off-by: Philippe De Muyter <phdm@macqel.be> Signed-off-by: Greg Ungerer <gerg@uclinux.org>
93 lines
2.7 KiB
C
93 lines
2.7 KiB
C
#ifndef _M68KNOMMU_CACHEFLUSH_H
|
|
#define _M68KNOMMU_CACHEFLUSH_H
|
|
|
|
/*
|
|
* (C) Copyright 2000-2004, Greg Ungerer <gerg@snapgear.com>
|
|
*/
|
|
#include <linux/mm.h>
|
|
|
|
#define flush_cache_all() __flush_cache_all()
|
|
#define flush_cache_mm(mm) do { } while (0)
|
|
#define flush_cache_dup_mm(mm) do { } while (0)
|
|
#define flush_cache_range(vma, start, end) __flush_cache_all()
|
|
#define flush_cache_page(vma, vmaddr) do { } while (0)
|
|
#define flush_dcache_range(start,len) __flush_cache_all()
|
|
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0
|
|
#define flush_dcache_page(page) do { } while (0)
|
|
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
|
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
|
#define flush_icache_range(start,len) __flush_cache_all()
|
|
#define flush_icache_page(vma,pg) do { } while (0)
|
|
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
|
|
#define flush_cache_vmap(start, end) do { } while (0)
|
|
#define flush_cache_vunmap(start, end) do { } while (0)
|
|
|
|
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
|
memcpy(dst, src, len)
|
|
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
|
|
memcpy(dst, src, len)
|
|
|
|
static inline void __flush_cache_all(void)
|
|
{
|
|
#if defined(CONFIG_M5407) || defined(CONFIG_M548x)
|
|
/*
|
|
* Use cpushl to push and invalidate all cache lines.
|
|
* Gas doesn't seem to know how to generate the ColdFire
|
|
* cpushl instruction... Oh well, bit stuff it for now.
|
|
*/
|
|
__asm__ __volatile__ (
|
|
"nop\n\t"
|
|
"clrl %%d0\n\t"
|
|
"1:\n\t"
|
|
"movel %%d0,%%a0\n\t"
|
|
"2:\n\t"
|
|
".word 0xf468\n\t"
|
|
"addl #0x10,%%a0\n\t"
|
|
"cmpl #0x00000800,%%a0\n\t"
|
|
"blt 2b\n\t"
|
|
"addql #1,%%d0\n\t"
|
|
"cmpil #4,%%d0\n\t"
|
|
"bne 1b\n\t"
|
|
"movel #0xb6088500,%%d0\n\t"
|
|
"movec %%d0,%%CACR\n\t"
|
|
: : : "d0", "a0" );
|
|
#endif /* CONFIG_M5407 */
|
|
#if defined(CONFIG_M523x) || defined(CONFIG_M527x)
|
|
__asm__ __volatile__ (
|
|
"movel #0x81400100, %%d0\n\t"
|
|
"movec %%d0, %%CACR\n\t"
|
|
"nop\n\t"
|
|
: : : "d0" );
|
|
#endif /* CONFIG_M523x || CONFIG_M527x */
|
|
#if defined(CONFIG_M528x)
|
|
__asm__ __volatile__ (
|
|
"movel #0x81000200, %%d0\n\t"
|
|
"movec %%d0, %%CACR\n\t"
|
|
"nop\n\t"
|
|
: : : "d0" );
|
|
#endif /* CONFIG_M528x */
|
|
#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || defined(CONFIG_M5272)
|
|
__asm__ __volatile__ (
|
|
"movel #0x81000100, %%d0\n\t"
|
|
"movec %%d0, %%CACR\n\t"
|
|
"nop\n\t"
|
|
: : : "d0" );
|
|
#endif /* CONFIG_M5206 || CONFIG_M5206e || CONFIG_M5272 */
|
|
#ifdef CONFIG_M5249
|
|
__asm__ __volatile__ (
|
|
"movel #0xa1000200, %%d0\n\t"
|
|
"movec %%d0, %%CACR\n\t"
|
|
"nop\n\t"
|
|
: : : "d0" );
|
|
#endif /* CONFIG_M5249 */
|
|
#ifdef CONFIG_M532x
|
|
__asm__ __volatile__ (
|
|
"movel #0x81000200, %%d0\n\t"
|
|
"movec %%d0, %%CACR\n\t"
|
|
"nop\n\t"
|
|
: : : "d0" );
|
|
#endif /* CONFIG_M532x */
|
|
}
|
|
|
|
#endif /* _M68KNOMMU_CACHEFLUSH_H */
|