linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Joshua Henderson <joshua.henderson@microchip.com>
To: Marc Zyngier <marc.zyngier@arm.com>, <linux-kernel@vger.kernel.org>
Cc: <linux-mips@linux-mips.org>, <ralf@linux-mips.org>,
	Cristian Birsan <cristian.birsan@microchip.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jason Cooper <jason@lakedaemon.net>
Subject: Re: [PATCH v2 02/14] irqchip: irq-pic32-evic: Add support for PIC32 interrupt controller
Date: Tue, 5 Jan 2016 10:50:41 -0700	[thread overview]
Message-ID: <568C0271.2020007@microchip.com> (raw)
In-Reply-To: <5670471B.6090608@arm.com>

Marc,

On 12/15/2015 10:00 AM, Marc Zyngier wrote:
> On 14/12/15 22:42, Joshua Henderson wrote:
>> From: Cristian Birsan <cristian.birsan@microchip.com>
>>
>> This adds support for the interrupt controller present on PIC32 class
>> devices.
>>
>> The following features are supported:
>>  - DT properties for EVIC and for devices that use interrupt lines
>>  - Persistent and non-persistent interrupt handling
>>  - irqdomain support
>>
>> Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
>> Signed-off-by: Joshua Henderson <joshua.henderson@microchip.com>
>> Cc: Ralf Baechle <ralf@linux-mips.org>
>> ---
>>  drivers/irqchip/Makefile           |    1 +
>>  drivers/irqchip/irq-pic32-evic.c   |  321 ++++++++++++++++++++++++++++++++++++
>>  include/linux/irqchip/pic32-evic.h |   19 +++
>>  3 files changed, 341 insertions(+)
>>  create mode 100644 drivers/irqchip/irq-pic32-evic.c
>>  create mode 100644 include/linux/irqchip/pic32-evic.h
>>
>> diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
>> index 177f78f..e3608fc 100644
>> --- a/drivers/irqchip/Makefile
>> +++ b/drivers/irqchip/Makefile
>> @@ -55,3 +55,4 @@ obj-$(CONFIG_RENESAS_H8S_INTC)		+= irq-renesas-h8s.o
>>  obj-$(CONFIG_ARCH_SA1100)		+= irq-sa11x0.o
>>  obj-$(CONFIG_INGENIC_IRQ)		+= irq-ingenic.o
>>  obj-$(CONFIG_IMX_GPCV2)			+= irq-imx-gpcv2.o
>> +obj-$(CONFIG_MACH_PIC32)		+= irq-pic32-evic.o
>> diff --git a/drivers/irqchip/irq-pic32-evic.c b/drivers/irqchip/irq-pic32-evic.c
>> new file mode 100644
>> index 0000000..6a7747c
>> --- /dev/null
>> +++ b/drivers/irqchip/irq-pic32-evic.c

[...]

