On Sun, 28 Mar 2021 15:09:12 +0100, Pali Rohár <pali@xxxxxxxxxx> wrote: [...] > Aardvark HW allows to mask summary TOP, summary CORE, individual CORE > (PME, ERR, INTA, INTB, ...), summary MSI and individual MSI bits > interrupts, but not final 16 bit MSI interrupt number. MSI bits are low > 5 bits of 16 bit interrupt number. So it is not possible to mask or > unmask MSI interrupt number X. It is possible to only mask/unmask all > MSI interrupts which low 5 bits is specific value. If you cannot mask individual MSIs, you have two choices: - you only support MSI-X *or* MSI (not multi-MSI) and mask interrupts at the device level - you restrict the number of MSIs to those you can actually control, and that's 2^5 = 32 (which is what the driver currently supports, I believe). > > Also aardvark HW allows to globally enable / disable processing of MSI > interrupts. Masking summary MSI interrupt just cause that GIC does not > trigger it but from registers I can read it (e.g. when GIC calls > aardvark interrupt handler for other non-MSI interrupt). > > And I would like to ask, what is in this hierarchy from kernel point of > view "bottom part of MSI" and what is the "upper part of MSI"? As in > above diagram there are 3 MSI layers. The upper part is the bus-specific part, PCI in your case. You don't need to implement it. The bottom part controls the HW, and deals with all the masking, acknoledgement, allocation and demuxing. > And which irq enable/disable/mask/unmask/ack callbacks I need to > implement for legacy irq, bottom MSI and upper MSI domains? You need to provide what makes sense for your HW. I would guess that you need at least mask/unmask and most probably ack at both levels, and of course a compose_msg callback at the bottom level. > And where should I add code which globally enable/disable receiving of > aardvark MSI interrupts? Currently it is part of aardvark driver probe > function. Seems like the logical place to put it. The kernel deals with individual interrupts, and not with global switches. Thanks, M. -- Without deviation from the norm, progress is not possible.