]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
MIPS: Cleanup DSP ASE detection
authorPaul Burton <paul.burton@mips.com>
Mon, 15 Oct 2018 18:26:12 +0000 (18:26 +0000)
committerPaul Burton <paul.burton@mips.com>
Tue, 16 Oct 2018 22:30:21 +0000 (15:30 -0700)
Currently we hardcode a list of files for which we specify that the
toolchain has DSP ASE support when building for MIPSr2 only. This has a
number of problems:

  1) It doesn't actually ensure that the toolchain supports the DSP ASE
     at all.

  2) It's fragile if we try to use DSP ASE macros in other files.

  3) It makes no provision for MIPSr6 & later systems which also support
     the DSP ASE & end up using the .word directive implementation of
     the DSP macros.

Fix this by detecting assembler support for the DSP ASE globally, not
just for a small set of files, and not just for MIPSr2. This now exposes
use of toolchain DSP support to kernel builds targeting MIPSr1 and
older, so we add .set MIPS_ISA_LEVEL directives prior to all .set dsp
directives in order to prevent the assembler from complaining that the
DSP ASE is only supported with MIPSr2 & higher.

Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/20901/
Cc: linux-mips@linux-mips.org
arch/mips/Makefile
arch/mips/include/asm/mipsregs.h
arch/mips/kernel/Makefile

index 053e1c314f9ee586ae77cd8e4ae0eadb6432ef1f..e9ead5fe04051b2cd8d39c78221f3d1fec41d30c 100644 (file)
@@ -231,6 +231,8 @@ toolchain-xpa                               := $(call cc-option-yn,$(xpa-cflags-y) -mxpa)
 cflags-$(toolchain-xpa)                        += -DTOOLCHAIN_SUPPORTS_XPA
 toolchain-crc                          := $(call cc-option-yn,$(mips-cflags) -Wa$(comma)-mcrc)
 cflags-$(toolchain-crc)                        += -DTOOLCHAIN_SUPPORTS_CRC
+toolchain-dsp                          := $(call cc-option-yn,$(mips-cflags) -Wa$(comma)-mdsp)
+cflags-$(toolchain-dsp)                        += -DTOOLCHAIN_SUPPORTS_DSP
 
 #
 # Firmware support
index 01df9ad62fb83d3b8e50006b342a6f182f6fc862..341a02c929853ac13d0fe90405b30514a085ed3b 100644 (file)
@@ -2287,13 +2287,14 @@ do {                                                                    \
        _write_32bit_cp1_register(dest, val, )
 #endif
 
-#ifdef HAVE_AS_DSP
+#ifdef TOOLCHAIN_SUPPORTS_DSP
 #define rddsp(mask)                                                    \
 ({                                                                     \
        unsigned int __dspctl;                                          \
                                                                        \
        __asm__ __volatile__(                                           \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       rddsp   %0, %x1                                 \n"     \
        "       .set pop                                        \n"     \
@@ -2306,6 +2307,7 @@ do {                                                                      \
 do {                                                                   \
        __asm__ __volatile__(                                           \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       wrdsp   %0, %x1                                 \n"     \
        "       .set pop                                        \n"     \
@@ -2318,6 +2320,7 @@ do {                                                                      \
        long mflo0;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mflo %0, $ac0                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2330,6 +2333,7 @@ do {                                                                      \
        long mflo1;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mflo %0, $ac1                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2342,6 +2346,7 @@ do {                                                                      \
        long mflo2;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mflo %0, $ac2                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2354,6 +2359,7 @@ do {                                                                      \
        long mflo3;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mflo %0, $ac3                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2366,6 +2372,7 @@ do {                                                                      \
        long mfhi0;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mfhi %0, $ac0                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2378,6 +2385,7 @@ do {                                                                      \
        long mfhi1;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mfhi %0, $ac1                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2390,6 +2398,7 @@ do {                                                                      \
        long mfhi2;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mfhi %0, $ac2                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2402,6 +2411,7 @@ do {                                                                      \
        long mfhi3;                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mfhi %0, $ac3                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2414,6 +2424,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mtlo %0, $ac0                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2425,6 +2436,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mtlo %0, $ac1                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2436,6 +2448,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mtlo %0, $ac2                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2447,6 +2460,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mtlo %0, $ac3                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2458,6 +2472,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mthi %0, $ac0                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2469,6 +2484,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mthi %0, $ac1                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2480,6 +2496,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mthi %0, $ac2                                   \n"     \
        "       .set pop                                        \n"     \
@@ -2491,6 +2508,7 @@ do {                                                                      \
 ({                                                                     \
        __asm__(                                                        \
        "       .set push                                       \n"     \
+       "       .set " MIPS_ISA_LEVEL "                         \n"     \
        "       .set dsp                                        \n"     \
        "       mthi %0, $ac3                                   \n"     \
        "       .set pop                                        \n"     \
index f10e1e15e1c6ae4acda4667caa274f82e7451011..210c2802cf4df6320ea984978a696e2377d518fa 100644 (file)
@@ -113,22 +113,4 @@ obj-$(CONFIG_MIPS_CPC)             += mips-cpc.o
 obj-$(CONFIG_CPU_PM)           += pm.o
 obj-$(CONFIG_MIPS_CPS_PM)      += pm-cps.o
 
-#
-# DSP ASE supported for MIPS32 or MIPS64 Release 2 cores only. It is not
-# safe to unconditionnaly use the assembler -mdsp / -mdspr2 switches
-# here because the compiler may use DSP ASE instructions (such as lwx) in
-# code paths where we cannot check that the CPU we are running on supports it.
-# Proper abstraction using HAVE_AS_DSP and macros is done in
-# arch/mips/include/asm/mipsregs.h.
-#
-ifeq ($(CONFIG_CPU_MIPSR2), y)
-CFLAGS_DSP                     = -DHAVE_AS_DSP
-
-CFLAGS_signal.o                        = $(CFLAGS_DSP)
-CFLAGS_signal32.o              = $(CFLAGS_DSP)
-CFLAGS_process.o               = $(CFLAGS_DSP)
-CFLAGS_branch.o                        = $(CFLAGS_DSP)
-CFLAGS_ptrace.o                        = $(CFLAGS_DSP)
-endif
-
 CPPFLAGS_vmlinux.lds           := $(KBUILD_CFLAGS)