<?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 execution_state="AArch64" is_register="True" is_internal="True" is_stub_entry="False">
      <reg_short_name>VSTCR_EL2</reg_short_name>
        
        <reg_long_name>Virtualization Secure Translation Control Register</reg_long_name>



      
            <reg_condition otherwise="UNDEFINED">when FEAT_SEL2 is implemented and FEAT_AA64 is implemented</reg_condition>
      




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>The control register for stage 2 of the Secure EL1&amp;0 translation regime.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
          <reg_group>Generic System Control</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>This register has no effect if EL2 is not enabled in the current Security state.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>VSTCR_EL2 is a 64-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <text_before_fields>
    <para>Any of the bits in VSTCR_EL2 are permitted to be cached in a TLB.</para>
  </text_before_fields>
  <field id="fieldset_0-63_34" 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>34</field_lsb>
    <rel_range>63:34</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-33_33-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" reserved_type="RES0">
    <field_name>SL2</field_name>
    <field_msb>33</field_msb>
    <field_lsb>33</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before"><para>Starting level of the Secure stage 2 translation lookup controlled by VSTCR_EL2.</para>
<para>If <register_link state="AArch64" id="AArch64-vtcr_el2.xml">VTCR_EL2</register_link>.DS == 1, then VSTCR_EL2.SL2, in combination with VSTCR_EL2.SL0, gives encodings for the Secure stage 2 translation table walk initial lookup level.</para>
<para>If <register_link state="AArch64" id="AArch64-vtcr_el2.xml">VTCR_EL2</register_link>.DS == 0, then VSTCR_EL2.SL2 is <arm-defined-word>RES0</arm-defined-word>.</para>
<para>If the translation granule size is not 4KB, then this field is <arm-defined-word>RES0</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>
    <fields_condition>When FEAT_LPA2 is implemented and (FEAT_D128 is not implemented or VTCR_EL2.D128 == '0')</fields_condition>
  </field>
  <field id="fieldset_0-33_33-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" rwtype="RES0">
    <field_msb>33</field_msb>
    <field_lsb>33</field_lsb>
    <rel_range>33</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
    <fields_condition>Otherwise</fields_condition>
  </field>
  <field id="fieldset_0-32_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" rwtype="RES0">
    <field_msb>32</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>32</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-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" rwtype="RES1">
    <field_msb>31</field_msb>
    <field_lsb>31</field_lsb>
    <rel_range>31</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES1</arm-defined-word>.</para>
    </field_description>
  </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>SA</field_name>
    <field_msb>30</field_msb>
    <field_lsb>30</field_lsb>
    <rel_range>30</rel_range>
    <field_description order="before">
      <para>Secure stage 2 translation output address space.</para>
    </field_description>
    <field_description order="after">
      <para>When the value of VSTCR_EL2.SW is 1, this bit behaves as 1 for all purposes other than reading back the value of the bit.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>All stage 2 translations for the Secure IPA space access the Secure PA space.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>All stage 2 translations for the Secure IPA space access the Non-secure PA space.</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_29" 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>SW</field_name>
    <field_msb>29</field_msb>
    <field_lsb>29</field_lsb>
    <rel_range>29</rel_range>
    <field_description order="before">
      <para>Secure stage 2 translation address space.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>All stage 2 translation table walks for the Secure IPA space are to the Secure PA space.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>All stage 2 translation table walks for the Secure IPA space are to the Non-secure PA space.</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-28_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" rwtype="RES0">
    <field_msb>28</field_msb>
    <field_lsb>16</field_lsb>
    <rel_range>28:16</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-15_14" 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>TG0</field_name>
    <field_msb>15</field_msb>
    <field_lsb>14</field_lsb>
    <rel_range>15:14</rel_range>
    <field_description order="before">
      <para>Secure stage 2 granule size for <register_link state="AArch64" id="AArch64-vsttbr_el2.xml">VSTTBR_EL2</register_link>.</para>
    </field_description>
    <field_description order="after"><para>Other values are reserved.</para>
