forked from luck/tmp_suning_uos_patched
arm64: advertise ARMv8 extensions to 32-bit compat ELF binaries
This adds support for advertising the presence of ARMv8 Crypto Extensions in the Aarch32 execution state to 32-bit ELF binaries running in 32-bit compat mode under the arm64 kernel. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
28964d32d4
commit
4cf761cdcc
@ -32,6 +32,12 @@
|
||||
#define COMPAT_HWCAP_IDIV (COMPAT_HWCAP_IDIVA|COMPAT_HWCAP_IDIVT)
|
||||
#define COMPAT_HWCAP_EVTSTRM (1 << 21)
|
||||
|
||||
#define COMPAT_HWCAP2_AES (1 << 0)
|
||||
#define COMPAT_HWCAP2_PMULL (1 << 1)
|
||||
#define COMPAT_HWCAP2_SHA1 (1 << 2)
|
||||
#define COMPAT_HWCAP2_SHA2 (1 << 3)
|
||||
#define COMPAT_HWCAP2_CRC32 (1 << 4)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
* This yields a mask that user programs can use to figure out what
|
||||
|
@ -243,6 +243,38 @@ static void __init setup_processor(void)
|
||||
block = (features >> 16) & 0xf;
|
||||
if (block && !(block & 0x8))
|
||||
elf_hwcap |= HWCAP_CRC32;
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
/*
|
||||
* ID_ISAR5_EL1 carries similar information as above, but pertaining to
|
||||
* the Aarch32 32-bit execution state.
|
||||
*/
|
||||
features = read_cpuid(ID_ISAR5_EL1);
|
||||
block = (features >> 4) & 0xf;
|
||||
if (!(block & 0x8)) {
|
||||
switch (block) {
|
||||
default:
|
||||
case 2:
|
||||
compat_elf_hwcap2 |= COMPAT_HWCAP2_PMULL;
|
||||
case 1:
|
||||
compat_elf_hwcap2 |= COMPAT_HWCAP2_AES;
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
block = (features >> 8) & 0xf;
|
||||
if (block && !(block & 0x8))
|
||||
compat_elf_hwcap2 |= COMPAT_HWCAP2_SHA1;
|
||||
|
||||
block = (features >> 12) & 0xf;
|
||||
if (block && !(block & 0x8))
|
||||
compat_elf_hwcap2 |= COMPAT_HWCAP2_SHA2;
|
||||
|
||||
block = (features >> 16) & 0xf;
|
||||
if (block && !(block & 0x8))
|
||||
compat_elf_hwcap2 |= COMPAT_HWCAP2_CRC32;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __init setup_machine_fdt(phys_addr_t dt_phys)
|
||||
|
Loading…
Reference in New Issue
Block a user