<?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>GICH_LR&lt;n&gt;</reg_short_name>
        
        <reg_long_name>List Registers</reg_long_name>



      
            <reg_condition otherwise="RES0">when FEAT_GICv3_LEGACY is implemented and EL2 is implemented</reg_condition>
          <reg_array>
              <reg_array_start>0</reg_array_start>
              <reg_array_end>15</reg_array_end>
         </reg_array>
      

    
  <reg_address
      external_access="False"
    mem_map_access="True"
      power_domain="None"
  >
    <reg_component>GIC Virtual interface control</reg_component>
    <reg_offset><hexnumber>0x0100</hexnumber> + (4 * n)</reg_offset>
    <reg_instance>GICH_LR&lt;n&gt;</reg_instance>
    <reg_access>
      
        
      <reg_access_state>
          <reg_access_level>When GICD_CTLR.DS == '0'</reg_access_level>
          <reg_access_type>RW</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Secure</reg_access_level>
          <reg_access_type>RW</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Non-secure</reg_access_level>
          <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>These registers provide context information for the virtual CPU interface.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GICH</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>This register is available when the GIC implementation supports interrupt virtualization.</para>

      </configuration_text>
      <configuration_text>
        <para>A maximum of 16 List registers can be provided. <register_link state="ext" id="ext-gich_vtr.xml">GICH_VTR</register_link>.ListRegs defines the number implemented. Unimplemented List registers are RAZ/WI.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>GICH_LR&lt;n&gt; 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_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>HW</field_name>
    <field_msb>31</field_msb>
    <field_lsb>31</field_lsb>
    <rel_range>31</rel_range>
    <field_description order="before">
      <para>Indicates whether this virtual interrupt is a hardware interrupt, meaning that it corresponds to a physical interrupt. Deactivation of the virtual interrupt also causes the deactivation of the physical interrupt corresponding to the INTID:</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>This interrupt is triggered entirely in software. No notification is sent to the Distributor when the virtual interrupt is deactivated.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description><para>A hardware interrupt. A deactivate interrupt request is sent to the Distributor when the virtual interrupt is deactivated, using GICH_LR&lt;n&gt;.pINTID to indicate the physical interrupt identifier.</para>
<para>If <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EOImode == 0, this request corresponds to a write to <register_link state="ext" id="ext-gicv_eoir.xml">GICV_EOIR</register_link> or <register_link state="ext" id="ext-gicv_aeoir.xml">GICV_AEOIR</register_link>, otherwise it corresponds to a write to <register_link state="ext" id="ext-gicv_dir.xml">GICV_DIR</register_link>.</para></field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-30_30" 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>Group</field_name>
    <field_msb>30</field_msb>
    <field_lsb>30</field_lsb>
    <rel_range>30</rel_range>
    <field_description order="before">
      <para>Indicates whether the interrupt is Group 0 or Group 1:</para>
    </field_description>
    <field_description order="after">
      <note>
        <para><register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.CBPR controls whether <register_link state="ext" id="ext-gicv_bpr.xml">GICV_BPR</register_link> or <register_link state="ext" id="ext-gicv_abpr.xml">GICV_ABPR</register_link> determines if a pending Group 1 interrupt has sufficient priority to preempt current execution.</para>
      </note>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Group 0 virtual interrupt. <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.FIQEn determines whether it is signaled as a virtual IRQ or as a virtual FIQ, and <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EnableGrp0 enables signaling of this interrupt to the virtual machine.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Group 1 virtual interrupt, signaled as a virtual IRQ. <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EnableGrp1 enables signaling of this interrupt to the virtual machine.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-29_28" 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>State</field_name>
    <field_msb>29</field_msb>
    <field_lsb>28</field_lsb>
    <rel_range>29:28</rel_range>
    <field_description order="before">
      <para>The state of the interrupt. This field has one of the following values:</para>
    </field_description>
    <field_description order="after"><para>The GIC updates these state bits as virtual interrupts proceed through the interrupt life cycle. Entries in the inactive state are ignored, except for the purpose of generating virtual maintenance interrupts.</para>
