cp15.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /* ----------------------------------------------------------------------------
  2. * SAM Software Package License
  3. * ----------------------------------------------------------------------------
  4. * Copyright (c) 2011, Atmel Corporation
  5. *
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions are met:
  10. *
  11. * - Redistributions of source code must retain the above copyright notice,
  12. * this list of conditions and the disclaimer below.
  13. *
  14. * Atmel's name may not be used to endorse or promote products derived from
  15. * this software without specific prior written permission.
  16. *
  17. * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20. * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23. * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. * ----------------------------------------------------------------------------
  28. */
  29. #ifndef _CP15_H
  30. #define _CP15_H
  31. #include <stdint.h>
  32. /*----------------------------------------------------------------------------
  33. * Definition
  34. *----------------------------------------------------------------------------*/
  35. #define CP15_L4_BIT 15 // Determines if the T bit is set when load instructions
  36. // change the PC:
  37. // 0 = loads to PC set the T bit
  38. // 1 = loads to PC do not set T bit
  39. #define CP15_RR_BIT 14 // RR bit Replacement strategy for Icache and Dcache:
  40. // 0 = Random replacement
  41. // 1 = Round-robin replacement.
  42. #define CP15_V_BIT 13 // V bit Location of exception vectors:
  43. // 0 = Normal exception vectors selected address range = 0x0000 0000 to 0x0000 001C
  44. // 1 = High exception vect selected, address range = 0xFFFF 0000 to 0xFFFF 001C
  45. #define CP15_I_BIT 12 // I bit Icache enable/disable:
  46. // 0 = Icache disabled
  47. // 1 = Icache enabled
  48. #define CP15_R_BIT 9 // R bit ROM protection
  49. #define CP15_S_BIT 8 // S bit System protection
  50. #define CP15_B_BIT 7 // B bit Endianness:
  51. // 0 = Little-endian operation
  52. // 1 = Big-endian operation.
  53. #define CP15_C_BIT 2 // C bit Dcache enable/disable:
  54. // 0 = cache disabled
  55. // 1 = cache enabled
  56. #define CP15_A_BIT 1 // A bit Alignment fault enable/disable:
  57. // 0 = Data address alignment fault checking disabled
  58. // 1 = Data address alignment fault checking enabled
  59. #define CP15_M_BIT 0 // M bit MMU enable/disable: 0 = disabled 1 = enabled.
  60. // 0 = disabled
  61. // 1 = enabled
  62. /** No access Any access generates a domain fault. */
  63. #define CP15_DOMAIN_NO_ACCESS 0x00
  64. /** Client Accesses are checked against the access permission bits in the section or page descriptor. */
  65. #define CP15_DOMAIN_CLIENT_ACCESS 0x01
  66. /** Manager Accesses are not checked against the access permission bits so a permission fault cannot be generated. */
  67. #define CP15_DOMAIN_MANAGER_ACCESS 0x03
  68. #define CP15_ICache 1
  69. #define CP15_DCache 0
  70. #define CP15_PMCNTENSET_ENABLE 31
  71. #define CP15_PMCR_DIVIDER 3
  72. #define CP15_PMCR_RESET 2
  73. #define CP15_PMCR_ENABLE 0
  74. /*------------------------------------------------------------------------------ */
  75. /* Exported functions */
  76. /*------------------------------------------------------------------------------ */
  77. extern unsigned int CP15_ReadID(void);
  78. extern unsigned int CP15_ReadControl(void);
  79. extern void CP15_ExclusiveCache(void);
  80. extern void CP15_NonExclusiveCache(void);
  81. extern void CP15_ISB(void);
  82. extern void CP15_DSB(void);
  83. extern void CP15_DMB(void);
  84. extern void CP15_SelectDCache(void);
  85. extern void CP15_SelectICache(void);
  86. extern void CP15_WriteControl(unsigned int value);
  87. extern void CP15_WriteTTB(unsigned int value);
  88. extern void CP15_WriteDomainAccessControl(unsigned int value);
  89. extern void CP15_InvalidateIcacheInnerSharable(void);
  90. extern void CP15_InvalidateBTBinnerSharable(void);
  91. extern void CP15_InvalidateIcache(void);
  92. extern void CP15_InvalidateIcacheByMva(void);
  93. extern void CP15_InvalidateBTB(void);
  94. extern void CP15_InvalidateBTBbyMva(uint32_t VA_Addr);
  95. extern void CP15_InvalidateDcacheBySetWay(void);
  96. extern void CP15_CleanDCacheBySetWay(void);
  97. extern void CP15_CleanInvalidateDCacheBySetWay(void);
  98. extern void CP15_InvalidateDcacheByMva(uint32_t startAddr, uint32_t endAddr );
  99. extern void CP15_CleanDCacheByMva(uint32_t startAddr, uint32_t endAddr );
  100. extern void CP15_CleanInvalidateDcacheByMva(uint32_t startAddr, uint32_t endAddr );
  101. extern void CP15_CleanDCacheUMva(void);
  102. extern void CP15_InvalidateTranslationTable(void);
  103. extern void CP15_coherent_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );
  104. extern void CP15_invalidate_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );
  105. extern void CP15_clean_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );
  106. extern void CP15_flush_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );
  107. extern void CP15_flush_kern_dcache_for_dma (uint32_t startAddr, uint32_t size );
  108. /*------------------------------------------------------------------------------ */
  109. /* Exported functions from CP15.c */
  110. /*------------------------------------------------------------------------------ */
  111. /** MMU (Status/Enable/Disable) */
  112. extern unsigned int CP15_IsMMUEnabled(void);
  113. extern void CP15_EnableMMU(void);
  114. extern void CP15_DisableMMU(void);
  115. /** I cache (Status/Enable/Disable) */
  116. extern unsigned int CP15_IsIcacheEnabled(void);
  117. extern void CP15_EnableIcache(void);
  118. extern void CP15_DisableIcache(void);
  119. /** D cache (Status/Enable/Disable) */
  120. extern unsigned int CP15_IsDcacheEnabled(void);
  121. extern void CP15_EnableDcache(void);
  122. extern void CP15_DisableDcache(void);
  123. extern void CP15_InvalidateTLB(void);
  124. extern void CP15_CacheClean(uint8_t CacheType);
  125. extern void CP15_CacheInvalidate(uint8_t CacheType);
  126. extern void CP15_CacheFlush(uint8_t CacheType);
  127. extern void CP15_InvalidateDCacheByVA(uint32_t S_Add, uint32_t E_Add);
  128. extern void CP15_CleanDCacheByVA(uint32_t S_Add, uint32_t E_Add);
  129. extern void CP15_FlushDCacheByVA(uint32_t S_Add, uint32_t E_Add);
  130. #endif // #ifndef _CP15_H