diff options
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; |