From: Steve Rossi <srossi@labs.mot.com>
To: Dan Malek <dan@embeddededge.com>
Cc: Embedded Linux PPC List <linuxppc-embedded@lists.linuxppc.org>
Subject: Re: high priority interrupts disabled - problem found
Date: Thu, 13 Dec 2001 09:02:34 -0600 [thread overview]
Message-ID: <3C18C309.9D234D7F@labs.mot.com> (raw)
In-Reply-To: 3C18336D.7030706@embeddededge.com
Dan Malek wrote:
> We should mask all lower priority interrupts, and the challenge is keeping
> the proper nesting of the masks so the nested interrupts can be "unwound"
> properly ...
Thanks for your followup Dan. I've got a rather straightforward "dumb" approach
to fixing this problem - see the patch below. The disclaimer - I'm a hardware
guy
trying to do software, so there might be a much more elegant solution. The idea
here is that the ppc_cached_irq_mask is maintained as is, but in addition to
masking
the interrupt being serviced, all lower priority interrupts are also masked.
This is un-done
in the unmask function, where ppc_cached_irq_mask is also used to ensure we're
not
un-masking interrupts that were masked prior to the call to mask_and_ack. This
doesn't
affect the nesting of interrupts. I might be completely missing something here,
so any comments?
I've tested this and it seems to work fine - and it even fixes my problem!
Steve
--- ppc8xx_pic.c.orig Thu Dec 13 08:35:02 2001
+++ ppc8xx_pic.c Thu Dec 13 08:39:45 2001
@@ -20,6 +20,24 @@
* but they are overkill for us.
*/
+static unsigned int ppc_irq_priority_mask[NR_IRQS] = { 0x0,
+ 0x80000000,
+ 0xC0000000,
+ 0xE0000000,
+ 0xF0000000,
+ 0xF8000000,
+ 0xFC000000,
+ 0xFE000000,
+ 0xFF000000,
+ 0xFF800000,
+ 0xFFC00000,
+ 0xFFE00000,
+ 0xFFF00000,
+ 0xFFF80000,
+ 0xFFFC0000,
+ 0xFFFE0000
+ };
+
static void m8xx_mask_irq(unsigned int irq_nr)
{
int bit, word;
@@ -41,7 +59,8 @@
ppc_cached_irq_mask[word] |= (1 << (31-bit));
((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask =
- ppc_cached_irq_mask[word];
+ ppc_cached_irq_mask[word] |
+ (~ppc_irq_priority_mask[bit] &
ppc_cached_irq_mask[word]);
}
static void m8xx_mask_and_ack(unsigned int irq_nr)
@@ -53,7 +72,7 @@
ppc_cached_irq_mask[word] &= ~(1 << (31-bit));
((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask =
- ppc_cached_irq_mask[word];
+ ppc_cached_irq_mask[word] &
ppc_irq_priority_mask[bit];
((immap_t *)IMAP_ADDR)->im_siu_conf.sc_sipend = 1 << (31-bit);
}
--
-------------------------------------------------------
Steven K. Rossi srossi@labs.mot.com
Staff Engineer
Multimedia Communications Research Laboratory
Motorola Labs
-------------------------------------------------------
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
next prev parent reply other threads:[~2001-12-13 15:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-12-07 20:12 high priority interrupts disabled Steve Rossi
2001-12-07 23:10 ` Dan Malek
2001-12-10 18:04 ` Steve Rossi
2001-12-10 18:38 ` Wolfgang Denk
2001-12-12 15:27 ` Steve Rossi
2001-12-12 23:09 ` high priority interrupts disabled - problem found Steve Rossi
2001-12-13 4:49 ` Dan Malek
2001-12-13 15:02 ` Steve Rossi [this message]
2001-12-13 19:35 ` Dan Malek
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=3C18C309.9D234D7F@labs.mot.com \
--to=srossi@labs.mot.com \
--cc=dan@embeddededge.com \
--cc=linuxppc-embedded@lists.linuxppc.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).