cacheops.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Cache operations for the cache instruction.
  3. *
  4. * (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle
  5. * (C) Copyright 1999 Silicon Graphics, Inc.
  6. *
  7. * SPDX-License-Identifier: GPL-2.0
  8. */
  9. #ifndef __ASM_CACHEOPS_H
  10. #define __ASM_CACHEOPS_H
  11. #ifndef __ASSEMBLY__
  12. static inline void mips_cache(int op, const volatile void *addr)
  13. {
  14. #ifdef __GCC_HAVE_BUILTIN_MIPS_CACHE
  15. __builtin_mips_cache(op, addr);
  16. #else
  17. __asm__ __volatile__("cache %0, 0(%1)" : : "i"(op), "r"(addr));
  18. #endif
  19. }
  20. #endif /* !__ASSEMBLY__ */
  21. /*
  22. * Cache Operations available on all MIPS processors with R4000-style caches
  23. */
  24. #define INDEX_INVALIDATE_I 0x00
  25. #define INDEX_WRITEBACK_INV_D 0x01
  26. #define INDEX_LOAD_TAG_I 0x04
  27. #define INDEX_LOAD_TAG_D 0x05
  28. #define INDEX_STORE_TAG_I 0x08
  29. #define INDEX_STORE_TAG_D 0x09
  30. #if defined(CONFIG_CPU_LOONGSON2)
  31. #define HIT_INVALIDATE_I 0x00
  32. #else
  33. #define HIT_INVALIDATE_I 0x10
  34. #endif
  35. #define HIT_INVALIDATE_D 0x11
  36. #define HIT_WRITEBACK_INV_D 0x15
  37. /*
  38. * R4000-specific cacheops
  39. */
  40. #define CREATE_DIRTY_EXCL_D 0x0d
  41. #define FILL 0x14
  42. #define HIT_WRITEBACK_I 0x18
  43. #define HIT_WRITEBACK_D 0x19
  44. /*
  45. * R4000SC and R4400SC-specific cacheops
  46. */
  47. #define INDEX_INVALIDATE_SI 0x02
  48. #define INDEX_WRITEBACK_INV_SD 0x03
  49. #define INDEX_LOAD_TAG_SI 0x06
  50. #define INDEX_LOAD_TAG_SD 0x07
  51. #define INDEX_STORE_TAG_SI 0x0A
  52. #define INDEX_STORE_TAG_SD 0x0B
  53. #define CREATE_DIRTY_EXCL_SD 0x0f
  54. #define HIT_INVALIDATE_SI 0x12
  55. #define HIT_INVALIDATE_SD 0x13
  56. #define HIT_WRITEBACK_INV_SD 0x17
  57. #define HIT_WRITEBACK_SD 0x1b
  58. #define HIT_SET_VIRTUAL_SI 0x1e
  59. #define HIT_SET_VIRTUAL_SD 0x1f
  60. /*
  61. * R5000-specific cacheops
  62. */
  63. #define R5K_PAGE_INVALIDATE_S 0x17
  64. /*
  65. * RM7000-specific cacheops
  66. */
  67. #define PAGE_INVALIDATE_T 0x16
  68. /*
  69. * R10000-specific cacheops
  70. *
  71. * Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused.
  72. * Most of the _S cacheops are identical to the R4000SC _SD cacheops.
  73. */
  74. #define INDEX_WRITEBACK_INV_S 0x03
  75. #define INDEX_LOAD_TAG_S 0x07
  76. #define INDEX_STORE_TAG_S 0x0B
  77. #define HIT_INVALIDATE_S 0x13
  78. #define CACHE_BARRIER 0x14
  79. #define HIT_WRITEBACK_INV_S 0x17
  80. #define INDEX_LOAD_DATA_I 0x18
  81. #define INDEX_LOAD_DATA_D 0x19
  82. #define INDEX_LOAD_DATA_S 0x1b
  83. #define INDEX_STORE_DATA_I 0x1c
  84. #define INDEX_STORE_DATA_D 0x1d
  85. #define INDEX_STORE_DATA_S 0x1f
  86. #endif /* __ASM_CACHEOPS_H */