diff options
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r-- | arch/s390/kernel/setup.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index 18222ac4078f..06201b93cbbf 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -696,15 +696,22 @@ static void __init setup_hwcaps(void) | |||
696 | * Bit 17: the message-security assist is installed | 696 | * Bit 17: the message-security assist is installed |
697 | * Bit 19: the long-displacement facility is installed | 697 | * Bit 19: the long-displacement facility is installed |
698 | * Bit 21: the extended-immediate facility is installed | 698 | * Bit 21: the extended-immediate facility is installed |
699 | * Bit 22: extended-translation facility 3 is installed | ||
700 | * Bit 30: extended-translation facility 3 enhancement facility | ||
699 | * These get translated to: | 701 | * These get translated to: |
700 | * HWCAP_S390_ESAN3 bit 0, HWCAP_S390_ZARCH bit 1, | 702 | * HWCAP_S390_ESAN3 bit 0, HWCAP_S390_ZARCH bit 1, |
701 | * HWCAP_S390_STFLE bit 2, HWCAP_S390_MSA bit 3, | 703 | * HWCAP_S390_STFLE bit 2, HWCAP_S390_MSA bit 3, |
702 | * HWCAP_S390_LDISP bit 4, and HWCAP_S390_EIMM bit 5. | 704 | * HWCAP_S390_LDISP bit 4, HWCAP_S390_EIMM bit 5 and |
705 | * HWCAP_S390_ETF3EH bit 8 (22 && 30). | ||
703 | */ | 706 | */ |
704 | for (i = 0; i < 6; i++) | 707 | for (i = 0; i < 6; i++) |
705 | if (facility_list & (1UL << (31 - stfl_bits[i]))) | 708 | if (facility_list & (1UL << (31 - stfl_bits[i]))) |
706 | elf_hwcap |= 1UL << i; | 709 | elf_hwcap |= 1UL << i; |
707 | 710 | ||
711 | if ((facility_list & (1UL << (31 - 22))) | ||
712 | && (facility_list & (1UL << (31 - 30)))) | ||
713 | elf_hwcap |= 1UL << 8; | ||
714 | |||
708 | /* | 715 | /* |
709 | * Check for additional facilities with store-facility-list-extended. | 716 | * Check for additional facilities with store-facility-list-extended. |
710 | * stfle stores doublewords (8 byte) with bit 1ULL<<63 as bit 0 | 717 | * stfle stores doublewords (8 byte) with bit 1ULL<<63 as bit 0 |
@@ -716,12 +723,12 @@ static void __init setup_hwcaps(void) | |||
716 | * Bit 42: decimal floating point facility is installed | 723 | * Bit 42: decimal floating point facility is installed |
717 | * Bit 44: perform floating point operation facility is installed | 724 | * Bit 44: perform floating point operation facility is installed |
718 | * translated to: | 725 | * translated to: |
719 | * HWCAP_S390_DFP bit 6. | 726 | * HWCAP_S390_DFP bit 6 (42 && 44). |
720 | */ | 727 | */ |
721 | if ((elf_hwcap & (1UL << 2)) && | 728 | if ((elf_hwcap & (1UL << 2)) && |
722 | __stfle(&facility_list_extended, 1) > 0) { | 729 | __stfle(&facility_list_extended, 1) > 0) { |
723 | if ((facility_list_extended & (1ULL << (63 - 42))) | 730 | if ((facility_list_extended & (1ULL << (63 - 42))) |
724 | && (facility_list_extended & (1ULL << (63 - 44)))) | 731 | && (facility_list_extended & (1ULL << (63 - 44)))) |
725 | elf_hwcap |= 1UL << 6; | 732 | elf_hwcap |= 1UL << 6; |
726 | } | 733 | } |
727 | 734 | ||