|
@@ -376,6 +376,7 @@ void __init early_print(const char *str, ...)
|
|
|
static void __init cpuid_init_hwcaps(void)
|
|
|
{
|
|
|
int block;
|
|
|
+ u32 isar5;
|
|
|
|
|
|
if (cpu_architecture() < CPU_ARCH_ARMv7)
|
|
|
return;
|
|
@@ -390,6 +391,27 @@ static void __init cpuid_init_hwcaps(void)
|
|
|
block = cpuid_feature_extract(CPUID_EXT_MMFR0, 0);
|
|
|
if (block >= 5)
|
|
|
elf_hwcap |= HWCAP_LPAE;
|
|
|
+
|
|
|
+ /* check for supported v8 Crypto instructions */
|
|
|
+ isar5 = read_cpuid_ext(CPUID_EXT_ISAR5);
|
|
|
+
|
|
|
+ block = cpuid_feature_extract_field(isar5, 4);
|
|
|
+ if (block >= 2)
|
|
|
+ elf_hwcap2 |= HWCAP2_PMULL;
|
|
|
+ if (block >= 1)
|
|
|
+ elf_hwcap2 |= HWCAP2_AES;
|
|
|
+
|
|
|
+ block = cpuid_feature_extract_field(isar5, 8);
|
|
|
+ if (block >= 1)
|
|
|
+ elf_hwcap2 |= HWCAP2_SHA1;
|
|
|
+
|
|
|
+ block = cpuid_feature_extract_field(isar5, 12);
|
|
|
+ if (block >= 1)
|
|
|
+ elf_hwcap2 |= HWCAP2_SHA2;
|
|
|
+
|
|
|
+ block = cpuid_feature_extract_field(isar5, 16);
|
|
|
+ if (block >= 1)
|
|
|
+ elf_hwcap2 |= HWCAP2_CRC32;
|
|
|
}
|
|
|
|
|
|
static void __init elf_hwcap_fixup(void)
|