Commit bd50b743 authored by Alexander Gordeev's avatar Alexander Gordeev Committed by Heiko Carstens
Browse files

s390/boot: detect and enable memory facilities



Detect and enable memory facilities which is a
prerequisite for pgtables setup in the decompressor.

Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent b2658540
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -8,6 +8,12 @@

#ifndef __ASSEMBLY__

struct machine_info {
	unsigned char has_edat1 : 1;
	unsigned char has_edat2 : 1;
	unsigned char has_nx : 1;
};

struct vmlinux_info {
	unsigned long default_lma;
	void (*entry)(void);
@@ -38,6 +44,8 @@ unsigned long get_random_base(unsigned long safe_addr);
void __printf(1, 2) decompressor_printk(const char *fmt, ...);
void error(char *m);

extern struct machine_info machine;

/* Symbols defined by linker scripts */
extern const char kernel_version[];
extern unsigned long memory_limit;
+18 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ u64 __bootdata_preserved(stfle_fac_list[16]);
u64 __bootdata_preserved(alt_stfle_fac_list[16]);
struct oldmem_data __bootdata_preserved(oldmem_data);

struct machine_info machine;

void error(char *x)
{
	sclp_early_printk("\n\n");
@@ -42,6 +44,20 @@ void error(char *x)
	disabled_wait();
}

static void detect_facilities(void)
{
	if (test_facility(8)) {
		machine.has_edat1 = 1;
		__ctl_set_bit(0, 23);
	}
	if (test_facility(78))
		machine.has_edat2 = 1;
	if (!noexec_disabled && test_facility(130)) {
		machine.has_nx = 1;
		__ctl_set_bit(0, 20);
	}
}

static void setup_lpp(void)
{
	S390_lowcore.current_pid = 0;
@@ -254,6 +270,8 @@ void startup_kernel(void)
	unsigned long safe_addr;
	void *img;

	detect_facilities();

	initrd_data.start = parmarea.initrd_start;
	initrd_data.size = parmarea.initrd_size;
	oldmem_data.start = parmarea.oldmem_base;