| From c0ee26682894a0496cbad880769e5953a3026a87 Mon Sep 17 00:00:00 2001 |
| From: Jiaxun Yang <jiaxun.yang@flygoat.com> |
| Date: Thu, 10 Oct 2019 23:01:57 +0800 |
| Subject: [PATCH] MIPS: elf_hwcap: Export userspace ASEs |
| |
| commit 38dffe1e4dde1d3174fdce09d67370412843ebb5 upstream. |
| |
| A Golang developer reported MIPS hwcap isn't reflecting instructions |
| that the processor actually supported so programs can't apply optimized |
| code at runtime. |
| |
| Thus we export the ASEs that can be used in userspace programs. |
| |
| Reported-by: Meng Zhuo <mengzhuo1203@gmail.com> |
| Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> |
| Cc: linux-mips@vger.kernel.org |
| Cc: Paul Burton <paul.burton@mips.com> |
| Cc: <stable@vger.kernel.org> # 4.14+ |
| Signed-off-by: Paul Burton <paul.burton@mips.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/mips/include/uapi/asm/hwcap.h b/arch/mips/include/uapi/asm/hwcap.h |
| index a2aba4b059e6..1ade1daa4921 100644 |
| --- a/arch/mips/include/uapi/asm/hwcap.h |
| +++ b/arch/mips/include/uapi/asm/hwcap.h |
| @@ -6,5 +6,16 @@ |
| #define HWCAP_MIPS_R6 (1 << 0) |
| #define HWCAP_MIPS_MSA (1 << 1) |
| #define HWCAP_MIPS_CRC32 (1 << 2) |
| +#define HWCAP_MIPS_MIPS16 (1 << 3) |
| +#define HWCAP_MIPS_MDMX (1 << 4) |
| +#define HWCAP_MIPS_MIPS3D (1 << 5) |
| +#define HWCAP_MIPS_SMARTMIPS (1 << 6) |
| +#define HWCAP_MIPS_DSP (1 << 7) |
| +#define HWCAP_MIPS_DSP2 (1 << 8) |
| +#define HWCAP_MIPS_DSP3 (1 << 9) |
| +#define HWCAP_MIPS_MIPS16E2 (1 << 10) |
| +#define HWCAP_LOONGSON_MMI (1 << 11) |
| +#define HWCAP_LOONGSON_EXT (1 << 12) |
| +#define HWCAP_LOONGSON_EXT2 (1 << 13) |
| |
| #endif /* _UAPI_ASM_HWCAP_H */ |
| diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c |
| index e698a20017c1..147dafa4bfc3 100644 |
| --- a/arch/mips/kernel/cpu-probe.c |
| +++ b/arch/mips/kernel/cpu-probe.c |
| @@ -2198,6 +2198,39 @@ void cpu_probe(void) |
| elf_hwcap |= HWCAP_MIPS_MSA; |
| } |
| |
| + if (cpu_has_mips16) |
| + elf_hwcap |= HWCAP_MIPS_MIPS16; |
| + |
| + if (cpu_has_mdmx) |
| + elf_hwcap |= HWCAP_MIPS_MDMX; |
| + |
| + if (cpu_has_mips3d) |
| + elf_hwcap |= HWCAP_MIPS_MIPS3D; |
| + |
| + if (cpu_has_smartmips) |
| + elf_hwcap |= HWCAP_MIPS_SMARTMIPS; |
| + |
| + if (cpu_has_dsp) |
| + elf_hwcap |= HWCAP_MIPS_DSP; |
| + |
| + if (cpu_has_dsp2) |
| + elf_hwcap |= HWCAP_MIPS_DSP2; |
| + |
| + if (cpu_has_dsp3) |
| + elf_hwcap |= HWCAP_MIPS_DSP3; |
| + |
| + if (cpu_has_mips16e2) |
| + elf_hwcap |= HWCAP_MIPS_MIPS16E2; |
| + |
| + if (cpu_has_loongson_mmi) |
| + elf_hwcap |= HWCAP_LOONGSON_MMI; |
| + |
| + if (cpu_has_loongson_ext) |
| + elf_hwcap |= HWCAP_LOONGSON_EXT; |
| + |
| + if (cpu_has_loongson_ext2) |
| + elf_hwcap |= HWCAP_LOONGSON_EXT2; |
| + |
| if (cpu_has_vz) |
| cpu_probe_vz(c); |
| |
| -- |
| 2.7.4 |
| |