<para>If <xref linkend="#FEAT_GTG">FEAT_GTG</xref> is implemented, <register_link state="AArch64" id="AArch64-id_aa64mmfr0_el1.xml">ID_AA64MMFR0_EL1</register_link>.{TGran4_2, TGran16_2, TGran64_2} indicate which granule sizes are supported for stage 2 translation.</para>
<para>If <xref linkend="#FEAT_GTG">FEAT_GTG</xref> is not implemented, <register_link state="AArch64" id="AArch64-id_aa64mmfr0_el1.xml">ID_AA64MMFR0_EL1</register_link>.{TGran4, TGran16, TGran64} indicate which granule sizes are supported.</para>
<para>If the value is programmed to either a reserved value, or a size that has not been implemented, then the hardware will treat the field as if it has been programmed to an <arm-defined-word>IMPLEMENTATION DEFINED</arm-defined-word> choice of the sizes that has been implemented for all purposes other than the value read back from this register.</para>
<para>It is <arm-defined-word>IMPLEMENTATION DEFINED</arm-defined-word> whether the value read back is the value programmed or the value that corresponds to the size chosen.</para></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b00</field_value>
        <field_value_description>
          <para>4KB.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b01</field_value>
        <field_value_description>
          <para>64KB.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b10</field_value>
        <field_value_description>
          <para>16KB.</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-13_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" rwtype="RES0">
    <field_msb>13</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>13:8</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-7_6-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" reserved_type="RES0">
    <field_name>SL0</field_name>
    <field_msb>7</field_msb>
    <field_lsb>6</field_lsb>
    <rel_range>1:0</rel_range>
    <field_description order="before">
      <para>Starting level of the Secure stage 2 translation lookup, controlled by VSTCR_EL2. The meaning of this field depends on the value of VSTCR_EL2.TG0.</para>
    </field_description>
    <field_description order="after">
      <para>If this field is programmed to a value that is not consistent with the programming of VSTCR_EL2.T0SZ, then a stage 2 level 0 Translation fault is generated.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b00</field_value>
        <field_value_description><para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule):</para>
<list type="unordered">
<listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is not implemented, start at level 2.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and VSTCR_EL2.SL2 is 0, start at level 2.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and VSTCR_EL2.SL2 is 1, start at level -1.</para>
</content>
</listitem></list>
<para>If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 3.</para></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b01</field_value>
        <field_value_description><para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule):</para>
<list type="unordered">
<listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is not implemented, start at level 1.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and VSTCR_EL2.SL2 is 0, start at level 1.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented, the combination of VSTCR_EL2.SL0 == 01 and VSTCR_EL2.SL2 == 1 is reserved.</para>
</content>
</listitem></list>
<para>If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 2.</para></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b10</field_value>
        <field_value_description><para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule):</para>
<list type="unordered">
<listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is not implemented, start at level 0.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and VSTCR_EL2.SL2 is 0, start at level 0.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented, the combination of VSTCR_EL2.SL0 == 10 and VSTCR_EL2.SL2 == 1 is reserved.</para>
</content>
</listitem></list>
<para>If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 1.</para></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b11</field_value>
        <field_value_description><para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule):</para>
<list type="unordered">
<listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is not implemented, start at level 3.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and VSTCR_EL2.SL2 is 0, start at level 3.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented, the combination of VSTCR_EL2.SL0 == 11 and VSTCR_EL2.SL2 == 1 is reserved.</para>
</content>
</listitem></list>
<para>If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) and <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented, start at level 0.</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>
    <fields_condition>When FEAT_TTST is implemented and (FEAT_D128 is not implemented or VTCR_EL2.D128 == '0')</fields_condition>
  </field>
  <field id="fieldset_0-7_6-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" reserved_type="RES0">
    <field_name>SL0</field_name>
    <field_msb>7</field_msb>
    <field_lsb>6</field_lsb>
    <rel_range>1:0</rel_range>
    <field_description order="before">
      <para>Starting level of the Secure stage 2 translation lookup, controlled by VSTCR_EL2. The meaning of this field depends on the value of VSTCR_EL2.TG0.</para>
    </field_description>
    <field_description order="after">
      <para>All other values are reserved. If this field is programmed to a reserved value, or to a value that is not consistent with the programming of VSTCR_EL2.T0SZ, then a stage 2 level 0 Translation fault is generated.</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b00</field_value>
        <field_value_description>
          <para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule), start at level 2. If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 3.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b01</field_value>
        <field_value_description>
          <para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule), start at level 1. If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 2.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b10</field_value>
        <field_value_description>
          <para>If VSTCR_EL2.TG0 is <binarynumber>0b00</binarynumber> (4KB granule), start at level 0. If VSTCR_EL2.TG0 is <binarynumber>0b10</binarynumber> (16KB granule) or <binarynumber>0b01</binarynumber> (64KB granule), start at level 1.</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>
    <fields_condition>When FEAT_TTST is not implemented and (FEAT_D128 is not implemented or VTCR_EL2.D128 == '0')</fields_condition>
  </field>
  <field id="fieldset_0-7_6-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" rwtype="RES0">
    <field_msb>7</field_msb>
    <field_lsb>6</field_lsb>
    <rel_range>7:6</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
    <fields_condition>Otherwise</fields_condition>
  </field>
  <field id="fieldset_0-5_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>T0SZ</field_name>
    <field_msb>5</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>5:0</rel_range>
    <field_description order="before"><para>The size offset of the memory region addressed by <register_link state="AArch64" id="AArch64-vsttbr_el2.xml">VSTTBR_EL2</register_link>. The region size is 2<sup>(64-T0SZ)</sup> bytes.</para>
