Re: O2 RM7000 Issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Sep 17, 2007 at 04:20:28PM -0700, David Daney wrote:

Hi David,

> Ralf Baechle wrote:
> 
> >Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx>
> >
> >diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
> >index f599e79..7ee0cb0 100644
> >--- a/arch/mips/kernel/cpu-probe.c
> >+++ b/arch/mips/kernel/cpu-probe.c
> >@@ -75,6 +75,26 @@ static void r4k_wait_irqoff(void)
> > 	local_irq_enable();
> > }
> > 
> >+/*
> >+ * The RM7000 variant has to handle erratum 38.  The workaround is to not
> >+ * have any pending stores when the WAIT instruction is executed.
> >+ */
> >+static void rm7k_wait_irqoff(void)
> >+{
> >+	local_irq_disable();
> >+	if (!need_resched())
> >+		__asm__(
> >+		"	.set	push		\n"
> >+		"	.set	mips3		\n"
> >+		"	.set	noat		\n"
> >+		"	mfc0	$1, $12		\n"
> >+		"	sync			\n"
> >+		"	mtc0	$1, $12		\n"
> >+		"	wait			\n"
> >+		"	.set	pop		\n");
> >+	local_irq_enable();
> >+}
> >+
> 
> Technically, shouldn't that __asm__ be volatile?

Gcc won't delete this asm because it has no return value that is it will
treat it like a volatile asm.

  Ralf


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux