aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2005-08-19 00:52:31 -0400
committerPaul Mackerras <paulus@samba.org>2005-08-28 20:53:33 -0400
commitc59c464a3e29830bcfae5eea1777cad9e00087f3 (patch)
treeebf8eb2885e8431c82c011f46138d41630a8ba49
parentec465515eeb662f66725c8c483a46b6bdd9bdd48 (diff)
[PATCH] Change address of ppc64 initial segment table
On ppc64 machines with segment tables, CPU0's segment table is at a fixed address, currently 0x9000. This patch moves it to the free space at 0x6000, just below the fwnmi data area. This saves 8k of space in vmlinux and the runtime kernel image. Signed-off-by: David Gibson <dwg@au1.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
-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