diff options
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r-- | arch/s390/kernel/setup.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index a9d18aafa5f4..2bc70b6e876a 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -73,7 +73,7 @@ EXPORT_SYMBOL(uaccess); | |||
73 | unsigned int console_mode = 0; | 73 | unsigned int console_mode = 0; |
74 | unsigned int console_devno = -1; | 74 | unsigned int console_devno = -1; |
75 | unsigned int console_irq = -1; | 75 | unsigned int console_irq = -1; |
76 | unsigned long machine_flags = 0; | 76 | unsigned long machine_flags; |
77 | unsigned long elf_hwcap = 0; | 77 | unsigned long elf_hwcap = 0; |
78 | char elf_platform[ELF_PLATFORM_SIZE]; | 78 | char elf_platform[ELF_PLATFORM_SIZE]; |
79 | 79 | ||
@@ -683,15 +683,6 @@ setup_memory(void) | |||
683 | #endif | 683 | #endif |
684 | } | 684 | } |
685 | 685 | ||
686 | static __init unsigned int stfl(void) | ||
687 | { | ||
688 | asm volatile( | ||
689 | " .insn s,0xb2b10000,0(0)\n" /* stfl */ | ||
690 | "0:\n" | ||
691 | EX_TABLE(0b,0b)); | ||
692 | return S390_lowcore.stfl_fac_list; | ||
693 | } | ||
694 | |||
695 | static int __init __stfle(unsigned long long *list, int doublewords) | 686 | static int __init __stfle(unsigned long long *list, int doublewords) |
696 | { | 687 | { |
697 | typedef struct { unsigned long long _[doublewords]; } addrtype; | 688 | typedef struct { unsigned long long _[doublewords]; } addrtype; |
@@ -758,6 +749,9 @@ static void __init setup_hwcaps(void) | |||
758 | elf_hwcap |= 1UL << 6; | 749 | elf_hwcap |= 1UL << 6; |
759 | } | 750 | } |
760 | 751 | ||
752 | if (MACHINE_HAS_HPAGE) | ||
753 | elf_hwcap |= 1UL << 7; | ||
754 | |||
761 | switch (cpuinfo->cpu_id.machine) { | 755 | switch (cpuinfo->cpu_id.machine) { |
762 | case 0x9672: | 756 | case 0x9672: |
763 | #if !defined(CONFIG_64BIT) | 757 | #if !defined(CONFIG_64BIT) |
@@ -881,8 +875,9 @@ void __cpuinit print_cpu_info(struct cpuinfo_S390 *cpuinfo) | |||
881 | 875 | ||
882 | static int show_cpuinfo(struct seq_file *m, void *v) | 876 | static int show_cpuinfo(struct seq_file *m, void *v) |
883 | { | 877 | { |
884 | static const char *hwcap_str[7] = { | 878 | static const char *hwcap_str[8] = { |
885 | "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp" | 879 | "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", |
880 | "edat" | ||
886 | }; | 881 | }; |
887 | struct cpuinfo_S390 *cpuinfo; | 882 | struct cpuinfo_S390 *cpuinfo; |
888 | unsigned long n = (unsigned long) v - 1; | 883 | unsigned long n = (unsigned long) v - 1; |
@@ -897,7 +892,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
897 | num_online_cpus(), loops_per_jiffy/(500000/HZ), | 892 | num_online_cpus(), loops_per_jiffy/(500000/HZ), |
898 | (loops_per_jiffy/(5000/HZ))%100); | 893 | (loops_per_jiffy/(5000/HZ))%100); |
899 | seq_puts(m, "features\t: "); | 894 | seq_puts(m, "features\t: "); |
900 | for (i = 0; i < 7; i++) | 895 | for (i = 0; i < 8; i++) |
901 | if (hwcap_str[i] && (elf_hwcap & (1UL << i))) | 896 | if (hwcap_str[i] && (elf_hwcap & (1UL << i))) |
902 | seq_printf(m, "%s ", hwcap_str[i]); | 897 | seq_printf(m, "%s ", hwcap_str[i]); |
903 | seq_puts(m, "\n"); | 898 | seq_puts(m, "\n"); |