diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 01:02:30 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 01:02:30 +0000 |
commit | 76cb841cb886eef6b3bee341a2266c76578724ad (patch) | |
tree | f5892e5ba6cc11949952a6ce4ecbe6d516d6ce58 /arch/s390/boot/compressed/head.S | |
parent | Initial commit. (diff) | |
download | linux-76cb841cb886eef6b3bee341a2266c76578724ad.tar.xz linux-76cb841cb886eef6b3bee341a2266c76578724ad.zip |
Adding upstream version 4.19.249.upstream/4.19.249
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'arch/s390/boot/compressed/head.S')
-rw-r--r-- | arch/s390/boot/compressed/head.S | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/arch/s390/boot/compressed/head.S b/arch/s390/boot/compressed/head.S new file mode 100644 index 000000000..df8dbbc17 --- /dev/null +++ b/arch/s390/boot/compressed/head.S @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Startup glue code to uncompress the kernel + * + * Copyright IBM Corp. 2010 + * + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> + */ + +#include <linux/init.h> +#include <linux/linkage.h> +#include <asm/asm-offsets.h> +#include <asm/thread_info.h> +#include <asm/page.h> +#include "sizes.h" + +__HEAD +ENTRY(startup_decompressor) + basr %r13,0 # get base +.LPG1: + # setup stack + lg %r15,.Lstack-.LPG1(%r13) + aghi %r15,-160 + brasl %r14,decompress_kernel + # Set up registers for memory mover. We move the decompressed image to + # 0x100000, where startup_continue of the decompressed image is supposed + # to be. + lgr %r4,%r2 + lg %r2,.Loffset-.LPG1(%r13) + lg %r3,.Lmvsize-.LPG1(%r13) + lgr %r5,%r3 + # Move the memory mover someplace safe so it doesn't overwrite itself. + la %r1,0x200 + mvc 0(mover_end-mover,%r1),mover-.LPG1(%r13) + # When the memory mover is done we pass control to + # arch/s390/kernel/head64.S:startup_continue which lives at 0x100000 in + # the decompressed image. + lgr %r6,%r2 + br %r1 +mover: + mvcle %r2,%r4,0 + jo mover + br %r6 +mover_end: + + .align 8 +.Lstack: + .quad 0x8000 + (1<<(PAGE_SHIFT+THREAD_SIZE_ORDER)) +.Loffset: + .quad 0x100000 +.Lmvsize: + .quad SZ__bss_start |