ckmmu.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __ASM_CSKY_CKMMUV1_H
  3. #define __ASM_CSKY_CKMMUV1_H
  4. #include <abi/reg_ops.h>
  5. static inline int read_mmu_index(void)
  6. {
  7. return cprcr("cpcr0");
  8. }
  9. static inline void write_mmu_index(int value)
  10. {
  11. cpwcr("cpcr0", value);
  12. }
  13. static inline int read_mmu_entrylo0(void)
  14. {
  15. return cprcr("cpcr2") << 6;
  16. }
  17. static inline int read_mmu_entrylo1(void)
  18. {
  19. return cprcr("cpcr3") << 6;
  20. }
  21. static inline void write_mmu_pagemask(int value)
  22. {
  23. cpwcr("cpcr6", value);
  24. }
  25. static inline int read_mmu_entryhi(void)
  26. {
  27. return cprcr("cpcr4");
  28. }
  29. static inline void write_mmu_entryhi(int value)
  30. {
  31. cpwcr("cpcr4", value);
  32. }
  33. static inline unsigned long read_mmu_msa0(void)
  34. {
  35. return cprcr("cpcr30");
  36. }
  37. static inline void write_mmu_msa0(unsigned long value)
  38. {
  39. cpwcr("cpcr30", value);
  40. }
  41. static inline unsigned long read_mmu_msa1(void)
  42. {
  43. return cprcr("cpcr31");
  44. }
  45. static inline void write_mmu_msa1(unsigned long value)
  46. {
  47. cpwcr("cpcr31", value);
  48. }
  49. /*
  50. * TLB operations.
  51. */
  52. static inline void tlb_probe(void)
  53. {
  54. cpwcr("cpcr8", 0x80000000);
  55. }
  56. static inline void tlb_read(void)
  57. {
  58. cpwcr("cpcr8", 0x40000000);
  59. }
  60. static inline void tlb_invalid_all(void)
  61. {
  62. cpwcr("cpcr8", 0x04000000);
  63. }
  64. static inline void local_tlb_invalid_all(void)
  65. {
  66. tlb_invalid_all();
  67. }
  68. static inline void tlb_invalid_indexed(void)
  69. {
  70. cpwcr("cpcr8", 0x02000000);
  71. }
  72. static inline void setup_pgd(pgd_t *pgd, int asid)
  73. {
  74. cpwcr("cpcr29", __pa(pgd) | BIT(0));
  75. write_mmu_entryhi(asid);
  76. }
  77. static inline pgd_t *get_pgd(void)
  78. {
  79. return __va(cprcr("cpcr29") & ~BIT(0));
  80. }
  81. #endif /* __ASM_CSKY_CKMMUV1_H */