summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-07-31 15:25:12 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-22 16:27:01 +0200
commit50382788b3fae3a6c7b32ffb2dd8282bc8ff9978 (patch)
treea502027f6b444d20b8ee1dc27acc510ba153fbd9 /c/src/lib/libcpu/powerpc
parentbsps/powerpc: Add 64-bit linker sections (diff)
downloadrtems-50382788b3fae3a6c7b32ffb2dd8282bc8ff9978.tar.bz2
bsps/powerpc: Add 64-bit SET_SELF_CPU_CONTROL
Update #3082.
Diffstat (limited to 'c/src/lib/libcpu/powerpc')
-rw-r--r--c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h b/c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h
index 0fe340cf6e..ea063d5ff1 100644
--- a/c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h
+++ b/c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h
@@ -941,16 +941,21 @@ void ShowBATS(void);
mtmsr \level
.endm
+.macro SET_SELF_CPU_CONTROL reg_0, reg_1
#if defined(RTEMS_SMP)
-.macro SET_SELF_CPU_CONTROL reg
/* Use Book E Processor ID Register (PIR) */
- mfspr \reg, 286
- slwi \reg, \reg, PER_CPU_CONTROL_SIZE_LOG2
- addis \reg, \reg, _Per_CPU_Information@ha
- addi \reg, \reg, _Per_CPU_Information@l
- mtspr PPC_PER_CPU_CONTROL_REGISTER, \reg
-.endm
+ mfspr \reg_0, 286
+ slwi \reg_0, \reg_0, PER_CPU_CONTROL_SIZE_LOG2
+#if defined(__powerpc64__)
+ LA \reg_1, _Per_CPU_Information
+ add \reg_0, \reg_0, \reg_1
+#else
+ addis \reg_0, \reg_0, _Per_CPU_Information@ha
+ addi \reg_0, \reg_0, _Per_CPU_Information@l
#endif
+ mtspr PPC_PER_CPU_CONTROL_REGISTER, \reg_0
+#endif
+.endm
.macro GET_SELF_CPU_CONTROL reg
#if defined(RTEMS_SMP)