<note><para>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.</para></note></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b00</field_value>
        <field_value_description>
          <para>Inactive</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b01</field_value>
        <field_value_description>
          <para>Pending</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b10</field_value>
        <field_value_description>
          <para>Active</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b11</field_value>
        <field_value_description>
          <para>Active and pending</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-27_23" 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>Priority</field_name>
    <field_msb>27</field_msb>
    <field_lsb>23</field_lsb>
    <rel_range>27:23</rel_range>
    <field_description order="before">
      <para>The priority of this interrupt.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-22_20" 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>22</field_msb>
    <field_lsb>20</field_lsb>
    <rel_range>22:20</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-19_10" 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>pINTID</field_name>
    <field_msb>19</field_msb>
    <field_lsb>10</field_lsb>
    <rel_range>19:10</rel_range>
    <field_description order="before"><para>The function of this field depends on the value of GICH_LR&lt;n&gt;.HW.</para>
<para>When GICH_LR&lt;n&gt;.HW == 0:</para>
<list type="unordered">
<listitem><content>Bit [19] indicates whether the interrupt triggers an EOI maintenance interrupt. If this bit is 1, then when the interrupt identified by vINTID is deactivated, an EOI maintenance interrupt is asserted.</content>
</listitem><listitem><content>Bits [18:13] are reserved, SBZ.</content>
</listitem><listitem><content>If the vINTID field value corresponds to an SGI (that is, 0-15), bits [12:10] contain the number of the requesting PE. This appears in the corresponding field of <register_link state="ext" id="ext-gicv_iar.xml">GICV_IAR</register_link> or <register_link state="ext" id="ext-gicv_aiar.xml">GICV_AIAR</register_link>. If the vINTID field value is not 0-15, this field must be cleared to 0.</content>
</listitem></list>
<para>When GICH_LR&lt;n&gt;.HW == 1:</para>
<list type="unordered">
<listitem><content>This field indicates the pINTID that the hypervisor forwards to the Distributor. This field is only required to implement enough bits to hold a valid value for the ID configuration. Any unused higher order bits are RAZ/WI.</content>
</listitem><listitem><content>If the value of pINTID is 0-15 or 1020-1023, behavior is <arm-defined-word>UNPREDICTABLE</arm-defined-word>. If the value of pINTID is 16-31, this field applies to the PPI associated with this same PE as the virtual CPU interface requesting the deactivation.</content>
</listitem></list></field_description>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-9_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>vINTID</field_name>
    <field_msb>9</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>9:0</rel_range>
    <field_description order="before">
      <para>This INTID is returned to the VM when the interrupt is acknowledged through <register_link state="ext" id="ext-gicv_iar.xml">GICV_IAR</register_link>. Each valid interrupt stored in the List registers must have a unique vINTID for that virtual CPU interface. If the value of vINTID is 1020-1023, behavior is <arm-defined-word>UNPREDICTABLE</arm-defined-word>.</para>
    </field_description>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <text_after_fields/>
</fields>




<reg_fieldset length="32">
  <fieldat id="fieldset_0-31_31" msb="31" lsb="31"/>
  <fieldat id="fieldset_0-30_30" msb="30" lsb="30"/>
  <fieldat id="fieldset_0-29_28" msb="29" lsb="28"/>
  <fieldat id="fieldset_0-27_23" msb="27" lsb="23"/>
  <fieldat id="fieldset_0-22_20" msb="22" lsb="20"/>
  <fieldat id="fieldset_0-19_10" msb="19" lsb="10"/>
  <fieldat id="fieldset_0-9_0" msb="9" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>
        <reg_variables>
              <reg_variable variable="n" max="15"/>
        </reg_variables>

      <access_mechanisms>
          


  
    
      <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-ich_lrn.xml">ICH_LR&lt;n&gt;</register_link> provides equivalent functionality.</content>
</listitem><listitem><content>For AArch64 implementations, <register_link state="AArch64" id="AArch64-ich_lrn_el2.xml">ICH_LR&lt;n&gt;_EL2</register_link> provides equivalent functionality.</content>
</listitem></list>
      </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>