Thread (84 messages) 84 messages, 11 authors, 2022-11-17

Re: [RFC PATCH v3 4/7] bus/cdx: add cdx-MSI domain with gic-its domain as parent

From: Marc Zyngier <maz@kernel.org>
Date: 2022-09-08 08:09:15

On Wed, 07 Sep 2022 14:18:52 +0100,
"Radovanovic, Aleksandar" [off-list ref] wrote:
quoted
quoted
As Marc mentions, CDX
MSI writes are downstream of the SMMU and, if SMMU does not provide
identity mapping for GITS_TRANSLATER, then we have a problem and may
need to allow the OS to write the address part. However, even if we
did, the CDX hardware is limited in that it can only take one
GITS_TRANSLATER register target address per system, not per CDX
device, nor per MSI vector.
If the MSI generation is downstream of the SMMU, why should the SMMU
provide a 1:1 mapping for GITS_TRANSLATER? I don't think it should provide a
mapping at all in this case. But it looks like I don't really understand how
these things are placed relative to each other... :-/
Apologies, I got my streams confused. It is _upstream_ of the SMMU,
it does go through SMMU mapping.
OK, so you definitely need a mapping, but it cannot be a translation,
and it needs to be in all the possible address spaces. OMG.
quoted
quoted
As for the data part (EventID in GIC parlance), this is always going
to be the CDX device-relative vector number - I believe this can't be
changed, it is a hardware limitation (but I need to double-check).
That should be OK, though, as I believe this is exactly what Linux
would write anyway, as each CDX device should be in its own IRQ domain
(i.e. have its own ITS device table).
But that's really the worse part. You have hardcoded what is the
*current* Linux behaviour. Things change. And baking SW behaviour into a
piece of HW looks incredibly shortsighted...
For posterity, I'm not an RTL designer/architect, so share your
sentiment to a certain extent. That said, I expect the decision was
not based on Linux or any other SW behaviour, but because it is the
most straightforward and least expensive way to do it. Having an
EventID register for each and every MSI source just so you can
program it in any random order costs flops and all the associated
complexity of extra RTL logic (think timing closure, etc.), so
trade-offs are made. The fact that it matches current Linux
behaviour means we just got lucky...
Yeah, but that's not the only problem: there is no guarantee that we
have enough LPIs to allocate for the device, so we'll perform a
partial allocation (8 instead of 32 LPIs, for example).

How do you tell the device which events are valid? As far as I can
see, you can't, and I guess it will fire on all of them, resulting in
interrupts being dropped on the floor.

	M.

-- 
Without deviation from the norm, progress is not possible.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help