srmmu_access.S 1.9 KB

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