ppc_asm.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef _PPC64_PPC_ASM_H
  3. #define _PPC64_PPC_ASM_H
  4. /*
  5. *
  6. * Definitions used by various bits of low-level assembly code on PowerPC.
  7. *
  8. * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan.
  9. */
  10. /* Condition Register Bit Fields */
  11. #define cr0 0
  12. #define cr1 1
  13. #define cr2 2
  14. #define cr3 3
  15. #define cr4 4
  16. #define cr5 5
  17. #define cr6 6
  18. #define cr7 7
  19. /* General Purpose Registers (GPRs) */
  20. #define r0 0
  21. #define r1 1
  22. #define r2 2
  23. #define r3 3
  24. #define r4 4
  25. #define r5 5
  26. #define r6 6
  27. #define r7 7
  28. #define r8 8
  29. #define r9 9
  30. #define r10 10
  31. #define r11 11
  32. #define r12 12
  33. #define r13 13
  34. #define r14 14
  35. #define r15 15
  36. #define r16 16
  37. #define r17 17
  38. #define r18 18
  39. #define r19 19
  40. #define r20 20
  41. #define r21 21
  42. #define r22 22
  43. #define r23 23
  44. #define r24 24
  45. #define r25 25
  46. #define r26 26
  47. #define r27 27
  48. #define r28 28
  49. #define r29 29
  50. #define r30 30
  51. #define r31 31
  52. #define SPRN_TBRL 268
  53. #define SPRN_TBRU 269
  54. #define SPRN_HSRR0 0x13A /* Hypervisor Save/Restore 0 */
  55. #define SPRN_HSRR1 0x13B /* Hypervisor Save/Restore 1 */
  56. #define MSR_LE 0x0000000000000001
  57. #define FIXUP_ENDIAN \
  58. tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \
  59. b $+44; /* Skip trampoline if endian is good */ \
  60. .long 0xa600607d; /* mfmsr r11 */ \
  61. .long 0x01006b69; /* xori r11,r11,1 */ \
  62. .long 0x00004039; /* li r10,0 */ \
  63. .long 0x6401417d; /* mtmsrd r10,1 */ \
  64. .long 0x05009f42; /* bcl 20,31,$+4 */ \
  65. .long 0xa602487d; /* mflr r10 */ \
  66. .long 0x14004a39; /* addi r10,r10,20 */ \
  67. .long 0xa6035a7d; /* mtsrr0 r10 */ \
  68. .long 0xa6037b7d; /* mtsrr1 r11 */ \
  69. .long 0x2400004c /* rfid */
  70. #ifdef CONFIG_PPC_8xx
  71. #define MFTBL(dest) mftb dest
  72. #define MFTBU(dest) mftbu dest
  73. #else
  74. #define MFTBL(dest) mfspr dest, SPRN_TBRL
  75. #define MFTBU(dest) mfspr dest, SPRN_TBRU
  76. #endif
  77. #ifdef CONFIG_PPC64_BOOT_WRAPPER
  78. #define LOAD_REG_ADDR(reg,name) \
  79. addis reg,r2,name@toc@ha; \
  80. addi reg,reg,name@toc@l
  81. #else
  82. #define LOAD_REG_ADDR(reg,name) \
  83. lis reg,name@ha; \
  84. addi reg,reg,name@l
  85. #endif
  86. #endif /* _PPC64_PPC_ASM_H */