>> +
>> +static struct irq_chip pic32_irq_chip = {
>> +	.name = "PIC32-EVIC",
>> +	.irq_ack = ack_pic32_irq,
>> +	.irq_mask = mask_pic32_irq,
>> +	.irq_mask_ack = mask_ack_pic32_irq,
>> +	.irq_unmask = unmask_pic32_irq,
>> +	.irq_eoi = ack_pic32_irq,
>> +	.irq_set_type = set_type_pic32_irq,
>> +	.irq_enable = unmask_pic32_irq,
>> +	.irq_disable = mask_pic32_irq,
> 
> I'm not sure I see the point of having all these methods. First, there
> is a lot of duplication: no need to provide enable/disable if all you
> have is mask/unmask - the core code can deal with that.

This is to avoid the lazy disable approach in irq_disable(). The .irq_enable is there for symmetry.  .irq_mask_ack is also redundant excluding performance.  These can be removed if the preference is to end up with:

static struct irq_chip pic32_irq_chip = {
	.name = "PIC32-EVIC",
	.irq_ack = ack_pic32_irq,
	.irq_mask = mask_pic32_irq,
	.irq_unmask = unmask_pic32_irq,
	.irq_eoi = ack_pic32_irq,
	.irq_set_type = set_type_pic32_irq,
};

> 
> Then, your EOI method is not really an EOI. It doesn't terminate the
> handling, or at least that's not what the name suggest. If this is
> really an EOI, then you should be able to simplify the whole thing on
> only use the fasteoi handler, including for edge interrupts.

There are two types of hardware interrupts: persistent and non persistent. For the persistent ones we need to clear the condition that caused the interrupt before clearing the interrupt flag and this one is mapped to the fasteoi handler. For the non persistent ones we can clear the interrupt flag as soon as we enter the interrupt handler, but we need to re-enable the interrupt to avoid missing any event that occur during servicing the interrupt. This one is mapped to the edge handler. This is needed, for example, with the core timer interrupt.

>
> It would be good to have an insight on how this thing actually works
> (I've tried to read the only documentation, but this is vague at best),
> that would help picking the right design for your use case.
> 

We're in agreement here on the lack of documentation.  While this chip is not released to the public yet, we do have a generic document that outlines the interrupt controllers across the PIC32 family that will shed some light on how this thing operates:  http://ww1.microchip.com/downloads/en/DeviceDoc/60001108H.pdf

> Thanks,
> 
> 	M.
> 

Josh

  reply	other threads:[~2016-01-05 17:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-14 22:42 [PATCH v2 00/14] Initial Microchip PIC32MZDA Support Joshua Henderson
2015-12-14 22:42 ` [PATCH v2 01/14] DEVICETREE: Add bindings for PIC32 interrupt controller Joshua Henderson
2015-12-14 23:34   ` Rob Herring
2015-12-14 22:42 ` [PATCH v2 02/14] irqchip: irq-pic32-evic: Add support " Joshua Henderson
2015-12-15 17:00   ` Marc Zyngier
2016-01-05 17:50     ` Joshua Henderson [this message]
2015-12-14 22:42 ` [PATCH v2 03/14] DEVICETREE: Add PIC32 clock binding documentation Joshua Henderson
2015-12-18 15:44   ` Rob Herring
2015-12-19 11:48     ` Purna Chandra Mandal
2015-12-14 22:42 ` [PATCH v2 04/14] clk: clk-pic32: Add PIC32 clock driver Joshua Henderson
2015-12-14 22:42 ` [PATCH v2 05/14] DEVICETREE: Add bindings for PIC32/MZDA platforms Joshua Henderson
2015-12-18 15:47   ` Rob Herring
2015-12-14 22:42 ` [PATCH v2 06/14] MIPS: Add support for PIC32MZDA platform Joshua Henderson
2015-12-14 22:42 ` [PATCH v2 07/14] DEVICETREE: Add bindings for PIC32 pin control and GPIO Joshua Henderson
2015-12-15 19:58   ` Rob Herring
2015-12-14 22:42 ` [PATCH v2 08/14] pinctrl: pinctrl-pic32: Add PIC32 pin control driver Joshua Henderson
2015-12-14 22:42 ` [PATCH v2 09/14] DEVICETREE: Add bindings for PIC32 UART driver Joshua Henderson
2015-12-15 20:00   ` Rob Herring
2015-12-14 22:42 ` [PATCH v2 10/14] serial: pic32_uart: Add " Joshua Henderson
2015-12-20 16:13   ` Andy Shevchenko
2016-01-05 20:29     ` Paul.Thacker
2016-01-05 20:43   ` One Thousand Gnomes
2016-01-06 22:00     ` Paul.Thacker
2016-01-06 22:32       ` One Thousand Gnomes
2015-12-14 22:42 ` [PATCH v2 11/14] DEVICETREE: Add bindings for PIC32 SDHCI host controller Joshua Henderson
2015-12-15 20:00   ` Rob Herring
2015-12-14 22:42 ` [PATCH v2 12/14] mmc: sdhci-pic32: Add PIC32 SDHCI host controller driver Joshua Henderson
2015-12-15  0:32   ` Andy Green
2015-12-16 17:35     ` Paul.Thacker
2015-12-16 10:48   ` Ulf Hansson
2015-12-17 18:05     ` Paul.Thacker
2015-12-14 22:42 ` [PATCH v2 13/14] MIPS: dts: Add initial DTS for the PIC32MZDA Starter Kit Joshua Henderson
2015-12-14 22:42 ` [PATCH v2 14/14] MIPS: pic32mzda: Add initial PIC32MZDA Starter Kit defconfig Joshua Henderson

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=568C0271.2020007@microchip.com \
    --to=joshua.henderson@microchip.com \
    --cc=cristian.birsan@microchip.com \
    --cc=jason@lakedaemon.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=marc.zyngier@arm.com \
    --cc=ralf@linux-mips.org \
    --cc=tglx@linutronix.de \
    /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).