On 07/31/2017 05:06 PM, Michael S. Tsirkin wrote: > On Mon, Jul 31, 2017 at 01:22:45PM +0000, Diana Madalina Craciun wrote: >>>> If we are to use a value of 0 for the constant in case of PCI devices, >>>> what happens if we have multiple PCI controllers? >>> I guess we'd use the PCI Segment number for that? >>> >>> >> Yes, we can use the PCI segment for this scenario. But this would mean >> different solutions for the same problem. The main problem is that we >> can have multiple entities in the system that are using MSIs (for now >> PCI and NXP non-PCI bus infrastructure >> (https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flwn.net%2FArticles%2F635905%2F&data=01%7C01%7Cdiana.craciun%40nxp.com%7C6b0c6c879af64718a21908d4d81d534e%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0&sdata=bpYMMqajWzgzdbdQgy%2FUYR7y%2BswyvwE%2BqFzs7wdIkkA%3D&reserved=0). >> I guess that we may have other >> platform devices that are using MSIs in the future. >> >> Thanks, >> Diana >> >> > Don't have the time to explore NXP in depth, sorry - there's > a lot of complexity there. > Could you maybe stick some bits to specify bus type in there? > It just looks very wrong to push low level things like this > that users have no interest in up the stack. > Let's generalize the problem a little bit, the NXP details just does not matter much. The problem we have is the following:
The GIC-ITS, the ARM MSI controller is using deviceIDs in order to remap the interrupts. Each device which is expected to send MSIs has a deviceID associated with it. These deviceIDs are configured into devices by software/firmware. There is support in the device tree to specify the correlation between requesterID and deviceID: "msi-map: Maps a Requester ID to an MSI controller and associated msi-specifier data. The property is an arbitrary number of tuples of (rid-base,msi-controller,msi-base,length)" (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/pci/pci-msi.txt) Our problem is that we have to allocate these deviceIDs in QEMU as well and we have to ensure that they are unique. Currently, for PCI, the assumption requesterID=deviceID is made which will no longer be true in case other devices are added. So we need a way (preferable a general one) to allocate these IDs to different devices in the system in a consistent way which will ensure that two devices do not share the same ID. The reason I put this ID into the controller itself is because on real hardware is actually programmed into the controller. It is needed (for example) when the MSIs are sent. Thanks, Diana