linux/arch/arm/include/asm/cachetype.h
<<
>>
Prefs
   1#ifndef __ASM_ARM_CACHETYPE_H
   2#define __ASM_ARM_CACHETYPE_H
   3
   4#define CACHEID_VIVT                    (1 << 0)
   5#define CACHEID_VIPT_NONALIASING        (1 << 1)
   6#define CACHEID_VIPT_ALIASING           (1 << 2)
   7#define CACHEID_VIPT                    (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING)
   8#define CACHEID_ASID_TAGGED             (1 << 3)
   9#define CACHEID_VIPT_I_ALIASING         (1 << 4)
  10
  11extern unsigned int cacheid;
  12
  13#define cache_is_vivt()                 cacheid_is(CACHEID_VIVT)
  14#define cache_is_vipt()                 cacheid_is(CACHEID_VIPT)
  15#define cache_is_vipt_nonaliasing()     cacheid_is(CACHEID_VIPT_NONALIASING)
  16#define cache_is_vipt_aliasing()        cacheid_is(CACHEID_VIPT_ALIASING)
  17#define icache_is_vivt_asid_tagged()    cacheid_is(CACHEID_ASID_TAGGED)
  18#define icache_is_vipt_aliasing()       cacheid_is(CACHEID_VIPT_I_ALIASING)
  19
  20/*
  21 * __LINUX_ARM_ARCH__ is the minimum supported CPU architecture
  22 * Mask out support which will never be present on newer CPUs.
  23 * - v6+ is never VIVT
  24 * - v7+ VIPT never aliases on D-side
  25 */
  26#if __LINUX_ARM_ARCH__ >= 7
  27#define __CACHEID_ARCH_MIN      (CACHEID_VIPT_NONALIASING |\
  28                                 CACHEID_ASID_TAGGED |\
  29                                 CACHEID_VIPT_I_ALIASING)
  30#elif __LINUX_ARM_ARCH__ >= 6
  31#define __CACHEID_ARCH_MIN      (~CACHEID_VIVT)
  32#else
  33#define __CACHEID_ARCH_MIN      (~0)
  34#endif
  35
  36/*
  37 * Mask out support which isn't configured
  38 */
  39#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
  40#define __CACHEID_ALWAYS        (CACHEID_VIVT)
  41#define __CACHEID_NEVER         (~CACHEID_VIVT)
  42#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
  43#define __CACHEID_ALWAYS        (0)
  44#define __CACHEID_NEVER         (CACHEID_VIVT)
  45#else
  46#define __CACHEID_ALWAYS        (0)
  47#define __CACHEID_NEVER         (0)
  48#endif
  49
  50static inline unsigned int __attribute__((pure)) cacheid_is(unsigned int mask)
  51{
  52        return (__CACHEID_ALWAYS & mask) |
  53               (~__CACHEID_NEVER & __CACHEID_ARCH_MIN & mask & cacheid);
  54}
  55
  56#endif
  57