/* SPDX-License-Identifier: GPL-2.0-only */
/*
* arch/arm/include/asm/glue-cache.h
*
* Copyright (C) 1999-2002 Russell King
*/
#ifndef ASM_GLUE_CACHE_H
#define ASM_GLUE_CACHE_H
#include <asm/glue.h>
/*
* Cache Model
* ===========
*/
#undef _CACHE
#undef MULTI_CACHE
#if defined([31mCONFIG_CPU_CACHE_V4[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE v4
# endif
#endif
#if defined([31mCONFIG_CPU_ARM920T[0m) || defined([31mCONFIG_CPU_ARM922T[0m) || \
defined([31mCONFIG_CPU_ARM925T[0m) || defined([31mCONFIG_CPU_ARM1020[0m) || \
defined([31mCONFIG_CPU_ARM1026[0m)
# define MULTI_CACHE 1
#endif
#if defined([31mCONFIG_CPU_FA526[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE fa
# endif
#endif
#if defined([31mCONFIG_CPU_ARM926T[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE arm926
# endif
#endif
#if defined([31mCONFIG_CPU_ARM940T[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE arm940
# endif
#endif
#if defined([31mCONFIG_CPU_ARM946E[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE arm946
# endif
#endif
#if defined([31mCONFIG_CPU_CACHE_V4WB[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE v4wb
# endif
#endif
#if defined([31mCONFIG_CPU_XSCALE[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE xscale
# endif
#endif
#if defined([31mCONFIG_CPU_XSC3[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE xsc3
# endif
#endif
#if defined([31mCONFIG_CPU_MOHAWK[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE mohawk
# endif
#endif
#if defined([31mCONFIG_CPU_FEROCEON[0m)
# define MULTI_CACHE 1
#endif
#if defined([31mCONFIG_CPU_V6[0m) || defined([31mCONFIG_CPU_V6K[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE v6
# endif
#endif
#if defined([31mCONFIG_CPU_V7[0m)
# ifdef _CACHE
# define MULTI_CACHE 1
# else
# define _CACHE v7
# endif
#endif
#if defined([31mCONFIG_CACHE_B15_RAC[0m)
# define MULTI_CACHE 1
#endif
#if defined([31mCONFIG_CPU_V7M[0m)
# define MULTI_CACHE 1
#endif
#if !defined(_CACHE) && !defined(MULTI_CACHE)
#error Unknown cache maintenance model
#endif
#ifndef __ASSEMBLER__
static inline void nop_flush_icache_all(void) { }
static inline void nop_flush_kern_cache_all(void) { }
static inline void nop_flush_kern_cache_louis(void) { }
static inline void nop_flush_user_cache_all(void) { }
static inline void nop_flush_user_cache_range(unsigned long a,
unsigned long b, unsigned int c) { }
static inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { }
static inline int nop_coherent_user_range(unsigned long a,
unsigned long b) { return 0; }
static inline void nop_flush_kern_dcache_area(void *a, size_t s) { }
static inline void nop_dma_flush_range(const void *a, const void *b) { }
static inline void nop_dma_map_area(const void *s, size_t l, int f) { }
static inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
#endif
#ifndef MULTI_CACHE
#define __cpuc_flush_icache_all __glue(_CACHE,_flush_icache_all)
#define __cpuc_flush_kern_all __glue(_CACHE,_flush_kern_cache_all)
#define __cpuc_flush_kern_louis __glue(_CACHE,_flush_kern_cache_louis)
#define __cpuc_flush_user_all __glue(_CACHE,_flush_user_cache_all)
#define __cpuc_flush_user_range __glue(_CACHE,_flush_user_cache_range)
#define __cpuc_coherent_kern_range __glue(_CACHE,_coherent_kern_range)
#define __cpuc_coherent_user_range __glue(_CACHE,_coherent_user_range)
#define __cpuc_flush_dcache_area __glue(_CACHE,_flush_kern_dcache_area)
#define dmac_flush_range __glue(_CACHE,_dma_flush_range)
#endif
#endif