Invalidate ITS caches during suspend/resume cycle to commit the changes
authorpatrick <patrick@openbsd.org>
Tue, 25 Apr 2023 10:35:48 +0000 (10:35 +0000)
committerpatrick <patrick@openbsd.org>
Tue, 25 Apr 2023 10:35:48 +0000 (10:35 +0000)
commitc60fe750b505dbc27c4072dd1c4c9fac9820c2f0
tree81b621ff2e3576fa5867c5171066dabb994f0392
parent92e946e3012de08bfa2313b3b41b716a3f504879
Invalidate ITS caches during suspend/resume cycle to commit the changes
to the LPIs.  So far we have only flipped the enable bit in the shared
memory, but it turns out that the state is actually cached in the ITS.
We have to send an invalidation to flush it, both after disabling and
enabling the LPI.  We probably also should do it after establishing an
interrupt, and especially when disestablishing, e.g. for PCIe hotplug.

Since we do not currently store the device/event IDs we cannot do a
targeted invalidation and have to fall back to sending one that clears
the whole cache to each ITS.  In the future we should keep some more
state per established LPI.

Furthermore we currently keep a list of LPIs in each ITS instance, which
means in case we have multiple ITS we will re-use LPI numbers.  But since
there's no relevant HW so far that has those, there's no rish to fix that.

This fixes suspend/resume on x13s with NVMe+MSI.

ok kettenis@
sys/arch/arm64/dev/agintc.c