Patchwork MIPS: Alchemy: db1200: remove custom wait implementation

login
register
mail settings
Submitter Manuel Lauss
Date 2010-04-03 03:04:03
Message ID <1270307223-3825-1-git-send-email-manuel.lauss@gmail.com>
Download mbox | patch
Permalink /patch/1092/
State Accepted
Delegated to: Ralf Baechle
Headers show

Comments

Manuel Lauss - 2010-04-03 03:04:03
While playing with the out-of-tree MAE driver module, the system
would panic after a while in the db1200 custom wait code after
wakeup due to a clobbered k0 register being used as target address
of a store op.

Remove the custom wait implementation and revert back to the
Alchemy-recommended implementation already set as default.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
---
I've played a few hours worth of video from a SD card now without
a hitch; usually the panic would occur after ~10 minutes.

Please add this to the 2.6.34 queue, Thanks!

 arch/mips/alchemy/devboards/db1200/setup.c |   40 ----------------------------
 1 files changed, 0 insertions(+), 40 deletions(-)
Ralf Baechle - 2010-04-07 03:04:56
On Sat, Apr 03, 2010 at 05:07:03PM +0200, Manuel Lauss wrote:

> While playing with the out-of-tree MAE driver module, the system
> would panic after a while in the db1200 custom wait code after
> wakeup due to a clobbered k0 register being used as target address
> of a store op.
> 
> Remove the custom wait implementation and revert back to the
> Alchemy-recommended implementation already set as default.
> 
> Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
> ---
> I've played a few hours worth of video from a SD card now without
> a hitch; usually the panic would occur after ~10 minutes.
> 
> Please add this to the 2.6.34 queue, Thanks!

Yes, this use of k0 was definately looking fishy - and I'm not talking
about the kind of fish in a bouillabaisse ;-)

Applied.  Thanks!

  Ralf

Patch

diff --git a/arch/mips/alchemy/devboards/db1200/setup.c b/arch/mips/alchemy/devboards/db1200/setup.c
index 379536e..be7e92e 100644
--- a/arch/mips/alchemy/devboards/db1200/setup.c
+++ b/arch/mips/alchemy/devboards/db1200/setup.c
@@ -60,43 +60,6 @@  void __init board_setup(void)
 	wmb();
 }
 
-/* use the hexleds to count the number of times the cpu has entered
- * wait, the dots to indicate whether the CPU is currently idle or
- * active (dots off = sleeping, dots on = working) for cases where
- * the number doesn't change for a long(er) period of time.
- */
-static void db1200_wait(void)
-{
-	__asm__("	.set	push			\n"
-		"	.set	mips3			\n"
-		"	.set	noreorder		\n"
-		"	cache	0x14, 0(%0)		\n"
-		"	cache	0x14, 32(%0)		\n"
-		"	cache	0x14, 64(%0)		\n"
-		/* dots off: we're about to call wait */
-		"	lui	$26, 0xb980		\n"
-		"	ori	$27, $0, 3		\n"
-		"	sb	$27, 0x18($26)		\n"
-		"	sync				\n"
-		"	nop				\n"
-		"	wait				\n"
-		"	nop				\n"
-		"	nop				\n"
-		"	nop				\n"
-		"	nop				\n"
-		"	nop				\n"
-		/* dots on: there's work to do, increment cntr */
-		"	lui	$26, 0xb980		\n"
-		"	sb	$0, 0x18($26)		\n"
-		"	lui	$26, 0xb9c0		\n"
-		"	lb	$27, 0($26)		\n"
-		"	addiu	$27, $27, 1		\n"
-		"	sb	$27, 0($26)		\n"
-		"	sync				\n"
-		"	.set	pop			\n"
-		: : "r" (db1200_wait));
-}
-
 static int __init db1200_arch_init(void)
 {
 	/* GPIO7 is low-level triggered CPLD cascade */
@@ -110,9 +73,6 @@  static int __init db1200_arch_init(void)
 	irq_to_desc(DB1200_SD0_INSERT_INT)->status |= IRQ_NOAUTOEN;
 	irq_to_desc(DB1200_SD0_EJECT_INT)->status |= IRQ_NOAUTOEN;
 
-	if (cpu_wait)
-		cpu_wait = db1200_wait;
-
 	return 0;
 }
 arch_initcall(db1200_arch_init);