From: majun258@huawei.com (majun (F))
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/3] IRQ/Gic-V3: Add mbigen driver to support mbigen interrupt controller
Date: Thu, 16 Jul 2015 16:35:33 +0800 [thread overview]
Message-ID: <55A76CD5.1050301@huawei.com> (raw)
In-Reply-To: <559D422D.1000307@arm.com>
? 2015/7/8 23:30, Marc Zyngier ??:
> Hi,
>
> Aside from all the comments Thomas had, the following aspect is worrying
> me a bit:
>
> On 06/07/15 08:09, Ma Jun wrote:
>> This patch contains the mbigen interrupt controller driver.
>
> [...]
>
>> +static int mbigen_set_type(struct irq_data *d, unsigned int type)
>> +{
>> + struct mbigen_chip *chip = d->domain->host_data;
>> + u32 ofst, mask;
>> + u32 val, nid, hwirq;
>> + void __iomem *addr;
>> +
>> + if (type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING)
>> + return -EINVAL;
>
> You seem to be supporting both edge and level triggered interrupts.
>
> Given that the ITS is edge triggered only, I must assume you have some
> code to regenerate an edge if the wired interrupt is level triggered,
> and that the line level is still high when you perform the EOI...
>
For each interrupt, there is state machine in mbigen chip.
inactive-->pending--> active(pending & active)
The level triggered interrupt process flow list as below:
device---->mbigen---->ITS---->GIC--->CPU
[1]: device triggered interrupt A and line level changes to high
[2]: Mbigen receive interrupt A and changes the status of A to pending in mbigen(mbigen.state = pending)
[3]: Mbigen send interrupt A to ITS , the A status in mbigen will be changed to pending
& active (mbigen.state = pending & active)
[4]: ITS receive the interrupt A and send A to gic (A status in gic is pending. gic.state=pending)
[5]: CPU ack the interrupt A ( gic.state = active)
[6]: Enter interrupt handler. The interrupt line level is cleared in device irq handler.
[7]: When detects the low level on interrupt A line, mbigen change the interrupt A status
from pending & active to inactive (mbigen.state = inactive).
[8]: Send EOI . a): write register to clear the status in mbigen .
b):clear the status in gic. (gic.state = inactive)
[....]
>> +static void mbigen_irq_eoi(struct irq_data *d)
>> +{
>> + irq_chip_eoi_parent(d);
>
> ... but this function doesn't have any code dealing with injecting an
> edge on detecting a level high.
>
Yes, before irq_chip_eoi_parent is called, some code should be added to
clear the interrupt status in mbigen.
> So how does it work? Either you're missing some logic here, or you don't
> really support level interrupts.
>
> Thanks,
>
> M.
>
WARNING: multiple messages have this Message-ID (diff)
From: "majun (F)" <majun258@huawei.com>
To: Marc Zyngier <marc.zyngier@arm.com>,
Catalin Marinas <Catalin.Marinas@arm.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Will Deacon <Will.Deacon@arm.com>,
Mark Rutland <Mark.Rutland@arm.com>,
"jason@lakedaemon.net" <jason@lakedaemon.net>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"lizefan@huawei.com" <lizefan@huawei.com>,
"huxinwei@huawei.com" <huxinwei@huawei.com>,
"dingtianhong@huawei.com" <dingtianhong@huawei.com>,
"zhaojunhua@hisilicon.com" <zhaojunhua@hisilicon.com>,
"liguozhu@hisilicon.com" <liguozhu@hisilicon.com>,
"xuwei5@hisilicon.com" <xuwei5@hisilicon.com>,
"wei.chenwei@hisilicon.com" <wei.chenwei@hisilicon.com>,
"guohanjun@huawei.com" <guohanjun@huawei.com>,
"wuyun.wu@huawei.com" <wuyun.wu@huawei.com>,
"guodong.xu@linaro.org" <guodong.xu@linaro.org>,
"haojian.zhuang@linaro.org" <haojian.zhuang@linaro.org>,
"zhangfei.gao@linaro.org" <zhangfei.gao@linaro.org>,
"usman.ahmad@linaro.org" <usman.ahmad@linaro.org>
Subject: Re: [PATCH v3 1/3] IRQ/Gic-V3: Add mbigen driver to support mbigen interrupt controller
Date: Thu, 16 Jul 2015 16:35:33 +0800 [thread overview]
Message-ID: <55A76CD5.1050301@huawei.com> (raw)
In-Reply-To: <559D422D.1000307@arm.com>
在 2015/7/8 23:30, Marc Zyngier 写道:
> Hi,
>
> Aside from all the comments Thomas had, the following aspect is worrying
> me a bit:
>
> On 06/07/15 08:09, Ma Jun wrote:
>> This patch contains the mbigen interrupt controller driver.
>
> [...]
>
>> +static int mbigen_set_type(struct irq_data *d, unsigned int type)
>> +{
>> + struct mbigen_chip *chip = d->domain->host_data;
>> + u32 ofst, mask;
>> + u32 val, nid, hwirq;
>> + void __iomem *addr;
>> +
>> + if (type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING)
>> + return -EINVAL;
>
> You seem to be supporting both edge and level triggered interrupts.
>
> Given that the ITS is edge triggered only, I must assume you have some
> code to regenerate an edge if the wired interrupt is level triggered,
> and that the line level is still high when you perform the EOI...
>
For each interrupt, there is state machine in mbigen chip.
inactive-->pending--> active(pending & active)
The level triggered interrupt process flow list as below:
device---->mbigen---->ITS---->GIC--->CPU
[1]: device triggered interrupt A and line level changes to high
[2]: Mbigen receive interrupt A and changes the status of A to pending in mbigen(mbigen.state = pending)
[3]: Mbigen send interrupt A to ITS , the A status in mbigen will be changed to pending
& active (mbigen.state = pending & active)
[4]: ITS receive the interrupt A and send A to gic (A status in gic is pending. gic.state=pending)
[5]: CPU ack the interrupt A ( gic.state = active)
[6]: Enter interrupt handler. The interrupt line level is cleared in device irq handler.
[7]: When detects the low level on interrupt A line, mbigen change the interrupt A status
from pending & active to inactive (mbigen.state = inactive).
[8]: Send EOI . a): write register to clear the status in mbigen .
b):clear the status in gic. (gic.state = inactive)
[....]
>> +static void mbigen_irq_eoi(struct irq_data *d)
>> +{
>> + irq_chip_eoi_parent(d);
>
> ... but this function doesn't have any code dealing with injecting an
> edge on detecting a level high.
>
Yes, before irq_chip_eoi_parent is called, some code should be added to
clear the interrupt status in mbigen.
> So how does it work? Either you're missing some logic here, or you don't
> really support level interrupts.
>
> Thanks,
>
> M.
>
next prev parent reply other threads:[~2015-07-16 8:35 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-06 7:09 [PATCH v3 0/3] IRQ/Gic-V3:Support Mbigen interrupt controller Ma Jun
2015-07-06 7:09 ` Ma Jun
2015-07-06 7:09 ` [PATCH v3 1/3] IRQ/Gic-V3: Add mbigen driver to support mbigen " Ma Jun
2015-07-06 7:09 ` Ma Jun
2015-07-06 12:33 ` Thomas Gleixner
2015-07-06 12:33 ` Thomas Gleixner
2015-07-08 4:21 ` majun (F)
2015-07-08 4:21 ` majun (F)
2015-07-08 10:44 ` Thomas Gleixner
2015-07-08 10:44 ` Thomas Gleixner
2015-07-16 8:35 ` majun (F)
2015-07-16 8:35 ` majun (F)
2015-07-08 15:16 ` Marc Zyngier
2015-07-08 15:16 ` Marc Zyngier
2015-07-16 8:35 ` majun (F)
2015-07-16 8:35 ` majun (F)
2015-07-16 8:52 ` Marc Zyngier
2015-07-16 8:52 ` Marc Zyngier
2015-07-16 9:22 ` majun (F)
2015-07-16 9:22 ` majun (F)
2015-07-16 9:30 ` Marc Zyngier
2015-07-16 9:30 ` Marc Zyngier
2015-07-16 12:26 ` majun (F)
2015-07-16 12:26 ` majun (F)
2015-07-16 13:37 ` Marc Zyngier
2015-07-16 13:37 ` Marc Zyngier
2015-07-27 2:25 ` majun (F)
2015-07-27 2:25 ` majun (F)
2015-07-08 15:30 ` Marc Zyngier
2015-07-08 15:30 ` Marc Zyngier
2015-07-16 8:35 ` majun (F) [this message]
2015-07-16 8:35 ` majun (F)
2015-07-06 7:09 ` [PATCH v3 2/3] IRQ/Gic-V3: Change arm-gic-its to support the Mbigen interrupt Ma Jun
2015-07-06 7:09 ` Ma Jun
2015-07-06 7:09 ` [PATCH v3 3/3] dt-binding:Documents the mbigen bindings Ma Jun
2015-07-06 7:09 ` Ma Jun
2015-07-08 13:40 ` Mark Rutland
2015-07-08 13:40 ` Mark Rutland
2015-07-08 14:01 ` Marc Zyngier
2015-07-08 14:01 ` Marc Zyngier
2015-07-16 8:35 ` majun (F)
2015-07-16 8:35 ` majun (F)
2015-07-20 16:38 ` Mark Rutland
2015-07-20 16:38 ` Mark Rutland
2015-07-25 3:03 ` majun (F)
2015-07-25 3:03 ` majun (F)
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=55A76CD5.1050301@huawei.com \
--to=majun258@huawei.com \
--cc=linux-arm-kernel@lists.infradead.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.