diff options
Diffstat (limited to 'arch/s390/boot')
-rw-r--r-- | arch/s390/boot/boot.h | 1 | ||||
-rw-r--r-- | arch/s390/boot/compressed/vmlinux.lds.S | 5 | ||||
-rw-r--r-- | arch/s390/boot/head.S | 4 | ||||
-rw-r--r-- | arch/s390/boot/sclp_early_core.c | 9 |
4 files changed, 15 insertions, 4 deletions
diff --git a/arch/s390/boot/boot.h b/arch/s390/boot/boot.h index 3d7d5ef4d169..716c35c1d78f 100644 --- a/arch/s390/boot/boot.h +++ b/arch/s390/boot/boot.h @@ -13,6 +13,7 @@ void setup_boot_command_line(void); void parse_boot_command_line(void); void verify_facilities(void); void print_missing_facilities(void); +void sclp_early_setup_buffer(void); void print_pgm_check_info(void); unsigned long get_random_base(unsigned long safe_addr); void __printf(1, 2) decompressor_printk(const char *fmt, ...); diff --git a/arch/s390/boot/compressed/vmlinux.lds.S b/arch/s390/boot/compressed/vmlinux.lds.S index 0bd8aaaa4b33..d6a69aa6e937 100644 --- a/arch/s390/boot/compressed/vmlinux.lds.S +++ b/arch/s390/boot/compressed/vmlinux.lds.S @@ -3,6 +3,7 @@ #include <asm/vmlinux.lds.h> #include <asm/thread_info.h> #include <asm/page.h> +#include <asm/sclp.h> OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") OUTPUT_ARCH(s390:64-bit) @@ -54,7 +55,9 @@ SECTIONS KEEP(*(.dma.ex_table)) _stop_dma_ex_table = .; } - .dma.data : { *(.dma.data) } + .dma.data : { + *(.dma.data) + } . = ALIGN(PAGE_SIZE); _edma = .; diff --git a/arch/s390/boot/head.S b/arch/s390/boot/head.S index 4ac3958b3032..759f77c6af45 100644 --- a/arch/s390/boot/head.S +++ b/arch/s390/boot/head.S @@ -320,6 +320,7 @@ SYM_CODE_START_LOCAL(startup_normal) spt 6f-.LPG0(%r13) mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) larl %r15,_stack_end-STACK_FRAME_OVERHEAD + brasl %r14,sclp_early_setup_buffer brasl %r14,verify_facilities brasl %r14,startup_kernel SYM_CODE_END(startup_normal) @@ -410,7 +411,4 @@ SYM_DATA_START(parmarea) .org PARMAREA+__PARMAREA_SIZE SYM_DATA_END(parmarea) - .org EARLY_SCCB_OFFSET - .fill EXT_SCCB_READ_SCP - .org HEAD_END diff --git a/arch/s390/boot/sclp_early_core.c b/arch/s390/boot/sclp_early_core.c index 5a19fd7020b5..6f30646afbd0 100644 --- a/arch/s390/boot/sclp_early_core.c +++ b/arch/s390/boot/sclp_early_core.c @@ -1,2 +1,11 @@ // SPDX-License-Identifier: GPL-2.0 +#include "boot.h" #include "../../../drivers/s390/char/sclp_early_core.c" + +/* SCLP early buffer must stay page-aligned and below 2GB */ +static char __sclp_early_sccb[EXT_SCCB_READ_SCP] __aligned(PAGE_SIZE); + +void sclp_early_setup_buffer(void) +{ + sclp_early_set_buffer(&__sclp_early_sccb); +} |