Hello, everyone!
I have a question regarding MSI handling in an environment where the GIC-600’s ITS is supported.I understand that when an EventID is written to the GITS_TRANSLATER register by an external device, it triggers the ITS to return LPI IDs.However, ITS then needs to issue a command to the Redistributor to set the corresponding bit in the LPI pending table for that ID.This command (INT) is written to and executed via the command queue, correct? I have the following questions:
I understand that the command queue is written by the OS on the PE. So how does the OS know to write the ITS command (INT)? Or is it not the case that the OS writes this command?
If the answer to question 1 is that the command isn’t issued by the OS,does that mean the ITS is designed to automatically execute the INT command when a trigger occurs on the GITS_TRANSLATER register during its initialization?
Thank you
steve jeong said:However, ITS then needs to issue a command to the Redistributor to set the corresponding bit in the LPI pending table for that ID.This command (INT) is written to and executed via the command queue, correct?
Not exactly.
Yes, the ITS needs to forward a message to the Redistributor to tell it the interrupt became pending. The mechanism for doing so is IMPDEF, so part of the internal operation of the GIC-600. And what is going to get sent is the result of the translation (i.e. the INTID) not the DeviceID/EventID (which the Redistributes don't care about).
The INT command is a way for software to emulate an MSI arriving at GIT_TRANSLATER. The command includes a DeviceID and EventID, which get translated in the same way as if they'd come from an MSI. The target Redistributor won't know whether an interrupt arriving from the ITS came from an MSI or an INT command.
Thanks a lot!
I have one more question.Is the translation operation of the ITS performed as part of the internal hardware operation of the GIC?During ITS initialization, the Device Table and Collection Table are allocated in memory, and infos are mapped.
After the initialize, when ITS is received MSI and ITS transmittes LPI ID to the Redistributor,is this operation entirely handled by the hardware?Does the referencing the interrupt table occur without any software intervention?
That's right. Software is responsible for allocating the various tables and then creating the required mappings. Hardware is responsible for translating incoming MSIs (or INT commands) using the current set of mappings.
Great!!!
In my opinion, it is observed to be that there would be almost no commands written to the command queue by the software after ITS initialization, except for things like synchronizing or resolving stalled commands,,.. right?