Arm Generic Interrupt Controller Architecture Specification GIC Architecture Version 3 and Version 4
Arm Generic Interrupt Controller Architecture Specification GIC Architecture Version 3 and Version 4
Architecture Specification
GIC architecture version 3.0 and version 4.0
Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved.
ARM IHI 0069D (ID072617)
ARM Generic Interrupt Controller Architecture Specification
Change History
Some of the information in this specification was previously published in ARM® Generic Interrupt Controller, Architecture
version 2.0, Architecture Specification.
Proprietary Notice
This document is protected by copyright and other related rights and the practice or implementation of the information contained
in this document may be protected by one or more patents or pending patent applications. No part of this document may be
reproduced in any form by any means without the express prior written permission of ARM Limited (“ARM”). No license,
express or implied, by estoppel or otherwise to any intellectual property rights is granted by this document unless
specifically stated.
Your access to the information in this document is conditional upon your acceptance that you will not use or permit others to use
the information for the purposes of determining whether implementations infringe any patents.
THIS DOCUMENT IS PROVIDED “AS IS”. ARM PROVIDES NO REPRESENTATIONS AND NO WARRANTIES,
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, SATISFACTORY QUALITY, NON-INFRINGEMENT OR FITNESS FOR A PARTICULAR
PURPOSE WITH RESPECT TO THE DOCUMENT. For the avoidance of doubt, ARM makes no representation with respect to,
and has undertaken no analysis to identify or understand the scope and content of, third party patents, copyrights, trade secrets, or
other rights.
This document may be translated into other languages for convenience, and you agree that if there is any conflict between the
English version of this document and any translation, the terms of the English version shall prevail.
TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL ARM BE LIABLE FOR ANY DAMAGES,
INCLUDING WITHOUT LIMITATION ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, OR
CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
OUT OF ANY USE OF THIS DOCUMENT, EVEN IF ARM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
This document consists solely of commercial items. You shall be responsible for ensuring that any use, duplication or disclosure
of this document complies fully with any relevant export laws and regulations to assure that this document or any portion thereof
is not exported, directly or indirectly, in violation of such export laws. Use of the word “partner” in reference to ARM’s customers
is not intended to create or refer to any partnership relationship with any other company. ARM may make changes to this document
at any time and without notice.
If any of the provisions contained in these terms conflict with any of the provisions of any signed written agreement specifically
covering this document with ARM, then the signed written agreement prevails over and supersedes the conflicting provisions of
these terms.
Words and logos marked with ® or ™ are registered trademarks or trademarks of ARM Limited or its affiliates in the EU and/or
elsewhere. All rights reserved. Other brands and names mentioned in this document may be the trademarks of their respective
owners. You must follow the ARM trademark usage guidelines http://www.arm.com/about/trademark-usage-guidelines.php.
ii Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM Limited. Company 02557590
registered in England.
110 Fulbourn Road, Cambridge, England CB1 9NJ.
LES-PRE-20327
In this document, where the term ARM is used to refer to the company it means “ARM or any of its subsidiaries as appropriate”.
Confidentiality Status
This document is Non-Confidential. The right to use, copy and disclose this document may be subject to license restrictions in
accordance with the terms of the agreement entered into by ARM and the party that ARM delivered this document to.
Product Status
Web Address
http://www.arm.com
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. iii
ID072617 Non-Confidential
iv Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Contents
ARM Generic Interrupt Controller Architecture
Specification GIC architecture version 3.0 and
version 4.0
Preface
About this specification ............................................................................................... x
Using this specification ............................................................................................... xi
Conventions ............................................................................................................... xii
Additional reading ..................................................................................................... xiii
Feedback .................................................................................................................. xiv
Chapter 1 Introduction
1.1 About the Generic Interrupt Controller (GIC) .......................................................... 1-16
1.2 Terminology ........................................................................................................... 1-19
1.3 Supported configurations and compatibility ............................................................ 1-23
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. v
ID072617 Non-Confidential
4.3 Private Peripheral Interrupts .................................................................................. 4-54
4.4 Software Generated Interrupts ............................................................................... 4-55
4.5 Shared Peripheral Interrupts .................................................................................. 4-56
4.6 Interrupt grouping ................................................................................................... 4-58
4.7 Enabling the distribution of interrupts ..................................................................... 4-63
4.8 Interrupt prioritization ............................................................................................. 4-65
vi Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
A.3 The GIC Stream Protocol .................................................................................... A-722
A.4 Alphabetic list of command and response packet formats .................................. A-727
Glossary
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. vii
ID072617 Non-Confidential
viii Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Preface
This preface introduces the ARM® Generic Interrupt ControllerArchitecture Specification. It contains the following
sections:
• About this specification on page x.
• Using this specification on page xi.
• Conventions on page xii.
• Additional reading on page xiii.
• Feedback on page xiv.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ix
ID072617 Non-Confidential
Preface
About this specification
This specification describes the ARM Generic Interrupt Controller (GIC) architecture. It defines version 3.0
(GICv3) and version 4.0 (GICv4) of the GIC architecture.
Throughout this document, references to the GIC or a GIC refer to a device that implements this GIC architecture.
Unless the context makes it clear that a reference is to an IMPLEMENTATION DEFINED feature of the device, these
references describe the requirements of this specification.
Intended audience
This specification is written for users who want to design, implement, or program the GIC in a range of
ARM-compliant implementations from simple uniprocessor implementations to complex multiprocessor systems.
It does not assume familiarity with previous version of the GIC.
The specification assumes that users have some experience of ARM products, and are familiar with the terminology
that describes the ARMv8 architecture. See the ARM® Architecture Reference Manual, ARMv8, for ARMv8-A
architecture profile for more information.
x Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Preface
Using this specification
Chapter 1 Introduction
Read this for an overview of the GIC, and information about the terminology used in this document.
Glossary
Read this for definitions of some of the terms used in this specification.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. xi
ID072617 Non-Confidential
Preface
Conventions
Conventions
The following sections describe conventions that this book can use:
• Typographic conventions.
• Signals.
• Numbers.
• Pseudocode descriptions.
Typographic conventions
The typographical conventions are:
bold Denotes signal names, and is used for terms in descriptive lists, where appropriate.
monospace Used for assembler syntax descriptions, pseudocode, and source code examples.
Also used in the main text for instruction mnemonics and for references to other items appearing in
assembler syntax descriptions, pseudocode, and source code examples.
SMALL CAPITALS
Used for a few terms that have specific technical meanings, and are included in the Glossary.
Signals
In general this specification does not define processor signals, but it does include some signal examples and
recommendations. The signal conventions are:
Signal level The level of an asserted signal depends on whether the signal is active-HIGH or
active-LOW. Asserted means:
• HIGH for active-HIGH signals
• LOW for active-LOW signals.
Numbers
Numbers are normally written in decimal. Binary numbers are preceded by 0b, and hexadecimal numbers by 0x. In
both cases, the prefix and the associated value are written in a monospace font, for example 0xFFFF0000.
Pseudocode descriptions
This specification uses a form of pseudocode to provide precise descriptions of the specified functionality. This
pseudocode is written in a monospace font, and follows the conventions described in the ARM® Architecture
Reference Manual, ARMv8, for ARMv8-A architecture profile and the ARM® Architecture Reference Manual,
ARMv7-A and ARMv7-R edition.
xii Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Preface
Additional reading
Additional reading
This section lists relevant publications from ARM and third parties.
ARM publications
• AMBA® 4 AXI4-Stream Protocol Specification (ARM IHI 0051).
• ARM® Architecture Reference Manual, ARMv7-A and ARMv7-R edition (ARM DDI 0406).
• ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile (ARM DDI 0487).
• ARM® Generic Interrupt Controller, Architecture version 2.0, Architecture Specification (ARM IHI 0048).
• ARM® CoreSight™ Architecture Specification v3.0 (ARM IHI 0029).
• ARM® Server Base System Architecture (SBSA) (ARM-DEN-0029).
• GICv3 and GICv4 Software Overview (DAI 0492).
• Application Note GIC Stream Protocol Interface (ARM-ECM-0495013).
Other publications
The following books are referred to in this manual, or provide more information:
• JEDEC Solid State Technology Association, Standard Manufacture’s Identification Code, JEP106.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. xiii
ID072617 Non-Confidential
Preface
Feedback
Feedback
xiv Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 1
Introduction
This chapter provides an introduction to the GIC architecture. It provides an overview of the GIC architecture, and
of the features that are new to the architecture. It also provides definitions of the terminology that is used throughout
this document. It contains the following sections:
• About the Generic Interrupt Controller (GIC) on page 1-16.
• Terminology on page 1-19.
• Supported configurations and compatibility on page 1-23.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-15
ID072617 Non-Confidential
1 Introduction
1.1 About the Generic Interrupt Controller (GIC)
The GIC is an architected resource that supports and controls interrupts. It provides:
• Registers for managing interrupt sources, interrupt behavior, and the routing of interrupts to one or more PEs.
• Support for:
— The ARMv8 architecture.
— Locality-specific Peripheral Interrupts (LPIs).
— Private Peripheral Interrupts (PPIs).
— Software Generated Interrupts (SGIs).
— Shared Peripheral Interrupts (SPIs).
— Interrupt masking and prioritization.
— Uniprocessor and multiprocessor systems.
— Wakeup events in power management environments.
For each PE, the GIC architecture describes how IRQ and FIQ interrupts can be generated from different types of
interrupts within the system. The ARMv8-A Exception model then describes how the PE handles these IRQ and
FIQ interrupts.
Interrupt handling also depends on other aspects of the ARMv8 architecture, such as the Security state, and, for
Non-secure interrupts, support for virtualization. The ARM architecture provides two Security states, each with an
associated physical memory address space:
• Secure state.
• Non-secure state.
The GIC architecture supports the routing and handling of interrupts that are associated with both Security states.
See Interrupt grouping and security on page 4-58 for more information.
The GIC architecture supports the ARMv8-A model for handling virtual interrupts that are associated with a virtual
machine, VM. ARMv8-A supports virtualization in Non-secure state only. A virtualized system has:
• A hypervisor that must include a component executing at EL2, which is responsible for switching between
VMs.
• Several VMs executing at Non-secure EL1.
• Applications executing at Non-secure EL0 on a VM.
For more information about the ARMv8 architecture, see ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile. For more information about VMs, see About GIC support for virtualization on
page 5-78.
This specification defines version 3.0 (GICv3) and version 4.0 (GICv4) of the GIC architecture. Version 2.0
(GICv2) is only described in terms of the GICv3 optional support for legacy operation, see GICv3 with legacy
operation on page 1-26. For detailed information about the GICv2 architecture, see the ARM® Generic Interrupt
Controller, Architecture version 2.0, Architecture Specification.
Note
Because GICv4 is an extension of GICv3, all references to GICv3 in this manual apply equally to GICv4, unless
explicitly indicated otherwise.
1-16 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.1 About the Generic Interrupt Controller (GIC)
Interrupt grouping
Interrupt grouping is the mechanism that is used by GICv3 to align interrupt handling with the
ARMv8 Exception model:
• Group 0 physical interrupts are expected to be handled at the highest implemented Exception
level.
• Secure Group 1 physical interrupts are expected to be handled at Secure EL1.
• Non-secure Group 1 physical interrupts are excepted to be handled at Non-secure EL2 in
systems using virtualization, or at Non-secure EL1 in systems not using virtualization.
These interrupt groups can be mapped onto the ARMv8 FIQ and IRQ signals as described in
Interrupt grouping on page 4-58, using configuration bits from the ARMv8 architecture and
configuration bits within the GICv3 architecture.
In GICv3, interrupt grouping supports:
• Configuring each interrupt as Group 0, Secure Group 1, or Non-secure Group 1.
• Signaling Group 0 physical interrupts to the target PE using the FIQ exception request.
• Signaling Group 1 physical interrupts to the target PE in a manner that allows them to be
handled using the IRQ handler in their own Security state. The exact handling of Group 1
interrupts depends on the current Exception level and Security state, as described in
Chapter 4 Physical Interrupt Handling and Prioritization.
• A unified scheme for handling the priority of Group 0 and Group 1 interrupts.
Note
The original SGI format is only available in GIC implementations that support legacy operation.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-17
ID072617 Non-Confidential
1 Introduction
1.1 About the Generic Interrupt Controller (GIC)
Note
In a GIC that supports legacy operation, memory-mapped access is available for all architected GIC
registers.
Unless indicated otherwise, this manual describes the GICv3 architecture in a system with affinity routing, System
register access, and two Security states, enabled. This means that:
• GICD_CTLR.ARE_NS == 1.
• GICD_CTLR.ARE_S == 1.
• GICD_CTLR.DS == 0.
From GICv3 onwards, legacy operation with the ARE and SRE control bits set to 0 is deprecated. See Chapter 10
Legacy Operation and Asymmetric Configurations for more information about legacy operation.
1-18 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.2 Terminology
1.2 Terminology
The architecture descriptions in this manual use the same terminology that is used for the ARMv8 architecture. For
more information about this terminology, see the introduction to Part A of the ARM® Architecture Reference
Manual, ARMv8, for ARMv8-A architecture profile.
In addition, the AArch64 System register names are used where appropriate, in preference to listing both the
AArch32 and AArch64 System register names. The ELx suffix on the AArch64 register name indicates the lowest
Exception level at which the register can be accessed. The individual AArch64 System register descriptions contain
a reference to the AArch32 System register that provides the same functionality.
The following sections define the architectural terms used in this manual:
• Interrupt types.
• Interrupt states on page 1-20.
• Models for handling interrupts on page 1-20.
• Additional terms on page 1-21.
Note
Commonly, it is expected that PPIs are used by different instances of the same interrupt source on
each PE, thereby allowing a common interrupt number to be used for PE specific events, such as the
interrupts from a private timer.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-19
ID072617 Non-Confidential
1 Introduction
1.2 Terminology
• It is asserted on detection of a rising edge of an interrupt signal and then, regardless of the state of the signal,
remains asserted until the interrupt is acknowledged by software.
Active An interrupt that has been acknowledged by a PE and is being handled, so that another
assertion of the same interrupt is not presented as an interrupt to a PE, until the initial
interrupt is no longer active.
LPIs do not have an active state, and transition to the inactive state on being acknowledged
by a PE.
Active and pending An interrupt that is active from one assertion of the interrupt, and is pending from a
subsequent assertion.
LPIs do not have an active and pending state, and transition to the inactive state on being
acknowledged by a PE.
The GIC maintains state for each supported interrupt. The state machine defines the possible transitions between
interrupt states, and, for each interrupt type, the conditions that cause a transition. See Interrupt handling state
machine on page 4-51 for more information.
1-20 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.2 Terminology
1 of N model
This model applies to SPIs only. The interrupt is targeted at a specified set of PEs, and is taken on
only one PE in that set. The PE that takes the interrupt is selected in an IMPLEMENTATION DEFINED
manner. The architecture applies restrictions on which PEs can be selected, see Enabling the
distribution of interrupts on page 4-63.
Note
• The ARM GIC architecture guarantees that a 1 of N interrupt is presented to only one PE
listed in the target PE set.
• A 1 of N interrupt might be presented to a PE where the interrupt is not the highest priority
interrupt, or where the interrupt is masked by ICC_PMR_EL1 or within the PE. See Interrupt
lifecycle on page 4-46.
For SPIs during legacy operation, this model applies when more than one target PE is specified in
the target registers.
The hardware implements a mechanism to determine which PE activates the interrupt, if more than
one PE can handle the interrupt.
Idle priority
In GICv3, the idle priority, 0xFF, is the running priority read from ICC_RPR_EL1 on the CPU
interface when no interrupts are active on that interface. During legacy operation, the idle priority,
as read from GICC_RPR, is IMPLEMENTATION DEFINED, as in GICv2.
Message-based interrupt
A message-based interrupt is an interrupt that is asserted because of a memory write access to an
assigned address. Physical interrupts can be converted to message-based interrupts. Message-based
interrupts can support either level-sensitive or edge-triggered behavior, although LPIs are always
edge-triggered.
GICv3 supports two mechanisms for message-based interrupts:
• A mechanism for communicating an SPI, where the assigned address is held in the
Distributor. In this case the message-based interrupt can be either level-sensitive or
edge-triggered.
• A mechanism for communicating an LPI, where the assigned address is held in an ITS, if an
ITS is implemented, or in the Redistributor.
ARM recommends the use of LPIs to provide support for MSI and MSI-X capabilities in systems
that support PCIe. See Chapter 6 Locality-specific Peripheral Interrupts and the ITS for more
information. GICv3 also includes architected support for signaling SPIs using message-based
interrupts, see Shared Peripheral Interrupts on page 4-56.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-21
ID072617 Non-Confidential
1 Introduction
1.2 Terminology
Physical interrupt
An interrupt that targets a physical PE is a physical interrupt. It is signaled to the PE by the physical
CPU interface to which the PE is connected.
Running priority
At any given time, the running priority of a CPU interface is either:
• The group priority of the active interrupt, for which there has not been a priority drop on that
interface.
• If there is no active interrupt for which there has not been a priority drop on the interface, the
running priority is the idle priority 0xFF.
Sufficient priority
The GIC CPU interface compares the priority of an enabled, pending interrupt with all of the
following, to determine whether the interrupt has sufficient priority:
• The Priority Mask Register, ICC_PMR_EL1.
• The preemption settings for the interface, as indicated by ICC_BPR0_EL1 and
ICC_BPR1_EL1.
• The current running priority, as indicated by ICC_RPR_EL1 for the CPU interface.
If the interrupt has sufficient priority it is signaled to the connected PE.
Virtual interrupt
An interrupt that targets a VM is a virtual interrupt. It is signaled by the associated virtual CPU
interface. See Chapter 5 Virtual Interrupt Handling and Prioritization for more information.
Maintenance interrupt
A physical interrupt that signals key events associated with interrupt handling on a VM to allow the
hypervisor to track those events. These events are processed by the hypervisor, and include enabling
and disabling a particular group of interrupts. See Maintenance interrupts on page 5-85 for more
information.
1-22 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.3 Supported configurations and compatibility
GICv3 supports interrupt handling for all of these configurations, and for execution in both AArch32 state and
AArch64 state, in accordance with the interprocessing rules described in ARM® Architecture Reference Manual,
ARMv8, for ARMv8-A architecture profile.
• An asymmetric configuration, where affinity routing is enabled for Non-secure state and disabled for Secure
state. This provides support for a Secure legacy environment.
• A legacy-only environment where affinity routing is disabled for both Secure state and Non-secure state.
When System register access is enabled, control and configuration of the GIC architecture is handled by architected
System registers and the associated accesses that define the GIC programmers’ model. See Chapter 8 Programmers’
Model for more information.
Some registers are always memory-mapped, while others use System register access in GICv3, and
memory-mapped access for legacy operations.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-23
ID072617 Non-Confidential
1 Introduction
1.3 Supported configurations and compatibility
Table 1-2 shows the registers that are memory-mapped for legacy operations, but are replaced by System register
access in GICv3 when System register access is enabled.
Note
• An operating system executing at Non-secure EL1 uses either the GICC_* or the GICV_* registers to control
interrupts, and is unaware of the difference.
Table 1-3 shows the registers that GICv3 supports when System register access is enabled.
The ARMv8 support for virtualization and the Exception level at which a PE is operating determine whether the
physical CPU interface registers or the virtual CPU interface registers are accessed.
For more information about register names and the factors that affect which register to use, see GIC System register
access on page 8-159.
1-24 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.3 Supported configurations and compatibility
AArch64 AArch32
Purpose
State Field State Field
I I IRQ pending
F F FIQ pending
ID_PFR1_EL1 GIC ID_PFR1 GIC System register GIC CPU interface support
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-25
ID072617 Non-Confidential
1 Introduction
1.3 Supported configurations and compatibility
AArch64 AArch32
Purpose
State Field State Field
SCR_EL3 RW SCR RES0 Execution state control for lower Exception levels
(AArch64 state only)
NS NS Non-secure bit
a. Process state, PSTATE, is an abstraction of the process state information. For more information, see ARM® Architecture Reference Manual,
ARMv8, for ARMv8-A architecture profile.
For more information about these registers and fields, see ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile.
Table 1-5 Control bits for affinity routing and System register access
ICC_SRE_EL1.SREa ICC_SRE.SREa -
ICC_SRE_EL2.SRE ICC_HSRE.SRE -
ICC_SRE_EL3.SRE ICC_MSRE.SRE -
- - GICD_CTLR.ARE_S
- - GICD_CTLR.ARE_NS
1-26 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
1 Introduction
1.3 Supported configurations and compatibility
In a GICv3 implementation that supports legacy operation, a maximum of eight PEs, whose individual support for
a memory-mapped register interface is IMPLEMENTATION DEFINED, are available as physical or virtual interrupt
targets within a given VM. It is IMPLEMENTATION DEFINED:
• Whether legacy operation applies to execution in both Security states, or to execution in Secure state only.
• Whether legacy operation is available only in the virtual CPU interface when executing in Non-secure EL1.
In GICv3, the following restrictions apply to legacy operation:
• The GICv2 feature GICC_CTLR.AckCtl was deprecated in GICv2 and is not supported in GICv3.
Correspondingly, even in legacy mode, the behavior is as if the GICC_CTLR.AckCtl bit described in GICv2
is RAZ/WI.
Note
In a GICv3 implementation that supports legacy operation, a VM is permitted to control Non-secure
interrupts when GICV_CTLR.AckCtl set to 1. However, ARM deprecates the use of GICV_CTLR.AckCtl.
• The GICv2 configuration lockdown feature and the associated CFGSDISABLE input signal are not
supported.
• A hypervisor executing at EL2 can control virtual interrupts only for the PE on which the EL2 software is
executing, and cannot control virtual interrupts on other PEs
This allows a secure operating system, running at Secure EL1, to use legacy functionality, provided that it does not
configure Non-secure interrupts.
In GICv2 software executing in Secure state could use GICC_AIAR, GICC_AEOIR, GICC_AHPPIR, and
GICC_ABPR to control interrupts in Non-secure state. There is no equivalent functionality in asymmetric
configurations.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 1-27
ID072617 Non-Confidential
1 Introduction
1.3 Supported configurations and compatibility
1-28 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 2
Distribution and Routing of Interrupts
This chapter describes the distribution and routing of interrupts to a target PE using affinity routing, and the
assignment of interrupt IDs. It contains the following sections:
• The Distributor and Redistributors on page 2-30.
• INTIDs on page 2-31.
• Affinity routing on page 2-35.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 2-29
ID072617 Non-Confidential
2 Distribution and Routing of Interrupts
2.1 The Distributor and Redistributors
The Redistributor provides the configuration settings for PPIs and SGIs.
A Redistributor always presents the pending interrupt with the highest priority to the CPU interface in finite time.
For more information about interrupt prioritization, see Interrupt prioritization on page 4-65.
2-30 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
2 Distribution and Routing of Interrupts
2.2 INTIDs
2.2 INTIDs
Interrupts are identified using ID numbers (INTIDs). The range of INTIDs supported by GICv3 is IMPLEMENTATION
DEFINED, according to the following rules:
• For the number of INTID bits supported in the Distributor and Redistributor:
— If LPIs are not supported, the ID space in the Distributor is limited to 10 bits. This is the same as in
earlier versions of the GIC architecture.
— If LPIs are supported, the INTID field is IMPLEMENTATION DEFINED in the range of 14-24 bits, as
described in the register description for GICD_TYPER.
Note
A Redistributor can be configured through GICR_PROPBASER to use fewer bits than specified by
GICD_TYPER.
The valid INTID space is governed by the implemented size in the CPU interface and the Distributor. It is a
programming error to forward an INTID that is greater than the supported size to a CPU interface.
Unused INTID bits are RAZ. This means that any affected bit field is zero-extended.
Table 2-1 shows how the INTID space is partitioned by interrupt type.
0 – 15 SGI These interrupts are local to a CPU interface. INTIDs 0-1023 are compatible
with earlier versions of the GIC
16 – 31 PPI architecture
32 – 1019 SPI Shared peripheral interrupts that the Distributor can
route to either a specific PE, or to any one of the PEs in
the system that is a participating node, see
Participating nodes on page 2-36.
1020 – 1023 Special interrupt Interrupt IDs that are reserved for special purposes, as
number Special INTIDs on page 2-32 describes.
Note
The ARM recommended PPI INTID assignments are provided by the Server Base System Architecture, see ARM®
Server Base System Architecture (SBSA).
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 2-31
ID072617 Non-Confidential
2 Distribution and Routing of Interrupts
2.2 INTIDs
The GICv4 architecture provides a unique INTID space for each VM by supporting a vPEID in addition to the
INTID space. See About GIC support for virtualization on page 5-78 for more information about VMs and The ITS
on page 6-99 for more information about vPEIDs.
ARM strongly recommends that implemented interrupts are grouped to use the lowest INTID numbers and as small
a range of INTIDs as possible. This reduces the size of the associated tables in memory that must be implemented,
and that discovery routines must check.
1020 The GIC returns this value in response to a read of ICC_IAR0_EL1 or ICC_HPPIR0_EL1 at EL3,
to indicate that the interrupt being acknowledged is one which is expected to be handled at Secure
EL1. This INTID is only returned when the PE is executing at EL3 using AArch64 state, or when
the PE is executing in AArch32 state in Monitor mode.
This value can also be returned by reads of ICC_IAR1_EL1 or ICC_HPPIR1_EL1 at EL3 when
ICC_CTLR_EL3.RM == 1, see Asymmetric operation and the use of ICC_CTLR_EL3.RM on
page 10-714.
1021 The GIC returns this value in response to a read of ICC_IAR0_EL1 or ICC_HPPIR0_EL1 at EL3,
to indicate that the interrupt being acknowledged is one which is expected to be handled at
Non-secure EL1 or EL2. This INTID is only returned when the PE is executing at EL3 using
AArch64 state, or when the PE is executing in AArch32 state in Monitor mode.
This value can also be returned by reads of ICC_IAR1_EL1or ICC_HPPIR1_EL1 at EL3 when
ICC_CTLR_EL3.RM == 1, see Asymmetric operation and the use of ICC_CTLR_EL3.RM on
page 10-714
1022 This value applies to legacy operation only. For more information, see Use of the special INTID
1022 on page 10-711.
1023 This value is returned in response to an interrupt acknowledge, if there is no pending interrupt with
sufficient priority for it to be signaled to the PE, or if the highest priority pending interrupt is not
appropriate for the:
• Current Security state.
• Interrupt group that is associated with the System register.
Note
These INTIDs do not require an end of interrupt or deactivation.
For more information about the use of special INTIDs, see the descriptions for the following registers:
• ICC_IAR0_EL1.
• ICC_IAR1_EL1.
• ICC_HPPIR0_EL1.
• ICC_HPPIR1_EL1.
2-32 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
2 Distribution and Routing of Interrupts
2.2 INTIDs
Note
A system might include a mixture of PEs that support 16 bits of INTID and PEs that support 24 bits of INTID.
• The Distributor and Redistributors must all implement the same number of INTID bits.
• In systems that support LPIs, the Distributors and all Redistributors must implement at least 14 bits of INTID.
The number of bits that is implemented in the Distributor and Redistributors must not exceed the minimum
number that is implemented on any PE in the system.
Note
Because interrupts might target any PE, each PE must be able to receive the maximum INTID that can be
sent by a Redistributor. This means that the INTID size that is supported by the Redistributors cannot exceed
the minimum INTID size that is supported by each PE in the system.
• In systems that do not support LPIs, the Distributor and all Redistributors must implement at least 5 bits of
INTID and cannot implement more than 10 bits of INTID.
• In systems that include one or more ITSs, an ITS might implement any value up to and including the number
of bits that are supported by the Distributor and the Redistributors down to a minimum of 14 bits, which is
the minimum number that is required for LPI support.
// InterruptIdentifierValid()
// ==========================
if !IsZero(data<63:N>) then
if GenerateLocalSError() then
// Reporting of locally generated SEIs is supported
IMPLEMENTATION_DEFINED “SError INVALID_INTERRUPT_IDENTIFIER”;
UNPREDICTABLE;
intID = data<INTID_SIZE-1:0>;
The following pseudocode describes how the GIC checks whether an INTID for a virtual interrupt is valid:
// VirtualIdentifierValid()
// ========================
if !IsZero(data<63:N>) then
if ICH_VTR_EL2.SEIS == ‘1’ then
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 2-33
ID072617 Non-Confidential
2 Distribution and Routing of Interrupts
2.2 INTIDs
intID = data<INTID_SIZE-1:0>;
// CPUInterfaceIDSize()
// ====================
// Returns the number of Interrupt ID bits implemented at the CPU interface. This value is an
// IMPLEMENTATION DEFINED choice of 16 or 24 and is discoverable from ICC_CTLR_EL1/EL3.IDbits
integer CPUInterfaceIDSize()
return integer IMPLEMENTATION_DEFINED “CPU interface INTID size 16 or 24”;
2-34 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
2 Distribution and Routing of Interrupts
2.3 Affinity routing
For a PE, the affinity value is defined in MPIDR_EL1 for AArch64 state, and in MPIDR for AArch32 state:
• Affinity routing is a 32-bit value that is composed of four 8-bit affinity fields. These fields are the nodes a,
b, c, and d.
• GICv3 using AArch64 state can support:
— A four level routing hierarchy, a.b.c.d.
— A three level routing hierarchy, 0.b.c.d.
• GICv3 using AArch32 state only supports three affinity levels.
• ICC_CTLR_EL3.A3V, ICC_CTLR_EL1.A3V, and GICD_TYPER.A3V indicate whether four levels or
three levels of affinity are implemented.
Note
An implementation that requires four levels of affinity must only support AArch64 state.
The enumeration notation for specifying nodes in an affinity hierarchy is of the following form, where Affx is
Affinity level x:
Aff3.Aff2.Aff1.Aff0
Affinity routing for a Security state is enabled in the Distributor, using the Affinity Routing Enable (ARE) bits.
Affinity routing is enabled:
• For Secure interrupts, if GICD_CTLR.ARE_S is set to 1.
• For Non-secure interrupts, if the GICD_CTLR.ARE_NS bit is set to 1.
For the handling of physical interrupts when affinity routing is enabled, System register access must also be enabled,
see GIC System register access on page 8-159. For the other cases, see Chapter 10 Legacy Operation and
Asymmetric Configurations.
ARM strongly recommends that only values in the range 0-15 are used at affinity level 0 to align with the SGI target
list capability. See Software Generated Interrupts on page 4-55.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 2-35
ID072617 Non-Confidential
2 Distribution and Routing of Interrupts
2.3 Affinity routing
For more information about whether a PE can be selected as the target when the 1 of N distribution model is used,
see GICR_CTLR, Redistributor Control Register on page 8-517.
For more information about enabling interrupts and interrupt groups, see Enabling the distribution of interrupts on
page 4-63.
• Changing GICD_CTLR.ARE_S from 0 to 1 is UNPREDICTABLE except when all of the following apply:
— GICD_CTLR.EnableGrp0 == 0.
— GICD_CTLR.EnableGrp1S == 0.
— GICD_CTLR.EnableGrp1NS == 0.
• Changing GICD_CTLR.ARE from 0 to 1 is UNPREDICTABLE except when all of the following apply:
— GICD_CTLR.EnableGrp0 == 0.
— GICD_CTLR.EnableGrp1 == 0.
Note
The effect of clearing GICD_CTLR.EnableGrp0, GICD_CTLR.EnableGrp1S, or GICD_CTLR.EnableGrp1NS, as
appropriate, must be visible when changing GICD_CTLR.ARE_S or GICD_CTLR.ARE_NS from 0 to 1. Software
can poll GICD_CTLR.RWP to check that writes that clear GICD_CTLR.EnableGrp0, GICD_CTLR.EnableGrp1S,
or GICD_CTLR.EnableGrp1NS bits have completed.
2-36 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 3
GIC Partitioning
This chapter describes the GIC logical partitioning. It contains the following sections:
• The GIC logical components on page 3-38.
• Interrupt bypass support on page 3-43.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 3-37
ID072617 Non-Confidential
3 GIC Partitioning
3.1 The GIC logical components
Interrupt Routing
Infrastructure (IRI)
Distributor ITSa
PE PE
x.y.0.0 x.y.0.1
Cluster C0
The CPU interface handles physical interrupts at all implemented Exception levels:
• Interrupts that are translated into LPIs are optionally routed via the ITS to the Redistributor and the CPU
interface.
• PPIs are routed directly from the source to the local Redistributor.
• SPIs are routed from the source through the Distributor to the target Redistributor and the associated CPU
interface.
• SGIs are generated by software through the CPU interface and Redistributor. They are then routed through
the Distributor to one or more target Redistributors and the associated CPU interfaces.
In GICv3, the ITS is an optional component and translates events into physical LPIs. The architecture also supports
direct LPIs that do not require the use of an ITS. Where LPIs are supported, it is IMPLEMENTATION DEFINED whether
either:
• Direct LPIs are supported by accessing the registers in the Redistributors.
• LPI support is provided by the ITS.
3-38 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
3 GIC Partitioning
3.1 The GIC logical components
Figure 3-2 shows the GIC partitioning in an implementation that includes an ITS.
SPIs
Distributor ITSa
LPIs
PPIs
PE PE PE PE PE
x.y.0.0 x.y.0.1 x.y.0.2 x.y.n.0 x.y.n.1
Cluster C0 Cluster Cn
a. The inclusion of an ITS is optional, and there might be more than one
ITS in a GIC.
b. SGIs are generated by a PE and routed through the Distributor.
The mechanism for communication between the ITS and the Redistributors is IMPLEMENTATION DEFINED.
The mechanism for communication between the CPU interfaces and the Redistributors is also IMPLEMENTATION
DEFINED.
Note
ARM recommends that an implementation uses the GIC Stream Protocol for communication between the CPU
interfaces and the Redistributors, see Appendix A GIC Stream Protocol interface.
Figure 3-3 on page 3-40 shows the GIC partitioning in an implementation that does not include an ITS and that
supports direct LPIs.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 3-39
ID072617 Non-Confidential
3 GIC Partitioning
3.1 The GIC logical components
SPIs
Distributor
LPIs
PPIs
PE PE PE PE PE
x.y.0.0 x.y.0.1 x.y.0.2 x.y.n.0 x.y.n.1
Cluster C0 Cluster Cn
Distributor
The following list describes the components that are depicted in Figure 3-2 on page 3-39 in more detail:
Distributor The Distributor performs interrupt prioritization and distribution of SPIs and SGIs to the
Redistributors and CPU interfaces that are connected to the PEs in the system.
GICD_CTLR provides global settings for:
• Enabling affinity routing.
• Disabling security.
• Enabling Secure and Non-secure Group 1 interrupts.
• Enabling Group 0 interrupts.
For SPIs, the Distributor provides a programming interface for:
• Enabling or disabling SPIs.
• Setting the priority level of each SPI.
• Routing information for each SPI.
• Setting each SPI to be level-sensitive or edge-triggered.
• Generating message-based SPIs.
• Assigning each SPI to an interrupt group.
• Controlling the pending and active state of SPIs.
The Distributor registers are identified by the GICD_ prefix.
See Chapter 2 Distribution and Routing of Interrupts for more information.
3-40 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
3 GIC Partitioning
3.1 The GIC logical components
Note
When handling physical interrupts during legacy operation, the Distributor controls the
configuration information for PPIs and SGIs. See Chapter 10 Legacy Operation and
Asymmetric Configurations.
Redistributor A Redistributor is the part of the IRI that is connected to the CPU interface of the PE. The
Redistributor holds the control, prioritization, and pending information for all physical LPIs
using data structures that are held in memory. Two registers in the Redistributor point to
these data structures:
• GICR_PROPBASER.
• GICR_PENDBASER.
In GICv4, the Redistributor also includes registers to handle virtual LPIs that are forwarded
by an ITS to a Redistributor and directly to a VM, without involving the hypervisor. This is
referred to as a direct injection of virtual interrupts into a VM.
In GICv4, the Redistributors collectively host the control, prioritization, and pending
information for all virtual LPIs using data structures that are held in memory. Two registers
in the Redistributor point to these data structures:
• GICR_VPROPBASER.
• GICR_VPENDBASER.
In an implementation that supports LPIs but does not include an ITS, the GICR_* registers
contain a simple memory-mapped interface to signal and control physical LPIs.
Redistributors provide a programming interface for:
• Identifying, controlling, and configuring supported features to enable interrupts and
interrupt routing of the implementation.
• Enabling or disabling SGIs and PPIs.
• Setting the priority level of SGIs and PPIs.
• Setting each PPI to be level-sensitive or edge-triggered.
• Assigning each SGI and PPI to an interrupt group.
• Controlling the pending state of SGIs and PPIs.
• Controlling the active state of SGIs and PPIs.
• Power management support for the connected PE.
• Where LPIs are supported, base address control for the data structures in memory that
support the associated interrupt properties and their pending status.
• Where GICv4 is supported, base address control for the data structures in memory
that support the associated virtual interrupt properties and their pending status.
The Redistributor registers are identified by the GICR_ prefix.
See Affinity routing on page 2-35 and The Distributor and Redistributors on page 2-30 for
more information about the Redistributor.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 3-41
ID072617 Non-Confidential
3 GIC Partitioning
3.1 The GIC logical components
CPU interface
The GIC architecture supports a CPU interface that provides a register interface to a PE in
the system. Each CPU interface provides a programming interface for:
• General control and configuration to enable interrupt handling in accordance with the
Security state and legacy support requirements of the implementation.
• Acknowledging an interrupt.
• Performing a priority drop.
• Deactivation of an interrupt.
• Setting an interrupt priority mask for the PE.
• Defining the preemption policy for the PE.
• Determining the highest priority pending interrupt for the PE.
The CPU interface has several components:
• A component that allows a supervisory level of software to control the handling of
physical interrupts. The registers that are associated with this are identified by the
ICC_ prefix.
• A component that allows a supervisory level of software to control the handling of
virtual interrupts. The registers that are associated with this are identified by the
ICV_ prefix.
• A component that allows a hypervisor to control the set of pending interrupts. The
registers that are associated with this are identified by the ICH_ prefix.
Note
The System registers in the CPU interface are associated with software that is handling
interrupts in the physical domain, or with execution at Non-secure EL1 as part of a VM. The
configuration of HCR_EL2 determines whether the accesses are to the physical resources
or the virtual resources.
The System registers accessible at EL2 that are used for controlling the list of active,
pending, and active and pending, virtual interrupts for a PE are identified by the ICH_
prefix.
For more information on handling physical interrupts, see Chapter 4 Physical Interrupt
Handling and Prioritization.
For more information on handling virtual interrupts, see Chapter 5 Virtual Interrupt
Handling and Prioritization.
3-42 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
3 GIC Partitioning
3.2 Interrupt bypass support
When System register access is enabled, bypass disable is controlled at the highest implemented Exception level
using two bits in ICC_SRE_EL1, ICC_SRE_EL2, or ICC_SRE_EL3, as appropriate:
• For FIQ bypass, this is the DFB bit.
• For IRQ bypass, this is the DIB bit.
This bypass mechanism is used when System register access is enabled. For information about bypass support
during legacy operation, see Legacy operation and bypass support on page 10-712.
The interrupt groups that are supported by the GIC are allocated to FIQs and IRQs, as described in Interrupt
grouping on page 4-58. Interrupt groups must be disabled at the CPU interface when bypass is enabled, otherwise
the behavior of the GICv3 implementation is UNPREDICTABLE. This means that:
• ICC_IGRPEN0_EL1.Enable must have the value 0 when ICC_SRE_ELx.DFB == 0.
• ICC_IGRPEN1_EL1.Enable must have the value 0 when ICC_SRE_ELx.DIB == 0.
For more information about enabling interrupts, see Enabling the distribution of interrupts on page 4-63.
For information about the behavior when System register access is not enabled, see Chapter 10 Legacy Operation
and Asymmetric Configurations.
For FIQs, the following pseudocode determines the source for interrupt signaling to a PE.
if ICC_SRE_EL3.SRE == 1 then
if ICC_SRE_EL3.DFB == 0 then
if ICC_SRE_EL1.SRE Secure == 1 then
BypassFIQsource
else
use legacy bypass support
else
use GICv3 FIQ output
else
use legacy bypass support
For IRQs, the following pseudocode determines the source for interrupt signaling to a PE.
if ICC_SRE_EL3.SRE == 1 then
if ICC_SRE_EL3.DIB == 0 then
if ICC_SRE_EL1.SRE Secure == 1 then
BypassIRQsource
else
use legacy bypass support
else
use GICv3 IRQ output
else
use legacy bypass support
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 3-43
ID072617 Non-Confidential
3 GIC Partitioning
3.2 Interrupt bypass support
3-44 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 4
Physical Interrupt Handling and Prioritization
This chapter describes the fundamental aspects of GIC interrupt handling and prioritization. It contains the
following sections:
• Interrupt lifecycle on page 4-46.
• Locality-specific Peripheral Interrupts on page 4-53.
• Private Peripheral Interrupts on page 4-54.
• Software Generated Interrupts on page 4-55.
• Shared Peripheral Interrupts on page 4-56.
• Interrupt grouping on page 4-58.
• Enabling the distribution of interrupts on page 4-63.
• Interrupt prioritization on page 4-65.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-45
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
Figure 4-1 shows the GIC interrupt lifecycle for physical interrupts.
Start
Generate
A device generates an
interrupt
Distribute
End
2. Distribute. The IRI performs interrupt grouping, interrupt prioritization, and controls the forwarding of
interrupts to the CPU interfaces.
4. Activate. When software running on a PE acknowledges an interrupt, the GIC sets the highest active priority
to that of the activated interrupt, and for SPIs, SGIs, and PPIs the interrupt becomes active.
5. Priority drop. Software running on the PE signals to the GIC that the highest priority interrupt has been
handled to the point where the running priority can be dropped. The running priority then has the value that
it had before the interrupt was acknowledged. This is the point where the end of interrupt is indicated by the
interrupt handler. The end of the interrupt can be configured to also perform deactivation of the interrupt.
6. Deactivation. Deactivation clears the active state of the interrupt, and thereby allows the interrupt, when it is
pending, to be taken again. Deactivation is not required for LPIs. Deactivation can be configured to occur at
the same time as the priority drop, or it can be configured to occur later as the result of an explicit interrupt
deactivation operation. This latter approach allows for software architectures where there is an advantage to
separating interrupt handling into initial handling and scheduled handling.
4-46 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
A CPU interface receives pending interrupts prioritized by the IRI, and determines whether the interrupt is a
member of a group that is enabled in the CPU interface and has sufficient priority to be signaled to the PE. At any
time, the connected PE can determine the:
• INTID of its highest priority pending interrupt, by reading ICC_HPPIR0_EL1 or ICC_HPPIR1_EL1.
• The running priority of the CPU interface by reading ICC_RPR_EL1.
Note
The priority of the highest priority active interrupt for which there has not been a priority drop is also known
as the running priority.
When an LPI is acknowledged, the pending state for the interrupt changes to not pending in the Redistributor. The
Redistributor does not maintain an active state for LPIs.
When the PE acknowledges an SGI, a PPI, or an SPI at the CPU interface, the IRI changes the status of the interrupt
to active if:
• It is an edge-triggered interrupt, and another edge has not been detected since the interrupt was
acknowledged.
• It is a level-sensitive interrupt, and the level has been deasserted since the interrupt was acknowledged.
When the PE acknowledges an SGI, a PPI, or an SPI at the CPU interface, the IRI changes the status of the interrupt
to active and pending if:
• It is an edge-triggered interrupt, and another edge has been detected since the interrupt was acknowledged.
• It is a level-sensitive interrupt, and the level has not been deasserted since the interrupt was acknowledged.
When the PE acknowledges an SGI, a PPI, or an SPI at the CPU interface, the CPU interface can signal another
interrupt to the PE, to preempt interrupts that are active on the PE. If there is no pending interrupt with sufficient
priority to be signaled to the PE, the interface deasserts the interrupt request signal to the PE.
The following stages of the interrupt lifecycle are described in the remainder of this section:
• Activation.
• Priority drop on page 4-48.
• Deactivation on page 4-49.
The priority drop and deactivation can be performed as a single operation or can be split, as defined by
ICC_CTLR_EL1.EOImode and ICC_CTLR_EL3.EOImode_EL3.
Activation
The interrupt handler reads ICC_IAR0_EL1 for Group 0 interrupts, and ICC_IAR1_EL1 for Group 1 interrupts, in
the corresponding CPU interface to acknowledge the interrupt. This read returns either:
• The INTID of the highest priority pending interrupt, if that interrupt is of sufficient priority for it to be
signaled to the PE. This is the normal response to an interrupt acknowledge.
• Under certain conditions, an INTID that indicates a special interrupt number, see INTIDs on page 2-31.
Whether a read of ICC_IAR0_EL1 and ICC_IAR1_EL1 returns a valid INTID depends on:
• Which of the two registers is accessed.
• The Security state of the PE.
• Whether there is a pending interrupt of sufficient priority to be signaled to the PE, and if so, whether:
— The highest priority pending interrupt is a Secure Group 1 or a Non-secure Group 1 interrupt.
— Interrupt signaling is enabled for that interrupt group.
• The Exception level at which the PE is executing.
All interrupts, when acknowledged, modify the Active Priorities Registers. See System register access to the Active
Priorities registers on page 4-70.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-47
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
In certain circumstances, the value of SCR_EL3.NS affects the value returned when a PE acknowledges an
interrupt. That is, when the PE is executing at EL3, a Secure read of ICC_IAR0_EL1 returns a special interrupt
number that indicates the required Security state transition for the highest priority pending interrupt. Otherwise, the
INTID is returned.
For SGIs in a multiprocessor implementation, the GIC uses the targeted list model, where the acknowledgement of
an interrupt by one PE has no effect on the state of the interrupt on other CPU interfaces. When a PE acknowledges
the interrupt, the pending state of the interrupt is cleared only for that PE. The interrupt remains pending for the
other PEs.
The effects of reading ICC_IAR0_EL1 and ICC_IAR1_EL1 on the state of a returned INTID are not guaranteed to
be visible until after the execution of a DSB.
Priority drop
After an interrupt has been acknowledged, a valid write to ICC_EOIR0_EL1 for Group 0 interrupts, or a valid write
to ICC_EOIR1_EL1 for Group 1 interrupts, results in a priority drop.
A valid write to ICC_EOIR0_EL1 or ICC_EOIR1_EL1 to perform a priority drop is required for each
acknowledged interrupt, even for LPIs which do not have an active state. A priority drop must be performed by the
same PE that activated the interrupt.
Note
A valid write is a write that is:
• Not UNPREDICTABLE.
• Not ignored.
• Not writing an INTID that is either unsupported or within the range 1020-1023.
For each CPU interface, the GIC architecture requires the order of the valid writes to ICC_EOIR0_EL1 and
ICC_EOIR1_EL1 to be the exact reverse of the order of the reads from ICC_IAR0_EL1 and ICC_IAR1_EL1, as
shown in Figure 4-2.
Read order
ICC_IAR0_EL1 1
ICC_IAR1_EL1 2
ICC_IAR0_EL1 3
ICC_IAR0_EL1 4
Write order
4 ICC_EOIR0_EL1
3 ICC_EOIR0_EL1
2 ICC_EOIR1_EL1
1 ICC_EOIR0_EL1
On a priority drop, the running priority is reduced from the priority of the interrupt indicated by the write to
ICC_EOIR0_EL1 or ICC_EOIR1_EL1 to either:
• The priority of the highest-priority active interrupt for which there has been no write to ICC_EOIR0_EL1 or
ICC_EOIR1_EL1.
• The idle priority, 0xFF, if there is no active interrupt.
4-48 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
Note
For compatibility with possible extensions to the GIC architecture specification, software must preserve the entire
register value read from ICC_IAR0_EL1 and ICC_IAR1_EL1 when it acknowledges the interrupt, and use that
entire value for the corresponding write to ICC_EOIR0_EL1 and ICC_EOIR1_EL1 by the same PE.
When GICD_CTLR.DS == 0:
• A write to ICC_EOIR0_EL1 performs a priority drop for Group 0 interrupts.
• A write to ICC_EOIR1_EL1 performs a priority drop for Non-secure Group 1 interrupts, if the PE is
operating in Non-secure state or at EL3.
• When operating in Secure state, a write to ICC_EOIR1_EL1 performs a priority drop for Secure Group 1
interrupts.
When GICD_CTLR.DS == 1:
• A write to ICC_EOIR0_EL1 performs a priority drop for Group 0 interrupts.
• A write to ICC_EOIR1_EL1 performs a priority drop for Group 1 interrupts.
Deactivation
PPIs, SGIs, and SPIs have an active state in the IRI and must be deactivated.
SGIs and PPIs must be deactivated by the PE that activated the interrupt. SPIs can be deactivated by a different PE.
• The priority drop and interrupt deactivation happen together when ICC_CTLR_EL1.EOImode or
ICC_CTLR_EL3.EOImode_EL3 in the CPU interface is 0, and the PE writes to ICC_EOIR0_EL1 or
ICC_EOIR1_EL1. In this case a write to ICC_DIR_EL1 is not required.
• The priority drop and interrupt deactivation are separated when ICC_CTLR_EL1.EOImode or
ICC_CTLR_EL3.EOImode_EL3 in the CPU interface is 1, and the PE writes to ICC_EOIR0_EL1 or
ICC_EOIR1_EL1. In this case:
— The priority drop happens when the PE writes to ICC_EOIR0_EL1 or ICC_EOIR1_EL1.
— Interrupt deactivation happens later, when the PE writes to ICC_DIR_EL1. A valid write to
ICC_DIR_EL1 results in interrupt deactivation for a Group 0 or a Group 1 interrupt.
There are no ordering requirements for writes to ICC_DIR_EL1. If software writes to ICC_DIR_EL1 when the
following conditions are true, the results are UNPREDICTABLE:
• The appropriate EOIMode bit is cleared to 0.
• The ICC_CTLR_EL1.EOImode or ICC_CTLR_EL3.EOIMode_EL3 is set to 1 and there has not been a
corresponding write to ICC_EOIR0_EL1 or ICC_EOIR1_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-49
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
ICC_CTLR_EL1.EOImode or Identified
Access Effect
ICC_CTLR_EL3.EOImode_EL3 interrupt
When GICD_CTLR.DS == 0, access to certain registers is restricted. See Interrupt grouping and security on
page 4-58.
The following pseudocode determines whether EOImode is set for the current Exception level and Security state:
// EOImodeSet()
// ============
boolean EOImodeSet()
if HaveEL(EL3) then
// EL3 is implemented so return the value appropriate to the EL and security state
if IsEL3OrMon() && ICC_SRE_EL3.SRE == ‘1’1 then
// In EL3
EOImode = ICC_CTLR_EL3.EOImode_EL3;
else // Non-secure
EOImode = ICC_CTLR_EL3.EOImode_EL1NS;
else
// No EL3 so return the value from ICC_CTLR_EL1
EOImode = ICC_CTLR_EL1.EOImode;
• If GICD_CTLR.DS == 0, a valid:
— Secure write to ICC_DIR_EL1 deactivates the specified interrupt, regardless of whether that interrupt
is a Group 0 or a Group 1 interrupt.
— Non-secure write to ICC_DIR_EL1 deactivates the specified interrupt only if that interrupt is a
Non-secure Group 1 interrupt.
4-50 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
Table 4-2 shows the behavior of valid writes to ICC_DIR_EL1. In an implementation that supports only a single
Security state, valid writes have the behavior shown for Secure writes to ICC_DIR_EL1.
Security state
of writes to Interrupt group GICD_CTLR.DS SCR_EL3.IRQ SCR_EL3.FIQ Effect
ICC_DIR_EL1
PPIs, SGIs, and SPIs can have an active and pending state. Interrupts that are active and pending are never signaled
to a connected PE.
LPIs have a pending state that is held in memory associated with a Redistributor, and therefore a PE. This also
applies to directly injected virtual LPIs, see Virtual LPI support on page 5-86.
Note
There is no active or active and pending state for LPIs.
Figure 4-3 on page 4-52 shows an instance of the interrupt handling state machine, and the possible state transitions.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-51
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.1 Interrupt lifecycle
Active and
D pendinga
A1
E2
Inactive Pending A2 B2
B1 C
Activea
E1
Note
LPIs do not have an active state in the Redistributor, but do require an active priority in the CPU interface. See
Chapter 6 Locality-specific Peripheral Interrupts and the ITS for more information.
When interrupt forwarding by the Distributor and interrupt signaling by the CPU interface are enabled, the
conditions that cause each of the state transitions are as follows:
4-52 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.2 Locality-specific Peripheral Interrupts
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-53
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.3 Private Peripheral Interrupts
Note
Commonly, ARM expects that PPIs are used by different instances of the same interrupt source on each PE, thereby
allowing a common INTID to be used for PE specific events, such as the interrupts from a private timer.
4-54 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.4 Software Generated Interrupts
The registers associated with the generation of SGIs are part of the CPU interface:
• A PE generates a Group 1 SGI by writing to ICC_SGI1R_EL1 or ICC_ASGI1R_EL1.
• A PE generates a Group 0 SGI by writing to ICC_SGI0R_EL1.
• Routing information is supplied as the bitfield value in the write to the register that generated the SGI. The
SGI can be routed to:
— The group of PEs specified by a.b.c.targetlist. This can include the originating PE.
— All participating PEs in the system, excluding the originating PE.
See Routing SPIs and SGIs by PE affinity on page 2-35 for more information.
ICC_SGI1R_EL1 allows software executing in a Secure state to generate Secure Group 1 SGIs.
ICC_SGI1R_EL1 allows software executing in a Non-secure state to generate Non-secure Group 1 SGIs.
ICC_ASGI1R_EL1 allows software executing in a Secure state to generate Non-secure Group 1 SGIs.
ICC_ASGI1R_EL1 allows software executing in a Non-secure state to generate Secure Group 1 SGIs, if permitted
by the settings of GICR_NSACR in the Redistributor corresponding to the target PE.
ICC_SGI0R_EL1 allows software executing in Non-secure state to generate Group 0 SGIs, if permitted by the
settings of GICR_NSACR in the Redistributor corresponding to the target PE.
For more information about the use of control registers to forward SGIs to a target PE, see Table 8-14 on page 8-169.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-55
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.5 Shared Peripheral Interrupts
Support for message-based SPIs is optional, and can be discovered through GICD_TYPER.MBIS. Message-based
SPIs can be:
• Generated by a write to GICD_SETSPI_NSR or GICD_SETSPI_SR
• Cleared by a write to GICD_CLRSPI_NSR or GICD_CLRSPI_SR.
The effect of a write to these registers depends on whether the targeted SPI is configured to be an edge-triggered or
a level-sensitive interrupt:
• For an edge-triggered interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR sets the interrupt
pending. The interrupt is no longer pending when it is activated, or when it is cleared by a write to
GICD_CLRSPI_NSR, GICD_CLRSPI_SR, or GICD_ICPENDR<n>.
• For a level-sensitive interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR sets the interrupt
pending. It remains pending until it is deasserted by a write to GICD_CLRSPI_NSR or GICD_CLRSPI_SR.
If the interrupt is activated between the time it is asserted by a write to GICD_SETSPI_NSR or
GICD_SETSPI_SR and the time it is deactivated by a write to GICD_CLRSPI_NSR or GICD_CLRSPI_SR,
then the interrupt becomes active and pending.
It is IMPLEMENTATION DEFINED for a level-sensitive interrupt whether a write to GICD_ICPENDR<n> has
any effect on an interrupt that has been set pending by a write to GICD_SETSPI_NSR or GICD_SETSPI_SR,
or whether a write to GICD_CLRSPI_NSR or GICD_CLRSPI_SR has any effect on an interrupt that has
been set pending by a write GICD_ISPENDR<n>.
It is IMPLEMENTATION DEFINED whether acknowledging an interrupt that was set pending by a write to
GICD_ISPENDR<n> clears the pending state.
• Changing the configuration of an interrupt from level-sensitive to edge-triggered, or from edge-triggered to
level-sensitive, when there is a pending interrupt, leaves the interrupt in an UNKNOWN state.
Figure 4-4 on page 4-57 shows how message-based interrupt requests can trigger SPIs.
4-56 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.5 Shared Peripheral Interrupts
Wire-based SPIs
Message- Distributor
based SPIs
GICD_SETSPI_SR registers GICD_SETSPI_NSR registers
PE PE PE PE PE
x.y.0.0 x.y.0.1 x.y.0.2 x.y.n.0 x.y.n.1
Cluster C0 Cluster Cn
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-57
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.6 Interrupt grouping
In a system with two Security states, an interrupt is configured as one of the following:
• A Group 0 physical interrupt:
— ARM expects these interrupts to be handled at EL3.
• A Secure Group 1 physical interrupt:
— ARM expects these interrupts to be handled at Secure EL1.
• A Non-secure Group 1 physical interrupt:
— ARM expects these interrupts to be handled at Non-secure EL2 in systems using virtualization, or at
Non-secure EL1 in systems not using virtualization.
At the System level, GICD_CTLR.DS indicates if the GIC is configured with one or two Security states. For more
information about Security, see Interrupt grouping and security.
These interrupt groups are mapped onto the ARMv8 FIQ and IRQ exceptions, see Interrupt assignment to IRQ and
FIQ signals on page 4-60.
GICD_IGROUPR<n> and GICD_IGRPMODR<n> configure the interrupt group for SPIs. n is greater than zero.
GICR_IGROUPR0 and GICR_IGRPMODR0 configure the interrupt group for SGIs and PPIs.
Note
When GICD_CTLR.DS == 0, LPIs are always Non-secure Group 1 interrupts. When GICD_CTLR.DS == 1, LPIs
are always Group 1 interrupts.
In a system with two Security states, Group 0 interrupts are always Secure. For more information about grouping
and Security, see Interrupt grouping and security.
4-58 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.6 Interrupt grouping
• Non-secure state.
A software hierarchy of user and privileged code can execute in either state, and software executing in Non-secure
state can only access Secure state through a system call to the Secure monitor. The GIC architecture supports the
routing and handling of interrupts associated with both Security states.
GICD_CTLR.DS indicates whether a GIC is configured to support the ARMv8-A Security model. This
configuration affects:
• Register access, see GIC System register access on page 8-159.
• The interrupt groups that are supported.
When GICD_CTLR.DS == 0:
• The GIC supports two Security states, Secure state and Non-secure state.
• The GIC supports three interrupt groups:
— Group 0.
— Secure Group 1.
— Non-secure Group 1.
• Both the Security state and GICR_NSACR determine whether an SGI can be generated.
• The Security state is checked during:
— Configuration of an interrupt.
— Acknowledgement of an interrupt.
— Priority drop.
— Deactivation.
• Secure Group 1 interrupts are treated as Group 0 by a CPU interface if:
— The PE does not implement EL3.
— ICC_SRE_EL1(S).SRE == 0.
When GICD_CTLR.DS == 1:
• The GIC supports only a single Security state. This can be either Secure state or Non-secure state.
• The GIC supports two interrupt groups:
— Group 0.
— Group 1.
• SGIs can be generated regardless of the settings in GICR_NSACR.
• The Security state is not checked during:
— Configuration of an interrupt.
— Acknowledgement of an interrupt.
— Priority drop.
— Deactivation.
In a multiprocessor system, one or more PEs within the system might support accesses to resources that are available
only in Secure state, or accesses to resources that are available only in Non-secure state. It is a programming error
if software configures:
• A Group 0 or Secure Group1 interrupt to be forwarded to a PE that only supports Non-secure state.
• A Non-secure Group1 interrupt to be forwarded to a PE that only supports Secure state.
There is a dedicated register for the priority grouping for each interrupt group, ICC_BPR0_EL1 for Group 0
interrupts and ICC_BPR1_EL1 for Group 1 interrupts. However, it is possible to configure a common Binary Point
Register for both groups using:
• ICC_CTLR_EL1.CBPR.
• ICC_CTLR_EL3.CBPR_EL1NS and ICC_CTLR_EL3.CBPR_EL1S for an independent common Binary
Point Register configuration of Non-secure Group 1 and Secure Group 1 interrupts.
For information about interrupt grouping and legacy operation, see Chapter 10 Legacy Operation and Asymmetric
Configurations.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-59
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.6 Interrupt grouping
A Group 0 physical interrupt, when it is the highest priority pending interrupt and has sufficient priority, is always
signaled as an FIQ.
A Group 1 physical interrupt, when it is the highest priority pending interrupt and has sufficient priority, is signaled
as an FIQ if either of the following conditions is true, otherwise it is signaled as an IRQ:
• It is an interrupt for the other Security state, that is, the Security state in which the PE is not executing.
• The PE is executing at EL3.
Table 4-3 summarizes the signaling of interrupts when EL3 is using AArch64 state.
Table 4-3 Interrupt signals for two Security states when EL3 is using AArch64 state
Secure Non-secure
Table 4-4 summarizes the signaling of interrupts when EL3 is using AArch32 state.
Table 4-4 Interrupt signals for two Security states when EL3 is using AArch32 state
Secure Non-secure
Table 4-5 summarizes the signaling of interrupts in systems that support only a single Security state, that is where
EL3 is not implemented or when GICD_CTLR.DS == 1.
The assertion and de-assertion of IRQs and FIQs are affected by the current Exception level and Security state of
the PE. As part of the Context Synchronization that occurs as the result of taking or returning from an exception,
the CPU interface ensures that IRQ and FIQ are both appropriately asserted or deasserted for the Exception level
and Security state that the PE is entering.
4-60 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.6 Interrupt grouping
Note
For the effects of GICC_CTLR.FIQEn on interrupt signaling in asymmetric configurations, see The asymmetric
configuration on page 10-714.
This routing also controls the Exception level at which the EL1 CPU interface System registers that control and
acknowledge interrupts are accessible. This applies to:
When (SCR_EL3.NS == 1 && (HCR_EL2.FMO ==1 || HCR_EL2.IMO == 1)), accesses at EL1 are virtual
accesses. Virtual accesses to ICC_SGI0R_EL1, ICC_SGI1R_EL1, and ICC_ASGI1R_EL1 always generate a Trap
exception that is taken to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-61
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.6 Interrupt grouping
Where a Distributor supports two Security states a PE might not implement EL2 or EL3. Table 4-6 shows the
configurations that are supported in these cases.
Security
Distributor EL3 EL2 Description
State
Two Security states and No - Non-secure The PE is always Non-secure and can only
GICD_CTLR.DS == 0 receive Non-secure Group 1 interrupts.
The PE must behave as if software had:
• Set ICC_SRE_EL3.Enable to 1 to allow
EL2 to use the System registers, if
required.
• Set ICC_SRE_EL3.DFB to 1.
• Set SCR_EL3.FIQ to 1.
• Cleared SCR_EL3.IRQ to 0.
• Set SCR_EL3.NS to 1.
• Cleared ICC_IGRPEN0_EL1.Enable to
0 to disable the signaling of Group 0
interrupts to the PE.
• Set the Secure copy of
ICC_IGRPEN1_EL1.Enable to 0 to
disable the signaling of Secure Group 1
interrupts to this PE.
Two Security states and No No Secure The PE is always Secure and can only receive
GICD_CTLR.DS == 0 Group 0 and Secure Group 1 interrupts.
The PE must behave as if software had:
• Set ICC_SRE_EL3.Enable to 1.
• Cleared SCR_EL3.FIQ to 0.
• Cleared SCR_EL3.IRQ to 0.
• Cleared SCR_EL3.NS to 0.
• Cleared the Non-secure copy of
ICC_IGRPEN1_EL1.Enable to 0 to
disable the signaling of Non-secure
Group 1 interrupts to this PE.
One Security state or No - - The Distributor and all PEs are always in a
two Security states and single Security state, and can receive Group 0
GICD_CTLR.DS == 1 and Group 1 interrupts.
All PEs must behave as if software had:
• Set ICC_SRE_EL3.Enable to 1.
• Cleared SCR_EL3.FIQ to 0.
• Cleared SCR_EL3.IRQ to 0.
• Set SCR_EL3.NS to 1.
4-62 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.7 Enabling the distribution of interrupts
The following control bits enable and disable the distribution of interrupt groups at the CPU interface:
• ICC_IGRPEN0_EL1.Enable for Group 0 interrupts.
• ICC_IGRPEN1_EL1.Enable for Group 1 interrupts.
Note
There is a Secure and a Non-secure copy of this register.
• ICC_IGRPEN1_EL3.{EnableGrp1S, EnableGrp1NS}.
SPIs
Individual SPIs can be enabled and disabled by writing to GICD_ISENABLER<n> and
GICD_ICENABLER<n>. n >0 for SPIs.
SGIs
SGIs can be enabled and disabled by writing to GICR_ISENABLER0 and GICR_ICENABLER0
when affinity routing is enabled. Individual SGIs can also be enabled and disabled by writing to
GICD_ISENABLER<n> and GICD_ICENABLER<n>. n = 0 for SGIs, if legacy operation for
physical interrupts is supported and configured.
Note
Whether SGIs are permanently enabled, or can be enabled and disabled by writes to
GICR_ISENABLER0 and GICR_ICENABLER0, is IMPLEMENTATION DEFINED.
LPIs
Individual LPIs can be enabled by setting the enable bits programmed in the LPI Configuration
table. For more information about enabling LPIs using the LPI Configuration tables, see LPI
Configuration tables on page 6-95.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-63
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.7 Enabling the distribution of interrupts
• A pending 1 of N interrupt that is individually enabled in the GICD_* registers and is a member of a group
that is enabled in GICD_CTLR, but is a member of a group that is disabled in ICC_IGRPEN0_EL1,
ICC_IGRPEN1_EL1, or ICC_IGRPEN1_EL3 for a PE, cannot be selected for that PE. Such an interrupt is
not considered in the determination of the highest priority pending interrupt and so cannot be signaled to the
PE.
• For a pending direct interrupt that is individually enabled in the GICD_* or GICR_* registers and is a
member of a group that is enabled in GICD_CTLR, but is a member of a group that is disabled in
ICC_IGRPEN0_EL1, ICC_IGRPEN1_EL1, or ICC_IGRPEN1_EL3 , it is IMPLEMENTATION DEFINED
whether or not the interrupt is considered in the determination of the highest priority pending interrupt. If it
is determined to be the highest priority pending interrupt, the interrupt is not signaled to the PE, but will mask
a lower priority pending interrupt that is a member of a group that is enabled in ICC_IGRPEN0_EL1,
ICC_IGRPEN1_EL1, or ICC_IGRPEN1_EL3.
LPIs are enabled individually in the LPI Configuration tables, see LPI Configuration tables on page 6-95.
Note
This might have no effect on the forwarded interrupt if it has already been activated.
4-64 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Software configures interrupt prioritization in the GIC by assigning a priority value to each interrupt source. Priority
values are an 8-bit unsigned binary number. A GIC implementation that supports two Security states must
implement a minimum of 32 and a maximum of 256 levels of physical priority. A GIC implementation that supports
only a single Security state must implement a minimum of 16 and a maximum of 256 levels of physical priority. If
the GIC implements fewer than 256 priority levels, the low-order bits of the priority fields are RAZ/WI. This means
that the number of implemented priority field bits is IMPLEMENTATION DEFINED, in the range 4-8. Table 4-7 shows
the relation between the priority field bits and the number of priority levels supported by an implementation.
Implemented priority bits Possible priority field values Number of priority levels
In the GIC prioritization scheme, lower numbers have higher priority. This means that the lower the assigned
priority value, the higher the priority of the interrupt. Priority field value 0 always indicates the highest possible
interrupt priority, and the lowest priority value depends on the number of implemented priority levels.
The GICD_IPRIORITYR<n> registers hold the priority value for each supported SPI. An implementation might
reserve an SPI for a particular purpose and assign a fixed priority to that interrupt, meaning the priority value for
that interrupt is read-only. For other SPIs the GICD_IPRIORITYR<n> registers can be written by software to set
the interrupt priorities. It is IMPLEMENTATION DEFINED whether a write to GICD_IPRIORITYR<n> changes the
priority of any active SPI.
In a multiprocessor implementation, the GICR_IPRIORITYR<n> registers define the interrupt priority of each SGI
and PPI INTID independently for each target PE. The order in which the CPU interface serializes these SGIs is
implementation specific.
LPI Configuration tables and LPI Pending tables in memory store LPI priority information and pending status, see
LPI Configuration tables on page 6-95 and LPI Pending tables on page 6-97.
The GIC security model provides Secure and Non-secure accesses to the interrupt priority settings.The Non-secure
accesses can configure interrupts only in the lower priority half of the supported priority values. Therefore, if the
GIC implements 32 priority values, Non-secure accesses see only 16 priority values. See Software accesses of
interrupt priority on page 4-72 for more information.
To determine the number of priority bits implemented for SPIs, software can write 0xFF to a writable
GICD_IPRIORITYR<n> priority field and read back the value stored.
To determine the number of priority bits implemented for SGIs and PPIs, software can write 0xFF to the
GICR_IPRIORITYR<n> priority fields, and read back the value stored.
The GIC architecture does not require all PEs in the system to use the same number of priority bits to control
interrupt priority.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-65
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Note
ARM recommends that implementations support the same number of priority bits for each PE.
For information about the priority range supported for virtual interrupts, see Chapter 5 Virtual Interrupt Handling
and Prioritization.
Note
ARM recommends that, before checking the priority range in this way:
• For a peripheral interrupt, software first disables the interrupt.
• For an SGI, software first checks that the interrupt is inactive.
If, on a particular CPU interface, multiple pending interrupts have the same priority, and have sufficient priority for
the interface to signal them to the PE, it is IMPLEMENTATION DEFINED how the interface selects which interrupt to
signal.
GICv3 guarantees that the highest priority, unmasked, enabled interrupt will be delivered to a target PE in finite
time.
There is no guarantee that higher priority interrupts will always be taken before lower priority interrupts, although
this will generally be the case.
In order to support the ARMv8 Security model the register fields associated with Secure interrupts are RAZ/WI for
Non-secure accesses. In addition, the following rules apply:
4-66 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Note
This means a Non-secure write cannot set a priority mask value in the range of 0x00-0x7F.
AArch64 functions on page 8-691 provides pseudocode that describes accesses to the following System registers in
a GIC that supports two Security states:
• ICC_PMR_EL1.
• ICC_RPR_EL1.
The Binary Point Registers split a priority value into two fields, the group priority and the subpriority. When
determining preemption, all interrupts with the same group priority are considered to have the same priority,
regardless of the subpriority.
Where multiple pending interrupts have the same group priority, the GIC uses the subpriority field to resolve the
priority within a group. Where two or more pending interrupts in a group have the same subpriority, how the GIC
selects between the interrupts is implementation specific.
The GIC uses the group priority field to determine whether a pending interrupt has sufficient priority to preempt
execution on a PE, as follows:
• The value of the group priority field for the interrupt must be lower than the value of the running priority of
the PE. The running priority is the group priority of the highest priority active interrupt that has not received
a priority drop on that PE.
• The value of the priority for the interrupt must be lower than the value of its priority mask.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-67
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Table 4-8 shows the split of the interrupt priority fields for Secure ICC_BPR1_EL1.
ICC_BPR1_EL1
Group Field with binary
Binary point Subpriority field
priority field point
value
Table 4-9 shows the split of the interrupt priority fields for Non-secure ICC_BPR1_EL1.
ICC_BPR1_EL1
Group Field with binary
Binary point Subpriority field
priority field point
value
0 - - -
Table 4-10 shows the split of the interrupt priority fields for ICC_BPR0_EL1.
Table 4-10 ICC_BPR0_EL1 Binary Point for Group 1 interrupts when CBPR == 1, or for Group 0
interrupts
ICC_BPR0_EL1
Group field priority Subpriority field Field with binary point
Binary point value
4-68 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Table 4-10 ICC_BPR0_EL1 Binary Point for Group 1 interrupts when CBPR == 1, or for Group 0
interrupts (continued)
ICC_BPR0_EL1
Group field priority Subpriority field Field with binary point
Binary point value
a. If a Non-secure write sets the priority value field for a Non-secure interrupt then bit[7] == 1.
The minimum binary point value that is supported depends on the IMPLEMENTATION DEFINED number of priority
bits, as shown in Table 4-11.
8 0
7 0
6 1
5 2
4 3
The number of priority bits that are implemented is indicated by ICC_CTLR_EL1.PRIBits and
ICC_CTLR_EL3.PRIBits.
• ICC_CTLR_EL3.CBPR_EL1S == 1:
— Writes to ICC_BPR1_EL1 at Secure EL1 modify ICC_BPR0_EL1.
— Reads from ICC_BPR1_EL1 at Secure EL1 return the value of ICC_BPR0_EL1.
• ICC_CTLR_EL3.CBPR_EL1NS == 1:
— Non-secure writes to ICC_BPR1_EL1 modify ICC_BPR0_EL1.
— Non-secure reads from ICC_BPR1_EL1 return the value of ICC_BPR0_EL1.
Note
• When an interrupt is using Non-secure ICC_BPR1_EL1, the effective binary point value is that stored in the
register, minus one, as shown in Table 4-9 on page 4-68. This means that software with no awareness of the
effects of interrupt grouping and where two Security states are supported, sees the same priority grouping
mechanism, regardless of whether it is running on a PE that is in Secure state or in Non-secure state.
• Priority grouping always operates on the full priority, which is the value that would be visible to a Secure
read. This is different from the value that is visible to a Non-secure read of the priority value corresponding
to a Non-secure interrupt. See Figure 4-8 on page 4-74 and Figure 4-9 on page 4-75.
• When EL3 is using AArch32, and ICC_MCTLR.CBPR_EL1S == 1, accesses to ICC_BPR1 at EL3 and not
in Monitor mode access the state of ICC_BPR0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-69
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Pseudocode
The following pseudocode indicates the group priority of the interrupt.
// GroupBits()
// ===========
// Returns the priority group field for the current BPR value for the group
if (group == IntGroup_G0 ||
(group == IntGroup_G1NS && cbpr_G1NS == ‘1’) ||
(group == IntGroup_G1S && cbpr_G1S == ‘1’)) then
bpr = UInt(ICC_BPR0_EL1.BinaryPoint);
elsif group == IntGroup_G1S then
bpr = UInt(ICC_BPR1_EL1S.BinaryPoint);
else
bpr = UInt(ICC_BPR1_EL1NS.BinaryPoint) -1;
mask = Ones(7-bpr):Zeros(bpr+1);
• If 32 or fewer priority levels are implemented, accesses to ICC_AP0R<n>_EL1, where n = 1-3, are
UNDEFINED.
• If more than 32 and fewer than 65 priority levels are implemented, accesses to ICC_AP0R<n>_EL1, where
n = 2-3, are UNDEFINED.
• If 32 or fewer priority levels are implemented, accesses to ICC_AP1R<n>_EL1, where n = 1-3, are
UNDEFINED.
• If more than 32 and fewer than 65 priority levels are implemented, accesses to ICC_AP1R<n>_EL1, where
n = 2-3, are UNDEFINED.
Writing any value other than the last read value, or 0x00000000, to these registers can cause:
• Interrupts that would otherwise preempt execution to not preempt execution.
• Interrupts that otherwise would not preempt execution to preempt execution.
Writing any value to Non-secure ICC_AP1R<n>_EL1 cannot prevent the correct prioritization and the forwarding
of interrupts of higher priority than those in the Non-secure priority range, meaning that this does not create a
security hole.
Writes to these registers in any order other than the following can result in UNPREDICTABLE behavior:
1. ICC_AP0R<n>_EL1.
2. Secure ICC_AP1R<n>_EL1.
3. Non-secure ICC_AP1R<n>_EL1.
4-70 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Note
An ISB is not required between each write to ICC_AP0R<n>_EL1, Secure ICC_AP1R<n>_EL1, and Non-secure
ICC_AP1R<n>_EL1.
Group
Secure Non-secure Preemption
priority ICC_AP0Rn implementation
ICC_BPR0_EL1 ICC_BPR1_EL1 levels
bits
3 4 4 16 ICC_AP0R<n>_EL1[15:0], where n = 0
2 3 5 32 ICC_AP0R<n>_EL1[31:0], where n = 0
Group
Secure Non-secure Preemption
priority ICC_AP1Rn implementation
ICC_BPR0_EL1 ICC_BPR1_EL1 levels
bits
3 4 4 16 ICC_AP1R<n>_EL1[15:0], where n = 0
2 3 5 32 ICC_AP1R<n>_EL1[31:0], where n = 0
4.8.4 Preemption
A CPU interface supports signaling of higher priority pending interrupts to a target PE before an active interrupt
completes. A pending interrupt is only signaled if both:
• Its priority is higher than the priority mask for that CPU interface. See Priority masking on page 4-72.
• Its group priority is higher than that of the running priority on the CPU interface. See Priority grouping on
page 4-67 for more information.
Preemption occurs at the time when the PE takes the new interrupt, and starts handling the new interrupt instead of
the previously active interrupt or the currently running process. When this occurs, the initial active interrupt is said
to have been preempted.
Note
The value of the I or F bit in the Process State, PSTATE, and the Exception level and the interrupt routing controls
in software and hardware, determine whether the PE responds to the signaled interrupt by taking the interrupt. For
more information, see ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile.
For more information about enabling interrupts, see Enabling the distribution of interrupts on page 4-63.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-71
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
ICC_BPR1_EL1 determines whether a Group 1 interrupt is signaled to the PE for possible preemption. The
Non-secure copy of this register is used for Non-secure Group 1 interrupts. The Secure copy is used for Secure
Group 1 interrupts.
The GIC always masks an interrupt that has the lowest supported priority. This priority is sometimes referred to as
the idle priority.
Note
Writing 0xFF to ICC_PMR_EL1 always sets it to the lowest supported priority. Table 4-7 on page 4-65 shows how
the lowest supported priority varies with the number of implemented priority bits.
If the GIC provides support for two Security states, ICC_PMR_EL1 is RAZ/WI to Non-secure accesses, if bit[7]
== 0. During normal operation, software executing in Non-secure state does not access ICC_PMR_EL1when it is
programmed with such a value.
For information that relates to different GIC configurations, see Non-secure accesses to register fields for Secure
interrupt priorities on page 4-66.
Note
This section applies to any GIC implementation that supports two Security states.
When a PE reads the priority value of a Non-secure Group 1 interrupt, the GIC returns either the Secure or the
Non-secure read of that value, depending on whether the access is Secure or Non-secure.
4-72 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
The GIC implements a minimum of 32 and a maximum of 256 priority levels. This means it implements 5-8 bits of
the 8-bit priority value fields in the appropriate GICR_IPRIORITYR<n> and GICD_IPRIORITYR<n> register. All
of the implemented priority bits can be accessed by a Secure access, and unimplemented low-order bits of the
priority fields are RAZ/WI. Figure 4-5 shows the Secure read of a priority value field for an interrupt. The priority
value stored in the Distributor is equivalent to the Secure read.
7 6 5 4 3 2 1 0
H G F E D C B A
Figure 4-5 Secure read of the priority field for any interrupt
In this view:
• Bits H-D are the bits that the GIC must implement, corresponding to 32 priority levels.
• Bits C-A are the bits the GIC might implement. They are RAZ/WI if not implemented.
• The GIC must implement bits H-A to provide the maximum 256 priority levels.
For Non-secure accesses, the GIC supports half the priority levels it supports for Secure accesses, which means a
minimum of 16 priority levels. Figure 4-6 shows the Non-secure view of a priority value field for a Non-secure
Group 1 interrupt.
7 6 5 4 3 2 1 0
G F E D C B A 0
Figure 4-6 Non-secure read of the priority field for a Non-secure Group 1 interrupt
In this read:
• Bits G-D are the bits that the GIC must implement, corresponding to 16 priority levels.
• Bits C-A are the bits the GIC might implement, that are RAZ/WI if not implemented.
• The GIC must implement bits G-A to provide the maximum 128 priority levels.
• Bit [0] is RAZ/WI.
The Non-secure read of a priority value does not show how the value is stored in the registers in the Distributor. For
Non-secure writes to a priority field of a Non-secure Group 1 interrupt, before storing the value:
• The value is right-shifted by one bit.
• Bit [7] of the value is set to 1.
This translation means the priority value for the Non-secure Group 1 interrupt is in the bottom half of the priority
range.
A Secure read of the priority value for an interrupt returns the value stored in the Distributor. Figure 4-7 shows this
Secure read of the priority value field for a Non-secure Group 1 interrupt that has had its priority value field set by
a Non-secure access, or has had a priority value with bit[7] == 1 set by a Secure access:
7 6 5 4 3 2 1 0
1 G F E D C B A
Figure 4-7 Secure read of the priority field for a Non-secure Group 1 interrupt
A Secure write to the priority value field for a Non-secure Group 1 interrupt can set bit [7] to 0. If a Secure write
sets bit[7] to 0:
• A Non-secure read returns the value GFEDCBA0.
• A Non-secure write can change the value of the field, but only to a value that has bit [7] set to 1 for the Secure
read of the field.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-73
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
Note
• This behavior of Non-secure accesses applies only to the priority value fields in GICR_IPRIORITYR<n>
and GICD_IPRIORITYR<n>, as appropriate:
— If the Priority field in ICC_PMR_EL1 holds a value with bit [7] == 0, then the field is RAZ/WI for
Non-secure accesses.
— If the Priority field in ICC_RPR_EL1 holds a value with bit [7] == 0, then the field is RAZ for
Non-secure reads.
• ARM does not recommend setting bit[7] to 0 for a Non-secure Group 1 interrupt in this way because it places
the interrupt in the wrong half of the priority range for maintenance by non-secure code.
Figure 4-8 shows the relationship between the reads of the priority value fields for Non-secure Group 1 interrupts.
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
Non-secure access
G F E D C B A 0 Translation of Secure view
7 6 5 4 3 2 1 0
Secure access
H G F E D C B A Matches Secure view
Figure 4-8 Relationship between Secure and Non-secure reads of interrupt priority fields
Figure 4-9 on page 4-75 shows how software reads of the interrupt priorities from Secure and Non-secure accesses
relate to the priority values held in the Distributor, and to the interrupt values that are visible to Secure and
Non-secure accesses. Figure 4-9 on page 4-75 applies to a GIC that implements the maximum range of priority
values.
4-74 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
a. All priority values are even (bit [0] == 0) in the software view of Non-secure
accesses.
b. Ranges recommended by ARM.
Figure 4-9 Software reads of the priorities of Group 1 and Group 0 interrupts
Table 4-14 shows how the number of priority value bits implemented by the GIC affects the Secure and Non-secure
reads of the priority of a Non-secure Group 1 interrupt.
Note
Software executing in Non-secure state has no visibility of the priority settings of Group 0 interrupts, or where
applicable, of Secure Group 1 interrupts.
Table 4-14 Effect of not implementing some priority field bits, two Security states
[7:0] 0xFF - 0x00 (255-0), all values 0xFE - 0x00 (254-0), even values only
[7:1] 0xFE - 0x00 (254-0), even values only 0xFC - 0x00 (252-0), in steps of 4
This model for the presentation of priority values ensures software written to operate with an implementation of this
GIC architecture functions as intended regardless of whether the GIC provides support for two Security states.
However, programmers must ensure that software assigns the appropriate priority levels to the Group 0 and Group
1 interrupts.
Note
To control priority values, ARM strongly recommends that:
• For a Group 0 interrupt, software sets bit[7] of the priority value field to 0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 4-75
ID072617 Non-Confidential
4 Physical Interrupt Handling and Prioritization
4.8 Interrupt prioritization
• If using a Secure write to set the priority of a Non-secure Group 1 interrupt, software sets bit[7] of the priority
value field to 1.
This ensures that all Group 0 and, if applicable, Secure Group 1 interrupts have higher priorities than all Non-secure
Group 1 interrupts. However, a system might have requirements that cannot be met with this scheme.
Group 0 0b00
• Software might not be aware that the GIC supports two Security states, and therefore might not know whether
it is making Secure or Non-secure accesses to GIC registers. However, for any implemented interrupt,
software can write 0xFF to the corresponding GICR_IPRIORITYR<n> priority value field, and then read
back the value stored in the field to determine the supported interrupt priority range. ARM recommends that,
before checking the priority range in this way:
— For a peripheral interrupt, software first disables the interrupt.
— For an SGI, software first checks that the interrupt is inactive.
4-76 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 5
Virtual Interrupt Handling and Prioritization
This chapter describes the fundamental aspects of GIC virtual interrupt handling and prioritization:
• About GIC support for virtualization on page 5-78.
• Operation overview on page 5-79.
• Configuration and control of VMs on page 5-83.
• Virtual LPI support on page 5-86.
• Pseudocode on page 5-88.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-77
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.1 About GIC support for virtualization
In ARMv8, when EL2 is implemented and enabled, the CPU interface provides mechanisms to minimize the
hypervisor overhead of routing interrupts to a VM. For more information about vPEs, see Operation overview on
page 5-79.
For more information about EL2 and virtual interrupts, see ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile.
In GICv4, for the directly injected virtual LPIs , the scheduled vPE is determined by GICR_VPENDBASER. For
more information, see Doorbell interrupts on page 5-87
Note
The GIC does not provide additional mechanisms for the virtualization of the GICD_*, GICR_*, and GITS_*
registers. To virtualize VM accesses to these registers, the hypervisor must set stage 2 data aborts to those memory
locations so that the hypervisor can emulate these effects. For more information about stage 2 data aborts, see ARM®
Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile.
When a GIC provides support for virtualization, the VM operates in an environment that has the following features:
• The vPE can be configured to receive virtual Group 0 interrupts.
• The vPE can be configured to receive virtual Group 1 interrupts.
• Virtual Group 0 interrupts are signaled using the virtual FIQ signal to Non-secure EL1.
• Virtual Group 1 interrupts are signaled using the virtual IRQ signal to Non-secure EL1.
• Virtual interrupts can be handled by the vPE as if they were physical interrupts.
Note
This applies when affinity routing and System register access are enabled. For information about support for virtual
interrupts in legacy operation, see Support for legacy operation of VMs on page 10-715.
EL2 controls the generation of virtual interrupts for a VM. This allows software executing at EL2 to:
• Generate virtual Group 0 and Group 1 interrupts for the vPE.
• Save and restore the interrupt state of the vPE.
• Control the prioritization of the virtual interrupts.
• Change the vPE that is scheduled.
GICv4 introduces the ability to present virtual LPIs from an ITS directly to a vPE, without hypervisor intervention.
Handling virtual interrupts in legacy operation requires a GICV_* memory-mapped interface. See Support for
legacy operation of VMs on page 10-715 for more information.
5-78 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.2 Operation overview
Note
This chapter describes the handling of virtual interrupts in the context of the AArch64 execution state with System
register access enabled. The individual AArch64 System register descriptions that are cross-referenced in this
chapter contain a reference to the AArch32 System register that provides the same functionality. For information
about VMs in legacy operation, see Support for legacy operation of VMs on page 10-715.
Software executing at EL3 or EL2 configures the PE to route physical interrupts to EL2. The interrupt can be:
• An interrupt targeting a vPE. The hypervisor sets the corresponding virtual INTID to the pending state on the
target vPE and includes the information about the associated physical INTID. When the vPE is not scheduled
on a PE, the hypervisor might choose to reschedule the vPE. Otherwise the interrupt is left pending on the
vPE for scheduling by the hypervisor at a later time.
The hypervisor handles physical interrupts according to the rules described in Chapter 4 Physical Interrupt
Handling and Prioritization before they are virtualized. For information about the handling of physical interrupts
and their virtualization during legacy operation, see Chapter 10 Legacy Operation and Asymmetric Configurations.
The GIC virtualization support includes a list of virtual interrupts for a vPE that is stored in hardware List registers,
see Usage model for the List registers on page 5-81. Each entry in the list corresponds to either a pending or an
active interrupt, and the entry describes the virtual interrupt number, the interrupt group, the interrupt state, and the
virtual priority of the interrupt. A virtual interrupt described in the list entry can be configured to be associated with
a physical SPI or PPI.
The GIC implementation selects the highest priority pending virtual interrupt from the list of interrupts held in the
List registers and, if it is of sufficient virtual priority compared to the active virtual interrupts and virtual priority
mask, presents it as either a virtual FIQ or a virtual IRQ, depending on the group of the interrupt. The virtual CPU
interface controls apply to the virtual interrupt in the same way as the physical interrupt controls apply to the
physical interrupt. Therefore, using the virtual CPU interface controls, software executing on the vPE can:
• Set the virtual priority mask.
• Control how the virtual priority is split between the group priority and the subpriority.
• Acknowledge a virtual interrupt.
• Perform a priority drop on the virtual interrupt.
• Deactivate the virtual interrupt.
The virtual CPU interface supports both EOImodes, so that a virtual EOI can perform a priority drop alone, or a
combined priority drop and deactivation.
When a virtual interrupt is acknowledged, then the state of the virtual interrupt changes from pending to active in
the corresponding List register entry.
When a virtual interrupt is deactivated, then the state of the virtual interrupt changes from active to inactive, or from
active and pending to pending, in the corresponding List register entry. If the virtual interrupt is associated with a
physical interrupt, then the associated physical interrupt is deactivated.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-79
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.2 Operation overview
Virtual interrupts taken to Non-secure EL1 are handled in a similar manner to physical interrupts that are handled
in a system with a single Security state, that is where GICD_CTLR.DS is set to 1:
• Group 0 interrupts are signalled using the virtual FIQ signal.
• Group 1 interrupts are signalled using the virtual IRQ signal.
• Group 0 and Group 1 interrupts share an interrupt prioritization and preemption scheme. A minimum of 32
and a maximum of 256 priority levels are supported, as determined by the values in ICH_VTR_EL2.
Note
The priority value is not subject to the shift used for Non-secure physical interrupts. While virtualization
supports up to 8 bits of priority, a minimum of 5 and a maximum of 8 bits must be implemented.
Note
For information about the rules governing exception entry on an ARMv8-A PE, see ARM® Architecture Reference
Manual, ARMv8, for ARMv8-A architecture profile.
Virtual accesses to the following Group 0 ICC_* registers access the ICV_* equivalents:
• Accesses to ICC_AP0R<n>_EL1 access ICV_AP0R<n>_EL1.
• Accesses to ICC_BPR0_EL1 access ICV_BPR0_EL1.
• Accesses to ICC_EOIR0_EL1 access ICV_EOIR0_EL1.
• Accesses to ICC_HPPIR0_EL1 access ICV_HPPIR0_EL1.
• Accesses to ICC_IAR0_EL1 access ICV_IAR0_EL1.
• Accesses to ICC_IGRPEN0_EL1 access ICV_IGRPEN0_EL1.
Virtual accesses to the following Group 1 ICC_* registers access the ICV_* equivalents:
• Accesses to ICC_AP1R<n>_EL1 access ICV_AP1R<n>_EL1.
• Accesses to ICC_BPR1_EL1 access ICV_BPR1_EL1.
• Accesses to ICC_EOIR1_EL1 access ICV_EOIR1_EL1.
• Accesses to ICC_HPPIR1_EL1 access ICV_HPPIR1_EL1.
• Accesses to ICC_IAR1_EL1 access ICV_IAR1_EL1.
• Accesses to ICC_IGRPEN1_EL1 access ICV_IGRPEN1_EL1.
Accesses at Non-secure EL1 to the Common registers are virtual when either HCR_EL2.IMO == 1 or
HCR_EL2.FMO == 1, or both.
Virtual accesses to the following Common ICC_* registers access the ICV_* equivalents:
• Accesses to ICC_RPR_EL1 access ICV_RPR_EL1.
• Accesses to ICC_CTLR_EL1 access ICV_CTLR_EL1.
• Accesses to ICC_DIR_EL1 access ICV_DIR_EL1.
• Accesses to ICC_PMR_EL1 access ICV_PMR_EL1.
A virtual write to ICC_SGI0R_EL1, ICC_SGI1R_EL1, or ICC_ASGI1R_EL1 traps to EL2.
Software executing at EL2 can access some ICV_* register state using ICH_VMCR_EL2 and ICH_VTR_EL2 as
follows:
• ICV_PMR_EL1.Priority aliases ICH_VMCR_EL2.VPMR.
• ICV_BPR0_EL1.BinaryPoint aliases ICH_VMCR_EL2.VBPR0.
• ICV_BPR1_EL1.BinaryPoint aliases ICH_VMCR_EL2.VBPR1.
• ICV_CTLR_EL1.EOImode aliases ICH_VMCR_EL2.VEOIM.
• ICV_CTLR_EL1.CBPR aliases ICH_VMCR_EL2.VCBPR.
• ICV_IGRPEN0_EL1aliases ICH_VMCR_EL2.VENG0.
• ICV_IGRPEN1_EL1. aliases ICH_VMCR_EL2.VENG1.
• ICV_CTLR_EL1.PRIbits aliases ICH_VTR_EL2.PRIbits.
5-80 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.2 Operation overview
For each physical interrupt received that is targeting a vPE, the hypervisor adds that interrupt to a prioritized list of
pending virtual interrupts that is presented to the vPE. The GIC hardware also provides a set of List registers,
ICH_LR<n>_EL2, that holds an IMPLEMENTATION DEFINED number of the top entries in the prioritized list for the
currently running vPE. Typically, there are at most only a few pending virtual interrupts for that vPE. The interrupts
in the List register are then handled by the vPE in hardware, providing the same behavior for the VM as is seen by
a non-virtualized operating system handling physical interrupts.
However, the total number of interrupts that are pending, active and pending, or active, can exceed the number of
List registers available. In this case, the hypervisor can save one or more entries to memory, and later restore them
to the List registers based on their priority. In this way, the List registers act as a cache for the list of pending, active,
or active and pending interrupts that is controlled by software, for a vPE.
For more details on maintenance interrupts, see Maintenance interrupts on page 5-85.
Note
Although the List registers might include only active interrupts, with the hypervisor maintaining any pending
interrupts in memory, a pending interrupt cannot be signalled to the vPE until the hypervisor adds it to the List
registers. Therefore, to minimize interrupt latency and ensure the efficient operation of the vPE, ARM strongly
recommends that the List registers contain at least one pending interrupt, if a List register is available for this
interrupt.
The List registers form part of the context of the vPE. When there is switch from one vPE running on a PE to another
vPE, the hypervisor switches the List registers accordingly.
The number of List registers is IMPLEMENTATION DEFINED, and can be discovered by reading ICH_HCR_EL2
The following pseudocode indicates the number of List registers that are implemented.
// NumListRegs()
// =============
// The number of implemented List Registers. This value is IMPLEMENTATION DEFINED.
integer NumListRegs()
return integer IMPLEMENTATION_DEFINED “Number of List registers”;
• Having two or more interrupts with the same pINTID in the List registers for a single virtual CPU interface.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-81
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.2 Operation overview
• Having a List register entry with ICH_LR<n>_EL2.HW= 1, which is associated with a physical interrupt, in
active state or in pending state in the List registers if the Distributor does not have the corresponding physical
interrupt in either the active state or the active and pending state.
5-82 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.3 Configuration and control of VMs
A hypervisor uses a System register interface that is accessible at EL2 to switch context and to control multiple
VMs. The context held in the ICH_* System registers is the context for the scheduled vPE. A vPE is scheduled
when:
• ICH_HCR_EL2.En == 1.
• HCR_EL2.FMO == 1, when virtualizing Group 0 interrupts.
• HCR_EL2.IMO == 1, when virtualizing Group 1 interrupts.
When a vPE is scheduled, the ICH_*_EL2 registers affect software executing at Non-secure EL1.
To support these two models, for SPIs and PPIs, the GIC List registers provide a mechanism to configure a virtual
interrupt be associated with a physical interrupt. The physical interrupt and the virtual interrupt do not necessarily
have the same INTID.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-83
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.3 Configuration and control of VMs
both the virtual interrupt and the associated physical interrupt. The virtual interrupt might be deactivated as
the result of either an end of interrupt, if ICH_VMCR_EL2.VEOIM== 0, or as the result of a separate
deactivation if ICH_VMCR_EL2.VEOIM == 1.
Table 5-1 Group bit count in the hypervisor Active Priorities Registers
Number of
Bits Register
registers
5 ICH_AP0R<n>_EL2 n=0
ICH_AP1R<n>_EL2
6 ICH_AP0R<n>_EL2 n = 0-1
ICH_AP1R<n>_EL2
7 ICH_AP0R<n>_EL2 n = 0-3
ICH_AP1R<n>_EL2
If a bit is set to 1 in one of the ICH_AP0R<n>_EL2 registers, the equivalent bit in the ICH_AP1R<n>_EL2 register
must be zero when executing in Non-secure EL1 or Non-secure EL0, otherwise the behavior of the GIC is
UNPREDICTABLE.
If a bit is set to 1 in one of the ICH_AP1R<n>_EL2 registers, the equivalent bit in the ICH_AP0R<n>_EL2 register
must be zero when executing in Non-secure EL1 or Non-secure EL0, otherwise the behavior of the GIC is
UNPREDICTABLE.
ICH_AP0R<n>_EL2 provide a list of up to 128 bits where there is a bit for each implemented preemptable priority.
If a bit is 1, this indicates that there is a Group 0 interrupt in that priority group which has been acknowledged but
has not had a priority drop. If a bit is 0, this indicates that there is no Group 0 interrupt active at that priority, or that
all active Group 0 interrupts within that priority group have undergone a priority drop.
Note
Writing to the Link registers does not have an effect on the Active Priorities Registers.
ICH_AP1R<n>_EL2 provide a list of up to 128 bits where there is a bit for each implemented preemptable priority.
If a bit is 1, this indicates that there is a Group 1 interrupt in that priority group which has been acknowledged but
has not had a priority drop. If a bit is 0, this indicates that there is no Group 1 interrupt active at that priority or that
all active Group 1 interrupts within that priority group have undergone a priority drop.
Writing any value other than the last read value of the register, or 0x00000000, to these registers can cause:
• Virtual interrupts that would otherwise preempt execution to not preempt execution.
• Virtual interrupts that otherwise would not preempt execution to preempt execution at Non-secure EL1 or
EL0.
Note
ARM does not expect these registers to be read and written by software for any purpose other than:
• Saving and restoring state, as part of software power management.
• Context switching between vPEs on the same PE.
5-84 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.3 Configuration and control of VMs
Writing to the Active Priority Registers in any order other than the following order results in UNPREDICTABLE
behavior:
1. ICH_AP0R<n>_EL2.
2. ICH_AP1R<n>_EL2.
Note
An ISB is not required between the write to ICH_AP0R<n>_EL2 and the write to ICH_AP1R<n>_EL2.
Note
• Maintenance interrupts are generated only when the global enable bit for the virtual CPU interface,
ICH_HCR_EL2.En, is set to 1.
• ARM strongly recommends that maintenance interrupts are configured to use INTID 25. For more
information, see Server Base System Architecture (SBSA).
Maintenance interrupts are level-sensitive interrupts. Configuration bits in ICH_HCR_EL2 can be set to 1 to enable
the generation of maintenance interrupts when:
• Group 0 virtual interrupts are enabled.
• Group 1 virtual interrupts are enabled.
• Group 0 virtual interrupts are disabled.
• Group 1 virtual interrupts are disabled.
• There are no pending interrupts in the List registers.
• At least one EOI request occurs with no valid List register entry for the corresponding interrupt.
• There are no valid entries, or there is only one valid entry, in the List registers. This is an underflow condition.
• At least one List register entry has received an EOI request.
See ICH_MISR_EL2, Interrupt Controller Maintenance Interrupt State Register on page 8-300 for more
information about the control and status reporting of maintenance interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-85
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.4 Virtual LPI support
GICv4 provides support for the direct injection of virtual LPIs, vLPIs, in the LPI INTID range. With the direct
injection of vLPIs, the GICR_* registers use structures in memory for each vPE to hold LPI configuration and
pending information for vLPIs in the same way that they use structures in memory to hold LPI configuration and
pending information for physical LPIs. However, the virtual structures are different from the physical structures,
with the vLPI tables for the current vPE scheduled on a PE by GICR_VPENDBASER and GICR_VPROPBASER
in the Redistributor associated with that PE, For more information about the physical LPI tables, see LPI
Configuration tables on page 6-95 and LPI Pending tables on page 6-97.
The Redistributor associated with the PE on which the vPE is scheduled determines the highest priority pending
vLPI, and forwards this to the virtual CPU interface of the vPE. This vLPI and the interrupts in the List register are
then prioritized together to determine the highest priority pending virtual interrupt for the vPE.
For information about virtual LPIs and the virtual CPU tables, see The vPE table on page 6-104.
• The ITS interruption translation table entry for a vLPI is configured with:
— A control flag that indicates the EventID is associated with a virtual LPI.
— A vPEID to index into the ITS vPE table. For more information about vPEID and the vPE table, see
The vPE table on page 6-104. The vPE table provides:
1. The base address of the GICR_* registers in the format defined by GITS_TYPER.PTA.
2. The base address of the virtual LPI Pending table associated with the target VM.
— A virtual INTID, vINTID, that indicates which vLPI becomes pending.
— A physical INTID, pINTID, that can be used as a doorbell interrupt to the hypervisor if the vPE is not
scheduled on a PE. The value 1023 is used where a doorbell interrupt is not required, otherwise an
INTID in the physical LPI range must be provided.
5-86 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.4 Virtual LPI support
If, at the time that a vPE is descheduled from a PE, there are one or more vLPIs pending for the PE,
GICR_VPENDBASER.PendingLast is set to 1. This can be used by the hypervisor to make scheduling decisions.
The equivalent capability is provided in the case of direct injections of vLPIs by the provision of doorbell LPIs.
For a vLPI, the ITS can configure a physical LPI that is sent to a PE when the vLPI becomes pending and the vPE
is not scheduled on that PE. This physical LPI is a Doorbell LPI.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-87
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.5 Pseudocode
5.5 Pseudocode
The following pseudocode indicates the number of virtual active priority bits.
// ActiveVirtualPRIBits()
// ======================
integer ActiveVirtualPRIBits()
if VirtualPRIBits() == 8 then
return 128;
else
return 2^(VirtualPREBits());
The following pseudocode indicates the highest active group virtual priority.
// GetHighestActiveVGroup()
// ========================
// Returns a value indicating the interrupt group of the highest priority
// bit set from two registers. Returns None if no bits are set.
return IntGroup_None;
// GetHighestActiveVPriority()
// ===========================
// Returns the index of the highest priority bit set from two registers.
return Ones();
The following pseudocode indicates whether any bits are set in the supplied Active Priorities registers.
// VPriorityBitsSet()
// ==================
// Returns TRUE if any bit is set in the supplied registers, FALSE otherwise
return FALSE;
The following pseudocode clears the highest priority bit in the supplied virtual Active Priorities registers.
// VPriorityDrop()
// ===============
// Clears the highest priority bit set in the supplied registers.
5-88 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
5 Virtual Interrupt Handling and Prioritization
5.5 Pseudocode
return;
elsif avp1<i> != v then
avp1<i> = v;
return;
return;
// FindActiveVirtualInterrupt()
// ============================
// Find a matching List register. Returns -1 if there is no match.
for i = 0 to NumListRegs() - 1
if ((ICH_LR_EL2[i].State IN {IntState_Active, IntState_ActivePending}) &&
ICH_LR_EL2[i].VirtualID<INTID_SIZE-1:0> == vID) then
return i;
return -1;
The following pseudocode indicates the virtual group priority based on the minimum Binary Point register.
// VPriorityGroup()
// ================
// Returns the priority group field for the minimum BPR value
The following pseudocode indicates the virtual group priority based on the appropriate Binary Point register.
// VGroupBits()
// ============
// Returns the priority group field for the current BPR value for the group
mask = Ones(7-bpr):Zeros(bpr+1);
return (priority AND mask);
// VIDBits()
// =========
integer VIDBits()
id_bits = ICH_VTR_EL2.IDbits;
case id_bits of
when ‘000’ return 16;
when ‘001’ return 24;
otherwise Unreachable();
// VirtualPREBits()
// ================
integer VirtualPREBits()
return UInt(ICH_VTR_EL2.PREbits) + 1;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 5-89
ID072617 Non-Confidential
5 Virtual Interrupt Handling and Prioritization
5.5 Pseudocode
// VirtualPRIBits()
// ================
integer VirtualPRIBits()
return UInt(ICH_VTR_EL2.PRIbits) + 1;
5-90 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 6
Locality-specific Peripheral Interrupts and the ITS
This chapter describes Locality-specific Peripheral Interrupts (LPIs) and the Interrupt Translation Service (ITS). It
contains the following sections:
• LPIs on page 6-92.
• The ITS on page 6-99.
• ITS commands on page 6-108.
• Common ITS pseudocode functions on page 6-136.
• ITS command error encodings on page 6-145.
• ITS power management on page 6-148.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-91
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
6.1 LPIs
Locality-specific Peripheral Interrupts (LPIs) are edge-triggered message-based interrupts that can use an Interrupt
Translation Service (ITS), if it is implemented, to route an interrupt to a specific Redistributor and connected PE.
GICv3 provides two types of support for LPIs. LPIs can be supported either:
• Using the ITS to translate an EventID from a device into an LPI INTID. For more information about
EventIDs, see The ITS on page 6-99.
• By forwarding an LPI INTID directly to the Redistributors, using GICR_SETLPIR.
Note
The following registers are mandatory in an implementation that supports LPIs but does not include an ITS. The
function of the registers is IMPLEMENTATION DEFINED in implementations that do include an ITS:
• GICR_SETLPIR.
• GICR_CLRLPIR.
• GICR_INVLPIR.
• GICR_INVALLR.
• GICR_SYNCR.
These registers control physical LPIs in a system that does not include an ITS.
In an implementation that includes LPIs, at least 8192 LPIs are supported. For this reason, the configuration of each
interrupt, and the pending information for each interrupt, is held in tables in memory, rather than in registers, and
the tables are pointed to by registers held in the Redistributors.
Note
• ARM expects that an implementation will cache parts of the tables in the Redistributors to reduce latency and
memory traffic. The form of these caches is IMPLEMENTATION DEFINED.
• The addresses for the LPI tables are in the Non-secure physical address space.
Figure 6-1 on page 6-93 shows the generation of LPIs in an implementation that includes at least one ITS.
6-92 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
Message-based interrupts
Distributor ITSa
GITS_TRANSLATER
LPIs
PE PE PE PE PE
x.y.0.0 x.y.0.1 x.y.0.2 x.y.n.0 x.y.n.1
Cluster C0 Cluster Cn
Note
In Figure 6-1, the ITS channel to the Redistributors is IMPLEMENTATION DEFINED.
Figure 6-2 on page 6-94 shows the generation of LPIs in an implementation without an ITS.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-93
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
Message-based interrupts
Distributor
LPIs
PE PE PE PE PE
x.y.0.0 x.y.0.1 x.y.0.2 x.y.n.0 x.y.n.1
Cluster C0 Cluster Cn
When GICD_CTLR.DS == 0:
• LPIs are only supported when affinity routing is enabled for Non-secure state.
• LPIs are always Non-secure Group 1 interrupts.
When GICD_CTLR.DS == 1:
• LPIs are only supported when affinity routing is enabled.
• LPIs are always Group 1 interrupts.
There is a single global physical LPI space so that LPIs can be moved between all Redistributors. Software programs
the size of the single global physical LPI space using GICR_PROPBASER.IDbits.
Note
The size of the physical LPI space is limited to the maximum size that an implementation supports, which is defined
in GICD_TYPER.IDbits.
For a given Redistributor, LPI configuration and state are maintained in two tables in memory, described in the
following sections:
• LPI Configuration tables on page 6-95.
• LPI Pending tables on page 6-97.
6-94 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
• LPI priority and enable bits programmed in the LPI Configuration table. The address of the LPI
Configuration table is defined by GICR_PROPBASER. If GICR_PROPBASER is updated when
GICR_CTLR.EnableLPIs == 1, the effects are UNPREDICTABLE. See LPI Configuration tables for more
information.
• Memory-backed storage for LPI pending bits in an LPI Pending table. This table is specific to a particular
Redistributor. The address of the LPI Pending table is defined by GICR_PENDBASER. If
GICR_PENDBASER is updated when GICR_CTLR.EnableLPIs == 1, the effects are UNPREDICTABLE.
GICR_PROPBASER.IDBits sets the size of the ID space, and thereby the number of entries in the LPI
Configuration table and the corresponding LPI Pending table.
Note
When LPIs are disabled at the Redistributor interface, that is when GICR_CTLR.EnableLPIs == 0, LPIs cannot
become pending. An attempt to make an LPI pending in this situation has no effect, and the LPI is lost. This differs
from disabling SGIs, PPIs, and SPIs, which prevents only the signaling of the interrupt to the CPU interface.
GICv4 introduces equivalent tables for handling virtual LPIs with addresses referenced in GICR_VPROPBASER
and GICR_VPENDBASER.
An implementation can treat all copies of GICR_PROPBASER that are required to have the same value as accessing
common state.
Setting different values in different copies of GICR_PROPBASER on Redistributors that are required to use a
common LPI Configuration table when GICR_CTLR.EnableLPIs == 1 leads to UNPREDICTABLE behavior.
If GICR_PROPBASER is programmed to different values on different Redistributors, it is IMPLEMENTATION
DEFINED which copy or copies of GICR_PROPBASER are used when the GIC reads the LPI Configuration tables.
However, the copy or copies that are used will correspond to a Redistributor on which GICR_CTLR.EnableLPIs ==
1.
To avoid UNPREDICTABLE behavior, software must ensure that all copies of the LPI Configuration tables are
identical, and all changes are globally observable, whenever:
• GICR_CTLR.EnableLPIs is written from 0 to 1 on any Redistributor.
• GICR_INVLPIR and GICR_INVALLR are written on any Redistributor with GICR_CTLR.EnableLPIs ==
1, if direct LPIs are supported.
• The INV and INVALL command is executed by an ITS, in an implementation that includes at least one ITS.
An LPI Configuration table in memory stores entries containing configuration information for each LPI, where:
• GICR_PROPBASER specifies a 4KB aligned physical address. This is the LPI Configuration table base
address.
• For any LPI N, the location of the table entry is defined by (base address + (N – 8192)).
To change the configuration of an interrupt, software writes to the LPI Configuration tables and then issues the INV
or INVALL command. In implementations that do not include an ITS, software writes to GICR_INVALLR or
GICR_INVLPIR.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-95
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
The LPI Configuration table contains an 8-bit entry for each LPI. Figure 6-3 shows the LPI Configuration table
entry format.
7 2 1 0
Priority
RES1
Enable
Table 6-1 shows the LPI Configuration table entry bit assignments.
[7:2] Priority The priority of the LPI. These are the most significant bits of the LPI priority. Bits[1:0] of
the priority are 0.
When GICD_CTLR.DS == 0, this value is shifted in accordance with the security and
priority rules specified in Software accesses of interrupt priority on page 4-72. This means
that LPI priorities are always in the lower half of the priority range. The priority value range
is 128-254.
If GICD_CTLR.DS == 1, the value in this field is not shifted.
Note
An implementation might support fewer than 8 bits of priority. Unimplemented bits will be
treated as RES0.
See Interrupt prioritization on page 4-65 for more information about interrupt priorities.
[1] - RES1.
[0] Enable LPI enable. This bit controls whether the LPI is enabled:
0 The LPI is not enabled.
1 The LPI is enabled.
Caching
A Redistributor can cache the information from the LPI Configuration tables pointed to by GICR_PROPBASER,
when GICR_CTLR.EnableLPI == 1, subject to all of the following rules:
• Whether or not one or more caches are present is IMPLEMENTATION DEFINED. Where at least one cache is
present, the structure and size is IMPLEMENTATION DEFINED.
• An LPI Configuration table entry might be allocated into the cache at any time.
• A cached LPI Configuration table entry is not guaranteed to remain in the cache.
• A cached LPI Configuration table entry is not guaranteed to remain incoherent with memory.
• A change to the LPI configuration is not guaranteed to be visible until an appropriate invalidation operation
has completed:
— If one or more ITS is implemented, invalidation is performed using the INV or INVALL command. A
SYNC command completes the INV and INVALL commands.
— If no ITS is implemented, invalidation is performed by writing to GICR_INVALLR or
GICR_INVLPIR.
If there is no Redistributor with GICR_CTLR.EnableLPIs == 1, the GIC has no cached LPI Configuration table
entries.
6-96 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
Each Redistributor maintains entries in a separate LPI Pending table that indicates the pending state of each LPI
when GICR_CTLR.EnableLPIs == 1 in the Redistributor:
0 The LPI is not pending.
1 The LPI is pending.
An LPI Pending table that contains only zeros, including in the first 1KB, indicates that there are no pending LPIs.
The first 1KB of the LPI Pending table is IMPLEMENTATION DEFINED. However, if the first 1KB of the LPI Pending
table and the rest of the table contain only zeros, this must indicate that there are no pending LPIs.
The first 1KB of memory for the LPI Pending tables must contain only zeros on initial allocation, and this must be
visible to the Redistributors, or else the effect is UNPREDICTABLE.
During normal operation, the LPI Pending table is maintained solely by the Redistributor.
Behavior is UNPREDICTABLE if software writes to the LPI Pending tables while GICR_CTLR.EnableLPIs == 1.
When GICR_CTLR.EnableLPIs is cleared to 0, behavior is UNPREDICTABLE if the LPI Pending table is written
before GICR_CTLR.RWP reads 0.
Redistributors that are required to share a common LPI Configuration table, as indicated by
GICR_TYPER.CommonLPIAff, might treat the OuterCache, Shareability, or InnerCache fields of
GICR_PENDBASER as accessing common state.
Having the OuterCache, Shareability, or InnerCache fields of GICR_PENDBASER are programmed to different
values on different Redistributors with GICR_CTLR.EnableLPIs == 1 in a system is UNPREDICTABLE.
For physical LPIs, when GICR_CTLR.EnableLPIs is changed to 1, the Redistributor must read the pending status
of the physical LPIs from the physical LPI Pending table.
Note
If GICR_PENDBASER.PTZ == 1, software guarantees that the LPI Pending table contains only zeros, including in
the first 1KB. In this case hardware might not read any part of the table.
If GICR_CTLR.EnableLPIs is cleared to 0, then when GICR_CTLR.RWP reads as 0 there are no further accesses
by the GIC to the LPI Pending table, and any caching of the LPI Pending table is invalidated. There is no guarantee
that clearing GICR_CTLR.EnableLPIs causes the LPI Pending table to be updated in memory.
Note
If one or more ITS is implemented, ARM strongly recommends that all LPIs are mapped to another Redistributor
before GICR_CTLR.EnableLPIs is cleared to 0.
For virtual LPIs, when GICR_CTLR.EnableLPIs ==1, and GICR_VPENDBASER.Valid is changed to 1, the
Redistributor must read the pending status of the virtual LPIs from the virtual LPI Pending table.
Note
IF GICR_VPENDBASER.IDAI == 0, the software guarantees that the LPI Pending table was written out by the
same GIC implementation, meaning that hardware can rely on the first 1KB of the table and might not read the entire
table.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-97
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.1 LPIs
6.1.3 Virtual LPI Configuration tables and virtual LPI Pending tables
GICv4 uses the same concept of memory tables to hold the configuration and pending information for virtual LPIs.
The format of these tables is the same as for physical LPIs, but the virtual LPI Configuration table is provided by
GICR_VPROPBASER and the virtual LPI Pending table is provided by GICR_VPENDBASER, see Virtual LPI
support on page 5-86.
6-98 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
For GICv4, the ITS also performs this function for interrupts that are directly injected as virtual LPIs.
The tables used in the translation process are described in more detail in the following sections:
• The ITS tables.
• The Device table on page 6-102.
• The Interrupt translation table on page 6-103.
• The Collection table on page 6-104.
• The vPE table on page 6-104.
These tables are created and maintained using the ITS commands described in ITS commands on page 6-108. GICv3
and GICv4 do not support direct access to the tables, and the tables must be configured using the ITS commands.
Note
All ITS tables are in the Non-secure physical address space.
The state and configuration of the ITS tables is stored in a set of tables in memory. This memory is allocated by
software before enabling the ITS.
GITS_BASER<n> specifies the base address and size of the ITS tables, and must be provisioned before the ITS is
enabled.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-99
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
The ITS tables have either a flat structure or a two-level structure. The structure is determined by
GITS_BASER<n>, as follows:
0 Flat table. In this case a contiguous block of memory is allocated for the table. The format of the
table is IMPLEMENTATION DEFINED.
Behavior is UNPREDICTABLE if memory that is used for the ITS tables does not contain zeros at the
time of the new allocation for use by the ITS.
1 Two-level table. In this case each entry in the level 1 table is 64 bits, and has the following format:
• Bit[63] - Valid:
— If this bit is cleared to 0, the PhysicalAddress field does not point to the base address
of a level 2 table.
— If this bit is set to 1, the PhysicalAddress field points to the base address of a level 2
table.
• Bits[62:52] - RES 0.
• Bits[51:N] - PhysicalAddress of the level 2 table. N is the number of bits that are required to
specify the page size:
— The size of the level 2 table is determined by GITS_BASER<n>.Page_Size.
• Bits[N-1:0] - RES 0. N is the number of bits that are required to specify the page size.
The level 1 table is indexed by the appropriate ID so that level 1 entry = ID/(Page Size / Entry Size).
Note
This allows software to determine the level 2 table that must be allocated for a given CollectionID,
DeviceID, or vPEID.
Note
As part of restoring the state of the ITS from powerdown events, the registers that describe the table can point to
tables that were previously populated by the ITS, and so might contains values other than zeros. The details of power
management of the ITS are IMPLEMENTATION DEFINED. See ITS power management on page 6-148.
Figure 6-4 on page 6-101 shows how these tables are used in the translation process.
6-100 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
Device
table
ID
vice
De
Interrupt Redistributor A
Source vPE table
(GICv4 only) Virtual
pending table
Ev
D
EI
en
vP
tID
D
TI
Interrupt vIN
translation
table
pI
Co
NT
lle
cti
ID
on Redistributor B
ID
Collection
table Pending table
When GITS_CTLR.Enabled is written from 0 to 1 behavior is UNPREDICTABLE if any of the following conditions
are true:
• GITS_CBASER.Valid == 0.
• GITS_BASER<n>.Valid == 0, for any GITS_BASER<n> register where the Type field indicates Device.
• GITS_BASER<n>.Valid == 0, for any GITS_BASER<n> register where the Type field indicates collection
and GITS_TYPER.HCC == 0.
• In GICv4, GITS_BASER<n>.Valid == 0, for any GITS_BASER<n> register where the Type field indicates
a vPE.
If GITS_BASER<n>.Indirect == 1, behavior is UNPREDICTABLE if memory that is used for a level 2 table does not
contain all zeros when it is first allocated for use by the ITS.
• An implementation will not access the tables that are pointed to by any of the GITS_BASER<n> registers.
• An implementation will not access a table that is pointed to by any GITS_BASER<n> register for which
GITS_BASER<n>.Valid == 0.
• For a table that is pointed to by a GITS_BASER<n> register for which GITS_BASER<n>.Valid == 1 and
GITS_BASER<n>.Indirect == 0, behavior is UNPREDICTABLE if the table is written by software.
• For a table that is pointed to by a GITS_BASER<n> register for which GITS_BASER<n>.Valid == 1 and
GITS_BASER<n>.Indirect == 1:
— Behavior is UNPREDICTABLE if any of the level 2 table entries are written by software.
— An ITS will not cache any entry in the level 1 table where the valid bit is cleared to 0.
— Behavior is UNPREDICTABLE if any level 1 table entry where the valid bit set to 1 is written by software.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-101
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
— A write to a level 1 table entry that changes the valid bit from 0 to 1 must be globally visible before
software adds a command to the ITS command queue that relies on that entry. Otherwise it is
UNKNOWN if the command will succeed or if it will be ignored.
• When the ITS supports collections that are held in memory, the total number of collections that is supported
is determined by the memory allocated by software:
— If GITS_BASER<n>.Indirect == 0, the number of collections supported in memory can be calculated
using the following formula:
((number of pages * page size) / entry size)
The relevant values for this formula are indicated in GITS_BASER<n>.Size,
GITS_BASER<n>.PageSize, and GITS_BASER<n>.EntrySize.
— If GITS_BASER<n>.Indirect == 1, the number of collections supported in memory can be calculated
using the following formula:
(((number of pages in level 1 table * page size) /8) * (page size/entry size)).
The relevant values for this formula are indicated in GITS_BASER<n>.Size,
GITS_BASER<n>.PageSize, and GITS_BASER<n>.EntrySize.
Note
Indirect tables allow sparse allocations, so not all ICIDs in the supported range might be usable.
• Where collections are held in both the ITS and external memory, the total number of collections is indicated
by GITS_TYPER.CCT.
When GITS_TYPER.HCC!= 0:
• Collections with identifiers in the range {0... GITS_TYPER.HCC-1} are held in the ITS.
• Collections with identifiers in the range greater than that indicated in GITS_TYPER.HCC are held in external
memory, if this is supported.
When GITS_TYPER.HCC == 0:
• The ITS must support collections in external memory, and all collections are held in external memory.
The maximum number of collections that are supported is limited by the size of the ICID:
• If GITS_TYPER.CIL == 0, the ICID is 16 bits.
• If GITS_TYPER.CIL == 1, the ICID is reported by GITS_TYPER.CIDbits.
6-102 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
Table 6-2 shows an example of the number of bits that might be assigned to each DTE.
1 Valid Boolean
5 ITT Range Log2 (number of EventIDs supported by the ITT minus one)
In GICv4, ITEs are defined for physical interrupts and for virtual interrupts, and provide a distinction between:
• An entry for a physical LPI and the use of an ICT for routing information.
• An entry for a virtual LPI and the use of a vPE table.
An ITT must be assigned a contiguous physical address space starting at ITT Address. The size is 2^(DTE.ITT
Range + 1)* GITS_TYPER.ITT_entry_size.
Behavior is UNPREDICTABLE if the memory does not contain all zeros at the time of new allocation for use by the
ITS.
For physical interrupts, each ITE describes the mapping between the input EventID and:
• The output physical INTID (pINTID) that is sent to the target PE.
• The ICID that identifies an entry in the Collection table, that determines the target PE for the LPI. For more
information about the Collection table, see The Collection table on page 6-104.
For virtual interrupts, each ITE describes the mapping of the EventID as outlined in the preceding list, and:
• The output virtual INTID (vINTID) that is sent to the target vPE.
• The virtual PE number (vPEID) that identifies an entry in the vPE table to determine the current host
Redistributor. For more information about the vPE table, see The vPE table on page 6-104.
• A physical LPI that is sent to a physical PE if a virtual interrupt is translated when the target vPE is not
currently scheduled on a physical PE.
Table 6-3 shows an example of the number of bits that might be stored in an ITE.
1 Valid Boolean
Size of the LPI Interrupt_Number pINTID or vINTID depending on the interrupt type
number spacea
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-103
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
Size of the LPI Interrupt_Number In GICv4 pINTID is used as a doorbell. In GICv3, and in
number spacea HypervisorID GICv4 when a doorbell is not required, the programmed value
is 1023.
There is a single CT for each ITS, which can be held in registers or in memory, or in a combination of the two. See
GITS_BASER<n>.Type and GITS_TYPER.HCC for more information.
The TableID provides the index value for the table. It is derived from ICID.
Table 6-4 shows an example of the number of bits that might be assigned to each CT.
1 Valid Boolean
Size of RDbase RDbase The GIC supports two formats for RDbase, see RDbase
identifier
An area of memory defined by GITS_BASER<n> holds the vPE table and indicates the size of each entry in the
table.
The vPE table describes all the vPEs associated with an ITS. Table 6-5 on page 6-105 shows an example of the
number of bits that an implementation might store in a vPE table.
6-104 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
The 16-bit vPEID provides the index value for the table.
Number of
Assignment Notes
bits
1 Valid Boolean
Size of VPT_addr VPT_addr locates the LPI Pending table when the VM is not
address resident in the Redistributor. It is used as the address in
GICR_VPENDBASER when the vPE is scheduled in the
GICR_* registers associated with RDbase.
• GITS_BASER<n> registers provide information about the type, size and access attributes for the architected
ITS memory structures.
• GITS_CBASER, GITS_CREADR, and GITS_CWRITER store address information for the ITS command
queue interface.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-105
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
ITS
GITS_CBASER
- Base address and
size of command
queue
-
GITS_CREADR
Command 1 Next command to be
processed by the ITS
Command 2
Command 3
GITS_CWRITER
-
Next empty location
• GITS_CREADR specifies the base address offset from which an ITS reads the next command to execute.
• GITS_CWRITER specifies the base address offset of the next free entry to which software writes the next
command.
The size of an ITS command queue entry is 32 bytes. This means that there is support for 128 entries in each 4KB
page.
The ITS command queue uses a little endian memory order model.
Note
All addresses are Non-secure physical addresses.
6-106 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.2 The ITS
When the first command is complete, the ITS starts to process the next command. The read pointer,
GITS_CREADR, advances as the ITS processes commands. If GITS_CREADR reaches the top of the memory
specified in GITS_CBASER then the pointer wraps back to the base address specified in GITS_CBASER.
GITS_CWRITER is controlled by software.
The ITS command queue is empty when GITS_CWRITER and GITS_CREADR specify the same base address
offset value.
The ITS command queue is full when GITS_CWRITER points to an address 32 bytes behind GITS_CREADR in
the buffer.
The INT ITS command generates an interrupt on execution, and this can generate an interrupt on completion of a
particular sequence of commands, see ITS commands on page 6-108.
A translation request initiated after a SYNC or VSYNC command has completed is translated using an ITS state
that is consistent with the state after the command is performed.
In the absence of a SYNC or VSYNC command the ordering of ITS commands and translation requests is not
defined by the architecture.
Note
Conceptually the restriction is that software should not map multiple EventID-DeviceID combinations to the same
vLPI within a given virtual machine. However, the ITS has no awareness of which vPEs belong to the same virtual
machine.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-107
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
CLEAR DeviceID, EventID Translates the event defined by EventID and DeviceID into an ICID and
pINTID, and instruct the appropriate Redistributor to remove the pending
state.
DISCARD DeviceID, EventID Translates the event defined by EventID and DeviceID and instructs the
appropriate Redistributor to remove the pending state of the interrupt. It
also ensures that any caching in the Redistributors associated with a
specific EventID is consistent with the configuration held in memory.
DISCARD removes the mapping of the DeviceID and EventID from the ITT,
and ensures that incoming requests with a particular EventID are silently
discarded.
INT DeviceID, EventID Translates the event defined by EventID and DeviceID into an ICID and
pINTID, and instruct the appropriate Redistributor to set the interrupt
pending.
INV DeviceID, EventID Specifies that the ITS must ensure that any caching in the Redistributors
associated with the specified EventID is consistent with the LPI
Configuration tables held in memory.
INVALL ICID Specifies that the ITS must ensure any caching associated with the
interrupt collection defined by ICID is consistent with the LPI
Configuration tables held in memory for all Redistributors.
MAPC ICID, RDbase Maps the Collection table entry defined by ICID to the target
Redistributor, defined by RDbase.
MAPD DeviceID, ITT_addr, Size Maps the Device table entry associated with DeviceID to its associated
ITT, defined by ITT_addr and Size.
MAPI DeviceID, EventID, ICID Maps the event defined by EventID and DeviceID into an ITT entry with
ICID and pINTID = EventID.
Note
• pINTID ≥0x2000 for a valid LPI INTID.
• This is equivalent to MAPTI DeviceID, EventID, EventID, ICID
MAPTIa DeviceID, EventID, pINTID, ICID Maps the event defined by EventID and DeviceID to its associated ITE,
defined by ICID and pINTID in the ITT associated with DeviceID.
Note
pINTID ≥0x2000 for a valid LPI INTID.
MOVALL RDbase1, RDbase2 Instructs the Redistributor specified by RDbase1 to move all of its
interrupts to the Redistributor specified by RDbase2.
MOVI DeviceID, EventID, ICID Updates the ICID field in the ITT entry for the event defined by DeviceID
and EventID. It also translates the event defined by EventID and DeviceID
into an ICID and pINTID, and instructs the appropriate Redistributor to
move the pending state, if it is set, of the interrupt to the Redistributor
defined by the new ICID, and to update the ITE associated with the event
to use the new ICID.
6-108 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
SYNC RDbase Ensures all outstanding ITS operations associated with physical
interrupts for the Redistributor specified by RDbase are globally observed
before any further ITS commands are executed. Following the execution
of a SYNC the effects of all previous commands must apply to
subsequent writes to GITS_TRANSLATER. See Ordering of
translations with the output to ITS commands on page 6-107 for more
information.
VINVALLb vPEID Ensures any cached Redistributor information associated with vPEID is
consistent with the associated LPI Configuration tables held in memory.
VMAPIb DeviceID, EventID, Dbell_pINTID, Maps the event defined by DeviceID and EventID into an ITT entry with
vPEID vPEID, vINTID=EventID, and Dbell_PINTID, a doorbell provision.
Note
• vINTID ≥0x2000 for a valid LPI INTID.
• This is equivalent to VMAPTI DeviceID, EventID,EventID, pINTID,
vPEID
• Dbell_pINTID must be either 1023 or Dbell_pINTID ≥0x2000 for a
valid LPI INTID.
VMAPPb vPEID, RDbase, VPT_addr, VPT_size Maps the vPE table entry defined by vPEID to the target RDbase, including
an associated virtual LPI Pending table (VPT_addr, VPT_size).
VMAPTIbc DeviceID, EventID, vINTID, Maps the event defined by DeviceID and EventID into an ITT entry with
Dbell_pINTID, vPEID vPEID and vINTID, and Dbell_pINTID, a doorbell provision.
Note
• vINTID ≥0x2000 for a valid LPI INTID.
• Dbell_pINTID must be either 1023 or Dbell_pINTID ≥0x2000 for a
valid LPI INTID.
VMOVIb DeviceID, EventID, vPEID Updates the vPEID field in the ITT entry for the event defined by DeviceID
and EventID. Translates the event defined by EventID and DeviceID into a
vPEID and pINTID, and instructs the appropriate Redistributor to move the
pending state, if it is set, of the interrupt to the Redistributor defined by
the new vPEID, and updates the ITE associated with the event to use the
new vPEID.
VMOVPb vPEID, RDbase, SequenceNumber, Updates the vPE table entry defined by vPEID to the target Redistributor
ITSList specified by RDbase. Software must use SequenceNumber and ITSList to
synchronize the execution of VMOVP commands across more than one
ITS.
VSYNCb vPEID Ensures all outstanding ITS operations for the vPEID specified are
globally observed before any further ITS commands are executed.
Following the execution of a VSYNC the effects of all previous
commands must apply to subsequent writes to GITS_TRANSLATER.
a. This command was previously called MAPVI.
b. This command exists in GICv4 only.
c. This command was previously called VMAPVI.
The number of bits of EventID and DeviceID that an implementation supports are discoverable from GITS_TYPER.
Unimplemented bits are RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-109
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
Note
• The INTID of an LPI is in the range of 8192 - maximum number. The maximum number is IMPLEMENTATION
DEFINED. See INTIDs on page 2-31.
• The following argument names have been changed from those used in preliminary information associated
with this GIC specification:
— Device has been changed to DeviceID.
— ID has been changed to EventID.
— pID has been changed to pINTID.
— vID has been changed to vINTID.
— pCID has been changed to ICID.
— target address has been changed to RDbase.
— VCPU has been changed to vPE.
• The format of the collection target address, RDbase, is indicated by GITS_TYPER.PTA.
DeviceIDs
The maximum number of Device identifiers supported by the associated Device table is determined
by the number of bits available, as specified by GITS_TYPER.Devbits.
EventID EventID is limited by the maximum MAPD Size field, which is limited by GITS_TYPER.ID_bits.
RDbase
RDbase is associated with a Redistributor and is specified in one of two formats:
• The base physical address of RD_base when GITS_TYPER.PTA == 1.
Note
Addresses can be up to 52 bits in size and must be 64KB aligned. The RDbase field consists
of bits[51:16] of the address.
6-110 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
See ITS command error encodings on page 6-145 for more information.
6.3.3 CLEAR
This command translates the event defined by EventID and DeviceID into an ICID and pINTID, and instructs the
appropriate Redistributor to remove the pending state.
63 32 31 87 0 DW
DeviceID RES0 0x04 0
RES0 EventID 1
RES0 2
RES0 3
In Figure 6-6:
• EventID identifies the interrupt, associated with a device, for which the pending state is to be cleared.
• DeviceID specifies the requesting device.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-111
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.CLEAR
// =========
ITS.CLEAR(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError CLEAR_DEVICE_OOR”;
UNPREDICTABLE;
dte = ReadDeviceTable(UInt(cmd.DeviceID));
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError CLEAR_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if !ite.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError CLEAR_UNMAPPED_INTERRUPT”;
UNPREDICTABLE;
success = ClearPendingState(ite);
if !success then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError CLEAR_ITE_INVALID”;
UNPREDICTABLE;
IncrementReadPointer();
return;
6.3.4 DISCARD
This command translates the event defined by EventID and DeviceID and instructs the appropriate Redistributor to
remove the pending state of the interrupt. It also ensures that any caching in the Redistributors associated with a
specific EventID is consistent with the configuration held in memory. DISCARD removes the mapping of the DeviceID
and EventID from the ITT, and ensures that incoming requests with a particular EventID are silently discarded.
Figure 6-7 shows the format of the DISCARD command.
63 32 31 8 7 0 DW
DeviceID RES0 0x0F 0
RES0 EventID 1
RES0 2
RES0 3
6-112 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.DISCARD
// ===========
ITS.DISCARD(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError DISCARD_DEVICE_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError DISCARD_UNMAPPED_DEVICE”;
UNPREDICTABLE;
ite.Valid = FALSE;
WriteTranslationTable(dte.ITT_base, UInt(cmd.EventID), ite);
IncrementReadPointer();
return;
6.3.5 INT
This command translates the event defined by EventID and DeviceID into an ICID and pINTID, and instructs the
appropriate Redistributor to set the interrupt pending.
Figure 6-8 on page 6-114 shows the format of the INT command.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-113
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
63 32 31 8 7 0 DW
DeviceID RES0 0x03 0
RES0 EventID 1
RES0 2
RES0 3
In Figure 6-8:
• EventID identifies an interrupt source associated with a device. The ITS then translates this into an LPI
INTID.
• DeviceID specifies the requesting device.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
// ITS.INT
// =======
ITS.INT(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INT_DEVICE_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INT_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if !ite.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INT_UNMAPPED_INTERRUPT”;
UNPREDICTABLE;
if !success then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INT_ITE_INVALID”;
UNPREDICTABLE;
IncrementReadPointer();
return;
6-114 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
6.3.6 INV
This command specifies that the ITS must ensure that any caching in the Redistributors associated with the specified
EventID is consistent with the LPI Configuration tables held in memory.
Note
The INV command performs the same function regardless of whether the interrupt is mapped as a physical interrupt
or a virtual interrupt.
63 32 31 8 7 0 DW
DeviceID RES0 0x0C 0
RES0 EventID 1
RES0 2
RES0 3
In Figure 6-9:
• EventID identifies an interrupt source associated with a device. The ITS then translates this into an LPI
INTID.
• DeviceID specifies the requesting device.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.INV
// =======
ITS.INV(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INV_DEVICE_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INV_UNMAPPED_DEVICE”;
UNPREDICTABLE;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-115
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
if !ite.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INV_UNMAPPED_INTERRUPT”;
UNPREDICTABLE;
invalidateByITE(ite);
IncrementReadPointer();
return;
6.3.7 INVALL
This command specifies that the ITS must ensure any caching associated with the interrupt collection defined by
ICID is consistent with the LPI Configuration tables held in memory for all Redistributors.
63 16 15 8 7 0 DW
RES0 0x0D 0
RES0 1
RES0 ICID 2
RES0 3
In Figure 6-10:
• ICID specifies the interrupt collection.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
INVALL ICID
// ITS.INVALL
// ==========
ITS.INVALL(ITSCommand cmd)
if (CollectionOutOfRange(cmd.ICID)) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INVALL_COLLECTION_OOR”;
UNPREDICTABLE;
if !cte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError INVALL_UNMAPPED_COLLECTION”;
UNPREDICTABLE;
// This invalidates any caches containing the configuration data for all interrupts in the
// collection. Over invalidation is permitted.
InvalidateCollectionCaches(UInt(cmd.ICID));
IncrementReadPointer();
return;
6-116 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
6.3.8 MAPC
This command maps the Collection table entry defined by ICID to the target Redistributor, defined by RDbase.
63 62 51 50 16 15 8 7 0 DW
RES0 0x09 0
RES0 1
V RES0 RDbase ICID 2
RES0 3
In Figure 6-11:
• V specifies whether RDbase is valid for the collection.
• RDbase specifies the target Redistributor to which interrupts in the collection are forwarded. See
IMPLEMENTATION DEFINED sizes in ITS command parameters on page 6-110.
• ICID specifies the interrupt collection that is to be mapped.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
If GITS_TYPER.PTA == 1 and a physical address is specified, the target addresses must be 64KB aligned, meaning
that only bits[47:16] are required. See IMPLEMENTATION DEFINED sizes in ITS command parameters on
page 6-110 for more information. In addition, when V is cleared to 0, this field must be written as zero, but hardware
might ignore the value.
When V is 1:
• Behavior is UNPREDICTABLE if there are interrupts that are mapped to the specified collection and the
collection is currently mapped to a Redistributor, unless MAPC is followed by MOVALLso that the pending state
for the collection is moved from the old target Redistributor or the new target Redistributor. MOVALL might be
issued by a different ITS:
— Where multiple collections are remapped from the same source to the same destination, behavior is
UNPREDICTABLE if MOVALL is issued before all the MAPCs are globally observable.
— Behavior is UNPREDICTABLE if any ITS command that affects interrupts that belong to a remapped
collection is issued after the MAPC, but before the MOVALL is globally observable.
When V is 0:
• MAPC removes the mapping of the specified interrupt collection. Interrupts for that are mapped to this
collection are ignored.
• Behavior is UNPREDICTABLE if there are interrupts that are mapped to the specified collection, with the
restriction that further translation requests from that device are ignored.
Note
When software uses a MAPC command to move a collection from targeting Redistributor A to targeting Redistributor
B, it must issue a SYNC command to Redistributor A before issuing the accompanying MOVALL command. Otherwise,
interrupts from the collection might still be taken by the PE associated with Redistributor A.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-117
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.MAPC
// ========
ITS.MAPC(ITSCommand cmd)
if CollectionOutOfRange(cmd.ICID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPC_COLLECTION_OOR”;
UNPREDICTABLE;
CollectionTableEntry cte;
WriteCollectionTable(UInt(cmd.ICID), cte);
IncrementReadPointer();
return;
6.3.9 MAPD
This command maps the Device table entry associated with DeviceID to its associated ITT, defined by ITT_addr and
Size.
63 62 52 51 32 31 8 7 54 0 DW
DeviceID RES0 0x08 0
RES0 Size 1
V RES0 ITT_addr RES0 2
RES0 3
In Figure 6-12:
• DeviceID specifies the device that uses the ITT.
Note
For more information about mapping devices to ITTs, see The Interrupt translation table on page 6-103.
The format of the ITT entries is IMPLEMENTATION DEFINED. A typical example entry size of 8 bytes permits
allocation of identifiers to devices in multiples of 32 interrupts.
When V is 1:
When V is 0:
• MAPD removes the mapping for the specified DeviceID. Translation requests from that device are ignored.
6-118 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
• MAPD removes the mapping of the specified DeviceID. and interrupt requests from that device are discarded. A
subsequent translation for the DeviceID does not generate and LPI or VLPI until DeviceID has been mapped
to the ITT again.
In this case, the ITS must take the actions described in Command errors on page 6-111.
Note
ITS accesses to an ITT use the same Shareability and Cacheability attributes that are specified for the Device table,
see The Device table on page 6-102.
// ITS.MAPD
// ========
ITS.MAPD(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPD_DEVICE_OOR”;
UNPREDICTABLE;
if SizeOutOfRange(cmd.Size) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPD_ITTSIZE_OOR”;
UNPREDICTABLE;
WriteDeviceTable(UInt(cmd.DeviceID), dte);
IncrementReadPointer();
return;
6.3.10 MAPI
This command maps the event defined by EventID and DeviceID into an ITT entry with ICID and pINTID = EventID.
Note
• pINTID ≥0x2000 for a valid LPI INTID.
• This is equivalent to MAPTI DeviceID, EventID, EventID, ICID
Figure 6-13 on page 6-120 shows the format of the MAPI command.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-119
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
63 32 31 1615 87 0 DW
DeviceID RES0 0x0B 0
RES0 EventID 1
RES0 ICID 2
RES0 3
In Figure 6-13:
• EventID identifies the interrupt, associated with a device, that is to be mapped.
• DeviceID specifies the requesting device.
• ICID specifies the interrupt collection that includes the specified interrupt.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.MAPI
// ========
ITS.MAPI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPI_DEVICE_OOR”;
UNPREDICTABLE;
if CollectionOutOfRange(cmd.ICID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPI_COLLECTION_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if LPIOutOfRange(cmd.EventID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPI_ID_OOR”;
UNPREDICTABLE;
ite.Valid = TRUE;
ite.Type = physical_interrupt;
6-120 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
ite.OutputID = cmd.EventID;
ite.DoorbellID = ZeroExtend(INTID_SPURIOUS); // Don’t generate a doorbell
ite.ICID = cmd.ICID;
IncrementReadPointer();
return;
6.3.11 MAPTI
This command maps the event defined by EventID and DeviceID to its associated ITE, defined by ICID and pINTID in
the ITT associated with DeviceID.
63 32 31 1615 87 0 DW
DeviceID RES0 0x0A 0
pINTID EventID 1
RES0 ICID 2
RES0 3
In Figure 6-14:
• EventID identifies the interrupt, associated with a device, that is to be mapped.
• pINTID is the INTID of the physical interrupt that is presented to software.
• DeviceID specifies the requesting device.
• ICID specifies the interrupt collection that includes the specified physical interrupt.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.MAPTI
// =========
ITS.MAPTI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPTI_DEVICE_OOR”;
UNPREDICTABLE;
if CollectionOutOfRange(cmd.ICID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPTI_COLLECTION_OOR”;
UNPREDICTABLE;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-121
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPTI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if LPIOutOfRange(cmd.pINTID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MAPTI_PHYSICALID_OOR”;
UNPREDICTABLE;
ite.Valid = TRUE;
ite.Type = physical_interrupt;
ite.OutputID = cmd.pINTID;
ite.DoorbellID = ZeroExtend(INTID_SPURIOUS); // Don’t generate a doorbell
ite.ICID = cmd.ICID;
IncrementReadPointer();
return;
6.3.12 MOVALL
This command instructs the Redistributor specified by RDbase1 to move all of its interrupts to the Redistributor
specified by RDbase2.
Note
Both the mapping of interrupts to collections and the mapping of collections to Redistributors are normally
unaffected by this command. Software must ensure that any interrupts that might be affected by this command target
the Redistributor specified by RDbase2, otherwise system behavior is UNPREDICTABLE. In particular, an
implementation might choose to remap all affected collections to RDbase2.
63 51 50 32 31 1615 87 0 DW
RES0 0x0E 0
RES0 1
RES0 Rdbase 1 RES0 2
RES0 Rdbase 2 RES0 3
In Figure 6-15:
• RDbase1 specifies the Redistributor with which the interrupts are currently associated. See
IMPLEMENTATION DEFINED sizes in ITS command parameters on page 6-110.
• RDbase2 specifies the Redistributor to which the interrupts are to be moved. See IMPLEMENTATION
DEFINED sizes in ITS command parameters on page 6-110.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
Behavior is UNPREDICTABLE if RDbase1 and RDbase2 do not specify a valid Redistributor. The format of these fields
is specified by GITS_TYPER.PTA.
6-122 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.MOVALL
// ==========
ITS.MOVALL(ITSCommand cmd)
rd1 = cmd.RD1base;
rd2 = cmd.RD2base;
IncrementReadPointer();
return;
6.3.13 MOVI
This command updates the ICID field in the ITT entry for the event defined by DeviceID and EventID. It also translates
the event defined by EventID and DeviceID into an ICID and pINTID, and instructs the appropriate Redistributor to
move the pending state, if it is set, of the interrupt to the Redistributor defined by the new ICID, and to update the
ITE associated with the event to use the new ICID.
63 32 31 1615 87 0 DW
DeviceID RES0 0x01 0
RES0 EventID 1
RES0 ICID 2
RES0 3
In Figure 6-16:
• EventID identifies the interrupt, associated with a device, that is to be redirected.
• DeviceID specifies the requesting device.
• ICID specifies the new interrupt collection that is to include the specified physical interrupt.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
Note
If, after using MOVI to move an interrupt from collection A to collection B, software moves the same interrupt again
from collection B to collection C, a SYNC command must be used before the second MOVI for the Redistributor
associated with collection A to ensure correct behavior.
// ITS.MOVI
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-123
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ========
ITS.MOVI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_DEVICE_OOR”;
UNPREDICTABLE;
if CollectionOutOfRange(cmd.ICID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_COLLECTION_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if !ite.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_UNMAPPED_INTERRUPT”;
IncrementReadPointer();
return;
if !cte1.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_UNMAPPED_COLLECTION”;
UNPREDICTABLE;
if !cte2.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError MOVI_UNMAPPED_COLLECTION”;
IncrementReadPointer();
return;
ite.ICID = cmd.ICID;
IncrementReadPointer();
return;
6.3.14 SYNC
This command ensures all outstanding ITS operations associated with physical interrupts for the Redistributor
specified by RDbase are globally observed before any further ITS commands are executed. Following the execution
of a SYNC, the effects of all previous commands must apply to subsequent writes to GITS_TRANSLATER.
Figure 6-17 on page 6-125 shows the format of the SYNC command.
6-124 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
63 51 50 32 31 1615 87 0 DW
RES0 0x05 0
RES0 1
RES0 RDbase RES0 2
RES0 3
In Figure 6-17:
• RDbase specifies the physical address of the target Redistributor. The format of the target address is
determined by GITS_TYPER.PTA. See IMPLEMENTATION DEFINED sizes in ITS command parameters
on page 6-110 for more information.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
The command and its arguments are:
SYNC RDbase
// ITS.SYNC
// ========
ITS.SYNC(ITSCommand cmd)
// Wait for external effects of any physical comamnds to be observable by all redistributors
// and ensure the internal effects of any previous commands affect any subsequent interrupt
// requests or commands
WaitForCompletion(cmd.RDbase);
IncrementReadPointer();
6.3.15 VINVALL
This command ensures that any cached Redistributor information associated with vPEID is consistent with the
associated LPI Configuration tables held in memory.
63 48 47 32 31 87 0 DW
RES0 0x2D 0
RES0 vPEID RES0 1
RES0 2
RES0 3
In Figure 6-18:
• vPEID specifies the vPE.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-125
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.VINVALL
// ===========
ITS.VINVALL(ITSCommand cmd)
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VINVALL_VCPU_OOR”;
UNPREDICTABLE;
if !vte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VINVALL_VCPU_INVALID”;
UNPREDICTABLE;
InvalidateVCPUCaches(UInt(cmd.VCPUID));
IncrementReadPointer();
return;
6.3.16 VMAPI
This command maps the event defined by DeviceID and EventID into an ITT entry with vPEID, vINTID=EventID, and
Dbell_PINTID, a doorbell provision.
Note
• vINTID ≥0x2000 for a valid LPI INTID.
• This is equivalent to VMAPTI DeviceID, EventID,EventID, pINTID, vPEID.
• Dbell_pINTID must be either 1023 or Dbell_pINTID ≥0x2000 for a valid LPI INTID.
63 48 47 32 31 87 0 DW
DeviceID RES0 0x2B 0
RES0 vPEID EventID 1
Dbell_pINTID RES0 2
RES0 3
In Figure 6-19:
• EventID identifies the interrupt, associated with a device, that is to be presented to the VM.
• DeviceID specifies the requesting device.
• vPEID specifies the vPE.
• Dbell_pINTID specifies the ID that is presented to the hypervisor if the vPE is not scheduled.
Note
If Dbell_pINTID indicates a spurious interrupt, then no physical interrupt is generated.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
6-126 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ITS.VMAPI
// =========
ITS.VMAPI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPI_DEVICE_OOR”;
UNPREDICTABLE;
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPI_VCPU_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if LPIOutOfRange(cmd.EventID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPI_ID_OOR”;
UNPREDICTABLE;
if LPIOutOfRange(cmd.Dbell_pINTID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPI_PHYSICALID_OOR”;
UNPREDICTABLE;
ite.Valid = TRUE;
ite.Type = virtual_interrupt;
ite.OutputID = cmd.EventID;
ite.DoorbellID = cmd.Dbell_pINTID;
ite.VCPUID = cmd.VCPUID;
IncrementReadPointer();
return;
6.3.17 VMAPP
This command maps the vPE table entry defined by vPEID to the target RDbase, including an associated virtual LPI
Pending table (VPT_addr, VPT_size).
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-127
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
63 62 51 50 32 31 16 15 87 54 0 DW
RES0 0x29 0
RES0 vPEID RES0 1
V RES0 RDbase RES0 2
VPT_
RES0 VPT_addr RES0 size
3
In Figure 6-20:
• vPEID specifies the vPE.
• V specifies whether the RDbase and VPT_addr are valid for the vPE.
• RDbase specifies the target Redistributor that owns the vPE and to which the ITS directs commands for that
PE. See IMPLEMENTATION DEFINED sizes in ITS command parameters on page 6-110.
• VPT_addr specifies bits [51:16] of the physical address of the virtual LPI Pending table for the vPE.
Note
The target addresses must be 64KB aligned, meaning that only bits [51:16] are required. Bits[15:0] of the
physical address are 0.
• VPT_size specifies the number of vINTID bits that the vPE supports, minus one.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
When V is 0:
• VMAPP removes the mapping for the specified vPE. Interrupts that are mapped to this vPE are discarded.
When V is 1:
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.VMAPP
// =========
ITS.VMAPP(ITSCommand cmd)
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPP_VCPU_OOR”;
UNPREDICTABLE;
if SizeOutOfRange(cmd.VPT_size) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPP_VPTSIZE_OOR”;
UNPREDICTABLE;
VCPUTableEntry vte;
6-128 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
WriteVCPUTable(UInt(cmd.VCPUID), vte);
IncrementReadPointer();
return;
6.3.18 VMAPTI
This command maps the event defined by DeviceID and EventID into an ITT entry with vPEID and vINTID, and
Dbell_pINTID, a doorbell provision.
Note
• vINTID ≥0x2000 for a valid LPI INTID.
• Dbell_pINTID must be either 1023 or Dbell_pINTID ≥0x2000 for a valid LPI INTID.
63 48 47 32 31 16 15 8 7 0 DW
DeviceID RES0 0x2A 0
RES0 vPEID EventID 1
Dbell_pINTID vINTID 2
RES0 3
In Figure 6-21:
• vPEID specifies the vPE.
• DeviceID specifies a device owned by the vPE.
• vINTID specifies the INTID presented to the vPE that controls the device that DeviceID specifies.
• Dbell_pINTID specifies the pINTID that is presented to the PE if the vPE is not scheduled.
Note
If Dbell_pINTID is 1023 then no physical interrupt is generated.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.VMAPTI
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-129
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
// ==========
ITS.VMAPTI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPTI_DEVICE_OOR”;
UNPREDICTABLE;
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPTI_VCPU_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPTI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
if LPIOutOfRange(cmd.vINTID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPTI_VIRTUALID_OOR”;
IncrementReadPointer();
return;
if LPIOutOfRange(cmd.pINTID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMAPTI_PHYSICALID_OOR”;
UNPREDICTABLE;
ite.Valid = TRUE;
ite.Type = virtual_interrupt;
ite.OutputID = cmd.vINTID;
ite.DoorbellID = cmd.Dbell_pINTID;
ite.VCPUID = cmd.VCPUID;
IncrementReadPointer();
return;
6.3.19 VMOVI
This command updates the vPEID field in the ITT entry for the event defined by DeviceID and EventID. It also
translates the event defined by EventID and DeviceID into a vPEID and pINTID, and instructs the appropriate
Redistributor to move the pending state of the interrupt to the Redistributor defined by the new vPEID, and updates
the ITE associated with the event to use the new vPEID.
This command is provided only in GICv4.
63 48 47 32 31 8 7 1 0 DW
DeviceID RES0 0x21 0
RES0 vPEID EventID 1
Dbell_pINTID RES0 D 2
RES0 3
In Figure 6-22:
• vPEID specifies the vPE.
6-130 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
• EventID identifies the interrupt, associated with a device and already mapped by the ITS, that is to be moved
to a new target specified by vPEID.
• D specifies whether the Dbell_pINTID field is valid.
• DeviceID specifies the device that generates the interrupt.
• Dbell_pINTID specifies the ID that is presented to the hypervisor if the vPE is not scheduled.
Note
If Dbell_pINTID is 1023 then no physical interrupt is generated.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
Note
If, after using VMOVI to move an interrupt from vPE A to vPE B, software moves the same interrupt again, a VSYNC
command must be issued to vPE A between the moves to ensure correct behavior.
// ITS.VMOVI
// =========
ITS.VMOVI(ITSCommand cmd)
if DeviceOutOfRange(cmd.DeviceID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_DEVICE_OOR”;
UNPREDICTABLE;
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_COLLECTION_OOR”;
UNPREDICTABLE;
if !dte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_UNMAPPED_DEVICE”;
UNPREDICTABLE;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-131
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
if !ite.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_UNMAPPED_INTERRUPT”;
UNPREDICTABLE;
if !vte1.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_ITEVCPU_INVALID”;
UNPREDICTABLE;
if !vte2.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVI_CMDVCPU_INVALID”;
UNPREDICTABLE;
ite.VCPUID = cmd.VCPUID;
IncrementReadPointer();
return;
6.3.20 VMOVP
This command updates the vPE table entry defined by vPEID to the target RDbase. Software must use SequenceNumber
and ITSList to synchronize the execution of VMOVP commands across more than one ITS.
Software must ensure that this command is not executed with a vPEID that is scheduled on the target Redistributor,
otherwise system behavior is UNPREDICTABLE.
63 51 50 32 31 16 15 87 0 DW
RES0 Sequence Number RES0 0x22 0
RES0 vPEID RES0 ITSList 1
RES0 RDbase RES0 2
RES0 3
In Figure 6-23:
• vPEID specifies the vPE.
6-132 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
• RDbase specifies the Redistributor to which interrupts are forwarded. See IMPLEMENTATION DEFINED
sizes in ITS command parameters on page 6-110.
• Sequence Number specifies the identity of the synchronization point that every ITS included in ITS List uses.
When GITS_TYPER.VMOVP == 0 Sequence Number specifies the identity of the synchronization point that
is used by all ITSs that are included in ITSList.
When GITS_TYPER.VMOVP == 1 Sequence Number is RES0.
For more information, see VMOVP usage.
• ITSList specifies the ITS instances that are included in the synchronization operation, where:
— Each bit in ITS List identifies an ITS where bit[n] corresponds to ITS n.
— An ITS is included if the corresponding bit is set to 1.
When GITS_TYPER.VMOVP == 0 ITSList specifies which ITSs are included in the synchronization
operation. Each bit of ITSList corresponds to an ITS, for example bit[0] of ITSList corresponds to ITS 0,
bit[1] to ITS 1.
When GITS_TYPER.VMOVP ==1 ITSList is RES0.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.VMOVP
// =========
ITS.VMOVP(ITSCommand cmd)
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVP_VCPU_OOR”;
UNPREDICTABLE;
if !vte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VMOVP_VCPU_INVALID”;
UNPREDICTABLE;
vte.RDbase = cmd.RDbase;
WriteVCPUTable(UInt(cmd.VCPUID), vte);
IncrementReadPointer();
return;
VMOVP usage
Where more than one ITS controls interrupts for the same vPE, moving this vPE must be co-ordinated between the
different ITSs. This is controlled by software using one of the two approaches detailed here:
When GITS_TYPER.VMOVP == 0:
• The VMOVP command must be issued for each ITS that controls interrupts for the vPE that is being moved.
Each of these commands must have a common sequence number. That sequence number cannot be used for
other VMOVP commands until all commands that previously used that sequence number have been processed
by all ITSs.
• The VMOVP command issued for each ITS contains a list of all the ITSs that are affected by moving the vPE.
This is the ITS List.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-133
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
• Each ITS must have the sequence numbers presented to it in the same order in that they are presented to the
other ITSs.
When GITS_TYPER.VMOVP == 1:
• The VMOVP command must be issued on only one of the ITSs that controls interrupts for the vPE that is being
moved.
• The implementation is responsible for propagating the updated mapping.
6.3.21 VSYNC
This command ensures all outstanding ITS operations for the vPEID specified are globally observed before any
further ITS commands are executed. Following the execution of a VSYNC the effects of all previous commands
must apply to subsequent writes to GITS_TRANSLATER.
63 48 47 32 31 87 0 DW
RES0 0x25 0
RES0 vPEID RES0 1
RES0 2
RES0 3
In Figure 6-24:
• vPEID specifies the vPE for which commands must be synchronized.
• DW is the doubleword offset within a 32 byte, or four doubleword, ITS command packet.
In this case, the ITS must take the actions described in Command errors on page 6-111.
// ITS.VSYNC
// =========
ITS.VSYNC(ITSCommand cmd)
if VCPUOutOfRange(cmd.VCPUID) then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VSYNC_VCPU_OOR”;
UNPREDICTABLE;
if !vte.Valid then
if GITS_TYPER.SEIS == ‘1’ then IMPLEMENTATION_DEFINED “SError VSYNC_VCPU_INVALID”;
UNPREDICTABLE;
// Wait for the external effects of any virtual commands to be observable by all redistributors
// and ensure the internal effects of any previous commands affect any subsequent interrupt
// requests or commands
WaitForVirtualCompletion(rd_base);
6-134 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.3 ITS commands
IncrementReadPointer();
return;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-135
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
The pseudocode functions in this section are based on the following assumptions:
• Each ITS function must be performed as an atomic operation. Implementations must ensure that the observed
behavior is consistent with that from a strictly atomic implementation.
• Where the pseudocode issues a sequence of read and write operations to a particular Redistributor, these
operations must be performed in the order in which they were generated.
• Where the pseudocode issues a write to a particular Redistributor, operation does not need to wait for the
completion of the write.
• Where the pseudocode issues writes to memory to update a table, operation does not need to wait for the
completion of these writes. A write to memory might never become visible to an external observer. However,
the effect of any such writes must be ordered by any subsequent ITS operations, including the handling of
interrupt translations. There are no ordering rules other than the standard rule that memory must appear as if
writes to each location occurred in program order.
• Because each ITS function is performed as an atomic operation, any new interrupt translation that occurs
after the function must be subject to the effects of that function.
• The effects of caching of the Redistributor LPI Configuration and LPI Pending tables are specified explicitly
in the pseudocode.
• An interrupt translation might set a pending bit and pending bits remain set until handled by the PE. While
an interrupt is pending it might be affected by an interrupt translation that is updated by a subsequent ITS
function.
Note
Some variable names used in the pseudocode differ from those used in the body text. For a list of the affected
variables, see Pseudocode terminology on page B-762.
The following pseudocode invalidates any associated caching for the LPI configuration in the Redistributor for the
specified translation.
// InvalidateByITE
// ===============
if !cte.Valid then
return FALSE;
InvalidateInterruptCaches(ite.ICID, ite.OutputID);
else
VCPUTableEntry vte = ReadVCPUTable(UInt(ite.VCPUID));
if !vte.Valid then
return FALSE;
InvalidateVirtualInterruptCaches(ite.VCPUID, ite.OutputID);
return TRUE;
// MovePendingState()
// ==================
6-136 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
// MoveVirtualPendingState()
// =========================
// Make sure the interrupt is released or taken by the processor for example by sending a
// VClear and waiting for the response
EnsureVirtualInterruptNotPendingOnProcessor(rd_base, vpt1, ID);
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-137
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/Address
// Address()
// ============
shared/gic/its/its_helper/ClearPendingState
// ClearPendingState()
// ================
shared/gic/its/its_helper/ClearPendingStateLocal
// ClearPendingStateLocal()
// =============================
// ClearVirtualPendingStateLocal()
// ============================
6-138 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/CollectionOutOfRange
// CollectionOutOfRange()
// ================================
// Returns TRUE if the value supplied has bits above the implemented range
// or if the value exceeds the total number of collections supported in
// hardware and external memory
shared/gic/its/its_helper/CollectionTableEntry
//CollectionTableEntry()
// =======================
type CollectionTableEntry is (
boolean Valid,
bits(32) RDbase
)
shared/gic/its/its_helper/DeviceOutOfRange
// DeviceOutOfRange()
// =====================
// Returns TRUE if the value supplied has bits above the implemented range
// or if the value supplied exceeds the maximum configured size in the
// appropriate GITS_BASER<n>
shared/gic/its/its_helper/DeviceTableEntry
// DeviceTableEntry()
// =============
type DeviceTableEntry is (
boolean Valid,
Address ITT_base,
bits(5) ITT_size
)
shared/gic/its/its_helper/EndOfCommand
// EndOfCommand()
// ================
// Terminate processing of the current command without incrementing the read pointer.
// This means the command will be run again.
EndOfCommand();
shared/gic/its/its_helper/EnsureInterruptNotPendingOnProcessor
// EnsureInterruptNotPendingOnProcessor()
// ======================================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-139
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/EnsureVirtualInterruptNotPendingOnProcessor
// EnsureVirtualInterruptNotPendingOnProcessor()
// ==========================================
shared/gic/its/its_helper/IdOutOfRange
// IdOutOfRange()
// ============================
// Returns TRUE if the value supplied has bits above the implemented size or above the ITT_size
shared/gic/its/its_helper/IncrementReadPointer
// IncrementReadPointer()
// ===================
IncrementReadPointer();
shared/gic/its/its_helper/InterruptTableEntry
// InterruptTableEntry()
// =====================
type InterruptTableEntry is (
boolean Valid,
InterruptType Type,
bits(32) OutputID,
bits(32) DoorbellID,
bits(16) ICID,
bits(16) VCPUID
)
shared/gic/its/its_helper/InterruptType
// InterruptType
// ====================
shared/gic/its/its_helper/InvalidateCollectionCaches
//InvalidateCollectionCaches()
// =========================
InvalidateCollectionCaches(integer collection);
shared/gic/its/its_helper/InvalidateInterruptCaches
// InvalidateInterruptCaches()
// =============================
6-140 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/InvalidateInterruptConfigurationCaches
// InvalidateInterruptConfigurationCaches()
// ===================================
shared/gic/its/its_helper/InvalidateVCPUCaches
// InvalidateVCPUCaches()
// ==========================
InvalidateVCPUCaches(integer vcpu_id);
shared/gic/its/its_helper/InvalidateVirtualConfigurationCaches
// InvalidateVirtualConfigurationCaches
// ================================
shared/gic/its/its_helper/InvalidateVirtualInterruptCaches
// InvalidateVirtualInterruptCaches()
// =====================================
shared/gic/its/its_helper/IsPending
// IsPending()
// =========================
shared/gic/its/its_helper/IsPending
// IsPending()
// ========================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-141
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/LPIOutOfRange
//LPIOutOfRange()
// ==========================
// Returns TRUE if the value supplied is larger than that permitted by GICD_TYPER.IDbits or not in the
// LPI range and is not 1023
shared/gic/its/its_helper/MoveAllPendingState
// MoveAllPendingState()
// ===================
// Moves the pending state of all interrupts from the Redistributor specified by rd1
// to the Redistributor specified by rd2
shared/gic/its/its_helper/ReadCollectionTable
// ReadCollectionTableEntry()
=========================
shared/gic/its/its_helper/ReadDeviceTable
// ReadDevicePointer()
// ==========================
shared/gic/its/its_helper/ReadTranslationTable
// ReadTranslationTable()
// =======================
shared/gic/its/its_helper/ReadVCPUTable
//ReadVCPUTable()
// ===========================
shared/gic/its/its_helper/RetargetVirtualInterrupt
// RetargetVirtualInterrupt()
// =======================
6-142 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
shared/gic/its/its_helper/SetPendingState
// SetPendingState()
// ========================
shared/gic/its/its_helper/SetPendingStateLocal
// SetPendingStateLocal()
// =======================
// SetVirtualPendingStateLocal()
// =======================
shared/gic/its/its_helper/SizeOutOfRange
// SizeOutOfRange()
// =====================
// Returns TRUE if the value supplied exceeds the maximum allowed by GITS_TYPER.ID_bits
shared/gic/its/its_helper/VCPUOutOfRange
// VCPUOutOfRange()
// =======================
// Returns TRUE if the value supplied has bits above the implemented range or
// if the value supplied exceeds the maximum configured size in the
// appropriate GITS_BASERn
shared/gic/its/its_helper/VCPUTableEntry
//VCPUTableEntry()
// ==================
type VCPUTableEntry is (
boolean Valid,
bits(32) RDbase,
Address VPT_base,
bits(5) VPT_size
)
shared/gic/its/its_helper/WaitForCompletion
// WaitForCompletion()
// ============================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-143
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.4 Common ITS pseudocode functions
// Returns when all external effects of any phsical commands are observable
// by all Redistributors and the internal effects of any previous
// commands affect any subsequent interrupt requests or commands
WaitForCompletion(bits(32) RDbase);
shared/gic/its/its_helper/WaitForVirtualCompletion
// WaitForVirtualCompletion()
// =======================
WaitForVirtualCompletion(bits(32) RDbase);
shared/gic/its/its_helper/WriteCollectionTable
//WriteCollectionTable()
// =========================
shared/gic/its/its_helper/WriteDeviceTable
// WriteDeviceTable()
// ========================
shared/gic/its/its_helper/WriteTranslationTable
// WriteTranslationTable()
// ================================
shared/gic/its/its_helper/WriteVCPUTable
// WriteVCPUTable()
// ===============================
6-144 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.5 ITS command error encodings
0x01_0802 MAPD_ITTSIZE_OOR
0x01_0B03 MAPI_COLLECTION_OOR
0x01_0A03 MAPTI_COLLECTION_OOR
0x01_0A06 MAPTI_PHYSICALID_OOR
0x01_0103 MOVI_COLLECTION_OOR
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-145
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.5 ITS command error encodings
0x01_2912 VMAPP_VPTSIZE_OOR
0x01_2b11 VMAPI_VCPU_OOR
0x01_2b06 VMAPI_PHYSICALID_OOR
0x01_2a11 VMAPTI_VCPU_OOR
0x01_2a13 VMAPTI_VIRTUALID_OOR
0x01_2a06 VMAPTI_PHYSICALID_OOR
6-146 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
6 Locality-specific Peripheral Interrupts and the ITS
6.5 ITS command error encodings
0x01_2103 VMOVI_COLLECTION_OOR
0x01_2106 VMOVI_PHYSICALID_OOR
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 6-147
ID072617 Non-Confidential
6 Locality-specific Peripheral Interrupts and the ITS
6.6 ITS power management
6-148 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 7
Power Management
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 7-149
ID072617 Non-Confidential
7 Power Management
7.1 Power management
Note
ARM strongly recommends that the GIC is not configured in such a way that an interrupt can cause wake-up of a
particular PE, if on waking software on that PE cannot handle the interrupt.
GICv3 provides power management to control this situation, because the architecture is designed to allow the
Redistributors designed by one organization to be used with PEs and CPU interfaces that have been designed by a
different organization.
All other aspects of power management for the GIC are IMPLEMENTATION DEFINED.
Before powering down the CPU interface and the PE when the Redistributor is powered up, software must put the
interface between the CPU interface and the Redistributor into the quiescent state or the system will become
UNPREDICTABLE. The transition to the quiescent state is initiated by setting GICR_WAKER.ProcessorSleep to 1.
When the interface is quiescent, GICR_WAKER.ChildrenAsleep is also set to 1.
When the interface between the Redistributor and the CPU interface is in a quiescent state, the following
architectural state of the CPU interface can be saved as part of saving the state within the power domain of the CPU
interface and the PE:
• The CPU interface state related to physical interrupts of the connected PE.
• The CPU interface state related to virtual interrupts that is part of the vPE that is scheduled on the associated
PE.
Setting GICR_WAKER.ProcessorSleep to 1 when the physical group enables in the CPU interface are set to 1
results in UNPREDICTABLE behavior.
When GICR_WAKER.ProcessorSleep == 1 or GICR_WAKER.ChildrenAsleep == 1 then a write to any GICC_*,
GICV_*, GICH_*, ICC_*, ICV_*, or ICH_* registers, other than those in the following list, is UNPREDICTABLE:
• ICC_SRE_EL1.
• ICC_SRE_EL2.
• ICC_SRE_EL3.
7-150 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 8
Programmers’ Model
This chapter provides information about the GIC register interfaces and describes all of the GIC registers. It contains
the following sections:
• About the programmers’ model on page 8-152.
• AArch64 System register descriptions on page 8-177.
• AArch64 System register descriptions of the virtual registers on page 8-246.
• AArch64 virtualization control System registers on page 8-281.
• AArch32 System register descriptions on page 8-309.
• AArch32 System register descriptions of the virtual registers on page 8-386.
• AArch32 virtualization control System registers on page 8-424.
• The GIC Distributor register map on page 8-454.
• The GIC Distributor register descriptions on page 8-456.
• The GIC Redistributor register map on page 8-511.
• The GIC Redistributor register descriptions on page 8-514.
• The GIC CPU interface register map on page 8-573.
• The GIC CPU interface register descriptions on page 8-574.
• The GIC virtual CPU interface register map on page 8-612.
• The GIC virtual CPU interface register descriptions on page 8-614.
• The GIC virtual interface control register map on page 8-646.
• The GIC virtual interface control register descriptions on page 8-647.
• The ITS register map on page 8-669.
• The ITS register descriptions on page 8-670.
• Pseudocode on page 8-691.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-151
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
• The Distributor, Redistributor, and ITS programming interfaces are always memory-mapped.
• The CPU interfaces for physical and virtual interrupt handling, and the virtual machine control interface used
by the hypervisor use:
— System register interfaces for the operation of GICv3 and GICv4.
— Memory-mapped interfaces for legacy operation.
Note
Support for legacy operation is optional. Implementations are allowed to support legacy operation for
virtual interrupts only, meaning that the GICV_* registers are the only memory-mapped CPU interface
registers that are provided. In these implementations, GICC_* registers and GICH_* registers are not
provided. GICC_* and GICH_* registers are only required to support legacy operation by physical
interrupts.
When accessing a System register, the register content accessed depends on:
• The Exception level at which the PE is executing.
• Whether the access is Secure or Non-secure.
• For a Non-secure access at EL1, whether the Exception level is configured by HCR_EL2 when executing in
AArch64 state, or by HCR when executing in AArch32 state, to handle virtual or physical interrupts.
Figure 8-1 on page 8-153 shows the interfaces that the programmer can use for the different logical components
when affinity routing and System register access are enabled for all Exception levels.
8-152 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
GITS_*
GICD_*
GICR_* GICR_*
ICC_* ICC_*
PE PE
a. A vPE is a virtual PE
A System register might be accessible from different Exception levels. In AArch64 state, a register suffix defines
the lowest Exception level at which the register is accessible. That is, any access to ICC_*_ELx must be from
Exception level ELx or higher.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-153
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-1 shows the registers that are shared between the memory-mapped registers and the System registers.
AArch64 AArch32
ICC_CTLR_EL3 ICC_MCTLR
ICC_IGRPEN1_EL1 ICC_IGRPEN1
ICC_IGRPEN1_EL3 ICC_MGRPEN1
ICH_AP1R<n>_EL2 ICH_AP1R<n> -
ICH_LRC<n> -
8-154 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
a. There are also System registers prefixed with ICV, rather than ICC, and these are the virtual GIC CPU interface System registers, see
AArch64 System register descriptions of the virtual registers on page 8-246 and AArch32 System register descriptions of the virtual registers
on page 8-386.
b. This register is an alias of the Non-secure copy of GICC_BPR.
c. If ICC_CTLR_EL3.CBPR_EL1NS == 1, Secure accesses to this register access (and might modify) ICC_BPR0_EL1.
d. In GIC implementations that support two Security states, this register is an alias of the Non-secure view of GICC_IAR.
ARM does not expect the following registers to be accessed directly by software, but single-copy atomic 16-bit and
32-bit accesses to these registers must be supported:
• GITS_TRANSLATER.
• GICD_SETSPI_NSR.
• GICD_CLRSPI_NSR.
• GICD_SETSPI_SR.
• GICD_CLRSPI_SR.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-155
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
• The defined side-effects of a read occur or not. A read returns UNKNOWN data.
• A write is ignored or sets the accessed register or registers to UNKNOWN values.
For memory-mapped accesses by a PE that complies with the ARM architecture, the single-copy atomicity rules for
the instruction, the type of instruction, and the type of memory accessed, determine the size of the access made by
the instruction. Example 8-1 shows this.
Two Load Doubleword instructions made to consecutive doubleword-aligned locations generate a pair of
single-copy atomic doubleword reads. However, if the accesses are made to Normal memory or Device-GRE
memory they might appear as a single quadword access that is not supported by the peripheral.
ARMv8 does not require the size of each element accessed by a multi-register load or store instruction to be
identifiable by the memory system beyond the PE. Any memory-mapped access to a GIC is defined to be beyond
the PE.
Software must use a Device-nGRE or stronger memory-type, and use only single register load and store instructions,
to create memory accesses that are supported by the peripheral.
Reads and writes of the memory-mapped registers complete in the order in which they arrive at the GIC. For access
to different register locations, software must create this order by:
• Marking the memory as Device-nGnRnE or Device-nGnRE.
• Using the appropriate memory barriers.
For more information on endianness, memory ordering, and barrier instructions, see ARM® Architecture Reference
Manual, ARMv8, for ARMv8-A architecture profile.
The access type definitions for the memory-mapped register interface are:
RW Read and write.
RO Read only. Writes are ignored.
WO Write only. Reads return an UNKNOWN value.
In implementations that include the GICC_* registers, and where the Secure copy of ICC_SRE_EL1.SRE is
programmable, the following state must be shared between System register access and memory-mapped access to
ensure the correct operation of preemption:
• GICC_PMR and ICC_PMR_EL1 or ICC_PMR must access the same state.
• GICC_APR<n> and ICC_AP0R<n>_EL1 must access the same state.
• GICC_NSAPR<n> and ICC_AP1R<n>_EL1(NS) must access the same state.
• GICC_CTLR.CBPR and ICC_CTLR_EL3(NS).CBPR must access the same state.
• Secure accesses to GICC_BPR and ICC_BPR0_EL1 must access the same state when GICC_CTLR.CBPR
== 0.
• Secure accesses to GICC_ABPR and ICC_BPR1_EL1 must access the same state when GICC_CTLR.CBPR
== 0.
8-156 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Note
• Software must follow the rules specified in GIC System register access on page 8-159 when changing the
setting of the SRE fields.
• Relation between System registers and memory-mapped registers on page 8-153 specifies the relationship
between memory-mapped registers and System registers. State can only be shared between registers that
perform the same function, and the registers listed in Table 8-1 on page 8-154 might share state.
When changing from a state where the registers are required to access the same state to a state where the registers
are not required to access the same state, or when changing from a state where the registers are not required to access
the same state to a state where the registers are required to access the same state, the content of the registers becomes
UNKNOWN.
Note
The priority bits implemented for memory-mapped and System register state must be the same, as must the
minimum value of the Binary Point Register for Group 0 interrupts for both Secure and Non-secure views.
Accesses to the GICC_* registers might be affected by whether System register access is enabled or not, depending
on the implementation:
• If the Secure copy of ICC_SRE_EL1.SRE == 1, then the GICC_* registers might not be accessible or might
be RAZ/WI.
Note
When EL3 is configured to use AArch32 state, Secure EL1 is not accessible but software must still set the
Secure copy of ICC_SRE.SRE to 1, to enable support for Secure Group 1 interrupts, otherwise the system is
UNPREDICTABLE.
• If ICC_SRE_EL2.SRE ==1, then the GICH_* registers might not be accessible or might be RAZ/WI.
• If the Non-secure copy of ICC_SRE_EL1.SRE == 1, then the GICV_* registers might not be accessible or
might be RAZ/WI.
Note
In implementations where the Non-secure copy of ICC_SRE_EL1.SRE is programmable, that is, it is not RAO/WI,
the GICV_* register interface must still be provided.
An implementation might be able to detect accesses to memory-mapped registers that must not be accessed because
an SRE bit is 1, and report them in an IMPLEMENTATION DEFINED manner.
To see the mapping between the AArch64 System registers and the AArch32 System registers, see:
• Table 8-3 on page 8-161.
• Table 8-4 on page 8-162.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-157
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Note
This ensures that no interrupts with a priority lower than the priority value in ICC_PMR_EL1 are taken after
a write to ICC_PMR_EL1 is architecturally executed.
• Reads of ICC_IAR0_EL1 and ICC_IAR1_EL1 are self-synchronizing when interrupts are masked by the PE,
that is when PSTATE.F == 1, for reads of ICC_IAR0_EL1, and when PSTATE.I == 1, for reads of
ICC_IAR1_EL1.
Note
This ensures that the effect of activating an interrupt on the signaling of an interrupt exception is observed
when a read of ICC_IAR0_EL1 and ICC_IAR1_EL1 is architecturally executed. This means that no spurious
interrupt exception occurs if interrupts are unmasked by an instruction immediately following the read.
• Instructions that change the current Exception level from EL3 to a lower Exception level, for example the
ERET instruction, must be synchronized with any corresponding change in the allocation of interrupts as FIQs
and IRQs, so that no spurious FIQ is taken after the architectural execution of the instruction, see Interrupt
assignment to IRQ and FIQ signals on page 4-60.
Note
An ISB or other context synchronization operation must precede the DSB to ensure visibility of System register writes.
8-158 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Note
The information in Table 8-2 applies to implementations that support both EL2 and EL3.
All combinations of ICC_SRE_ELx.SRE settings not listed in Table 8-2 result in UNPREDICTABLE behavior.
Note
• When HCR_EL2 is configured so that virtualization at EL1 is enabled, it is IMPLEMENTATION DEFINED
whether a Non-secure access to ICC_SRE_EL1.SRE or ICC_SRE.SRE is programmable to support a legacy
VM.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-159
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Note
ICC_SRE_EL1(NS) can be changed from 1 to 0 to allow different VMs to have different ICC_SRE_EL1 values.
In addition:
• ICC_SRE_EL3.Enable controls EL1 access to ICC_SRE_EL1, and EL2 access to ICC_SRE_EL1 and
ICC_SRE_EL2.
Note
The ICC_SRE_ELx register associated with the highest implemented Exception level is always accessible to allow
software executing at that Exception level to configure the System register at different Exception levels.
The System register interface can be used for execution in both AArch32 state and AArch64 state.
For AArch32 state, accesses to GIC registers that are visible in the System register interface use the following
instructions:
• The MRC instruction for 32-bit read accesses.
• The MCR instruction for32-bit write accesses.
• The MCRR instruction for 64-bit write accesses to ICC_SGI0R, ICC_SGI1R and ICC_ASGI1R.
See the ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile for information about the
form of the MRC, MCR, and MCRR instructions.
System registers support 32-bit or 64-bit accesses. See the individual register description for the associated access
size.
The access type definitions for the System register interface are:
RW Read and write.
RO Read only. Writes result in an UNDEFINED exception.
WO Write only. Reads result in an UNDEFINED exception.
Note
For more information about UNDEFINED exceptions, see ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile.
8-160 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-3 shows the AArch64 and AArch32 register mappings for System register accesses by the GIC CPU
interface.
Table 8-3 System register accesses for GIC CPU interface registers
AArch64 AArch32
ICC_IAR0_EL1a ICC_IAR0
ICC_IAR1_EL1a ICC_IAR1
ICC_EOIR0_EL1a ICC_EOIR0
ICC_EOIR1_EL1a ICC_EOIR1
ICC_HPPIR0_EL1a ICC_HPPIR0
ICC_HPPIR1_EL1a ICC_HPPIR1
ICC_BPR0_EL1a ICC_BPR0
ICC_BPR1_EL1a ICC_BPR1
ICC_DIR_EL1a ICC_DIR
ICC_PMR_EL1 ICC_PMR
ICC_RPR_EL1 ICC_RPR
ICC_AP0R<n>_EL1a ICC_AP0R<n>
ICC_AP1R<n>_EL1a ICC_AP1R<n>
ICC_CTLR_EL1 ICC_CTLR
ICC_CTLR_EL3 ICC_MCTLR
ICC_IGRPEN0_EL1 ICC_IGRPEN0
ICC_IGRPEN1_EL1 ICC_IGRPEN1
ICC_IGRPEN1_EL3 ICC_MGRPEN1
ICC_SGI1R_EL1 ICC_SGI1R
ICC_ASGI1R_EL1 ICC_ASGI1R
ICC_SGI0R_EL1 ICC_SGI0R
ICC_SRE_EL1 ICC_SRE
ICC_SRE_EL2 ICC_HSRE
ICC_SRE_EL3 ICC_MSRE
a. In addition to ICC_SRE_EL*.SRE,
ICC_SRE.SRE, ICC_HSRE.SRE,
and ICC_MSRE.SRE, SCR_EL3
and HCR_EL2 control accessibility
to these registers.
The GIC virtual interface control registers are accessible when ICC_SRE_EL2.SRE == 1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-161
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-4 shows the AArch64 and AArch32 System register mappings for the GIC virtual interface control
registers.
Table 8-4 System register mappings for GIC virtual interface control registers
AArch64 AArch32
ICH_HCR_EL2 ICH_HCR
ICH_VTR_EL2 ICH_VTR
ICH_MISR_EL2 ICH_MISR
ICH_EISR_EL2 ICH_EISR
ICH_ELRSR_EL2 ICH_ELRSR
ICH_AP0R<n>_EL2a ICH_AP0R<n>a
ICH_AP1R<n>_EL2a ICH_AP1R<n>a
ICH_LR<n>_EL2[63:32]b ICH_LRC<n>b
ICH_LR<n>_EL2[31:0]b ICH_LR<n>b
ICH_VMCR_EL2 ICH_VMCR
a. n = 0-3
b. n = 0-15.
Table 8-5 Mapping of MSR and MRS to physical and virtual CPU interface registers, AArch64 state
ICC_BPR0_EL1 RW 3 0 c12 c8 3
ICC_EOIR0_EL1 WO 3 0 c12 c8 1
ICC_HPPIR0_EL1 RO 3 0 c12 c8 2
8-162 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-5 Mapping of MSR and MRS to physical and virtual CPU interface registers, AArch64 state
ICC_IAR0_EL1 RO 3 0 c12 c8 0
ICC_PMR_EL1 RW 3 0 c4 c6 0
ICC_SRE_EL2 RW 3 4 c12 c9 5
a. n = 0-3.
b. There is a Secure copy and a Non-secure copy of this register.
Table 8-6 shows the format of the A64 MSR and MRS instructions that access the virtual interface control registers.
Table 8-6 Mapping of MSR and MRS to virtual interface control registers, AArch64 state
a. n = 0-15
For more information about the A64 instructions, see the ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-163
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-7 Mapping of MCR and MRC to physical and virtual CPU interface registers, AArch32 state
ICC_BPR0 RW 0 c12 c8 3 -
ICC_EOIR0 WO 0 c12 c8 1 -
ICC_HPPIR0 RO 0 c12 c8 2 -
ICC_HSRE RW 4 c12 c9 5 -
ICC_IAR0 RO 0 c12 c8 0 -
ICC_PMR RW 0 c4 c6 0 -
8-164 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-8 shows the format of the A32 and T32 MCR and MRC instructions that access the virtual interface control
registers.
Table 8-8 Mapping of MCR and MRC to virtual interface control registers, AArch32 state
a. n = 0-15.
For more information about the T32 and A32 instructions, see the ARM® Architecture Reference Manual, ARMv8,
for ARMv8-A architecture profile.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-165
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
For most operations, this separate virtualization is achieved by using different registers to handle Group 0 and Group
1 interrupts. However, a number of registers are common to both Group 0 and Group 1 interrupts. These Common
registers are:
• ICC_SGI0R_EL1, ICC_SGI1R_EL1, ICC_ASGI1R_EL1.
• ICC_CTLR_EL1.
• ICC_DIR_EL1.
• ICC_PMR_EL1.
• ICC_RPR_EL1.
The rules governing whether accesses to the Common registers are physical accesses, virtual accesses, or whether
they generate a Trap exception, are as follows:
• When ICH_HCR_EL2.TC == 1, Non-secure accesses at EL1 generate a Trap Exception that is taken to EL2.
• When ICH_HCR_EL2.TDIR == 1, Non-secure writes at EL1 to ICC_DIR_EL1 generate a Trap exception
that is taken to EL2.
• When HCR_EL2.FMO == 1 || HCR_EL2.IMO == 1 Non-secure accesses at EL1 are virtual accesses:
— Accesses to all ICC_* registers that are accessible at EL1, other than ICC_SRE_EL1*, access the
equivalent ICV_* registers instead.
— Virtual accesses to ICC_SGI0R_EL1, ICC_SGI1R_EL1 and ICC_ASGI1R_EL1 always generate a
Trap exception that is taken to EL2.
Otherwise, the lowest Exception level at which the Common registers can be accessed is the lowest Exception level
that is either:
• Specified by SCR_EL3.FIQ, SCR_EL3.NS, and HCR_EL2.FMO.
• Specified by SCR_EL3.IRQ, SCR_EL3.NS, and HCR_EL2.IMO.
Note
ARM expects that software configures a GIC so that:
• ICH_HCR_EL2.TC == 1 when Group 0 and Group 1 are configured asymmetrically and therefore access
different states, for example one group accesses the virtualized state and the other group accesses the physical
state.
• ICH_HCR_EL2.TC == 0 when the configuration is symmetric, and accesses to ICC_DIR_EL1 access the
physical state or the virtualized state for both Group 0 and Group 1.
8-166 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
• If ICC_SRE_EL3.SRE == 0, then ICC_SRE_EL3.Enable is treated as 1 for all purposes, other than reading
or writing the register.
SRE SRE
SRE Enable SRE Enable NS = 0 NS = 1 NS = 1
NS=0 NS=1
Table 8-10 shows the conditions under which ICC_SRE_EL2 can be accessed.
SRE SRE
SRE Enable SRE Enable NS=0 NS=1 NS = 1 NS=0 NS=1
NS=0 NS=1
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-167
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Table 8-11 shows the conditions under which ICC_SRE_EL1(S) can be accessed when EL3 is implemented.
SRE SRE
SRE Enable SRE Enable NS=0 NS=1 NS = 1 NS=0 NS=1
NS=0 NS=1
Table 8-12 shows the conditions under which ICC_SRE_EL1(NS) can be accessed when EL3 is implemented.
SRE SRE
SRE Enable SRE Enable NS=0 NS=1 NS = 1 NS=0 NS=1
NS=0 NS=1
1 1 1 1 0 x N/A RW RW N/A RW
Table 8-13 shows the conditions under which the single copy of ICC_SRE_EL1 can be accessed when EL3 is not
implemented.
SRE Enable
0 {1} [0] RW RW
0 1 [0] RW RW
1 0 x T(EL2) RW
1 1 x RW RW
8-168 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
Accesses that are not described in these tables are not possible.
Configuration of specified
Access SGI register accessed Signal SGI?
SGI on target PE
AArch64 AArch32
Non-secure Group 1 No
Secure Group 1 No
Secure Group 1 No
Non-secure Group 1 No
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-169
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Configuration of specified
Access SGI register accessed Signal SGI?
SGI on target PE
AArch64 AArch32
Non-secure EL1 ICC_SGI1R_EL1 ICC_SGI1R Secure Group 0 Yes, provided either that:
EL2 • This is permitted by the
corresponding field in
GICR_NSACR at each target
PE.
• GICD_CTLR.DS == 1.
Non-secure Group 1 No
Secure Group 1 No
Non-secure Group 1 No
Note
• When System register access is not enabled for Secure EL1, or when GICD_CTLR.DS == 1, the Distributor
treats Secure Group 1 interrupts as Group 0 interrupts. When Table 8-14 on page 8-169 indicates that a
Secure Group 1 interrupt is generated, the Distributor must send a Secure Group 0 interrupt to the CPU
interface.
• Generating SGIs for the other Security state is only supported when affinity routing is enabled for both
Security states.
8-170 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
• The GIC ignores any Non-secure write to a register field holding state information for a Secure interrupt.
• If a GIC supports two Security states, some registers are Banked to provide separate Secure and Non-secure
copies of the registers. The Secure and Non-secure register bit assignments can differ. A Secure access to the
register address accesses the Secure copy of the register, and a Non-secure access accesses the Non-secure
copy.
Note
These are the only ARMv8 AArch64 System registers that are banked by Security state.
Where legacy operation supports physical interrupts, the following GICC_* memory-mapped registers are banked
by Security state:
• GICC_CTLR.
• GICC_BPR.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-171
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
The architecture specification defines offsets 0xFFD0 - 0xFFFC in the Distributor register map as identification register
space, as Table 8-15 shows.
Table 8-15 The GIC identification register space, Distributor register map
The architecture specification defines offsets 0xFFD0 - 0xFFFC in the Redistributor register map as identification
register space, as Table 8-16 shows.
Table 8-16 The GIC identification register space, Redistributor register map
The architecture specification defines offsets 0xFFD0 - 0xFFFC in the ITS register map as identification register space,
as Table 8-17 shows.
Table 8-17 The GIC identification register space, ITS register map
ARM generic ID registers can be used in the IMPLEMENTATION DEFINED register space.
Purpose This register provides a four-bit architecturally-defined architecture revision field. The
remaining bits of the register are IMPLEMENTATION DEFINED.
8-172 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
31 8 7 4 3 0
IMPLEMENTATION DEFINED
[31:8] - IMPLEMENTATION DEFINED. The CoreLink and CoreSight Peripheral ID Registers scheme requires these bits
to be reserved, RES0, and ARM strongly recommends that implementations follow this scheme.
[7:4] ArchRev Revision field for the GIC architecture. The value of this field depends on the GIC architecture version that
applies to the Distributor or Redistributor:
• 0x1. GICv1.
• 0x2. GICv2.
• 0x3. GICv3.
• 0x4. GICv4.
• All other values are reserved.
Purpose This register provides a four-bit architecturally-defined architecture revision field. The
remaining bits of the register are IMPLEMENTATION DEFINED.
The GICR_PIDR2 bit assignments are the same as those for GICD_PIDR2.
Purpose This register provides a four-bit architecturally-defined architecture revision field. The
remaining bits of the register are IMPLEMENTATION DEFINED.
The GITS_PIDR2 bit assignments are the same as those for GICD_PIDR2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-173
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
Note
• The ARM implementation of these registers is consistent with the identification scheme for CoreLink and
CoreSight components. This implementation identifies the device as a GIC that implements this architecture.
It does not identify the designer or manufacturer of the GIC implementation. For information about the
designer and manufacturer of a GIC implementation, see the descriptions for GICD_IIDR and GICC_IIDR.
• In other contexts, this identification scheme identifies a component in a system. The GIC use of the scheme
is different. It identifies only that the device is an implementation of a version of the GIC architecture defined
by this specification. Software must read GICD_IIDR and GICC_IIDR to discover, for example, the
implementer and version of the GIC hardware.
All component classes require the implementation of the Component and Peripheral Identification registers, as
described in:
• Component Identification Registers, CIDR0-CIDR3.
• Peripheral Identification Registers, PIDR0 - PIDR7.
PIDR3 0xFFEC [7:4] RevAnd IMP DEF Manufacturer defined revision number
8-174 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.1 About the programmers’ model
ArchRev In GICv3, this field is ArchRev, see GICD_PIDR2, Peripheral ID2 Register on page 8-172.
Customer Modified (CMOD) Where the component is reusable IP, this value indicates if the customer has
modified the behavior of the component. In most cases this field is zero.
RevAnd (REVAND) The RevAnd field is an incremental value starting at 0x0 for the first design of a component.
This only increases by 1 for both major and minor revisions, and is simply used as a look-up to
establish the exact major and minor revision.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-175
ID072617 Non-Confidential
8 Programmers’ Model
8.1 About the programmers’ model
4KB Count (SIZE) This is a 4-bit value that indicates the total contiguous size of the memory block used by this
component in powers of 2 from the standard 4KB. If a component only requires a single 4KB then
this must read as log to the base of 2 of the number of 4KB blocks.
8-176 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICC_* and GICV_* memory-mapped registers.
The ICC prefix is used by the System register access mechanism to select the physical or virtual interface System
registers according to the setting of HCR_EL2. The equivalent memory-mapped physical registers are described in
The GIC CPU interface register descriptions on page 8-574.The equivalent virtual interface memory-mapped
registers are described in The GIC virtual CPU interface register descriptions on page 8-614.
Table 8-21 shows the encodings for the AArch64 System registers.
ICC_PMR_EL1 32 3 0 4 6 0 RW
ICC_IAR0_EL1 32 12 8 0 RO
ICC_EOIR0_EL1 32 1 WO
ICC_HPPIR0_EL1 32 2 RO
ICC_BPR0_EL1 32 3 RW
ICC_DIR_EL1 32 11 1 WO
ICC_RPR_EL1 32 3 RO
ICC_SGI1R_EL1 64 5 WO
ICC_ASGI1R_EL1 64 6 WO
ICC_SGI0R_EL1 64 7 WO
ICC_IAR1_EL1 32 12 0 RO
ICC_EOIR1_EL1 32 1 WO
ICC_HPPIR1_EL1 32 2 RO
ICC_BPR1_EL1 32 3 RW
ICC_CTLR_EL1 32 4 RW
ICC_SRE_EL1 32 5 RW
ICC_IGRPEN0_EL1 32 6 RW
ICC_IGRPEN1_EL1 32 7 RW
ICC_SRE_EL2 32 3 4 12 9 5 RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-177
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
ICC_CTLR_EL3 32 3 6 12 12 4 RW
ICC_SRE_EL3 32 5 RW
ICC_IGRPEN1_EL3 32 7 RW
8-178 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Provides information about Group 0 active priorities.
Configurations
AArch64 System register ICC_AP0R<n>_EL1 is architecturally mapped to AArch32 System
register ICC_AP0R<n>.
Attributes
ICC_AP0R<n>_EL1 is a 32-bit register.
Field descriptions
The ICC_AP0R<n>_EL1 bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_AP0R<n>_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-179
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
0 x 1 - RW RW RW
1 x 1 - ICV_AP0R<n>_EL1 RW RW
The ICC_AP0R<n>_EL1 registers are only accessible at Non-secure EL1 when HCR_EL2.FMO is set to 0.
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_AP0R<n>_EL1
results in an access to ICV_AP0R<n>_EL1.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 0 active priorities) might result in UNPREDICTABLE behavior of the interrupt prioritization system, causing:
Note
The number of bits of preemption is indicated by ICH_VTR_EL2.PREbits.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICC_AP0R<n>_EL1.
• Secure ICC_AP1R<n>_EL1.
• Non-secure ICC_AP1R<n>_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-180 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-181
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Provides information about Group 1 active priorities.
Configurations
AArch64 System register ICC_AP1R<n>_EL1(S) is architecturally mapped to AArch32 System
register ICC_AP1R<n> (S).
AArch64 System register ICC_AP1R<n>_EL1(NS) is architecturally mapped to AArch32 System
register ICC_AP1R<n> (NS).
Attributes
ICC_AP1R<n>_EL1 is a 32-bit register.
Field descriptions
The ICC_AP1R<n>_EL1 bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_AP1R<n>_EL1.
8-182 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
Instance
FMO IMO NS EL0 EL1 EL2 EL3
x x 0 - RW n/a RW ICC_AP1R<n>_EL1_s
x x 1 - n/a RW RW ICC_AP1R<n>_EL1_ns
x 0 1 - RW RW RW ICC_AP1R<n>_EL1_ns
x 1 1 - ICV_AP1R<n>_EL1 RW RW ICC_AP1R<n>_EL1_ns
The ICC_AP1R<n>_EL1 registers are only accessible at Non-secure EL1 when HCR_EL2.IMO is set to 0.
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_AP1R<n>_EL1
results in an access to ICV_AP1R<n>_EL1.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 1 active priorities) might result in UNPREDICTABLE behavior of the interrupt prioritization system, causing:
Note
The number of bits of preemption is indicated by ICH_VTR_EL2.PREbits.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICC_AP0R<n>_EL1.
• Secure ICC_AP1R<n>_EL1.
• Non-secure ICC_AP1R<n>_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-183
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
8-184 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
8.2.3 ICC_ASGI1R_EL1, Interrupt Controller Alias Software Generated Interrupt Group 1 Register
The ICC_ASGI1R_EL1 characteristics are:
Purpose
Generates Group 1 SGIs for the Security state that is not the current Security state.
Configurations
AArch64 System register ICC_ASGI1R_EL1 performs the same function as AArch32 System
register ICC_ASGI1R.
Under certain conditions a write to ICC_ASGI1R_EL1 can generate Group 0 interrupts, see
Table 8-14 on page 8-169.
Attributes
ICC_ASGI1R_EL1 is a 64-bit register.
Field descriptions
The ICC_ASGI1R_EL1 bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-185
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
8-186 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register allows software executing in a Secure state to generate Non-secure Group 1 SGIs. It will also allow
software executing in a Non-secure state to generate Secure Group 1 SGIs, if permitted by the settings of
GICR_NSACR in the Redistributor corresponding to the target PE.
When GICD_CTLR.DS==0, Non-secure writes do not generate an interrupt for a target PE if not permitted by the
GICR_NSACR register associated with the target PE. For more information see Use of control registers for SGI
forwarding on page 8-169.
Note
Accesses at EL3 are treated as Secure regardless of the value of SCR_EL3.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-187
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 0 interrupt preemption.
Configurations
AArch64 System register ICC_BPR0_EL1 is architecturally mapped to AArch32 System register
ICC_BPR0.
Virtual accesses to this register update ICH_VMCR_EL2.VBPR0.
Attributes
ICC_BPR0_EL1 is a 32-bit register.
Field descriptions
The ICC_BPR0_EL1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
This register can be written using MSR (register) with the following syntax:
8-188 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_BPR0_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
0 x 1 - RW RW RW
1 x 1 - ICV_BPR0_EL1 RW RW
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_BPR0_EL1 results
in an access to ICV_BPR0_EL1.
The minimum binary point value is derived from the number of implemented priority bits. The number of priority
bits is IMPLEMENTATION DEFINED, and reported by ICC_CTLR_EL1.PRIbits and ICC_CTLR_EL3.PRIbits.
An attempt to program the binary point field to a value less than the minimum value sets the field to the minimum
value. On a reset, the binary point field is UNKNOWN.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-189
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
8-190 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 1 interrupt preemption.
Configurations
AArch64 System register ICC_BPR1_EL1(S) is architecturally mapped to AArch32 System
register ICC_BPR1 (S).
AArch64 System register ICC_BPR1_EL1(NS) is architecturally mapped to AArch32 System
register ICC_BPR1 (NS).
Virtual accesses to this register update ICH_VMCR_EL2.VBPR1.
Attributes
ICC_BPR1_EL1 is a 32-bit register.
Field descriptions
The ICC_BPR1_EL1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-191
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
0 0 Non-secure EL1 and EL2 reads return ICC_BPR0_EL1 + 1 saturated to 0b111. Non-secure EL1
and EL2 writes are ignored.
1 0 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 reads return
ICC_BPR0_EL1 + 1 saturated to 0b111. Non-secure EL2 writes are ignored.
1 1 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 accesses trap to EL3.
HCR_EL2.IMO Behavior
0 Non-secure EL1 and EL2 reads return ICC_BPR0_EL1 + 1 saturated to 0b111. Non-secure EL1 and EL2 writes
are ignored.
1 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 reads return ICC_BPR0_EL1 + 1 saturated
to 0b111. Non-secure EL2 writes are ignored.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_BPR1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
Instance
FMO IMO NS EL0 EL1 EL2 EL3
x x 0 - RW n/a RW ICC_BPR1_EL1_s
8-192 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Control Accessibility
Instance
FMO IMO NS EL0 EL1 EL2 EL3
x x 1 - n/a RW RW ICC_BPR1_EL1_ns
x 0 1 - RW RW RW ICC_BPR1_EL1_ns
x 1 1 - ICV_BPR1_EL1 RW RW ICC_BPR1_EL1_ns
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_BPR1_EL1 results in
an access to ICV_BPR1_EL1.
An attempt to program the binary point field to a value less than the minimum value sets the field to the minimum
value.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-193
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls aspects of the behavior of the GIC CPU interface and provides information about the
features implemented.
Configurations
AArch64 System register ICC_CTLR_EL1(S) is architecturally mapped to AArch32 System
register ICC_CTLR (S).
AArch64 System register ICC_CTLR_EL1(NS) is architecturally mapped to AArch32 System
register ICC_CTLR (NS).
Attributes
ICC_CTLR_EL1 is a 32-bit register.
Field descriptions
The ICC_CTLR_EL1 bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 6 5 2 1 0
RSS CBPR
RES0 EOImode
PMHE
RES0
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bits [17:16]
Reserved, RES0.
8-194 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Note
This field always returns the number of priority bits implemented, regardless of the Security state
of the access or the value of GICD_CTLR.DS.
For physical accesses, this field determines the minimum value of ICC_BPR0_EL1.
If EL3 is implemented, physical accesses return the value from ICC_CTLR_EL3.PRIbits.
If EL3 is not implemented, physical accesses return the value from this field.
Bit [7]
Reserved, RES0.
Bits [5:2]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-195
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICV_CTLR_EL1.
8-196 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
Instance
FMO IMO NS EL0 EL1 EL2 EL3
x x 1 - n/a RW RW ICC_CTLR_EL1_ns
x 1 1 - ICV_CTLR_EL1 RW RW ICC_CTLR_EL1_ns
1 x 1 - ICV_CTLR_EL1 RW RW ICC_CTLR_EL1_ns
0 0 1 - RW RW RW ICC_CTLR_EL1_ns
x x 0 - RW n/a RW ICC_CTLR_EL1_s
ICC_CTLR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} == {0, 0}.
Note
When HCR_EL2.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_CTLR_EL1
results in an access to ICV_CTLR_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-197
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls aspects of the behavior of the GIC CPU interface and provides information about the
features implemented.
Configurations
AArch64 System register ICC_CTLR_EL3 can be mapped to AArch32 System register
ICC_MCTLR, but this is not architecturally mandated.
Attributes
ICC_CTLR_EL3 is a 32-bit register.
Field descriptions
The ICC_CTLR_EL3 bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 6 5 4 3 2 1 0
RSS CBPR_EL1S
nDS CBPR_EL1NS
RES0 EOImode_EL3
EOImode_EL1S
EOImode_EL1NS
RM
PMHE
RES0
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bit [16]
Reserved, RES0.
8-198 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Note
This field always returns the number of priority bits implemented, regardless of the value of
SCR_EL3.NS or the value of GICD_CTLR.DS.
The division between group priority and subpriority is defined in the binary point registers
ICC_BPR0_EL1 and ICC_BPR1_EL1.
This field determines the minimum value of ICC_BPR0_EL1.
Bit [7]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-199
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Note
The Routing Modifier bit is supported in AArch64 only. In systems without EL3 the behavior is as
if the value is 0.
Software must ensure this bit is 0 when the Secure copy of ICC_SRE_EL1.SRE is 1, otherwise
system behavior is UNPREDICTABLE.
In systems without EL3 or where the Secure copy of ICC_SRE_EL1.SRE is RAO/WI, this bit is
RES0.
8-200 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-201
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - - RW
1 - n/a - RW
8-202 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
When interrupt priority drop is separated from interrupt deactivation, a write to this register
deactivates the specified interrupt.
Configurations
AArch64 System register ICC_DIR_EL1 performs the same function as AArch32 System register
ICC_DIR.
Attributes
ICC_DIR_EL1 is a 32-bit register.
Field descriptions
The ICC_DIR_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
This encoding results in an access to ICV_DIR_EL1 at Non-secure EL1 in the following cases:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-203
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
x 1 1 - ICV_DIR_EL1 WO WO
1 x 1 - ICV_DIR_EL1 WO WO
0 0 1 - WO WO WO
The ICC_DIR_EL1 register is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} == {0, 0}.
There are two cases when writing to ICC_DIR_EL1 that were UNPREDICTABLE for a corresponding GICv2 write to
GICC_DIR:
• When EOImode == 0 GICv3 implementations must ignore such writes. In systems supporting system error
generation, an implementation might generate an SEI.
• When EOImode == 1 but no EOI has been issued. The interrupt will be de-activated by the Distributor,
however the active priority in the CPU interface for the interrupt will remain set (because no EOI was issued).
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TDIR==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
8-204 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified Group 0 interrupt.
Configurations
AArch64 System register ICC_EOIR0_EL1 performs the same function as AArch32 System
register ICC_EOIR0.
Attributes
ICC_EOIR0_EL1 is a 32-bit register.
Field descriptions
The ICC_EOIR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-205
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_EOIR0_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
0 x 1 - WO WO WO
1 x 1 - ICV_EOIR0_EL1 WO WO
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_EOIR0_EL1 results
in an access to ICV_EOIR0_EL1.
A write to this register must correspond to the most recent valid read by this PE from an Interrupt Acknowledge
Register, and must correspond to the INTID that was read from ICC_IAR0_EL1, otherwise the system behavior is
UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
A write of a Special INTID is ignored. See Special INTIDs on page 2-32, for more information.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
8-206 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-207
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified Group 1 interrupt.
Configurations
AArch64 System register ICC_EOIR1_EL1 performs the same function as AArch32 System
register ICC_EOIR1.
Attributes
ICC_EOIR1_EL1 is a 32-bit register.
Field descriptions
The ICC_EOIR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
8-208 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_EOIR1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
x 0 1 - WO WO WO
x 1 1 - ICV_EOIR1_EL1 WO WO
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_EOIR1_EL1 results
in an access to ICV_EOIR1_EL1.
A write to this register must correspond to the most recent valid read by this PE from an Interrupt Acknowledge
Register, and must correspond to the INTID that was read from ICC_IAR1_EL1, otherwise the system behavior is
UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
A write of a Special INTID is ignored. See Special INTIDs on page 2-32, for more information.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-209
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
8-210 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Indicates the highest priority pending Group 0 interrupt on the CPU interface.
Configurations
AArch64 System register ICC_HPPIR0_EL1 performs the same function as AArch32 System
register ICC_HPPIR0.
Attributes
ICC_HPPIR0_EL1 is a 32-bit register.
Field descriptions
The ICC_HPPIR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_HPPIR0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-211
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
0 x 1 - RO RO RO
1 x 1 - ICV_HPPIR0_EL1 RO RO
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_HPPIR0_EL1 results
in an access to ICV_HPPIR0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-212 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Indicates the highest priority pending Group 1 interrupt on the CPU interface.
Configurations
AArch64 System register ICC_HPPIR1_EL1 performs the same function as AArch32 System
register ICC_HPPIR1.
Attributes
ICC_HPPIR1_EL1 is a 32-bit register.
Field descriptions
The ICC_HPPIR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_HPPIR1_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-213
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 0 1 - RO RO RO
x 1 1 - ICV_HPPIR1_EL1 RO RO
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_HPPIR1_EL1 results
in an access to ICV_HPPIR1_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-214 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
The PE reads this register to obtain the INTID of the signaled Group 0 interrupt. This read acts as
an acknowledge for the interrupt.
Configurations
AArch64 System register ICC_IAR0_EL1 performs the same function as AArch32 System register
ICC_IAR0.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICC_IAR0_EL1 is a 32-bit register.
Field descriptions
The ICC_IAR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-215
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_IAR0_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
0 x 1 - RO RO RO
1 x 1 - ICV_IAR0_EL1 RO RO
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IAR0_EL1 results in
an access to ICV_IAR0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-216 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
The PE reads this register to obtain the INTID of the signaled Group 1 interrupt. This read acts as
an acknowledge for the interrupt.
Configurations
AArch64 System register ICC_IAR1_EL1 performs the same function as AArch32 System register
ICC_IAR1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICC_IAR1_EL1 is a 32-bit register.
Field descriptions
The ICC_IAR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-217
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_IAR1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 0 1 - RO RO RO
x 1 1 - ICV_IAR1_EL1 RO RO
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IAR1_EL1 results in
an access to ICV_IAR1_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-218 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether Group 0 interrupts are enabled or not.
Configurations
AArch64 System register ICC_IGRPEN0_EL1 is architecturally mapped to AArch32 System
register ICC_IGRPEN0.
Attributes
ICC_IGRPEN0_EL1 is a 32-bit register.
Field descriptions
The ICC_IGRPEN0_EL1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_IGRPEN0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-219
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
0 x 1 - RW RW RW
1 x 1 - ICV_IGRPEN0_EL1 RW RW
Note
When HCR_EL2.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IGRPEN0_EL1
results in an access to ICV_IGRPEN0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-220 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether Group 1 interrupts are enabled for the current Security state.
Configurations
AArch64 System register ICC_IGRPEN1_EL1(S) is architecturally mapped to AArch32 System
register ICC_IGRPEN1 (S).
AArch64 System register ICC_IGRPEN1_EL1(NS) is architecturally mapped to AArch32 System
register ICC_IGRPEN1 (NS).
Attributes
ICC_IGRPEN1_EL1 is a 32-bit register.
Field descriptions
The ICC_IGRPEN1_EL1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
This register can be written using MSR (register) with the following syntax:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-221
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to
ICV_IGRPEN1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
Instance
FMO IMO NS EL0 EL1 EL2 EL3
x x 0 - RW n/a RW ICC_IGRPEN1_EL1_s
x x 1 - n/a RW RW ICC_IGRPEN1_EL1_ns
x 0 1 - RW RW RW ICC_IGRPEN1_EL1_ns
x 1 1 - ICV_IGRPEN1_EL1 RW RW ICC_IGRPEN1_EL1_ns
Note
When HCR_EL2.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IGRPEN1_EL1
results in an access to ICV_IGRPEN1_EL1.
If EL3 is present and this register is accessed at EL3, the copy of this register appropriate to the current setting of
SCR_EL3.NS is accessed.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-222 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-223
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether Group 1 interrupts are enabled or not.
Configurations
AArch64 System register ICC_IGRPEN1_EL3 can be mapped to AArch32 System register
ICC_MGRPEN1, but this is not architecturally mandated.
Attributes
ICC_IGRPEN1_EL3 is a 32-bit register.
Field descriptions
The ICC_IGRPEN1_EL3 bit assignments are:
31 2 1 0
RES0
EnableGrp1S
EnableGrp1NS
Bits [31:2]
Reserved, RES0.
8-224 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a RW
x x 1 - - - RW
x x 1 - n/a - RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-225
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Provides an interrupt priority filter. Only interrupts with a higher priority than the value in this
register are signaled to the PE.
Writes to this register must be high performance and must ensure that no interrupt of lower priority
than the written value occurs after the write, without requiring an ISB or an exception boundary.
Configurations
AArch64 System register ICC_PMR_EL1 is architecturally mapped to AArch32 System register
ICC_PMR.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that writes to this register are self-synchronising. This
ensures that no interrupts below the written PMR value will be taken after a write to this register is
architecturally executed. See Observability of the effects of accesses to the GIC registers on
page 8-157, for more information.
Attributes
ICC_PMR_EL1 is a 32-bit register.
Field descriptions
The ICC_PMR_EL1 bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Implemented priority bits Possible priority field values Number of priority levels
8-226 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICV_PMR_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
x 1 1 - ICV_PMR_EL1 RW RW
1 x 1 - ICV_PMR_EL1 RW RW
0 0 1 - RW RW RW
ICC_PMR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} == {0, 0}.
Note
When HCR_EL2.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_PMR_EL1
results in an access to ICV_PMR_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-227
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
8-228 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Indicates the Running priority of the CPU interface.
Configurations
AArch64 System register ICC_RPR_EL1 performs the same function as AArch32 System register
ICC_RPR.
Attributes
ICC_RPR_EL1 is a 32-bit register.
Field descriptions
The ICC_RPR_EL1 bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Note
If 8 bits of priority are implemented the group priority is bits[7:1] of the priority.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICV_RPR_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-229
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 1 1 - ICV_RPR_EL1 RO RO
1 x 1 - ICV_RPR_EL1 RO RO
0 0 1 - RO RO RO
ICC_RPR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} == {0, 0}.
Note
When HCR_EL2.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_RPR_EL1
results in an access to ICV_RPR_EL1.
Software cannot determine the number of implemented priority bits from a read of this register.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-230 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Generates Secure Group 0 SGIs.
Configurations
AArch64 System register ICC_SGI0R_EL1 performs the same function as AArch32 System
instruction ICC_SGI0R.
Attributes
ICC_SGI0R_EL1 is a 64-bit register.
Field descriptions
The ICC_SGI0R_EL1 bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-231
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
This register allows software executing in a Secure state to generate Group 0 SGIs. It will also allow software
executing in a Non-secure state to generate Group 0 SGIs, if permitted by the settings of GICR_NSACR in the
Redistributor corresponding to the target PE.
8-232 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
When GICD_CTLR.DS==0, Non-secure writes do not generate an interrupt for a target PE if not permitted by the
GICR_NSACR register associated with the target PE. For more information see Use of control registers for SGI
forwarding on page 8-169.
Note
Accesses at EL3 are treated as Secure regardless of the value of SCR_EL3.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-233
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Generates Group 1 SGIs for the current Security state.
Configurations
AArch64 System register ICC_SGI1R_EL1 performs the same function as AArch32 System
register ICC_SGI1R.
Under certain conditions a write to ICC_SGI1R_EL1 can generate Group 0 interrupts, see
Table 8-14 on page 8-169.
Attributes
ICC_SGI1R_EL1 is a 64-bit register.
Field descriptions
The ICC_SGI1R_EL1 bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
8-234 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-235
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Note
Accesses at EL3 are treated as Secure regardless of the value of SCR_EL3.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
8-236 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL1.
Configurations
AArch64 System register ICC_SRE_EL1(S) is architecturally mapped to AArch32 System register
ICC_SRE (S).
AArch64 System register ICC_SRE_EL1(NS) is architecturally mapped to AArch32 System
register ICC_SRE (NS).
Attributes
ICC_SRE_EL1 is a 32-bit register.
Field descriptions
The ICC_SRE_EL1 bit assignments are:
31 3 2 1 0
RES0
SRE
DFB
DIB
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-237
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
If EL3 is implemented and GICD_CTLR.DS == 1, and EL2 is not implemented, this field is a
read-write alias of ICC_SRE_EL3.DFB.
If EL3 is not implemented or GICD_CTLR.DS == 1, and EL2 is implemented, this field is a
read-only alias of ICC_SRE_EL2.DFB.
In systems that do not support FIQ bypass, this field is RAO/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
If an implementation supports only a System register interface to the GIC CPU interface, this bit is
RAO/WI.
If EL3 is implemented and ICC_SRE_EL3.SRE==0 the Secure copy of this bit is RAZ/WI. If
{ICC_SRE_EL3.SRE is changed from zero to one, the Secure copy of this bit becomes UNKNOWN.
If EL2 is implemented and ICC_SRE_EL2.SRE==0 the Non-secure copy of this bit is RAZ/WI. If
ICC_SRE_EL2.SRE is changed from zero to one, the Non-secure copy of this bit becomes
UNKNOWN.
If EL3 is implemented and ICC_SRE_EL3.SRE==0 the Non-secure copy of this bit is RAZ/WI. If
ICC_SRE_EL3.SRE is changed from zero to one, the Non-secure copy of this bit becomes
UNKNOWN.
GICv3 implementations that do not require GICv2 compatibility might choose to make this bit
RAO/WI. The following options are supported:
• The Non-secure copy of ICC_SRE_EL1.SRE can be RAO/WI if ICC_SRE_EL2.SRE is also
RAO/WI. This means all Non-secure software, including VMs using only virtual interrupts,
must access the GIC using System registers.
• The Secure copy of ICC_SRE_EL1.SRE can be RAO/WI if ICC_SRE_EL3.SRE and
ICC_SRE_EL2.SRE are also RAO/WI. This means that all Secure software must access the
GIC using System registers and all Non-secure accesses to registers for physical interrupts
must use System registers.
Note
A VM using only virtual interrupts might still use memory-mapped access if the Non-secure copy
of ICC_SRE_EL1.SRE is not RAO/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
This register can be written using MSR (register) with the following syntax:
8-238 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
Instance
NS EL0 EL1 EL2 EL3
0 - RW n/a RW ICC_SRE_EL1_s
1 - RW RW RW ICC_SRE_EL1_ns
1 - n/a RW RW ICC_SRE_EL1_ns
Execution with ICC_SRE_EL1.SRE set to 0 might make some System registers UNKNOWN.
• When SCR_EL3.NS == 1:
— If ICC_SRE_EL2.Enable==0, and EL2 is implemented, Non-secure accesses to this register from EL1
are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-239
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL2.
Configurations
AArch64 System register ICC_SRE_EL2 is architecturally mapped to AArch32 System register
ICC_HSRE.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICC_SRE_EL2 is a 32-bit register.
Field descriptions
The ICC_SRE_EL2 bit assignments are:
31 4 3 2 1 0
RES0
SRE
DFB
DIB
Enable
Bits [31:4]
Reserved, RES0.
8-240 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-241
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
Execution with ICC_SRE_EL2.SRE set to 0 might make some System registers UNKNOWN.
8-242 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL3.
Configurations
AArch64 System register ICC_SRE_EL3 can be mapped to AArch32 System register ICC_MSRE,
but this is not architecturally mandated.
Attributes
ICC_SRE_EL3 is a 32-bit register.
Field descriptions
The ICC_SRE_EL3 bit assignments are:
31 4 3 2 1 0
RES0
SRE
DFB
DIB
Enable
Bits [31:4]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-243
ID072617 Non-Confidential
8 Programmers’ Model
8.2 AArch64 System register descriptions
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - - RW
1 - n/a - RW
8-244 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.2 AArch64 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-245
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICC_* and GICV_* memory-mapped registers.
The ICV_* registers are only accessible at Non-secure EL1. Whether an access encoding maps to an ICC_* register
or the equivalent ICV_* register is determined by HCR_EL2, see Chapter 5 Virtual Interrupt Handling and
Prioritization. The equivalent virtual interface memory-mapped registers are described in The GIC virtual CPU
interface register descriptions on page 8-614.
The encodings for the virtual registers are the same as for the physical registers, see Table 8-21 on page 8-177.
8-246 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Provides information about virtual Group 0 active priorities.
Configurations
AArch64 System register ICV_AP0R<n>_EL1 is architecturally mapped to AArch32 System
register ICV_AP0R<n>.
Attributes
ICV_AP0R<n>_EL1 is a 32-bit register.
Field descriptions
The ICV_AP0R<n>_EL1 bit assignments are:
31 0
IMPLEMENTATION DEFINED
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_AP0R<n>_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-247
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RW ICC_AP0R<n>_EL1 ICC_AP0R<n>_EL1
The ICV_AP0R<n>_EL1 registers are only accessible at Non-secure EL1 when HCR_EL2.FMO is set to 1.
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_AP0R<n>_EL1
results in an access to ICC_AP0R<n>_EL1.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 0 active priorities) might result in UNPREDICTABLE behavior of the virtual interrupt prioritization system,
causing:
• ICV_AP0R<n>_EL1.
• ICV_AP1R<n>_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-248 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Provides information about virtual Group 1 active priorities.
Configurations
AArch64 System register ICV_AP1R<n>_EL1 is architecturally mapped to AArch32 System
register ICV_AP1R<n>.
Attributes
ICV_AP1R<n>_EL1 is a 32-bit register.
Field descriptions
The ICV_AP1R<n>_EL1 bit assignments are:
31 0
IMPLEMENTATION DEFINED
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_AP1R<n>_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-249
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_AP1R<n>_EL1 ICC_AP1R<n>_EL1
The ICV_AP1R<n>_EL1 registers are only accessible at Non-secure EL1 when HCR_EL2.IMO == 1.
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_AP1R<n>_EL1
results in an access to ICC_AP1R<n>_EL1.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 1 active priorities) might result in UNPREDICTABLE behavior of the virtual interrupt prioritization system,
causing:
• ICV_AP0R<n>_EL1.
• ICV_AP1R<n>_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-250 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines virtual Group 0 interrupt preemption.
Configurations
AArch64 System register ICV_BPR0_EL1 is architecturally mapped to AArch32 System register
ICV_BPR0.
Attributes
ICV_BPR0_EL1 is a 32-bit register.
Field descriptions
The ICV_BPR0_EL1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
This register can be written using MSR (register) with the following syntax:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-251
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_BPR0_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RW ICC_BPR0_EL1 ICC_BPR0_EL1
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_BPR0_EL1 results
in an access to ICC_BPR0_EL1.
The minimum binary point value is derived from the number of implemented preemption bits, as shown in the
following table:
7 0
6 1
5 2
An attempt to program the binary point field to a value less than the minimum value sets the field to the minimum
value. On a reset, the binary point field is UNKNOWN.
8-252 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-253
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines virtual Group 1 interrupt preemption.
Configurations
AArch64 System register ICV_BPR1_EL1 is architecturally mapped to AArch32 System register
ICV_BPR1.
Attributes
ICV_BPR1_EL1 is a 32-bit register.
Field descriptions
The ICV_BPR1_EL1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
0 - - -
Writing 0 to this field will set this field to its reset value, which is IMPLEMENTATION DEFINED and
non-zero.
If ICV_CTLR_EL1.CBPR is set to 1, Non-secure EL1 reads return ICV_BPR0_EL1 + 1 saturated
to 0b111. Non-secure EL1 writes are ignored.
8-254 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_BPR1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_BPR1_EL1 ICC_BPR1_EL1
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_BPR1_EL1 results in
an access to ICC_BPR1_EL1.
The reset value is IMPLEMENTATION DEFINED, but is equal to the minimum value of ICV_BPR0_EL1 plus one.
An attempt to program the binary point field to a value less than the reset value sets the field to the reset value.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-255
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Controls aspects of the behavior of the GIC virtual CPU interface and provides information about
the features implemented.
Configurations
AArch64 System register ICV_CTLR_EL1 is architecturally mapped to AArch32 System register
ICV_CTLR.
Attributes
ICV_CTLR_EL1 is a 32-bit register.
Field descriptions
The ICV_CTLR_EL1 bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 2 1 0
RSS CBPR
RES0 EOImode
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bits [17:16]
Reserved, RES0.
8-256 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Note
This field always returns the number of priority bits implemented.
The division between group priority and subpriority is defined in the binary point registers
ICV_BPR0_EL1 and ICV_BPR1_EL1.
Bits [7:2]
Reserved, RES0.
This register can be written using MSR (register) with the following syntax:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-257
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_CTLR_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_CTLR_EL1 ICC_CTLR_EL1
1 x 1 - RW ICC_CTLR_EL1 ICC_CTLR_EL1
ICV_CTLR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} != {0, 0}.
Note
When HCR_EL2.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_CTLR_EL1
results in an access to ICC_CTLR_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-258 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
When interrupt priority drop is separated from interrupt deactivation, a write to this register
deactivates the specified virtual interrupt.
Configurations
AArch64 System register ICV_DIR_EL1 performs the same function as AArch32 System register
ICV_DIR.
Attributes
ICV_DIR_EL1 is a 32-bit register.
Field descriptions
The ICV_DIR_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
This encoding results in an access to ICV_DIR_EL1 at Non-secure EL1 in the following cases:
This encoding results in an access to ICC_DIR_EL1 at Non-secure EL1 in the following cases:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-259
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - WO ICC_DIR_EL1 ICC_DIR_EL1
1 x 1 - WO ICC_DIR_EL1 ICC_DIR_EL1
The ICV_DIR_EL1 register is only accessible at Non-secure EL1 in the following cases:
Note
At Non-secure EL1, the instruction encoding to access ICV_DIR_EL1 results in an access to ICC_DIR_EL1 when
HCR_EL2.{FMO, IMO} == {0, 0}.
When EOImode == 0, writes are ignored In systems supporting system error generation, an implementation might
generate an SEI.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TDIR==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
8-260 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified virtual Group 0 interrupt.
Configurations
AArch64 System register ICV_EOIR0_EL1 performs the same function as AArch32 System
register ICV_EOIR0.
Attributes
ICV_EOIR0_EL1 is a 32-bit register.
Field descriptions
The ICV_EOIR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_EOIR0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-261
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - WO ICC_EOIR0_EL1 ICC_EOIR0_EL1
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_EOIR0_EL1 results
in an access to ICC_EOIR0_EL1.
A write to this register must correspond to the most recent valid read by this vPE from a Virtual Interrupt
Acknowledge Register, and must correspond to the INTID that was read from ICV_IAR0_EL1, otherwise the
system behavior is UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
8-262 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified virtual Group 1 interrupt.
Configurations
AArch64 System register ICV_EOIR1_EL1 performs the same function as AArch32 System
register ICV_EOIR1.
Attributes
ICV_EOIR1_EL1 is a 32-bit register.
Field descriptions
The ICV_EOIR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_EOIR1_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-263
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - WO ICC_EOIR1_EL1 ICC_EOIR1_EL1
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_EOIR1_EL1 results
in an access to ICC_EOIR1_EL1.
A write to this register must correspond to the most recent valid read by this vPE from a Virtual Interrupt
Acknowledge Register, and must correspond to the INTID that was read from ICV_IAR1_EL1, otherwise the
system behavior is UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
8-264 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
8.3.9 ICV_HPPIR0_EL1, Interrupt Controller Virtual Highest Priority Pending Interrupt Register 0
The ICV_HPPIR0_EL1 characteristics are:
Purpose
Indicates the highest priority pending virtual Group 0 interrupt on the virtual CPU interface.
Configurations
AArch64 System register ICV_HPPIR0_EL1 performs the same function as AArch32 System
register ICV_HPPIR0.
Attributes
ICV_HPPIR0_EL1 is a 32-bit register.
Field descriptions
The ICV_HPPIR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_HPPIR0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-265
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RO ICC_HPPIR0_EL1 ICC_HPPIR0_EL1
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_HPPIR0_EL1 results
in an access to ICC_HPPIR0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-266 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
8.3.10 ICV_HPPIR1_EL1, Interrupt Controller Virtual Highest Priority Pending Interrupt Register 1
The ICV_HPPIR1_EL1 characteristics are:
Purpose
Indicates the highest priority pending virtual Group 1 interrupt on the virtual CPU interface.
Configurations
AArch64 System register ICV_HPPIR1_EL1 performs the same function as AArch32 System
register ICV_HPPIR1.
Attributes
ICV_HPPIR1_EL1 is a 32-bit register.
Field descriptions
The ICV_HPPIR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_HPPIR1_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-267
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_HPPIR1_EL1 ICC_HPPIR1_EL1
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_HPPIR1_EL1 results
in an access to ICC_HPPIR1_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-268 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
The PE reads this register to obtain the INTID of the signaled virtual Group 0 interrupt. This read
acts as an acknowledge for the interrupt.
Configurations
AArch64 System register ICV_IAR0_EL1 performs the same function as AArch32 System register
ICV_IAR0.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICV_IAR0_EL1 is a 32-bit register.
Field descriptions
The ICV_IAR0_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-269
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_IAR0_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RO ICC_IAR0_EL1 ICC_IAR0_EL1
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IAR0_EL1 results in
an access to ICC_IAR0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-270 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
The PE reads this register to obtain the INTID of the signaled virtual Group 1 interrupt. This read
acts as an acknowledge for the interrupt.
Configurations
AArch64 System register ICV_IAR1_EL1 performs the same function as AArch32 System register
ICV_IAR1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICV_IAR1_EL1 is a 32-bit register.
Field descriptions
The ICV_IAR1_EL1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-271
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_IAR1_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_IAR1_EL1 ICC_IAR1_EL1
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IAR1_EL1 results in
an access to ICC_IAR1_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-272 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Controls whether virtual Group 0 interrupts are enabled or not.
Configurations
AArch64 System register ICV_IGRPEN0_EL1 is architecturally mapped to AArch32 System
register ICV_IGRPEN0.
Attributes
ICV_IGRPEN0_EL1 is a 32-bit register.
Field descriptions
The ICV_IGRPEN0_EL1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_IGRPEN0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-273
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RW ICC_IGRPEN0_EL1 ICC_IGRPEN0_EL1
Note
When HCR_EL2.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IGRPEN0_EL1
results in an access to ICC_IGRPEN0_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-274 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Controls whether virtual Group 1 interrupts are enabled for the current Security state.
Configurations
AArch64 System register ICV_IGRPEN1_EL1 is architecturally mapped to AArch32 System
register ICV_IGRPEN1.
Attributes
ICV_IGRPEN1_EL1 is a 32-bit register.
Field descriptions
The ICV_IGRPEN1_EL1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to
ICC_IGRPEN1_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-275
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_IGRPEN1_EL1 ICC_IGRPEN1_EL1
Note
When HCR_EL2.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IGRPEN1_EL1
results in an access to ICC_IGRPEN1_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-276 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Provides a virtual interrupt priority filter. Only virtual interrupts with a higher priority than the value
in this register are signaled to the PE.
Configurations
AArch64 System register ICV_PMR_EL1 is architecturally mapped to AArch32 System register
ICV_PMR.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that writes to this register are self-synchronising. This
ensures that no interrupts below the written PMR value will be taken after a write to this register is
architecturally executed. See Observability of the effects of accesses to the GIC registers on
page 8-157, for more information.
Attributes
ICV_PMR_EL1 is a 32-bit register.
Field descriptions
The ICV_PMR_EL1 bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Implemented priority bits Possible priority field values Number of priority levels
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-277
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_PMR_EL1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_PMR_EL1 ICC_PMR_EL1
1 x 1 - RW ICC_PMR_EL1 ICC_PMR_EL1
ICV_PMR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} != {0, 0}.
Note
When HCR_EL2.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_PMR_EL1
results in an access to ICC_PMR_EL1.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-278 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Purpose
Indicates the Running priority of the virtual CPU interface.
Configurations
AArch64 System register ICV_RPR_EL1 performs the same function as AArch32 System register
ICV_RPR.
Attributes
ICV_RPR_EL1 is a 32-bit register.
Field descriptions
The ICV_RPR_EL1 bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Note
If 8 bits of priority are implemented the group priority is bits[7:1] of the priority.
This syntax is encoded with the following settings in the instruction encoding:
When HCR_EL2.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_RPR_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-279
ID072617 Non-Confidential
8 Programmers’ Model
8.3 AArch64 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_RPR_EL1 ICC_RPR_EL1
1 x 1 - RO ICC_RPR_EL1 ICC_RPR_EL1
ICV_RPR_EL1 is only accessible at Non-secure EL1 when HCR_EL2.{FMO, IMO} != {0, 0}.
Note
When HCR_EL2.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_RPR_EL1
results in an access to ICC_RPR_EL1.
If there are no active interrupts on the virtual CPU interface, or all active interrupts have undergone a priority drop,
the value returned is the Idle priority.
Software cannot determine the number of implemented priority bits from a read of this register.
• When SCR_EL3.NS == 1:
— If ICH_HCR_EL2.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-280 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICH_* memory-mapped registers. See The GIC virtual interface control register descriptions on page 8-647.
Table 8-22 shows the encodings for the AArch64 virtualization control System registers.
ICH_HCR_EL2 32 11 0 RW
ICH_VTR_EL2 32 1 RO
ICH_MISR_EL2 32 2 RO
ICH_EISR_EL2 32 3 RO
ICH_ELRSR_EL2 32 5 RO
ICH_VMCR_EL2 32 7 RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-281
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Provides information about Group 0 virtual active priorities for EL2.
Configurations
AArch64 System register ICH_AP0R<n>_EL2 is architecturally mapped to AArch32 System
register ICH_AP0R<n>.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_AP0R<n>_EL2 is a 32-bit register.
Field descriptions
The ICH_AP0R<n>_EL2 bit assignments are:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
8-282 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
If 6 bits of preemption are implemented (bits [7:2] of priority), then there are 64 preemption levels,
and:
• The active state of preemption levels 0 - 124 are held in ICH_AP0R0_EL2 in the bits
corresponding to 0:Priority[6:2].
• The active state of preemption levels 128 - 252 are held in ICH_AP0R1_EL2 in the bits
corresponding to 1:Priority[6:2].
If 7 bits of preemption are implemented (bits [7:1] of priority), then there are 128 preemption levels,
and:
• The active state of preemption levels 0 - 62 are held in ICH_AP0R0_EL2 in the bits
corresponding to 00:Priority[5:1].
• The active state of preemption levels 64 - 126 are held in ICH_AP0R1_EL2 in the bits
corresponding to 01:Priority[5:1].
• The active state of preemption levels 128 - 190 are held in ICH_AP0R2_EL2 in the bits
corresponding to 10:Priority[5:1].
• The active state of preemption levels 192 - 254 are held in ICH_AP0R3_EL2 in the bits
corresponding to 11:Priority[5:1].
Note
Having the bit corresponding to a priority set to 1 in both ICH_AP0R<n>_EL2 and
ICH_AP1R<n>_EL2 might result in UNPREDICTABLE behavior of the interrupt prioritization system
for virtual interrupts.
When this register has an architecturally-defined reset value, this field resets to 0.
Software must ensure that ICH_AP0R<n>_EL2 is 0 for legacy VMs otherwise behaviour is UNPREDICTABLE. For
more information about support for legacy VMs, see Support for legacy operation of VMs on page 10-715.
The active priorities for Group 0 and Group 1 interrupts for legacy VMs are held in ICH_AP1R<n>_EL2 and reads
and writes to GICV_APR access ICH_AP1R<n>_EL2. This means that ICH_AP0R<n>_EL2 is inaccessible to
legacy VMs.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-283
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a RW
x x 1 - - RW RW
x x 1 - n/a RW RW
Note
The number of bits of preemption is indicated by ICH_VTR_EL2.PREbits
Writing to these registers with any value other than the last read value of the register (or 0x00000000 for a newly set
up virtual machine) can result in UNPREDICTABLE behavior of the virtual interrupt prioritization system allowing
either:
• Interrupts that should not preempt execution to preempt execution at Non-secure EL1 or EL0.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICH_AP0R<n>_EL2.
• ICH_AP1R<n>_EL2.
Having the bit corresponding to a priority set in both ICH_AP0R<n>_EL2 and ICH_AP1R<n>_EL2 can result in
UNPREDICTABLE behavior of the interrupt prioritization system for virtual interrupts.
8-284 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Provides information about Group 1 virtual active priorities for EL2.
Configurations
AArch64 System register ICH_AP1R<n>_EL2 is architecturally mapped to AArch32 System
register ICH_AP1R<n>.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_AP1R<n>_EL2 is a 32-bit register.
Field descriptions
The ICH_AP1R<n>_EL2 bit assignments are:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-285
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
If 6 bits of preemption are implemented (bits [7:2] of priority), then there are 64 preemption levels,
and:
• The active state of preemption levels 0 - 124 are held in ICH_AP1R0_EL2 in the bits
corresponding to 0:Priority[6:2].
• The active state of preemption levels 128 - 252 are held in ICH_AP1R1_EL2 in the bits
corresponding to 1:Priority[6:2].
If 7 bits of preemption are implemented (bits [7:1] of priority), then there are 128 preemption levels,
and:
• The active state of preemption levels 0 - 62 are held in ICH_AP1R0_EL2 in the bits
corresponding to 00:Priority[5:1].
• The active state of preemption levels 64 - 126 are held in ICH_AP1R1_EL2 in the bits
corresponding to 01:Priority[5:1].
• The active state of preemption levels 128 - 190 are held in ICH_AP1R2_EL2 in the bits
corresponding to 10:Priority[5:1].
• The active state of preemption levels 192 - 254 are held in ICH_AP1R3_EL2 in the bits
corresponding to 11:Priority[5:1].
Note
Having the bit corresponding to a priority set to 1 in both ICH_AP0R<n>_EL2 and
ICH_AP1R<n>_EL2 might result in UNPREDICTABLE behavior of the interrupt prioritization system
for virtual interrupts.
When this register has an architecturally-defined reset value, this field resets to 0.
This register is always used for legacy VMs, regardless of the group of the virtual interrupt. Reads and writes to
GICV_APR<n> access ICH_AP1R<n>_EL2. For more information about support for legacy VMs, see Support for
legacy operation of VMs on page 10-715.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a RW
x x 1 - - RW RW
x x 1 - n/a RW RW
8-286 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Note
The number of bits of preemption is indicated by ICH_VTR_EL2.PREbits
Writing to these registers with any value other than the last read value of the register (or 0x00000000 for a newly set
up virtual machine) can result in UNPREDICTABLE behavior of the virtual interrupt prioritization system allowing
either:
• Interrupts that should not preempt execution to preempt execution at Non-secure EL1 or EL0.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICH_AP0R<n>_EL2.
• ICH_AP1R<n>_EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-287
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Indicates which List registers have outstanding EOI maintenance interrupts.
Configurations
AArch64 System register ICH_EISR_EL2 is architecturally mapped to AArch32 System register
ICH_EISR.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_EISR_EL2 is a 32-bit register.
Field descriptions
The ICH_EISR_EL2 bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
8-288 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RO
1 - - RO RO
1 - n/a RO RO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-289
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
These registers can locate a usable List register when the hypervisor is delivering an interrupt to a
VM.
Configurations
AArch64 System register ICH_ELRSR_EL2 is architecturally mapped to AArch32 System register
ICH_ELRSR.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_ELRSR_EL2 is a 32-bit register.
Field descriptions
The ICH_ELRSR_EL2 bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
8-290 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RO
1 - - RO RO
1 - n/a RO RO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-291
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Controls the environment for VMs.
Configurations
AArch64 System register ICH_HCR_EL2 is architecturally mapped to AArch32 System register
ICH_HCR.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_HCR_EL2 is a 32-bit register.
Field descriptions
The ICH_HCR_EL2 bit assignments are:
31 27 26 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EOIcount RES0 TC En
UIE
LRENPIE
NPIE
VGrp0EIE
VGrp0DIE
VGrp1EIE
VGrp1DIE
RES0
TALL0
TALL1
TSEI
TDIR
Bits [26:15]
Reserved, RES0.
8-292 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-293
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Bits [9:8]
Reserved, RES0.
8-294 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
1 Maintenance interrupt is asserted if none, or only one, of the List register entries is
marked as a valid interrupt.
When this register has an architecturally-defined reset value, this field resets to 0.
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - RW RW
1 - n/a RW RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-295
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
8-296 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Provides interrupt context information for the virtual CPU interface.
Configurations
AArch64 System register ICH_LR<n>_EL2[31:0] is architecturally mapped to AArch32 System
register ICH_LR<n>.
AArch64 System register ICH_LR<n>_EL2[63:32] is architecturally mapped to AArch32 System
register ICH_LRC<n>.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_LR<n>_EL2 is a 64-bit register.
Field descriptions
The ICH_LR<n>_EL2 bit assignments are:
63 62 61 60 59 56 55 48 47 42 41 32 31 0
HW
Group
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-297
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Bits [59:56]
Reserved, RES0.
Bits [47:42]
Reserved, RES0.
8-298 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
• ICH_LR<n>_EL2.State == 10.
• ICH_LR<n>_EL2.State == 11.
It is IMPLEMENTATION DEFINED how many bits are implemented, though at least 16 bits must be
implemented. Unimplemented bits are RES0. The number of implemented bits can be discovered
from ICH_VTR_EL2.IDbits.
Note
When a VM is using memory-mapped access to the GIC, software must ensure that the correct
source PE ID is provided in bits[12:10].
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - RW RW
1 - n/a RW RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-299
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Indicates which maintenance interrupts are asserted.
Configurations
AArch64 System register ICH_MISR_EL2 is architecturally mapped to AArch32 System register
ICH_MISR.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_MISR_EL2 is a 32-bit register.
Field descriptions
The ICH_MISR_EL2 bit assignments are:
31 8 7 6 5 4 3 2 1 0
RES0 NP U
EOI
LRENP
VGrp0E
VGrp0D
VGrp1E
VGrp1D
Bits [31:8]
Reserved, RES0.
8-300 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
U, bit [1]
Underflow.
0 Underflow maintenance interrupt not asserted.
1 Underflow maintenance interrupt asserted.
This maintenance interrupt is asserted when ICH_HCR_EL2.UIE==1 and zero or one of the List
register entries are marked as a valid interrupt, that is, if the corresponding ICH_LR<n>_EL2.State
bits do not equal 0x0.
When this register has an architecturally-defined reset value, this field resets to 0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-301
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RO
1 - - RO RO
1 - n/a RO RO
8-302 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Enables the hypervisor to save and restore the virtual machine view of the GIC state.
Configurations
AArch64 System register ICH_VMCR_EL2 is architecturally mapped to AArch32 System register
ICH_VMCR.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_VMCR_EL2 is a 32-bit register.
Field descriptions
The ICH_VMCR_EL2 bit assignments are:
31 24 23 21 20 18 17 10 9 8 5 4 3 2 1 0
VENG0
VENG1
VAckCtl
VFIQEn
VCBPR
VEOIM
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-303
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
The minimum value of this field is the minimum value of ICH_VMCR_EL2.VBPR0 plus one. An
attempt to program the binary point field to a value less than the minimum value sets the field to the
minimum value.
Bits [17:10]
Reserved, RES0.
Bits [8:5]
Reserved, RES0.
8-304 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
This register can be written using MSR (register) with the following syntax:
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - RW RW
1 - n/a RW RW
When EL2 is using System register access, EL1 using either System register or memory-mapped access must be
supported.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-305
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Purpose
Reports supported GIC virtualisartion features.
Configurations
AArch64 System register ICH_VTR_EL2 is architecturally mapped to AArch32 System register
ICH_VTR.
If EL2 is not implemented, all bits in this register are RES0 from EL3, except for nV4, which is RES1
from EL3.
Attributes
ICH_VTR_EL2 is a 32-bit register.
Field descriptions
The ICH_VTR_EL2 bit assignments are:
31 29 28 26 25 23 22 21 20 19 18 5 4 0
SEIS
A3V
nV4
TDS
8-306 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
Bits [18:5]
Reserved, RES0.
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RO
1 - - RO RO
1 - n/a RO RO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-307
ID072617 Non-Confidential
8 Programmers’ Model
8.4 AArch64 virtualization control System registers
8-308 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICC_* and GICV_* memory-mapped registers.
The ICC prefix is used by the System register access mechanism to select the physical or virtual interface System
registers according to the setting of HCR. The equivalent memory-mapped physical registers are described in The
GIC CPU interface register descriptions on page 8-574. The equivalent virtual interface memory-mapped registers
are described in The GIC virtual CPU interface register descriptions on page 8-614.
Table 8-23 shows the encodings for the AArch32 System registers.
ICC_PMR 32 0 4 6 0 RW
ICC_SGI1R 64 - 12 - WO
ICC_IAR0 32 12 8 0 RO
ICC_EOIR0 32 1 WO
ICC_HPPIR0 32 2 RO
ICC_BPR0 32 3 RW
ICC_AP0R<n> 32 4 RW
ICC_AP0R<n> 32 5 RW
ICC_AP0R<n> 32 6 RW
ICC_AP0R<n> 32 7 RW
ICC_AP1R<n> 32 9 0 RW
ICC_AP1R<n> 32 1 RW
ICC_AP1R<n> 32 2 RW
ICC_AP1R<n> 32 3 RW
ICC_DIR 32 11 1 WO
ICC_RPR 32 3 RO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-309
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
ICC_IAR1 32 0 12 12 0 RO
ICC_EOIR1 32 1 WO
ICC_HPPIR1 32 2 RO
ICC_BPR1 32 3 RW
ICC_CTLR 32 4 RW
ICC_SRE 32 5 RW
ICC_IGRPEN0 32 6 RW
ICC_IGRPEN1 32 7 RW
ICC_ASGI1R 64 1 - - WO
ICC_SGI0R 64 2 - - WO
ICC_HSRE 32 4 12 9 5 RW
ICC_MCTLR 32 6 12 12 4 RW
ICC_MSRE 32 5 RW
ICC_MGRPEN1 32 7 RW
8-310 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Provides information about Group 0 active priorities.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_AP0R<n> is architecturally mapped to AArch64 System register
ICC_AP0R<n>_EL1.
Attributes
ICC_AP0R<n> is a 32-bit register.
Field descriptions
The ICC_AP0R<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 0, <Rt>, c12, c8, <opc2> 000 1:n<1:0> 1100 1111 1000
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_AP0R<n>.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-311
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
0 x 1 - RW RW RW
1 x 1 - ICV_AP0R<n> RW RW
The ICC_AP0R<n> registers are only accessible at Non-secure EL1 when HCR.FMO is set to 0.
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_AP0R<n> results in an
access to ICV_AP0R<n>.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 0 active priorities) might result in UNPREDICTABLE behavior of the interrupt prioritization system, causing:
ICC_AP0R1 is only implemented in implementations that support 6 or more bits of preemption. ICC_AP0R2 and
ICC_AP0R3 are only implemented in implementations that support 7 bits of preemption. Unimplemented registers
are UNDEFINED.
Note
The number of bits of preemption is indicated by ICH_VTR.PREbits.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICC_AP0R<n>.
• Secure ICC_AP1R<n>.
• Non-secure ICC_AP1R<n>.
8-312 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-313
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Provides information about Group 1 active priorities.
Configurations
AArch32 System register ICC_AP1R<n>(S) is architecturally mapped to AArch64 System register
ICC_AP1R<n>_EL1 (S).
AArch32 System register ICC_AP1R<n>(NS) is architecturally mapped to AArch64 System
register ICC_AP1R<n>_EL1 (NS).
Attributes
ICC_AP1R<n> is a 32-bit register.
Field descriptions
The ICC_AP1R<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 0, <Rt>, c12, c9, <opc2> 000 0:n<1:0> 1100 1111 1001
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_AP1R<n>.
8-314 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
Configuration Instance
FMO IMO NS EL0 EL1 EL2 EL3
The ICC_AP1R<n> registers are only accessible at Non-secure EL1 when HCR.IMO is set to 0.
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_AP1R<n> results in an
access to ICV_AP1R<n>.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 1 active priorities) might result in UNPREDICTABLE behavior of the interrupt prioritization system, causing:
ICC_AP1R1 is only implemented in implementations that support 6 or more bits of preemption. ICC_AP1R2 and
ICC_AP1R3 are only implemented in implementations that support 7 bits of preemption. Unimplemented registers
are UNDEFINED.
Note
The number of bits of preemption is indicated by ICH_VTR.PREbits.
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICC_AP0R<n>.
• Secure ICC_AP1R<n>.
• Non-secure ICC_AP1R<n>.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-315
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-316 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
8.5.3 ICC_ASGI1R, Interrupt Controller Alias Software Generated Interrupt Group 1 Register
The ICC_ASGI1R characteristics are:
Purpose
Generates Group 1 SGIs for the Security state that is not the current Security state.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_ASGI1R performs the same function as AArch64 System register
ICC_ASGI1R_EL1.
Under certain conditions a write to ICC_ASGI1R can generate Group 0 interrupts, see Table 8-14
on page 8-169.
Attributes
ICC_ASGI1R is a 64-bit register.
Field descriptions
The ICC_ASGI1R bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-317
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
MCRR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
8-318 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
This register allows software executing in a Secure state to generate Non-secure Group 1 SGIs. It will also allow
software executing in a Non-secure state to generate Secure Group 1 SGIs, if permitted by the settings of
GICR_NSACR in the Redistributor corresponding to the target PE.
When GICD_CTLR.DS==0, Non-secure writes do not generate an interrupt for a target PE if not permitted by the
GICR_NSACR register associated with the target PE. For more information see Use of control registers for SGI
forwarding on page 8-169.
Note
Accesses from Secure Monitor mode are treated as Secure regardless of the value of SCR.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-319
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 0 interrupt preemption.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_BPR0 is architecturally mapped to AArch64 System register
ICC_BPR0_EL1.
Attributes
ICC_BPR0 is a 32-bit register.
Field descriptions
The ICC_BPR0 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
MRC <syntax>
This register can be written using MCR with the following syntax:
8-320 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_BPR0.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
0 x 1 - RW RW RW
1 x 1 - ICV_BPR0 RW RW
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_BPR0 results in an access
to ICV_BPR0.
The minimum binary point value is derived from the number of implemented priority bits. The number of priority
bits is IMPLEMENTATION DEFINED, and reported by ICC_CTLR.PRIbits and ICC_MCTLR.PRIbits.
An attempt to program the binary point field to a value less than the minimum value sets the field to the minimum
value. On a reset, the binary point field is set to the minimum supported value.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-321
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-322 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 1 interrupt preemption.
Configurations
AArch32 System register ICC_BPR1(S) is architecturally mapped to AArch64 System register
ICC_BPR1_EL1 (S).
AArch32 System register ICC_BPR1(NS) is architecturally mapped to AArch64 System register
ICC_BPR1_EL1 (NS).
In GIC implementations supporting two Security states, this register is Banked.
Attributes
ICC_BPR1 is a 32-bit register.
Field descriptions
The ICC_BPR1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
0 0 Non-secure EL1 and EL2 reads return ICC_BPR0 + 1 saturated to 0b111. Non-secure EL1 and EL2
writes are ignored.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-323
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
1 0 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 reads return ICC_BPR0 + 1
saturated to 0b111. Non-secure EL2 writes are ignored.
1 1 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 accesses trap to EL3.
If EL3 is not implemented and ICC_CTLR.CBPR is 1, Non-secure accesses to this register at EL1
or EL2 behave as follows, depending on the values of HCR.IMO:
HCR.IMO Behavior
0 Non-secure EL1 and EL2 reads return ICC_BPR0 + 1 saturated to 0b111. Non-secure EL1 and EL2 writes are
ignored.
1 Non-secure EL1 accesses affect virtual interrupts. Non-secure EL2 reads return ICC_BPR0 + 1 saturated to 0b111.
Non-secure EL2 writes are ignored.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_BPR1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
Configuration Instance
FMO IMO NS EL0 EL1 EL2 EL3
8-324 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Control Accessibility
Configuration Instance
FMO IMO NS EL0 EL1 EL2 EL3
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_BPR1 results in an access
to ICV_BPR1.
When the PE resets into an Exception level that is using AArch32, the reset value is equal to:
• For the Secure copy of the register, the minimum value of ICC_BPR0 plus one.
• For the Non-secure copy of the register, the minimum value of ICC_BPR0.
• If the PE is Secure this reset value is (minimum value of ICC_BPR0 plus one).
An attempt to program the binary point field to a value less than the reset value sets the field to the reset value.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-325
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-326 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls aspects of the behavior of the GIC CPU interface and provides information about the
features implemented.
Configurations
AArch32 System register ICC_CTLR(S) is architecturally mapped to AArch64 System register
ICC_CTLR_EL1 (S).
AArch32 System register ICC_CTLR(NS) is architecturally mapped to AArch64 System register
ICC_CTLR_EL1 (NS).
Attributes
ICC_CTLR is a 32-bit register.
Field descriptions
The ICC_CTLR bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 6 5 2 1 0
RSS CBPR
RES0 EOImode
PMHE
RES0
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bits [17:16]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-327
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Note
This field always returns the number of priority bits implemented, regardless of the Security state
of the access or the value of GICD_CTLR.DS.
The division between group priority and subpriority is defined in the binary point registers
ICC_BPR0 and ICC_BPR1.
If EL3 is implemented and using AArch32, physical accesses return the value from
ICC_MCTLR.PRIbits.
If EL3 is implemented and using AArch64, physical accesses return the value from
ICC_CTLR_EL3.PRIbits.
If EL3 is not implemented, physical accesses return the value from this field.
Bit [7]
Reserved, RES0.
8-328 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Bits [5:2]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-329
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICV_CTLR.
Accessibility
The register is accessible in software as follows:
Control Accessibility
Configuration Instance
FMO IMO NS EL0 EL1 EL2 EL3
ICC_CTLR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} == {0, 0}.
Note
When HCR.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_CTLR results in
an access to ICV_CTLR.
8-330 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-331
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
When interrupt priority drop is separated from interrupt deactivation, a write to this register
deactivates the specified interrupt.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_DIR performs the same function as AArch64 System register
ICC_DIR_EL1.
Attributes
ICC_DIR is a 32-bit register.
Field descriptions
The ICC_DIR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
This encoding results in an access to ICV_DIR at Non-secure EL1 in the following cases:
8-332 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
x 1 1 - ICV_DIR WO WO
1 x 1 - ICV_DIR WO WO
0 0 1 - WO WO WO
The ICC_DIR register is only accessible at Non-secure EL1 when HCR.{FMO, IMO} == {0, 0}.
Note
At Non-secure EL1, the instruction encoding to access ICC_DIR results in an access to ICV_DIR in the following
cases:
There are two cases when writing to ICC_DIR_EL1 that were UNPREDICTABLE for a corresponding GICv2 write to
GICC_DIR:
• When EOImode == 0. GICv3 implementations must ignore such writes. In systems supporting system error
generation, an implementation might generate an SEI.
• When EOImode == 1 but no EOI has been issued. The interrupt will be de-activated by the Distributor,
however the active priority in the CPU interface for the interrupt will remain set (because no EOI was issued).
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-333
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
8-334 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified Group 0 interrupt.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_EOIR0 performs the same function as AArch64 System register
ICC_EOIR0_EL1.
Attributes
ICC_EOIR0 is a 32-bit register.
Field descriptions
The ICC_EOIR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-335
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_EOIR0.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
0 x 1 - WO WO WO
1 x 1 - ICV_EOIR0 WO WO
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_EOIR0 results in an access
to ICV_EOIR0.
A write to this register must correspond to the most recent valid read by this PE from an Interrupt Acknowledge
Register, and must correspond to the INTID that was read from ICC_IAR0, otherwise the system behavior is
UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
A write of a Special INTID is ignored. See Special INTIDs on page 2-32, for more information.
8-336 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-337
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified Group 1 interrupt.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_EOIR1 performs the same function as AArch64 System register
ICC_EOIR1_EL1.
Attributes
ICC_EOIR1 is a 32-bit register.
Field descriptions
The ICC_EOIR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
8-338 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_EOIR1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - WO n/a WO
x x 1 - n/a WO WO
x 0 1 - WO WO WO
x 1 1 - ICV_EOIR1 WO WO
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_EOIR1 results in an access
to ICV_EOIR1.
A write to this register must correspond to the most recent valid read by this PE from an Interrupt Acknowledge
Register, and must correspond to the INTID that was read from ICC_IAR1, otherwise the system behavior is
UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
A write of a Special INTID is ignored. See Special INTIDs on page 2-32, for more information.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-339
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
8-340 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Indicates the highest priority pending Group 0 interrupt on the CPU interface.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_HPPIR0 performs the same function as AArch64 System register
ICC_HPPIR0_EL1.
Attributes
ICC_HPPIR0 is a 32-bit register.
Field descriptions
The ICC_HPPIR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_HPPIR0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-341
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
0 x 1 - RO RO RO
1 x 1 - ICV_HPPIR0 RO RO
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_HPPIR0 results in an access
to ICV_HPPIR0.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-342 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-343
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Indicates the highest priority pending Group 1 interrupt on the CPU interface.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_HPPIR1 performs the same function as AArch64 System register
ICC_HPPIR1_EL1.
Attributes
ICC_HPPIR1 is a 32-bit register.
Field descriptions
The ICC_HPPIR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_HPPIR1.
8-344 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 0 1 - RO RO RO
x 1 1 - ICV_HPPIR1 RO RO
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_HPPIR1 results in an access
to ICV_HPPIR1.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-345
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
8-346 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL2.
Configurations
AArch32 System register ICC_HSRE is architecturally mapped to AArch64 System register
ICC_SRE_EL2.
Attributes
ICC_HSRE is a 32-bit register.
Field descriptions
The ICC_HSRE bit assignments are:
31 4 3 2 1 0
RES0
SRE
DFB
DIB
Enable
Bits [31:4]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-347
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
8-348 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
The GIC architecture permits, but does not require, that registers can be shared between memory-mapped registers
and the equivalent System registers. This means that if the memory-mapped registers have been accessed while
ICC_HSRE.SRE==0, then the System registers might be modified. Therefore, software must only rely on the reset
values of the System registers if there has been no use of the GIC functionality while the memory-mapped registers
are in use. Otherwise, the System register values must be treated as UNKNOWN.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-349
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
The PE reads this register to obtain the INTID of the signaled Group 0 interrupt. This read acts as
an acknowledge for the interrupt.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_IAR0 performs the same function as AArch64 System register
ICC_IAR0_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICC_IAR0 is a 32-bit register.
Field descriptions
The ICC_IAR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
8-350 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_IAR0.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
0 x 1 - RO RO RO
1 x 1 - ICV_IAR0 RO RO
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IAR0 results in an access
to ICV_IAR0.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-351
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
8-352 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
The PE reads this register to obtain the INTID of the signaled Group 1 interrupt. This read acts as
an acknowledge for the interrupt.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_IAR1 performs the same function as AArch64 System register
ICC_IAR1_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICC_IAR1 is a 32-bit register.
Field descriptions
The ICC_IAR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-353
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_IAR1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 0 1 - RO RO RO
x 1 1 - ICV_IAR1 RO RO
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IAR1 results in an access
to ICV_IAR1.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
8-354 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-355
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether Group 0 interrupts are enabled or not.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_IGRPEN0 is architecturally mapped to AArch64 System register
ICC_IGRPEN0_EL1.
Attributes
ICC_IGRPEN0 is a 32-bit register.
Field descriptions
The ICC_IGRPEN0 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_IGRPEN0.
8-356 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
<syntax>
FMO IMO NS EL0 EL1 EL2 EL3
This table applies to all instructions that can access this register.
Note
When HCR.FMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IGRPEN0 results in an
access to ICV_IGRPEN0.
The lowest Exception level at which this register can be accessed is governed by the Exception level to which FIQ
is routed. This routing depends on SCR.FIQ, SCR.NS and HCR.FMO.
If an interrupt is pending within the CPU interface when Enable becomes 0, the interrupt must be released to allow
the Distributor to forward the interrupt to a different PE.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-357
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
8-358 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether Group 1 interrupts are enabled for the current Security state.
Configurations
AArch32 System register ICC_IGRPEN1(S) is architecturally mapped to AArch64 System register
ICC_IGRPEN1_EL1 (S).
AArch32 System register ICC_IGRPEN1(NS) is architecturally mapped to AArch64 System
register ICC_IGRPEN1_EL1 (NS).
Attributes
ICC_IGRPEN1 is a 32-bit register.
Field descriptions
The ICC_IGRPEN1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-359
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 1, execution of this encoding at Non-secure EL1 results in an access to ICV_IGRPEN1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
<syntax> Configuration Instance
FMO IMO NS EL0 EL1 EL2 EL3
8-360 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
This table applies to all instructions that can access this register.
Note
When HCR.IMO is set to 1, at Non-secure EL1, the instruction encoding to access ICC_IGRPEN1 results in an
access to ICV_IGRPEN1.
The lowest Exception level at which this register can be accessed is governed by the Exception level to which IRQ
is routed. This routing depends on SCR.IRQ, SCR.NS and HCR.IMO.
If an interrupt is pending within the CPU interface when Enable becomes 0, the interrupt must be released to allow
the Distributor to forward the interrupt to a different PE.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-361
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls aspects of the behavior of the GIC CPU interface and provides information about the
features implemented.
Configurations
This register is only accessible in Secure state.
AArch32 System register ICC_MCTLR can be mapped to AArch64 System register
ICC_CTLR_EL3, but this is not architecturally mandated.
Attributes
ICC_MCTLR is a 32-bit register.
Field descriptions
The ICC_MCTLR bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 6 5 4 3 2 1 0
RSS CBPR_EL1S
nDS CBPR_EL1NS
RES0 EOImode_EL3
EOImode_EL1S
EOImode_EL1NS
RM
PMHE
RES0
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bit [16]
Reserved, RES0.
8-362 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Note
This field always returns the number of priority bits implemented, regardless of the value of
SCR.NS or the value of GICD_CTLR.DS.
The division between group priority and subpriority is defined in the binary point registers
ICC_BPR0 and ICC_BPR1.
This field determines the minimum value of ICC_BPR0.
Bit [7]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-363
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
8-364 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
1 ICC_BPR0 determines the preemption group for Group 0 interrupts and Secure Group
1 interrupts. Secure EL1 accesses, or EL3 accesses when not in Monitor mode, to
ICC_BPR1 access the state of ICC_BPR0.
If EL3 is present, ICC_CTLR(S).CBPR is an alias of ICC_MCTLR.CBPR_EL1S.
This field resets to a value that is architecturally UNKNOWN.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - - RW
1 - n/a - RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-365
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether Group 1 interrupts are enabled or not.
Configurations
This register is only accessible in Secure state.
AArch32 System register ICC_MGRPEN1 can be mapped to AArch64 System register
ICC_IGRPEN1_EL3, but this is not architecturally mandated.
Attributes
ICC_MGRPEN1 is a 32-bit register.
Field descriptions
The ICC_MGRPEN1 bit assignments are:
31 2 1 0
RES0
EnableGrp1S
EnableGrp1NS
Bits [31:2]
Reserved, RES0.
8-366 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a RW
x x 1 - - - RW
x x 1 - n/a - RW
If an interrupt is pending within the CPU interface when an Enable bit becomes 0, the interrupt must be released to
allow the Distributor to forward the interrupt to a different PE.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-367
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL3.
Configurations
This register is only accessible in Secure state.
AArch32 System register ICC_MSRE can be mapped to AArch64 System register ICC_SRE_EL3,
but this is not architecturally mandated.
Attributes
ICC_MSRE is a 32-bit register.
Field descriptions
The ICC_MSRE bit assignments are:
31 4 3 2 1 0
RES0
SRE
DFB
DIB
Enable
Bits [31:4]
Reserved, RES0.
8-368 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a RW
1 - - - RW
1 - n/a - RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-369
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
The GIC architecture permits, but does not require, that registers can be shared between memory-mapped registers
and the equivalent System registers. This means that if the memory-mapped registers have been accessed while
ICC_MSRE.SRE==0, then the System registers might be modified. Therefore, software must only rely on the reset
values of the System registers if there has been no use of the GIC functionality while the memory-mapped registers
are in use. Otherwise, the System register values must be treated as UNKNOWN.
This register is only accessible when executing in Monitor mode.
8-370 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Provides an interrupt priority filter. Only interrupts with a higher priority than the value in this
register are signaled to the PE.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_PMR is architecturally mapped to AArch64 System register
ICC_PMR_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that writes to this register are self-synchronising. This
ensures that no interrupts below the written PMR value will be taken after a write to this register is
architecturally executed. See Observability of the effects of accesses to the GIC registers on
page 8-157, for more information.
Attributes
ICC_PMR is a 32-bit register.
Field descriptions
The ICC_PMR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Implemented priority bits Possible priority field values Number of priority levels
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-371
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICV_PMR.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RW n/a RW
x x 1 - n/a RW RW
x 1 1 - ICV_PMR RW RW
1 x 1 - ICV_PMR RW RW
0 0 1 - RW RW RW
ICC_PMR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} == {0, 0}.
Note
When HCR.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_PMR results in an
access to ICV_PMR.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-372 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-373
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Indicates the Running priority of the CPU interface.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_RPR performs the same function as AArch64 System register
ICC_RPR_EL1.
Attributes
ICC_RPR is a 32-bit register.
Field descriptions
The ICC_RPR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Note
If 8 bits of priority are implemented the group priority is bits[7:1] of the priority.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} != {0, 0}, execution of this encoding at Non-secure EL1 results in an access to ICV_RPR.
8-374 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - RO n/a RO
x x 1 - n/a RO RO
x 1 1 - ICV_RPR RO RO
1 x 1 - ICV_RPR RO RO
0 0 1 - RO RO RO
ICC_RPR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} == {0, 0}.
Note
When HCR.{FMO, IMO} != {0, 0}, at Non-secure EL1, the instruction encoding to access ICC_RPR results in an
access to ICV_RPR.
If there are no active interrupts on the CPU interface, or all active interrupts have undergone a priority drop, the
value returned is the Idle priority.
Software cannot determine the number of implemented priority bits from a read of this register.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-375
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
8-376 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Generates Secure Group 0 SGIs.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_SGI0R performs the same function as AArch64 System register
ICC_SGI0R_EL1.
Attributes
ICC_SGI0R is a 64-bit register.
Field descriptions
The ICC_SGI0R bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-377
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
MCRR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
This register allows software executing in a Secure state to generate Group 0 SGIs. It will also allow software
executing in a Non-secure state to generate Group 0 SGIs, if permitted by the settings of GICR_NSACR in the
Redistributor corresponding to the target PE.
8-378 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
When GICD_CTLR.DS==0, Non-secure writes do not generate an interrupt for a target PE if not permitted by the
GICR_NSACR register associated with the target PE. For more information see Use of control registers for SGI
forwarding on page 8-169.
Note
Accesses from Secure Monitor mode are treated as Secure regardless of the value of SCR.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-379
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Generates Group 1 SGIs for the current Security state.
Configurations
There is one instance of this register that is used in both Secure and Non-secure states.
AArch32 System register ICC_SGI1R performs the same function as AArch64 System register
ICC_SGI1R_EL1.
Under certain conditions a write to ICC_SGI1R can generate Group 0 interrupts, see Table 8-14 on
page 8-169.
Attributes
ICC_SGI1R is a 64-bit register.
Field descriptions
The ICC_SGI1R bit assignments are:
63 56 55 48 47 44 43 41 40 39 32 31 28 27 24 23 16 15 0
IRM
Bits [63:56]
Reserved, RES0.
Bits [43:41]
Reserved, RES0.
8-380 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Bits [31:28]
Reserved, RES0.
Note
This restricts a system to sending targeted SGIs to PEs with an affinity 0 number that is less than 16.
If SRE is set only for Secure EL3, software executing at EL3 might use the System register interface
to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge
Generate SGI packets received from CPU interface regardless of the ARE settings for a Security
state. However, the Distributor might discard such packets.
MCRR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - WO n/a WO
1 - WO WO WO
1 - n/a WO WO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-381
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
Note
Accesses from Secure Monitor mode are treated as Secure regardless of the value of SCR.NS.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
8-382 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Purpose
Controls whether the System register interface or the memory-mapped interface to the GIC CPU
interface is used for EL0 and EL1.
Configurations
AArch32 System register ICC_SRE(S) is architecturally mapped to AArch64 System register
ICC_SRE_EL1 (S).
AArch32 System register ICC_SRE(NS) is architecturally mapped to AArch64 System register
ICC_SRE_EL1 (NS).
Attributes
ICC_SRE is a 32-bit register.
Field descriptions
The ICC_SRE bit assignments are:
31 3 2 1 0
RES0
SRE
DFB
DIB
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-383
ID072617 Non-Confidential
8 Programmers’ Model
8.5 AArch32 System register descriptions
If EL3 is implemented and GICD_CTLR.DS == 1, and EL2 is not implemented, this field is a
read-write alias of ICC_MSRE.DFB.
If EL3 is not implemented or GICD_CTLR.DS == 1, and EL2 is implemented, this field is a
read-only alias of ICC_HSRE.DFB.
In systems that do not support FIQ bypass, this field is RAO/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
If an implementation supports only a System register interface to the GIC CPU interface, this bit is
RAO/WI.
If EL3 is implemented and using AArch64:
• When ICC_SRE_EL3.SRE==0 the Secure copy of this bit is RAZ/WI.
• When ICC_SRE_EL3.SRE==0 the Non-secure copy of this bit is RAZ/WI.
If EL3 is implemented and using AArch32:
• When ICC_MSRE.SRE==0 the Secure copy of this bit is RAZ/WI.
• When ICC_MSRE.SRE==0 the Non-secure copy of this bit is RAZ/WI.
If EL2 is implemented and using AArch64:
• When ICC_SRE_EL2.SRE==0 the Non-secure copy of this bit is RAZ/WI.
If EL2 is implemented and using AArch32:
• When ICC_HSRE.SRE==0 the Non-secure copy of this bit is RAZ/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
8-384 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.5 AArch32 System register descriptions
Accessibility
The register is accessible in software as follows:
Control Accessibility
Configuration Instance
NS EL0 EL1 EL2 EL3
The GIC architecture permits, but does not require, that registers can be shared between memory-mapped registers
and the equivalent System registers. This means that if the memory-mapped registers have been accessed while
ICC_SRE.SRE==0, then the System registers might be modified. Therefore, software must only rely on the reset
values of the System registers if there has been no use of the GIC functionality while the memory-mapped registers
are in use. Otherwise, the System register values must be treated as UNKNOWN.
• When SCR_EL3.NS == 1:
— If ICC_HSRE.Enable==0, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICC_SRE_EL2.Enable==0, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-385
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICC_* and GICV_* memory-mapped registers.
The ICV_* registers are only accessible at Non-secure EL1. Whether an access encoding maps to an ICC_* register
or the equivalent ICV_* register is determined by HCR, see Chapter 5 Virtual Interrupt Handling and
Prioritization. The equivalent virtual interface memory-mapped registers are described in The GIC virtual CPU
interface register descriptions on page 8-614.
The encodings for the virtual registers are the same as for the physical registers, see Table 8-23 on page 8-309.
8-386 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Provides information about virtual Group 0 active priorities.
Configurations
AArch32 System register ICV_AP0R<n> is architecturally mapped to AArch64 System register
ICV_AP0R<n>_EL1.
Attributes
ICV_AP0R<n> is a 32-bit register.
Field descriptions
The ICV_AP0R<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to an UNKNOWN value.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 0, <Rt>, c12, c8, <opc2> 000 1:n<1:0> 1100 1111 1000
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_AP0R<n>.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-387
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RW ICC_AP0R<n> ICC_AP0R<n>
The ICV_AP0R<n> registers are only accessible at Non-secure EL1 when HCR.FMO is set to 1.
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_AP0R<n> results in an
access to ICC_AP0R<n>.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 0 active priorities) might result in UNPREDICTABLE behavior of the virtual interrupt prioritization system,
causing:
ICV_AP0R1 is only implemented in implementations that support 6 or more bits of priority. ICV_AP0R2 and
ICV_AP0R3 are only implemented in implementations that support 7 bits of priority. Unimplemented registers are
UNDEFINED.
Writing to the active priority registers in any order other than the following order might result in UNPREDICTABLE
behavior of the interrupt prioritization system:
• ICV_AP0R<n>.
• ICV_AP1R<n>.
8-388 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-389
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Provides information about virtual Group 1 active priorities.
Configurations
AArch32 System register ICV_AP1R<n> is architecturally mapped to AArch64 System register
ICV_AP1R<n>_EL1.
Attributes
ICV_AP1R<n> is a 32-bit register.
Field descriptions
The ICV_AP1R<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to an UNKNOWN value.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural requirement that the value
0x00000000 is consistent with no interrupts being active.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 0, <Rt>, c12, c9, <opc2> 000 0:n<1:0> 1100 1111 1001
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_AP1R<n>.
8-390 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_AP1R<n> ICC_AP1R<n>
The ICV_AP1R<n> registers are only accessible at Non-secure EL1 when HCR.IMO == 1.
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_AP1R<n> results in an
access to ICC_AP1R<n>.
Writing to these registers with any value other than the last read value of the register (or 0x00000000 when there are
no Group 1 active priorities) might result in UNPREDICTABLE behavior of the virtual interrupt prioritization system,
causing:
ICV_AP1R1 is only implemented in implementations that support 6 or more bits of priority. ICV_AP1R2 and
ICV_AP1R3 are only implemented in implementations that support 7 bits of priority. Unimplemented registers are
UNDEFINED.
Writing to the active priority registers in any order other than the following order might result in UNPREDICTABLE
behavior of the interrupt prioritization system:
• ICV_AP0R<n>.
• ICV_AP1R<n>.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-391
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-392 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines virtual Group 0 interrupt preemption.
Configurations
AArch32 System register ICV_BPR0 is architecturally mapped to AArch64 System register
ICV_BPR0_EL1.
Attributes
ICV_BPR0 is a 32-bit register.
Field descriptions
The ICV_BPR0 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-393
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_BPR0.
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RW ICC_BPR0 ICC_BPR0
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_BPR0 results in an access
to ICC_BPR0.
The minimum binary point value is derived from the number of implemented priority bits. The number of priority
bits is IMPLEMENTATION DEFINED, and reported by ICV_CTLR.PRIbits.
An attempt to program the binary point field to a value less than the minimum value sets the field to the minimum
value. On a reset, the binary point field is set to the minimum supported value.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-394 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-395
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines virtual Group 1 interrupt preemption.
Configurations
AArch32 System register ICV_BPR1 is architecturally mapped to AArch64 System register
ICV_BPR1_EL1.
Attributes
ICV_BPR1 is a 32-bit register.
Field descriptions
The ICV_BPR1 bit assignments are:
31 3 2 0
RES0
BinaryPoint
Bits [31:3]
Reserved, RES0.
Binary point value Group priority field Subpriority field Field with binary point
0 - - -
Writing 0 to this field will set this field to its reset value, which is IMPLEMENTATION DEFINED and
non-zero.
If ICV_CTLR.CBPR is set to 1, Non-secure EL1 reads return ICV_BPR0 + 1 saturated to 0b111.
Non-secure EL1 writes are ignored.
8-396 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_BPR1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 - RW ICC_BPR1 ICC_BPR1
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_BPR1 results in an access
to ICC_BPR1.
The reset value is IMPLEMENTATION DEFINED, but is equal to the minimum value of ICV_BPR0 plus one.
An attempt to program the binary point field to a value less than the reset value sets the field to the reset value.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-397
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
8-398 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Controls aspects of the behavior of the GIC virtual CPU interface and provides information about
the features implemented.
Configurations
AArch32 System register ICV_CTLR is architecturally mapped to AArch64 System register
ICV_CTLR_EL1.
Attributes
ICV_CTLR is a 32-bit register.
Field descriptions
The ICV_CTLR bit assignments are:
31 19 18 17 16 15 14 13 11 10 8 7 2 1 0
RSS CBPR
RES0 EOImode
SEIS
A3V
Bits [31:19]
Reserved, RES0.
Bits [17:16]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-399
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Note
This field always returns the number of priority bits implemented.
The division between group priority and subpriority is defined in the binary point registers
ICV_BPR0 and ICV_BPR1.
Bits [7:2]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
8-400 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_CTLR.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_CTLR ICC_CTLR
1 x 1 - RW ICC_CTLR ICC_CTLR
ICV_CTLR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} != {0, 0}.
Note
When HCR.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_CTLR results in
an access to ICC_CTLR.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-401
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
When interrupt priority drop is separated from interrupt deactivation, a write to this register
deactivates the specified virtual interrupt.
Configurations
AArch32 System register ICV_DIR performs the same function as AArch64 System register
ICV_DIR_EL1.
Attributes
ICV_DIR is a 32-bit register.
Field descriptions
The ICV_DIR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
This encoding results in an access to ICV_DIR at Non-secure EL1 in the following cases:
This encoding results in an access to ICC_DIR at Non-secure EL1 in the following cases:
8-402 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - WO ICC_DIR ICC_DIR
1 x 1 - WO ICC_DIR ICC_DIR
The ICV_DIR register is only accessible at Non-secure EL1 in the following cases:
When EOImode == 0, writes are ignored In systems supporting system error generation, an implementation might
generate an SEI.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-403
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified virtual Group 0 interrupt.
Configurations
AArch32 System register ICV_EOIR0 performs the same function as AArch64 System register
ICV_EOIR0_EL1.
Attributes
ICV_EOIR0 is a 32-bit register.
Field descriptions
The ICV_EOIR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_EOIR0.
8-404 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - WO ICC_EOIR0 ICC_EOIR0
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_EOIR0 results in an access
to ICC_EOIR0.
A write to this register must correspond to the most recent valid read by this vPE from a Virtual Interrupt
Acknowledge Register, and must correspond to the INTID that was read from ICV_IAR0, otherwise the system
behavior is UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-405
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
A PE writes to this register to inform the CPU interface that it has completed the processing of the
specified virtual Group 1 interrupt.
Configurations
AArch32 System register ICV_EOIR1 performs the same function as AArch64 System register
ICV_EOIR1_EL1.
Attributes
ICV_EOIR1 is a 32-bit register.
Field descriptions
The ICV_EOIR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_EOIR1.
8-406 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - WO ICC_EOIR1 ICC_EOIR1
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_EOIR1 results in an access
to ICC_EOIR1.
A write to this register must correspond to the most recent valid read by this vPE from a Virtual Interrupt
Acknowledge Register, and must correspond to the INTID that was read from ICV_IAR1, otherwise the system
behavior is UNPREDICTABLE. A valid read is a read that returns a valid INTID that is not a special INTID.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure write accesses to this register from EL1 are trapped to
EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-407
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
8.6.9 ICV_HPPIR0, Interrupt Controller Virtual Highest Priority Pending Interrupt Register 0
The ICV_HPPIR0 characteristics are:
Purpose
Indicates the highest priority pending virtual Group 0 interrupt on the virtual CPU interface.
Configurations
AArch32 System register ICV_HPPIR0 performs the same function as AArch64 System register
ICV_HPPIR0_EL1.
Attributes
ICV_HPPIR0 is a 32-bit register.
Field descriptions
The ICV_HPPIR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_HPPIR0.
8-408 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RO ICC_HPPIR0 ICC_HPPIR0
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_HPPIR0 results in an
access to ICC_HPPIR0.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-409
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
8.6.10 ICV_HPPIR1, Interrupt Controller Virtual Highest Priority Pending Interrupt Register 1
The ICV_HPPIR1 characteristics are:
Purpose
Indicates the highest priority pending virtual Group 1 interrupt on the virtual CPU interface.
Configurations
AArch32 System register ICV_HPPIR1 performs the same function as AArch64 System register
ICV_HPPIR1_EL1.
Attributes
ICV_HPPIR1 is a 32-bit register.
Field descriptions
The ICV_HPPIR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_HPPIR1.
8-410 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_HPPIR1 ICC_HPPIR1
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_HPPIR1 results in an access
to ICC_HPPIR1.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-411
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
The PE reads this register to obtain the INTID of the signaled virtual Group 0 interrupt. This read
acts as an acknowledge for the interrupt.
Configurations
AArch32 System register ICV_IAR0 performs the same function as AArch64 System register
ICV_IAR0_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICV_IAR0 is a 32-bit register.
Field descriptions
The ICV_IAR0 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
8-412 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_IAR0.
Accessibility
The register is accessible in software as follows:
Control Accessibility
1 x 1 - RO ICC_IAR0 ICC_IAR0
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IAR0 results in an access
to ICC_IAR0.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-413
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
The PE reads this register to obtain the INTID of the signaled virtual Group 1 interrupt. This read
acts as an acknowledge for the interrupt.
Configurations
AArch32 System register ICV_IAR1 performs the same function as AArch64 System register
ICV_IAR1_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that reads of this register are self-synchronising when
interrupts are masked by the PE (that is when PSTATE.{I,F} == {0,0}). This ensures that the effect
of activating an interrupt on the signaling of interrupt exceptions is observed when a read of this
register is architecturally executed so that no spurious interrupt exception occurs if interrupts are
unmasked by an instruction immediately following the read. See Observability of the effects of
accesses to the GIC registers on page 8-157, for more information.
Attributes
ICV_IAR1 is a 32-bit register.
Field descriptions
The ICV_IAR1 bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
8-414 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_IAR1.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_IAR1 ICC_IAR1
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IAR1 results in an access
to ICC_IAR1.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-415
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Controls whether virtual Group 0 interrupts are enabled or not.
Configurations
AArch32 System register ICV_IGRPEN0 is architecturally mapped to AArch64 System register
ICV_IGRPEN0_EL1.
Attributes
ICV_IGRPEN0 is a 32-bit register.
Field descriptions
The ICV_IGRPEN0 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.FMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_IGRPEN0.
8-416 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
<syntax>
FMO IMO NS EL0 EL1 EL2 EL3
This table applies to all instructions that can access this register.
Note
When HCR.FMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IGRPEN0 results in an
access to ICC_IGRPEN0.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL0==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-417
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Controls whether virtual Group 1 interrupts are enabled for the current Security state.
Configurations
AArch32 System register ICV_IGRPEN1 is architecturally mapped to AArch64 System register
ICV_IGRPEN1_EL1.
Attributes
ICV_IGRPEN1 is a 32-bit register.
Field descriptions
The ICV_IGRPEN1 bit assignments are:
31 1 0
RES0
Enable
Bits [31:1]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.IMO is set to 0, execution of this encoding at Non-secure EL1 results in an access to ICC_IGRPEN1.
8-418 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
<syntax>
FMO IMO NS EL0 EL1 EL2 EL3
This table applies to all instructions that can access this register.
Note
When HCR.IMO is set to 0, at Non-secure EL1, the instruction encoding to access ICV_IGRPEN1 results in an
access to ICC_IGRPEN1.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TALL1==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-419
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Provides a virtual interrupt priority filter. Only virtual interrupts with a higher priority than the value
in this register are signaled to the PE.
Configurations
AArch32 System register ICV_PMR is architecturally mapped to AArch64 System register
ICV_PMR_EL1.
To allow software to ensure appropriate observability of actions initiated by GIC register accesses,
the PE and CPU interface logic must ensure that writes to this register are self-synchronising. This
ensures that no interrupts below the written PMR value will be taken after a write to this register is
architecturally executed. See Observability of the effects of accesses to the GIC registers on
page 8-157, for more information.
Attributes
ICV_PMR is a 32-bit register.
Field descriptions
The ICV_PMR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Implemented priority bits Possible priority field values Number of priority levels
MRC <syntax>
8-420 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_PMR.
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RW ICC_PMR ICC_PMR
1 x 1 - RW ICC_PMR ICC_PMR
ICV_PMR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} != {0, 0}.
Note
When HCR.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_PMR results in an
access to ICC_PMR.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-421
ID072617 Non-Confidential
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Purpose
Indicates the Running priority of the virtual CPU interface.
Configurations
AArch32 System register ICV_RPR performs the same function as AArch64 System register
ICV_RPR_EL1.
Attributes
ICV_RPR is a 32-bit register.
Field descriptions
The ICV_RPR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
Note
If 8 bits of priority are implemented the group priority is bits[7:1] of the priority.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
When HCR.{FMO, IMO} == {0, 0}, execution of this encoding at Non-secure EL1 results in an access to
ICC_RPR.
8-422 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.6 AArch32 System register descriptions of the virtual registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
x 1 1 - RO ICC_RPR ICC_RPR
1 x 1 - RO ICC_RPR ICC_RPR
ICV_RPR is only accessible at Non-secure EL1 when HCR.{FMO, IMO} != {0, 0}.
Note
When HCR.{FMO, IMO} == {0, 0}, at Non-secure EL1, the instruction encoding to access ICV_RPR results in an
access to ICC_RPR.
If there are no active interrupts on the virtual CPU interface, or all active interrupts have undergone a priority drop,
the value returned is the Idle priority.
Software cannot determine the number of implemented priority bits from a read of this register.
• When SCR_EL3.NS == 1:
— If ICH_HCR.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
— If ICH_HCR_EL2.TC==1, Non-secure read accesses to this register from EL1 are trapped to EL2.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-423
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Unless otherwise stated, the bit assignments for the GIC System registers are the same as those for the equivalent
GICH_* memory-mapped registers, see The GIC virtual interface control register descriptions on page 8-647.
Table 8-24 shows the encodings for the AArch 32 virtualization control System registers.
Table 8-24 Encodings for the AArch32 virtualization control System registers
ICH_AP0R<n> 32 4 12 8 0 RW
ICH_AP0R<n> 32 1 RW
ICH_AP0R<n> 32 2 RW
ICH_AP0R<n> 32 3 RW
ICH_AP1R<n> 32 9 0 RW
ICH_AP1R<n> 32 1 RW
ICH_AP1R<n> 32 2 RW
ICH_AP1R<n> 32 3 RW
ICH_HCR 32 11 0 RW
ICH_VTR 32 1 RO
ICH_MISR 32 2 RO
ICH_EISR 32 3 RO
ICH_ELRSR 32 5 RO
ICH_VMCR 32 7 RW
8-424 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Provides information about Group 0 active priorities for EL2.
Configurations
AArch32 System register ICH_AP0R<n> is architecturally mapped to AArch64 System register
ICH_AP0R<n>_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_AP0R<n> is a 32-bit register.
Field descriptions
The ICH_AP0R<n> bit assignments are:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-425
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
• The active state of preemption levels 128 - 252 are held in ICH_AP0R1 in the bits
corresponding to 1:Priority[6:2].
If 7 bits of preemption are implemented (bits [7:1] of priority), then there are 128 preemption levels,
and:
• The active state of preemption levels 0 - 62 are held in ICH_AP0R0 in the bits corresponding
to 00:Priority[5:1].
• The active state of preemption levels 64 - 126 are held in ICH_AP0R1 in the bits
corresponding to 01:Priority[5:1].
• The active state of preemption levels 128 - 190 are held in ICH_AP0R2 in the bits
corresponding to 10:Priority[5:1].
• The active state of preemption levels 192 - 254 are held in ICH_AP0R3 in the bits
corresponding to 11:Priority[5:1].
Note
Having the bit corresponding to a priority set to 1 in both ICH_AP0R<n> and ICH_AP1R<n> might
result in UNPREDICTABLE behavior of the interrupt prioritization system for virtual interrupts.
When this register has an architecturally-defined reset value, this field resets to 0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 4, <Rt>, c12, c8, <opc2> 100 0:n<1:0> 1100 1111 1000
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a -
x x 1 - - RW RW
x x 1 - n/a RW RW
ICH_AP0R1 is only implemented in implementations that support 6 or more bits of preemption. ICH_AP0R2 and
ICH_AP0R3 are only implemented in implementations that support 7 bits of preemption. Unimplemented registers
are UNDEFINED.
Note
The number of bits of preemption is indicated by ICH_VTR.PREbits.
8-426 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICH_AP0R<n>.
• ICH_AP1R<n>.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-427
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Provides information about Group 1 active priorities for EL2.
Configurations
AArch32 System register ICH_AP1R<n> is architecturally mapped to AArch64 System register
ICH_AP1R<n>_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_AP1R<n> is a 32-bit register.
Field descriptions
The ICH_AP1R<n> bit assignments are:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
8-428 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
• The active state of preemption levels 128 - 252 are held in ICH_AP1R1 in the bits
corresponding to 1:Priority[6:2].
If 7 bits of preemption are implemented (bits [7:1] of priority), then there are 128 preemption levels,
and:
• The active state of preemption levels 0 - 62 are held in ICH_AP1R0 in the bits corresponding
to 00:Priority[5:1].
• The active state of preemption levels 64 - 126 are held in ICH_AP1R1 in the bits
corresponding to 01:Priority[5:1].
• The active state of preemption levels 128 - 190 are held in ICH_AP1R2 in the bits
corresponding to 10:Priority[5:1].
• The active state of preemption levels 192 - 254 are held in ICH_AP1R3 in the bits
corresponding to 11:Priority[5:1].
Note
Having the bit corresponding to a priority set to 1 in both ICH_AP0R<n> and ICH_AP1R<n> might
result in UNPREDICTABLE behavior of the interrupt prioritization system for virtual interrupts.
When this register has an architecturally-defined reset value, this field resets to 0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
p15, 4, <Rt>, c12, c9, <opc2> 100 0:n<1:0> 1100 1111 1001
Accessibility
The register is accessible in software as follows:
Control Accessibility
x x 0 - - n/a -
x x 1 - - RW RW
x x 1 - n/a RW RW
ICH_AP1R1 is only implemented in implementations that support 6 or more bits of preemption. ICH_AP1R2 and
ICH_AP1R3 are only implemented in implementations that support 7 bits of preemption. Unimplemented registers
are UNDEFINED.
Note
The number of bits of preemption is indicated by ICH_VTR.PREbits
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-429
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Writing to the active priority registers in any order other than the following order will result in UNPREDICTABLE
behavior:
• ICH_AP0R<n>.
• ICH_AP1R<n>.
8-430 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Indicates which List registers have outstanding EOI maintenance interrupts.
Configurations
AArch32 System register ICH_EISR is architecturally mapped to AArch64 System register
ICH_EISR_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_EISR is a 32-bit register.
Field descriptions
The ICH_EISR bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-431
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RO RO
1 - n/a RO RO
8-432 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Indicates which List registers contain valid interrupts.
Configurations
AArch32 System register ICH_ELRSR is architecturally mapped to AArch64 System register
ICH_ELRSR_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_ELRSR is a 32-bit register.
Field descriptions
The ICH_ELRSR bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-433
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RO RO
1 - n/a RO RO
8-434 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Controls the environment for VMs.
Configurations
AArch32 System register ICH_HCR is architecturally mapped to AArch64 System register
ICH_HCR_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_HCR is a 32-bit register.
Field descriptions
The ICH_HCR bit assignments are:
31 27 26 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EOIcount RES0 TC En
UIE
LRENPIE
NPIE
VGrp0EIE
VGrp0DIE
VGrp1EIE
VGrp1DIE
RES0
TALL0
TALL1
TSEI
TDIR
Bits [26:15]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-435
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Bits [9:8]
Reserved, RES0.
8-436 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-437
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
8-438 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-439
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Provides interrupt context information for the virtual CPU interface.
Configurations
AArch32 System register ICH_LR<n> is architecturally mapped to AArch64 System register
ICH_LR<n>_EL2[31:0].
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_LR<n> is a 32-bit register.
Field descriptions
The ICH_LR<n> bit assignments are:
31 0
vINTID
Behavior is UNPREDICTABLE if two or more List Registers specify the same vINTID when:
• ICH_LRC<n>.State == 01.
• ICH_LRC<n>.State == 10.
• ICH_LRC<n>.State == 11.
It is IMPLEMENTATION DEFINED how many bits are implemented, though at least 16 bits must be
implemented. Unimplemented bits are RES0. The number of implemented bits can be discovered
from ICH_VTR.IDbits.
Note
When a VM is using memory-mapped access to the GIC, software must ensure that the correct
source PE ID is provided in bits[12:10].
When this register has an architecturally-defined reset value, this field resets to an UNKNOWN value.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
8-440 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
This syntax is encoded with the following settings in the instruction encoding:
p15, 4, <Rt>, c12, <CRm>, <opc2> 100 n<2:0> 1100 1111 110:n<3>
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-441
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Provides interrupt context information for the virtual CPU interface.
Configurations
AArch32 System register ICH_LRC<n> is architecturally mapped to AArch64 System register
ICH_LR<n>_EL2[63:32].
Attributes
ICH_LRC<n> is a 32-bit register.
Field descriptions
The ICH_LRC<n> bit assignments are:
31 30 29 28 27 24 23 16 15 10 9 0
HW
Group
8-442 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Bits [27:24]
Reserved, RES0.
Bits [15:10]
Reserved, RES0.
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-443
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
This syntax is encoded with the following settings in the instruction encoding:
p15, 4, <Rt>, c12, <CRm>, <opc2> 100 n<2:0> 1100 1111 111:n<3>
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
8-444 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Indicates which maintenance interrupts are asserted.
Configurations
AArch32 System register ICH_MISR is architecturally mapped to AArch64 System register
ICH_MISR_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_MISR is a 32-bit register.
Field descriptions
The ICH_MISR bit assignments are:
31 8 7 6 5 4 3 2 1 0
RES0 NP U
EOI
LRENP
VGrp0E
VGrp0D
VGrp1E
VGrp1D
Bits [31:8]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-445
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
U, bit [1]
Underflow.
0 Underflow maintenance interrupt not asserted.
1 Underflow maintenance interrupt asserted.
This maintenance interrupt is asserted when ICH_HCR.UIE==1 and zero or one of the List register
entries are marked as a valid interrupt, that is, if the corresponding ICH_LRC<n>.State bits do not
equal 0x0.
When this register has an architecturally-defined reset value, this field resets to 0.
MRC <syntax>
8-446 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RO RO
1 - n/a RO RO
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-447
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Enables the hypervisor to save and restore the virtual machine view of the GIC state.
Configurations
AArch32 System register ICH_VMCR is architecturally mapped to AArch64 System register
ICH_VMCR_EL2.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
ICH_VMCR is a 32-bit register.
Field descriptions
The ICH_VMCR bit assignments are:
31 24 23 21 20 18 17 10 9 8 5 4 3 2 1 0
VENG0
VENG1
VAckCtl
VFIQEn
VCBPR
VEOIM
Bits [17:10]
Reserved, RES0.
8-448 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Bits [8:5]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-449
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
MRC <syntax>
This register can be written using MCR with the following syntax:
MCR <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RW RW
1 - n/a RW RW
When EL2 is using System register access, EL1 using either System register or memory-mapped access must be
supported.
8-450 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Purpose
Reports supported GIC virtualisartion features.
Configurations
AArch32 System register ICH_VTR is architecturally mapped to AArch64 System register
ICH_VTR_EL2.
If EL2 is not implemented, all bits in this register are RES0 from EL3, except for nV4, which is RES1
from EL3.
Attributes
ICH_VTR is a 32-bit register.
Field descriptions
The ICH_VTR bit assignments are:
31 29 28 26 25 23 22 21 20 19 18 5 4 0
SEIS
A3V
nV4
TDS
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-451
ID072617 Non-Confidential
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
Bits [18:5]
Reserved, RES0.
MRC <syntax>
This syntax is encoded with the following settings in the instruction encoding:
Accessibility
The register is accessible in software as follows:
Control Accessibility
0 - - n/a -
1 - - RO RO
1 - n/a RO RO
8-452 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.7 AArch32 virtualization control System registers
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-453
ID072617 Non-Confidential
8 Programmers’ Model
8.8 The GIC Distributor register map
0x000C - - - Reserved
0x0014-0x001C - - - Reserved
0x0044 - - - Reserved
0x004C - - - Reserved
0x0054 - - - Reserved
0x005C-0x007C - - - Reserved
8-454 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.8 The GIC Distributor register map
0x0F30-0x60FC - - - Reserved
0x7FE0-0xBFFC - - - Reserved
A Distributor might optionally provide an IMPLEMENTATION DEFINED set of aliases for message-based interrupt
requests.
0x0000-0x003C - - - Reserved
0x044 - - - Reserved
0x004C - - - Reserved
0x0054 - - - Reserved
0x005C - - - Reserved
0x0060-0xFFFC - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-455
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
8-456 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Removes the pending state from a valid SPI if permitted by the Security state of the access and the
GICD_NSACR<n> value for that SPI.
A write to this register changes the state of a pending SPI to inactive, and the state of an active and
pending SPI to active.
Usage constraints
This register is accessible as follows:
WO WO WO
Note
A Secure access to this register can clear the pending state of any valid SPI.
Configurations
If GICD_TYPER.MBIS == 0, this register is reserved.
When GICD_CTLR.DS==1, this register provides functionality for all SPIs.
Attributes
GICD_CLRSPI_NSR is a 32-bit register.
Field descriptions
The GICD_CLRSPI_NSR bit assignments are:
31 10 9 0
RES0 INTID
Bits [31:10]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-457
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
The function of this register depends on whether the targeted SPI is configured to be an edge-triggered or
level-sensitive interrupt:
• For an edge-triggered interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will stop being pending on activation, or if the pending state is removed by a write
to GICD_CLRSPI_NSR, GICD_CLRSPI_SR, or GICD_ICPENDR<n>.
• For a level-sensitive interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will remain pending until it is deasserted by a write to GICD_CLRSPI_NSR or
GICD_CLRSPI_SR. If the interrupt is activated between having the pending state added and being
deactivated, then the interrupt will be active and pending.
Component Offset
8-458 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Removes the pending state from a valid SPI.
A write to this register changes the state of a pending SPI to inactive, and the state of an active and
pending SPI to active.
Usage constraints
This register is accessible as follows:
WI WO WI
Configurations
If GICD_TYPER.MBIS == 0, this register is reserved.
When GICD_CTLR.DS==1, this register is WI.
Attributes
GICD_CLRSPI_SR is a 32-bit register.
Field descriptions
The GICD_CLRSPI_SR bit assignments are:
31 10 9 0
RES0 INTID
Bits [31:10]
Reserved, RES0.
The function of this register depends on whether the targeted SPI is configured to be an edge-triggered or
level-sensitive interrupt:
• For an edge-triggered interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will stop being pending on activation, or if the pending state is removed by a write
to GICD_CLRSPI_NSR, GICD_CLRSPI_SR, or GICD_ICPENDR<n>.
• For a level-sensitive interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will remain pending until it is deasserted by a write to GICD_CLRSPI_NSR or
GICD_CLRSPI_SR. If the interrupt is activated between having the pending state added and being
deactivated, then the interrupt will be active and pending.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-459
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
8-460 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Removes the pending state from an SGI.
A write to this register changes the state of a pending SGI to inactive, and the state of an active and
pending SGI to active.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used only when affinity routing is not enabled. When affinity routing is enabled,
this register is RES0. An implementation is permitted to make the register RAZ/WI in this case.
A register bit that corresponds to an unimplemented SGI is RAZ/WI.
These registers are byte-accessible.
If the GIC implementation supports two Security states:
• A register bit that corresponds to a Group 0 interrupt is RAZ/WI to Non-secure accesses.
• Register bits corresponding to unimplemented PEs are RAZ/WI.
Configurations
Some or all RW fields of this register have defined reset values.
Four SGI clear-pending registers are implemented. Each register contains eight clear-pending bits
for each of four SGIs, for a total of 16 possible SGIs.
In multiprocessor implementations, each PE has a copy of these registers.
Attributes
GICD_CPENDSGIR<n> is a 32-bit register.
Field descriptions
The GICD_CPENDSGIR<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-461
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
When this register has an architecturally-defined reset value, this field resets to 0.
For SGI ID m, generated by processing element C writing to the corresponding GICD_SGIR field, where DIV and
MOD are the integer division and modulo operations:
• The offset of the required field within the register GICD_CPENDSGIR<n> is given by m MOD 4.
Component Offset
8-462 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Enables interrupts and affinity routing.
Usage constraints
This register is accessible as follows:
RW RW RW
Note
This might have no effect on the forwarded interrupt if it has already been activated.
When a write changes the value of ARE for a Security state or the value of the DS bit, the format
used for interpreting the remaining bits provided in the write data is the format that applied before
the write takes effect.
Configurations
Some or all RW fields of this register have defined reset values.
The format of this register depends on the Security state of the access and the number of Security
states supported, which is specified by GICD_CTLR.DS.
Attributes
GICD_CTLR is a 32-bit register.
Field descriptions
The GICD_CTLR bit assignments are:
31 30 8 7 6 5 4 3 2 1 0
RES0
RWP EnableGrp0
EnableGrp1NS
EnableGrp1S
RES0
ARE_S
ARE_NS
DS
E1NWF
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-463
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Bits [30:8]
Reserved, RES0.
8-464 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Bit [3]
Reserved, RES0.
Note
This field also controls whether LPIs are forwarded to the PE.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-465
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
31 30 5 4 3 2 1 0
RES0
RWP EnableGrp1
EnableGrp1A
RES0
ARE_NS
Bits [30:5]
Reserved, RES0.
Bits [3:2]
Reserved, RES0.
31 30 8 7 6 5 4 3 2 1 0
RES0
RWP EnableGrp0
EnableGrp1
RES0
ARE
RES0
DS
E1NWF
8-466 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Bits [30:8]
Reserved, RES0.
Bit [5]
Reserved, RES0.
Bits [3:2]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-467
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
8-468 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Deactivates the corresponding interrupt. These registers are used when saving and restoring GIC
state.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is enabled for the Security state of an interrupt, the bits corresponding to SGIs
and PPIs in that Security state are RAZ/WI, and equivalent functionality for SGIs and PPIs is
provided by GICR_ICACTIVER0.
Bits corresponding to unimplemented interrupts are RAZ/WI.
If GICD_CTLR.DS==0, unless the GICD_NSACR<n> registers permit Non-secure software to
control Group 0 and Secure Group 1 interrupts, any bits that correspond to Group 0 or Secure Group
1 interrupts are accessible only by Secure accesses and are RAZ/WI to Non-secure accesses.
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ICACTIVER<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ICACTIVER0 is Banked for each connected PE with GICR_TYPER.Processor_Number <
8.
Accessing GICD_ICACTIVER0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ICACTIVER<n> is a 32-bit register.
Field descriptions
The GICD_ICACTIVER<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-469
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
• The bit number of the required group modifier bit in this register is m MOD 32.
Component Offset
8-470 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Disables forwarding of the corresponding interrupt to the CPU interfaces.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ICENABLER<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ICENABLER0 is Banked for each connected PE with GICR_TYPER.Processor_Number <
8.
Accessing GICD_ICENABLER0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ICENABLER<n> is a 32-bit register.
Field descriptions
The GICD_ICENABLER<n> bit assignments are:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-471
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
31 0
• The bit number of the required group modifier bit in this register is m MOD 32.
Note
Writing a 1 to a GICD_ICENABLER<n> bit only disables the forwarding of the corresponding interrupt from the
Distributor to any CPU interface. It does not prevent the interrupt from changing state, for example becoming
pending or active and pending if it is already active.
Component Offset
8-472 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Determines whether the corresponding interrupt is edge-triggered or level-sensitive.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If the GIC implementation supports two
Security states, these registers are Common.
GICD_ICFGR1 is Banked for each connected PE with GICR_TYPER.Processor_Number < 8.
Accessing GICD_ICFGR1 from a PE with GICR_TYPER.Processor_Number > 7 is CONSTRAINED
UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
For SGIs and PPIs:
• When ARE is 1 for the Security state of an interrupt, the field for that interrupt is RES0 and
an implementation is permitted to make the field RAZ/WI in this case.
• Equivalent functionality is provided by GICR_ICFGR<n>.
For each supported PPI, it is IMPLEMENTATION DEFINED whether software can program the
corresponding Int_config field.
For SGIs, Int_config fields are RO, meaning that GICD_ICFGR0 is RO.
Changing Int_config when the interrupt is individually enabled is UNPREDICTABLE.
Changing the interrupt configuration between level-sensitive and edge-triggered (in either
direction) at a time when there is a pending interrupt will leave the interrupt in an UNKNOWN
pending state.
Fields corresponding to unimplemented interrupts are RAZ/WI.
Attributes
GICD_ICFGR<n> is a 32-bit register.
Field descriptions
The GICD_ICFGR<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-473
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
8-474 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Removes the pending state from the corresponding interrupt.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ICPENDR<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ICPENDR0 is Banked for each connected PE with GICR_TYPER.Processor_Number < 8.
Accessing GICD_ICPENDR0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ICPENDR<n> is a 32-bit register.
Field descriptions
The GICD_ICPENDR<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-475
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
For INTID m, when DIV and MOD are the integer division and modulo operations:
• The bit number of the required group modifier bit in this register is m MOD 32.
Component Offset
8-476 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Controls whether the corresponding interrupt is in Group 0 or Group 1.
Usage constraints
This register is accessible as follows:
RW RW RAZ/WI
Note
Accesses to GICD_IGROUPR0 when affinity routing is not enabled for a Security state access the
same state as GICR_IGROUPR0, and must update Redistributor state associated with the PE
performing the accesses.
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
GICD_IGROUPR0 resets to an IMPLEMENTATION DEFINED value, that might be UNKNOWN.
GICD_IGROUPR<n> where n is greater than 0 resets to 0x00000000.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Secure.
The number of implemented GICD_IGROUPR<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_IGROUPR0 is Banked for each connected PE with GICR_TYPER.Processor_Number < 8.
Accessing GICD_IGROUPR0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_IGROUPR<n> is a 32-bit register.
Field descriptions
The GICD_IGROUPR<n> bit assignments are:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-477
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
31 0
For INTID m, when DIV and MOD are the integer division and modulo operations:
• The bit number of the required group modifier bit in this register is m MOD 32.
Component Offset
8-478 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
When GICD_CTLR.DS==0, this register together with the GICD_IGROUPR<n> registers,
controls whether the corresponding interrupt is in:
• Secure Group 0.
• Non-secure Group 1.
• Secure Group 1.
Usage constraints
This register is accessible as follows:
RW RW RAZ/WI
When affinity routing is enabled for Secure state, GICD_IGRPMODR0 is RES0 and equivalent
functionality is proved by GICR_IGRPMODR0.
When GICD_CTLR.DS==0, the register is RAZ/WI to Non-secure accesses.
Bits corresponding to unimplemented interrupts are RAZ/WI.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
Some or all RW fields of this register have defined reset values.
When GICD_CTLR.DS==0, these registers are Secure.
The number of implemented GICD_IGROUPR<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
When GICD_CTLR.ARE_S==0 or GICD_CTLR.DS==1, the GICD_IGRPMODR<n> registers
are RES0. An implementation can make these registers RAZ/WI in this case.
Attributes
GICD_IGRPMODR<n> is a 32-bit register.
Field descriptions
The GICD_IGRPMODR<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-479
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
When this register has an architecturally-defined reset value, this field resets to 0.
For INTID m, when DIV and MOD are the integer division and modulo operations:
• The bit number of the required group modifier bit in this register is m MOD 32.
Component Offset
8-480 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Provides information about the implementer and revision of the Distributor.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states, this register is Common.
Attributes
GICD_IIDR is a 32-bit register.
Field descriptions
The GICD_IIDR bit assignments are:
31 24 23 20 19 16 15 12 11 0
Bits [23:20]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-481
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
8-482 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Holds the priority of the corresponding interrupt.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are always used when affinity routing is not enabled. When affinity routing is
enabled for the Security state of an interrupt:
• GICR_IPRIORITYR<n> is used instead of GICD_IPRIORITYR<n> where n = 0 to 7 (that
is, for SGIs and PPIs).
• GICD_IPRIORITYR<n> is RAZ/WI where n = 0 to 7.
These registers are byte-accessible.
A register field corresponding to an unimplemented interrupt is RAZ/WI.
A GIC might implement fewer than eight priority bits, but must implement at least bits [7:4] of each
field. In each field, unimplemented bits are RAZ/WI, see Interrupt prioritization on page 4-65.
When GICD_CTLR.DS==0:
• A register bit that corresponds to a Group 0 or Secure Group 1 interrupt is RAZ/WI to
Non-secure accesses.
• A Non-secure access to a field that corresponds to a Non-secure Group 1 interrupt behaves
as described in Software accesses of interrupt priority on page 4-72.
It is IMPLEMENTATION DEFINED whether changing the value of a priority field changes the priority
of an active interrupt.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all configurations of the GIC. When GICD_CTLR.DS==0, these
registers are Common.
The number of implemented GICD_IPRIORITYR<n> registers is
8*(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_IPRIORITYR0 to GICD_IPRIORITYR7 are Banked for each connected PE with
GICR_TYPER.Processor_Number < 8.
Accessing GICD_IPRIORITYR0 to GICD_IPRIORITYR7 from a PE with
GICR_TYPER.Processor_Number > 7 is CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_IPRIORITYR<n> is a 32-bit register.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-483
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Field descriptions
The GICD_IPRIORITYR<n> bit assignments are:
31 24 23 16 15 8 7 0
• The byte offset of the required Priority field in this register is m MOD 4, where:
— Byte offset 0 refers to register bits [7:0].
— Byte offset 1 refers to register bits [15:8].
— Byte offset 2 refers to register bits [23:16].
— Byte offset 3 refers to register bits [31:24].
Component Offset
8-484 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
When affinity routing is enabled, provides routing information for the SPI with INTID n.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used only when affinity routing is enabled. When affinity routing is not enabled:
• These registers are RES0. An implementation is permitted to make the register RAZ/WI in
this case.
• The GICD_ITARGETSR<n> registers provide interrupt routing information.
Note
When affinity routing becomes enabled for a Security state (for example, following a reset or
following a write to GICD_CTLR) the value of all writeable fields in this register is UNKNOWN for
that Security state. When the group of an interrupt changes so the ARE setting for the interrupt
changes to 1, the value of this register is UNKNOWN for that interrupt.
Note
For each interrupt, a GIC implementation might support fewer than 256 values for an affinity level.
In this case, some bits of the corresponding affinity level field might be RO.
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
These registers are available in all configurations of the GIC. If the GIC implementation supports
two Security states, these registers are Common.
The maximum value of n is given by (32*(GICD_TYPER.ITLinesNumber+1) - 1).
GICD_IROUTER<n> registers where n=0 to 31 are reserved.
Attributes
GICD_IROUTER<n> is a 64-bit register.
Field descriptions
The GICD_IROUTER<n> bit assignments are:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-485
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
63 40 39 32 31 30 24 23 16 15 8 7 0
Interrupt_Routing_Mode
Bits [63:40]
Reserved, RES0.
Note
An implementation might choose to make the Aff<n> fields RO when this field is 1.
Bits [30:24]
Reserved, RES0.
Component Offset
8-486 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Activates the corresponding interrupt. These registers are used when saving and restoring GIC state.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is enabled for the Security state of an interrupt, bits corresponding to SGIs
and PPIs are RAZ/WI, and equivalent functionality for SGIs and PPIs is provided by
GICR_ISACTIVER0.
Bits corresponding to unimplemented interrupts are RAZ/WI.
If GICD_CTLR.DS==0, unless the GICD_NSACR<n> registers permit Non-secure software to
control Group 0 and Secure Group 1 interrupts, any bits that correspond to Group 0 or Secure Group
1 interrupts are accessible only by Secure accesses and are RAZ/WI to Non-secure accesses.
The bit reads as one if the status of the interrupt is active or active and pending.
GICD_ISPENDR<n> and GICD_ICPENDR<n> provide the pending status of the interrupt.
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ISACTIVER<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ISACTIVER0 is Banked for each connected PE with GICR_TYPER.Processor_Number <
8.
Accessing GICD_ISACTIVER0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ISACTIVER<n> is a 32-bit register.
Field descriptions
The GICD_ISACTIVER<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-487
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
• The bit number of the required group modifier bit in this register is m MOD 32.
Component Offset
8-488 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Enables forwarding of the corresponding interrupt to the CPU interfaces.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ISENABLER<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ISENABLER0 is Banked for each connected PE with GICR_TYPER.Processor_Number <
8.
Accessing GICD_ISENABLER0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ISENABLER<n> is a 32-bit register.
Field descriptions
The GICD_ISENABLER<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-489
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
• The bit number of the required group modifier bit in this register is m MOD 32.
At start-up, and after a reset, a PE can use this register to discover which peripheral INTIDs the GIC supports. If
GICD_CTLR.DS==0 in a system that supports EL3, the PE must do this for the Secure view of the available
interrupts, and Non-secure software running on the PE must do this discovery after the Secure software has
configured interrupts as Group 0/Secure Group 1 and Non-secure Group 1.
Component Offset
8-490 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Adds the pending state to the corresponding interrupt.
Usage constraints
This register is accessible as follows:
RW RW RW
Set-pending bits for SGIs are read-only and ignore writes. The Set-pending bits for SGIs are
provided as GICD_SPENDSGIR<n>.
When affinity routing is enabled for the Security state of an interrupt:
• Bits corresponding to SGIs and PPIs are RAZ/WI, and equivalent functionality for SGIs and
PPIs is provided by GICR_ISPENDR0.
• Bits corresponding to Group 0 and Group 1 Secure interrupts can only be set by Secure
accesses.
Bits corresponding to unimplemented interrupts are RAZ/WI.
If GICD_CTLR.DS==0, unless the GICD_NSACR<n> registers permit Non-secure software to
control Group 0 and Secure Group 1 interrupts, any bits that correspond to Group 0 or Secure Group
1 interrupts are accessible only by Secure accesses and are RAZ/WI to Non-secure accesses.
Configurations
Some or all RW fields of this register have defined reset values.
These registers are available in all GIC configurations. If GICD_CTLR.DS==0, these registers are
Common.
The number of implemented GICD_ISPENDR<n> registers is
(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ISPENDR0 is Banked for each connected PE with GICR_TYPER.Processor_Number < 8.
Accessing GICD_ISPENDR0 from a PE with GICR_TYPER.Processor_Number > 7 is
CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
Attributes
GICD_ISPENDR<n> is a 32-bit register.
Field descriptions
The GICD_ISPENDR<n> bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-491
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
8-492 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
When affinity routing is not enabled, holds the list of target PEs for the interrupt. That is, it holds
the list of CPU interfaces to which the Distributor forwards the interrupt if it is asserted and has
sufficient priority.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used when affinity routing is not enabled. When affinity routing is enabled for
the Security state of an interrupt, the target PEs for an interrupt are defined by GICD_IROUTER<n>
and the associated byte in GICD_ITARGETSR<n> is RES0. An implementation is permitted to
make the byte RAZ/WI in this case.
• These registers are byte-accessible.
• A register field corresponding to an unimplemented interrupt is RAZ/WI.
• A field bit corresponding to an unimplemented CPU interface is RAZ/WI.
• GICD_ITARGETSR0-GICD_ITARGETSR7 are read-only. Each field returns a value that
corresponds only to the PE reading the register.
• It is IMPLEMENTATION DEFINED which, if any, SPIs are statically configured in hardware. The
field for such an SPI is read-only, and returns a value that indicates the PE targets for the
interrupt.
• If GICD_CTLR.DS==0, unless the GICD_NSACR<n> registers permit Non-secure software
to control Group 0 and Secure Group 1 interrupts, any bits that correspond to Group 0 or
Secure Group 1 interrupts are accessible only by Secure accesses and are RAZ/WI to
Non-secure accesses.
In a single connected PE implementation, all interrupts target one PE, and these registers are
RAZ/WI.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
These registers are available in all configurations of the GIC. When GICD_CTLR.DS==0, these
registers are Common.
The number of implemented GICD_ITARGETSR<n> registers is
8*(GICD_TYPER.ITLinesNumber+1). Registers are numbered from 0.
GICD_ITARGETSR0 to GICD_ITARGETSR7 are Banked for each connected PEwith
GICR_TYPER.Processor_Number < 8.
Accessing GICD_ITARGETSR0 to GICD_ITARGETSR7 from a PE with
GICR_TYPER.Processor_Number > 7 is CONSTRAINED UNPREDICTABLE:
• Register is RAZ/WI.
• An UNKNOWN banked copy of the register is accessed.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-493
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Attributes
GICD_ITARGETSR<n> is a 32-bit register.
Field descriptions
The GICD_ITARGETSR<n> bit assignments are:
31 24 23 16 15 8 7 0
PEs in the system number from 0, and each bit in a PE targets field refers to the corresponding PE. For example, a
value of 0x3 means that the Pending interrupt is sent to PEs 0 and 1. For
GICD_ITARGETSR0-GICD_ITARGETSR7, a read of any targets field returns the number of the PE performing
the read.
For interrupt ID m, when DIV and MOD are the integer division and modulo operations:
8-494 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
• The byte offset of the required Priority field in this register is m MOD 4, where:
— Byte offset 0 refers to register bits [7:0].
— Byte offset 1 refers to register bits [15:8].
— Byte offset 2 refers to register bits [23:16].
— Byte offset 3 refers to register bits [31:24].
Software can write to these registers at any time. Any change to a targets field value:
• Has no effect on any active interrupt. This means that removing a CPU interface from a targets list does not
cancel an active state for interrupts on that CPU interface. There is no effect on interrupts that are active and
pending until the active status is cleared, at which time it is treated as a pending interrupt.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-495
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Enables Secure software to permit Non-secure software on a particular PE to create and control
Group 0 interrupts.
Usage constraints
This register is accessible as follows:
RAZ/WI RW RAZ/WI
Configurations
Some or all RW fields of this register have defined reset values.
The concept of selective enabling of Non-secure access to Group 0 and Secure Group 1 interrupts
applies to SGIs and SPIs.
GICD_NSACR0 is a Banked register used for SGIs. A copy is provided for every PE that has a CPU
interface and that supports this feature.
Attributes
GICD_NSACR<n> is a 32-bit register.
Field descriptions
The GICD_NSACR<n> bit assignments are:
31 0
8-496 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Note
Because each field in this register comprises two bits, GICD_NSACR0 controls access rights to SGI registers,
GICD_NSACR1 controls access to PPI registers (and is always RAZ/WI), and all other GICD_NSACR<n>
registers control access to SPI registers.
For compatibility with GICv2, writes to GICD_NSACR0 for a particular PE must be coordinated within the
Distributor and must update GICR_NSACR for the Redistributor associated with that PE.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-497
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Adds the pending state to a valid SPI if permitted by the Security state of the access and the
GICD_NSACR<n> value for that SPI.
A write to this register changes the state of an inactive SPI to pending, and the state of an active SPI
to active and pending.
Usage constraints
This register is accessible as follows:
WO WO WO
Note
A Secure access to this register can set the pending state of any valid SPI.
Configurations
If GICD_TYPER.MBIS == 0, this register is reserved.
When GICD_CTLR.DS==1, this register provides functionality for all SPIs.
Attributes
GICD_SETSPI_NSR is a 32-bit register.
Field descriptions
The GICD_SETSPI_NSR bit assignments are:
31 10 9 0
RES0 INTID
Bits [31:10]
Reserved, RES0.
8-498 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
The function of this register depends on whether the targeted SPI is configured to be an edge-triggered or
level-sensitive interrupt:
• For an edge-triggered interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will stop being pending on activation, or if the pending state is removed by a write
to GICD_CLRSPI_NSR, GICD_CLRSPI_SR, or GICD_ICPENDR<n>.
• For a level-sensitive interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will remain pending until it is deasserted by a write to GICD_CLRSPI_NSR or
GICD_CLRSPI_SR. If the interrupt is activated between having the pending state added and being
deactivated, then the interrupt will be active and pending.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-499
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Adds the pending state to a valid SPI.
A write to this register changes the state of an inactive SPI to pending, and the state of an active SPI
to active and pending.
Usage constraints
This register is accessible as follows:
WI WO WI
Configurations
If GICD_TYPER.MBIS == 0, this register is reserved.
When GICD_CTLR.DS==1, this register is WI.
Attributes
GICD_SETSPI_SR is a 32-bit register.
Field descriptions
The GICD_SETSPI_SR bit assignments are:
31 10 9 0
RES0 INTID
Bits [31:10]
Reserved, RES0.
The function of this register depends on whether the targeted SPI is configured to be an edge-triggered or
level-sensitive interrupt:
• For an edge-triggered interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will stop being pending on activation, or if the pending state is removed by a write
to GICD_CLRSPI_NSR, GICD_CLRSPI_SR, or GICD_ICPENDR<n>.
• For a level-sensitive interrupt, a write to GICD_SETSPI_NSR or GICD_SETSPI_SR adds the pending state
to the targeted interrupt. It will remain pending until it is deasserted by a write to GICD_CLRSPI_NSR or
GICD_CLRSPI_SR. If the interrupt is activated between having the pending state added and being
deactivated, then the interrupt will be active and pending.
8-500 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-501
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Controls the generation of SGIs.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is used only when affinity routing is not enabled. When affinity routing is enabled, this
register is RES0.
It is IMPLEMENTATION DEFINED whether this register has any effect when the forwarding of
interrupts by the Distributor is disabled by GICD_CTLR.
Configurations
This register is available in all configurations of the GIC. If the GIC supports two Security states
this register is Common.
Attributes
GICD_SGIR is a 32-bit register.
Field descriptions
The GICD_SGIR bit assignments are:
31 26 25 24 23 16 15 14 4 3 0
TargetListFilter NSATT
Bits [31:26]
Reserved, RES0.
8-502 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
If this field is 00000000 when GICD_SGIR.TargetListFilter is 00, the Distributor does not forward
the interrupt to any CPU interface.
Bits [14:4]
Reserved, RES0.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-503
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Adds the pending state to an SGI.
A write to this register changes the state of an inactive SGI to pending, and the state of an active SGI
to active and pending.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used only when affinity routing is not enabled. When affinity routing is enabled
for the Security state of an interrupt then the bit associated with SGI in that Security state is RES0.
An implementation is permitted to make the register RAZ/WI in this case.
A register bit that corresponds to an unimplemented SGI is RAZ/WI.
These registers are byte-accessible.
If the GIC implementation supports two Security states:
• A register bit that corresponds to a Group 0 interrupt is RAZ/WI to Non-secure accesses.
• Register bits corresponding to unimplemented PEs are RAZ/WI.
Configurations
Some or all RW fields of this register have defined reset values.
Four SGI set-pending registers are implemented. Each register contains eight set-pending bits for
each of four SGIs, for a total of 16 possible SGIs.
In multiprocessor implementations, each PE has a copy of these registers.
Attributes
GICD_SPENDSGIR<n> is a 32-bit register.
Field descriptions
The GICD_SPENDSGIR<n> bit assignments are:
31 0
8-504 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
When this register has an architecturally-defined reset value, this field resets to 0.
For SGI ID m, generated by processing element C writing to the corresponding GICD_SGIR field, where DIV and
MOD are the integer division and modulo operations:
• The offset of the required field within the register GICD_SPENDSGIR<n> is given by m MOD 4.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-505
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Provides software with a mechanism to detect:
• Accesses to reserved locations.
• Writes to read-only locations.
• Reads of write-only locations.
Usage constraints
GICD_STATUSR(S) is accessible as follows:
RW RW -
RW - RW
This is an optional register. If the register is not implemented, the location is RAZ/WI.
Configurations
If the GIC implementation supports two Security states this register is Banked to provide Secure and
Non-secure copies.
Attributes
GICD_STATUSR is a 32-bit register.
Field descriptions
The GICD_STATUSR bit assignments are:
31 4 3 2 1 0
RES0
RRD
WRD
RWOD
WROD
Bits [31:4]
Reserved, RES0.
8-506 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
When a violation is detected, software must write 1 to this register to reset it.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-507
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Purpose
Provides information about what features the GIC implementation supports. It indicates:
• Whether the GIC implementation supports two Security states.
• The maximum number of INTIDs that the GIC implementation supports.
• The number of PEs that can be used as interrupt targets.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is available in all configurations of the GIC. When GICD_CTLR.DS==0, this register
is Common.
Attributes
GICD_TYPER is a 32-bit register.
Field descriptions
The GICD_TYPER bit assignments are:
31 27 26 25 24 23 19 18 17 16 15 11 10 9 8 7 5 4 0
RSS CPUNumber
No1N RES0
A3V SecurityExtn
DVIS
LPIS
MBIS
Bits [31:27]
Reserved, RES0.
8-508 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
Bits [15:11]
Reserved, RES0.
Bits [9:8]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-509
ID072617 Non-Confidential
8 Programmers’ Model
8.9 The GIC Distributor register descriptions
The maximum SPI INTID an implementation might support is 1019 (field value 11111). Regardless
of the range of INTIDs defined by this field, interrupt IDs 1020-1023 are reserved for special
purposes.
Note
The value derived from this field specifies the maximum number of SPIs that the GIC
implementation might support. An implementation might not implement all SPIs up to this
maximum.
The ITLinesNumber field only indicates the maximum number of SPIs that the GIC implementation might support.
This value determines the number of instances of the following interrupt registers:
• GICD_IGROUPR<n>.
• GICD_ISENABLER<n>.
• GICD_ICENABLER<n>.
• GICD_ISPENDR<n>.
• GICD_ICPENDR<n>.
• GICD_ISACTIVER<n>.
• GICD_ICACTIVER<n>.
• GICD_IPRIORITYR<n>.
• GICD_ITARGETSR<n>.
• GICD_ICFGR<n>.
The GIC architecture does not require a GIC implementation to support a continuous range of SPI interrupt IDs.
Software must check which SPI INTIDs are supported, up to the maximum value indicated by
GICD_TYPER.ITLinesNumber.
Component Offset
8-510 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.10 The GIC Redistributor register map
The mechanism by which an ITS communicates with the Redistributors is IMPLEMENTATION DEFINED. An
implementation might perform this communication using memory-mapped functionality, and a portion of the
Redistributor memory map is allocated for such communication. The definition of the communication is outside the
scope of this GIC architecture specification.
Each Redistributor defines two 64KB frames in the physical address map:
• RD_base for controlling the overall behavior of the Redistributor, for controlling LPIs, and for generating
LPIs in a system that does not include at least one ITS.
• SGI_base for controlling and generating PPIs and SGIs.
The frame for each Redistributor must be contiguous and must be ordered as follows:
1. RD_base
2. SGI_base
The frames for each Redistributor must be contiguous and must be ordered as follows:
1. RD_base
2. SGI_base
3. VLPI_base
4. Reserved
Table 8-27 shows the GIC Redistributor register map for the physical LPI registers.
Offset from
Name Type Reset Description
RD_base
0x0018 - - - Reserved
0x0050 - - - Reserved
0x0080 - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-511
ID072617 Non-Confidential
8 Programmers’ Model
8.10 The GIC Redistributor register map
Offset from
Name Type Reset Description
RD_base
0x00A8 - - - Reserved
0x00B8 - - - Reserved
0x00C8 - - - Reserved
0x0108 - - - Reserved
0x0118-0xBFFC - - - Reserved
Table 8-28 shows the GIC Redistributor register map for the virtual LPI registers.
Offset from
Name Type Reset Description
VLPI_base
0x0000 - - - Reserved
0x0050 - - - Reserved
0x0380-0xBFFC - - - Reserved
0xFFD0-0xFFFC - - - Reserved
Table 8-29 on page 8-513 shows the GIC Redistributor register map for the SGI and PPI registers.
8-512 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.10 The GIC Redistributor register map
Offset from
Name Type Reset Description
SGI_base
0x0E04-0xBFFC - - - Reserved
0xFFD0-0xFFFC - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-513
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-514 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Clears the pending state of the specified LPI.
Usage constraints
This register is accessible as follows:
WO WO WO
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_CLRLPIR is a 64-bit register.
Field descriptions
The GICR_CLRLPIR bit assignments are:
63 32 31 0
RES0 pINTID
Bits [63:32]
Reserved, RES0.
Note
The size of this field is IMPLEMENTATION DEFINED, and is specified by the GICD_TYPER.Idbits
field. Unimplemented bits are RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-515
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-516 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Controls the operation of a Redistributor, and enables the signaling of LPIs by the Redistributor to
the connected PE.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_CTLR is a 32-bit register.
Field descriptions
The GICR_CTLR bit assignments are:
31 30 27 26 25 24 23 4 3 2 1 0
RES0 RES0
UWP EnableLPIs
DPG1S RES0
DPG1NS RWP
DPG0
Bits [30:27]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-517
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
When GICD_CTLR.DS==1, this field is RAZ/WI. In GIC implementations that support two
Security states, this field is only accessible by Secure accesses, and is RAZ/WI to Non-secure
accesses.
It is IMPLEMENTATION DEFINED whether this bits affect the selection of PEs for interrupts using the
1 of N distribution model when GICD_CTLR.ARE_S==0.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
Bits [23:4]
Reserved, RES0.
8-518 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
• GICR_CTLR.DPG1NS
• GICR_CTLR.DPG0
• GICR_CTLR, which clears Ensble_LPIs from 1 to 0.
Bits [2:1]
Reserved, RES0.
Note
If GICR_TYPER.LPIS == 0, this field is RES0.
If GICD_CTLR.ARE_NS is written from 1 to 0 when this bit is 1, behavior is an IMPLEMENTATION
DEFINED choice between clearing GICR_CTLR.EnableLPIs to 0 or maintaining its current value.
When affinity routing is not enabled for the Non-secure state, this bit is RES0.
When written from 0 to 1, the Redistributor loads the LPI Pending table from memory to check for
any pending interrupts.
After it has been written to 1, it is IMPLEMENTATION DEFINED whether the bit becomes RES1 or can
be cleared by to 0.
Where the bit remains programmable:
• Software must observe GICR_CTLR.RWP==0 after clearing GICR_CTLR.EnableLPIs
from 1 to 0 before writing GICR_PENDBASER or GICR_PROPBASER, otherwise
behavior is UNPREDICTABLE.
• Software must observe GICR_CTLR.RWP==0 after clearing GICR_CTLR.EnableLPIs
from 1 to 0 before setting GICR_CTLR.EnableLPIs to 1, otherwise behavior is
UNPREDICTABLE.
Note
If one or more ITS is implemented, ARM strongly recommends that all LPIs are mapped to another
Redistributor before GICR_CTLR.EnableLPIs is cleared to 0.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
The participation of a PE in the 1 of N distribution model for a given interrupt group is governed by the
concatenation of GICR_WAKER.ProcessorSleep, the appropriate GICR_CTLR.DPG{1, 0} bit, and the PE
interrupt group enable. The behavior options are:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-519
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
If an SPI using the 1 of N distribution model has been forwarded to the PE and a write to GICR_CTLR occurs that
changes the DPG bit for the interrupt group of the SPI, the IRI must attempt to select a different target PE for the
SPI. This might have no effect on the forwarded SPI if it has already been activated.
8-520 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Deactivates the corresponding SGI or PPI. These registers are used when saving and restoring GIC
state.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ICACTIVER0,
the corresponding bit is RAZ/WI and equivalent functionality is provided by
GICD_ICACTIVER<n> with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ICACTIVER<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ICACTIVER0 is a 32-bit register.
Field descriptions
The GICR_ICACTIVER0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-521
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-522 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Disables forwarding of the corresponding SGI or PPI to the CPU interfaces.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ICENABLER0,
the corresponding bit is RAZ/WI and equivalent functionality is provided by
GICD_ICENABLER<n> with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ICENABLER<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ICENABLER0 is a 32-bit register.
Field descriptions
The GICR_ICENABLER0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-523
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-524 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Determines whether the corresponding SGI is edge-triggered or level-sensitive.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ICFGR0 is a 32-bit register.
Field descriptions
The GICR_ICFGR0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-525
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-526 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Determines whether the corresponding PPI is edge-triggered or level-sensitive.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
For each supported PPI, it is IMPLEMENTATION DEFINED whether software can program the
corresponding Int_config field.
Changing Int_config when the interrupt is individually enabled is UNPREDICTABLE.
Changing the interrupt configuration between level-sensitive and edge-triggered (in either
direction) at a time when there is a pending interrupt will leave the interrupt in an UNKNOWN
pending state.
Attributes
GICR_ICFGR1 is a 32-bit register.
Field descriptions
The GICR_ICFGR1 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-527
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-528 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Removes the pending state from the corresponding SGI or PPI.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ICPENDR0, the
corresponding bit is RAZ/WI and equivalent functionality is provided by GICD_ICPENDR<n>
with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ICENABLER<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ICPENDR0 is a 32-bit register.
Field descriptions
The GICR_ICPENDR0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-529
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-530 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Controls whether the corresponding SGI or PPI is in Group 0 or Group 1.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_IGROUPR0, the
corresponding bit is RES0 and equivalent functionality is provided by GICD_IGROUPR<n> with
n=0.
When GICD_CTLR.DS == 0, the register is RAZ/WI to Non-secure accesses.
Bits corresponding to unimplemented interrupts are RAZ/WI.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available in all GIC configurations. If the GIC implementation supports two Security
states, this register is Secure.
A copy of this register is provided for each Redistributor.
Attributes
GICR_IGROUPR0 is a 32-bit register.
Field descriptions
The GICR_IGROUPR0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-531
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
When GICD_CTLR.DS == 0, the bit that corresponds to the interrupt is concatenated with the
equivalent bit in GICR_IGRPMODR0 to form a 2-bit field that defines an interrupt group. The
encoding of this field is at GICR_IGRPMODR0.
This field resets to a value that is architecturally UNKNOWN.
The considerations for the reset value of this register are the same as those for GICD_IGROUPR<n> with n=0.
8-532 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
When GICD_CTLR.DS==0, this register together with the GICD_IGROUPR<n> registers,
controls whether the corresponding interrupt is in:
• Secure Group 0.
• Non-secure Group 1.
• When System register access is enabled, Secure Group 1.
Usage constraints
This register is accessible as follows:
RES0 RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_IGRPMODR0,
the corresponding bit is RES0 and equivalent functionality is provided by GICD_IGRPMODR<n>
with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_IGRPMODR<n>.
When GICD_CTLR.ARE_S == 0 or GICD_CTLR.DS == 1, GICR_IGRPMODR0 is RES0. An
implementation can make this register RAZ/WI in this case.
When GICD_CTLR.DS==0, the register is RAZ/WI to Non-secure accesses.
Bits corresponding to unimplemented interrupts are RAZ/WI.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
once. The effect of the change must be visible in finite time.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
When GICD_CTLR.DS==0, this register is Secure.
A copy of this register is provided for each Redistributor.
Attributes
GICR_IGRPMODR0 is a 32-bit register.
Field descriptions
The GICR_IGRPMODR0 bit assignments are:
31 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-533
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-534 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Provides information about the implementer and revision of the Redistributor.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states, this register is Common.
Attributes
GICR_IIDR is a 32-bit register.
Field descriptions
The GICR_IIDR bit assignments are:
31 24 23 20 19 16 15 12 11 0
Bits [23:20]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-535
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-536 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Invalidates any cached configuration data of all physical LPIs, causing the GIC to reload the
interrupt configuration from the physical LPI Configuration table at the address specified by
GICR_PROPBASER.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is mandatory in an implementation that supports LPIs and does not include an ITS. The
functionality is IMPLEMENTATION DEFINED in an implementation that does include an ITS.
Writes to this register have no effect if no physical LPIs are currently stored in the local
Redistributor cache.
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_INVALLR is a 64-bit register.
Field descriptions
The GICR_INVALLR bit assignments are:
63 0
RES0
Bits [63:0]
Reserved, RES0.
Note
If any LPI has been forwarded to the PE and a valid write to GICR_INVALLR is received, the Redistributor must
ensure it reloads its properties from memory. This has no effect on the forwarded LPI if it has already been activated.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-537
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Invalidates the cached configuration data of a specified LPI, causing the GIC to reload the interrupt
configuration from the physical LPI Configuration table at the address specified by
GICR_PROPBASER.
Usage constraints
This register is accessible as follows:
WO WO WO
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_INVLPIR is a 64-bit register.
Field descriptions
The GICR_INVLPIR bit assignments are:
63 32 31 0
RES0 pINTID
Bits [63:32]
Reserved, RES0.
Note
The size of this field is IMPLEMENTATION DEFINED, and is specified by the GICD_TYPER.IDbits
field. Unimplemented bits are RES0.
Note
If any LPI has been forwarded to the PE and a valid write to GICR_INVLPIR is received, the Redistributor must
ensure it reloads its properties from memory and apply any changes by retrieving and reforwarding the LPI as
required. This has no effect on the forwarded LPI if it has already been activated.
8-538 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-539
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Holds the priority of the corresponding interrupt for each SGI and PPI supported by the GIC.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used when affinity routing is enabled for the Security state of the interrupt. When
affinity routing is not enabled the bits corresponding to the interrupt are RAZ/WI and
GICD_IPRIORITYR<n> provides equivalent functionality.
These registers are used for SGIs and PPIs only. Equivalent functionality for SPIs is provided by
GICD_IPRIORITYR<n>.
These registers are byte-accessible.
When GICD_CTLR.DS == 0:
• A field that corresponds to a Group 0 or Secure Group 1 interrupt is RAZ/WI to Non-secure
accesses.
• A Non-secure access to a field that corresponds to a Non-secure Group 1 interrupt behaves
as described in Software accesses of interrupt priority on page 4-72.
Note
Implementations must ensure that an interrupt that is pending at the time of the write uses either the
old value or the new value and must ensure that the interrupt is neither lost nor handled more than
one time. The effect of the change must be visible in finite time.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of these registers is provided for each Redistributor.
These registers are configured as follows:
• GICR_IPRIORITYR0-GICR_IPRIORITYR3 store the priority of SGIs.
• GICR_IPRIORITYR4-GICR_IPRIORITYR7 store the priority of PPIs.
Attributes
GICR_IPRIORITYR<n> is a 32-bit register.
Field descriptions
The GICR_IPRIORITYR<n> bit assignments are:
31 24 23 16 15 8 7 0
8-540 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-541
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Activates the corresponding SGI or PPI. These registers are used when saving and restoring GIC
state.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ISACTIVER0,
the corresponding bit is RAZ/WI and equivalent functionality is provided by
GICD_ISACTIVER<n> with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ISACTIVER<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ISACTIVER0 is a 32-bit register.
Field descriptions
The GICR_ISACTIVER0 bit assignments are:
31 0
8-542 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-543
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Enables forwarding of the corresponding SGI or PPI to the CPU interfaces.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ISENABLER0,
the corresponding bit is RAZ/WI and equivalent functionality is provided by
GICD_ISENABLER<n> with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ISENABLER<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
Some or all RW fields of this register have defined reset values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ISENABLER0 is a 32-bit register.
Field descriptions
The GICR_ISENABLER0 bit assignments are:
31 0
8-544 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-545
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Adds the pending state to the corresponding SGI or PPI.
Usage constraints
This register is accessible as follows:
RW RW RW
When affinity routing is not enabled for the Security state of an interrupt in GICR_ISPENDR0, the
corresponding bit is RAZ/WI and equivalent functionality is provided by GICD_ISPENDR<n>
with n=0.
This register only applies to SGIs (bits [15:0]) and PPIs (bits [31:16]). For SPIs, this functionality
is provided by GICD_ISPENDR<n>.
When GICD_CTLR.DS == 0, bits corresponding to Secure SGIs and PPIs are RAZ/WI to
Non-secure accesses.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_ISPENDR0 is a 32-bit register.
Field descriptions
The GICR_ISPENDR0 bit assignments are:
31 0
8-546 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-547
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Enables Secure software to permit Non-secure software to create SGIs targeting the PE connected
to this Redistributor by writing to ICC_SGI1R_EL1, ICC_ASGI1R_EL1 or ICC_SGI0R_EL1.
See Table 8-14 on page 8-169 for more information.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
For a description on when a write to ICC_SGI0R_EL1, ICC_SGI1R_EL1 or ICC_ASGI1R_EL1 is
permitted to generate an interrupt see Use of control registers for SGI forwarding on page 8-169.
Attributes
GICR_NSACR is a 32-bit register.
Field descriptions
The GICR_NSACR bit assignments are:
31 0
8-548 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
permitted ARM strongly recommends that implementations treat this value as 10. It is
IMPLEMENTATION DEFINED whether the value read back is the value programmed or the
valid value chosen.
This field resets to a value that is architecturally UNKNOWN.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-549
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Specifies the base address of the LPI Pending table, and the Shareability and Cacheability of
accesses to the LPI Pending table.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_PENDBASER is a 64-bit register.
Field descriptions
The GICR_PENDBASER bit assignments are:
63 62 61 59 58 56 55 52 51 16 15 12 11 10 9 7 6 0
RES0 InnerCache
PTZ Shareability
OuterCache
Bit [63]
Reserved, RES0.
Bits [61:59]
Reserved, RES0.
8-550 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [55:52]
Reserved, RES0.
Bits [15:12]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-551
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [6:0]
Reserved, RES0.
8-552 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Specifies the base address of the LPI Configuration table, and the Shareability and Cacheability of
accesses to the LPI Configuration table.
Usage constraints
This register is accessible as follows:
RW RW RW
Other restrictions apply when a Redistributor caches information from GICR_PROPBASER. See
LPI Configuration tables on page 6-95 for more information.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
A copy of this register is provided for each Redistributor.
An implementation might make this register RO, for example to correspond to an LPI Configuration
table in read-only memory.
Attributes
GICR_PROPBASER is a 64-bit register.
Field descriptions
The GICR_PROPBASER bit assignments are:
63 59 58 56 55 52 51 12 11 10 9 7 6 5 4 0
OuterCache RES0
InnerCache
Shareability
Bits [63:59]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-553
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [55:52]
Reserved, RES0.
Bits [6:5]
Reserved, RES0.
8-554 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
If the value of this field is larger than the value of GICD_TYPER.IDbits, the GICD_TYPER.IDbits
value applies.
If the value of this field is less than 0b1101, indicating that the largest INTID is less than 8192 (the
smallest LPI interrupt ID), the GIC will behave as if all physical LPIs are out of range.
This field resets to a value that is architecturally UNKNOWN.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-555
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Generates an LPI by setting the pending state of the specified LPI.
Usage constraints
This register is accessible as follows:
WO WO WO
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_SETLPIR is a 64-bit register.
Field descriptions
The GICR_SETLPIR bit assignments are:
63 32 31 0
RES0 pINTID
Bits [63:32]
Reserved, RES0.
Note
The size of this field is IMPLEMENTATION DEFINED, and is specified by the GICD_TYPER.IDbits
field. Unimplemented bits are RES0.
8-556 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-557
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Provides software with a mechanism to detect:
• Accesses to reserved locations.
• Writes to read-only locations.
• Reads of write-only locations.
Usage constraints
GICR_STATUSR(S) is accessible as follows:
RW RW -
RW - RW
This is an optional register. If the register is not implemented, the location is RAZ/WI.
Configurations
A copy of this register is provided for each Redistributor.
If the GIC implementation supports two Security states this register is Banked to provide Secure and
Non-secure copies.
Attributes
GICR_STATUSR is a 32-bit register.
Field descriptions
The GICR_STATUSR bit assignments are:
31 4 3 2 1 0
RES0
RRD
WRD
RWOD
WROD
Bits [31:4]
Reserved, RES0.
8-558 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-559
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Indicates completion of physical Redistributor operations.
Usage constraints
This register is accessible as follows:
RO RO RO
Optionally, when this register is accessed, an implementation might wait until all operations are
complete before returning a value, in which case GICR_SYNCR.Busy is always 0.
This register is mandatory in an implementation that supports LPIs and does not include an ITS. The
functionality is IMPLEMENTATION DEFINED in an implementation that does include an ITS.
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_SYNCR is a 32-bit register.
Field descriptions
The GICR_SYNCR bit assignments are:
31 1 0
RES0
Busy
Bits [31:1]
Reserved, RES0.
8-560 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-561
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Provides information about the configuration of this Redistributor.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
A copy of this register is provided for each Redistributor.
Attributes
GICR_TYPER is a 64-bit register.
Field descriptions
The GICR_TYPER bit assignments are:
63 32 31 26 25 24 23 8 7 6 5 4 3 2 1 0
CommonLPIAff PLPIS
VLPIS
RES0
DirectLPI
Last
DPGS
RES0
Bits [31:26]
Reserved, RES0.
8-562 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
11 All Redistributors with the same Aff3.Aff2.Aff1 value must share an LPI Configuration
table.
Bits [7:6]
Reserved, RES0.
Bit [2]
Reserved, RES0.
Note
In GICv3 implementations this field is RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-563
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8-564 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
8.11.24 GICR_VPENDBASER, Virtual Redistributor LPI Pending Table Base Address Register
The GICR_VPENDBASER characteristics are:
Purpose
Specifies the base address of the memory that holds the virtual LPI Pending table for the currently
scheduled virtual machine.
Usage constraints
This register is accessible as follows:
RW RW RW
The effect of a write to this register is not guaranteed to be visible throughout the affinity hierarchy,
as indicated by GICR_CTLR.RWP == 0.
Configurations
Some or all RW fields of this register have defined reset values.
This register is provided only in GICv4 implementations.
Attributes
GICR_VPENDBASER is a 64-bit register.
Field descriptions
The GICR_VPENDBASER bit assignments are:
63 62 61 60 59 58 56 55 52 51 16 15 12 11 10 9 7 6 0
Valid InnerCache
IDAI Shareability
PendingLast
Dirty
RES0
OuterCache
Note
Software can determine whether a PE supports GICv3 or GICv4 by reading ID_AA64PFR0_EL1.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-565
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
0 There are no uncompleted virtual LPIs for the last scheduled vPE.
1 There is at least one uncompleted virtual LPI for the last scheduled vPE.
Note
When GICR_VPENDBASER.Valid == 0, the Redistributor must ensure any outstanding pending
virtual interrupts are cleared from the CPU interface.
Bit [59]
Reserved, RES0.
8-566 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [55:52]
Reserved, RES0.
Bits [15:12]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-567
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [6:0]
Reserved, RES0.
8-568 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Specifies the base address of the memory that holds the virtual LPI Configuration table for the
currently scheduled virtual machine.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is provided in GICv4 implementations only.
Attributes
GICR_VPROPBASER is a 64-bit register.
Field descriptions
The GICR_VPROPBASER bit assignments are:
63 59 58 56 55 52 51 12 11 10 9 7 6 5 4 0
OuterCache RES0
InnerCache
Shareability
Bits [63:59]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-569
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Bits [55:52]
Reserved, RES0.
Bits [6:5]
Reserved, RES0.
8-570 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Purpose
Permits software to control the behavior of the WakeRequest power management signal
corresponding to the Redistributor. Power management operations follow the rules in Power
management on page 7-150.
Usage constraints
This register is accessible as follows:
RW RW RAZ/WI
Configurations
Some or all RW fields of this register have defined reset values.
A copy of this register is provided for each Redistributor.
Attributes
GICR_WAKER is a 32-bit register.
Field descriptions
The GICR_WAKER bit assignments are:
31 30 3 2 1 0
RES0
Bits [30:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-571
ID072617 Non-Confidential
8 Programmers’ Model
8.11 The GIC Redistributor register descriptions
Note
Before powering down a PE, software must set this bit to 1 and wait until ChildrenAsleep == 1.
After powering up a PE, or following a failed powerdown, software must set this bit to 0 and wait
until ChildrenAsleep == 0.
8-572 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.12 The GIC CPU interface register map
For a multiprocessor implementation, the GIC implements a set of CPU interface registers for each CPU interface.
ARM strongly recommends that each PE has the same CPU interface base address for the CPU interface that
connects it to the GIC. This is the private CPU interface base address for that PE. It is IMPLEMENTATION DEFINED
whether a PE can access the CPU interface registers of other PEs in the system.
0x0000 GICC_CTLR RW See the register description CPU Interface Control Register
0x0030-0x003C - - - Reserved
0x00ED-0x00F8 - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-573
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
8-574 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 1 interrupt preemption.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled, the System registers ICC_BPR0_EL1 and ICC_BPR1_EL1 provide equivalent
functionality.
Configurations
Some or all RW fields of this register have defined reset values.
In systems that support two Security states:
• This register is an alias of the Non-secure copy of GICC_BPR.
• Non-secure accesses to this register return a shifted value of the binary point.
• If ICC_CTLR_EL3.CBPR_EL1NS == 1, Secure accesses to this register access
ICC_BPR0_EL1.
Attributes
The reset value of this register is defined as (minimum GICC_BPR.Binary_Point + 1), resulting in
a permitted range of 0x1-0x4.
Field descriptions
The GICC_ABPR bit assignments are:
31 3 2 0
RES0
Binary_Point
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-575
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Component Offset
8-576 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
A write to this register performs priority drop for the specified Group 1 interrupt and, if the
appropriate GICC_CTLR.EOImodeS or GICC_CTLR.EOImodeNS field == 0, also deactivates the
interrupt.
Usage constraints
This register is accessible as follows:
WO WO WO
A write to this register must correspond to the most recently acknowledged Group 1 interrupt. If a
value other than the last value read from GICC_AIAR is written to this register, the effect is
UNPREDICTABLE.
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_EOIR1 provides equivalent functionality.
• For AArch64 implementations, ICC_EOIR1_EL1 provides equivalent functionality.
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
When GICD_CTLR.DS==0, this register is an alias of the Non-secure view of GICC_EOIR. A
Secure access to this register is identical to a Non-secure access to GICC_EOIR.
Attributes
GICC_AEOIR is a 32-bit register.
Field descriptions
The GICC_AEOIR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-577
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
• For SGIs, bits [12:10] identify the CPU interface corresponding to the source PE. For all
other interrupts these bits are RES0.
Component Offset
8-578 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
8.13.3 GICC_AHPPIR, CPU Interface Aliased Highest Priority Pending Interrupt Register
The GICC_AHPPIR characteristics are:
Purpose
If the highest priority pending interrupt is in Group 1, this register provides the INTID of the highest
priority pending interrupt on the CPU interface.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_HPPIR1 provides equivalent functionality.
• For AArch64 implementations, ICC_HPPIR1_EL1 provides equivalent functionality.
If the highest priority pending interrupt is in Group 0, a read of this register returns the special
INTID 1023.
Interrupt identifiers corresponding to an interrupt group that is not enabled are ignored.
If the highest priority pending interrupt is a direct interrupt that is both individually enabled in the
Distributor and part of an interrupt group that is enabled in the Distributor, and the interrupt group
is disabled in the CPU interface for this PE, this register returns the special INTID 1023.
See Preemption on page 4-71 for more information about pending interrupts that are not considered
when determining the highest priority pending interrupt.
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
If GICD_CTLR.DS==0, this register is an alias of the Non-secure view of GICC_HPPIR. A Secure
access to this register is identical to a Non-secure access to GICC_HPPIR.
Attributes
GICC_AHPPIR is a 32-bit register.
Field descriptions
The GICC_AHPPIR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-579
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
Component Offset
8-580 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides the INTID of the signaled Group 1 interrupt. A read of this register by the PE acts as an
acknowledge for the interrupt.
Usage constraints
This register is accessible as follows:
RO RO RO
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
When GICD_CTLR.DS==0, this register is an alias of the Non-secure view of GICC_IAR. A
Secure access to this register is identical to a Non-secure access to GICC_IAR.
Attributes
GICC_AIAR is a 32-bit register.
Field descriptions
The GICC_AIAR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-581
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Component Offset
8-582 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides information about interrupt active priorities.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used only when System register access is not enabled. When System register
access is enabled the following registers provide equivalent functionality:
• In AArch64:
— For Group 0, ICC_AP0R<n>_EL1.
— For Group 1, ICC_AP1R<n>_EL1.
• In AArch32:
— For Group 0, ICC_AP0R<n>.
— For Group 1, ICC_AP1R<n>.
Configurations
Some or all RW fields of this register have defined reset values.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural
requirement that the value 0x00000000 is consistent with no interrupts being active.
When GICD_CTLR.DS == 0, these registers are Banked, and Non-secure accesses do not affect
Secure operation. The Secure copies of these registers hold active priorities for Group 0 interrupts,
and the Non-secure copies provide a Non-secure view of the active priorities for Group 1 interrupts.
GICC_APR1 is only implemented in implementations that support 6 or more bits of priority.
GICC_APR2 and GICC_APR3 are only implemented in implementations that support 7 bits of
priority.
When GICD_CTLR.DS==1, these registers hold the active priorities for Group 0 interrupts, and the
active priorities for Group 1 interrupts are held by the GICC_NSAPR<n> registers.
Attributes
GICC_APR<n> is a 32-bit register.
Field descriptions
The GICC_APR<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-583
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Component Offset
8-584 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled this register is RAZ/WI, and the System registers ICC_BPR0_EL1 and ICC_BPR1_EL1
provide equivalent functionality.
Configurations
Some or all RW fields of this register have defined reset values.
In systems that support two Security states:
• This register is Banked.
• The Secure instance of this register determines Group 0 interrupt preemption.
• The Non-secure instance of this register determines Group 1 interrupt preemption.
In systems that support only one Security state, when GICC_CTLR.CBPR == 0, this register
determines only Group 0 interrupt preemption.
When GICC_CTLR.CBPR == 1, this register determines interrupt preemption for both Group 0 and
Group 1 interrupts.
Attributes
GICC_BPR is a 32-bit register.
Field descriptions
The GICC_BPR bit assignments are:
31 3 2 0
RES0
Binary_Point
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-585
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Note
Aliasing the Non-secure GICC_BPR as GICC_ABPR in a multiprocessor system permits a PE that can make only
Secure accesses to configure the preemption setting for Group 1 interrupts by accessing GICC_ABPR.
Component Offset
8-586 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Controls the CPU interface, including enabling of interrupt groups, interrupt signal bypass, binary
point registers used, and separation of priority drop and interrupt deactivation.
Note
If the GIC implementation supports two Security states, independent EOI controls are provided for
accesses from each Security state. Secure accesses handle both Group 0 and Group 1 interrupts, and
Non-secure accesses handle Group 1 interrupts only.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_CTLR and ICC_MCTLR provide equivalent
functionality.
• For AArch64 implementations, ICC_CTLR_EL1 and ICC_CTLR_EL3 provide equivalent
functionality.
Configurations
Some or all RW fields of this register have defined reset values.
In a GIC implementation that supports two Security states:
• This register is Banked.
• The register bit assignments are different in the Secure and Non-secure copies.
Attributes
GICC_CTLR is a 32-bit register.
Field descriptions
The GICC_CTLR bit assignments are:
31 10 9 8 7 6 5 4 1 0
RES0 RES0
EnableGrp1
FIQBypDisGrp1
IRQBypDisGrp1
RES0
EOImodeNS
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-587
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Bits [31:10]
Reserved, RES0.
Note
An implementation is permitted to make this bit RAO/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
Bits [8:7]
Reserved, RES0.
Bits [4:1]
Reserved, RES0.
8-588 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
When this register has an architecturally-defined reset value, this field resets to 0.
31 11 10 9 8 7 6 5 4 3 2 1 0
RES0
EnableGrp0
EnableGrp1
RES0
FIQEn
CBPR
FIQBypDisGrp0
IRQBypDisGrp0
FIQBypDisGrp1
IRQBypDisGrp1
EOImodeS
EOImodeNS
Bits [31:11]
Reserved, RES0.
Note
An implementation is permitted to make this bit RAO/WI.
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
Note
An implementation is permitted to make this bit RAO/WI.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-589
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
8-590 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Bit [2]
Reserved, RES0.
When GICD_CTLR.DS==1:
31 10 9 8 7 6 5 4 3 2 1 0
RES0
EnableGrp0
EnableGrp1
RES0
FIQEn
CBPR
FIQBypDisGrp0
IRQBypDisGrp0
FIQBypDisGrp1
IRQBypDisGrp1
EOImode
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-591
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Bits [31:10]
Reserved, RES0.
Note
An implementation is permitted to make this bit RAO/WI.
8-592 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
When this register has an architecturally-defined reset value, if this field is implemented as an RW
field, it resets to 0.
Bit [2]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-593
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Component Offset
8-594 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
When interrupt priority drop is separated from interrupt deactivation, a write to this register
deactivates the specified interrupt.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_DIR provides equivalent functionality.
• For AArch64 implementations, ICC_DIR_EL1 provides equivalent functionality.
Writes to this register have an effect only in the following cases:
• When GICD_CTLR.DS == 1, if GICC_CTLR.EOImode == 1.
• In GIC implementations that support two Security states:
— If the access is Secure and GICC_CTLR.EOImodeS == 1.
— If the access is Non-secure and GICC_CTLR.EOImodeNS == 1.
The following writes must be ignored:
• Writes to this register when the corresponding EOImode field in GICC_CTLR == 0. In
systems that support system error generation, an implementation might generate a system
error.
• Writes to this register when the corresponding EOImode field in GICC_CTLR == 0 and the
corresponding interrupt is not active. In systems that support system error generation, an
implementation might generate a system error. In implementations using the GIC Stream
Protocol Interface these writes correspond to a Deactivate for an interrupt that is not active.
If the corresponding EOImode field in GICC_CTLR is 1 and this register is written to without a
corresponding write to GICC_EOIR or GICC_AEOIR, the interrupt is deactivated but the bit
corresponding to it in the active priorities registers remains set.
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
There are no configuration notes.
Attributes
GICC_DIR is a 32-bit register.
Field descriptions
The GICC_DIR bit assignments are:
31 24 23 0
RES0 INTID
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-595
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Bits [31:24]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
Component Offset
8-596 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
A write to this register performs priority drop for the specified interrupt and, if the appropriate
GICC_CTLR.EOImodeS or GICC_CTLR.EOImodeNS field == 0, also deactivates the interrupt.
Usage constraints
This register is accessible as follows:
WO WO WO
Configurations
If GICD_CTLR.DS==0:
• This register is Common.
• GICC_AEOIR is an alias of the Non-secure view of this register.
For Secure writes when GICD_CTLR.DS==0, or for Secure and Non-secure writes when
GICD_CTLR.DS==1, the register provides functionality for Group 0 interrupts.
For Non-secure writes when GICD_CTLR.DS==1, the register provides functionality for Group 1
interrupts.
Attributes
GICC_EOIR is a 32-bit register.
Field descriptions
The GICC_EOIR bit assignments are:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-597
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
Note
ARM recommends that software preserves the entire register value read from GICC_IAR, and writes that value
back to GICC_EOIR on completion of interrupt processing.
For nested interrupts, the order of writes to this register must be the reverse of the order of interrupt
acknowledgement. Behavior is UNPREDICTABLE if:
• The value written to this register does not match an active interrupt, or the ID of a spurious interrupt.
• The value written to this register does not match the last valid interrupt value read from GICC_IAR.
See Interrupt lifecycle on page 4-46 for general information about the effect of writes to end of interrupt registers,
and about the possible separation of the priority drop and interrupt deactivate operations.
If GICD_CTLR.DS==0:
Component Offset
8-598 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides the INTID of the highest priority pending interrupt on the CPU interface.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_HPPIR0 and ICC_HPPIR1 provide equivalent
functionality.
• For AArch64 implementations, ICC_HPPIR0_EL1 and ICC_HPPIR1_EL1 provide
equivalent functionality.
If the highest priority pending interrupt is in Group 0, a Non-secure read of this register returns the
special INTID 1023.
For Secure reads when GICD_CTLR.DS==0, or for Secure and Non-secure reads when
GICD_CTLR.DS==1, returns the special INTID 1022 if the highest priority pending interrupt is in
Group 1.
If no interrupts are in the pending state, a read of this register returns the special INTID 1023.
Interrupt identifiers corresponding to an interrupt group that is not enabled are ignored.
If the highest priority pending interrupt is a direct interrupt that is both individually enabled in the
Distributor and part of an interrupt group that is enabled in the Distributor, and the interrupt group
is disabled in the CPU interface for this PE, this register returns the special INTID 1023.
See Preemption on page 4-71 for more information about pending interrupts that are not considered
when determining the highest priority pending interrupt.
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
If GICD_CTLR.DS==0:
• This register is Common.
• GICC_AHPPIR is an alias of the Non-secure view of this register.
Attributes
GICC_HPPIR is a 32-bit register.
Field descriptions
The GICC_HPPIR bit assignments are:
31 24 23 0
RES0 INTID
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-599
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Bits [31:24]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
Component Offset
8-600 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides the INTID of the signaled interrupt. A read of this register by the PE acts as an
acknowledge for the interrupt.
Usage constraints
This register is accessible as follows:
RO RO RO
When GICD_CTLR.DS==1, if the highest priority pending interrupt is in Group 1, the special
INTID 1022 is returned.
In GIC implementations that support two Security states, if the highest priority pending interrupt is
in Group 0, Non-secure reads return the special INTID 1023.
In GIC implementations that support two Security states, if the highest priority pending interrupt is
in Group 1, Secure reads return the special INTID 1022.
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_IAR0 and ICC_IAR1 provide equivalent functionality.
• For AArch64 implementations, ICC_IAR0_EL1 and ICC_IAR1_EL1 provide equivalent
functionality.
When affinity routing is enabled for a Security state, it is a programming error to use
memory-mapped registers to access the GIC.
Configurations
This register is available in all configurations of the GIC. If GICD_CTLR.DS==0:
• This register is Common.
• GICC_AIAR is an alias of the Non-secure view of this register.
The format of the INTID is governed by whether affinity routing is enabled for a Security state.
Attributes
GICC_IAR is a 32-bit register.
Field descriptions
The GICC_IAR bit assignments are:
31 24 23 0
RES0 INTID
Bits [31:24]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-601
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
• There are no pending interrupts on the CPU interface with sufficient priority for the interface to signal it to
the PE.
When the GIC returns a valid INTID to a read of this register it treats the read as an acknowledge of that interrupt.
In addition, it changes the interrupt status from pending to active, or to active and pending if the pending state of
the interrupt persists. Normally, the pending state of an interrupt persists only if the interrupt is level-sensitive and
remains asserted.
For every read of a valid INTID from GICC_IAR, the connected PE must perform a matching write to GICC_EOIR.
Note
• ARM recommends that software preserves the entire register value read from this register, and writes that
value back to GICC_EOIR on completion of interrupt processing.
• For SPIs, although multiple target PEs might attempt to read this register at any time, only one PE can obtain
a valid INTID. See Activation on page 4-47 for more information.
Component Offset
8-602 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides information about the implementer and revision of the CPU interface.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
There are no configuration notes.
Attributes
GICC_IIDR is a 32-bit register.
Field descriptions
The GICC_IIDR bit assignments are:
31 20 19 16 15 12 11 0
Architecture_version
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-603
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
• Bits [6:0] are the JEP106 identity code of the implementer. For an ARM implementation, bits
[7:0] are therefore 0x3B.
Component Offset
8-604 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides information about Group 1 interrupt active priorities.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
The contents of these registers are IMPLEMENTATION DEFINED with the one architectural
requirement that the value 0x00000000 is consistent with no interrupts being active.
When GICD_CTLR.DS==0, these registers are RAZ/WI to Non-secure accesses.
GICC_NSAPR1 is only implemented in implementations that support 6 or more bits of priority.
GICC_NSAPR2 and GICC_NSAPR3 are only implemented in implementations that support 7 bits
of priority.
Attributes
GICC_NSAPR<n> is a 32-bit register.
Field descriptions
The GICC_NSAPR<n> bit assignments are:
31 0
IMPLEMENTATION DEFINED
When this register has an architecturally-defined reset value, this field resets to 0.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-605
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
This register provides an interrupt priority filter. Only interrupts with a higher priority than the value
in this register are signaled to the PE.
Note
Higher interrupt priority corresponds to a lower value of the Priority field.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states this register is Common.
Attributes
GICC_PMR is a 32-bit register.
Field descriptions
The GICC_PMR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
8-606 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
If the GIC implementation supports fewer than 256 priority levels some bits might be RAZ/WI, as
follows:
• For 128 supported levels, bit [0] = 0b0.
• For 64 supported levels, bits [1:0] = 0b00.
• For 32 supported levels, bits [2:0] = 0b000.
• For 16 supported levels, bits [3:0] = 0b0000.
See Interrupt prioritization on page 4-65 for more information.
This field resets to a value that is architecturally UNKNOWN.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-607
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
This register indicates the running priority of the CPU interface.
Usage constraints
This register is accessible as follows:
RO RO RO
If there is no active interrupt on the CPU interface, the idle priority value is returned.
If the GIC implementation supports two Security states, a Non-secure read of the Priority field
returns:
• 0x00 if the field value is less than 0x80.
• The Non-secure view of the Priority value if the field value is 0x80 or more.
See Interrupt prioritization on page 4-65 for more information.
Note
Software cannot determine the number of implemented priority bits from this register.
Configurations
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states this register is Common.
Attributes
GICC_RPR is a 32-bit register.
Field descriptions
The GICC_RPR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
8-608 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-609
ID072617 Non-Confidential
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Purpose
Provides software with a mechanism to detect:
• Accesses to reserved locations.
• Writes to read-only locations.
• Reads of write-only locations.
Usage constraints
GICC_STATUSR(S) is accessible as follows:
RW RW -
RW - RW
This is an optional register. If the register is not implemented, the location is RAZ/WI.
If this register is implemented, GICV_STATUSR must also be implemented.
Configurations
If the GIC implementation supports two Security states this register is Banked to provide Secure and
Non-secure copies.
This register is used only when System register access is not enabled. If System register access is
enabled, this register is not updated. Equivalent functionality might be provided by appropriate traps
and exceptions.
Attributes
GICC_STATUSR is a 32-bit register.
Field descriptions
The GICC_STATUSR bit assignments are:
31 5 4 3 2 1 0
RES0
RRD
WRD
RWOD
WROD
ASV
Bits [31:5]
Reserved, RES0.
8-610 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.13 The GIC CPU interface register descriptions
Note
This bit is not set to 1 for registers where any of the fields are Non-secure.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-611
ID072617 Non-Confidential
8 Programmers’ Model
8.14 The GIC virtual CPU interface register map
These registers provide the virtual CPU interface accessed by the virtual machine. Typically, a virtual machine is
unaware of any difference between virtual interrupts and physical interrupts. This means the programmers’ model
for handling virtual interrupts must be identical to that for handling physical interrupts. In general, these registers
have the same format as the GIC physical CPU interface registers, but they operate on the interrupt view defined
primarily by the List registers.
These registers are memory-mapped, with defined offsets from an IMPLEMENTATION DEFINED GICV_* register base
address.
Note
The offset of each GICV_* register is the same as the offset of the corresponding register for the physical CPU
interface. For example, GICV_PMR is at offset 0x0004 from the GICV_* register base address, and GICC_PMR is
at the same offset from the GICC_* register base address.
• The hypervisor can use the stage 2 address translations to map the virtual CPU interface accesses to the
correct physical addresses.
• Software, whether accessing the registers of a physical CPU interface or of a virtual CPU interface, uses the
same register addresses.
To enable use of 64KB pages, the GICV_* memory map must ensure that:
• An alias of the GICV_* registers is provided starting at offset 0xF000 from the start of the page such that a
second copy of GICV_DIR exists at the start of the next 64KB page.
8-612 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.14 The GIC virtual CPU interface register map
0x0030-0x003C - - - Reserved
0x00F0-0x00F8 - - - Reserved
0x0100-0x0FFC - - - Reserved
0x10000
0x1004-0x1FFC - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-613
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
8-614 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 1 interrupt preemption.
This register corresponds to GICC_ABPR in the physical CPU interface.
Note
GICH_LR<n>.Group determines whether a virtual interrupt is Group 0 or Group 1.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_BPR1 provides equivalent functionality.
• For AArch64 implementations, ICC_BPR1_EL1 provides equivalent functionality.
The value contained in this register is one greater than the actual applied binary point value, as
described in Priority grouping on page 4-67.
This register is used for Group 1 interrupts when GICV_CTLR.CBPR == 0. GICV_BPR provides
equivalent functionality for Group 0 interrupts, and for Group 1 interrupts when
GICV_CTLR.CBPR == 1.
Configurations
Some or all RW fields of this register have defined reset values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_ABPR is a 32-bit register.
Field descriptions
The GICV_ABPR bit assignments are:
31 3 2 0
RES0
Binary_Point
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-615
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
For information about how this field determines the interrupt priority bits assigned to the group
priority field, see Priority grouping on page 4-67.
When this register has an architecturally-defined reset value, this field resets to 0.
The Binary_Point field of this register is aliased to GICH_VMCR.VBPR1.
Component Offset
8-616 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
A write to this register performs a priority drop for the specified Group 1 virtual interrupt and, if
GICV_CTLR.EOImode == 0, also deactivates the interrupt.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_EOIR1 provides equivalent functionality.
• For AArch64 implementations, ICC_EOIR1_EL1 provides equivalent functionality.
This register is used for Group 1 interrupts only. GICV_EOIR provides equivalent functionality for
Group 0 interrupts.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_AEOIR is a 32-bit register.
Field descriptions
The GICV_AEOIR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-617
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
• The highest priority bit in GICH_APR<n> is cleared, causing the running priority to drop.
• If the appropriate GICV_CTLR.EOImode bit == 0, the interrupt is deactivated in the corresponding List
register. If the INTID corresponds to a hardware interrupt, the interrupt is also deactivated in the Distributor.
Note
Only Group 1 interrupts can target the hypervisor, and therefore only Group 1 interrupts are deactivated in the
Distributor.
A write to this register is UNPREDICTABLE if the INTID corresponds to a Group 0 interrupt. In addition, the following
GICv2 UNPREDICTABLE cases require specific actions:
• If highest active priority is Group 0 and the identified interrupt is in the List Registers and it matches the
highest active priority. When EL2 is using System registers and ICH_VTR_EL2.SEIS is 1, an
IMPLEMENTATION DEFINED SEI might be generated, otherwise GICv3 implementations must ignore such
writes.
• If the identified interrupt is in the List Registers, and the HW bit is 1, and the interrupt to be deactivated is
an SGI (that is, the value of Physical_ID is between 0 and 15). GICv3 implementations must perform the
deactivate operation. This means that a GICv3 implementation in legacy operation must ensure only a single
SGI is active for a PE.
• If the identified interrupt is in the List Registers, and the HW bit is 1, and the corresponding pINTID field
value is between 1020 and 1023, indicating a special purpose INTID. GICv3 implementations must not
perform a deactivate operation but must still change the state of the List register as appropriate. When EL2
is using System registers and ICH_VTR_EL2.SEIS is 1, an implementation might generate a system error.
Component Offset
8-618 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
8.15.3 GICV_AHPPIR, Virtual Machine Aliased Highest Priority Pending Interrupt Register
The GICV_AHPPIR characteristics are:
Purpose
Provides the INTID of the highest priority pending Group 1 virtual interrupt in the List registers.
This register corresponds to the physical CPU interface register GICC_AHPPIR.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_HPPIR1 provides equivalent functionality.
• For AArch64 implementations, ICC_HPPIR1_EL1 provides equivalent functionality.
This register is used for Group 1 interrupts only. GICV_HPPIR provides equivalent functionality
for Group 0 interrupts.
The register does not return the INTID of an interrupt that is active and pending.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_AHPPIR is a 32-bit register.
Field descriptions
The GICV_AHPPIR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-619
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
A read of this register returns the spurious INTID 1023 if any of the following are true:
• There are no pending interrupts of sufficiently high priority value to be signaled to the PE.
Component Offset
8-620 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides the INTID of the signaled Group 1 virtual interrupt. A read of this register by the PE acts
as an acknowledge for the interrupt.
This register corresponds to the physical CPU interface register GICC_AIAR.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_IAR1 provides equivalent functionality.
• For AArch64 implementations, ICC_IAR1_EL1 provides equivalent functionality.
This register is used for Group 1 interrupts only. GICV_IAR provides equivalent functionality for
Group 0 interrupts.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_AIAR is a 32-bit register.
Field descriptions
The GICV_AIAR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-621
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
The operation of this register is similar to the operation of GICV_IAR. When a vPE reads this register, the
corresponding GICH_LR<n>.Group field is checked to determine whether the interrupt is in Group 0 or Group 1:
• If the interrupt is Group 0, the spurious INTID 1023 is returned and the interrupt is not acknowledged.
• If the interrupt is Group 1, the INTID is returned. The List register entry is updated to active state, and the
appropriate bit in GICH_APR<n> is set to 1.
A read of this register returns the spurious INTID 1023 if any of the following are true:
Component Offset
8-622 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides information about interrupt active priorities.
These registers correspond to the physical CPU interface registers GICC_APR<n>.
Usage constraints
This register is accessible as follows:
RW RW RW
If System register access is not enabled for EL2, these registers access GICH_APR<n>. If System
register access is enabled for EL2, these registers access ICH_AP1R<n>_EL2. All active priority
mapped guests are held in the accessed registers, regardless of interrupt group.
Configurations
When System register access is disabled for EL2, these registers access GICH_APR<n>, and all
active priorities for virtual machines are held in GICH_APR<n> regardless of interrupt group.
When System register access is enabled for EL2, these registers access ICH_AP1R<n>_EL2, and
all active priorities for virtual machines are held in ICH_AP1R<n>_EL2 regardless of interrupt
group.
Attributes
GICV_APR<n> is a 32-bit register.
Field descriptions
The GICV_APR<n> bit assignments are:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-623
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
8-624 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Defines the point at which the priority value fields split into two parts, the group priority field and
the subpriority field. The group priority field determines Group 0 interrupt preemption.
This register corresponds to GICC_BPR in the physical CPU interface.
Note
GICH_LR<n>.Group determines whether a virtual interrupt is Group 0 or Group 1.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_BPR0 provides equivalent functionality.
• For AArch64 implementations, ICC_BPR0_EL1 provides equivalent functionality.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
When GICV_CTLR.CBPR == 1, this register determines interrupt preemption for both Group 0 and
Group 1 interrupts.
Attributes
GICV_BPR is a 32-bit register.
Field descriptions
The GICV_BPR bit assignments are:
31 3 2 0
RES0
Binary_Point
Bits [31:3]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-625
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
8-626 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Controls the behavior of virtual interrupts.
This register corresponds to the physical CPU interface register GICC_CTLR.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_CTLR provides equivalent functionality.
• For AArch64 implementations, ICC_CTLR_EL1 provides equivalent functionality.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when a GIC implementation supports interrupt virtualization.
Attributes
GICV_CTLR is a 32-bit register.
Field descriptions
The GICV_CTLR bit assignments are:
31 10 9 8 5 4 3 2 1 0
RES0 RES0
EnableGrp0
EnableGrp1
AckCtl
FIQEn
CBPR
EOImode
Bits [31:10]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-627
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
When it has completed processing the interrupt, the virtual machine writes to
GICV_EOIR or GICV_AEOIR to deactivate the interrupt. The write updates the List
registers and causes the virtual CPU interface to signal the interrupt completion to the
physical Distributor.
1 Writes to GICV_EOIR and GICV_AEOIR perform priority drop operation only. Writes
to GICV_DIR perform deactivate interrupt operation only.
At some point during interrupt processing, the virtual machine writes to GICV_EOIR
or GICV_AEOIR. This write drops the priority of the virtual interrupt by updating its
entry in the List registers.
When it has completed processing the interrupt, the virtual machine writes to
GICV_DIR to deactivate the interrupt. The write updates the List registers and causes
the virtual CPU interface to signal the interrupt completion to the Distributor.
This field resets to a value that is architecturally UNKNOWN.
Bits [8:5]
Reserved, RES0.
8-628 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-629
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Deactivates a specified virtual interrupt in the GICH_LR<n> List registers.
This register corresponds to the physical CPU interface register GICC_DIR.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_DIR provides equivalent functionality.
• For AArch64 implementations, ICC_DIR_EL1 provides equivalent functionality.
Writes to this register are valid only when GICV_CTLR.EOImode == 1. Writes to this register are
otherwise UNPREDICTABLE.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_DIR is a 32-bit register.
Field descriptions
The GICV_DIR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
8-630 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
When the virtual machine writes to this register, the specified interrupt in the List registers is changed from active
to inactive, or from active and pending to pending. If the specified interrupt is present in the List registers but is not
in either the active or active and pending states, the effect is UNPREDICTABLE. If the specified interrupt is not present
in the List registers, GICH_HCR.EOIcount is incremented, potentially generating a maintenance interrupt.
Note
If the specified interrupt is not present in the List registers, the virtual machine cannot recover the INTID. Therefore,
the hypervisor must ensure that, when GICV_CTLR.EOImode == 1, no more than one active interrupt is transferred
from the List registers into a software list. If more than one active interrupt that is not stored in the List registers
exists, the hypervisor must handle accesses to GICV_DIR in software, typically by trapping these accesses.
If the corresponding GICH_LR<n>.HW == 1, indicating a hardware interrupt, then a deactivate request is sent to
the physical Distributor, identifying the physical INTID from the corresponding field in the List register. This effect
is identical to a Non-secure write to GICC_DIR from the PE having that physical INTID. This means that if the
corresponding physical interrupt is marked as Group 0, the request is ignored.
Note
Interrupt deactivation using this register is based on the provided INTID, with no requirement to deactivate
interrupts in any particular order. A single register therefore deactivates both Group 0 and Group 1 interrupts.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-631
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
A write to this register performs a priority drop for the specified Group 0 virtual interrupt and, if
GICV_CTLR.EOImode == 0, also deactivates the interrupt.
This register corresponds to the physical CPU interface register GICC_EOIR.
Usage constraints
This register is accessible as follows:
WO WO WO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_EOIR0 provides equivalent functionality.
• For AArch64 implementations, ICC_EOIR0_EL1 provides equivalent functionality.
This register is used for Group 0 interrupts only. GICV_AEOIR provides equivalent functionality
for Group 1 interrupts.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_EOIR is a 32-bit register.
Field descriptions
The GICV_EOIR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
8-632 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
GICV_CTLR.EOImode Behavior
0 Both the priority drop and the deactivate interrupt effects occur.
• The highest priority bit in GICH_APR<n> is cleared, causing the running priority to drop.
• If the appropriate GICV_CTLR.EOImode bit == 0, the interrupt is deactivated in the corresponding List
register GICH_LR<n>. If GICH_LR<n>.HW == 1, indicating the INTID corresponds to a hardware
interrupt, a deactivate request is also sent to the physical Distributor, identifying the physical INTID from the
corresponding field in the List register. This effect is identical to a Non-secure write to GICC_DIR from the
PE having that physical INTID. This means that if the corresponding physical interrupt is marked as Group
0, and GICD_CTLR.DS == 0, the deactivation request is ignored. See GICC_EOIR for more information.
Note
Only Group 1 interrupts can target the hypervisor, and therefore only Group 1 interrupts are deactivated in the
Distributor.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-633
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides the INTID of the highest priority pending Group 0 virtual interrupt in the List registers.
This register corresponds to the physical CPU interface register GICC_HPPIR.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_HPPIR0 provides equivalent functionality.
• For AArch64 implementations, ICC_HPPIR0_EL1 provides equivalent functionality.
This register is used for Group 0 interrupts only. GICV_AHPPIR provides equivalent functionality
for Group 1 interrupts.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_HPPIR is a 32-bit register.
Field descriptions
The GICV_HPPIR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
8-634 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Reads of the GICC_HPPIR that do not return a valid INTID return a spurious INTID, 1022 or 1023. See Special
INTIDs on page 2-32.
1 Secure 0 1022
0 Non-secure x 1023
If the CPU interface supports only a single Security state, the entries that apply to Secure reads describe the
behavior.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-635
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides the INTID of the signaled Group 0 virtual interrupt. A read of this register by the PE acts
as an acknowledge for the interrupt.
This register corresponds to the physical CPU interface register GICC_IAR.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_IAR0 provides equivalent functionality.
• For AArch64 implementations, ICC_IAR0_EL1 provides equivalent functionality.
This register is used for Group 0 interrupts only. GICV_AIAR provides equivalent functionality for
Group 1 interrupts.
When affinity routing is enabled, it is a programming error to use memory-mapped registers to
access the GIC.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_IAR is a 32-bit register.
Field descriptions
The GICV_IAR bit assignments are:
31 25 24 0
RES0 INTID
Bits [31:25]
Reserved, RES0.
Note
INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.
8-636 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
When the virtual machine writes to this register, the virtual CPU interface acknowledges the highest priority
pending virtual interrupt and sets the state in the corresponding List register to active. The appropriate bit in the
active priorities register GICH_APR<n> is set to 1.
If GICH_LR<n>.HW == 0, indicating that the interrupt is software-triggered, then bits [12:10] of GICH_LR<n>
are returned in bits [12:10] of GICV_IAR. Otherwise bits [12:10] are RES0.
A read of this register returns the spurious INTID 1023 if either of the following is true:
• There are no pending interrupts of sufficiently high priority value to be signaled to the PE with the virtual
CPU interface enabled and GICH_HCR.En == 1.
A read of this register returns the spurious INTID 1022 if the highest priority pending interrupt is Group 1 and
GICV_CTLR.AckCtl == 0.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-637
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides information about the implementer and revision of the virtual CPU interface.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states this register is Common.
Attributes
GICV_IIDR is a 32-bit register.
Field descriptions
The GICV_IIDR bit assignments are:
31 20 19 16 15 12 11 0
Architecture_version
8-638 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
• Bits [6:0] are the JEP106 identity code of the implementer. For an ARM implementation, bits
[7:0] are therefore 0x3B.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-639
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
This register provides a virtual interrupt priority filter. Only virtual interrupts with a higher priority
than the value in this register are signaled to the PE.
Note
Higher interrupt priority corresponds to a lower value of the Priority field.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_PMR provides equivalent functionality.
• For AArch64 implementations, ICC_PMR_EL1 provides equivalent functionality.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
The Priority field of this register is aliased to GICH_VMCR.VMPR, to enable state to be switched
easily between virtual machines during context-switching.
Attributes
GICV_PMR is a 32-bit register.
Field descriptions
The GICV_PMR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
8-640 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-641
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
This register indicates the running priority of the virtual CPU interface.
This register corresponds to the physical CPU interface register GICC_RPR.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICC_RPR provides equivalent functionality.
• For AArch64 implementations, ICC_RPR_EL1 provides equivalent functionality.
Depending on the implementation, if no bits are set to 1 in GICH_APR<n>, indicating no active
virtual interrupts in the virtual CPU interface, the priority reads as 0xFF or 0xF8 to reflect the number
of supported interrupt priority bits defined by GICH_VTR.PRIbits.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICV_RPR is a 32-bit register.
Field descriptions
The GICV_RPR bit assignments are:
31 8 7 0
RES0 Priority
Bits [31:8]
Reserved, RES0.
8-642 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-643
ID072617 Non-Confidential
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Purpose
Provides software with a mechanism to detect:
• Accesses to reserved locations.
• Writes to read-only locations.
• Reads of write-only locations.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
In systems where this register is implemented, ARM expects that when a virtual machine is
scheduled, the hypervisor ensures that this register is cleared to 0. The hypervisor might check for
illegal accesses when the virtual machine is unscheduled.
Attributes
GICV_STATUSR is a 32-bit register.
Field descriptions
The GICV_STATUSR bit assignments are:
31 4 3 2 1 0
RES0
RRD
WRD
RWOD
WROD
Bits [31:4]
Reserved, RES0.
8-644 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.15 The GIC virtual CPU interface register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-645
ID072617 Non-Confidential
8 Programmers’ Model
8.16 The GIC virtual interface control register map
Table 8-32 shows the register map for the GIC virtual interface control registers.
0x000C - - - Reserved
0x0014-0x001C - - - Reserved
0x0024-0x002C - - - Reserved
0x0034-0x00EC - - - Reserved
a. Each bit that has a corresponding List register resets to 1, meaning that the reset value of the register depends on the
number of List registers implemented.
Note
It is IMPLEMENTATION DEFINED whether an access to a GIC virtual interface control register using the
memory-mapped interface accesses the same state as an access using the System register interface, or whether the
two interfaces access different states.
8-646 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-647
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
These registers track which preemption levels are active in the virtual CPU interface, and indicate
the current active priority. Corresponding bits are set to 1 in this register when an interrupt is
acknowledged, based on GICH_LR<n>.Priority, and the least significant bit set is cleared on EOI.
Usage constraints
This register is accessible as follows:
RW RW RW
These registers are used only when System register access is not enabled. When System register
access is enabled the following registers provide equivalent functionality:
• In AArch64:
— For Group 0, ICH_AP0R<n>_EL2.
— For Group 1, ICH_AP1R<n>_EL2.
• In AArch32:
— For Group 0, ICH_AP0R<n>.
— For Group 1, ICH_AP1R<n>.
Configurations
Some or all RW fields of this register have defined reset values.
This register is available when the GIC implementation supports interrupt virtualization.
The number of registers required depends on how many bits are implemented in
GICH_LR<n>.Priority:
• When 5 priority bits are implemented, 1 register is required (GICH_APR0).
• When 6 priority bits are implemented, 2 registers are required (GICH_APR0, GICH_APR1).
• When 7 priority bits are implemented, 4 registers are required (GICH_APR0, GICH_APR1,
GICH_APR2, GICH_APR3).
Unimplemented registers are RAZ/WI.
Attributes
GICH_APR<n> is a 32-bit register.
Field descriptions
The GICH_APR<n> bit assignments are:
8-648 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
P31 P10
P30 P11
P29 P12
P28 P13
P27 P14
P26 P15
P25
P24
P23
P22
P21
P20
P19
P18
P17
P16
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-649
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Component Offset
8-650 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Indicates which List registers have outstanding EOI maintenance interrupts.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_EISR provides equivalent functionality.
• For AArch64 implementations, ICH_EISR_EL2 provides equivalent functionality.
Bits corresponding to unimplemented List registers are RAZ.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_EISR is a 32-bit register.
Field descriptions
The GICH_EISR bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-651
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Component Offset
8-652 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Indicates which List registers contain valid interrupts.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_ELRSR provides equivalent functionality.
• For AArch64 implementations, ICH_ELRSR_EL2 provides equivalent functionality.
Bits corresponding to unimplemented List registers are RES0.
Configurations
Some or all RW fields of this register have defined reset values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_ELRSR is a 32-bit register.
Field descriptions
The GICH_ELRSR bit assignments are:
31 16 15 0
Bits [31:16]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-653
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Component Offset
8-654 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Controls the virtual CPU interface.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_HCR provides equivalent functionality.
• For AArch64 implementations, ICH_HCR_EL2 provides equivalent functionality.
GICH_HCR.En must be set to 1 for any virtual or maintenance interrupt to be asserted.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_HCR is a 32-bit register.
Field descriptions
The GICH_HCR bit assignments are:
31 27 26 8 7 6 5 4 3 2 1 0
EOICount RES0 En
UIE
LRENPIE
NPIE
VGrp0EIE
VGrp0DIE
VGrp1EIE
VGrp1DIE
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-655
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Bits [26:8]
Reserved, RES0.
8-656 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
See Maintenance interrupts on page 5-85 and GICH_MISR for more information.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-657
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
These registers provide context information for the virtual CPU interface.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_LR<n> provides equivalent functionality.
• For AArch64 implementations, ICH_LR<n>_EL2 provides equivalent functionality.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
A maximum of 16 List registers can be provided. GICH_VTR.ListRegs defines the number
implemented. Unimplemented List registers are RAZ/WI.
Attributes
GICH_LR<n> is a 32-bit register.
Field descriptions
The GICH_LR<n> bit assignments are:
31 30 29 28 27 23 22 20 19 10 9 0
HW
Group
8-658 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Note
GICV_CTLR.CBPR controls whether GICV_BPR or GICV_ABPR determines if a pending Group
1 interrupt has sufficient priority to preempt current execution.
Note
For hardware interrupts, the active and pending state is held in the Distributor rather than the virtual
CPU interface. A hypervisor must only use the active and pending state for software originated
interrupts, which are typically associated with virtual devices, or for SGIs.
Bits [22:20]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-659
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Component Offset
8-660 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Indicates which maintenance interrupts are asserted.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_MISR provides equivalent functionality.
• For AArch64 implementations, ICH_MISR_EL2 provides equivalent functionality.
A maintenance interrupt is asserted only if at least one bit is set to 1 in this register and if
GICH_HCR.En == 1.
Configurations
Some or all RW fields of this register have defined reset values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_MISR is a 32-bit register.
Field descriptions
The GICH_MISR bit assignments are:
31 8 7 6 5 4 3 2 1 0
RES0 NP U
EOI
LRENP
VGrp0E
VGrp0D
VGrp1E
VGrp1D
Bits [31:8]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-661
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
When this register has an architecturally-defined reset value, this field resets to 0.
U, bit [1]
Underflow.
0 Underflow maintenance interrupt not asserted.
1 Underflow maintenance interrupt asserted.
This maintenance interrupt is asserted when GICH_HCR.UIE == 1 and zero or one of the List
register entries are marked as a valid interrupt.
When this register has an architecturally-defined reset value, this field resets to 0.
8-662 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Note
A List register is in the pending state only if the corresponding GICH_LR<n> value is 01, that is, pending. The active
and pending state is not included.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-663
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Enables the hypervisor to save and restore the virtual machine view of the GIC state. This register
is updated when a virtual machine updates the virtual CPU interface registers.
Usage constraints
This register is accessible as follows:
RW RW RW
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_VMCR provides equivalent functionality.
• For AArch64 implementations, ICH_VMCR_EL2 provides equivalent functionality.
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_VMCR is a 32-bit register.
Field descriptions
The GICH_VMCR bit assignments are:
31 24 23 21 20 18 17 10 9 8 5 4 3 2 1 0
VENG0
VENG1
VAckCtl
VFIQEn
VCBPR
VEOIM
8-664 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Bits [17:10]
Reserved, RES0.
Bits [8:5]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-665
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Note
A List register is in the pending state only if the corresponding GICH_LR<n> value is 01, that is, pending. The active
and pending state is not included.
Component Offset
8-666 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Purpose
Indicates the number of implemented virtual priority bits and List registers.
Usage constraints
This register is accessible as follows:
RO RO RO
This register is used only when System register access is not enabled. When System register access
is enabled:
• For AArch32 implementations, ICH_VTR provides equivalent functionality.
• For AArch64 implementations, ICH_VTR_EL2 provides equivalent functionality.
Configurations
This register is available when the GIC implementation supports interrupt virtualization.
Attributes
GICH_VTR is a 32-bit register.
Field descriptions
The GICH_VTR bit assignments are:
31 29 28 26 25 23 22 21 20 5 4 0
SEIS
A3V
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-667
ID072617 Non-Confidential
8 Programmers’ Model
8.17 The GIC virtual interface control register descriptions
Bits [20:5]
Reserved, RES0.
Component Offset
8-668 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.18 The ITS register map
Table 8-33 shows the GIC register map for the ITS control registers.
0x0010-0x001C - - - Reserved
0x0040-0x007C - - - Reserved
0x0080 GITS_CBASER RW See the register description ITS Command Queue Descriptor
0x0098-0x00FC - - - Reserved
0x0100-0x0138 GITS_BASER<n> RW See the register description ITS Translation Table Descriptors
0x0140-0xBFFC - - - Reserved
Table 8-34 shows the GIC register map for the ITS translation registers.
0x0000-0x003C - - - Reserved
0x0044-0xFFFC - - - Reserved
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-669
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
8-670 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Specifies the base address and size of the ITS translation tables.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
A copy of this register is provided for each ITS translation table.
Bits [63:32] and bits [31:0] are accessible independently.
A maximum of 8 GITS_BASER<n> registers can be provided. Unimplemented registers are RES0.
When GITS_CTLR.Enabled == 1 or GITS_CTLR.Quiescent == 0, writing this register is
UNPREDICTABLE.
Attributes
GITS_BASER<n> is a 64-bit register.
Field descriptions
The GITS_BASER<n> bit assignments are:
63 62 61 59 58 56 55 53 52 48 47 12 11 10 9 8 7 0
Valid Page_Size
Indirect Shareability
InnerCache
OuterCache
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-671
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Note
The minimum number of entries that an ITS must support is N+1, where N is the number of physical
PEs in the system.
8-672 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-673
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Note
If the GIC implementation supports only a single, fixed page size, this field might be RO.
Component Offset
8-674 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Specifies the base address and size of the ITS command queue.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
Bits [63:32] and bits [31:0] are accessible separately.
Attributes
GITS_CBASER is a 64-bit register.
Field descriptions
The GITS_CBASER bit assignments are:
63 62 61 59 58 56 55 53 52 51 12 11 10 9 8 7 0
Valid RES0
RES0 Shareability
InnerCache
OuterCache
RES0
Bit [62]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-675
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Bits [58:56]
Reserved, RES0.
Bit [52]
Reserved, RES0.
If bits [15:12] are not all zeros, behavior is a CONSTRAINED UNPREDICTABLE choice:
• Bits [15:12] are treated as if all the bits are zero. The value read back from those bits is either
the value written or zero.
• The result of the calculation of an address for a command queue read can be corrupted.
This field resets to a value that is architecturally UNKNOWN.
8-676 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Bits [9:8]
Reserved, RES0.
Note
When this register is successfully written, the value of GITS_CREADR is set to zero.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-677
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Specifies the offset from GITS_CBASER where the ITS reads the next ITS command.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is cleared to 0 when a value is written to GITS_CBASER.
Bits [63:32] and bits [31:0] are accessible separately.
Attributes
GITS_CREADR is a 64-bit register.
Field descriptions
The GITS_CREADR bit assignments are:
63 20 19 5 4 1 0
Stalled
Bits [63:20]
Reserved, RES0.
Bits [4:1]
Reserved, RES0.
See The ITS command interface on page 6-105 for more information.
8-678 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-679
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Controls the operation of an ITS.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
Some or all RW fields of this register have defined reset values.
The ITS_Number (bits [7:4]) and bit [1] fields apply only in GICv4 implementations, and are RES0
in GICv3 implementations.
Attributes
GITS_CTLR is a 32-bit register.
Field descriptions
The GITS_CTLR bit assignments are:
31 30 8 7 4 3 2 1 0
RES0
Quiescent Enabled
ImDe
RES0
ITS_Number
Note
In distributed GIC implementations, this bit is set to 1 only after the ITS forwards any operations
that have not yet been completed to the Redistributors and receives confirmation that all such
operations have reached the appropriate Redistributor.
Bits [30:8]
Reserved, RES0.
8-680 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Bits [3:2]
Reserved, RES0.
When this register has an architecturally-defined reset value, this field resets to 0.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-681
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Specifies the offset from GITS_CBASER where software writes the next ITS command.
Usage constraints
This register is accessible as follows:
RW RW RW
Configurations
RW fields in this register reset to architecturally UNKNOWN values.
Bits [63:32] and bits [31:0] are accessible separately.
Attributes
GITS_CWRITER is a 64-bit register.
Field descriptions
The GITS_CWRITER bit assignments are:
63 20 19 5 4 1 0
Retry
Bits [63:20]
Reserved, RES0.
Bits [4:1]
Reserved, RES0.
See The ITS command interface on page 6-105 for more information.
8-682 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
• The command queue is considered invalid, and no further commands are processed until GITS_CWRITER
is written with a value that is in the valid range.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-683
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Provides information about the implementer and revision of the ITS.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
This register is available in all configurations of the GIC. If the GIC implementation supports two
Security states, this register is Common.
Attributes
GITS_IIDR is a 32-bit register.
Field descriptions
The GITS_IIDR bit assignments are:
31 24 23 20 19 16 15 12 11 0
Bits [23:20]
Reserved, RES0.
8-684 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-685
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Written by a requesting a Device to signal an interrupt for translation by the ITS.
Usage constraints
This register is accessible as follows:
WO WO WO
16-bit access to bits [15:0] of this register must be supported. When this register is written by a
16-bit transaction, bits [31:16] are written as zero.
Implementations must ensure that:
• A unique DeviceID is provided for each requesting device, and the DeviceID is presented to
the ITS when a write to this register occurs in a manner that cannot be spoofed by any agent
capable of performing writes.
• The DeviceID presented corresponds to the DeviceID field in the ITS commands.
Writes to this register are ignored if any of the following are true:
• GITS_CTLR.Enabled == 0.
• The presented DeviceID is not mapped to an Interrupt Translation Table.
• The DeviceID is larger than the supported size.
• The DeviceID is mapped to an Interrupt Translation Table, but the EventID is outside the
range specified by MAPD.
• The EventID is mapped to an Interrupt Translation Table and the EventID is within the range
specified by MAPD, but the EventID is unmapped.
Translation requests that result from writes to this register are subject to certain ordering rules. See
Ordering of translations with the output to ITS commands on page 6-107 for more information.
Configurations
This register is at the same offset as GICD_SETSPI_NSR in the Distributor, and is at the same offset
as GICR_SETLPIR in the Redistributor.
Attributes
GITS_TRANSLATER is a 32-bit register.
Field descriptions
The GITS_TRANSLATER bit assignments are:
31 0
EventID
8-686 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
Note
The size of the EventID is DeviceID specific, and set when the DeviceID is mapped to an ITT (using
MAPD).
The DeviceID presented to an ITS indexes a device table. The device table maps the DeviceID to an interrupt
translation table for that device.
Component Offset
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-687
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Purpose
Specifies the features that an ITS supports.
Usage constraints
This register is accessible as follows:
RO RO RO
Configurations
There are no configuration notes.
Attributes
GITS_TYPER is a 64-bit register.
Field descriptions
The GITS_TYPER bit assignments are:
63 38 37 36 35 32 31 24 23 20 19 18 17 13 12 8 7 4 3 2 1 0
VMOVP Physical
CIL Virtual
CCT
IMP DEF
ITT_entry_size
SEIS
PTA
Bits [63:38]
Reserved, RES0.
8-688 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.19 The ITS register descriptions
In implementations that do not support Collections in external memory, this bit is RES0 and the
number of Collections supported is reported by GITS_TYPER.HCC.
Note
Collections held in hardware are unmapped at reset.
Bits [23:20]
Reserved, RES0.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-689
ID072617 Non-Confidential
8 Programmers’ Model
8.19 The ITS register descriptions
Component Offset
8-690 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
8.20 Pseudocode
AArch64 functions shows the pseudocode for the System registers when executing in AArch64 state. The same
pseudocode can be used for the System registers when executing in AArch32 state by substituting the AArch64
register names with the equivalent AArch32 register names.
Note
An AArch64 register name includes the lowest Exception level that can access the register as a suffix to the register
name. An AArch32 register name does not contain this suffix. For example the AArch64 Interrupt Controller
Deactivate Interrupt Register is ICC_DIR_EL1, while the AArch32 equivalent is ICC_DIR.
Functions for memory-mapped registers on page 8-704 shows the pseudocode for the memory-mapped registers.
Note
Some variable names used the pseudocode differ from those used in the body text. For a list of the affected variables,
see Pseudocode terminology on page B-762.
aarch64/support/ICC_DIR_EL1
// ICC_DIR_EL1 - assignment form
// =============================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-691
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
// Check for spurious ID. LPIs are not allowed and the access is physical
if !InterruptIdentifierValid(data, FALSE) then
return;
ID = data<INTID_SIZE-1:0>;
return;
aarch64/support/ICC_EOIR0_EL1
// ICC_EOIR0_EL1 - assignment form
// ===============================
eoiID = data<INTID_SIZE-1:0>;
// Check for spurious ID. LPIs are allowed and the access is physical
if !InterruptIdentifierValid(data, TRUE) then
return;
8-692 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
return;
aarch64/support/ICC_EOIR1_EL1
// ICC_EOIR1_EL1 - assignment form
// ===============================
eoiID = data<INTID_SIZE-1:0>;
// Check for spurious ID. LPIs are allowed and the access is physical
if !InterruptIdentifierValid(data, TRUE) then
return;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-693
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
return;
aarch64/support/ICC_HPPIR0_EL1
// ICC_HPPIR0_EL1 - non-assignment form
// ====================================
bits(32) ICC_HPPIR0_EL1[]
return ZeroExtend(pendID);
aarch64/support/ICC_HPPIR1_EL1
// ICC_HPPIR1_EL1 - non-assignment form
// ====================================
bits(32) ICC_HPPIR1_EL1[]
return ZeroExtend(pendID);
aarch64/support/ICC_IAR0_EL1
// ICC_IAR0_EL1 - non-assignment form
// ==================================
bits(32) ICC_IAR0_EL1[]
8-694 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
return ZeroExtend(pendID);
aarch64/support/ICC_IAR1_EL1
// ICC_IAR1_EL1 - non-assignment form
// ==================================
bits(32) ICC_IAR1_EL1[]
return ZeroExtend(pendID);
aarch64/support/ICC_PMR_EL1
// ICC_PMR_EL1[] - non-assignment form
// ===================================
bits(32) ICC_PMR_EL1[]
pPriority = ICC_PMR_EL1.Priority;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-695
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
return ZeroExtend(pPriority);
return;
aarch64/support/ICC_RPR_EL1
// ICC_RPR_EL1 - non-assignment form
// =================================
bits(32) ICC_RPR_EL1[]
return ZeroExtend(pPriority);
aarch64/support/ICH_EISR_EL2
// ICH_EISR_EL2 - non-assignment form
// ==================================
8-696 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
bits(32) ICH_EISR_EL2[]
bits(32) rval = Zeros();
for i = 0 to NumListRegs() - 1
if (ICH_LR_EL2[i].State == IntState_Invalid && ICH_LR_EL2[i].HW == '0' &&
ICH_LR_EL2[i].EOI == '1') then
rval<i> = '1';
return rval;
aarch64/support/ICH_ELSR_EL2
// ICH_ELSR_EL2 - non-assignment form
// ==================================
bits(32) ICH_ELSR_EL2[]
bits(32) rval = Zeros();
for i = 0 to NumListRegs() - 1
if (ICH_LR_EL2[i].State == IntState_Invalid &&
(ICH_LR_EL2[i].HW == '1' || ICH_LR_EL2[i].EOI == '0')) then
rval<i> = '1';
return rval;
aarch64/support/VirtualReadHPPIR0
// VirtualReadHPPIR0()
// ===================
bits(32) VirtualReadHPPIR0()
lrIndex = HighestPriorityVirtualInterrupt();
else
vID = INTID_SPURIOUS;
return ZeroExtend(vID);
aarch64/support/VirtualReadHPPIR1
// VirtualReadHPPIR1()
// ===================
bits(32) VirtualReadHPPIR1()
lrIndex = HighestPriorityVirtualInterrupt();
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-697
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
else
vID = INTID_SPURIOUS;
return ZeroExtend(vID);
aarch64/support/VirtualReadIAR0
// VirtualReadIAR0()
// =================
bits(32) VirtualReadIAR0()
if !CanSignalVirtualInterrupt() then
return ZeroExtend(INTID_SPURIOUS);
return ZeroExtend(vID);
aarch64/support/VirtualReadIAR1
// VirtualReadIAR1()
8-698 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
// =================
bits(32) VirtualReadIAR1()
if !CanSignalVirtualInterrupt() then
return ZeroExtend(INTID_SPURIOUS);
return ZeroExtend(vID);
aarch64/support/VirtualWriteDIR
// VirtualWriteDIR()
// =================
VirtualWriteDIR(bits(64) data)
// Check for spurious ID. LPIs are not allowed and the access is virtual
if !VirtualIdentifierValid(data, FALSE) then
return;
ID = data<INTID_SIZE-1:0>;
lrIndex = FindActiveVirtualInterrupt(ID);
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-699
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
// No valid list register corresponds to the EOI ID, increment EOI count
ICH_HCR_EL2.EOIcount = ICH_HCR_EL2.EOIcount + 1;
return;
return;
aarch64/support/VirtualWriteEOIR0
// VirtualWriteEOIR0()
// ===================
VirtualWriteEOIR0(bits(64) data)
eoiID = data<24-1:0>;
vPriority = GetHighestActiveVPriority(ICH_AP0R_EL2, ICH_AP1R_EL2);
// Check the identifier is valid. LPIs are allowed and the access is virtual
if !VirtualIdentifierValid(data, TRUE) then
return;
if !drop then
if ICH_VTR_EL2.SEIS == '1' then
// Reporting of locally generated virtual SEIs is supported
IMPLEMENTATION_DEFINED "SError EOI0_HIGHEST_IS_G1";
// It is IMPLEMENTATION DEFINED whether the priority is dropped before the error checks
if boolean IMPLEMENTATION_DEFINED "Drop before checks" then
VPriorityDrop[ICH_AP0R_EL2, ICH_AP1R_EL2] = '0';
dropped = TRUE;
else
dropped = FALSE;
if IsLPI(eoiID) then
// It is a virtual LPI not in the List Registers
// so just priority drop and return without incrementing EOI count
return;
else
// No valid list register corresponds to the EOI ID, increment EOI count
if drop && ICH_VMCR_EL2.VEOIM == '0' then
ICH_HCR_EL2.EOIcount = ICH_HCR_EL2.EOIcount + 1;
8-700 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
return;
return;
aarch64/support/VirtualWriteEOIR1
// VirtualWriteEOIR1()
// ===================
VirtualWriteEOIR1(bits(64) data)
eoiID = data<24-1:0>;
vPriority = GetHighestActiveVPriority(ICH_AP0R_EL2, ICH_AP1R_EL2);
// Check for spurious ID. LPIs are allowed and the access is virtual
if !VirtualIdentifierValid(data, TRUE) then
return;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-701
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
if !drop then
if ICH_VTR_EL2.SEIS == ‘1’ then
// Reporting of locally generated virtual SEIs is supported
IMPLEMENTATION_DEFINED “SError EOI1_HIGHEST_IS_G0”;
// It is IMPLEMENTATION DEFINED whether the priority is dropped before the error checks
if boolean IMPLEMENTATION_DEFINED “Drop before checks” then
VPriorityDrop[ICH_AP0R_EL2, ICH_AP1R_EL2] = ‘0’;
dropped = TRUE;
else
dropped = FALSE;
8-702 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
return;
aarch64/support/CheckGroup0ForSpecialIdentifiers
// CheckGroup0ForSpecialIdentifiers()
// ==================================
return pendID;
aarch64/support/CheckGroup1ForSpecialIdentifiers
// CheckGroup1ForSpecialIdentifiers()
// ==================================
return pendID;
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-703
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
aarch64/support/PRIMask
// PRIMask()
// =========
bits(8) PRIMask()
pri_bits = UInt(if HaveEL(EL3) then ICC_CTLR_EL3.PRIbits else ICC_CTLR_EL1.PRIbits);
return Ones(pri_bits + 1):Zeros(7 - pri_bits);
aarch64/support/VRIMask
// VPRIMask()
// ==========
bits(8) VPRIMask()
pri_bits = UInt(ICH_VTR_EL2.PRIbits);
return Ones(pri_bits + 1):Zeros(7 - pri_bits);
shared/support/GICC_AIAR
// GICC_AIAR[] - non-assignment form
// =================================
pendID = HighestPriorityPendingInterrupt(cpu_id);
return ZeroExtend(pendID);
shared/support/GICC_EOIR_NS
// GICC_EOIR_NS[] - assignment form
// ================================
8-704 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
8 Programmers’ Model
8.20 Pseudocode
return;
shared/support/GICC_EOIR_S
// GICC_EOIR_S[] - assignment form
// ===============================
elsif pGroup == IntGroup_G0 && IsSecure() then // Group 0 and the access is Secure
// Drop the priority
PriorityDrop(cpu_id, pPriority);
// Deactivate the interrupt if EOI mode is not set
if !EOImodeSet(cpu_id) then Deactivate(cpu_id, data<15:0>);
elsif pGroup == 'IntGroup_G0' && !IsSecure() then // Group 0 and the access is Non-secure
if boolean IMPLEMENTATION_DEFINED "GICC_STATUSR implemented" then
// Set the attempted security violation bit
GICC_STATUSR.ASV = '1';
else // Group 1
IMPLEMENTATION_DEFINED "SError EOI0_HIGHEST_IS_G1";
return;
shared/support/GICC_IAR_NS
// GICC_IAR_NS[] - non-assignment form
// ===================================
pendID = HighestPriorityPendingInterrupt(cpu_id);
// If the highest priority isn't enabled or is for the other security state then no interrupt
if (!IsGrp0Int(pendID) && GICC_CTLR.EnableGrp1NS == '0') || IsGrp0Int(pendID) then
pendID = INTID_SPURIOUS;
return ZeroExtend(pendID);
shared/support/GICC_IAR_S
// GICC_IAR_S[] - non-assignment form
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 8-705
ID072617 Non-Confidential
8 Programmers’ Model
8.20 Pseudocode
// ==================================
pendID = HighestPriorityPendingInterrupt(cpu_id);
// If the highest priority isn't enabled or is for the other security state then no interrupt
if (IsGrp0Int(pendID) && GICC_CTLR.EnableGrp0 == '0') || !IsGrp0Int(pendID) then
pendID = INTID_SPURIOUS;
return ZeroExtend(pendID);
shared/support/GICV_IAR
// GICV_IAR[] - non-assignment form
// ================================
lrIndex = HighestPriorityVirtualInterrupt(cpu_id);
vID = ICH_LR_EL2[lrIndex].VirtualID<INTID_SIZE-1:0>;
return rval;
8-706 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 9
System Error Reporting
This chapter describes GIC support for System Error reporting. It contains the following section:
• About System Error reporting on page 9-708.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 9-707
ID072617 Non-Confidential
9 System Error Reporting
9.1 About System Error reporting
Whether a CPU interface supports locally-generated system error interrupts associated with physical interrupts is
discoverable from either ICC_CTLR_EL1.SEIS or ICC_CTLR_EL3.SEIS. The GIC reports these using the
ARMv8 SError exception. The ITS can also generate system errors, see the description of the GITS_TYPER.SEIS
bit.
Whether the GIC supports locally-generated system error interrupts associated with virtual interrupts is
discoverable from ICH_VTR_EL2.SEIS. The GIC reports these using either the SError exception or the virtual
SError exception. Locally-generated System Error interrupts from Non-secure EL1 are reported:
• Using the virtual SError exception, when HCR_EL2.AMO == 1. Where supported, a virtual SError exception
is normally taken to Non-secure EL1.
The hypervisor can intercept locally-generated system error interrupts using ICH_HCR_EL2.TSEI.
9.1.1 Pseudocode
The following pseudocode indicates whether a local system error is generated.
// GenerateLocalSError()
// =====================
boolean GenerateLocalSError()
if HaveEL(EL3) then
return ICC_CTLR_EL3.SEIS == ‘1’;
else
return ICC_CTLR_EL1.SEIS == ‘1’;
9-708 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Chapter 10
Legacy Operation and Asymmetric Configurations
This chapter describes GIC support for legacy operation and asymmetric configurations. It contains the following
sections:
• Legacy support of interrupts and asymmetric configurations on page 10-710.
• The asymmetric configuration on page 10-714.
• Support for legacy operation of VMs on page 10-715.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 10-709
ID072617 Non-Confidential
10 Legacy Operation and Asymmetric Configurations
10.1 Legacy support of interrupts and asymmetric configurations
• GICC_CTLR.AckCtl is RAZ/WI, and separate registers must handle Group 0 and Group 1 physical
interrupts.
• The GICv2 configuration lockdown feature and the associated CFGSDISABLE signal are not supported.
GICD_TYPER.LSPI is RES0.
• For asymmetric operation, a routing modifier bit is used as part of the security context switch control
mechanism that handles the highest priority pending interrupt. See The asymmetric configuration on
page 10-714 for more information.
In addition, software executing in Secure state in a system that is configured for asymmetric operation is not
permitted to manage Non-secure interrupts:
— When ICC_CTLR_EL3.RM == 1, it is a requirement that GICC_CTLR.FIQen == 1 or the behavior
of Secure EL1 is UNPREDICTABLE.
• A hypervisor executing at EL2 can only control virtual interrupts for the PE that it is executing on, and cannot
control virtual interrupts on other PEs.
• The individual enables for SGIs, GICD_ISENABLER<n> where n=0, always reset to zero.
• Interrupts that belong to a group that is disabled in GICD_CTLR cannot block interrupts that belong to a
group that is enabled. This means that if the highest priority pending interrupt is in a group that is disabled,
this does not prevent the GIC from forwarding interrupts that are in a group that is enabled to the CPU
interfaces.
Note
Secure Group 1 interrupts are treated as Group 0 interrupts during legacy operation.
In GICv3, the following restrictions apply when the Non-secure state is using affinity routing and the Secure state
is not using affinity routing:
• GICD_ITARGETSR<n> is RES0 for any SPI where affinity routing is enabled for the current Security state.
Note
— Legacy Secure software cannot re-route Non-secure interrupts because GICD_IROUTER<n> is
inaccessible to Secure accesses, and might not be interpreted correctly.
— Legacy Secure software can change the group of the interrupt.
• The mapping between the bit positions and the affinity is IMPLEMENTATION DEFINED, and is reported by
GICR_TYPER.Processor_Number.
• If an SGI is generated in Non-secure state and GICD_CTLR.DS = 0 then a Group 0 SGI cannot be set as
pending, irrespective of the value of GICD_NSACR<n>.
• If an SGI is generated in Secure state and routed using the Targeted list model, that is
GICD_SGIR.TargetListFilter = 0b00, then the SGI must be delivered to those PEs whose number is indicated
by the appropriate bit in GICD_SGIR.CPUTargetList. The number of a particular PE is indicated in
GICR_TYPER.Processor_Number.
When GICD_SGIR.TargetListFilter == 0b01, the SGI must be delivered to all PEs except the PE that
requested the interrupt. This includes PEs with GICR_TYPER.Processor_Number >7.
Note
Software executing in Secure state that does not use affinity routing cannot use a Non-secure alias to
GICD_SGIR to generate Non-secure SGIs, because this would result in a Non-secure write to GICD_SGIR,
and GICD_SGIR is RAZ/WI when affinity routing is enabled for the Non-secure state.
10-710 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
10 Legacy Operation and Asymmetric Configurations
10.1 Legacy support of interrupts and asymmetric configurations
When affinity routing is disabled for the Security state of an access, GICD_SGIR behaves as defined for GICv2,
with the following exceptions:
• Writing to GICD_SGIR from a PE with GICR_TYPER.Processor_Number > 7 results in one of the following
CONSTRAINED UNPREDICTABLE behaviors:
— The write is ignored.
— The originating PE ID is treated as having an UNKNOWN valid value.
• Writing to GICD_SGIR when the TargetListFilter field is 11 results in one of the following CONSTRAINED
UNPREDICTABLE behaviors:
— The write is ignored.
— The TargetListFilter field is treated as having an UNKNOWN valid value.
In GICv2, pending SGIs were banked by the originating PE and by the target PE. In GICv3 this is simplified so that
when affinity routing is enabled for a Security state, pending SGIs are only banked by the target PE:
When the ARE bit in GICD_CTLR is set to 1 for a Security state, some Distributor registers that were banked for
each PE are changed:
• GICD_SPENDSGIR<n>is RES0. In GICv3 SGIs are not pending by originating PE and the equivalent
functionality is provided by GICR_ISPENDR0[0:15].
• GICD_CPENDSGIR<n> is RES0. In GICv3 SGIs are not pending by originating PE and the equivalent
functionality is provided by GICR_ICPENDR0.
Writes to ICC_SGI0R_EL1, ICC_SGI1R_EL1, and ICC_ASGI1R_EL1 only generate SGIs for the other Security
state when affinity routing is enabled for both Security states:
• When the Distributor supports two Security states, that is when GICD_CTLR.DS == 0, and affinity routing
is disabled for the Secure state in the Distributor, then Non-secure writes to ICC_SGI0R_EL1 and
ICC_ASGI1R_EL1 do not set any SGIs pending.
• When the Distributor supports only a single Security state, that is when GICD_CTLR.DS == 1, then
Non-secure writes to both ICC_SGI0R_EL1 and ICC_ASGI1R_EL1 result in the generation of Group 0
SGIs.
For further information about the GICv2 architecture, see ARM® Generic Interrupt Controller, Architecture version
2.0, Architecture Specification.
INTID 1022 indicates that there is a Group 1 interrupt of sufficient priority to be signalled to the PE, and that the
interrupt must be acknowledged by a read of GICC_AIAR or GICV_AIAR, or observed by a read of
GICC_AHPPIR or GICV_AHPPIR, as appropriate.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 10-711
ID072617 Non-Confidential
10 Legacy Operation and Asymmetric Configurations
10.1 Legacy support of interrupts and asymmetric configurations
• GICD_CTLR.DS == 0, and the system is using affinity routing for Non-secure physical interrupts. In this
case, the Secure copy of ICC_SRE_EL1.SRE is cleared to 0. This configuration supports a legacy Secure
operating system environment together with a Non-secure environment that supports affinity routing. This
configuration is referred to as an asymmetric configuration.
Legacy operation is a deprecated feature. In an implementation that does not support legacy operation the following
bits, where implemented, are RAO/WI:
• ICC_SRE_EL1.SRE.
• ICC_SRE_EL2.SRE.
• ICC_SRE_EL3.SRE.
• ICC_SRE.SRE.
• ICC_HSRE.SRE.
• ICC_MSRE.SRE.
• GICD_CTLR.ARE_NS.
• GICD_CTLR.ARE_S.
The following pseudocode defines the bypass behavior for an FIQ interrupt exception.
if GICC_CTLR.FIQEn == 0 then
if (GICC_CTLR.FIQBypDisGrp0 && GICC_CTLR.FIQBypDisGrp1) == 0 then
use BypassFIQsource
else
FIQ deasserted
else
if GICC_CTLR.EnableGrp0 == 0 then
if GICC_CTLR.FIQBypDisGrp0 == 0 then
use BypassFIQsource
else
FIQ deasserted
else
use GICv3 FIQ output
The following pseudocode defines the bypass behavior for an IRQ interrupt exception.
if FIQEn == 0 then
if (GICC_CTLR.EnableGrp1 || GICC_CTLR.EnableGrp0) == 0 then
if (GICC_CTLR.IRQBypDisGrp0 && GICC_CTLR.IRQBypDisGrp1) == 0 then
use BypassIRQsource
else
IRQ deasserted
else
use GICv3 IRQ Output
else
if GICC_CTLR.EnableGrp1 == 0 then
if GICC_CTLR.IRQBypDisGrp1 == 0 then
10-712 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
10 Legacy Operation and Asymmetric Configurations
10.1 Legacy support of interrupts and asymmetric configurations
use BypassIRQsource
else
IRQ Deasserted
else
Use GICv3 IRQ Output
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 10-713
ID072617 Non-Confidential
10 Legacy Operation and Asymmetric Configurations
10.2 The asymmetric configuration
Note
If EL2 is implemented and using the System register interface, a vPE can access the memory-mapped interface.
Note
This situation is not compatible with the use of Secure Group 1 interrupts, as this concept is new in GICv3 and is
therefore not understood by legacy Secure OS code.
In an asymmetric configuration, when GICC_CTLR.FIQEn == 0, the interrupts that are described as being signaled
as FIQs in Table 4-3 on page 4-60 are signaled as IRQs.
When ICC_CTLR_EL3.RM == 1:
• Secure Group 0 interrupts return a special INTID value of 1020. This affects accesses to ICC_IAR0_EL1,
ICC_HPPIR0_EL1, ICC_IAR1_EL1, and ICC_HPPIR1_EL1.
• Non-secure Group 1 interrupts return a special INTID value of 1021. This affects accesses to
ICC_IAR0_EL1, ICC_HPPIR0_EL1, ICC_IAR1_EL1, and ICC_HPPIR1_EL1.
For more information about special INTIDs, see Special INTIDs on page 2-32.
10-714 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
10 Legacy Operation and Asymmetric Configurations
10.3 Support for legacy operation of VMs
The following constraints apply to virtual interrupts that are handled as part of legacy operation:
• The GICv2 configuration lockdown feature is not supported. This means that a hypervisor must virtualize
GICD_TYPER.LSPI as a RAZ/WI bit to the scheduled legacy VM.
• A multiprocessing VM can support a maximum of eight vPEs, which is the maximum number of PEs that
are supported in GICv2. These vPEs are independently associated with the same Redistributor or with
different Redistributors.
Note
Legacy operation for virtual interrupts supports GICV_CTLR.AckCtl. Legacy operation for physical interrupts
does not support GICC_CTLR.AckCtl.
During legacy operation, GICV_CTLR controls the signaling of interrupts by the CPU interface to the PE, as
follows:
• GICV_CTLR.EnableGrp0 bit controls the signaling of Group 0 interrupts.
• GICV_CTLR.EnableGrp1 bit controls the signaling of Group 1 interrupts.
For detailed information about the control and configuration of Group 0 and Group 1 PPI, SGI, and SPI interrupts,
and their virtualization during legacy operation, see ARM® Generic Interrupt Controller, Architecture version 2.0,
Architecture Specification.
10.3.1 Accessing GIC virtual CPU interface registers using the memory-mapped register interface
The virtual CPU interface is in the Non-secure memory map. A hypervisor uses the Non-secure stage 2 address
translations to ensure that the vPE cannot access other memory-mapped GIC registers.
Figure 10-1 on page 10-716 shows a GICv3 configuration executing in AArch64 state where:
• Affinity routing and System register access are enabled for Non-secure accesses, that is
GICD_CTLR.ARE_NS == 1 and ICC_SRE_EL2.SRE == 1.
• Virtualization is supported, that is ICH_HCR_EL2.En == 1.
• EL1 is configured to support legacy operation, that is ICC_SRE_EL1(NS).SRE == 0.
• The PE is configured to handle virtual interrupts, using HCR_EL2.{IMO, FMO}.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. 10-715
ID072617 Non-Confidential
10 Legacy Operation and Asymmetric Configurations
10.3 Support for legacy operation of VMs
GITS_*
GICD_*
GICR_* GICR_*
ICC_* ICC_*
PE PE
10-716 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A
GIC Stream Protocol interface
This appendix describes the AXI4-Stream protocol standard message-based interface that the optional GIC Stream
Protocol interface uses. It contains the following sections:
• Overview on page A-718.
• Signals and the GIC Stream Protocol on page A-719.
• The GIC Stream Protocol on page A-722.
• Alphabetic list of command and response packet formats on page A-727.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-717
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.1 Overview
A.1 Overview
The GIC Stream Protocol interface describes the optional interface between the IRI and the PE, more specifically
that between the Redistributor and the associated CPU interface. The interface supports independent development
of an IRI and a PE, that includes System register support for the CPU interface. ARM recommends that a GIC
implementation uses this stream protocol interface.
A communication channel that provides a packet interface, based on the AMBA 4 AXI-4 Stream Protocol, is
required for each direction:
• From the Redistributor to the CPU interface.
• From the CPU interface to the Redistributor.
See Signals and the GIC Stream Protocol on page A-719 for more information.
A.1.1 Terminology
The direction of communication for commands is referred to as downstream or upstream, where:
• Downstream is the direction associated with a command that is initiated by a Redistributor and sent to its
associated CPU interface.
• Upstream is the direction associated with a command initiated by a CPU interface and sent to its associated
Redistributor.
Note
This terminology can also be applied to communication within an IRI, that is between the Distributor and
Redistributor. In this case:
• An upstream transfer is a transfer from a Redistributor to the Distributor.
• A downstream transfer is a transfer from the Distributor to a Redistributor.
A-718 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.2 Signals and the GIC Stream Protocol
• An upstream AXI4-Stream Interface containing connections from one or more CPU interface to an
equivalent number of Redistributors. On this interface, the CPU interface is the master and the Redistributor
is the slave.
Multiple packets on an AXI4-Stream Interface cannot be interleaved, that is, only one packet can be transferred in
each direction at a given time.
Figure A-1 shows an example implementation of the GIC Stream Protocol interface.
IRI
AXI4-Stream
protocol
interface
Cluster
PE PE PE PE
a.b.c.0 a.b.c.1 a.b.c.2 a.b.c.3
The GIC architecture requires a GIC implementation to include a Redistributor corresponding to each connected
CPU interface, and defines an enumeration notation for identifying PEs. On any AXI4-Stream Interface, each
Redistributor must only communicate with its corresponding CPU interface.
The AMBA® 4 AXI4-Stream Protocol Specification defines a packet as a group of bytes that are transported together
across an AXI4-Stream interface.
An interconnect between an IRI and a CPU interface must ensure that the stream packet sequence is transferred over
the stream protocol interface in the same order in which it was created.
A.2.1 Signals
The interface requires a global clock, ACLK, and a reset signal, ARESETn.
For the GIC Stream Protocol, each stream interface is identified by a prefix to the AXI-4 signal names:
• Downstream signals from a Redistributor to the CPU interface are prefixed with the letters IRI.
• Upstream signals from the CPU interface to a Redistributor are prefixed with the letters ICC.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-719
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.2 Signals and the GIC Stream Protocol
Table A-1 shows the GIC Stream Protocol interface from the Redistributor to the downstream CPU interface.
Signal a Description
IRITVALID When set to 1, this signal indicates that the master is driving a valid transfer.
IRITREADY When set to 1, this signal indicates that the slave can accept a transfer in the current
cycle.
IRITLAST When set to 1, this signal indicates the final transfer of a packet.
IRITDEST[N:0] When more than one PE is supported by the stream interface, this signal identifies the
target CPU interface to provide routing information for the stream.Otherwise this signal
is not required.
a. These signals were previously prefixed with ICD in the preliminary architecture information.
Table A-2 shows the GIC Stream Protocol interface from the CPU interface to the upstream Redistributor.
Signal Description
ICCTVALID When set to 1, this signal indicates that the master is driving a valid transfer.
ICCTREADY When set to 1, this signal indicates that the slave can accept a transfer in the current
cycle.
ICCTLAST When set to 1, this signal indicates the final transfer of a packet.
ICCTID[N:0] When more than one PE is supported by the stream interface, this signal identifies
the originating CPU interface, to provide routing information for the stream.
Otherwise this signal is not required.
For further information about the signals used by the GIC Stream Protocol interface, and for details about
handshaking, see AMBA® 4 AXI4-Stream Protocol Specification.
The declared size of a packet is always a multiple of the implemented datapath width used for the stream transfer.
Where the number of bytes required by a packet is less than the overall packet size, the unused bytes are marked as
reserved and filled with the value zero.
A-720 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.2 Signals and the GIC Stream Protocol
Note
Reserved fields must be transmitted.
A downstream control command is used during interface initialization to inform a CPU interface whether the IRI
supports 24-bit INTIDs.
For a 24-bit INTID where bits[23:16] have the value zero, the stream interface is allowed to identify and transfer
the packet with a 16-bit INTID field.
A protocol error occurs when a PE generates a packet using a 24-bit INTID with nonzero bits[23:16] and the IRI
only supports 16-bit INTIDs.
The Downstream Control Acknowledge command from the CPU interface returns the maximum INTID lengths
supported by both the Redistributor and the CPU interface. The Redistributor and the CPU interface must not send
a command that contains an INTID exceeding this length.
When both the Redistributor and the CPU interface support an INTID length larger than 16 bits, but the value of an
INTID in a particular packet can only be encoded using 16 bits, it is permissible to send a 16-bit value, where ID
length == 0b00.
Where errors exist in the values of fields within packets, this is called a packet error. Protocol and packet errors can
cause UNPREDICTABLE behavior.The manner in which these errors are reported is IMPLEMENTATION DEFINED.
In high reliability systems, implementations might choose to report such cases using IMPLEMENTATION DEFINED
system errors, but this is outside the scope of the architecture.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-721
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.3 The GIC Stream Protocol
Note
The Activate and Release commands are designated as a command, but also provide a response semantic to the Set
and VSet commands. See the Activate and Release commands for more details.
Clear 0x3 Bits[7:6]: ID length INTID Resets a specified pending physical interrupt.
Downstream 0x8 Bit[15:12]: Length Length bytes of Writes data to the CPU interface.
Control Bits[11:4]: Identifier data Length must be greater than 0 and less than 9.
Quiesce 0x4 - - Requests that the CPU interface enters the quiescent state.
Set 0x1 Bits[15:8]: Priority INTID Sets the highest priority pending physical interrupt for a PE.
Bits[7:6]: ID length
Bit[5] GrpMod
Bit[4]: Group
VClear 0x7 Bits[7:6]: ID length Virtual INTID Resets a specified pending virtual interrupt.
This command is provided in GICv4 only.
VSet 0x6 Bits[15:8]: Priority Virtual INTID Sets the highest priority pending virtual interrupt for a VM.
Bits[7:6]: ID length This command is provided in GICv4 only.
Bit[4]: Group
A-722 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.3 The GIC Stream Protocol
All other command and response IDs are reserved. If the Redistributor receives a reserved ID, this constitutes a
protocol error, see Software generation of protocol errors and packet errors on page A-721.
Data in
Parameters in the
Command ID subsequent Description
first 16-bit transfer
transfers
Activate 0x1 Bits[7:6]: ID length INTID A pending to active notification request as a result of
Bit[4]: V an interrupt acknowledge on the CPU interface.
Deactivate 0x6 Bits[10:8]: Groups INTID Deactivate request for a specified interrupt.
Bits[7:6]: ID length
Generate SGI 0x7 Bits[59:56]: RS Affinity Routing Requests that the Redistributor issues an SGI.
Bits[15:12] SGInum Values (A0 to A3)
Bit[9]: RSV
Bit[8]: A3V
Bits[7]: IRM
Bit[6]: NS
Bit[5:4]: SGT
Upstream Control 0x8 Bits[15:12]: Length Length bytes of data A system control command that might, for example,
Bits[11:4]: Identifier pass the configuration status to the Redistributor.
Length must be greater than 0 and less than 9.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-723
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.3 The GIC Stream Protocol
Clear Acknowledge 0x4 Bit [4]: V - Acknowledges that the CPU interface received a Clear
command for a specified interrupt.
Release 0x3 Bits[7:6] ID length INTID Releases control of an interrupt when the CPU interface
Bit[4]: V cannot handle the interrupt, and provides a reason for
the release.
All other command and response IDs are reserved. If the CPU interface receives a reserved ID, this constitutes a
protocol error, see Software generation of protocol errors and packet errors on page A-721.
A command packet has an equivalent handshake response packet that acknowledges the command. There are two
exceptions to this rule:
• The Clear and VClear commands are both acknowledged by a Clear Acknowledge response with a bitfield
in the header that indicates which command is acknowledged.
• The Set and VSet command packets are acknowledged by a Release response or an Activate command. This
means that the Activate command also has the semantics of a response with respect to the Set and VSet
commands. When an Activate command is used, the Redistributor acknowledges that command with an
Activate Acknowledge response. Release, Activate, and Activate Acknowledge packets all have a bitfield in
the header that indicates whether the response is to a Set or VSet command.
Responses to a Set or VSet command are dependent on system contexts and events on the CPU interface. A
Release response occurs when a pending interrupt that has been forwarded to the CPU interface cannot be
maintained as pending or activated by the CPU interface. This can occur, for example, when:
— The interrupt group of the INTID is disabled.
— The highest pending physical interrupt is updated by a Set command before it is activated.
— The highest pending virtual interrupt is updated by a VSet command before it is activated.
• When GICR_WAKER.ProcessorSleep == 0, the first packet that is issued to the CPU interface must be a
Downstream Control packet. This packet communicates the number of supported Security states, together
with the physical and virtual INTID lengths that the GIC Stream Protocol interface supports.
• There can never be more than one outstanding Downstream Control command, and a Redistributor must only
generate response packets until the Downstream Control command is acknowledged.
• On receipt of a Set command, a CPU interface is required to release the previous pending physical interrupt
back to the Redistributor.
• Unless restricted by another rule in this section, two Set commands can be generated and outstanding at the
same time, and the Redistributor must be able to accept an Activate command for a physical interrupt when
a Set command is transferred.
A-724 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.3 The GIC Stream Protocol
• On receipt of a VSet command, a CPU interface is required to release the previous pending virtual interrupt
back to the Redistributor.
• A VSet command must only be generated when the Redistributor is able to accept an Activate command for
a virtual interrupt while the VSet command is being transferred.
• There can never be more than one outstanding Clear command.A Redistributor cannot generate further
packets, other than acknowledgement packets, until the Clear command is acknowledged.
• There can never be more than one outstanding VClear command. A Redistributor cannot generate further
packets, other than acknowledgement packets, until the VClear command is acknowledged.
• There can never be more than one outstanding Quiesce command, and a Redistributor must only generate
response packets until the Quiesce command is acknowledged with a Quiesce Acknowledge.
• A Redistributor must not send a VSet or VClear command to a CPU interface that does not support GICv4.
The mechanism for determining whether GICv4 is supported is IMPLEMENTATION DEFINED.
• There can never be more than one outstanding Upstream Control command, and a CPU interface must wait
for an Upstream Control Acknowledge before issuing another Upstream Control command.
• There can never be more than one outstanding Deactivate command. This means that a CPU interface must
wait for a Deactivate command to be acknowledged before issuing another Deactivate command. The CPU
interface can continue to send other commands before receiving the Deactivate Acknowledge response.
• There can never be more than one outstanding Generate SGI command. This means that a CPU interface must
wait for a Generate SGI command to be acknowledged before issuing another Generate SGI command. The
CPU interface can continue to send other commands before receiving the Generate SGI Acknowledge
response.
• Before issuing a Clear Acknowledge response with the V bit set to 0, the CPU interface must issue any
Release commands that are required to move the physical interrupt specified in the Clear command to the
inactive state on the CPU interface.
• Before issuing a Clear Acknowledge response with the V bit set to 1, the CPU interface must issue any
Release commands that are required to move the virtual interrupt specified in the VClear command to the
inactive state on the CPU interface.
• Before issuing a Quiesce Acknowledge response, all other outstanding commands from the Redistributor
must be acknowledged, and a Release command must remove any pending interrupts on the CPU interface.
Priority-based routing
When ICC_CTLR_EL3.PMHE == 0, or ICC_CTLR_EL1.PMHE == 0:
• The CPU interface must not issue a Release command for a pending SPI because the priority of the SPI is
equal to or less than that indicated by ICC_PMR_EL1.
Note
The CPU interface might still issue a Release command for a pending SPI for other reasons, such as the SPI
belonging to a group that is disabled in the CPU interface, or in response to receipt of a Clear command from
the IRI.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-725
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.3 The GIC Stream Protocol
• The CPU interface must issue a Release command for a pending SPI with a priority that is equal to or less
than the value in ICC_PMR_EL1, if the Set command was received between the architectural execution of
the instruction that updated ICC_PMR_EL1 and the receipt of the Upstream Control Acknowledge command
that indicates that the new ICC_PMR_EL1 value has been observed.
• The CPU interface must not issue a Release command for a pending SPI with a priority that is greater than
the value in ICC_PMR_EL1 if the Set command was not received between the architectural execution of the
instruction that updated ICC_PMR_EL1 and the receipt of the Upstream Control Acknowledge that indicates
that the new ICC_PMR_EL1 value has been observed.
Note
The CPU interface might still issue a Release command for a pending SPI for other reasons, such as the SPI
belonging to a group that is disabled in the CPU interface or in response to receipt of a Clear command from
the IRI.
A-726 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-727
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
The Activate command generated by the CPU interface, unlike other commands, also acts as a response to a Set or
VSet command:
• A Set or VSet command results in a Release response or Activate command in finite time. The amount of
time is determined by when the pending interrupt changes its state within the CPU interface. An Activate
command acknowledges the original Set command. The Activate command is itself acknowledged using an
Activate Acknowledge response from the Redistributor.
15 7 6 5 4 3 0
INTID[15:0]
INTID[31:16]a
In Figure A-2:
• ID length indicates the number of INTID bits the Activate command includes. See Supported INTID sizes on
page A-721 for more information.
• V indicates the original command the to which the Activate command corresponds:
0 The Activate corresponds to a Set command.
1 The Activate corresponds to a VSet command.
• INTID is the value that the CPU interface returns after a valid read of ICC_IAR0_EL1, ICC_IAR1_EL1, or
GICC_IAR.
Note
During legacy operation, the INTID that is returned for SGIs includes the source PE in the
GICC_IAR.Source_CPU_ID field.
A-728 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 5 4 3 0
In Figure A-3, V indicates the original command to which the Activate Acknowledge corresponds:
0b0 The Activate Acknowledge corresponds to a Set command.
0b1 The Activate Acknowledge corresponds to a VSet command.
Note
There is no requirement for ActivateAcknowledge commands to be issued in the same order as the Activate
command to which they are responding.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-729
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 8 7 6 5 4 3 0
INTID[15:0]
INTID[31:16]a
In Figure A-4:
• ID length indicates the number of INTID bits that the Clear command includes. See Supported INTID sizes
on page A-721 for more information.
The CPU interface must always respond to a Clear command with a Clear Acknowledge response where V == 0.
If the interrupt is pending in the CPU interface, the CPU interface must issue a Release response, or an Activate
response that remains outstanding for the interrupt before it issues a Clear Acknowledge command.
If the interrupt is not pending or present on the CPU interface, the Clear command has no effect. However, the CPU
interface must still issue a Clear Acknowledge response.
15 8 7 6 5 4 3 0
In Figure A-5, V indicates the original command to which the Clear Acknowledge corresponds:
0 The Clear Acknowledge corresponds to a Clear command.
1 The Clear Acknowledge corresponds to a VClear command.
Note
No INTID field is required for this command because only a single Clear can be outstanding for a CPU interface at
any time.
A-730 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 12 11 10 8 7 6 5 4 3 0
INTID[15:0]
In Figure A-6:
• Groups indicates the interrupt groups that the initiating Exception level and Security state are permitted to
modify:
Bit[10] When this bit is set to 1, Secure Group 1 interrupts can be modified.
Bit[9] When this bit is set to 1, Non-secure Group 1 interrupts can be modified.
Bit[8] When this bit is set to 1, Group 0 interrupts can be modified.
Note
When sending a Deactivate command, at least one of the Groups bits must be set to 1. A protocol error occurs
if none of these bits are set to 1.
• ID length indicates the number of INTID bits the Deactivate command includes. See Supported INTID sizes
on page A-721 for more information. The Deactivate command applies only to SPIs, PPIs, and SGIs, each of
which has INTIDs no higher than 8192. This field must therefore be set to 0b00, indicating a 16-bit INTID.
• INTID is the 32-bit value read from the corresponding interrupt acknowledge cycle that is presented in the
write to ICC_EOIR0_EL1 or ICC_EOIR1_EL1.
Note
There is no requirement for the CPU interface to have received the corresponding Activate Acknowledge command
before sending the Deactivate command.
When System register access is enabled for the initiating Exception level and Security state, one of the Groups bits
is set according to the rules in Groups field when System register access is enabled on page A-732.
Note
In an implementation that supports two Security states, for Secure EL1 to be permitted to handle Group 1 interrupts,
that is, IRQs not taken to EL3, both bit[9] and bit[10] must be set to 1.
When System register access is not enabled for the initiating Exception level and Security state, the Groups field is
set according to the Security state of the initiating Exception level. That is, bit [9] is set to 1 for Non-secure write
access, and bits [10:8] are all set to 1 for Secure write access. In an implementation that supports only a single
Security state, write accesses that result in the generation of a Deactivate command are treated as Secure writes.
In an implementation that supports two Security states, Group 0 and Secure Group 1 interrupts can be modified only
from a Secure initiating Exception level. This includes EL3, regardless of the setting of SCR_EL3.NS. In an
implementation that supports only a single Security state, the Redistributor can ignore bit[10].
Note
The Redistributor must send a Deactivate Acknowledge in response to a Deactivate command.
• If affinity routing is enabled for an interrupt group, the Redistributor must acknowledge, but otherwise
ignore, any Deactivate command with an ID in the range 1019 < INTID < 8192.
• If affinity routing is not enabled for an interrupt group, the Redistributor must acknowledge, but otherwise
ignore any Deactivate command with an ID in the range 1019 < INTID < 8192 where bits [9:4] are not 0.
That is, it might issue Deactivate packets for SGIs with a non-zero CPU number in bits[12:10] of GICC_IAR.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-731
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
• If affinity routing is not enabled for an interrupt group and the ID specifies an SGI, and the PE specified by
the CPU number in bits[12:10] does not support operation when affinity routing is not enabled, the
Redistributor must acknowledge but otherwise ignore the Deactivate command.
// DeactivateGroups_SRE()
// ======================
If the Deactivate command relates to a virtual interrupt that has a corresponding physical interrupt in the List
registers, that is ICH_LR<n>_EL2.HW is set to 1, a virtual write caused the deactivation of the physical interrupt.
The bits are set as if an equivalent write had been performed at EL2. That is, effective_EL == 2.
15 4 3 0
A-732 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 12 11 4 3 1 0
Data[1] Data[0]
Data[Length-1] Data[Length-2]
a. Settings Identifier
In Figure A-8:
• Length indicates the number of bytes of valid data appended to the 2 byte header.
If this field specifies a number of bytes that is not exactly divisible by the interface width, as Signals and the
GIC Stream Protocol on page A-719 describes, any surplus bytes beyond this specified length in the last
transfer must be zero. The CPU interface must ignore such bytes.
• Identifier is a value that specifies the format of the data provided, and can have the values shown in
Table A-7.
Identifier
Data value name Length Contents
value
Settings (configure 0x00 0x1 Data[0] holds the Redistributor global settings, and these bits have the
interface) following meanings:
[7:6] VL. Indicates the supported vINTID length.
[5:4] PL. Indicates the supported pINTID length.
[3:2] Reserved. RES0.
[1] RSS. Indicates the value of GICD_TYPER.RSS.
[0] DS. Disable Security. Indicates the value of GICD_CTLR.DS.
Note
Bit[0] is set to 1 if the GIC supports only a single Security state.
Note
Each identifier value can have a different length, but a particular identifier value must always have the same
length.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-733
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
The CPU interface must always respond to a Downstream Control command with a Downstream Control
Acknowledge response.
After the CPU interface receives a Downstream Control command where DS == 1, a packet protocol violation
occurs if it receives a subsequent Downstream Control command where DS == 0, before an intervening hardware
reset.
If a CPU interface receives an IMPLEMENTATION DEFINED value that it cannot interpret, this constitutes a protocol
error. See Software generation of protocol errors and packet errors on page A-721.
Note
The IMPLEMENTATION DEFINED values of the Downstream Write Command must only be used where the Distributor
and the CPU interface interpret the IMPLEMENTATION DEFINED values to mean the same thing. This is typically the
case where both components have been produced as part of the same system design.
15 8 7 6 5 4 3 0
In Figure A-9:
• VL indicates the virtual INTID length, that is, the supported number of INTID bits.
• PL indicates the physical INTID length, that is, the supported number of INTID bits.
A-734 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 12 11 10 9 8 7 6 5 4 3 0
Target List
A2 A1
a. Whether this part of the packet is transmitted depends on the value of A3V and
RSV.
In Figure A-10:
• A3V indicates whether the command includes an A3 field. When A3V is 0, the packet does not include an
A3 field, and the Redistributor must use 0 as the value of A3.When a CPU interface supports the Aff3 field
and a write to ICC_SGI0R, ICC_SGI1R or ICC_ASGI1R specifies Aff3 == 0, the resulting packet must clear
A3V to zero.
• IRM indicates the Interrupt Routing Mode to be used.When IRM is set to 1, Target List, A1, A2, and A3 are
ignored. The A3V field is RES0.
• NS indicates whether the Generate SGI command originates from Non-secure state:
0 The command originates from a Secure Execution state.
1 The command originates from a Non-secure Execution state.
• SGT specifies the register access that caused the Generate SGI command:
0b00 ICC_SGI0R_EL1.
0b01 ICC_SGI1R_EL1.
0b10 ICC_ASGI1R_EL1.
0b11 Reserved.
When the Redistributor supports two Security states and affinity routing is not enabled for the Secure state
in the Redistributor, Generate SGI commands that correspond to Non-secure writes to ICC_SGI0R_EL1 and
ICC_ASGI1R_EL1 must be acknowledged and discarded, and must not set an SGI pending.
When the Redistributor supports a single Security state, that is, GICD_CTLR.DS == 1, Generate SGI
commands that correspond to Non-secure writes to ICC_SGI0R_EL1 or ICC_ASGI1R_EL1 generate a
Group 0 SGI.
• Target List is the group of target PEs defined by the routing mode. For SGIs, the GIC routing mode defines
a group of target PEs, targetlist. This field is treated as defined in ICC_SGI0R_EL1, ICC_SGI1R_EL1, and
ICC_ASGI1R_EL1.
• A1, A2, and A3 are the affinity level values used for generating the set of target PEs. These fields are treated
in the same way as the Affinity value fields in ICC_SGI0R_EL1, ICC_SGI1R_EL1, and ICC_ASGI1R_EL1
Whether the A3 field is supported is IMPLEMENTATION DEFINED.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-735
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
Note
In systems where the Redistributor only supports the zero value for A3, the Redistributor must acknowledge
any Generate SGI commands where A3V == 1 with a Generate SGI Acknowledge response, but must
otherwise ignore the command.
• RS (Range Selector) indicates the affinities covered by Target List. This field is treated as defined in
ICC_SGI0R_EL1, ICC_SGI1R_EL1, and ICC_ASGI1R_EL1.
15 4 3 0
Note
Receipt of a Generate SGI Acknowledge response by a CPU interface does not guarantee that the corresponding
SGI pending state is set, but it does guarantee that the pending state will become set.
15 4 3 0
A CPU interface is quiescent when there are no pending interrupts and all outstanding operations are complete. To
ensure quiescence, a CPU interface must:
• Respond to any outstanding Clear and VClear commands by sending a Clear Acknowledge command.
• Release any pending virtual or physical interrupts.
• Ensure it receives an acknowledge response from the Redistributor to indicate completion of all outstanding:
— Generate SGI requests.
— Activate requests.
— Deactivate requests.
— Upstream Control.
• Respond to the Quiesce commands by sending a Quiesce Acknowledge response as the final transfer.
In addition, software must ensure that the Redistributor receives no traffic after the CPU interface sends the Quiesce
Acknowledge response. Failure to adhere to this results in UNPREDICTABLE behavior. In practice, because such
timing is not predictable, software must ensure that no traffic is generated after the GICR_WAKER.ProcessorSleep
bit is set to 1, see Chapter 7 Power Management.
A CPU interface cannot receive a Quiesce command if a Downstream Control Acknowledge response is
outstanding. See Rules associated with the downstream Redistributor commands on page A-724 for more
information.
A-736 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 4 3 0
The Quiesce command acts as a form of barrier. Before sending a Quiesce Acknowledge response, the CPU
interface must be quiescent, that is, it must fulfil the requirements for quiescence specified in Quiesce (IRI) on
page A-736.
15 8 7 6 5 4 3 0
INTID[15:0]
INTID[31:16]a
In Figure A-14:
• ID length indicates the number of INTID bits the Release response includes. See Supported INTID sizes on
page A-721 for more information.
• INTID is the value that the CPU interface returns after a valid read of ICC_IAR0_EL1 or ICC_IAR1_EL1.
Note
— During legacy operation, the INTID that is returned for SGIs includes the source PE in the
GICC_IAR.Source_CPU_ID field.
— If the INTID corresponds to an interrupt that uses the 1 of N model, the Redistributor might forward
the interrupt to a different PE or it might send the interrupt to the same PE again. See Priority-based
routing on page A-725 for information about how the PMHE field might affect the 1 of N selection.
If the CPU interface issues a Release response as a result of disabling an interrupt group, ARM recommends that it
sends the Upstream Control command that contains the revised interrupt group enable information before issuing
the Release response.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-737
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 8 7 6 5 4 3 0
INTID[15:0]
INTID[31:16]
In Figure A-15:
• Priority indicates the actual priority of the interrupt, that is, the Secure, unshifted view. Bits corresponding to
unimplemented priority bits in the CPU interface are RES0.
• ID length indicates the number of INTID bits the Set command includes. See Supported INTID sizes on
page A-721 for more information.
• Mod represents the value of the GICD_IGRPMODR<n>.Group status bit for the interrupt.
• Grp represents the interrupt group, as indicated by the corresponding GICD_IGROUPR<n>.Group status bit.
• INTID is the value that the CPU interface returns after a valid read of an ICC_IAR0_EL1 or ICC_IAR1_EL1.
Note
During legacy operation, the INTID that is returned for SGIs includes the source PE in the
GICC_IAR.Source_CPU_ID field.
If the Redistributor sends a Set command, the interrupt specified in the command replaces any outstanding highest
pending interrupt, that is, the command sets a new highest priority pending interrupt. Where a pending interrupt is
replaced, the CPU interface must Release it back to the Redistributor.
• Never send a Set command when any of the following conditions apply:
— The INTID is a special interrupt number, that is, 1020-1023.
— Affinity routing is enabled for an interrupt group and 1023 < INTID < 8192.
— Affinity routing is not enabled for an interrupt group, 1023 < INTID < 8192, and bits[9:4] are
non-zero. That is, the Redistributor is permitted to send Set commands for SGIs where bits[12:10] of
ICC_IAR0_EL1 or ICC_IAR1_EL1 specify the CPUID of the source PE.
— Affinity routing is not enabled for an interrupt group, and INTID > 8191
— The Set command has the same INTID as a previous Set command, unless the Redistributor has
received an Activate command or Release response.
The Redistributor must not send a SET command for an interrupt until all of the following are true:
• All previous outstanding SET commands for that interrupt have been returned through a Release or Activate
command.
A-738 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
• The interrupt is in the pending state, see Interrupt handling state machine on page 4-51.
If the interrupt group is disabled, the CPU interface cannot handle the interrupt, and must Release the interrupt.
15 12 11 4 3 0
Data[1] Data[0]
Data[Length-1] Data[Length-2]
Physical interface 0x00 0x1 This value contains the physical CPU interface enable bit values that must be
enables communicated to the Redistributor. Bits [2:0] of Data[0] have the following
meanings:
[2] EnableGrp1, secure. The value of the Secure copy of
ICC_IGRPEN1_EL1.Enable.
[1] EnableGrp1, Non-secure. The value of the Non-secure copy of
ICC_IGRPEN1_EL1.Enable.
[0] EnableGrp0, Secure. The value of ICC_IGRPEN0_EL1.Enable.
For PEs that do not include EL3, or when the GIC supports only a single Security
state, see the individual register descriptions for more information about the value
of these bits.
To ensure the state of the enable bits can be communicated easily to the
Redistributor after powerup, this command must be generated by any write to a
physical enable bit. If multiple writes to a physical enable bit occur before the CPU
interface issues the command, the GIC can combine these writes into a single
command.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-739
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
Virtual interface 0x01 0x1 This value contains the virtual CPU interface enable bit values that must be
enables communicated to the Redistributor. Bits [1:0] of Data[0] have the following
meanings:
[1] EnableGrp1. The value of ICH_VMCR_EL2.VENG1.
[0] EnableGrp0. The value of ICH_VMCR_EL2.VENG0.
To ensure the state of the enable bits can be communicated easily to the
Redistributor after powerup, this command must be generated by any write to a
virtual enable bit. If multiple writes to a virtual enable bit occur before the CPU
interface issues the command, the GIC can combine these writes into a single
command.
Only a CPU interface that supports GICv4 can generate this identifier.
Note
If EL2 accesses memory-mapped registers, and uses GICH_VMCR, the VM must
access GICV_* registers. If the GIC shares state between the GICH_* registers
and the ICH_* System registers, it might communicate any change to the virtual
enable bits.
Physical priority 0x02 0x1 This value contains the current value of the Priority Mask Register (PMR):
[7:0] The value written to ICC_PMR_EL1.
The CPU interface must issue this command when the PE successfully writes to
ICC_PMR_EL1 and ICC_CTLR_EL3.PMHE bit is set to 1.
The command must be generated by any successful write that changes the value of
ICC_PMR_EL1. If multiple writes to ICC_PMR_EL1 occur before the CPU
interface issues the command, the GIC can combine these writes into a single
command.
Note
• In GIC implementations that use this value, the Redistributor copy of the
value must reset to the idle priority, that is, 0xF8 in cases where only 5 bits
of priority are implemented.
• If the CPU interface receives a Set command with a priority lower than the
current value in ICC_PMR_EL1 before the Upstream Control
Acknowledge is received, the GIC might Release that Set command.
- 0x03 - - Reserved.
0x07
If a Redistributor receives an IMPLEMENTATION DEFINED value that it cannot interpret, this constitutes a protocol
error. See Software generation of protocol errors and packet errors on page A-721.
A-740 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 4 3 0
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-741
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 8 7 6 5 4 3 0
vINTID[15:0]
vINTID[31:16]a
In Figure A-18:
• ID length indicates the number of vINTID bits the VClear command includes. See Supported INTID sizes on
page A-721 for more information.
The CPU interface must always respond to a VClear command by sending a Clear Acknowledge response where
V==1.
If the interrupt is pending in the CPU interface, the CPU interface must issue a Release response, or an Activate
response that remains outstanding for the interrupt before it issues a Clear Acknowledge command.
If the interrupt is not pending or present on the CPU interface, the VClear command has no effect. However, the
CPU interface must still issue a Clear Acknowledge response.
Note
This command does not affect LPIs in the List registers.
A-742 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
15 8 7 6 5 4 3 0
vINTID[15:0]
vINTID[31:16]a
In Figure A-19:
• Priority indicates the actual priority of the interrupt, that is, the Secure, unshifted view. Bits corresponding to
unimplemented priority bits in the CPU interface are RES0.
• ID length indicates the number of v INTID bits the VSet command includes. See Supported INTID sizes on
page A-721 for more information.
• vINTID is the value that the CPU interface returns after a valid read of ICC_IAR0_EL1 or ICC_IAR1_EL1.
When affinity routing is not enabled for a Security state, the CPUID field in ICC_IAR0_EL1 and
ICC_IAR1_EL1 identifies the source PE for SGIs.
The Redistributor sends a VSet command when the virtual interrupt specified by vINTID is set as pending in the
resident virtual LPI Pending table. The CPU interface must either activate the virtual interrupt by sending an
Activate command where V == 1, or Release the virtual interrupt to the Redistributor.
If the Redistributor sends a VSet command, the interrupt specified in the command always replaces any previous
interrupt, that is, the command sets a new highest priority pending interrupt. If the replaced interrupt is still valid
and pending, the CPU interface must Release it back to the Redistributor.
The CPU interface must Release an interrupt, ensuring that V == 1, if it cannot handle the interrupt for either of the
following reasons:
• The interrupt group is disabled. This includes when the VM interface is disabled, that is, when
GICH_HCR.En or ICH_HCR.En, as appropriate, is cleared to 0.
• The hypervisor is not using the System register interface, that is, when either of the following applies:
— During legacy operation, when ICC_SRE_EL2.SRE == 0.
— EL2 is not present.
When the Non-secure copy of ICC_SRE_EL1.SRE == 0, it is UNPREDICTABLE whether the specified virtual
interrupt is factored into virtual priority calculations and reads of the GICV_* registers.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. A-743
ID072617 Non-Confidential
Appendix A GIC Stream Protocol interface
A.4 Alphabetic list of command and response packet formats
A-744 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B
Pseudocode Definition
This appendix provides a definition of the pseudocode used in this specification, and lists the helper procedures and
support functions used by pseudocode to perform useful architecture-specific jobs. For functions that are referenced
in this specification but that are not defined in this appendix, see ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-745
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.1 About ARM pseudocode
Miscellaneous helper procedures and support functions on page B-763 describes some pseudocode helper
functions, that are used by the pseudocode functions that are described elsewhere in this document.
• Earlier behavior indicated by the pseudocode is only specified as occurring to the extent required to
determine that the statement is executed.
• No subsequent behavior indicated by the pseudocode occurs. This means that these statements terminate
pseudocode execution.
B-746 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.2 Data types
The type of a constant is determined by its syntax. The type of a variable is normally determined by assignment to
the variable, with the variable being implicitly declared to be of the same type as whatever is assigned to it. For
example, the assignments x = 1, y = '1', and z = TRUE implicitly declare the variables x, y, and z to have types
integer, bitstring of length 1, and Boolean, respectively.
Variables can also have their types declared explicitly by preceding the variable name with the name of the type.
This is most often done in function definitions for the arguments and the result of the function.
B.2.2 Bitstrings
A bitstring is a finite-length string of 0s and 1s. Each length of bitstring is a different type. The minimum permitted
length of a bitstring is 1.
The type name for bitstrings of length N is bits(N). A synonym of bits(1) is bit.
Bitstring constants are written as a single quotation mark, followed by the string of 0s and 1s, followed by another
single quotation mark. For example, the two constants of type bit are '0' and '1'. Spaces can be included in
bitstrings for clarity.
A special form of bitstring constant with 'x' bits is permitted in bitstring comparisons. See Equality and
non-equality testing on page B-753.
Every bitstring value has a left-to-right order, with the bits being numbered in standard little-endian order. That is,
the leftmost bit of a bitstring of length N is bit (N–1) and its right-most bit is bit 0. This order is used as the
most-significant-to-least-significant bit order in conversions to and from integers. For bitstring constants and
bitstrings derived from encoding diagrams, this order matches the way they are printed.
Bitstrings are the only concrete data type in pseudocode, in the sense that they correspond directly to the contents
of registers, memory locations, and instructions. All of the remaining data types are abstract.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-747
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.2 Data types
B.2.3 Integers
Pseudocode integers are unbounded in size and can be either positive or negative. That is, they are mathematical
integers rather than what computer languages and architectures commonly call integers. Computer integers are
represented in pseudocode as bitstrings of the appropriate length, associated with suitable functions to interpret
those bitstrings as integers.
B.2.4 Reals
Pseudocode reals are unbounded in size and precision. That is, they are mathematical real numbers, not computer
floating-point numbers. Computer floating-point numbers are represented in pseudocode as bitstrings of the
appropriate length, associated with suitable functions to interpret those bitstrings as reals.
B.2.5 Booleans
A Boolean is a logical TRUE or FALSE value.
The type name for Booleans is boolean. This is not the same type as bit, which is a length–1 bitstring. Boolean
constants are TRUE and FALSE.
B.2.6 Enumerations
An enumeration is a defined set of symbolic constants, such as:
An enumeration always contains at least one symbolic constant, and a symbolic constant must not be shared
between enumerations.
Enumerations must be declared explicitly, although a variable of an enumeration type can be declared implicitly by
assigning one of the symbolic constants to it. By convention, each of the symbolic constants starts with the name of
the enumeration followed by an underscore. The name of the enumeration is its type name, or type, and the symbolic
constants are its possible constants.
Note
A Boolean is a pre-declared enumeration that does not follow the normal naming convention and it has a special
role in some pseudocode constructs, such as if statements. This means the enumeration of a boolean is:
B-748 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.2 Data types
B.2.7 Lists
A list is an ordered set of other data items, separated by commas and enclosed in parentheses, for example:
Lists are often used as the return type for a function that returns multiple results. For example, this list at the start
of this section is the return type of the function Shift_C() that performs a standard ARM shift or rotation, when its
first operand is of type bits(32).
Some specific pseudocode operators use lists surrounded by other forms of bracketing than the (…) parentheses.
These are:
• Bitstring extraction operators, that use lists of bit numbers or ranges of bit numbers surrounded by angle
brackets <…>.
• Array indexing, that uses lists of array indexes surrounded by square brackets […].
• Array-like function argument passing, that uses lists of function arguments surrounded by square brackets
[…].
Each combination of data types in a list is a separate type, with type name given by listing the data types. This means
that the example list at the start of this section is of type (bits(32), bit). The general principle that types can be
declared by assignment extends to the types of the individual list items in a list. For example:
implicitly declares shift_t, shift_n, and (shift_t, shift_n) to be of types bits(2), integer, and (bits(2),
integer), respectively.
A list type can also be explicitly named, with explicitly named elements in the list. For example:
ShiftSpec abc;
the elements of the resulting list can then be referred to as abc.shift, and abc.amount. This qualified naming of list
elements is only permitted for variables that have been explicitly declared, not for those that have been declared by
assignment only.
Explicitly naming a type does not alter what type it is. For example, after the above definition of ShiftSpec,
ShiftSpec, and (bits(2), integer) are two different names for the same type, not the names of two different types.
To avoid ambiguity in references to list elements, it is an error to declare a list variable multiple times using different
names of its type or to qualify it with list element names not associated with the name by which it was declared.
An item in a list that is being assigned to can be written as "-" to indicate that the corresponding item of the assigned
list value is discarded. For example:
List constants are written as a list of constants of the appropriate types, for example the ('00', 0) in the earlier
example.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-749
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.2 Data types
B.2.8 Arrays
Pseudocode arrays are indexed by either enumerations or integer ranges. An integer range is represented by the
lower inclusive end of the range, then .., then the upper inclusive end of the range.
For example:
Arrays are always explicitly declared, and there is no notation for a constant array. Arrays always contain at least
one element, because:
• Enumerations always contain at least one symbolic constant.
• Integer ranges always contain at least one integer.
Arrays do not usually appear directly in pseudocode. The items that syntactically look like arrays in pseudocode are
usually array-like functions such as R[i], MemU[address, size] or Elem[vector, i, size]. These functions package
up and abstract additional operations normally performed on accesses to the underlying arrays, such as register
banking, memory protection, endian-dependent byte ordering, exclusive-access housekeeping and Advanced SIMD
element processing.
B-750 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.3 Expressions
B.3 Expressions
This section describes:
• General expression syntax.
• Operators and functions - polymorphism and prototypes on page B-752.
• Precedence rules on page B-752.
Each register described in the text is to be regarded as declaring a correspondingly named bitstring variable, and
that variable has the stated behavior of the register. For example, if a bit of a register is defined as RAZ/WI, then
the corresponding bit of its variable reads as 0 and ignore writes.
An expression like bits(32) UNKNOWN indicates that the result of the expression is a value of the given type, but the
architecture does not specify what value it is and software must not rely on such values. The value produced must
not:
• Return information that cannot be accessed at the current or a lower level of privilege using instructions that
are not UNPREDICTABLE and do not return UNKNOWN values.
Note
Some earlier documentation describes this as an UNPREDICTABLE value. UNKNOWN values are similar to the
definition of UNPREDICTABLE, but do not indicate that the entire architectural state becomes unspecified.
Only the following expressions are assignable. This means that these are the only expressions that can be placed on
the left-hand side of an assignment.
• Variables.
• The results of applying array-like functions to other expressions. The description of an array-like function
specifies the circumstances under which it can generate an assignable expression.
• For a constant, this data type is determined by the syntax of the constant.
• For a variable, there are the following possible sources for the data type:
— An optional preceding data type name.
— A data type the variable was given earlier in the pseudocode by recursive application of this rule.
— A data type the variable is being given by assignment, either by direct assignment to the variable, or
by assignment to a list of which the variable is a member.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-751
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.3 Expressions
It is a pseudocode error if none of these data type sources exists for a variable, or if more than one of them
exists and they do not agree about the type.
• For a language-defined operator, the definition of the operator determines the data type.
• For a function, the definition of the function determines the data type.
1. Constants, variables, and function invocations are evaluated with higher priority than any operators using
their results.
2. Expressions on integers follow the normal operator precedence rules of exponentiation before multiply/divide
before add/subtract, with sequences of multiply/divides or add/subtracts evaluated left-to-right.
3. Other expressions must be parenthesized to indicate operator precedence if ambiguity is possible, but do not
have to be if all permitted precedence orders under the type rules necessarily lead to the same result. For
example, if i, j, and k are integer variables, i > 0 && j > 0 && k > 0 is acceptable, but i > 0 && j > 0 || k
> 0 is not.
B-752 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.4 Operators and built-in functions
A special form of comparison is defined with a bitstring constant that includes 'x' bits in addition to '0' and '1'
bits. The bits corresponding to the 'x' bits are ignored in determining the result of the comparison. For example, if
opcode is a 4-bit bitstring, opcode == '1x0x' is equivalent to opcode<3> == '1' && opcode<1> == '0'.
Note
This special form is permitted in the implied equality comparisons in when parts of case … of … structures.
Conditional selection
If x and y are two values of the same type and t is a value of type boolean, then if t then x else y is an expression
of the same type as x and y that produces x if t is TRUE and y if t is FALSE.
If x and y are Booleans, then x && y is the result of ANDing them together. As in the C language, if x is FALSE, the
result is determined to be FALSE without evaluating y.
If x and y are Booleans, then x || y is the result of ORing them together. As in the C language, if x is TRUE, the result
is determined to be TRUE without evaluating y.
If x and y are Booleans, then x ^ y is the result of exclusive-ORing them together.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-753
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.4 Operators and built-in functions
Bitstring extraction
The bitstring extraction operator extracts a bitstring from either another bitstring or an integer. Its syntax is
x<integer_list>, where x is the integer or bitstring being extracted from, and <integer_list> is a list of integers
enclosed in angle brackets rather than the usual parentheses. The length of the resulting bitstring is equal to the
number of integers in <integer_list>. In x<integer_list>, each of the integers in <integer_list> must be:
• >= 0
• < Len(x) if x is a bitstring.
The definition of x<integer_list> depends on whether integer_list contains more than one integer:
• If integer_list contains more than one integer, x<i, j, k,…, n> is defined to be the concatenation:
x<i> : x<j> : x<k> : … : x<n>.
In <integer_list>, the notation i:j with i >= j is shorthand for the integers in order from i down to j, with both
end values included. For example, instr<31:28> is shorthand for instr<31, 30, 29, 28>.
The expression x<integer_list> is assignable provided x is an assignable bitstring and no integer appears more than
once in <integer_list>. In particular, x<i> is assignable if x is an assignable bitstring and 0 <= i < Len(x).
Encoding diagrams for registers frequently show named bits or multi-bit fields. For example, the encoding diagram
for the ICC_SGI1R shows its bit<28> as IS. In such cases, the syntax ICC_SGI1R.IS is used as a more readable
synonym for ICC_SGI1R<28>.
If x and y are bitstrings of the same length, x AND y, x OR y, and x EOR y are the bitstrings of that same length obtained
by logically ANDing, ORing, and exclusive-ORing corresponding bits of x and y together.
Bitstring count
If x is a bitstring, BitCount(x) produces an integer result equal to the number of bits of x that are ones.
B-754 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.4 Operators and built-in functions
IsZero(x) = (BitCount(x) == 0)
IsOnes(x) = (BitCount(x) == Len(x))
IsZeroBit(x) = if IsZero(x) then '1' else '0'
IsOnesBit(x) = if IsOnes(x) then '1' else '0'
• LowestSetBit(x) is the minimum bit number of any of its bits that are ones. If all of its bits are zeros,
LowestSetBit(x) = N.
• HighestSetBit(x) is the maximum bit number of any of its bits that are ones. If all of its bits are zeros,
HighestSetBit(x) = –1.
• CountLeadingZeroBits(x) is the number of zero bits at the left end of x, in the range 0 to N. This means:
CountLeadingZeroBits(x) = N – 1 – HighestSetBit(x).
• CountLeadingSignBits(x) is the number of copies of the sign bit of x at the left end of x, excluding the sign
bit itself, and is in the range 0 to N–1. This means:
CountLeadingSignBits(x) = CountLeadingZeroBits(x<N–1:1> EOR x<N–2:0>).
If x is a bitstring and i is an integer, then SignExtend(x, i) is x extended to a length of i bits, by adding sufficient
copies of its leftmost bit to its left. That is, if i == Len(x), then SignExtend(x, i) = x, and if i > Len(x), then:
It is a pseudocode error to use either ZeroExtend(x, i) or SignExtend(x, i) in a context where it is possible that
i < Len(x).
// SInt()
// ======
integer SInt(bits(N) x)
result = 0;
for i = 0 to N-1
if x<i> == ‘1’ then result = result + 2^i;
if x<N-1> == ‘1’ then result = result - 2^N;
return result;
// UInt()
// ======
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-755
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.4 Operators and built-in functions
integer UInt(bits(N) x)
result = 0;
for i = 0 to N-1
if x<i> == ‘1’ then result = result + 2^i;
return result;
Int(x, unsigned) returns either SInt(x) or UInt(x) depending on the value of its second argument:
// Int()
// =====
B.4.4 Arithmetic
Most pseudocode arithmetic is performed on integer or real values, with operands being obtained by conversions
from bitstrings and results converted back to bitstrings afterwards. As these data types are the unbounded
mathematical types, no issues arise about overflow or similar errors.
If x and y are bitstrings of the same length N, so that N = Len(x) = Len(y), then x+y and x–y are the least significant
N bits of the results of converting them to integers and adding or subtracting them. Signed and unsigned conversions
produce the same result:
If x is a bitstring of length N and y is an integer, x+y and x–y are the bitstrings of length N defined by x+y = x + y<N–1:0>
and x–y = x – y<N–1:0>. Similarly, if x is an integer and y is a bitstring of length M, x+y and x–y are the bitstrings of
length M defined by x+y = x<M–1:0> + y and x–y = x<M–1:0> – y.
Comparisons
If x and y are integers or reals, then x == y, x != y, x < y, x <= y, x > y, and x >= y are equal, not equal, less than,
less than or equal, greater than, and greater than or equal comparisons between them, producing Boolean results. In
the case of == and !=, this extends the generic definition applying to any two values of the same type to also act
between integers and reals.
Multiplication
If x and y are integers or reals, then x * y is the product of x and y. It is of type integer if x and y are both of type
integer, and real otherwise.
B-756 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.4 Operators and built-in functions
If x and y are integers, then x DIV y and x MOD y are defined by:
x DIV y = RoundDown(x/y)
x MOD y = x – y * (x DIV y)
It is a pseudocode error to use any of x/y, x MOD y, or x DIV y in any context where y can be zero.
Square root
If x is an integer or a real, Sqrt(x) is its square root, and is always of type real.
Scaling
If n is an integer, 2^n is the result of raising 2 to the power n and is of type real.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-757
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.5 Statements and program structure
Assignments
An assignment statement takes the form:
<assignable_expression> = <expression>;
Procedure calls
A procedure call takes the form:
<procedure_name>(<arguments>);
Return statements
A procedure return takes the form:
return;
return <expression>;
UNDEFINED
This subsection describes the statement:
UNDEFINED;
This statement indicates a special case that replaces the behavior defined by the current pseudocode, apart from
behavior required to determine that the special case applies. The replacement behavior is that the Undefined
Instruction exception is taken.
UNPREDICTABLE
This subsection describes the statement:
UNPREDICTABLE;
This statement indicates a special case that replaces the behavior defined by the current pseudocode, apart from
behavior required to determine that the special case applies. The replacement behavior is UNPREDICTABLE.
SEE…
This subsection describes the statement:
SEE <reference>;
B-758 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.5 Statements and program structure
This statement indicates a special case that replaces the behavior defined by the current pseudocode, apart from
behavior required to determine that the special case applies. The replacement behavior is that nothing occurs as a
result of the current pseudocode because some other piece of pseudocode defines the required behavior. The
<reference> indicates where that other pseudocode can be found.
It usually refers to another instruction but can also refer to another encoding or note of the same instruction.
IMPLEMENTATION_DEFINED
This subsection describes the statement:
IMPLEMENTATION_DEFINED {<text>};
This statement indicates a special case that replaces the behavior defined by the current pseudocode, apart from
behavior required to determine that the special case applies. The replacement behavior is IMPLEMENTATION
DEFINED. An optional <text> field can give more information.
if … then … else …
A multi-line if … then … else … structure takes the form:
if <boolean_expression> then
<statement 1>
<statement 2>
…
<statement n>
elsif <boolean_expression> then
<statement a>
<statement b>
…
<statement z>
else
<statement A>
<statement B>
…
<statement Z>
The block of lines consisting of elsif and its indented statements is optional, and multiple such blocks can be used.
The block of lines consisting of else and its indented statements is optional.
Abbreviated one-line forms can be used when there are only simple statements in the then part and in the else part,
if it is present, such as:
Note
In these forms, <statement 1>, <statement 2> and <statement A> must be terminated by semicolons. This and the
fact that the else part is optional are differences from the if … then … else … expression.
repeat … until …
A repeat … until … structure takes the form:
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-759
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.5 Statements and program structure
repeat
<statement 1>
<statement 2>
…
<statement n>
until <boolean_expression>;
while … do
A while … do structure takes the form:
while <boolean_expression> do
<statement 1>
<statement 2>
…
<statement n>
for …
A for … structure takes the form:
case … of …
A case … of … structure takes the form:
case <expression> of
when <constant values>
<statement 1>
<statement 2>
…
<statement n>
… more "when" groups …
otherwise
<statement A>
<statement B>
…
<statement Z>
In this structure, <constant values> consists of one or more constant values of the same type as <expression>,
separated by commas. Abbreviated one line forms of when and otherwise parts can be used when they contain only
simple statements.
If <expression> has a bitstring type, <constant values> can also include bitstring constants containing 'x' bits. For
details see Equality and non-equality testing on page B-753.
where <argument prototypes> consists of zero or more argument definitions, separated by commas. Each argument
definition consists of a type name followed by the name of the argument.
B-760 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.5 Statements and program structure
Note
This first prototype line is not terminated by a semicolon. This helps to distinguish it from a procedure call.
A function definition is similar but also declares the return type of the function:
B.5.3 Comments
Two styles of pseudocode comment exist:
• // starts a comment that is terminated by the end of the line
• /* starts a comment that is terminated by */.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-761
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.6 Pseudocode terminology
vPE VCPU
vPEID VCPUID
pINTID pID
vINTID vID
B-762 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
Note
Some variable names used the pseudocode differ from those used in the body text. For a list of the affected variables,
see Pseudocode terminology on page B-762.
shared/gic/helper/AcknowledgeInterrupt
// AcknowledgeInterrupt()
// ==============================
// Acknowledges the INTID and sets the appropriate ICC_AP{0,1}R_EL1 active priority bit
AcknowledgeInterrupt(bits(INTID_SIZE) ID);
shared/gic/helper/AcknowledgeVInterrupt
// AcknowledgeVInterrupt()
// =======================
// Acknowledges vINTID
AcknowledgeVInterrupt(bits(INTID_SIZE) ID);
shared/gic/helper/AlwaysUsingSysRegs
// AlwaysUsingSysRegs()
// ===================
// Returns true if the PE only supports the use of System registers for handling physical interrupts
boolean AlwaysUsingSysRegs();
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-763
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
shared/gic/helper/Deactivate
// Deactivate()
// =================
// Deactivates the INTID
Deactivate(bits(INTID_SIZE) INTID);
shared/gic/helper/GetHighestActiveGroup
// GetHighestActiveGroup()
// =======================
// Returns a value indicating the interrupt group of the highest active priority from three
// registers. Returns IntGroup_None if no active priorities.
// Note: having more than one group active at the same priority is UNPREDICTABLE.
shared/gic/helper/GetHighestActivePriority
// GetHighestActivePriority()
// ==========================
// Returns the priority of the highest active priority from three registers, expressed as an 8-bit
// unsigned binary number. Returns 0xFF if no bits are active.
shared/gic/helper/INTID_SIZE
// INTID_SIZE
// ==========
// The number of interrupt ID bits implemented at the Distributor and Redistributor.
// This value is IMPLEMENTATION DEFINED and discoverable from GICD_TYPER.IDbits.
shared/gic/helper/IntGroup
// IntGroup()
// ==================
shared/gic/helper/Interrupt
// Interrupt()
// ================
shared/gic/helper/IsEL3OrMon
// IsEL3OrMon()
// =======================
// Returns true if EL3 is using AArch32 and in Monitor mode or
// if EL3 is using AArch64 and PSTATE.EL = 3
B-764 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
boolean IsEL3OrMon();
shared/gic/helper/IsGrp0Int
// IsGrp0Int()
// =======================
// Returns TRUE if the INTID is in Group 0
shared/gic/helper/IsSecureInt
// IsSecureInt()
// =============
// Returns true if GICD_CTLR.DS == 0 and ID
// is a Group 0 or Secure Group 1 INTID
shared/gic/helper/PriorityIsHigher
// PriorityIsHigher()
// ===========================
// Returns true if the first priority is higher than the second priority.
shared/gic/helper/SingleSecurityState
// SingleSecurityState()
// ==========================
// Returns TRUE if the Distributor supports a single Security state, for example when GICD_CTLR.DS == 1.
boolean SingleSecurityState();
shared/gic/helper/Special
// IsSpecial()
// ==================
//IsLPI()
// =================
shared/gic/helper/SystemRegisterTrap
// SystemRegisterTrap()
// ===================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-765
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
SystemRegisterTrap(bits(2) target_el);
shared/support/ActivePRIBits
// ActivePRIBits()
// ===============
integer ActivePRIBits()
pri_bits = PRIBits();
return 2^(pri_bits - 1);
shared/support/CanSignalInterrupt
// CanSignalInterrupt()
// ====================
boolean CanSignalInterrupt()
// Get the priority group of the current “Set” using the BPR appropriate to the group
setPriorityGroup = GroupBits(GICC_SETR.Priority, GICC_SETR.Group);
runningPriority = GetHighestActivePriority(ICC_AP0R_EL1, ICC_AP1R_EL1NS, ICC_AP1R_EL1S);
// Get the priority group of highest APR using the BPR appropriate to the SET packet
preemptionLevel = GroupBits(runningPriority<7:1>:’0’, GICC_SETR.Group);
shared/support/CanSignalVirtualInt
// CanSignalVirtualInt()
// =====================
B-766 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
// Get the priority group of “vInt” using the BPR appropriate to the group
vintPriorityGroup = VGroupBits(vInt.Priority, vInt.Group);
runningPriority = GetHighestActivePriority(ICH_AP0R_EL2, ICH_AP1R_EL2, Zeros());
// Get the priority group of highest APR using the BPR appropriate to the APR group
preemptionLevel = VGroupBits(runningPriority<7:1>:’0’, vInt.Group);
shared/support/CanSignalVirtualInterrupt
// CanSignalVirtualInterrupt()
// ===========================
boolean CanSignalVirtualInterrupt()
integer lrIndex = HighestPriorityVirtualInterrupt();
shared/support/ClearPendingState
// ClearPendingState()
// ===================
if (!cte.Valid) then
return FALSE;
ClearPendingStateLocal(GICR_PENDBASER[rd_base], ite.OutputID);
else
VCPUTableEntry vte = ReadVCPUTable(UInt(ite.VCPUID));
if (!vte.Valid) then
return FALSE;
ClearPendingStateLocal(vpt, ite.OutputID);
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-767
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
return TRUE;
shared/support/HighestPriorityPendingInterrupt
// HighestPriorityPendingInterrupt()
// =================================
bits(INTID_SIZE) HighestPriorityPendingInterrupt()
if GICC_SETR.State != IntState_Pending then // No interrupt pending
return INTID_SPURIOUS;
case GICC_SETR.Group of
when IntGroup_G1NS
if ICC_IGRPEN1_EL1NS.Enable == ‘0’ then return INTID_SPURIOUS;
when IntGroup_G1S
if ICC_IGRPEN1_EL1S.Enable == ‘0’ then return INTID_SPURIOUS;
when IntGroup_G0
if ICC_IGRPEN0_EL1.Enable == ‘0’ then return INTID_SPURIOUS;
otherwise // Reserved
return INTID_SPURIOUS;
return GICC_SETR.ID;
shared/support/HighestPriorityVirtualInterrupt
// HighestPriorityVirtualInterrupt()
// =================================
// Returns -1 if there are no pending virtual interrupts
integer HighestPriorityVirtualInterrupt()
// Find the List Register with the highest priority enabled pending interrupt
for i = 0 to NumListRegs() - 1
if (ICH_LR_EL2[i].State == IntState_Pending &&
((ICH_LR_EL2[i].Group == ‘0’ && ICH_VMCR_EL2.VENG0 == ‘1’) ||
(ICH_LR_EL2[i].Group == ‘1’ && ICH_VMCR_EL2.VENG1 == ‘1’)) &&
PriorityIsHigher(ICH_LR_EL2[i].Priority, priority)) || (lrindex != -1)))then
// Found an enabled pending list register with a higher priority
priority = ICH_LR_EL2[i].Priority;
lrIndex = i;
return lrIndex;
shared/support/PRIBits
// PRIBits()
// =========
integer PRIBits()
pri_bits = UInt(if HaveEL(EL3) then ICC_CTLR_EL3.PRIbits else ICC_CTLR_EL1.PRIbits);
return pri_bits + 1;
shared/support/PriorityDrop
// PriorityDrop
// ============
// Clears the highest active priority in the supplied register; returns FALSE if no priorities were
active.
B-768 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
shared/support/PriorityGroup
// PriorityGroup()
// ===============
// Returns the priority group field for the minimum BPR value for the group
if p_bits == 8 then
mask = Ones(7):’0’;
else
mask = Ones(p_bits):Zeros(8 - p_bits);
shared/support/SetPendingState
// SetPendingState()
// =================
if !cte.Valid then
return FALSE;
SetPendingStateLocal(GICR_PENDBASER[rd_base], ite.OutputID);
else
VCPUTableEntry vte = ReadVCPUTable(UInt(ite.VCPUID));
if !vte.Valid then
return FALSE;
SetVirutalPendingStateLocal(vpt, ite.OutputID);
return TRUE;
shared/support/SystemRegisterAccessPermitted
// SystemRegisterAccessPermitted()
// ===============================
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. B-769
ID072617 Non-Confidential
Appendix B Pseudocode Definition
B.7 Miscellaneous helper procedures and support functions
UndefinedFault();
// Check if System Registers are enabled for the EL and security state
if ((PSTATE.EL == EL2 && !IsSecure() && !sreEL2) ||
(PSTATE.EL == EL1 && IsSecure() && ICC_SRE_EL1S.SRE == ‘0’) ||
(PSTATE.EL == EL1 && !IsSecure() && !sreEL1NS)) then
UndefinedFault(); // System registers aren’t enabled.
return;
B-770 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Glossary
For more information see Interrupt handling state machine on page 4-51.
Affinity level Provides an indication of relative locality in a multiprocessor system, by defining a particular level within the
system hierarchy. The affinity levels that the GIC uses correspond to those defined in the Multiprocessor Affinity
Register (MPIDR), an ARM processor system control register.
Banked register A register that has multiple instances, with the instance that is in use depending on the PE mode, Security state, or
other PE state.
For more information about register banking in the GIC see Register banking on page 8-171.
Big-endian memory
Means that, for example:
• A byte or halfword at a word-aligned address is the most significant byte or halfword in the word at that
address.
• A byte at a halfword-aligned address is the most significant byte in the halfword at that address.
CONSTRAINED UNPREDICTABLE
Where an instruction can result in UNPREDICTABLE behavior, the ARMv8 architecture specifies a narrow range of
permitted behaviors. This range is the range of CONSTRAINED UNPREDICTABLE behavior. All implementations that
are compliant with the architecture must follow the CONSTRAINED UNPREDICTABLE behavior.
Execution at Non-secure EL1 or EL0 of an instruction that is CONSTRAINED UNPREDICTABLE can be implemented
as generating a trap exception that is taken to EL2, provided that at least one instruction that is not UNPREDICTABLE
and is not CONSTRAINED UNPREDICTABLE causes a trap exception that is taken to EL2.
In body text, the term CONSTRAINED UNPREDICTABLE is shown in SMALL CAPITALS.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. Glossary-771
ID072617 Non-Confidential
Glossary
Context switch The saving and restoring of computational state when switching between different threads or processes. In this
manual, the term context switch describes any situation where the context is switched by an operating system and
might or might not include changes to the address space.
For more information see Interrupt handling state machine on page 4-51.
Deprecated Something that is present in the ARM architecture for backwards compatibility. Whenever possible software must
avoid using deprecated features. Features that are deprecated but are not optional are present in current
implementations of the ARM architecture, but might not be present, or might be deprecated and OPTIONAL, in future
versions of the ARM architecture.
Distributor A logical component in the GIC that receives interrupts, and determines the priority and distribution of SPIs and
SGIs. The Distributor forwards the interrupt with the highest priority to the corresponding Redistributor and CPU
interface, for priority masking and preemption handling.
Exception Handles an event. For example, an exception could handle an external interrupt or an undefined instruction.
A optional interface between the IRI and the PE, specifically between the Redistributor and the associated CPU
interface, that conforms to the AMBA AXI4-Stream protocol. The protocol defines a set of packets that can be sent
between the CPU and the Distributor, together with ordering and flow control rules.
Halfword A 16-bit data item. Halfwords are normally halfword-aligned in ARM systems.
IMPLEMENTATION DEFINED
Means that the behavior is not architecturally defined, but must be defined and documented by individual
implementations.
Behavior that is not architecturally defined, and might not be documented by an individual implementations. Used
when there are a number of implementation options available, and the option chosen does not affect software
compatibility.
Interrupt grouping
This is a mechanism to align interrupt handling with the ARMv8 Exception model and Security model. Interrupts
are configured as belonging to either Group 0 or Group 1. In a system with two Security states interrupts are
configured as being in Group 0, Non-secure Group 1, or Secure Group 1.
An optional hardware mechanism that routes LPIs to the appropriate Redistributor. Software uses a command queue
to configure an ITS.
Glossary-772 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Glossary
Little-endian memory
Means that:
• A byte or halfword at a word-aligned address is the least significant byte or halfword in the word at that
address.
• A byte at a halfword-aligned address is the least significant byte in the halfword at that address.
List registers
The List registers are a subset of the GIC virtual interface control registers that define the active and pending virtual
interrupts for the virtual CPU interface. List registers indicate whether an interrupt is in Group 0 or Group 1, and
therefore whether it is assigned to a virtual IRQ signal or virtual FIQ signal. The scheduled virtual machine accesses
these interrupt indirectly, using the virtual CPU interface.
See also List register usage resulting in UNPREDICTABLE behavior on page 5-81.
LPIs are optional message-based interrupts that target a specific PE. They can be routed using an optional ITS. LPIs
are always Non-secure Group 1 interrupts, and have edge-triggered behavior.
OPTIONAL When applied to a feature of the architecture, OPTIONAL indicates a feature that is not required in an implementation
of the ARM architecture:
• If a feature is OPTIONAL and deprecated, this indicates that the feature is being phased out of the architecture.
ARM expects such a features to be included in a new implementation only if there is a known
backwards-compatibility reason for the inclusion of the feature.
A feature that is OPTIONAL and deprecated might not be present in future versions of the architecture.
• A feature that is OPTIONAL but not deprecated is, typically, a feature added to a version of the ARM
architecture after the initial release of that version of the architecture. ARM recommends that such features
are included in all new implementations of the architecture.
In body text, these meanings of the term OPTIONAL are shown in SMALL CAPITALS.
See also Deprecated.
Peripheral interrupt
An interrupt generated by the assertion of an interrupt request signal input to the GIC. The GIC architecture defines
the following types of peripheral interrupt:
Preemption level
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. Glossary-773
ID072617 Non-Confidential
Glossary
Priority drop A priority drop occurs when the PE signals to the GIC that the highest priority active interrupt has been handled to
the point where the priority can be dropped to the priority that the interrupt had prior to being handled.
See also ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile.
Quadword A 128-bit data item. Quadwords are normally at least word-aligned in ARM systems.
Hardware must implement the field as Read-As-One, and must ignore writes to the field.
Software can rely on the field reading as all 1s, and on writes being ignored.
This description can apply to a single bit that reads as 1, or to a field that reads as all 1s.
Hardware must implement the field as Read-As-Zero, and must ignore writes to the field.
Software can rely on the field reading as all 0s, and on writes being ignored.
This description can apply to a single bit that reads as 0, or to a field that reads as all 0s.
Read-As-One (RAO)
Hardware must implement the field as reading as all 1s.
Software:
• Can rely on the field reading as all 1s.
• Must use a SBOP policy to write to the field.
This description can apply to a single bit that reads as 1, or to a field that reads as all 1s.
Read-As-Zero (RAZ)
Hardware must implement the field as reading as all 0s.
Software:
• Can rely on the field reading as all 0s
• Must use a SBZP policy to write to the field.
This description can apply to a single bit that reads as 0, or to a field that reads as all 0s.
Redistributor A logical component in the GIC at affinity level 0 that is part of the Interrupt Routing Infrastructure (IRI). It
connects the IRI to the CPU interface. Each PE in the system has a connected Redistributor that routes interrupts to
the appropriate PEs. Every PE in the system has a corresponding Redistributor.
Note
The following definition is consistent with that provided in the ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile, and therefore has a broad scope.
Glossary-774 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Glossary
This term is used for fields in register descriptions, and for fields in architecturally-defined data structures that are
held in memory, for example in translation table descriptors.
Note
RES0 is not used in descriptions of instruction encodings.
Within the architecture, there are some cases where a register bit or bitfield:
• Is RES0 in some defined architectural context.
• Has different defined behavior in a different architectural context.
A bit that is RES0 in a context is reserved for possible future use in that context. To preserve forward compatibility,
software:
• Must not rely on the bit reading as 0.
• Must use an SBZP policy to write to the bit.
The RES0 description can apply to bits or bitfields that are read-only, or are write-only:
• For a read-only bit, RES0 indicates that the bit reads as 0, but software must treat the bit as UNKNOWN.
• For a write-only bit, RES0 indicates that software must treat the bit as SBZ.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. Glossary-775
ID072617 Non-Confidential
Glossary
This RES0 description can apply to a single bit that should be written as its preserved value or as 0, or to a field that
should be written as its preserved value or as all 0s.
Note
The following definition is consistent with that provided in the ARM® Architecture Reference Manual, ARMv8, for
ARMv8-A architecture profile, and therefore has a broad scope.
This term is used for fields in register descriptions, and for fields in architecturally-defined data structures that are
held in memory, for example in translation table descriptors.
Note
RES1 is not used in descriptions of instruction encodings.
Within the architecture, there are some cases where a register bit or bitfield:
• Is RES1 in some defined architectural context.
• Has different defined behavior in a different architectural context.
If the bit has not been successfully written since reset, then the read of the bit returns the reset
value if there is one, or otherwise returns an UNKNOWN value.
Glossary-776 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Glossary
• A direct write to the bit must update a storage location associated with the bit.
• While the use of the register is such that the bit is described as RES1, the value of the bit must
have no effect on the operation of the PE, other than determining the value read back from
that bit, unless the ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture
profile explicitly defines additional properties for the bit.
A bit that is RES1 in a context is reserved for possible future use in that context. To preserve forward compatibility,
software:
• Must not rely on the bit reading as 1.
• Must use an SBOP policy to write to the bit.
The RES1 description can apply to bits or bitfields that are read-only, or are write-only:
• For a read-only bit, RES1 indicates that the bit reads as 1, but software must treat the bit as UNKNOWN.
• For a write-only bit, RES1 indicates that software must treat the bit as SBO.
This RES1 description can apply to a single bit that should be written as its preserved value or as 1, or to a field that
should be written as its preserved value or as all 1s.
Scheduled vPE A virtual PE that is currently running on a physical PE. In GICv4, the scheduled vPE is specified by
GICR_VPENDBASER.
Should-Be-One (SBO)
Hardware must ignore writes to the field.
ARM strongly recommends that software writes the field as all 1s. If software writes a value that is not all 1s, it must
expect an UNPREDICTABLE result.
This description can apply to a single bit that should be written as 1, or to a field that should be written as all 1s.
Should-Be-One-or-Preserved (SBOP)
From the introduction of the ARMv8 architecture, the description of Should-Be-One-or-Preserved (SBOP) is
superseded by RES1.
If software has read the field since the PE implementing the field was last reset and initialized, it must preserve the
value of the field by writing the value that it previously read from the field. Otherwise, it must write the field as all
1s.
If software writes a value to the field that is not a value previously read for the field and is not all 1s, it must expect
an UNPREDICTABLE result.
This description can apply to a single bit that should be written as its preserved value or as 1, or to a field that should
be written as its preserved value or as all 1s.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. Glossary-777
ID072617 Non-Confidential
Glossary
Should-Be-Zero (SBZ)
Hardware must ignore writes to the field.
ARM strongly recommends that software write the field as all 0s. If software writes a value that is not all 0s, it must
expect an UNPREDICTABLE result.
This description can apply to a single bit that should be written as 0, or to a field that should be written as all 0s.
Should-Be-Zero-or-Preserved (SBZP)
From the introduction of the ARMv8 architecture, the description Should-Be-Zero-or-Preserved (SBZP) is
superseded by RES0.
If software has read the field since the PE implementing the field was last reset and initialized, it must preserve the
value of the field by writing the value that it previously read from the field. Otherwise, it must write the field as all
0s.
If software writes a value to the field that is not a value previously read for the field and is not all 0s, it must expect
an UNPREDICTABLE result.
This description can apply to a single bit that should be written as its preserved value or as 0, or to a field that should
be written as its preserved value or as all 0s.
An interrupt generated by the GIC in response to software writing to an SGI register in the GIC. SGIs are typically
used for inter-processor communication. SGIs can be either Group 0 or Group 1 interrupts, and have edge-triggered
behavior.
Spurious interrupt
An interrupt that does not require servicing. Usually, refers to an INTID returned by a GIC to a request from a
connected PE. Returning a spurious INTID indicates that there is no pending interrupt on the CPU interface that the
requesting PE can service.
UNK An abbreviation indicating that software must treat a field as containing an UNKNOWN value.
Hardware must implement the bit as read as 0, or all 0s for a multi-bit field. Software must not rely on the field
reading as zero.
UNK/SBOP Hardware must implement the field as Read-As-One, and must ignore writes to the field.
Software must not rely on the field reading as all 1s, and except for writing back to the register it must treat the value
as if it is UNKNOWN. Software must use an SBOP policy to write to the field.
This description can apply to a single bit that should be written as its preserved value or as 1, or to a field that should
be written as its preserved value or as all 1s.
UNK/SBZP Hardware must implement the bit as Read-As-Zero, and must ignore writes to the field.
Software must not rely on the field reading as all 0s, and except for writing back to the register must treat the value
as if it is UNKNOWN. Software must use an SBZP policy to write to the field.
Glossary-778 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617
Glossary
This description can apply to a single bit that should be written as its preserved value or as 0, or to a field that should
be written as its preserved value or as all 0s.
UNKNOWN An UNKNOWN value does not contain valid data, and can vary from moment to moment, instruction to instruction,
and implementation to implementation. An UNKNOWN value must not return information that cannot be accessed at
the current or a lower level of privilege using instructions that are not UNPREDICTABLE, are not CONSTRAINED
UNPREDICTABLE, and do not return UNKNOWN values.
An UNKNOWN value must not be documented or promoted as having a defined value or effect.
UNPREDICTABLE
Means the behavior cannot be relied on. UNPREDICTABLE behavior must not perform any function that cannot be
performed at the current or a lower level of privilege using instructions that are not UNPREDICTABLE.
UNPREDICTABLE behavior must not be documented or promoted as having a defined effect.
Valid interrupt ID
An interrupt ID, as returned by a read of ICC_IAR0_EL1 or ICC_IAR1_EL1, that is not a spurious interrupt ID.
WI Writes Ignored. In a register that software can write to, a WI attribute applied to a bit or field indicates that the bit
or field ignores the value written by software and retains the value it had before that write.
Word A 32-bit data item. Words are normally word-aligned in ARM systems.
ARM IHI 0069D Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. Glossary-779
ID072617 Non-Confidential
Glossary
Glossary-780 Copyright © 2008, 2011, 2015-2017 ARM Limited or its affiliates. All rights reserved. ARM IHI 0069D
Non-Confidential ID072617