Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e941d39 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky
Browse files

s390: move ipl block to .boot.preserved.data section



.boot.preserved.data is a better fit for ipl block than .boot.data
which is discarded after init. Reusing .boot.preserved.data allows to
simplify code a little bit and avoid copying data from .boot.data to
persistent variables.

Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent bf9921a9
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -10,8 +10,8 @@
#include "boot.h"

char __bootdata(early_command_line)[COMMAND_LINE_SIZE];
struct ipl_parameter_block __bootdata(early_ipl_block);
int __bootdata(early_ipl_block_valid);
struct ipl_parameter_block __bootdata_preserved(ipl_block);
int __bootdata_preserved(ipl_block_valid);

unsigned long __bootdata(memory_end);
int __bootdata(memory_end_set);
@@ -45,10 +45,10 @@ void store_ipl_parmblock(void)
{
	int rc;

	rc = __diag308(DIAG308_STORE, &early_ipl_block);
	rc = __diag308(DIAG308_STORE, &ipl_block);
	if (rc == DIAG308_RC_OK &&
	    early_ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
		early_ipl_block_valid = 1;
	    ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
		ipl_block_valid = 1;
}

static size_t scpdata_length(const char *buf, size_t count)
@@ -103,14 +103,14 @@ static void append_ipl_block_parm(void)
	delim = early_command_line + len;    /* '\0' character position */
	parm = early_command_line + len + 1; /* append right after '\0' */

	switch (early_ipl_block.hdr.pbt) {
	switch (ipl_block.hdr.pbt) {
	case DIAG308_IPL_TYPE_CCW:
		rc = ipl_block_get_ascii_vmparm(
			parm, COMMAND_LINE_SIZE - len - 1, &early_ipl_block);
			parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
		break;
	case DIAG308_IPL_TYPE_FCP:
		rc = ipl_block_get_ascii_scpdata(
			parm, COMMAND_LINE_SIZE - len - 1, &early_ipl_block);
			parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
		break;
	}
	if (rc) {
@@ -141,7 +141,7 @@ void setup_boot_command_line(void)
	strcpy(early_command_line, strim(COMMAND_LINE));

	/* append IPL PARM data to the boot command line */
	if (early_ipl_block_valid)
	if (ipl_block_valid)
		append_ipl_block_parm();
}

@@ -234,9 +234,9 @@ void parse_boot_command_line(void)
void setup_memory_end(void)
{
#ifdef CONFIG_CRASH_DUMP
	if (!OLDMEM_BASE && early_ipl_block_valid &&
	    early_ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
	    early_ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP) {
	if (!OLDMEM_BASE && ipl_block_valid &&
	    ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
	    ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP) {
		if (!sclp_early_get_hsa_size(&memory_end) && memory_end)
			memory_end_set = 1;
	}
+2 −2
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
#include <asm/ipl.h>

extern char early_command_line[COMMAND_LINE_SIZE];
extern struct ipl_parameter_block early_ipl_block;
extern int early_ipl_block_valid;
extern struct ipl_parameter_block ipl_block;
extern int ipl_block_valid;

#endif /* _ASM_S390_BOOT_DATA_H */
+0 −1
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ void __init save_area_add_regs(struct save_area *, void *regs);
void __init save_area_add_vxrs(struct save_area *, __vector128 *vxrs);

extern void s390_reset_system(void);
extern void ipl_store_parameters(void);
extern size_t ipl_block_get_ascii_vmparm(char *dest, size_t size,
					 const struct ipl_parameter_block *ipb);

+0 −1
Original line number Diff line number Diff line
@@ -309,7 +309,6 @@ void __init startup_init(void)
	setup_facility_list();
	detect_machine_type();
	setup_arch_string();
	ipl_store_parameters();
	setup_boot_command_line();
	detect_diag9c();
	detect_diag44();
+2 −13
Original line number Diff line number Diff line
@@ -119,11 +119,8 @@ static char *dump_type_str(enum dump_type type)
	}
}

struct ipl_parameter_block __bootdata(early_ipl_block);
int __bootdata(early_ipl_block_valid);

static int ipl_block_valid;
static struct ipl_parameter_block ipl_block;
int __bootdata_preserved(ipl_block_valid);
struct ipl_parameter_block __bootdata_preserved(ipl_block);

static int reipl_capabilities = IPL_TYPE_UNKNOWN;

@@ -1675,14 +1672,6 @@ void __init setup_ipl(void)
	atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb);
}

void __init ipl_store_parameters(void)
{
	if (early_ipl_block_valid) {
		memcpy(&ipl_block, &early_ipl_block, sizeof(ipl_block));
		ipl_block_valid = 1;
	}
}

void s390_reset_system(void)
{
	/* Disable prefixing */