162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci#ifndef _PPC64_PPC_ASM_H 362306a36Sopenharmony_ci#define _PPC64_PPC_ASM_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Definitions used by various bits of low-level assembly code on PowerPC. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* Condition Register Bit Fields */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define cr0 0 1462306a36Sopenharmony_ci#define cr1 1 1562306a36Sopenharmony_ci#define cr2 2 1662306a36Sopenharmony_ci#define cr3 3 1762306a36Sopenharmony_ci#define cr4 4 1862306a36Sopenharmony_ci#define cr5 5 1962306a36Sopenharmony_ci#define cr6 6 2062306a36Sopenharmony_ci#define cr7 7 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci/* General Purpose Registers (GPRs) */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define r0 0 2662306a36Sopenharmony_ci#define r1 1 2762306a36Sopenharmony_ci#define r2 2 2862306a36Sopenharmony_ci#define r3 3 2962306a36Sopenharmony_ci#define r4 4 3062306a36Sopenharmony_ci#define r5 5 3162306a36Sopenharmony_ci#define r6 6 3262306a36Sopenharmony_ci#define r7 7 3362306a36Sopenharmony_ci#define r8 8 3462306a36Sopenharmony_ci#define r9 9 3562306a36Sopenharmony_ci#define r10 10 3662306a36Sopenharmony_ci#define r11 11 3762306a36Sopenharmony_ci#define r12 12 3862306a36Sopenharmony_ci#define r13 13 3962306a36Sopenharmony_ci#define r14 14 4062306a36Sopenharmony_ci#define r15 15 4162306a36Sopenharmony_ci#define r16 16 4262306a36Sopenharmony_ci#define r17 17 4362306a36Sopenharmony_ci#define r18 18 4462306a36Sopenharmony_ci#define r19 19 4562306a36Sopenharmony_ci#define r20 20 4662306a36Sopenharmony_ci#define r21 21 4762306a36Sopenharmony_ci#define r22 22 4862306a36Sopenharmony_ci#define r23 23 4962306a36Sopenharmony_ci#define r24 24 5062306a36Sopenharmony_ci#define r25 25 5162306a36Sopenharmony_ci#define r26 26 5262306a36Sopenharmony_ci#define r27 27 5362306a36Sopenharmony_ci#define r28 28 5462306a36Sopenharmony_ci#define r29 29 5562306a36Sopenharmony_ci#define r30 30 5662306a36Sopenharmony_ci#define r31 31 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define SPRN_TBRL 268 5962306a36Sopenharmony_ci#define SPRN_TBRU 269 6062306a36Sopenharmony_ci#define SPRN_HSRR0 0x13A /* Hypervisor Save/Restore 0 */ 6162306a36Sopenharmony_ci#define SPRN_HSRR1 0x13B /* Hypervisor Save/Restore 1 */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#define MSR_LE 0x0000000000000001 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#define FIXUP_ENDIAN \ 6662306a36Sopenharmony_ci tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ 6762306a36Sopenharmony_ci b $+44; /* Skip trampoline if endian is good */ \ 6862306a36Sopenharmony_ci .long 0xa600607d; /* mfmsr r11 */ \ 6962306a36Sopenharmony_ci .long 0x01006b69; /* xori r11,r11,1 */ \ 7062306a36Sopenharmony_ci .long 0x00004039; /* li r10,0 */ \ 7162306a36Sopenharmony_ci .long 0x6401417d; /* mtmsrd r10,1 */ \ 7262306a36Sopenharmony_ci .long 0x05009f42; /* bcl 20,31,$+4 */ \ 7362306a36Sopenharmony_ci .long 0xa602487d; /* mflr r10 */ \ 7462306a36Sopenharmony_ci .long 0x14004a39; /* addi r10,r10,20 */ \ 7562306a36Sopenharmony_ci .long 0xa6035a7d; /* mtsrr0 r10 */ \ 7662306a36Sopenharmony_ci .long 0xa6037b7d; /* mtsrr1 r11 */ \ 7762306a36Sopenharmony_ci .long 0x2400004c /* rfid */ 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#ifdef CONFIG_PPC_8xx 8062306a36Sopenharmony_ci#define MFTBL(dest) mftb dest 8162306a36Sopenharmony_ci#define MFTBU(dest) mftbu dest 8262306a36Sopenharmony_ci#else 8362306a36Sopenharmony_ci#define MFTBL(dest) mfspr dest, SPRN_TBRL 8462306a36Sopenharmony_ci#define MFTBU(dest) mfspr dest, SPRN_TBRU 8562306a36Sopenharmony_ci#endif 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci#ifdef CONFIG_PPC64_BOOT_WRAPPER 8862306a36Sopenharmony_ci#define LOAD_REG_ADDR(reg,name) \ 8962306a36Sopenharmony_ci addis reg,r2,name@toc@ha; \ 9062306a36Sopenharmony_ci addi reg,reg,name@toc@l 9162306a36Sopenharmony_ci#else 9262306a36Sopenharmony_ci#define LOAD_REG_ADDR(reg,name) \ 9362306a36Sopenharmony_ci lis reg,name@ha; \ 9462306a36Sopenharmony_ci addi reg,reg,name@l 9562306a36Sopenharmony_ci#endif 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#endif /* _PPC64_PPC_ASM_H */ 98