Thanks!  I'll try your patch and report if I still have trouble.

I've attached my patch for PPC405.


Philippe Gerum wrote:
Steven A. Falco wrote:
I have built a 2.6.23-rc7 kernel (from Denx git) with Xenomai 2.4-rc3. Architecture is powerpc, processor is a 405GP.

I had to make some additions to arch/powerpc/kernel/head_40x.S, and I
can submit a patch if someone tells me where to post it.

Here would be nice, or to the Adeos list, indifferently - I would pick
it from both anyway.

However, while the kernel boots and runs, the xenomai user apps do not
work correctly.  Specifically, when running cyclictest, I get the following:

This patch should fix this issue.

diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index eeb38e2..5a38086 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -48,7 +48,7 @@ struct uic {
        int index;
        int dcrbase;

-       spinlock_t lock;
+       ipipe_spinlock_t lock;

        /* The remapper for this UIC */
        struct irq_host *irqhost;
How do I debug this?  I have done a little kernel hacking, but I am a
noob when it comes to Xenomai...

Well, actually, it's shame on me. I did not notice that the universal
interrupt controller code was missing some bits in post-2.6.21 I-pipe

--- linux-2.6-denx.xenomai/arch/powerpc/kernel/head_40x.S	2007-09-28 13:40:46.000000000 -0400
+++ linux-2.6-denx/arch/powerpc/kernel/head_40x.S	2007-10-24 14:02:23.000000000 -0400
@@ -227,6 +227,12 @@
 	EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, NOCOPY, transfer_to_handler_full, \
+#define EXC_XFER_IPIPE(n, hdlr)		\
+	EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
+			  __ipipe_ret_from_except)
+#endif /* CONFIG_IPIPE */
 #define EXC_XFER_LITE(n, hdlr)		\
 	EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
@@ -395,7 +401,11 @@
 	EXC_XFER_EE_LITE(0x400, handle_page_fault)
 /* 0x0500 - External Interrupt Exception */
+	EXCEPTION(0x0500, HardwareInterrupt, __ipipe_grab_irq, EXC_XFER_IPIPE)
+#else /* !CONFIG_IPIPE */
 	EXCEPTION(0x0500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
+#endif /* CONFIG_IPIPE */
 /* 0x0600 - Alignment Exception */
 	START_EXCEPTION(0x0600, Alignment)
@@ -433,7 +443,11 @@
 	mtspr	SPRN_TSR,r0		/* Clear the PIT exception */
+	EXC_XFER_IPIPE(0x1000, __ipipe_grab_timer)
+#else /* !CONFIG_IPIPE */
 	EXC_XFER_LITE(0x1000, timer_interrupt)
+#endif /* CONFIG_IPIPE */
 #if 0
 /* NOTE:
Xenomai-core mailing list

Reply via email to