+++ /dev/null
-From d2f965549006acb865c4638f1f030ebcefdc71f6 Mon Sep 17 00:00:00 2001
-From: Jiaxun Yang <jiaxun.yang@flygoat.com>
-Date: Wed, 29 May 2019 16:42:59 +0800
-Subject: MIPS: Treat Loongson Extensions as ASEs
-
-From: Jiaxun Yang <jiaxun.yang@flygoat.com>
-
-commit d2f965549006acb865c4638f1f030ebcefdc71f6 upstream.
-
-Recently, binutils had split Loongson-3 Extensions into four ASEs:
-MMI, CAM, EXT, EXT2. This patch do the samething in kernel and expose
-them in cpuinfo so applications can probe supported ASEs at runtime.
-
-Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
-Cc: Huacai Chen <chenhc@lemote.com>
-Cc: Yunqiang Su <ysu@wavecomp.com>
-Cc: stable@vger.kernel.org # v4.14+
-Signed-off-by: Paul Burton <paul.burton@mips.com>
-Cc: linux-mips@vger.kernel.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- arch/mips/include/asm/cpu-features.h | 16 ++++++++++++++++
- arch/mips/include/asm/cpu.h | 4 ++++
- arch/mips/kernel/cpu-probe.c | 6 ++++++
- arch/mips/kernel/proc.c | 4 ++++
- 4 files changed, 30 insertions(+)
-
---- a/arch/mips/include/asm/cpu-features.h
-+++ b/arch/mips/include/asm/cpu-features.h
-@@ -348,6 +348,22 @@
- #define cpu_has_dsp3 (cpu_data[0].ases & MIPS_ASE_DSP3)
- #endif
-
-+#ifndef cpu_has_loongson_mmi
-+#define cpu_has_loongson_mmi __ase(MIPS_ASE_LOONGSON_MMI)
-+#endif
-+
-+#ifndef cpu_has_loongson_cam
-+#define cpu_has_loongson_cam __ase(MIPS_ASE_LOONGSON_CAM)
-+#endif
-+
-+#ifndef cpu_has_loongson_ext
-+#define cpu_has_loongson_ext __ase(MIPS_ASE_LOONGSON_EXT)
-+#endif
-+
-+#ifndef cpu_has_loongson_ext2
-+#define cpu_has_loongson_ext2 __ase(MIPS_ASE_LOONGSON_EXT2)
-+#endif
-+
- #ifndef cpu_has_mipsmt
- #define cpu_has_mipsmt (cpu_data[0].ases & MIPS_ASE_MIPSMT)
- #endif
---- a/arch/mips/include/asm/cpu.h
-+++ b/arch/mips/include/asm/cpu.h
-@@ -433,5 +433,9 @@ enum cpu_type_enum {
- #define MIPS_ASE_MSA 0x00000100 /* MIPS SIMD Architecture */
- #define MIPS_ASE_DSP3 0x00000200 /* Signal Processing ASE Rev 3*/
- #define MIPS_ASE_MIPS16E2 0x00000400 /* MIPS16e2 */
-+#define MIPS_ASE_LOONGSON_MMI 0x00000800 /* Loongson MultiMedia extensions Instructions */
-+#define MIPS_ASE_LOONGSON_CAM 0x00001000 /* Loongson CAM */
-+#define MIPS_ASE_LOONGSON_EXT 0x00002000 /* Loongson EXTensions */
-+#define MIPS_ASE_LOONGSON_EXT2 0x00004000 /* Loongson EXTensions R2 */
-
- #endif /* _ASM_CPU_H */
---- a/arch/mips/kernel/cpu-probe.c
-+++ b/arch/mips/kernel/cpu-probe.c
-@@ -1478,6 +1478,8 @@ static inline void cpu_probe_legacy(stru
- __cpu_name[cpu] = "ICT Loongson-3";
- set_elf_platform(cpu, "loongson3a");
- set_isa(c, MIPS_CPU_ISA_M64R1);
-+ c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM |
-+ MIPS_ASE_LOONGSON_EXT);
- break;
- case PRID_REV_LOONGSON3B_R1:
- case PRID_REV_LOONGSON3B_R2:
-@@ -1485,6 +1487,8 @@ static inline void cpu_probe_legacy(stru
- __cpu_name[cpu] = "ICT Loongson-3";
- set_elf_platform(cpu, "loongson3b");
- set_isa(c, MIPS_CPU_ISA_M64R1);
-+ c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM |
-+ MIPS_ASE_LOONGSON_EXT);
- break;
- }
-
-@@ -1845,6 +1849,8 @@ static inline void cpu_probe_loongson(st
- decode_configs(c);
- c->options |= MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE;
- c->writecombine = _CACHE_UNCACHED_ACCELERATED;
-+ c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM |
-+ MIPS_ASE_LOONGSON_EXT | MIPS_ASE_LOONGSON_EXT2);
- break;
- default:
- panic("Unknown Loongson Processor ID!");
---- a/arch/mips/kernel/proc.c
-+++ b/arch/mips/kernel/proc.c
-@@ -124,6 +124,10 @@ static int show_cpuinfo(struct seq_file
- if (cpu_has_eva) seq_printf(m, "%s", " eva");
- if (cpu_has_htw) seq_printf(m, "%s", " htw");
- if (cpu_has_xpa) seq_printf(m, "%s", " xpa");
-+ if (cpu_has_loongson_mmi) seq_printf(m, "%s", " loongson-mmi");
-+ if (cpu_has_loongson_cam) seq_printf(m, "%s", " loongson-cam");
-+ if (cpu_has_loongson_ext) seq_printf(m, "%s", " loongson-ext");
-+ if (cpu_has_loongson_ext2) seq_printf(m, "%s", " loongson-ext2");
- seq_printf(m, "\n");
-
- if (cpu_has_mmips) {