All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aisheng Dong <aisheng.dong@nxp.com>
To: Lucas Stach <l.stach@pengutronix.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"shawnguo@kernel.org" <shawnguo@kernel.org>,
	dl-linux-imx <linux-imx@nxp.com>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	Marc Zyngier <marc.zyngier@arm.com>
Subject: RE: [PATCH 4/4] irq: imx: irqsteer: add multi output interrupts support
Date: Tue, 22 Jan 2019 12:50:26 +0000	[thread overview]
Message-ID: <AM0PR04MB42115D7A2A3BB5505771BD3880980@AM0PR04MB4211.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <1548154758.2465.20.camel@pengutronix.de>

> From: Lucas Stach [mailto:l.stach@pengutronix.de]
> Sent: Tuesday, January 22, 2019 6:59 PM
> To: Aisheng Dong <aisheng.dong@nxp.com>; linux-kernel@vger.kernel.org
> Cc: linux-arm-kernel@lists.infradead.org; shawnguo@kernel.org; dl-linux-imx
> <linux-imx@nxp.com>; robh+dt@kernel.org; devicetree@vger.kernel.org;
> tglx@linutronix.de; Marc Zyngier <marc.zyngier@arm.com>
> Subject: Re: [PATCH 4/4] irq: imx: irqsteer: add multi output interrupts support
> 
> Am Dienstag, den 22.01.2019, 10:39 +0000 schrieb Aisheng Dong:
> > > > > From: Lucas Stach [mailto:l.stach@pengutronix.de]
> > > Sent: Friday, January 18, 2019 6:23 PM
> >
> > [...]
> > > > > This has been discussed when upstreaming the driver. The
> > > > > controller may support multiple output IRQs, but only one them
> > > > > is actually used depending on the CHANCTRL config. There is no
> > > > > use in hooking up all the output IRQs in DT, if only one of them
> > > > > is actually used. Some of the outputs may not even be visible to
> > > > > the Linux system, but may belong to a Cortex M4 subsystem. All
> > > > > of those configurations can be described in DT by changing the
> > > > > upstream interrupt and "fsl,channel" in a
> > >
> > > coherent way.
> > > > >
> > > > > Please correct me if my understanding is totally wrong.
> > > >
> > > > I'm afraid your understanding of CHAN seems wrong.
> > > > (Binding doc of that property needs change as well).
> > > >
> > > > On QXP DC SS, the IRQSTEER supports 512 interrupts with 8
> > > > interrupt output Conntected to GIC.
> > > > The current driver does not support it as it assumes only one
> > > > interrupt
> > >
> > > output used.
> > >
> > > Okay, so let's take a step back. The description in the QXP RM is
> > > actually better than what I've seen until now. Still it's totally confusing that
> the "channel"
> > > terminology used with different meanings in docs. Let's try to avoid
> > > this as much as possible.
> > >
> > > So to get things straight: Each irqsteer controller has a number of IRQ
> groups.
> > > All the input IRQs of one group are ORed together to form on output IRQ.
> > > Depending on the SoC integration, a group can contain 32 or
> > > 64 IRQs, where DCSS irqsteer on MX8M and the big 512 input
> > > controllers on QXP and QM both use 64 IRQs per group. You are
> > > claiming that the smaller controllers on both QXP am QM have only 32
> IRQs per group, right?
> > >
> > > So the only change that is needed is that the driver needs to know
> > > the number of input IRQs per group, with a default of 64 to not break DT
> compatibility.
> > >
> >
> > Not exactly.
> > from HW point of view , there're two parameters during IRQSTEER
> integration.
> > For example,
> > DC in QXP:
> > > > parameter  IRQCHAN		=  1; 	//Number of IRQ Channels/Slots
> > > > parameter  NINT32		=  8;	//Number of interrupts in multiple
> of 32
> 
> If this is always in multiples of 32, the only change we need to make to the
> driver is to fix DT binding and interpretation of the "fsl,irq-groups" property to
> be in multiples of 32.
> 
> This means i.MX8MQ DCSS irqsteer would need to change to 2 irq-groups, but
> as this isn't used upstream yet we can still do this change without breaking too
> much stuff and I would rather correct this now than keeping a DT binding
> around that doesn't match the HW.
> 
> > MIPI CSI in MQ:
> > > Parameter  IRQCHAN		= 1
> > > Parameter  NINT32		= 1
> >
> > You will see no group concept used here. Only channel number and
> interrupts number.
> > The group is an IP internal concept that ORed a group of 64 interrupts
> > into an output interrupt. But it may also only use 32 interrupts in the same
> group.
> 
> I suppose that the OR group size at that point is always 64 input IRQs per
> output IRQ, right? So with NINT32 == 1 you end up with 1 output IRQ, but for
> NINT32 == 3 you get 2 output IRQs, correct?
> 
> > > Also if the connection between IRQ group and output IRQ is fixed,
> > > the driver should be more clever about handling the chained IRQ. If
> > > you know which of the upstream IRQs fired you only need to look at
> > > the 32 or 64 IRQ status registers of that specific group, not all of them.
> >
> > Yes, that's right.
> > I planned to do that later with a separate patch before.
> 
> Let's do it right with the first patch. This doesn't seem like a big change.
> 
> >
> > >
> > > Can you please clarify what the CHANCTRL setting changes in this setup?
> > >
> >
> > IRQsteer supports up to 5 separate CAHNNELS which each of them
> > supports up to 512 interrupts. CHANCTL is used to enable those respective
> CHAN output interrupts.
> > e.g.
> > 1~8 output interrupts of CHAN0.
> >
> > One notable thing is the each channel has a separate address space.
> > That means the chan1 reg address is not the one we specified in default reg
> property.
> > So the correct dts may be like for multi channels cases.
> > interrupt-controller@32e2d000 {
> >         compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";
> >         reg = <0x32e2d000 0x1000>,
> >               <0x32e2e000 0x1000>,
> >               <0x32e2f000 0x1000>;
> >               ...
> >         reg-names = "ch0", "ch1", "ch2", ...;
> >         interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
> >         fsl,irqs-per-chan= <64>;
> >         interrupt-controller;
> >         #interrupt-cells = <2>; //cell 0: chan index cell 2: interrupt
> > number }; This makes the things quite complicated.
> 
> With the current binding, what keeps us from describing such a multi- channel
> irqsteer with multiple DT nodes and have multiple driver instances? I don't see
> why we would need to mix this all into one driver instance. So for your above
> example, something like:
> 
> interrupt-controller@32e2d000 {
> 	compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";>
> 	reg = <0x32e2d000 0x1000>;
> 	interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
> 	fsl,channel = <0>;
> };
> 
> interrupt-controller@32e2e000 {
> 	compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";>
> 	reg = <0x32e2e000 0x1000>;
> 	interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
> 	fsl,channel = <1>;
> };
> 

