cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cacheflush_no.h (1884B)


      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 */