<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE register_page SYSTEM "registers.dtd">
<!-- Copyright (c) 2010-2026 Arm Limited or its affiliates. All rights reserved. -->
<!-- This document is Non-Confidential. This document may only be used and distributed in accordance with the terms of the agreement entered into by Arm and the party that Arm delivered this document to. -->
<!--The data contained in this document is preliminary and subject to change or correction following further review. -->
<?xml-stylesheet href="one_register.xsl" type="text/xsl" ?>







<register_page>
  <registers>
  
    <register is_register="True" is_internal="False" is_stub_entry="False">
      <reg_short_name>GICC_IAR</reg_short_name>
        
        <reg_long_name>CPU Interface Interrupt Acknowledge Register</reg_long_name>



      
            <reg_condition otherwise="RES0">when FEAT_GICv3_LEGACY is implemented</reg_condition>
      

    
  <reg_address
      external_access="False"
    mem_map_access="True"
      power_domain="None"
  >
    <reg_component>GIC CPU interface</reg_component>
    <reg_offset><hexnumber>0x000C</hexnumber></reg_offset>
    <reg_instance>GICC_IAR</reg_instance>
    <reg_access>
      
        
      <reg_access_state>
          <reg_access_level>When GICD_CTLR.DS == '0'</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Secure</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Non-secure</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
    </reg_access>
</reg_address>



          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Provides the INTID of the signaled interrupt. A read of this register by the PE acts as an acknowledge for the interrupt.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GICC</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>This register is available in all configurations of the GIC. If <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS==0:</para>

      </configuration_text>
      <configuration_text>
        <list type="unordered">
<listitem><content>This register is Common.</content>
</listitem><listitem><content><register_link state="ext" id="ext-gicc_aiar.xml">GICC_AIAR</register_link> is an alias of the Non-secure view of this register.</content>
</listitem></list>

      </configuration_text>
      <configuration_text>
        <para>The format of the INTID is governed by whether affinity routing is enabled for a Security state.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>GICC_IAR is a 32-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="32">
  <text_before_fields/>
  <field id="fieldset_0-31_24" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="False" is_partial_field="False" is_conditional_field_name="False" rwtype="RES0">
    <field_msb>31</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>31:24</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
  </field>
  <field id="fieldset_0-23_0" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="False" is_partial_field="False" is_conditional_field_name="False">
    <field_name>INTID</field_name>
    <field_msb>23</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>23:0</rel_range>
    <field_description order="before"><para>The INTID of the signaled interrupt.</para>
<note><para>INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.</para></note><para>When affinity routing is not enabled:</para>
<list type="unordered">
<listitem><content>Bits [23:13] are <arm-defined-word>RES0</arm-defined-word>.</content>
</listitem><listitem><content>For SGIs, bits [12:10] identify the CPU interface corresponding to the source PE. For all other interrupts these bits are <arm-defined-word>RES0</arm-defined-word>.</content>
</listitem></list></field_description>
  </field>
  <text_after_fields><para>A read of this register returns the INTID of the highest priority pending interrupt for the CPU interface. The read returns a spurious INTID of 1023 if any of the following apply:</para>
<list type="unordered">
<listitem><content>Forwarding of interrupts by the Distributor to the CPU interface is disabled.</content>
</listitem><listitem><content>Signaling of interrupts by the CPU interface to the connected PE is disabled.</content>
</listitem><listitem><content>There are no pending interrupts on the CPU interface with sufficient priority for the interface to signal it to the PE.</content>
</listitem></list>
<para>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.</para>
<para>For every read of a valid INTID from GICC_IAR, the connected PE must perform a matching write to <register_link state="ext" id="ext-gicc_eoir.xml">GICC_EOIR</register_link>.</para>
<note><list type="unordered"><listitem><content>Arm recommends that software preserves the entire register value read from this register, and writes that value back to <register_link state="ext" id="ext-gicc_eoir.xml">GICC_EOIR</register_link> on completion of interrupt processing.</content></listitem><listitem><content>For SPIs, although multiple target PEs might attempt to read this register at any time, only one PE can obtain a valid INTID. For more information, see <xref filename="AS_interrupt_handling_and_prioritization.recover.fm" linkend="CJHEEFCG">'Activation' in ARM® Generic Interrupt Controller Architecture Specification, GIC architecture version 3.0 and version 4.0 (ARM IHI 0069)</xref>.</content></listitem></list></note></text_after_fields>
</fields>




<reg_fieldset length="32">
  <fieldat id="fieldset_0-31_24" msb="31" lsb="24"/>
  <fieldat id="fieldset_0-23_0" msb="23" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>When <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS==1, if the highest priority pending interrupt is in Group 1, the special INTID 1022 is returned.</para>

      </access_permission_text>
      <access_permission_text>
        <para>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.</para>

      </access_permission_text>
      <access_permission_text>
        <para>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.</para>

      </access_permission_text>
      <access_permission_text>
        <para>This register is used only when System register access is not enabled. When System register access is enabled:</para>

      </access_permission_text>
      <access_permission_text>
        <list type="unordered">
<listitem><content>For AArch32 implementations, <register_link state="AArch32" id="AArch32-icc_iar0.xml">ICC_IAR0</register_link> and <register_link state="AArch32" id="AArch32-icc_iar1.xml">ICC_IAR1</register_link> provide equivalent functionality.</content>
</listitem><listitem><content>For AArch64 implementations, <register_link state="AArch64" id="AArch64-icc_iar0_el1.xml">ICC_IAR0_EL1</register_link> and <register_link state="AArch64" id="AArch64-icc_iar1_el1.xml">ICC_IAR1_EL1</register_link> provide equivalent functionality.</content>
</listitem></list>

      </access_permission_text>
      <access_permission_text>
        <para>When affinity routing is enabled for a Security state, it is a programming error to use memory-mapped registers to access the GIC.</para>
      </access_permission_text>





    

      </access_mechanisms>

      <arch_variants>
      </arch_variants>
  </register>
</registers>
<timestamp>2026-03-26 20:27:25</timestamp>
<commit_id>2026-03_rel</commit_id>
</register_page>