hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/arch/powerpc/include/asm/ppc_asm.h
....@@ -311,18 +311,48 @@
311311 addis reg,reg,(name - 0b)@ha; \
312312 addi reg,reg,(name - 0b)@l;
313313
314
-#ifdef __powerpc64__
315
-#ifdef HAVE_AS_ATHIGH
314
+#if defined(__powerpc64__) && defined(HAVE_AS_ATHIGH)
316315 #define __AS_ATHIGH high
317316 #else
318317 #define __AS_ATHIGH h
319318 #endif
320
-#define LOAD_REG_IMMEDIATE(reg,expr) \
321
- lis reg,(expr)@highest; \
322
- ori reg,reg,(expr)@higher; \
323
- rldicr reg,reg,32,31; \
324
- oris reg,reg,(expr)@__AS_ATHIGH; \
325
- ori reg,reg,(expr)@l;
319
+
320
+.macro __LOAD_REG_IMMEDIATE_32 r, x
321
+ .if (\x) >= 0x8000 || (\x) < -0x8000
322
+ lis \r, (\x)@__AS_ATHIGH
323
+ .if (\x) & 0xffff != 0
324
+ ori \r, \r, (\x)@l
325
+ .endif
326
+ .else
327
+ li \r, (\x)@l
328
+ .endif
329
+.endm
330
+
331
+.macro __LOAD_REG_IMMEDIATE r, x
332
+ .if (\x) >= 0x80000000 || (\x) < -0x80000000
333
+ __LOAD_REG_IMMEDIATE_32 \r, (\x) >> 32
334
+ sldi \r, \r, 32
335
+ .if (\x) & 0xffff0000 != 0
336
+ oris \r, \r, (\x)@__AS_ATHIGH
337
+ .endif
338
+ .if (\x) & 0xffff != 0
339
+ ori \r, \r, (\x)@l
340
+ .endif
341
+ .else
342
+ __LOAD_REG_IMMEDIATE_32 \r, \x
343
+ .endif
344
+.endm
345
+
346
+#ifdef __powerpc64__
347
+
348
+#define LOAD_REG_IMMEDIATE(reg, expr) __LOAD_REG_IMMEDIATE reg, expr
349
+
350
+#define LOAD_REG_IMMEDIATE_SYM(reg, tmp, expr) \
351
+ lis tmp, (expr)@highest; \
352
+ lis reg, (expr)@__AS_ATHIGH; \
353
+ ori tmp, tmp, (expr)@higher; \
354
+ ori reg, reg, (expr)@l; \
355
+ rldimi reg, tmp, 32, 0
326356
327357 #define LOAD_REG_ADDR(reg,name) \
328358 ld reg,name@got(r2)
....@@ -335,11 +365,13 @@
335365
336366 #else /* 32-bit */
337367
338
-#define LOAD_REG_IMMEDIATE(reg,expr) \
368
+#define LOAD_REG_IMMEDIATE(reg, expr) __LOAD_REG_IMMEDIATE_32 reg, expr
369
+
370
+#define LOAD_REG_IMMEDIATE_SYM(reg,expr) \
339371 lis reg,(expr)@ha; \
340372 addi reg,reg,(expr)@l;
341373
342
-#define LOAD_REG_ADDR(reg,name) LOAD_REG_IMMEDIATE(reg, name)
374
+#define LOAD_REG_ADDR(reg,name) LOAD_REG_IMMEDIATE_SYM(reg, name)
343375
344376 #define LOAD_REG_ADDRBASE(reg, name) lis reg,name@ha
345377 #define ADDROFF(name) name@l
....@@ -350,26 +382,6 @@
350382 #endif
351383
352384 /* various errata or part fixups */
353
-#ifdef CONFIG_PPC601_SYNC_FIX
354
-#define SYNC \
355
-BEGIN_FTR_SECTION \
356
- sync; \
357
- isync; \
358
-END_FTR_SECTION_IFSET(CPU_FTR_601)
359
-#define SYNC_601 \
360
-BEGIN_FTR_SECTION \
361
- sync; \
362
-END_FTR_SECTION_IFSET(CPU_FTR_601)
363
-#define ISYNC_601 \
364
-BEGIN_FTR_SECTION \
365
- isync; \
366
-END_FTR_SECTION_IFSET(CPU_FTR_601)
367
-#else
368
-#define SYNC
369
-#define SYNC_601
370
-#define ISYNC_601
371
-#endif
372
-
373385 #if defined(CONFIG_PPC_CELL) || defined(CONFIG_PPC_FSL_BOOK3E)
374386 #define MFTB(dest) \
375387 90: mfspr dest, SPRN_TBRL; \
....@@ -391,13 +403,8 @@
391403
392404 #ifndef CONFIG_SMP
393405 #define TLBSYNC
394
-#else /* CONFIG_SMP */
395
-/* tlbsync is not implemented on 601 */
396
-#define TLBSYNC \
397
-BEGIN_FTR_SECTION \
398
- tlbsync; \
399
- sync; \
400
-END_FTR_SECTION_IFCLR(CPU_FTR_601)
406
+#else
407
+#define TLBSYNC tlbsync; sync
401408 #endif
402409
403410 #ifdef CONFIG_PPC64
....@@ -480,26 +487,11 @@
480487 ori rd,rd,((KERNELBASE>>48)&0xFFFF);\
481488 rotldi rd,rd,48
482489 #else
483
-/*
484
- * On APUS (Amiga PowerPC cpu upgrade board), we don't know the
485
- * physical base address of RAM at compile time.
486
- */
487490 #define toreal(rd) tophys(rd,rd)
488491 #define fromreal(rd) tovirt(rd,rd)
489492
490
-#define tophys(rd,rs) \
491
-0: addis rd,rs,-PAGE_OFFSET@h; \
492
- .section ".vtop_fixup","aw"; \
493
- .align 1; \
494
- .long 0b; \
495
- .previous
496
-
497
-#define tovirt(rd,rs) \
498
-0: addis rd,rs,PAGE_OFFSET@h; \
499
- .section ".ptov_fixup","aw"; \
500
- .align 1; \
501
- .long 0b; \
502
- .previous
493
+#define tophys(rd, rs) addis rd, rs, -PAGE_OFFSET@h
494
+#define tovirt(rd, rs) addis rd, rs, PAGE_OFFSET@h
503495 #endif
504496
505497 #ifdef CONFIG_PPC_BOOK3S_64
....@@ -752,6 +744,8 @@
752744 #define N_SLINE 68
753745 #define N_SO 100
754746
747
+#define RFSCV .long 0x4c0000a4
748
+
755749 /*
756750 * Create an endian fixup trampoline
757751 *
....@@ -771,7 +765,7 @@
771765 #define FIXUP_ENDIAN
772766 #else
773767 /*
774
- * This version may be used in in HV or non-HV context.
768
+ * This version may be used in HV or non-HV context.
775769 * MSR[EE] must be disabled.
776770 */
777771 #define FIXUP_ENDIAN \