<para>The maximum and minimum possible values for this field depend on the level of translation table and the memory translation granule size, as described in the AArch64 Virtual Memory System Architecture chapter.</para>
<para>If this field is programmed to a value that is not consistent with the programming of SL0, then a stage 2 level 0 Translation fault is generated.</para>
<note><para>For the 4KB translation granule, if <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and this field is less than 16, the translation table walk begins with a level -1 initial lookup.</para><para>For the 16KB translation granule, if <xref linkend="#FEAT_LPA2">FEAT_LPA2</xref> is implemented and this field is less than 17, the translation table walk begins with a level 0 initial lookup.</para></note></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="64">
  <fieldat id="fieldset_0-63_34" msb="63" lsb="34"/>
  <fieldat id="fieldset_0-33_33-1" msb="33" lsb="33"/>
  <fieldat id="fieldset_0-32_32" msb="32" lsb="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_29" msb="29" lsb="29"/>
  <fieldat id="fieldset_0-28_16" msb="28" lsb="16"/>
  <fieldat id="fieldset_0-15_14" msb="15" lsb="14"/>
  <fieldat id="fieldset_0-13_8" msb="13" lsb="8"/>
  <fieldat id="fieldset_0-7_6-1" msb="7" lsb="6"/>
  <fieldat id="fieldset_0-5_0" msb="5" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          






    
        
        <access_mechanism accessor="MRS VSTCR_EL2" type="SystemAccessor">
            <encoding>
            <access_instruction>MRS &lt;Xt&gt;, VSTCR_EL2</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b100"/>
                
                <enc n="CRn" v="0b0010"/>
                
                <enc n="CRm" v="0b0110"/>
                
                <enc n="op2" v="0b010"/>
            </encoding>
            <access_permission>
                <ps name="MRS" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_SEL2) &amp;&amp; IsFeatureImplemented(FEAT_AA64)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if !IsCurrentSecurityState(SS_Secure) then
        Undefined();
    elsif EffectiveHCR_EL2_NVx() IN {'1x1'} then
        X{64}(t) = NVMem(0x048);
    elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        Undefined();
    end;
elsif PSTATE.EL == EL2 then
    if !IsCurrentSecurityState(SS_Secure) then
        Undefined();
    else
        X{64}(t) = VSTCR_EL2();
    end;
elsif PSTATE.EL == EL3 then
    if SCR_EL3().EEL2 == '0' then
        Undefined();
    else
        X{64}(t) = VSTCR_EL2();
    end;
end;
                </pstext>
                </ps>
            </access_permission>
        </access_mechanism>
    
        
        <access_mechanism accessor="MSRregister VSTCR_EL2" type="SystemAccessor">
            <encoding>
            <access_instruction>MSR VSTCR_EL2, &lt;Xt&gt;</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b100"/>
                
                <enc n="CRn" v="0b0010"/>
                
                <enc n="CRm" v="0b0110"/>
                
                <enc n="op2" v="0b010"/>
            </encoding>
            <access_permission>
                <ps name="MSRregister" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_SEL2) &amp;&amp; IsFeatureImplemented(FEAT_AA64)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if !IsCurrentSecurityState(SS_Secure) then
        Undefined();
    elsif EffectiveHCR_EL2_NVx() IN {'1x1'} then
        NVMem(0x048) = X{64}(t);
    elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        Undefined();
    end;
elsif PSTATE.EL == EL2 then
    if !IsCurrentSecurityState(SS_Secure) then
        Undefined();
    else
        VSTCR_EL2() = X{64}(t);
    end;
elsif PSTATE.EL == EL3 then
    if SCR_EL3().EEL2 == '0' then
        Undefined();
    else
        VSTCR_EL2() = X{64}(t);
    end;
end;
                </pstext>
                </ps>
            </access_permission>
        </access_mechanism>

      </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>