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