From: Manuel Lauss <mano@roarinelk.homelinux.net>
To: linux-sh@vger.kernel.org
Subject: Re: Questions about the interrupt controller
Date: Fri, 29 Feb 2008 15:32:47 +0000 [thread overview]
Message-ID: <47C8259F.9030209@roarinelk.homelinux.net> (raw)
In-Reply-To: <38b2ab8a0802290508t5e20a0cmfd04e35f0fc533a3@mail.gmail.com>
Francis Moreau wrote:
> Hello,
>
> I read the sh4 core peripherals manual avalaible on renesas web site
> (BTW do you know other 'good' documentations on the sh4 architecture ?)
> in order to understand how the 'intc' works.
>
> My question is: are there any examples in the linux kernel which use the
> IRL interrupts when *not* configured as 4 independent interrupt requests ?
The platform I'm working on does that. A CPLD with 15 IRQ sources uses
the 4 IRL lines to signal them (low-active 4-bit "bus" if you will).
> Do such interrupts need to use make_imask_irq() ?
Again, I can only tell for my SH7760 platform. You need to register your
own irq_chip with mask/unmask/mask_ack callbacks. On the SH7760, the
IRLs trigger as vectors 0-15, and one has to provide external logic to
do the irq masking/acking. SH7780 and newer IIRC provide an INTC
register for that.
This is code I use:
/* CPU MODULE CPLD IRQ "CONTROLLER" */
static void exm7760_en_cpld_irq(unsigned int irq)
{
unsigned short val = ctrl_inw(EXM7760_CPLD_MASK) & ~(1 << irq);
ctrl_outw(val, EXM7760_CPLD_MASK);
}
static void exm7760_dis_cpld_irq(unsigned int irq)
{
unsigned short val = ctrl_inw(EXM7760_CPLD_MASK) | (1 << irq);
ctrl_outw(val, EXM7760_CPLD_MASK);
}
static struct irq_chip exm7760_cpld_chip __read_mostly = {
.name = "CPLD",
.unmask = exm7760_en_cpld_irq,
.mask = exm7760_dis_cpld_irq,
.mask_ack = exm7760_dis_cpld_irq,
};
static void __init exm7760_init_cpld_irq(void)
{
int i;
for (i = 0; i < EXM7760_CPLD_IRQNUM; i++) {
set_irq_chip_and_handler_name(i, &exm7760_cpld_chip,
handle_level_irq, "level");
set_irq_chip_data(i, NULL);
}
}
> The documentation says: "Other compatible interrupt controllers can be
> cascaded with INTC.". Where can I find some details about that ?
have a look at set_irq_chained_handler() function, for example:
static struct irq_chip exm7760_pcmcia_chip __read_mostly = {
.name = "CPLD-PCMCIA",
.unmask = exm7760_en_cardirq,
.mask = exm7760_dis_cardirq,
.mask_ack = exm7760_dis_cardirq,
};
static void exm7760_pcmcia_chain_handler(unsigned int irq,
struct irq_desc *desc)
{
unsigned short cfctl = ctrl_inw(EXM7760_CPLD_CFCTL);
if ((cfctl & CFCTL_RDY) = 0)
generic_handle_irq(EXM7760_CF_CARD0_IRQ);
if ((cfctl & (CFCTL_RDY << CFCTL_SOCK1_SHIFT)) = 0)
generic_handle_irq(EXM7760_CF_CARD1_IRQ);
}
static void __init exm7760_init_pcmcia_irq(void)
{
set_irq_chip_and_handler_name(EXM7760_CF_CARD0_IRQ,
&exm7760_pcmcia_chip, handle_level_irq, "level");
set_irq_chip_and_handler_name(EXM7760_CF_CARD1_IRQ,
&exm7760_pcmcia_chip, handle_level_irq, "level");
set_irq_chained_handler(EXM7760_CF_IRQ,
exm7760_pcmcia_chain_handler);
}
Best regards,
Manuel Lauss
next prev parent reply other threads:[~2008-02-29 15:32 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-29 13:08 Questions about the interrupt controller Francis Moreau
2008-02-29 15:32 ` Manuel Lauss [this message]
2008-02-29 16:19 ` Francis Moreau
2008-02-29 17:20 ` Manuel Lauss
2008-02-29 17:29 ` Manuel Lauss
2008-02-29 17:35 ` Manuel Lauss
2008-02-29 20:02 ` Francis Moreau
2008-02-29 20:05 ` Francis Moreau
2008-02-29 20:35 ` Manuel Lauss
2008-03-03 15:55 ` Stuart MENEFY
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=47C8259F.9030209@roarinelk.homelinux.net \
--to=mano@roarinelk.homelinux.net \
--cc=linux-sh@vger.kernel.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