After a bit more thinking, I guess this might work as we have separate register space
We also have miniored CHANCTL for each channel, all things make them look like
separate IRQSTEERs.
e.g.
AIPS – slot 9	64KB	IRQSTR.SCU2
AIPS – slot 8	64KB	IRQSTR.DSP
AIPS – slot 7	64KB	IRQSTR.CM4_0
AIPS – slot 6	64KB	IRQSTR.SCU

I need talk to the IP module designer to make sure the mirror chanctl can work well
And get back to you later once have an conclusion.

If that's ok, then we may only need update fsl,irq-groups to fsl,irqs-per-chan.

(BTW, those irqsteers actually are not used by A core, they're usd by SCU, M4 and DSP.
So this actually does not affect A core side work. E.g. Linux)

Regards
Dong Aisheng

> > In reality, we still don't have such using cases so far as as multi
> > channels usually are used to deliver the interrupts to different
> > cores, e.g. M4, SCU, or DSP, A core don't handle it.
> > So I did not change it currently as it's another story.
> > This patch series mainly aims to add support for 32 or 512 interrupts
> > channel and multiple Outputs for a single CHANNEL case.
> 
> The thing is, if we want to even try to keep DT stability we need to understand
> how this HW block can be used and how we can describe this in the DT.
> 
> Regards,
> Lucas

