diff options
author | Alexander Gordeev <agordeev@linux.ibm.com> | 2022-12-04 21:15:41 +0100 |
---|---|---|
committer | Heiko Carstens <hca@linux.ibm.com> | 2023-01-13 14:15:05 +0100 |
commit | bd50b7436217b4123911c2bca1efd74718654f06 (patch) | |
tree | 57a16051bb67e2437a7cc3ed0dbd8da609f3ad9f /arch/s390/boot/startup.c | |
parent | b265854060525ca2cef74e40a49494bbb52700e6 (diff) |
s390/boot: detect and enable memory facilities
Detect and enable memory facilities which is a
prerequisite for pgtables setup in the decompressor.
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390/boot/startup.c')
-rw-r--r-- | arch/s390/boot/startup.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c index 47ca3264c023..da6ee587fe9a 100644 --- a/arch/s390/boot/startup.c +++ b/arch/s390/boot/startup.c @@ -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; |