cache.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * linux/arch/m32r/mm/cache.c
  3. *
  4. * Copyright (C) 2002 Hirokazu Takata
  5. */
  6. #include <linux/config.h>
  7. #include <asm/pgtable.h>
  8. #undef MCCR
  9. #if defined(CONFIG_CHIP_XNUX2) || defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_VDEC2) || defined(CONFIG_CHIP_OPSP)
  10. /* Cache Control Register */
  11. #define MCCR ((volatile unsigned long*)0xfffffffc)
  12. #define MCCR_CC (1UL << 7) /* Cache mode modify bit */
  13. #define MCCR_IIV (1UL << 6) /* I-cache invalidate */
  14. #define MCCR_DIV (1UL << 5) /* D-cache invalidate */
  15. #define MCCR_DCB (1UL << 4) /* D-cache copy back */
  16. #define MCCR_ICM (1UL << 1) /* I-cache mode [0:off,1:on] */
  17. #define MCCR_DCM (1UL << 0) /* D-cache mode [0:off,1:on] */
  18. #define MCCR_ICACHE_INV (MCCR_CC|MCCR_IIV)
  19. #define MCCR_DCACHE_CB (MCCR_CC|MCCR_DCB)
  20. #define MCCR_DCACHE_CBINV (MCCR_CC|MCCR_DIV|MCCR_DCB)
  21. #define CHECK_MCCR(mccr) (mccr = *MCCR)
  22. #elif defined(CONFIG_CHIP_M32102)
  23. #define MCCR ((volatile unsigned char*)0xfffffffe)
  24. #define MCCR_IIV (1UL << 0) /* I-cache invalidate */
  25. #define MCCR_ICACHE_INV MCCR_IIV
  26. #endif /* CONFIG_CHIP_XNUX2 || CONFIG_CHIP_M32700 */
  27. #ifndef MCCR
  28. #error Unknown cache type.
  29. #endif
  30. /* Copy back and invalidate D-cache and invalidate I-cache all */
  31. void _flush_cache_all(void)
  32. {
  33. #if defined(CONFIG_CHIP_M32102)
  34. *MCCR = MCCR_ICACHE_INV;
  35. #else
  36. unsigned long mccr;
  37. /* Copyback and invalidate D-cache */
  38. /* Invalidate I-cache */
  39. *MCCR = MCCR_ICACHE_INV | MCCR_DCACHE_CBINV;
  40. while ((mccr = *MCCR) & MCCR_IIV); /* loop while invalidating... */
  41. #endif
  42. }
  43. /* Copy back D-cache and invalidate I-cache all */
  44. void _flush_cache_copyback_all(void)
  45. {
  46. #if defined(CONFIG_CHIP_M32102)
  47. *MCCR = MCCR_ICACHE_INV;
  48. #else
  49. unsigned long mccr;
  50. /* Copyback D-cache */
  51. /* Invalidate I-cache */
  52. *MCCR = MCCR_ICACHE_INV | MCCR_DCACHE_CB;
  53. while ((mccr = *MCCR) & MCCR_IIV); /* loop while invalidating... */
  54. #endif
  55. }