January 3, 2022

Orange Pi 4 (Rockchip 3399) Introduction to the GIC 500

Here is what I know about the GIC in general. The GIC in essence is a matrix for routing interrupts to different cores. The GIC can be configured so that one core handles interrupts from one device and another core handles interrupts from another device. An operating system could be arranged so that one "master" core handled all interrupts and other cores were devoted to running user processes. Alternately one core could be devoted to network processing and it alone could receive network device interrupts. The GIC is versatile and allows designs of all sorts to be conceived. Note that designs like I just described run contrary to general SMP. However having a big/little core discrimination also runs counter to SMP (and linux ignores those core distinctions assigning cores at random). But I am waxing philosophical and need to get back to GIC500 details.

The compatibility table above shows that the GIC500 can support A53 and A72 cores in v2 and v3 modes. The GIC500 can support up to 128 cores, whereas the GIC400 is limited to 8. The GIC500 supports the GICv3 specification, whereas the GIC400 supports GICv2 only.

PDF documents entitled "GIC Architecture specification v3 and v4" are available. What seems to be the latest one is 921 pages and dated 2021.

Notes on the GIC-500

It supports up to 128 cores and only works with ARMv8 (64 bit) processors. It complies with version 3.0 of the GIC architecture specification.

It has a single base address. There seem to be 3 main components:


Have any comments? Questions? Drop me a line!

Tom's electronics pages / tom@mmto.org