fsl_lmem_cache.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. /*
  2. * The Clear BSD License
  3. * Copyright (c) 2015, Freescale Semiconductor, Inc.
  4. * Copyright 2016-2017 NXP
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without modification,
  8. * are permitted (subject to the limitations in the disclaimer below) provided
  9. * that the following conditions are met:
  10. *
  11. * o Redistributions of source code must retain the above copyright notice, this list
  12. * of conditions and the following disclaimer.
  13. *
  14. * o Redistributions in binary form must reproduce the above copyright notice, this
  15. * list of conditions and the following disclaimer in the documentation and/or
  16. * other materials provided with the distribution.
  17. *
  18. * o Neither the name of the copyright holder nor the names of its
  19. * contributors may be used to endorse or promote products derived from this
  20. * software without specific prior written permission.
  21. *
  22. * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
  23. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  24. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  25. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  26. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
  27. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  28. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  29. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  30. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  31. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  32. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33. */
  34. #ifndef _FSL_LMEM_CACHE_H_
  35. #define _FSL_LMEM_CACHE_H_
  36. #include "fsl_common.h"
  37. /*!
  38. * @addtogroup lmem_cache
  39. * @{
  40. */
  41. /*******************************************************************************
  42. * Definitions
  43. ******************************************************************************/
  44. /*! @name Driver version */
  45. /*@{*/
  46. /*! @brief LMEM controller driver version 2.1.0. */
  47. #define FSL_LMEM_DRIVER_VERSION (MAKE_VERSION(2, 1, 0))
  48. /*@}*/
  49. #define LMEM_CACHE_LINE_SIZE (0x10U) /*!< Cache line is 16-bytes. */
  50. #define LMEM_CACHE_SIZE_ONEWAY (4096U) /*!< Cache size is 4K-bytes one way. */
  51. /*! @brief LMEM cache mode options. */
  52. typedef enum _lmem_cache_mode
  53. {
  54. kLMEM_NonCacheable = 0x0U, /*!< Cache mode: non-cacheable. */
  55. kLMEM_CacheWriteThrough = 0x2U, /*!< Cache mode: write-through. */
  56. kLMEM_CacheWriteBack = 0x3U /*!< Cache mode: write-back. */
  57. } lmem_cache_mode_t;
  58. /*! @brief LMEM cache regions. */
  59. typedef enum _lmem_cache_region
  60. {
  61. kLMEM_CacheRegion15 = 0U, /*!< Cache Region 15. */
  62. kLMEM_CacheRegion14, /*!< Cache Region 14. */
  63. kLMEM_CacheRegion13, /*!< Cache Region 13. */
  64. kLMEM_CacheRegion12, /*!< Cache Region 12. */
  65. kLMEM_CacheRegion11, /*!< Cache Region 11. */
  66. kLMEM_CacheRegion10, /*!< Cache Region 10. */
  67. kLMEM_CacheRegion9, /*!< Cache Region 9. */
  68. kLMEM_CacheRegion8, /*!< Cache Region 8. */
  69. kLMEM_CacheRegion7, /*!< Cache Region 7. */
  70. kLMEM_CacheRegion6, /*!< Cache Region 6. */
  71. kLMEM_CacheRegion5, /*!< Cache Region 5. */
  72. kLMEM_CacheRegion4, /*!< Cache Region 4. */
  73. kLMEM_CacheRegion3, /*!< Cache Region 3. */
  74. kLMEM_CacheRegion2, /*!< Cache Region 2. */
  75. kLMEM_CacheRegion1, /*!< Cache Region 1. */
  76. kLMEM_CacheRegion0 /*!< Cache Region 0. */
  77. } lmem_cache_region_t;
  78. /*! @brief LMEM cache line command. */
  79. typedef enum _lmem_cache_line_command
  80. {
  81. kLMEM_CacheLineSearchReadOrWrite = 0U, /*!< Cache line search and read or write. */
  82. kLMEM_CacheLineInvalidate, /*!< Cache line invalidate. */
  83. kLMEM_CacheLinePush, /*!< Cache line push. */
  84. kLMEM_CacheLineClear, /*!< Cache line clear. */
  85. } lmem_cache_line_command_t;
  86. /*******************************************************************************
  87. * API
  88. ******************************************************************************/
  89. #if defined(__cplusplus)
  90. extern "C" {
  91. #endif
  92. /*!
  93. * @name Local Memory Processor Code Bus Cache Control
  94. *@{
  95. */
  96. /*!
  97. * @brief Enables/disables the processor code bus cache.
  98. * This function enables/disables the cache. The function first invalidates the entire cache
  99. * and then enables/disables both the cache and write buffers.
  100. *
  101. * @param base LMEM peripheral base address.
  102. * @param enable The enable or disable flag.
  103. * true - enable the code cache.
  104. * false - disable the code cache.
  105. */
  106. void LMEM_EnableCodeCache(LMEM_Type *base, bool enable);
  107. /*!
  108. * @brief Enables/disables the processor code bus write buffer.
  109. *
  110. * @param base LMEM peripheral base address.
  111. * @param enable The enable or disable flag.
  112. * true - enable the code bus write buffer.
  113. * false - disable the code bus write buffer.
  114. */
  115. static inline void LMEM_EnableCodeWriteBuffer(LMEM_Type *base, bool enable)
  116. {
  117. if (enable)
  118. {
  119. base->PCCCR |= LMEM_PCCCR_ENWRBUF_MASK;
  120. }
  121. else
  122. {
  123. base->PCCCR &= ~LMEM_PCCCR_ENWRBUF_MASK;
  124. }
  125. }
  126. /*!
  127. * @brief Invalidates the processor code bus cache.
  128. * This function invalidates the cache both ways, which means that
  129. * it unconditionally clears valid bits and modifies bits of a cache entry.
  130. *
  131. * @param base LMEM peripheral base address.
  132. */
  133. void LMEM_CodeCacheInvalidateAll(LMEM_Type *base);
  134. /*!
  135. * @brief Pushes all modified lines in the processor code bus cache.
  136. * This function pushes all modified lines in both ways in the entire cache.
  137. * It pushes a cache entry if it is valid and modified and clears the modified bit. If
  138. * the entry is not valid or not modified, leave as is. This action does not clear the valid
  139. * bit. A cache push is synonymous with a cache flush.
  140. *
  141. * @param base LMEM peripheral base address.
  142. */
  143. void LMEM_CodeCachePushAll(LMEM_Type *base);
  144. /*!
  145. * @brief Clears the processor code bus cache.
  146. * This function clears the entire cache and pushes (flushes) and
  147. * invalidates the operation.
  148. * Clear - Pushes a cache entry if it is valid and modified, then clears the valid and
  149. * modified bits. If the entry is not valid or not modified, clear the valid bit.
  150. *
  151. * @param base LMEM peripheral base address.
  152. */
  153. void LMEM_CodeCacheClearAll(LMEM_Type *base);
  154. /*!
  155. * @brief Invalidates a specific line in the processor code bus cache.
  156. * This function invalidates a specific line in the cache
  157. * based on the physical address passed in by the user.
  158. * Invalidate - Unconditionally clears valid and modified bits of a cache entry.
  159. *
  160. * @param base LMEM peripheral base address.
  161. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  162. * If not, it is changed to the 16-byte aligned memory address.
  163. */
  164. void LMEM_CodeCacheInvalidateLine(LMEM_Type *base, uint32_t address);
  165. /*!
  166. * @brief Invalidates multiple lines in the processor code bus cache.
  167. * This function invalidates multiple lines in the cache
  168. * based on the physical address and length in bytes passed in by the
  169. * user. If the function detects that the length meets or exceeds half the
  170. * cache, the function performs an entire cache invalidate function, which is
  171. * more efficient than invalidating the cache line-by-line.
  172. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  173. * check half the total amount of cache.
  174. * Invalidate - Unconditionally clear valid and modified bits of a cache entry.
  175. *
  176. * @param base LMEM peripheral base address.
  177. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  178. * If not, it is changed to the 16-byte aligned memory address.
  179. * @param length The length in bytes of the total amount of cache lines.
  180. */
  181. void LMEM_CodeCacheInvalidateMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  182. /*!
  183. * @brief Pushes a specific modified line in the processor code bus cache.
  184. * This function pushes a specific modified line based on the physical address passed in
  185. * by the user.
  186. * Push - Push a cache entry if it is valid and modified, then clear the modified bit. If the
  187. * entry is not valid or not modified, leave as is. This action does not clear the valid
  188. * bit. A cache push is synonymous with a cache flush.
  189. *
  190. * @param base LMEM peripheral base address.
  191. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  192. * If not, it is changed to the 16-byte aligned memory address.
  193. */
  194. void LMEM_CodeCachePushLine(LMEM_Type *base, uint32_t address);
  195. /*!
  196. * @brief Pushes multiple modified lines in the processor code bus cache.
  197. * This function pushes multiple modified lines in the cache
  198. * based on the physical address and length in bytes passed in by the
  199. * user. If the function detects that the length meets or exceeds half of the
  200. * cache, the function performs an cache push function, which is
  201. * more efficient than pushing the modified lines in the cache line-by-line.
  202. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  203. * check half the total amount of cache.
  204. * Push - Push a cache entry if it is valid and modified, then clear the modified bit. If
  205. * the entry is not valid or not modified, leave as is. This action does not clear the valid
  206. * bit. A cache push is synonymous with a cache flush.
  207. *
  208. * @param base LMEM peripheral base address.
  209. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  210. * If not, it is changed to the 16-byte aligned memory address.
  211. * @param length The length in bytes of the total amount of cache lines.
  212. */
  213. void LMEM_CodeCachePushMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  214. /*!
  215. * @brief Clears a specific line in the processor code bus cache.
  216. * This function clears a specific line based on the physical address passed in
  217. * by the user.
  218. * Clear - Push a cache entry if it is valid and modified, then clear the valid and
  219. * modify bits. If entry not valid or not modified, clear the valid bit.
  220. *
  221. * @param base LMEM peripheral base address.
  222. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  223. * If not, it is changed to the 16-byte aligned memory address.
  224. */
  225. void LMEM_CodeCacheClearLine(LMEM_Type *base, uint32_t address);
  226. /*!
  227. * @brief Clears multiple lines in the processor code bus cache.
  228. * This function clears multiple lines in the cache
  229. * based on the physical address and length in bytes passed in by the
  230. * user. If the function detects that the length meets or exceeds half the total amount of
  231. * cache, the function performs a cache clear function which is
  232. * more efficient than clearing the lines in the cache line-by-line.
  233. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  234. * check half the total amount of cache.
  235. * Clear - Push a cache entry if it is valid and modified, then clear the valid and
  236. * modify bits. If entry not valid or not modified, clear the valid bit.
  237. *
  238. * @param base LMEM peripheral base address.
  239. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  240. * If not, it is changed to the 16-byte aligned memory address.
  241. * @param length The length in bytes of the total amount of cache lines.
  242. */
  243. void LMEM_CodeCacheClearMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  244. #if (!defined(FSL_FEATURE_LMEM_SUPPORT_ICACHE_DEMOTE_REMOVE)) || !FSL_FEATURE_LMEM_SUPPORT_ICACHE_DEMOTE_REMOVE
  245. /*!
  246. * @brief Demotes the cache mode of a region in processor code bus cache.
  247. * This function allows the user to demote the cache mode of a region within the device's
  248. * memory map. Demoting the cache mode reduces the cache function applied to a memory
  249. * region from write-back to write-through to non-cacheable. The function checks to see
  250. * if the requested cache mode is higher than or equal to the current cache mode, and if
  251. * so, returns an error. After a region is demoted, its cache mode can only be raised
  252. * by a reset, which returns it to its default state which is the highest cache configure for
  253. * each region.
  254. * To maintain cache coherency, changes to the cache mode should be completed while the
  255. * address space being changed is not being accessed or the cache is disabled. Before a
  256. * cache mode change, this function completes a cache clear all command to push and invalidate any
  257. * cache entries that may have changed.
  258. *
  259. * @param base LMEM peripheral base address.
  260. * @param region The desired region to demote of type lmem_cache_region_t.
  261. * @param cacheMode The new, demoted cache mode of type lmem_cache_mode_t.
  262. * @return The execution result.
  263. * kStatus_Success The cache demote operation is successful.
  264. * kStatus_Fail The cache demote operation is failure.
  265. */
  266. status_t LMEM_CodeCacheDemoteRegion(LMEM_Type *base, lmem_cache_region_t region, lmem_cache_mode_t cacheMode);
  267. #endif /* FSL_FEATURE_LMEM_SUPPORT_ICACHE_DEMOTE_REMOVE */
  268. /*@}*/
  269. #if FSL_FEATURE_LMEM_HAS_SYSTEMBUS_CACHE
  270. /*!
  271. * @name Local Memory Processor System Bus Cache Control
  272. *@{
  273. */
  274. /*!
  275. * @brief Enables/disables the processor system bus cache.
  276. * This function enables/disables the cache. It first invalidates the entire cache,
  277. * then enables /disable both the cache and write buffer.
  278. *
  279. * @param base LMEM peripheral base address.
  280. * @param The enable or disable flag.
  281. * true - enable the system cache.
  282. * false - disable the system cache.
  283. */
  284. void LMEM_EnableSystemCache(LMEM_Type *base, bool enable);
  285. /*!
  286. * @brief Enables/disables the processor system bus write buffer.
  287. *
  288. * @param base LMEM peripheral base address.
  289. * @param enable The enable or disable flag.
  290. * true - enable the system bus write buffer.
  291. * false - disable the system bus write buffer.
  292. */
  293. static inline void LMEM_EnableSystemWriteBuffer(LMEM_Type *base, bool enable)
  294. {
  295. if (enable)
  296. {
  297. base->PSCCR |= LMEM_PSCCR_ENWRBUF_MASK;
  298. }
  299. else
  300. {
  301. base->PSCCR &= ~LMEM_PSCCR_ENWRBUF_MASK;
  302. }
  303. }
  304. /*!
  305. * @brief Invalidates the processor system bus cache.
  306. * This function invalidates the entire cache both ways.
  307. * Invalidate - Unconditionally clear valid and modify bits of a cache entry
  308. *
  309. * @param base LMEM peripheral base address.
  310. */
  311. void LMEM_SystemCacheInvalidateAll(LMEM_Type *base);
  312. /*!
  313. * @brief Pushes all modified lines in the processor system bus cache.
  314. * This function pushes all modified lines in both ways (the entire cache).
  315. * Push - Push a cache entry if it is valid and modified, then clear the modify bit. If
  316. * the entry is not valid or not modified, leave as is. This action does not clear the valid
  317. * bit. A cache push is synonymous with a cache flush.
  318. *
  319. * @param base LMEM peripheral base address.
  320. */
  321. void LMEM_SystemCachePushAll(LMEM_Type *base);
  322. /*!
  323. * @brief Clears the entire processor system bus cache.
  324. * This function clears the entire cache, which is a push (flush) and
  325. * invalidate operation.
  326. * Clear - Push a cache entry if it is valid and modified, then clear the valid and
  327. * modify bits. If the entry is not valid or not modified, clear the valid bit.
  328. *
  329. * @param base LMEM peripheral base address.
  330. */
  331. void LMEM_SystemCacheClearAll(LMEM_Type *base);
  332. /*!
  333. * @brief Invalidates a specific line in the processor system bus cache.
  334. * This function invalidates a specific line in the cache
  335. * based on the physical address passed in by the user.
  336. * Invalidate - Unconditionally clears valid and modify bits of a cache entry.
  337. *
  338. * @param base LMEM peripheral base address. Should be 16-byte aligned address.
  339. * If not, it is changed to the 16-byte aligned memory address.
  340. * @param address The physical address of the cache line.
  341. */
  342. void LMEM_SystemCacheInvalidateLine(LMEM_Type *base, uint32_t address);
  343. /*!
  344. * @brief Invalidates multiple lines in the processor system bus cache.
  345. * This function invalidates multiple lines in the cache
  346. * based on the physical address and length in bytes passed in by the
  347. * user. If the function detects that the length meets or exceeds half of the
  348. * cache, the function performs an entire cache invalidate function (which is
  349. * more efficient than invalidating the cache line-by-line).
  350. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  351. * check half the total amount of cache.
  352. * Invalidate - Unconditionally clear valid and modify bits of a cache entry
  353. *
  354. * @param base LMEM peripheral base address.
  355. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  356. * If not, it is changed to the 16-byte aligned memory address.
  357. * @param length The length in bytes of the total amount of cache lines.
  358. */
  359. void LMEM_SystemCacheInvalidateMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  360. /*!
  361. * @brief Pushes a specific modified line in the processor system bus cache.
  362. * This function pushes a specific modified line based on the physical address passed in
  363. * by the user.
  364. * Push - Push a cache entry if it is valid and modified, then clear the modify bit. If
  365. * the entry is not valid or not modified, leave as is. This action does not clear the valid
  366. * bit. A cache push is synonymous with a cache flush.
  367. *
  368. * @param base LMEM peripheral base address.
  369. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  370. * If not, it is changed to the 16-byte aligned memory address.
  371. */
  372. void LMEM_SystemCachePushLine(LMEM_Type *base, uint32_t address);
  373. /*!
  374. * @brief Pushes multiple modified lines in the processor system bus cache.
  375. * This function pushes multiple modified lines in the cache
  376. * based on the physical address and length in bytes passed in by the
  377. * user. If the function detects that the length meets or exceeds half of the
  378. * cache, the function performs an entire cache push function (which is
  379. * more efficient than pushing the modified lines in the cache line-by-line).
  380. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  381. * check half the total amount of cache.
  382. * Push - Push a cache entry if it is valid and modified, then clear the modify bit. If
  383. * the entry is not valid or not modified, leave as is. This action does not clear the valid
  384. * bit. A cache push is synonymous with a cache flush.
  385. *
  386. * @param base LMEM peripheral base address.
  387. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  388. * If not, it is changed to the 16-byte aligned memory address.
  389. * @param length The length in bytes of the total amount of cache lines.
  390. */
  391. void LMEM_SystemCachePushMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  392. /*!
  393. * @brief Clears a specific line in the processor system bus cache.
  394. * This function clears a specific line based on the physical address passed in
  395. * by the user.
  396. * Clear - Push a cache entry if it is valid and modified, then clear the valid and
  397. * modify bits. If the entry is not valid or not modified, clear the valid bit.
  398. *
  399. * @param base LMEM peripheral base address.
  400. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  401. * If not, it is changed to the 16-byte aligned memory address.
  402. */
  403. void LMEM_SystemCacheClearLine(LMEM_Type *base, uint32_t address);
  404. /*!
  405. * @brief Clears multiple lines in the processor system bus cache.
  406. * This function clears multiple lines in the cache
  407. * based on the physical address and length in bytes passed in by the
  408. * user. If the function detects that the length meets or exceeds half of the
  409. * cache, the function performs an entire cache clear function (which is
  410. * more efficient than clearing the lines in the cache line-by-line).
  411. * Because the cache consists of two ways and line commands based on the physical address searches both ways,
  412. * check half the total amount of cache.
  413. * Clear - Push a cache entry if it is valid and modified, then clear the valid and
  414. * modify bits. If the entry is not valid or not modified, clear the valid bit.
  415. *
  416. * @param base LMEM peripheral base address.
  417. * @param address The physical address of the cache line. Should be 16-byte aligned address.
  418. * If not, it is changed to the 16-byte aligned memory address.
  419. * @param length The length in bytes of the total amount of cache lines.
  420. */
  421. void LMEM_SystemCacheClearMultiLines(LMEM_Type *base, uint32_t address, uint32_t length);
  422. /*!
  423. * @brief Demotes the cache mode of a region in the processor system bus cache.
  424. * This function allows the user to demote the cache mode of a region within the device's
  425. * memory map. Demoting the cache mode reduces the cache function applied to a memory
  426. * region from write-back to write-through to non-cacheable. The function checks to see
  427. * if the requested cache mode is higher than or equal to the current cache mode, and if
  428. * so, returns an error. After a region is demoted, its cache mode can only be raised
  429. * by a reset, which returns it to its default state which is the highest cache configure
  430. * for each region.
  431. * To maintain cache coherency, changes to the cache mode should be completed while the
  432. * address space being changed is not being accessed or the cache is disabled. Before a
  433. * cache mode change, this function completes a cache clear all command to push and invalidate any
  434. * cache entries that may have changed.
  435. *
  436. * @param base LMEM peripheral base address.
  437. * @param region The desired region to demote of type lmem_cache_region_t.
  438. * @param cacheMode The new, demoted cache mode of type lmem_cache_mode_t.
  439. * @return The execution result.
  440. * kStatus_Success The cache demote operation is successful.
  441. * kStatus_Fail The cache demote operation is failure.
  442. */
  443. status_t LMEM_SystemCacheDemoteRegion(LMEM_Type *base, lmem_cache_region_t region, lmem_cache_mode_t cacheMode);
  444. /*@}*/
  445. #endif /* FSL_FEATURE_LMEM_HAS_SYSTEMBUS_CACHE */
  446. #if defined(__cplusplus)
  447. }
  448. #endif
  449. /*! @}*/
  450. #endif /* _FSL_LMEM_CACHE_H_*/