All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] MIPS: dsp: Add assembler support for DSP ASEs.
@ 2012-12-15  5:06 Steven J. Hill
  2012-12-16 11:42 ` Jonas Gorski
  0 siblings, 1 reply; 3+ messages in thread
From: Steven J. Hill @ 2012-12-15  5:06 UTC (permalink / raw)
  To: linux-mips; +Cc: Steven J. Hill, ralf

From: "Steven J. Hill" <sjhill@mips.com>

Newer toolchains support the DSP and DSP Rev2 instructions. This patch
performs a check for that support and adds compiler and assembler
flags for only the files that need use those instructions.

Signed-off-by: Steven J. Hill <sjhill@mips.com>
---
 arch/mips/include/asm/mipsregs.h |   53 ++++++++++++++++++++++++++------------
 arch/mips/kernel/Makefile        |   27 +++++++++++++++++++
 2 files changed, 63 insertions(+), 17 deletions(-)

diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
index a9ed612..0960d68 100644
--- a/arch/mips/include/asm/mipsregs.h
+++ b/arch/mips/include/asm/mipsregs.h
@@ -1155,36 +1155,26 @@ do {									\
         : "=r" (__res));                                        \
         __res;})
 
+#ifdef HAVE_AS_DSP
 #define rddsp(mask)							\
 ({									\
-	unsigned int __res;						\
+	unsigned int __dspctl;						\
 									\
 	__asm__ __volatile__(						\
-	"	.set	push				\n"		\
-	"	.set	noat				\n"		\
-	"	# rddsp $1, %x1				\n"		\
-	"	.word	0x7c000cb8 | (%x1 << 16)	\n"		\
-	"	move	%0, $1				\n"		\
-	"	.set	pop				\n"		\
-	: "=r" (__res)							\
+	"	rddsp	%0, %x1					\n"	\
+	: "=r" (__dspctl)						\
 	: "i" (mask));							\
-	__res;								\
+	__dspctl;							\
 })
 
 #define wrdsp(val, mask)						\
 do {									\
 	__asm__ __volatile__(						\
-	"	.set	push					\n"	\
-	"	.set	noat					\n"	\
-	"	move	$1, %0					\n"	\
-	"	# wrdsp $1, %x1					\n"	\
-	"	.word	0x7c2004f8 | (%x1 << 11)		\n"	\
-	"	.set	pop					\n"	\
-        :								\
+	"	wrdsp	%0, %x1					\n"	\
+	:								\
 	: "r" (val), "i" (mask));					\
 } while (0)
 
-#if 0	/* Need DSP ASE capable assembler ... */
 #define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;})
 #define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;})
 #define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;})
@@ -1207,6 +1197,35 @@ do {									\
 
 #else
 
+#define rddsp(mask)							\
+({									\
+	unsigned int __res;						\
+									\
+	__asm__ __volatile__(						\
+	"	.set	push				\n"		\
+	"	.set	noat				\n"		\
+	"	# rddsp $1, %x1				\n"		\
+	"	.word	0x7c000cb8 | (%x1 << 16)	\n"		\
+	"	move	%0, $1				\n"		\
+	"	.set	pop				\n"		\
+	: "=r" (__res)							\
+	: "i" (mask));							\
+	__res;								\
+})
+
+#define wrdsp(val, mask)						\
+do {									\
+	__asm__ __volatile__(						\
+	"	.set	push					\n"	\
+	"	.set	noat					\n"	\
+	"	move	$1, %0					\n"	\
+	"	# wrdsp $1, %x1					\n"	\
+	"	.word	0x7c2004f8 | (%x1 << 11)		\n"	\
+	"	.set	pop					\n"	\
+        :								\
+	: "r" (val), "i" (mask));					\
+} while (0)
+
 #define mfhi0()								\
 ({									\
 	unsigned long __treg;						\
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index 33a96a9..c3c8cba 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -98,4 +98,31 @@ obj-$(CONFIG_HW_PERF_EVENTS)	+= perf_event_mipsxx.o
 
 obj-$(CONFIG_JUMP_LABEL)	+= jump_label.o
 
+#
+# DSP ASE supported for MIPS32 or MIPS64 Release 2 cores only
+#
+ifeq ($(CONFIG_CPU_MIPSR2), y)
+CFLAGS_DSP 			= -DHAVE_AS_DSP
+
+#
+# Check if assembler supports DSP ASE
+#
+ifeq ($(call cc-option-yn,-mdsp), y)
+CFLAGS_DSP			+= -mdsp
+endif
+
+#
+# Check if assembler supports DSP ASE Rev2
+#
+ifeq ($(call cc-option-yn,-mdspr2), y)
+CFLAGS_DSP			+= -mdspr2
+endif
+
+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)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] MIPS: dsp: Add assembler support for DSP ASEs.
  2012-12-15  5:06 [PATCH v2] MIPS: dsp: Add assembler support for DSP ASEs Steven J. Hill
@ 2012-12-16 11:42 ` Jonas Gorski
  2012-12-17  9:46   ` Florian Fainelli
  0 siblings, 1 reply; 3+ messages in thread
From: Jonas Gorski @ 2012-12-16 11:42 UTC (permalink / raw)
  To: Steven J. Hill; +Cc: linux-mips, ralf

On 15 December 2012 06:06, Steven J. Hill <sjhill@mips.com> wrote:
> (snip)
> diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
> index 33a96a9..c3c8cba 100644
> --- a/arch/mips/kernel/Makefile
> +++ b/arch/mips/kernel/Makefile
> @@ -98,4 +98,31 @@ obj-$(CONFIG_HW_PERF_EVENTS) += perf_event_mipsxx.o
>
>  obj-$(CONFIG_JUMP_LABEL)       += jump_label.o
>
> +#
> +# DSP ASE supported for MIPS32 or MIPS64 Release 2 cores only
> +#
> +ifeq ($(CONFIG_CPU_MIPSR2), y)
> +CFLAGS_DSP                     = -DHAVE_AS_DSP

24K (non-E) is MIPS32r2, but not not implement any DSP ASEs, is this a
problem here?


Jonas

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] MIPS: dsp: Add assembler support for DSP ASEs.
  2012-12-16 11:42 ` Jonas Gorski
