From: Marc Zyngier <marc.zyngier@arm.com>
To: Lokesh Vutla <lokeshvutla@ti.com>
Cc: Nishanth Menon <nm@ti.com>,
Device Tree Mailing List <devicetree@vger.kernel.org>,
Grygorii Strashko <grygorii.strashko@ti.com>,
<jason@lakedaemon.net>, Peter Ujfalusi <peter.ujfalusi@ti.com>,
Sekhar Nori <nsekhar@ti.com>, <linux-kernel@vger.kernel.org>,
Tero Kristo <t-kristo@ti.com>, Rob Herring <robh+dt@kernel.org>,
Santosh Shilimkar <ssantosh@kernel.org>, <tglx@linutronix.de>,
Linux ARM Mailing List <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 09/10] irqchip: ti-sci-inta: Add support for Interrupt Aggregator driver
Date: Sun, 28 Oct 2018 13:31:34 +0000 [thread overview]
Message-ID: <86va5myz7t.wl-marc.zyngier@arm.com> (raw)
In-Reply-To: <63ba5353-8470-b4c1-64a8-a1df5bf48614@ti.com>
Hi Lokesh,
On Fri, 26 Oct 2018 21:19:41 +0100,
Lokesh Vutla <lokeshvutla@ti.com> wrote:
>
> Hi Marc,
>
> [..snip..]
> >> [...]
> >>
> >>>>> +/**
> >>>>> + * ti_sci_inta_register_event() - Register a event to an interrupt aggregator
> >>>>> + * @dev: Device pointer to source generating the event
> >>>>> + * @src_id: TISCI device ID of the event source
> >>>>> + * @src_index: Event source index within the device.
> >>>>> + * @virq: Linux Virtual IRQ number
> >>>>> + * @flags: Corresponding IRQ flags
> >>>>> + * @ack_needed: If explicit clearing of event is required.
> >>>>> + *
> >>>>> + * Creates a new irq and attaches to IA domain if virq is not specified
> >>>>> + * else attaches the event to vint corresponding to virq.
> >>>>> + * When using TISCI within the client drivers, source indexes are always
> >>>>> + * generated dynamically and cannot be represented in DT. So client
> >>>>> + * drivers should call this API instead of platform_get_irq().
> >>>>
> >>>> NAK. Either this fits in the standard model, or we adapt the standard
> >>>> model to catter for your particular use case. But we don't define a new,
> >>>> TI specific API.
> >>>>
> >>>> I have a hunch that if the IDs are generated dynamically, then the model
> >>>> we use for MSIs would fit this thing. I also want to understand what
> >>>
> >>> hmm..I haven't thought about using MSI. Will try to explore it. But
> >>> the "struct msi_msg" is not applicable in this case as device does not
> >>> write to a specific location.
> >>
> >> It doesn't need to. You can perfectly ignore the address field and
> >> only be concerned with the data. We already have MSI users that do not
> >> need programming of the doorbell address, just the data.
> >
>
> Just one more clarification.
>
> First let me explain the IRQ routes a bit deeply. As I said earlier
> there are three ways in which IRQ can flow in AM65x SoC
> 1) Device directly connected to GIC
> - Device IRQ --> GIC
> 2) Device connected to INTR.
> - Device IRQ --> INTR --> GIC
> 3) Devices connected to INTA.
> - Device IRQ --> INTA --> INTR --> GIC
>
> 1 and 2 are straight forward and we use DT for IRQ
> representation. Coming to 3 the trickier part is that Input to INTA
> and output from INTA and dynamically managed. To be more specific:
> - By hardware design there are certain set of physical global
> events(interrupts) attached to an INTA. Out of which a certain range
> are assigned to the current linux host that can be queried from
> system-controller.
> - Similarly out of all the INTA outputs(referenced as vints) a certain
> range can be used by the current linux host.
>
>
> So for configuring an IRQ route in case 3, the following steps are needed:
> - Device id and device resource index for which the interrupt is needed
THat is no different from a PCI device for example, where we need the
requester ID and the number of the interrupt in the MSI-X table.
> - A free event id from the range assigned to the INTA in this host context
> - A free vint from the range assigned to the INTA in this host context
> - A free gic IRQ from the range assigned to the INTR in this host context.
From what I understand of the driver, at least some of that is under
the responsibility of the firmware, right? Or is the driver under
control of all three parameters? To be honest, it doesn't really
matter, as the as far as the kernel is concerned, the irqchip drivers
are free to deal with the routing anyway they want.
> With the above information, linux should send a message to
> system-controller using TISCI protocol. After policing the given
> information, system-controller does the following:
> - Attaches the interrupt(INTA input) to the device resource index
> - Muxes the interrupt(INTA input) to corresponding vint(INTA output)
> - Muxes the vint(INTR input) to GIC irq(INTR output).
Isn't there a 1:1 mapping between *used* INTR inputs and outputs?
Since INTR is a router, there is no real muxing. I assume that the
third point above is just a copy-paste error.
>
> For grouping of interrupts, the same vint number is to be passed to
> system-controller for all the requests.
>
> Keeping all the above in mind, I see the following as software IRQ
> Domain Hierarchy:
>
> 1) INTA multi MSI --> 2)INTA -->3) MSI --> 4) INTR -->5) GIC
>
> INTA driver has to set a chained IRQ using virq allocated from its
> parent MSI. This is to differentiate the grouped interrupts within
> INTA.
>
> Inorder to cover the above two MSI domains, a new bus driver has to be
> created as I couldn't find a fit with the existing bus drivers.
>
> Does the above approach make sense? Please correct me if i am wrong.
I think this can be further simplified, as you seem to assume that
dynamic allocation implies MSI. This is not the case. You can
perfectly use dynamically allocated interrupts and still not use MSIs.
INTA is indeed a chained interrupt controller, as it may mux several
inputs onto a single output. But the output of INTA is not an MSI. It
is just a regular interrupt that can allocated when the first mapping
gets established.
Also, INTA shouldn't offer any "multi-MSI". This is a PCI-specific
concept that doesn't translate on any other type of bus. What you want
is something that should behave like MSI-X for its allocation part,
where each MSI gets allocated independently.
Hierarchy-wise, you should end-up with something like this:
TISCI-MSI Chained-intr SPI
Device ---------> INTA ------------> INTR ---> GIC
As for the bus, you have two choices:
- You create a new one altogether. See drivers/bus/fsl-mc for
an example of something totally over the top. This implies that all
your devices are following the exact same programming model for more
than just interrupts.
- You use the platform-MSI framework to build your interrupt
infrastructure, and you don't have to implement much more than
that.
Hope this helps,
M.
--
Jazz is not dead, it just smell funny.
next prev parent reply other threads:[~2018-10-28 13:31 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-18 15:40 [PATCH v2 00/10] Add support for TISCI irqchip drivers Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 01/10] firmware: ti_sci: Add support to get TISCI handle using of_phandle Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 02/10] firmware: ti_sci: Add support for RM core ops Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 03/10] firmware: ti_sci: Add support for IRQ management Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 04/10] firmware: ti_sci: Add RM mapping table for am654 Lokesh Vutla
2018-10-18 20:42 ` Rob Herring
2018-10-18 15:40 ` [PATCH v2 05/10] firmware: ti_sci: Add helper apis to manage resources Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 06/10] dt-bindings: irqchip: Introduce TISCI Interrupt router bindings Lokesh Vutla
2018-10-25 18:45 ` Rob Herring
2018-10-26 6:38 ` Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 07/10] irqchip: ti-sci-intr: Add support for Interrupt Router driver Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 08/10] dt-bindings: irqchip: Introduce TISCI Interrupt Aggregator bindings Lokesh Vutla
2018-10-18 15:40 ` [PATCH v2 09/10] irqchip: ti-sci-inta: Add support for Interrupt Aggregator driver Lokesh Vutla
2018-10-19 15:22 ` Marc Zyngier
2018-10-22 14:35 ` Lokesh Vutla
2018-10-23 13:50 ` Marc Zyngier
2018-10-26 6:39 ` Lokesh Vutla
2018-10-26 20:19 ` Lokesh Vutla
2018-10-28 13:31 ` Marc Zyngier [this message]
2018-10-29 13:04 ` Lokesh Vutla
2018-11-01 7:55 ` Peter Ujfalusi
2018-11-01 9:00 ` Marc Zyngier
2018-11-01 9:14 ` Peter Ujfalusi
2018-11-05 8:08 ` Lokesh Vutla
2018-11-05 15:36 ` Marc Zyngier
2018-11-05 16:20 ` Lokesh Vutla
2018-11-05 16:44 ` Marc Zyngier
2018-11-05 17:56 ` Lokesh Vutla
2018-10-31 16:39 ` Grygorii Strashko
2018-10-31 18:21 ` Marc Zyngier
2018-10-31 18:38 ` Santosh Shilimkar
2018-10-31 18:42 ` Marc Zyngier
2018-10-31 18:48 ` Santosh Shilimkar
2018-10-31 20:33 ` Grygorii Strashko
2018-11-01 14:52 ` Marc Zyngier
2018-11-01 15:36 ` Grygorii Strashko
2018-11-01 9:09 ` Peter Ujfalusi
2018-10-22 10:42 ` Peter Ujfalusi
2018-10-22 10:43 ` Peter Ujfalusi
2018-10-18 15:40 ` [PATCH v2 10/10] soc: ti: am6: Enable interrupt controller drivers Lokesh Vutla
2018-10-22 20:39 ` [PATCH v2 00/10] Add support for TISCI irqchip drivers Santosh Shilimkar
2018-10-23 8:17 ` Lokesh Vutla
2018-10-23 8:27 ` Marc Zyngier
2018-10-23 17:34 ` Santosh Shilimkar
2018-10-26 6:39 ` Lokesh Vutla
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=86va5myz7t.wl-marc.zyngier@arm.com \
--to=marc.zyngier@arm.com \
--cc=devicetree@vger.kernel.org \
--cc=grygorii.strashko@ti.com \
--cc=jason@lakedaemon.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lokeshvutla@ti.com \
--cc=nm@ti.com \
--cc=nsekhar@ti.com \
--cc=peter.ujfalusi@ti.com \
--cc=robh+dt@kernel.org \
--cc=ssantosh@kernel.org \
--cc=t-kristo@ti.com \
--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