diff options
-rw-r--r-- | arch/ppc64/kernel/head.S | 32 | ||||
-rw-r--r-- | arch/ppc64/kernel/pacaData.c | 4 | ||||
-rw-r--r-- | include/asm-ppc64/mmu.h | 7 |
3 files changed, 24 insertions, 19 deletions
diff --git a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S index eb54f0548b01..7de38ebbe973 100644 --- a/arch/ppc64/kernel/head.S +++ b/arch/ppc64/kernel/head.S | |||
@@ -52,9 +52,10 @@ | |||
52 | * We layout physical memory as follows: | 52 | * We layout physical memory as follows: |
53 | * 0x0000 - 0x00ff : Secondary processor spin code | 53 | * 0x0000 - 0x00ff : Secondary processor spin code |
54 | * 0x0100 - 0x2fff : pSeries Interrupt prologs | 54 | * 0x0100 - 0x2fff : pSeries Interrupt prologs |
55 | * 0x3000 - 0x6fff : interrupt support, iSeries and common interrupt prologs | 55 | * 0x3000 - 0x5fff : interrupt support, iSeries and common interrupt prologs |
56 | * 0x6000 - 0x6fff : Initial (CPU0) segment table | ||
56 | * 0x7000 - 0x7fff : FWNMI data area | 57 | * 0x7000 - 0x7fff : FWNMI data area |
57 | * 0x9000 - 0x9fff : Initial segment table | 58 | * 0x8000 - : Early init and support code |
58 | */ | 59 | */ |
59 | 60 | ||
60 | /* | 61 | /* |
@@ -1257,6 +1258,20 @@ unrecov_slb: | |||
1257 | b 1b | 1258 | b 1b |
1258 | 1259 | ||
1259 | /* | 1260 | /* |
1261 | * Space for CPU0's segment table. | ||
1262 | * | ||
1263 | * On iSeries, the hypervisor must fill in at least one entry before | ||
1264 | * we get control (with relocate on). The address is give to the hv | ||
1265 | * as a page number (see xLparMap in LparData.c), so this must be at a | ||
1266 | * fixed address (the linker can't compute (u64)&initial_stab >> | ||
1267 | * PAGE_SHIFT). | ||
1268 | */ | ||
1269 | . = STAB0_PHYS_ADDR /* 0x6000 */ | ||
1270 | .globl initial_stab | ||
1271 | initial_stab: | ||
1272 | .space 4096 | ||
1273 | |||
1274 | /* | ||
1260 | * Data area reserved for FWNMI option. | 1275 | * Data area reserved for FWNMI option. |
1261 | * This address (0x7000) is fixed by the RPA. | 1276 | * This address (0x7000) is fixed by the RPA. |
1262 | */ | 1277 | */ |
@@ -1265,19 +1280,6 @@ unrecov_slb: | |||
1265 | fwnmi_data_area: | 1280 | fwnmi_data_area: |
1266 | .space PAGE_SIZE | 1281 | .space PAGE_SIZE |
1267 | 1282 | ||
1268 | /* | ||
1269 | * Space for the initial segment table | ||
1270 | * For LPAR, the hypervisor must fill in at least one entry | ||
1271 | * before we get control (with relocate on) | ||
1272 | */ | ||
1273 | . = STAB0_PHYS_ADDR | ||
1274 | .globl __start_stab | ||
1275 | __start_stab: | ||
1276 | |||
1277 | . = (STAB0_PHYS_ADDR + PAGE_SIZE) | ||
1278 | .globl __end_stab | ||
1279 | __end_stab: | ||
1280 | |||
1281 | /* | 1283 | /* |
1282 | * On pSeries, secondary processors spin in the following code. | 1284 | * On pSeries, secondary processors spin in the following code. |
1283 | * At entry, r3 = this processor's number (physical cpu id) | 1285 | * At entry, r3 = this processor's number (physical cpu id) |
diff --git a/arch/ppc64/kernel/pacaData.c b/arch/ppc64/kernel/pacaData.c index 6316188737b6..6182a2cd90a5 100644 --- a/arch/ppc64/kernel/pacaData.c +++ b/arch/ppc64/kernel/pacaData.c | |||
@@ -78,7 +78,7 @@ extern unsigned long __toc_start; | |||
78 | 78 | ||
79 | #define BOOTCPU_PACA_INIT(number) \ | 79 | #define BOOTCPU_PACA_INIT(number) \ |
80 | { \ | 80 | { \ |
81 | PACA_INIT_COMMON(number, 1, 0, STAB0_VIRT_ADDR) \ | 81 | PACA_INIT_COMMON(number, 1, 0, (u64)&initial_stab) \ |
82 | PACA_INIT_ISERIES(number) \ | 82 | PACA_INIT_ISERIES(number) \ |
83 | } | 83 | } |
84 | 84 | ||
@@ -90,7 +90,7 @@ extern unsigned long __toc_start; | |||
90 | 90 | ||
91 | #define BOOTCPU_PACA_INIT(number) \ | 91 | #define BOOTCPU_PACA_INIT(number) \ |
92 | { \ | 92 | { \ |
93 | PACA_INIT_COMMON(number, 1, STAB0_PHYS_ADDR, STAB0_VIRT_ADDR) \ | 93 | PACA_INIT_COMMON(number, 1, STAB0_PHYS_ADDR, (u64)&initial_stab) \ |
94 | } | 94 | } |
95 | #endif | 95 | #endif |
96 | 96 | ||
diff --git a/include/asm-ppc64/mmu.h b/include/asm-ppc64/mmu.h index 959a4bfdcd6a..789c2693483c 100644 --- a/include/asm-ppc64/mmu.h +++ b/include/asm-ppc64/mmu.h | |||
@@ -28,9 +28,12 @@ | |||
28 | #define STE_VSID_SHIFT 12 | 28 | #define STE_VSID_SHIFT 12 |
29 | 29 | ||
30 | /* Location of cpu0's segment table */ | 30 | /* Location of cpu0's segment table */ |
31 | #define STAB0_PAGE 0x9 | 31 | #define STAB0_PAGE 0x6 |
32 | #define STAB0_PHYS_ADDR (STAB0_PAGE<<PAGE_SHIFT) | 32 | #define STAB0_PHYS_ADDR (STAB0_PAGE<<PAGE_SHIFT) |
33 | #define STAB0_VIRT_ADDR (KERNELBASE+STAB0_PHYS_ADDR) | 33 | |
34 | #ifndef __ASSEMBLY__ | ||
35 | extern char initial_stab[]; | ||
36 | #endif /* ! __ASSEMBLY */ | ||
34 | 37 | ||
35 | /* | 38 | /* |
36 | * SLB | 39 | * SLB |