linux-mips
[Top] [All Lists]

Re: Help getting IP30/Octane fixed?

To: Johannes Dickgreber <tanzy@gmx.de>
Subject: Re: Help getting IP30/Octane fixed?
From: Kumba <kumba@gentoo.org>
Date: Sun, 10 May 2009 14:57:07 -0400
Cc: Linux MIPS List <linux-mips@linux-mips.org>
In-reply-to: <4A0717AA.8060603@gmx.de>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <4A06100F.7020105@gentoo.org> <4A0717AA.8060603@gmx.de>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Thunderbird 2.0.0.21 (Windows/20090302)
Johannes Dickgreber wrote:

This is whats wrong with SMP: from file include/asm/mach-ip30/heart.h

#define HEART_IMR(x)            ((volatile ulong *)0x900000000ff10000 + (8 * 
(x)))

I schould be

#define HEART_IMR(x)            ((volatile ulong *)0x900000000ff10000 + (x))

or it schould be

#define HEART_IMR(x)            ((volatile ulong *) (0x900000000ff10000 + (8 * 
(x))))

The IRQ MASK Register for the different CPUs are side by side.
In your version the factor 8 is used twice. First explicit inside the braces
and second, because of the pointer to ulong implicit done by the
compiler.
I checked it by dissambling the code and my smp-kernel is working if i start
only with one cpu. With 2 cpus the smp-kernel is booting, but the init process
hangs then.

I'll have to test this when I get a new SMP module in. Found a cheap R10K (yuck) on eBay for real cheap that'll suffice. My R12000-300MHz refused to post at all (LED didn't even change to red, but the PROM would process NMI resets, oddly enough).

Ricardo (ricmm on IRC) explained it as this:

<ricmm> the baseline problem is that the secondary CPU's ipi irq is not triggering, the first one works <ricmm> and smp_call_function() is calling an init function on both CPUs with a wait_for_completion flag set <ricmm> but the second CPU will never run the function as the irq is not happening, therefore the flag will remain set
<ricmm> and smp_call_function() will spin waiting for the completion


the revert is not needed anymore, because of code in arch/mips/pci/ops-bridge.c
look for the function emulate_ioc3_cfg

Awesome, that's great to know!


i have done some more work on the older patches and have a working kernel.
if someone wants this patch, i can send it.

I'll take a look at it and see if I can integrate it into what I already have. Do you have it broken out into separate changes for the IOC3 metadriver and for the core IP30 code?


Thanks!

--
Joshua Kinard
Gentoo/MIPS
kumba@gentoo.org

"The past tempts us, the present confuses us, the future frightens us. And our lives slip away, moment by moment, lost in that vast, terrible in-between."

--Emperor Turhan, Centauri Republic

<Prev in Thread] Current Thread [Next in Thread>