cacheops.h 2.3 KB

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