<?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_VMCR</reg_short_name>
        
        <reg_long_name>Virtual Machine Control Register</reg_long_name>



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

    
  <reg_address
      external_access="False"
    mem_map_access="True"
      power_domain="None"
  >
    <reg_component>GIC Virtual interface control</reg_component>
    <reg_offset><hexnumber>0x0008</hexnumber></reg_offset>
    <reg_instance>GICH_VMCR</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>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.</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>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>GICH_VMCR 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">
    <field_name>VPMR</field_name>
    <field_msb>31</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>31:24</rel_range>
    <field_description order="before"><para>Virtual priority mask. The priority mask level for the CPU interface. If the priority of an interrupt is higher than the value indicated by this field, the interface signals the interrupt to the PE.</para>
<para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_pmr.xml">GICV_PMR</register_link>.Priority.</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-23_21" 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>VBPR0</field_name>
    <field_msb>23</field_msb>
    <field_lsb>21</field_lsb>
    <rel_range>23:21</rel_range>
    <field_description order="before"><para>Virtual Binary Point Register, Group 0. 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, and also determines Group 1 interrupt preemption if GICH_VMCR.VCBPR == 1.</para>
<para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_bpr.xml">GICV_BPR</register_link>.Binary_Point.</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-20_18" 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>VBPR1</field_name>
    <field_msb>20</field_msb>
    <field_lsb>18</field_lsb>
    <rel_range>20:18</rel_range>
    <field_description order="before"><para>Virtual Binary Point Register, Group 1. 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 if GICH_VMCR.VCBPR == 0.</para>
<para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_abpr.xml">GICV_ABPR</register_link>.Binary_Point.</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-17_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" rwtype="RES0">
    <field_msb>17</field_msb>
    <field_lsb>10</field_lsb>
    <rel_range>17:10</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-9_9" 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>VEOIM</field_name>
    <field_msb>9</field_msb>
    <field_lsb>9</field_lsb>
    <rel_range>9</rel_range>
    <field_description order="before">
      <para>Virtual EOImode. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after">
      <para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EOImode.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>A write of an INTID 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> drops the priority of the interrupt with that INTID, and also deactivates that interrupt.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>A write of an INTID 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> only drops the priority of the interrupt with that INTID. Software must write to <register_link state="ext" id="ext-gicv_dir.xml">GICV_DIR</register_link> to deactivate the interrupt.</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-8_5" 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>8</field_msb>
    <field_lsb>5</field_lsb>
    <rel_range>8:5</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-4_4" 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>VCBPR</field_name>
    <field_msb>4</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>4</rel_range>
    <field_description order="before">
      <para>Virtual Common Binary Point Register. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after">
      <para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.CBPR.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para><register_link state="ext" id="ext-gicv_abpr.xml">GICV_ABPR</register_link> determines the preemption group for Group 1 interrupts.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para><register_link state="ext" id="ext-gicv_bpr.xml">GICV_BPR</register_link> determines the preemption group for Group 1 interrupts.</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-3_3" 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>VFIQEn</field_name>
    <field_msb>3</field_msb>
    <field_lsb>3</field_lsb>
    <rel_range>3</rel_range>
    <field_description order="before">
      <para>Virtual FIQ enable. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after">
      <para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.FIQEn.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Group 0 virtual interrupts are presented as virtual IRQs.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Group 0 virtual interrupts are presented as virtual FIQs.</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-2_2" 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>VAckCtl</field_name>
    <field_msb>2</field_msb>
    <field_lsb>2</field_lsb>
    <rel_range>2</rel_range>
    <field_description order="before">
      <para>Virtual AckCtl. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after"><para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.AckCtl.</para>
<para>This field is supported for backward compatibility with GICv2. Arm deprecates the use of this field.</para></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>If the highest priority pending interrupt is Group 1, a read of <register_link state="ext" id="ext-gicv_iar.xml">GICV_IAR</register_link> or <register_link state="ext" id="ext-gicv_hppir.xml">GICV_HPPIR</register_link> returns an INTID of 1022.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>If the highest priority pending interrupt is Group 1, a read of <register_link state="ext" id="ext-gicv_iar.xml">GICV_IAR</register_link> or <register_link state="ext" id="ext-gicv_hppir.xml">GICV_HPPIR</register_link> returns the INTID of the corresponding interrupt.</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-1_1" 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>VENG1</field_name>
    <field_msb>1</field_msb>
    <field_lsb>1</field_lsb>
    <rel_range>1</rel_range>
    <field_description order="before">
      <para>Virtual interrupt enable, Group 1. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after">
      <para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EnableGrp1.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Group 1 virtual interrupts are disabled.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Group 1 virtual interrupts are enabled.</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-0_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>VENG0</field_name>
    <field_msb>0</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before">
      <para>Virtual interrupt enable, Group 0. Possible values of this bit are:</para>
    </field_description>
    <field_description order="after">
      <para>This alias field is updated when a VM updates <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.EnableGrp0.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Group 0 virtual interrupts are disabled.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Group 0 virtual interrupts are enabled.</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>
  <text_after_fields>
    <note>
      <para>A List register is in the pending state only if the corresponding <register_link state="ext" id="ext-gich_lrn.xml">GICH_LR&lt;n&gt;</register_link> value is <binarynumber>0b01</binarynumber>, that is, pending. The active and pending state is not included.</para>
    </note>
  </text_after_fields>
</fields>




<reg_fieldset length="32">
  <fieldat id="fieldset_0-31_24" msb="31" lsb="24"/>
  <fieldat id="fieldset_0-23_21" msb="23" lsb="21"/>
  <fieldat id="fieldset_0-20_18" msb="20" lsb="18"/>
  <fieldat id="fieldset_0-17_10" msb="17" lsb="10"/>
  <fieldat id="fieldset_0-9_9" msb="9" lsb="9"/>
  <fieldat id="fieldset_0-8_5" msb="8" lsb="5"/>
  <fieldat id="fieldset_0-4_4" msb="4" lsb="4"/>
  <fieldat id="fieldset_0-3_3" msb="3" lsb="3"/>
  <fieldat id="fieldset_0-2_2" msb="2" lsb="2"/>
  <fieldat id="fieldset_0-1_1" msb="1" lsb="1"/>
  <fieldat id="fieldset_0-0_0" msb="0" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <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_vmcr.xml">ICH_VMCR</register_link> provides equivalent functionality.</content>
</listitem><listitem><content>For AArch64 implementations, <register_link state="AArch64" id="AArch64-ich_vmcr_el2.xml">ICH_VMCR_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>