aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/ppc64/kernel/head.S32
-rw-r--r--arch/ppc64/kernel/pacaData.c4
-rw-r--r--include/asm-ppc64/mmu.h7
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
1271initial_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:
1265fwnmi_data_area: 1280fwnmi_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__
35extern char initial_stab[];
36#endif /* ! __ASSEMBLY */
34 37
35/* 38/*
36 * SLB 39 * SLB