forked from Minki/linux
5a79859ae0
Remove the 31 bit support in order to reduce maintenance cost and
effectively remove dead code. Since a couple of years there is no
distribution left that comes with a 31 bit kernel.
The 31 bit kernel also has been broken since more than a year before
anybody noticed. In addition I added a removal warning to the kernel
shown at ipl for 5 minutes: a960062e58
("s390: add 31 bit warning
message") which let everybody know about the plan to remove 31 bit
code. We didn't get any response.
Given that the last 31 bit only machine was introduced in 1999 let's
remove the code.
Anybody with 31 bit user space code can still use the compat mode.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
101 lines
2.3 KiB
ArmAsm
101 lines
2.3 KiB
ArmAsm
/*
|
|
* S390 kdump lowlevel functions (new kernel)
|
|
*
|
|
* Copyright IBM Corp. 2011
|
|
* Author(s): Michael Holzheu <holzheu@linux.vnet.ibm.com>
|
|
*/
|
|
|
|
#include <asm/sigp.h>
|
|
|
|
#define DATAMOVER_ADDR 0x4000
|
|
#define COPY_PAGE_ADDR 0x6000
|
|
|
|
#ifdef CONFIG_CRASH_DUMP
|
|
|
|
#
|
|
# kdump entry (new kernel - not yet relocated)
|
|
#
|
|
# Note: This code has to be position independent
|
|
#
|
|
|
|
.align 2
|
|
.Lep_startup_kdump:
|
|
lhi %r1,2 # mode 2 = esame (dump)
|
|
sigp %r1,%r0,SIGP_SET_ARCHITECTURE # Switch to esame mode
|
|
sam64 # Switch to 64 bit addressing
|
|
basr %r13,0
|
|
.Lbase:
|
|
larl %r2,.Lbase_addr # Check, if we have been
|
|
lg %r2,0(%r2) # already relocated:
|
|
clgr %r2,%r13 #
|
|
jne .Lrelocate # No : Start data mover
|
|
lghi %r2,0 # Yes: Start kdump kernel
|
|
brasl %r14,startup_kdump_relocated
|
|
|
|
.Lrelocate:
|
|
larl %r4,startup
|
|
lg %r2,0x418(%r4) # Get kdump base
|
|
lg %r3,0x420(%r4) # Get kdump size
|
|
|
|
larl %r10,.Lcopy_start # Source of data mover
|
|
lghi %r8,DATAMOVER_ADDR # Target of data mover
|
|
mvc 0(256,%r8),0(%r10) # Copy data mover code
|
|
|
|
agr %r8,%r2 # Copy data mover to
|
|
mvc 0(256,%r8),0(%r10) # reserved mem
|
|
|
|
lghi %r14,DATAMOVER_ADDR # Jump to copied data mover
|
|
basr %r14,%r14
|
|
.Lbase_addr:
|
|
.quad .Lbase
|
|
|
|
#
|
|
# kdump data mover code (runs at address DATAMOVER_ADDR)
|
|
#
|
|
# r2: kdump base address
|
|
# r3: kdump size
|
|
#
|
|
.Lcopy_start:
|
|
basr %r13,0 # Base
|
|
0:
|
|
lgr %r11,%r2 # Save kdump base address
|
|
lgr %r12,%r2
|
|
agr %r12,%r3 # Compute kdump end address
|
|
|
|
lghi %r5,0
|
|
lghi %r10,COPY_PAGE_ADDR # Load copy page address
|
|
1:
|
|
mvc 0(256,%r10),0(%r5) # Copy old kernel to tmp
|
|
mvc 0(256,%r5),0(%r11) # Copy new kernel to old
|
|
mvc 0(256,%r11),0(%r10) # Copy tmp to new
|
|
aghi %r11,256
|
|
aghi %r5,256
|
|
clgr %r11,%r12
|
|
jl 1b
|
|
|
|
lg %r14,.Lstartup_kdump-0b(%r13)
|
|
basr %r14,%r14 # Start relocated kernel
|
|
.Lstartup_kdump:
|
|
.long 0x00000000,0x00000000 + startup_kdump_relocated
|
|
.Lcopy_end:
|
|
|
|
#
|
|
# Startup of kdump (relocated new kernel)
|
|
#
|
|
.align 2
|
|
startup_kdump_relocated:
|
|
basr %r13,0
|
|
0: lpswe .Lrestart_psw-0b(%r13) # Start new kernel...
|
|
.align 8
|
|
.Lrestart_psw:
|
|
.quad 0x0000000080000000,0x0000000000000000 + startup
|
|
#else
|
|
.align 2
|
|
.Lep_startup_kdump:
|
|
larl %r13,startup_kdump_crash
|
|
lpswe 0(%r13)
|
|
.align 8
|
|
startup_kdump_crash:
|
|
.quad 0x0002000080000000,0x0000000000000000 + startup_kdump_crash
|
|
#endif /* CONFIG_CRASH_DUMP */
|