cache.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef __CACHE_H__
  2. #define __CACHE_H__
  3. #include "nds32_intrinsic.h"
  4. #include "nds32.h"
  5. enum cache_t{ICACHE, DCACHE};
  6. static inline unsigned long CACHE_SET(enum cache_t cache){
  7. if(cache == ICACHE)
  8. return 64 << ((__nds32__mfsr(NDS32_SR_ICM_CFG) & ICM_CFG_mskISET) >> ICM_CFG_offISET);
  9. else
  10. return 64 << ((__nds32__mfsr(NDS32_SR_DCM_CFG) & DCM_CFG_mskDSET) >> DCM_CFG_offDSET);
  11. }
  12. static inline unsigned long CACHE_WAY(enum cache_t cache){
  13. if(cache == ICACHE)
  14. return 1 + ((__nds32__mfsr(NDS32_SR_ICM_CFG) & ICM_CFG_mskIWAY) >> ICM_CFG_offIWAY);
  15. else
  16. return 1 + ((__nds32__mfsr(NDS32_SR_DCM_CFG) & DCM_CFG_mskDWAY) >> DCM_CFG_offDWAY);
  17. }
  18. static inline unsigned long CACHE_LINE_SIZE(enum cache_t cache){
  19. if(cache == ICACHE)
  20. return 8 << (((__nds32__mfsr(NDS32_SR_ICM_CFG) & ICM_CFG_mskISZ) >> ICM_CFG_offISZ) - 1);
  21. else
  22. return 8 << (((__nds32__mfsr(NDS32_SR_DCM_CFG) & DCM_CFG_mskDSZ) >> DCM_CFG_offDSZ) - 1);
  23. }
  24. extern void nds32_dcache_invalidate(void);
  25. extern void nds32_dcache_flush(void);
  26. extern void nds32_icache_flush(void);
  27. extern void nds32_dcache_clean_range(unsigned long start, unsigned long end);
  28. extern void nds32_dma_clean_range(unsigned long start, unsigned long end);
  29. extern void nds32_dcache_invalidate_range(unsigned long start, unsigned long end);
  30. extern void nds32_dcache_flush_range(unsigned long start, unsigned long end);
  31. extern void nds32_dcache_writeback_range(unsigned long start, unsigned long end);
  32. extern void nds32_dma_inv_range(unsigned long start, unsigned long end);
  33. extern void nds32_dma_flush_range(unsigned long start, unsigned long end);
  34. extern void nds32_icache_invalidate_range(unsigned long start, unsigned long end);
  35. #endif /* __CACHE_H__ */