From: Juan Antonio Garcia Redondo <juan-antonio.garcia@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: jagarcia@domain.hid, xenomai@xenomai.org
Subject: Re: [Xenomai-help] PIOX irq problems with at91sam9260
Date: Fri, 28 Dec 2007 09:29:07 +0100 [thread overview]
Message-ID: <20071228082907.GA27638@domain.hid> (raw)
In-Reply-To: <18290.52429.871263.495255@domain.hid>
[-- Attachment #1: Type: text/plain, Size: 1729 bytes --]
On 26/12/07 22:51, Gilles Chanteperdrix wrote:
> Juan Antonio Garcia Redondo wrote:
> > I've found a workaround for my problem, but I'm not sure if is the
> > correct solution.
> >
> > First, my test program test_irq.c had an error, after request the irq,
> > it have be enabled; anyway the problem persists because the
> > __ipipe_mach_demux_irq find the irq disabled (gpio->depth = 1).
>
> You should not have to enable irqs, this should be done automatically
> when requesting the irq. Which irq did you have to enable, the gpio irq
> ? Or the multiplexed one ?
I'm using the PIOB_11 as gpio and programming it as input before run the
test_irq.
I have to enable the irq by mean of rt_intr_enable, otherwise the
correspondent bit of IMR (Interrupt Mask Register) is disabled. Moreover
the rt_intr_create documentation says:
Note:
The interrupt source associated to the interrupt descriptor remains
masked upon creation. rt_intr_enable() should be called for the new
interrupt object to unmask it.
Anyway, I would like to know your opinion about my patch. As I said in
my previous mail, althought the irq is enabled, the correspondent
handler is not called because the __ipipe_mach_demux_irq function
(arch/arm/mach-at91rm9200/gpio.c) asks for the depth field of the struct irq_desc.
if (isr & 1) {
if (unlikely(gpio->depth)) {
/*
* The core ARM interrupt
* handler lazily disables IRQs
* so
* another IRQ must be generated
* before it actually gets
* here to be disabled on the
* GPIO controller.
*/
gpio_irq_mask(pin);
}
else
__ipipe_handle_irq(pin, regs);
}
I've attached the patch again because the previous patch had an error.
Regards,
Juan Antonio
[-- Attachment #2: patch_xenomai_wrappers.patch --]
[-- Type: text/x-diff, Size: 1137 bytes --]
#
# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
#
--- xenomai-2.4.0_cpu_siv_0C/include/asm-arm/wrappers.h~patch_xenomai_wrappers
+++ xenomai-2.4.0_cpu_siv_0C/include/asm-arm/wrappers.h
@@ -74,9 +74,14 @@
#define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->disable(irq); 0; })
#define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; })
typedef irq_handler_t rthal_irq_host_handler_t;
-#define rthal_mark_irq_disabled(irq) (rthal_irq_desc_status(irq) |= IRQ_DISABLED)
-#define rthal_mark_irq_enabled(irq) (rthal_irq_desc_status(irq) &= ~IRQ_DISABLED)
-
+#define rthal_mark_irq_disabled(irq) do { \
+ rthal_irq_desc_status(irq) |= IRQ_DISABLED; \
+ rthal_irq_descp(irq)->depth = 1; \
+ } while(0);
+#define rthal_mark_irq_enabled(irq) do { \
+ rthal_irq_desc_status(irq) &= ~IRQ_DISABLED; \
+ rthal_irq_descp(irq)->depth = 0; \
+ } while(0);
static inline void fp_init(union fp_state *state)
{
/* FIXME: This is insufficient. */
next prev parent reply other threads:[~2007-12-28 8:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-19 15:06 [Xenomai-help] PIOX irq problems with at91sam9260 Juan Antonio Garcia Redondo
2007-12-19 16:38 ` Gilles Chanteperdrix
2007-12-21 8:27 ` Juan Antonio Garcia Redondo
2007-12-26 21:51 ` Gilles Chanteperdrix
2007-12-28 8:29 ` Juan Antonio Garcia Redondo [this message]
2007-12-28 10:02 ` Gilles Chanteperdrix
2007-12-28 11:34 ` Juan Antonio Garcia Redondo
2007-12-28 21:29 ` Gilles Chanteperdrix
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071228082907.GA27638@domain.hid \
--to=juan-antonio.garcia@domain.hid \
--cc=gilles.chanteperdrix@xenomai.org \
--cc=jagarcia@domain.hid \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.