WARNING: multiple messages have this Message-ID (diff)
From: Aisheng Dong <aisheng.dong@nxp.com>
To: Lucas Stach <l.stach@pengutronix.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	dl-linux-imx <linux-imx@nxp.com>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"shawnguo@kernel.org" <shawnguo@kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: RE: [PATCH 4/4] irq: imx: irqsteer: add multi output interrupts support
Date: Tue, 22 Jan 2019 12:50:26 +0000	[thread overview]
Message-ID: <AM0PR04MB42115D7A2A3BB5505771BD3880980@AM0PR04MB4211.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <1548154758.2465.20.camel@pengutronix.de>

> From: Lucas Stach [mailto:l.stach@pengutronix.de]
> Sent: Tuesday, January 22, 2019 6:59 PM
> To: Aisheng Dong <aisheng.dong@nxp.com>; linux-kernel@vger.kernel.org
> Cc: linux-arm-kernel@lists.infradead.org; shawnguo@kernel.org; dl-linux-imx
> <linux-imx@nxp.com>; robh+dt@kernel.org; devicetree@vger.kernel.org;
> tglx@linutronix.de; Marc Zyngier <marc.zyngier@arm.com>
> Subject: Re: [PATCH 4/4] irq: imx: irqsteer: add multi output interrupts support
> 
> Am Dienstag, den 22.01.2019, 10:39 +0000 schrieb Aisheng Dong:
> > > > > From: Lucas Stach [mailto:l.stach@pengutronix.de]
> > > Sent: Friday, January 18, 2019 6:23 PM
> >
> > [...]
> > > > > This has been discussed when upstreaming the driver. The
> > > > > controller may support multiple output IRQs, but only one them
> > > > > is actually used depending on the CHANCTRL config. There is no
> > > > > use in hooking up all the output IRQs in DT, if only one of them
> > > > > is actually used. Some of the outputs may not even be visible to
> > > > > the Linux system, but may belong to a Cortex M4 subsystem. All
> > > > > of those configurations can be described in DT by changing the
> > > > > upstream interrupt and "fsl,channel" in a
> > >
> > > coherent way.
> > > > >
> > > > > Please correct me if my understanding is totally wrong.
> > > >
> > > > I'm afraid your understanding of CHAN seems wrong.
> > > > (Binding doc of that property needs change as well).
> > > >
> > > > On QXP DC SS, the IRQSTEER supports 512 interrupts with 8
> > > > interrupt output Conntected to GIC.
> > > > The current driver does not support it as it assumes only one
> > > > interrupt
> > >
> > > output used.
> > >
> > > Okay, so let's take a step back. The description in the QXP RM is
> > > actually better than what I've seen until now. Still it's totally confusing that
> the "channel"
> > > terminology used with different meanings in docs. Let's try to avoid
> > > this as much as possible.
> > >
> > > So to get things straight: Each irqsteer controller has a number of IRQ
> groups.
> > > All the input IRQs of one group are ORed together to form on output IRQ.
> > > Depending on the SoC integration, a group can contain 32 or
> > > 64 IRQs, where DCSS irqsteer on MX8M and the big 512 input
> > > controllers on QXP and QM both use 64 IRQs per group. You are
> > > claiming that the smaller controllers on both QXP am QM have only 32
> IRQs per group, right?
> > >
> > > So the only change that is needed is that the driver needs to know
> > > the number of input IRQs per group, with a default of 64 to not break DT
> compatibility.
> > >
> >
> > Not exactly.
> > from HW point of view , there're two parameters during IRQSTEER
> integration.
> > For example,
> > DC in QXP:
> > > > parameter  IRQCHAN		=  1; 	//Number of IRQ Channels/Slots
> > > > parameter  NINT32		=  8;	//Number of interrupts in multiple
> of 32
> 
> If this is always in multiples of 32, the only change we need to make to the
> driver is to fix DT binding and interpretation of the "fsl,irq-groups" property to
> be in multiples of 32.
> 
> This means i.MX8MQ DCSS irqsteer would need to change to 2 irq-groups, but
> as this isn't used upstream yet we can still do this change without breaking too
> much stuff and I would rather correct this now than keeping a DT binding
> around that doesn't match the HW.
> 
> > MIPI CSI in MQ:
> > > Parameter  IRQCHAN		= 1
> > > Parameter  NINT32		= 1
> >
> > You will see no group concept used here. Only channel number and
> interrupts number.
> > The group is an IP internal concept that ORed a group of 64 interrupts
> > into an output interrupt. But it may also only use 32 interrupts in the same
> group.
> 
> I suppose that the OR group size at that point is always 64 input IRQs per
> output IRQ, right? So with NINT32 == 1 you end up with 1 output IRQ, but for
> NINT32 == 3 you get 2 output IRQs, correct?
> 
> > > Also if the connection between IRQ group and output IRQ is fixed,
> > > the driver should be more clever about handling the chained IRQ. If
> > > you know which of the upstream IRQs fired you only need to look at
> > > the 32 or 64 IRQ status registers of that specific group, not all of them.
> >
> > Yes, that's right.
> > I planned to do that later with a separate patch before.
> 
> Let's do it right with the first patch. This doesn't seem like a big change.
> 
> >
> > >
> > > Can you please clarify what the CHANCTRL setting changes in this setup?
> > >
> >
> > IRQsteer supports up to 5 separate CAHNNELS which each of them
> > supports up to 512 interrupts. CHANCTL is used to enable those respective
> CHAN output interrupts.
> > e.g.
> > 1~8 output interrupts of CHAN0.
> >
> > One notable thing is the each channel has a separate address space.
> > That means the chan1 reg address is not the one we specified in default reg
> property.
> > So the correct dts may be like for multi channels cases.
> > interrupt-controller@32e2d000 {
> >         compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";
> >         reg = <0x32e2d000 0x1000>,
> >               <0x32e2e000 0x1000>,
> >               <0x32e2f000 0x1000>;
> >               ...
> >         reg-names = "ch0", "ch1", "ch2", ...;
> >         interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
> >         fsl,irqs-per-chan= <64>;
> >         interrupt-controller;
> >         #interrupt-cells = <2>; //cell 0: chan index cell 2: interrupt
> > number }; This makes the things quite complicated.
> 
> With the current binding, what keeps us from describing such a multi- channel
> irqsteer with multiple DT nodes and have multiple driver instances? I don't see
> why we would need to mix this all into one driver instance. So for your above
> example, something like:
> 
> interrupt-controller@32e2d000 {
> 	compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";>
> 	reg = <0x32e2d000 0x1000>;
> 	interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
> 	fsl,channel = <0>;
> };
> 
> interrupt-controller@32e2e000 {
> 	compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";>
> 	reg = <0x32e2e000 0x1000>;
> 	interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
> 	fsl,channel = <1>;
> };
> 

