Arm recommends that the operating system is provided with pointers to the start of the Distributor, every ITS, and the first Redistributor page on each chip.
To verify that the pages are of GIC registers, these pointers can be
checked against the discovery registers, which start at offset
0xFFD0 for each GIC page. These registers allow
discovery of the architecture version and, for GIC-600, whether the page contains
the Distributor, ITS, or Redistributor registers. When this information is known,
additional information can be obtained from registers specific to each page.
For Redistributors, Arm recommends that you examine GICR_TYPER to determine:
- Whether the implementation has two or four pages per Redistributor that are based on the features implemented. It can be inferred that GIC-600 has only two pages for each Redistributor because the feature bits in that register indicate that it does not support virtual LPIs.
- Whether it is the last Redistributor in the series of pages.
- Which core the Redistributor is for, based on affinity values.
This information allows you to iteratively search through all Redistributors in a discovery process.
The GITS_TYPER register in the GIC-600 indicates that you must program the ITS with unique ProcessorNumbers, instead of physical target addresses. The GICR_TYPER contains the unique ProcessorNumber that you must use to reference a Redistributor when programming the ITS.
NoteIn a multichip configuration, the ProcessorNumber upper bits are derived from the chip_id tie-off. Therefore, make sure that the chip_id value is defined before the registers are read.
For more information, see Arm® GICv3 and GICv4 Software Overview.