cache.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2006-2024, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2025/01/16 zdtyuiop4444 fix type cast warning
  9. * 2024/11/26 zdtyuiop4444 The first version
  10. */
  11. #include "cache.h"
  12. inline void rt_hw_cpu_dcache_enable(void)
  13. {
  14. asm volatile("csrs mhcr, %0;" ::"rI"(0x2));
  15. }
  16. inline void rt_hw_cpu_dcache_disable(void)
  17. {
  18. asm volatile("csrc mhcr, %0;" ::"rI"(0x2));
  19. }
  20. inline void inv_dcache_range(uintptr_t start, size_t size) {
  21. CACHE_OP_RANGE(DCACHE_IPA_A0, start, size);
  22. }
  23. inline void flush_dcache_range(uintptr_t start, size_t size) {
  24. CACHE_OP_RANGE(DCACHE_CIPA_A0, start, size);
  25. }
  26. inline void rt_hw_cpu_dcache_ops(int ops, void* addr, int size)
  27. {
  28. switch (ops)
  29. {
  30. case RT_HW_CACHE_FLUSH:
  31. flush_dcache_range((uintptr_t)addr, size);
  32. break;
  33. case RT_HW_CACHE_INVALIDATE:
  34. inv_dcache_range((uintptr_t)addr, size);
  35. break;
  36. default:
  37. break;
  38. }
  39. }
  40. inline void rt_hw_cpu_icache_enable(void)
  41. {
  42. asm volatile("csrs mhcr, %0;" ::"rI"(0x1));
  43. }
  44. inline void rt_hw_cpu_icache_disable(void)
  45. {
  46. asm volatile("csrc mhcr, %0;" ::"rI"(0x1));
  47. }
  48. inline void inv_icache_range(uintptr_t start, size_t size) {
  49. CACHE_OP_RANGE(ICACHE_IPA_A0, start, size);
  50. }
  51. inline void rt_hw_cpu_icache_ops(int ops, void* addr, int size)
  52. {
  53. switch (ops)
  54. {
  55. case RT_HW_CACHE_INVALIDATE:
  56. inv_icache_range((uintptr_t)addr, size);
  57. break;
  58. default:
  59. break;
  60. }
  61. }