<?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>GICD_IROUTER&lt;n&gt;</reg_short_name>
        
        <reg_long_name>Interrupt Routing Registers</reg_long_name>



      
          <reg_array>
              <reg_array_start>32</reg_array_start>
              <reg_array_end>1019</reg_array_end>
         </reg_array>
      

    
  <reg_address
      external_access="False"
    mem_map_access="True"
      power_domain="None"
  >
    <reg_component>GIC Distributor</reg_component>
    <reg_frame>Dist_base</reg_frame>
    <reg_offset><hexnumber>0x6000</hexnumber> + (8 * n)</reg_offset>
    <reg_instance>GICD_IROUTER&lt;n&gt;</reg_instance>
    <reg_access>
      
        
      <reg_access_state>
          <reg_access_type>RW</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>When affinity routing is enabled, provides routing information for the SPI with INTID n.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GICD</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>These registers are available in all configurations of the GIC. If the GIC implementation supports two Security states, these registers are Common.</para>

      </configuration_text>
      <configuration_text>
        <para>The maximum value of n is given by (32*(GICD_TYPER.ITLinesNumber+1) - 1). <register_link state="ext" id="ext-gicd_iroutern.xml">GICD_IROUTER&lt;n&gt;</register_link> registers where n=0 to 31 are reserved.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>GICD_IROUTER&lt;n&gt; is a 64-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <text_before_fields/>
  <field id="fieldset_0-63_40" 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>63</field_msb>
    <field_lsb>40</field_lsb>
    <rel_range>63:40</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-39_32" 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>Aff3</field_name>
    <field_msb>39</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>39:32</rel_range>
    <field_description order="before">
      <para>Affinity level 3.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="GIC">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-31_31" 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>Interrupt_Routing_Mode</field_name>
    <field_msb>31</field_msb>
    <field_lsb>31</field_lsb>
    <rel_range>31</rel_range>
    <field_description order="before">
      <para>Interrupt Routing Mode. Defines how SPIs are routed in an affinity hierarchy:</para>
    </field_description>
    <field_description order="after"><para>If GICD_IROUTER&lt;n&gt;.IRM == 0 and the affinity path does not correspond to an implemented PE, then if the corresponding interrupt becomes pending behavior is <arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word>:</para>
<list type="unordered">
<listitem><content>
<para>The interrupt is not forwarded to any PE, direct reads return the written value</para>
</content>
</listitem><listitem><content>
<para>The affinity path is treated as an <arm-defined-word>UNKNOWN</arm-defined-word> implemented PE, direct reads return the <arm-defined-word>UNKNOWN</arm-defined-word> implemented PE</para>
</content>
</listitem><listitem><content>
<para>The affinity path is treated as an <arm-defined-word>UNKNOWN</arm-defined-word> implemented PE, direct reads return the written value</para>
</content>
</listitem></list>
<para>When <register_link state="ext" id="ext-gicd_typer.xml">GICD_TYPER</register_link>.No1N is 1, 1 of N distribution is not supported. Setting this field to 1 is <arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word>, the permitted behaviors are:</para>
<list type="unordered">
<listitem><content>
<para>The field behaves as if set to 0 for all purposes.</para>
</content>
</listitem><listitem><content>
<para>The field behaves as if set to 0 for all purposes other than a direct-read of the register.</para>
</content>
</listitem><listitem><content>
<para>The interrupt is treated as not targeting any PE.</para>
</content>
</listitem></list>
<para>When this bit is set to 1, GICD_IROUTER&lt;n&gt;.{Aff3, Aff2, Aff1, Aff0} are <arm-defined-word>UNKNOWN</arm-defined-word>.</para>
<note><para>An implementation might choose to make the Aff&lt;n&gt; fields RO when this field is 1.</para></note></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Interrupts routed to the PE specified by a.b.c.d. In this routing, a, b, c, and d are the values of fields Aff3, Aff2, Aff1, and Aff0 respectively.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Interrupts routed to any PE defined as a participating node.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="GIC">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-30_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>30</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>30: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_16" 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>Aff2</field_name>
    <field_msb>23</field_msb>
    <field_lsb>16</field_lsb>
    <rel_range>23:16</rel_range>
    <field_description order="before">
      <para>Affinity level 2.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="GIC">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-15_8" 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>Aff1</field_name>
    <field_msb>15</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>15:8</rel_range>
    <field_description order="before">
      <para>Affinity level 1.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="GIC">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-7_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>Aff0</field_name>
    <field_msb>7</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>7:0</rel_range>
    <field_description order="before">
      <para>Affinity level 0.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="GIC">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <text_after_fields><para>For an SPI with INTID m:</para>
<list type="unordered">
<listitem><content>The corresponding GICD_IROUTER&lt;n&gt; register number, n, is given by n = m.</content>
</listitem><listitem><content>The offset of the GICD_IROUTER&lt;n&gt; register is <hexnumber>0x6000</hexnumber> + 8n.</content>
</listitem></list></text_after_fields>
</fields>




<reg_fieldset length="64">
  <fieldat id="fieldset_0-63_40" msb="63" lsb="40"/>
  <fieldat id="fieldset_0-39_32" msb="39" lsb="32"/>
  <fieldat id="fieldset_0-31_31" msb="31" lsb="31"/>
  <fieldat id="fieldset_0-30_24" msb="30" lsb="24"/>
  <fieldat id="fieldset_0-23_16" msb="23" lsb="16"/>
  <fieldat id="fieldset_0-15_8" msb="15" lsb="8"/>
  <fieldat id="fieldset_0-7_0" msb="7" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>
        <reg_variables>
              <reg_variable variable="n" min="32" max="1019"/>
        </reg_variables>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>These registers are used only when affinity routing is enabled. When affinity routing is not enabled:</para>

      </access_permission_text>
      <access_permission_text>
        <list type="unordered">
<listitem><content>These registers are <arm-defined-word>RES0</arm-defined-word>. An implementation is permitted to make the register RAZ/WI in this case.</content>
</listitem><listitem><content>The <register_link state="ext" id="ext-gicd_itargetsrn.xml">GICD_ITARGETSR&lt;n&gt;</register_link> registers provide interrupt routing information.</content>
</listitem></list>

      </access_permission_text>
      <access_permission_text>
        <note><para>When affinity routing becomes enabled for a Security state (for example, following a reset or following a write to <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>) the value of all writable fields in this register is <arm-defined-word>UNKNOWN</arm-defined-word> 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 <arm-defined-word>UNKNOWN</arm-defined-word> for that interrupt.</para></note>
      </access_permission_text>
      <access_permission_text>
        <para>If <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS==0, unless the <register_link state="ext" id="ext-gicd_nsacrn.xml">GICD_NSACR&lt;n&gt;</register_link> registers permit Non-secure software to control Group 0 and Secure Group 1 interrupts, any GICD_IROUTER&lt;n&gt; registers that correspond to Group 0 or Secure Group 1 interrupts are accessible only by Secure accesses and are RAZ/WI to Non-secure accesses.</para>

      </access_permission_text>
      <access_permission_text>
        <note><para>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 one time. The effect of the change must be visible in finite time.</para></note>
      </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>