@ 2012-12-17  9:46   ` Florian Fainelli
  0 siblings, 0 replies; 3+ messages in thread
From: Florian Fainelli @ 2012-12-17  9:46 UTC (permalink / raw)
  To: Jonas Gorski; +Cc: Steven J. Hill, linux-mips, ralf

Le 12/16/12 12:42, Jonas Gorski a écrit :
> On 15 December 2012 06:06, Steven J. Hill <sjhill@mips.com> wrote:
>> (snip)
>> diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
>> index 33a96a9..c3c8cba 100644
>> --- a/arch/mips/kernel/Makefile
>> +++ b/arch/mips/kernel/Makefile
>> @@ -98,4 +98,31 @@ obj-$(CONFIG_HW_PERF_EVENTS) += perf_event_mipsxx.o
>>
>>   obj-$(CONFIG_JUMP_LABEL)       += jump_label.o
>>
>> +#
>> +# DSP ASE supported for MIPS32 or MIPS64 Release 2 cores only
>> +#
>> +ifeq ($(CONFIG_CPU_MIPSR2), y)
>> +CFLAGS_DSP                     = -DHAVE_AS_DSP
>
> 24K (non-E) is MIPS32r2, but not not implement any DSP ASEs, is this a
> problem here?

I do not think it is, all code-paths making use of the rddsp() wrdsp() 
macros are checking cpu_has_dsp() so we should be pretty safe here. It 
might be worth adding this comment to the Makefile though.
--
Florian

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-12-17  9:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-15  5:06 [PATCH v2] MIPS: dsp: Add assembler support for DSP ASEs Steven J. Hill
2012-12-16 11:42 ` Jonas Gorski
2012-12-17  9:46   ` Florian Fainelli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.