All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS
       [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
@ 2010-04-10 12:04 ` Wu Zhangjin
  2010-04-29 21:45   ` Ralf Baechle
  2010-04-10 12:05 ` [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils Wu Zhangjin
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Wu Zhangjin @ 2010-04-10 12:04 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips

From: Wu Zhangjin <wuzhangjin@gmail.com>

As the Loongson2F User Manual[2,3] shows, the old Loongson2F series(2F01/02)
have the NOP & JUMP issues, need the related workarounds in the kernel and
binutils, but the new Loongson2F series(2F03 and laters) have no such issues,
so, none of the workarounds is needed.

Currently, the workaround[1] with the -mfix-loongson2f-nop,
-mfix-loongson2f-jump options have been added into the latest binutils(in the
cvs repository), it's time to add the workarounds in the kernel.

The workarounds have no big side effect on the system, but may decrease the
performance, therefore, this patch adds a new CPU_LOONGSON2F_WORKAROUNDS config
option to allow the users to only enable it for the necessary processor series.

[1] "Fixups of Loongson2F" patch for binutils(actually for gas)
http://sourceware.org/ml/binutils/2009-11/msg00387.html
[2] Chapter 15 of "Loongson2F User Manual"(Chinese Version)
http://www.loongson.cn/uploadfile/file/200808211
[3] English Version of the above chapter 15
http://groups.google.com.hk/group/loongson-dev/msg/e0d2e220958f10a6?dmode=source

Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
---
 arch/mips/Kconfig |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 29e8692..f2ead53 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1305,6 +1305,32 @@ config CPU_CAVIUM_OCTEON
 
 endchoice
 
+if CPU_LOONGSON2F
+config CPU_NOP_WORKAROUNDS
+	bool
+
+config CPU_JUMP_WORKAROUNDS
+	bool
+
+config CPU_LOONGSON2F_WORKAROUNDS
+	bool "Loongson 2F Workarounds"
+	default y
+	select CPU_NOP_WORKAROUNDS
+	select CPU_JUMP_WORKAROUNDS
+	help
+	  The Loongson 2F01/02 processor has the NOP & JUMP issues, needs the
+	  related workarounds, without workarounds, the system will hang
+	  unexpectedly. to get more information about them, please refer to the
+	  -mfix-loongson2f-nop and -mfix-loongson2f-jump options of gas.
+
+	  For Loongson 2F03 and the later batches have fixed the issues, none
+	  of these workarounds needed for them. These workarounds have no big
+	  side effect on them but may decrease the performance of the system,
+	  therefore, it's better to disable this config for them.
+
+	  If unsure, please say Y.
+endif # CPU_LOONGSON2F
+
 config SYS_SUPPORTS_ZBOOT
 	bool
 	select HAVE_KERNEL_GZIP
-- 
1.7.0.1

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

* [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils
       [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
  2010-04-10 12:04 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
@ 2010-04-10 12:05 ` Wu Zhangjin
  2010-04-29 21:58   ` Ralf Baechle
  2010-04-10 12:05 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Wu Zhangjin @ 2010-04-10 12:05 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Wu Zhangjin, Zhang Le, linux-mips

From: Wu Zhangjin <wuzhangjin@gmail.com>

Changes from old revision:
  o Clear the errror information as suggesttion from Zhang Le.

  o Incorporated with the feedbacks from Ralf and used the options
  introduced from "Loongson: Add CPU_LOONGSON2F_WORKAROUNDS".

As the "Fixups of Loongson2F" patch[1] to binutils have been applied
into binutils 2.20.1. It's time to enable the options provided by the
patch to compile the kernel.

Without these fixups, the system will hang unexpectedly for the bug of
processor.

To learn more about these fixups, please refer to the following
references.

[1] "Fixups of Loongson2F" patch for binutils(actually for gas)
http://sourceware.org/ml/binutils/2009-11/msg00387.html
[2] Chapter 15 of "Loongson2F User Manual"(Chinese Version)
http://www.loongson.cn/uploadfile/file/200808211
[3] English Version of the above chapter 15
http://groups.google.com.hk/group/loongson-dev/msg/e0d2e220958f10a6?dmode=source

Signed-off-by: Zhang Le <r0bertz@gentoo.org>
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
---
 arch/mips/Makefile |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 2f2eac2..0b9c01a 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -136,6 +136,19 @@ cflags-$(CONFIG_CPU_LOONGSON2E) += \
 	$(call cc-option,-march=loongson2e,-march=r4600)
 cflags-$(CONFIG_CPU_LOONGSON2F) += \
 	$(call cc-option,-march=loongson2f,-march=r4600)
+# enable the workarounds for loongson2f
+ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS
+  ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),)
+    $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop)
+  else
+    cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-nop
+  endif
+  ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-jump,),)
+    $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-jump)
+  else
+    cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump
+  endif
+endif
 
 cflags-$(CONFIG_CPU_MIPS32_R1)	+= $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
 			-Wa,-mips32 -Wa,--trap
-- 
1.7.0.1

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

* [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS
       [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
  2010-04-10 12:04 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
  2010-04-10 12:05 ` [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils Wu Zhangjin
@ 2010-04-10 12:05 ` Wu Zhangjin
  2010-04-29 21:32   ` Ralf Baechle
  2010-04-10 12:07 ` [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.) Wu Zhangjin
  2010-04-10 12:07 ` [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump Wu Zhangjin
  4 siblings, 1 reply; 10+ messages in thread
From: Wu Zhangjin @ 2010-04-10 12:05 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Wu Zhangjin, linux-mips

From: Wu Zhangjin <wuzhangjin@gmail.com>

As the Loongson2F User Manual[2,3] shows, the old Loongson2F series(2F01/02)
have the NOP & JUMP issues, need the related workarounds in the kernel and
binutils, but the new Loongson2F series(2F03 and laters) have no such issues,
so, none of the workarounds is needed.

Currently, the workaround[1] with the -mfix-loongson2f-nop,
-mfix-loongson2f-jump options have been added into the latest binutils(in the
cvs repository), it's time to add the workarounds in the kernel.

The workarounds have no big side effect on the system, but may decrease the
performance, therefore, this patch adds a new CPU_LOONGSON2F_WORKAROUNDS config
option to allow the users to only enable it for the necessary processor series.

[1] "Fixups of Loongson2F" patch for binutils(actually for gas)
http://sourceware.org/ml/binutils/2009-11/msg00387.html
[2] Chapter 15 of "Loongson2F User Manual"(Chinese Version)
http://www.loongson.cn/uploadfile/file/200808211
[3] English Version of the above chapter 15
http://groups.google.com.hk/group/loongson-dev/msg/e0d2e220958f10a6?dmode=source

Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
---
 arch/mips/Kconfig |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 29e8692..f2ead53 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1305,6 +1305,32 @@ config CPU_CAVIUM_OCTEON
 
 endchoice
 
+if CPU_LOONGSON2F
+config CPU_NOP_WORKAROUNDS
+	bool
+
+config CPU_JUMP_WORKAROUNDS
+	bool
+
+config CPU_LOONGSON2F_WORKAROUNDS
+	bool "Loongson 2F Workarounds"
+	default y
+	select CPU_NOP_WORKAROUNDS
+	select CPU_JUMP_WORKAROUNDS
+	help
+	  The Loongson 2F01/02 processor has the NOP & JUMP issues, needs the
+	  related workarounds, without workarounds, the system will hang
+	  unexpectedly. to get more information about them, please refer to the
+	  -mfix-loongson2f-nop and -mfix-loongson2f-jump options of gas.
+
+	  For Loongson 2F03 and the later batches have fixed the issues, none
+	  of these workarounds needed for them. These workarounds have no big
+	  side effect on them but may decrease the performance of the system,
+	  therefore, it's better to disable this config for them.
+
+	  If unsure, please say Y.
+endif # CPU_LOONGSON2F
+
 config SYS_SUPPORTS_ZBOOT
 	bool
 	select HAVE_KERNEL_GZIP
-- 
1.7.0.1

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

* [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.)
       [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
                   ` (2 preceding siblings ...)
  2010-04-10 12:05 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
@ 2010-04-10 12:07 ` Wu Zhangjin
  2010-04-29 22:12   ` Ralf Baechle
  2010-04-10 12:07 ` [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump Wu Zhangjin
  4 siblings, 1 reply; 10+ messages in thread
From: Wu Zhangjin @ 2010-04-10 12:07 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Wu Zhangjin, linux-mips

From: Wu Zhangjin <wuzhangjin@gmail.com>

This patch uses the new option CONFIG_CPU_JUMP_WORKAROUNDS introduced
from "Loongson: Add CPU_LOONGSON2F_WORKAROUNDS" to enable the
workarounds for the necessary loongson series(2F01/02).

Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
---
 arch/mips/include/asm/stackframe.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h
index c841912..58730c5 100644
--- a/arch/mips/include/asm/stackframe.h
+++ b/arch/mips/include/asm/stackframe.h
@@ -121,7 +121,7 @@
 		.endm
 #else
 		.macro	get_saved_sp	/* Uniprocessor variation */
-#ifdef CONFIG_CPU_LOONGSON2F
+#ifdef CONFIG_CPU_JUMP_WORKAROUNDS
 		/*
 		 * Clear BTB (branch target buffer), forbid RAS (return address
 		 * stack) to workaround the Out-of-order Issue in Loongson2F
-- 
1.7.0.1

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

* [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump
       [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
                   ` (3 preceding siblings ...)
  2010-04-10 12:07 ` [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.) Wu Zhangjin
@ 2010-04-10 12:07 ` Wu Zhangjin
  2010-04-29 22:24   ` Ralf Baechle
  4 siblings, 1 reply; 10+ messages in thread
From: Wu Zhangjin @ 2010-04-10 12:07 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Wu Zhangjin, linux-mips

From: Wu Zhangjin <wuzhangjin@gmail.com>

Changes from old revisions:

  o Incorporated with the feedbacks from Ralf Baechle and used the
  option CONFIG_CPU_JUMP_WORKAROUNDS introduced by "Loongson: Add
  CPU_LOONGSON2F_WORKAROUNDS".

The -mfix-loongson2f-jump option provided by the latest binutils(in the cvs
repository) have fixed the Out-of-order Issue of Loongson-2F described in
Chapter 15 of "Loongson2F User Manual"[1,2], but introduced some problems.

The option changes all of the jumping target to "addr & 0xcfffffff" through the
at($1) register, but for the REBOOT address of loongson-2F: 0xbfc00000, this is
totally wrong, so, this patch try to avoid the problem via telling the
assembler not to use at($1) register.

[1] Loongson2F User Manual(Chinese Version)
http://www.loongson.cn/uploadfile/file/200808211
[2] English Version of Chapter 15:
http://groups.google.com.hk/group/loongson-dev/msg/e0d2e220958f10a6?dmode=source

Reported-and-tested-by: Liu Shiwei <liushiwei@gmail.com>
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
---
 arch/mips/loongson/common/reset.c |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/arch/mips/loongson/common/reset.c b/arch/mips/loongson/common/reset.c
index 4bd9c18..9e10d62 100644
--- a/arch/mips/loongson/common/reset.c
+++ b/arch/mips/loongson/common/reset.c
@@ -16,13 +16,31 @@
 
 #include <loongson.h>
 
+static inline void loongson_reboot(void)
+{
+#ifndef CONFIG_CPU_JUMP_WORKAROUNDS
+	((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) ();
+#else
+	void (*func)(void);
+
+	func = (void *)ioremap_nocache(LOONGSON_BOOT_BASE, 4);
+
+	__asm__ __volatile__(
+	"       .set    noat                                            \n"
+	"       jr      %[func]                                         \n"
+	"       .set    at                                              \n"
+	: /* No outputs */
+	: [func] "r" (func));
+#endif
+}
+
 static void loongson_restart(char *command)
 {
 	/* do preparation for reboot */
 	mach_prepare_reboot();
 
 	/* reboot via jumping to boot base address */
-	((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) ();
+	loongson_reboot();
 }
 
 static void loongson_poweroff(void)
-- 
1.7.0.1

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

* Re: [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS
  2010-04-10 12:05 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
@ 2010-04-29 21:32   ` Ralf Baechle
  0 siblings, 0 replies; 10+ messages in thread
From: Ralf Baechle @ 2010-04-29 21:32 UTC (permalink / raw)
  To: Wu Zhangjin; +Cc: linux-mips

On Sat, Apr 10, 2010 at 08:05:20PM +0800, Wu Zhangjin wrote:

This one seems to be a duplicate of another patch 1/4 which was sent out
a few seconds earlier, so I'll drop it.

  Ralf

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

* Re: [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS
  2010-04-10 12:04 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
@ 2010-04-29 21:45   ` Ralf Baechle
  0 siblings, 0 replies; 10+ messages in thread
From: Ralf Baechle @ 2010-04-29 21:45 UTC (permalink / raw)
  To: Wu Zhangjin; +Cc: linux-mips

On Sat, Apr 10, 2010 at 08:04:42PM +0800, Wu Zhangjin wrote:

Applied after linguistically fixing up the Kconfig help tests.

Thanks!

  Ralf

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

* Re: [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils
  2010-04-10 12:05 ` [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils Wu Zhangjin
@ 2010-04-29 21:58   ` Ralf Baechle
  0 siblings, 0 replies; 10+ messages in thread
From: Ralf Baechle @ 2010-04-29 21:58 UTC (permalink / raw)
  To: Wu Zhangjin; +Cc: Zhang Le, linux-mips

On Sat, Apr 10, 2010 at 08:05:01PM +0800, Wu Zhangjin wrote:

Thanks Wu, applied!

  Ralf

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

* Re: [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.)
  2010-04-10 12:07 ` [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.) Wu Zhangjin
@ 2010-04-29 22:12   ` Ralf Baechle
  0 siblings, 0 replies; 10+ messages in thread
From: Ralf Baechle @ 2010-04-29 22:12 UTC (permalink / raw)
  To: Wu Zhangjin; +Cc: linux-mips

Applied.  Thanks Wu!

  Ralf

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

* Re: [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump
  2010-04-10 12:07 ` [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump Wu Zhangjin
@ 2010-04-29 22:24   ` Ralf Baechle
  0 siblings, 0 replies; 10+ messages in thread
From: Ralf Baechle @ 2010-04-29 22:24 UTC (permalink / raw)
  To: Wu Zhangjin; +Cc: linux-mips

Applied.  Thanks, Wu!

  Ralf

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

end of thread, other threads:[~2010-04-29 22:24 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1270882402.git.wuzhangjin@gmail.com>
2010-04-10 12:04 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
2010-04-29 21:45   ` Ralf Baechle
2010-04-10 12:05 ` [PATCH v5 2/4] Loongson-2F: Enable fixups of the latest binutils Wu Zhangjin
2010-04-29 21:58   ` Ralf Baechle
2010-04-10 12:05 ` [PATCH v5 1/4] Loongson: Add CPU_LOONGSON2F_WORKAROUNDS Wu Zhangjin
2010-04-29 21:32   ` Ralf Baechle
2010-04-10 12:07 ` [PATCH v5 3/4] Loongson-2F: Flush the branch target history in BTB and RAS (cont.) Wu Zhangjin
2010-04-29 22:12   ` Ralf Baechle
2010-04-10 12:07 ` [PATCH v5 4/4] Loongson-2F: Fixup of problems introduced by -mfix-loongson2f-jump Wu Zhangjin
2010-04-29 22:24   ` Ralf Baechle

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.