After a bit more thinking, I guess this might work as we have separate register space
We also have miniored CHANCTL for each channel, all things make them look like
separate IRQSTEERs.
e.g.
AIPS – slot 9	64KB	IRQSTR.SCU2
AIPS – slot 8	64KB	IRQSTR.DSP
AIPS – slot 7	64KB	IRQSTR.CM4_0
AIPS – slot 6	64KB	IRQSTR.SCU

I need talk to the IP module designer to make sure the mirror chanctl can work well
And get back to you later once have an conclusion.

If that's ok, then we may only need update fsl,irq-groups to fsl,irqs-per-chan.

(BTW, those irqsteers actually are not used by A core, they're usd by SCU, M4 and DSP.
So this actually does not affect A core side work. E.g. Linux)

Regards
Dong Aisheng

> > In reality, we still don't have such using cases so far as as multi
> > channels usually are used to deliver the interrupts to different
> > cores, e.g. M4, SCU, or DSP, A core don't handle it.
> > So I did not change it currently as it's another story.
> > This patch series mainly aims to add support for 32 or 512 interrupts
> > channel and multiple Outputs for a single CHANNEL case.
> 
> The thing is, if we want to even try to keep DT stability we need to understand
> how this HW block can be used and how we can describe this in the DT.
> 
> Regards,
> Lucas
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-01-22 12:50 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-18  7:53 [PATCH 0/4] irq: imx-irqsteer: add 32 interrupts chan and multi outputs support Aisheng Dong
2019-01-18  7:53 ` Aisheng Dong
2019-01-18  7:53 ` Aisheng Dong
2019-01-18  7:53 ` [PATCH 1/4] dt-binding: irq: imx-irqsteer: use irq number per channel instead of group number Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  8:48   ` Lucas Stach
2019-01-18  8:48     ` Lucas Stach
2019-01-18  8:48     ` Lucas Stach
2019-01-18  9:39     ` Marc Zyngier
2019-01-18  9:39       ` Marc Zyngier
2019-01-18  9:39       ` Marc Zyngier
2019-01-18  9:46       ` Aisheng Dong
2019-01-18  9:46         ` Aisheng Dong
2019-01-18  9:46         ` Aisheng Dong
2019-01-18 10:12         ` Marc Zyngier
2019-01-18 10:12           ` Marc Zyngier
2019-01-18 10:12           ` Marc Zyngier
2019-01-22 10:56           ` Aisheng Dong
2019-01-22 10:56             ` Aisheng Dong
2019-01-22 10:56             ` Aisheng Dong
2019-01-22 11:05             ` Lucas Stach
2019-01-22 11:05               ` Lucas Stach
2019-01-22 11:05               ` Lucas Stach
2019-01-22 11:48             ` Marc Zyngier
2019-01-22 11:48               ` Marc Zyngier
2019-01-22 11:48               ` Marc Zyngier
2019-01-18  9:45     ` Aisheng Dong
2019-01-18  9:45       ` Aisheng Dong
2019-01-18  9:45       ` Aisheng Dong
2019-01-18  7:53 ` [PATCH 2/4] dt-bindings: irq: imx-irqsteer: add multi output interrupts support Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-25 10:46   ` Lucas Stach
2019-01-25 10:46     ` Lucas Stach
2019-01-25 10:46     ` Lucas Stach
2019-01-27 14:05     ` Dong Aisheng
2019-01-27 14:05       ` Dong Aisheng
2019-01-27 14:05       ` Dong Aisheng
2019-01-18  7:53 ` [PATCH 3/4] irq: imx-irqsteer: change to use reg_num instead of irq_group Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  7:53 ` [PATCH 4/4] irq: imx: irqsteer: add multi output interrupts support Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  7:53   ` Aisheng Dong
2019-01-18  8:53   ` Lucas Stach
2019-01-18  8:53     ` Lucas Stach
2019-01-18  8:53     ` Lucas Stach
2019-01-18  9:54     ` Aisheng Dong
2019-01-18  9:54       ` Aisheng Dong
2019-01-18  9:54       ` Aisheng Dong
2019-01-18 10:22       ` Lucas Stach
2019-01-18 10:22         ` Lucas Stach
2019-01-18 10:22         ` Lucas Stach
2019-01-22 10:39         ` Aisheng Dong
2019-01-22 10:39           ` Aisheng Dong
2019-01-22 10:39           ` Aisheng Dong
2019-01-22 10:59           ` Lucas Stach
2019-01-22 10:59             ` Lucas Stach
2019-01-22 10:59             ` Lucas Stach
2019-01-22 12:03             ` Aisheng Dong
2019-01-22 12:03               ` Aisheng Dong
2019-01-22 12:03               ` Aisheng Dong
2019-01-22 12:52               ` Lucas Stach
2019-01-22 12:52                 ` Lucas Stach
2019-01-22 12:52                 ` Lucas Stach
2019-01-22 13:17                 ` Aisheng Dong
2019-01-22 13:17                   ` Aisheng Dong
2019-01-22 13:17                   ` Aisheng Dong
2019-01-25 10:42                   ` Lucas Stach
2019-01-25 10:42                     ` Lucas Stach
2019-01-25 10:42                     ` Lucas Stach
2019-01-27 10:38                     ` Dong Aisheng
2019-01-27 10:38                       ` Dong Aisheng
2019-01-27 10:38                       ` Dong Aisheng
2019-01-22 12:50             ` Aisheng Dong [this message]
2019-01-22 12:50               ` Aisheng Dong
2019-01-22 12:50               ` Aisheng Dong
2019-01-25 10:54   ` Lucas Stach
2019-01-25 10:54     ` Lucas Stach
2019-01-25 10:54     ` Lucas Stach
2019-01-27 14:02     ` Dong Aisheng
2019-01-27 14:02       ` Dong Aisheng
2019-01-27 14:02       ` Dong Aisheng

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=AM0PR04MB42115D7A2A3BB5505771BD3880980@AM0PR04MB4211.eurprd04.prod.outlook.com \
    --to=aisheng.dong@nxp.com \
    --cc=devicetree@vger.kernel.org \
    --cc=l.stach@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=shawnguo@kernel.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 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.