linux/arch/m68k/include/asm/cacheflush_no.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _M68KNOMMU_CACHEFLUSH_H
   3#define _M68KNOMMU_CACHEFLUSH_H
   4
   5/*
   6 * (C) Copyright 2000-2010, Greg Ungerer <gerg@snapgear.com>
   7 */
   8#include <linux/mm.h>
   9#include <asm/mcfsim.h>
  10
  11#define flush_cache_all()                       __flush_cache_all()
  12#define flush_dcache_range(start, len)          __flush_dcache_all()
  13#define flush_icache_range(start, len)          __flush_icache_all()
  14
  15void mcf_cache_push(void);
  16
  17static inline void __clear_cache_all(void)
  18{
  19#ifdef CACHE_INVALIDATE
  20        __asm__ __volatile__ (
  21                "movec  %0, %%CACR\n\t"
  22                "nop\n\t"
  23                : : "r" (CACHE_INVALIDATE) );
  24#endif
  25}
  26
  27static inline void __flush_cache_all(void)
  28{
  29#ifdef CACHE_PUSH
  30        mcf_cache_push();
  31#endif
  32        __clear_cache_all();
  33}
  34
  35/*
  36 * Some ColdFire parts implement separate instruction and data caches,
  37 * on those we should just flush the appropriate cache. If we don't need
  38 * to do any specific flushing then this will be optimized away.
  39 */
  40static inline void __flush_icache_all(void)
  41{
  42#ifdef CACHE_INVALIDATEI
  43        __asm__ __volatile__ (
  44                "movec  %0, %%CACR\n\t"
  45                "nop\n\t"
  46                : : "r" (CACHE_INVALIDATEI) );
  47#endif
  48}
  49
  50static inline void __flush_dcache_all(void)
  51{
  52#ifdef CACHE_PUSH
  53        mcf_cache_push();
  54#endif
  55#ifdef CACHE_INVALIDATED
  56        __asm__ __volatile__ (
  57                "movec  %0, %%CACR\n\t"
  58                "nop\n\t"
  59                : : "r" (CACHE_INVALIDATED) );
  60#else
  61        /* Flush the write buffer */
  62        __asm__ __volatile__ ( "nop" );
  63#endif
  64}
  65
  66/*
  67 * Push cache entries at supplied address. We want to write back any dirty
  68 * data and then invalidate the cache lines associated with this address.
  69 */
  70static inline void cache_push(unsigned long paddr, int len)
  71{
  72        __flush_cache_all();
  73}
  74
  75/*
  76 * Clear cache entries at supplied address (that is don't write back any
  77 * dirty data).
  78 */
  79static inline void cache_clear(unsigned long paddr, int len)
  80{
  81        __clear_cache_all();
  82}
  83
  84#include <asm-generic/cacheflush.h>
  85
  86#endif /* _M68KNOMMU_CACHEFLUSH_H */
  87