s390/boot: convert parmarea to C
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 25 Apr 2022 19:24:56 +0000 (21:24 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Fri, 6 May 2022 18:45:15 +0000 (20:45 +0200)
Convert parmarea to C, which makes it much easier to initialize it. No need
to keep offsets in assembler code in sync with struct parmarea anymore.

Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/boot/head.S
arch/s390/boot/ipl_data.c
arch/s390/boot/ipl_parm.c
arch/s390/boot/vmlinux.lds.S

index ceb1186..2ced901 100644 (file)
@@ -333,23 +333,3 @@ SYM_CODE_START_LOCAL(startup_pgm_check_handler)
        lmg     %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r8)
        lpswe   __LC_RETURN_PSW         # disabled wait
 SYM_CODE_END(startup_pgm_check_handler)
-
-#
-# params at 10400 (setup.h)
-# Must be keept in sync with struct parmarea in setup.h
-#
-       .org    PARMAREA - IPL_START
-SYM_DATA_START(parmarea)
-       .quad   0                       # IPL_DEVICE
-       .quad   0                       # INITRD_START
-       .quad   0                       # INITRD_SIZE
-       .quad   0                       # OLDMEM_BASE
-       .quad   0                       # OLDMEM_SIZE
-       .quad   kernel_version          # points to kernel version string
-       .quad   COMMAND_LINE_SIZE
-
-       .org    COMMAND_LINE - IPL_START
-       .byte   "root=/dev/ram0 ro"
-       .byte   0
-       .org    PARMAREA+__PARMAREA_SIZE - IPL_START
-SYM_DATA_END(parmarea)
index 90749e3..0846e2b 100644 (file)
@@ -44,7 +44,7 @@ struct ipl_lowcore {
  * that to succeed the two initial CCWs, and the 0x40 fill bytes must
  * be present.
  */
-struct ipl_lowcore ipl_lowcore __section(".ipldata") = {
+static struct ipl_lowcore ipl_lowcore __used __section(".ipldata") = {
        .ipl_psw = { .mask = PSW32_MASK_BASE, .addr = PSW32_ADDR_AMODE | IPL_START },
        .ccwpgm = {
                [ 0] = CCW0(CCW_CMD_READ_IPL, 0x018, 0x50, CCW_FLAG_SLI | CCW_FLAG_CC),
index 9ed7e29..ca78d61 100644 (file)
@@ -8,9 +8,16 @@
 #include <asm/sections.h>
 #include <asm/boot_data.h>
 #include <asm/facility.h>
+#include <asm/setup.h>
 #include <asm/uv.h>
 #include "boot.h"
 
+struct parmarea parmarea __section(".parmarea") = {
+       .kernel_version         = (unsigned long)kernel_version,
+       .max_command_line_size  = COMMAND_LINE_SIZE,
+       .command_line           = "root=/dev/ram0 ro",
+};
+
 char __bootdata(early_command_line)[COMMAND_LINE_SIZE];
 int __bootdata(noexec_disabled);
 
index 983f02d..af5c686 100644 (file)
@@ -23,6 +23,10 @@ SECTIONS
                HEAD_TEXT
                _ehead = . ;
        }
+       . = PARMAREA;
+       .parmarea : {
+               *(.parmarea)
+       }
        .text : {
                _text = .;      /* Text */
                *(.text)