aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/head_64.S
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2007-08-20 00:58:36 -0400
committerPaul Mackerras <paulus@samba.org>2007-08-22 01:21:46 -0400
commit16a15a30f8a09af6ce2dc4fd6eec9b454c1fe488 (patch)
treeb9a2be9818f41d92df001950374ed6bc49e44751 /arch/powerpc/kernel/head_64.S
parent556ecf9be66f4d493e19bc71a7ce84366d512b71 (diff)
[POWERPC] iSeries: Clean up lparmap mess
We need to have xLparMap in head_64.S so that it is at a fixed address (because the linker will not resolve (address & 0xffffffff) for us). But the assembler miscalculates the KERNEL_VSID() expressions. So put the confusing expressions into asm-offsets.c. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/head_64.S')
-rw-r--r--arch/powerpc/kernel/head_64.S27
1 files changed, 19 insertions, 8 deletions
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index 171800002ede..1e6d9cc06ca0 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -34,6 +34,7 @@
34#include <asm/iseries/lpar_map.h> 34#include <asm/iseries/lpar_map.h>
35#include <asm/thread_info.h> 35#include <asm/thread_info.h>
36#include <asm/firmware.h> 36#include <asm/firmware.h>
37#include <asm/page_64.h>
37 38
38#define DO_SOFT_DISABLE 39#define DO_SOFT_DISABLE
39 40
@@ -1519,8 +1520,8 @@ _GLOBAL(do_stab_bolted)
1519 * Space for CPU0's segment table. 1520 * Space for CPU0's segment table.
1520 * 1521 *
1521 * On iSeries, the hypervisor must fill in at least one entry before 1522 * On iSeries, the hypervisor must fill in at least one entry before
1522 * we get control (with relocate on). The address is give to the hv 1523 * we get control (with relocate on). The address is given to the hv
1523 * as a page number (see xLparMap in lpardata.c), so this must be at a 1524 * as a page number (see xLparMap below), so this must be at a
1524 * fixed address (the linker can't compute (u64)&initial_stab >> 1525 * fixed address (the linker can't compute (u64)&initial_stab >>
1525 * PAGE_SHIFT). 1526 * PAGE_SHIFT).
1526 */ 1527 */
@@ -1542,12 +1543,22 @@ fwnmi_data_area:
1542 * both pSeries and iSeries */ 1543 * both pSeries and iSeries */
1543#ifdef CONFIG_PPC_ISERIES 1544#ifdef CONFIG_PPC_ISERIES
1544 . = LPARMAP_PHYS 1545 . = LPARMAP_PHYS
1545#include "lparmap.s" 1546 .globl xLparMap
1546/* 1547xLparMap:
1547 * This ".text" is here for old compilers that generate a trailing 1548 .quad HvEsidsToMap /* xNumberEsids */
1548 * .note section when compiling .c files to .s 1549 .quad HvRangesToMap /* xNumberRanges */
1549 */ 1550 .quad STAB0_PAGE /* xSegmentTableOffs */
1550 .text 1551 .zero 40 /* xRsvd */
1552 /* xEsids (HvEsidsToMap entries of 2 quads) */
1553 .quad PAGE_OFFSET_ESID /* xKernelEsid */
1554 .quad PAGE_OFFSET_VSID /* xKernelVsid */
1555 .quad VMALLOC_START_ESID /* xKernelEsid */
1556 .quad VMALLOC_START_VSID /* xKernelVsid */
1557 /* xRanges (HvRangesToMap entries of 3 quads) */
1558 .quad HvPagesToMap /* xPages */
1559 .quad 0 /* xOffset */
1560 .quad PAGE_OFFSET_VSID << (SID_SHIFT - HW_PAGE_SHIFT) /* xVPN */
1561
1551#endif /* CONFIG_PPC_ISERIES */ 1562#endif /* CONFIG_PPC_ISERIES */
1552 1563
1553 . = 0x8000 1564 . = 0x8000