srmmu_access.S 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /* Assembler variants of srmmu access functions.
  2. * Implemented in assembler to allow run-time patching.
  3. * LEON uses a different ASI for MMUREGS than SUN.
  4. *
  5. * The leon_1insn_patch infrastructure is used
  6. * for the run-time patching.
  7. */
  8. #include <linux/linkage.h>
  9. #include <asm/asmmacro.h>
  10. #include <asm/pgtsrmmu.h>
  11. #include <asm/asi.h>
  12. /* unsigned int srmmu_get_mmureg(void) */
  13. ENTRY(srmmu_get_mmureg)
  14. LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %o0)
  15. SUN_PI_(lda [%g0] ASI_M_MMUREGS, %o0)
  16. retl
  17. nop
  18. ENDPROC(srmmu_get_mmureg)
  19. /* void srmmu_set_mmureg(unsigned long regval) */
  20. ENTRY(srmmu_set_mmureg)
  21. LEON_PI(sta %o0, [%g0] ASI_LEON_MMUREGS)
  22. SUN_PI_(sta %o0, [%g0] ASI_M_MMUREGS)
  23. retl
  24. nop
  25. ENDPROC(srmmu_set_mmureg)
  26. /* void srmmu_set_ctable_ptr(unsigned long paddr) */
  27. ENTRY(srmmu_set_ctable_ptr)
  28. /* paddr = ((paddr >> 4) & SRMMU_CTX_PMASK); */
  29. srl %o0, 4, %g1
  30. and %g1, SRMMU_CTX_PMASK, %g1
  31. mov SRMMU_CTXTBL_PTR, %g2
  32. LEON_PI(sta %g1, [%g2] ASI_LEON_MMUREGS)
  33. SUN_PI_(sta %g1, [%g2] ASI_M_MMUREGS)
  34. retl
  35. nop
  36. ENDPROC(srmmu_set_ctable_ptr)
  37. /* void srmmu_set_context(int context) */
  38. ENTRY(srmmu_set_context)
  39. mov SRMMU_CTX_REG, %g1
  40. LEON_PI(sta %o0, [%g1] ASI_LEON_MMUREGS)
  41. SUN_PI_(sta %o0, [%g1] ASI_M_MMUREGS)
  42. retl
  43. nop
  44. ENDPROC(srmmu_set_context)
  45. /* int srmmu_get_context(void) */
  46. ENTRY(srmmu_get_context)
  47. mov SRMMU_CTX_REG, %o0
  48. LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
  49. SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
  50. retl
  51. nop
  52. ENDPROC(srmmu_get_context)
  53. /* unsigned int srmmu_get_fstatus(void) */
  54. ENTRY(srmmu_get_fstatus)
  55. mov SRMMU_FAULT_STATUS, %o0
  56. LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
  57. SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
  58. retl
  59. nop
  60. ENDPROC(srmmu_get_fstatus)
  61. /* unsigned int srmmu_get_faddr(void) */
  62. ENTRY(srmmu_get_faddr)
  63. mov SRMMU_FAULT_ADDR, %o0
  64. LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
  65. SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
  66. retl
  67. nop
  68. ENDPROC(srmmu_get_faddr)