<?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="AArch32" is_register="True" is_internal="True" is_stub_entry="False">
      <reg_short_name>ICC_SRE</reg_short_name>
        
        <reg_long_name>Interrupt Controller System Register Enable register</reg_long_name>



      
            <reg_condition otherwise="UNDEFINED">when FEAT_AA32EL1 is implemented and GICv3 is implemented</reg_condition>
      




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        



    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch64-icc_sre_el1.xml">ICC_SRE_EL1</mapped_name>
  <mapped_type>Architectural</mapped_type>
      <mapped_execution_state>AArch64</mapped_execution_state>
    <mapped_from_startbit>31</mapped_from_startbit>
    <mapped_from_endbit>0</mapped_from_endbit>
    <mapped_from_sec_state>ICC_SRE_S</mapped_from_sec_state>
    <mapped_to_startbit>31</mapped_to_startbit>
    <mapped_to_endbit>0</mapped_to_endbit>
        <mapped_to_sec_state>ICC_SRE_EL1_S</mapped_to_sec_state>
    <mapped_from_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_from_rangeset>
    <mapped_to_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_to_rangeset>

      </reg_mapping>
    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch64-icc_sre_el1.xml">ICC_SRE_EL1</mapped_name>
  <mapped_type>Architectural</mapped_type>
      <mapped_execution_state>AArch64</mapped_execution_state>
    <mapped_from_startbit>31</mapped_from_startbit>
    <mapped_from_endbit>0</mapped_from_endbit>
    <mapped_from_sec_state>ICC_SRE_NS</mapped_from_sec_state>
    <mapped_to_startbit>31</mapped_to_startbit>
    <mapped_to_endbit>0</mapped_to_endbit>
        <mapped_to_sec_state>ICC_SRE_EL1_NS</mapped_to_sec_state>
    <mapped_from_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_from_rangeset>
    <mapped_to_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_to_rangeset>

      </reg_mapping>
    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch64-icc_sre_el1.xml">ICC_SRE_EL1</mapped_name>
  <mapped_type>Architectural</mapped_type>
      <mapped_execution_state>AArch64</mapped_execution_state>
    <mapped_from_startbit>31</mapped_from_startbit>
    <mapped_from_endbit>0</mapped_from_endbit>
    <mapped_from_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_from_rangeset>

      </reg_mapping>

      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Controls whether the System register interface or the memory-mapped interface to the GIC CPU interface is used for EL0 and EL1.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GIC control registers</reg_group>
            <reg_group>GIC</reg_group>
      </reg_groups>
      
      
        
        <reg_banking>
            <reg_bank>
                <bank_text>This register is banked between ICC_SRE and ICC_SRE_S and ICC_SRE_NS.</bank_text>
            </reg_bank>
        </reg_banking>
      <reg_attributes>
          
    
      <attributes_text>
        <para>ICC_SRE is a 32-bit register.</para>

      </attributes_text>
      <attributes_text>
        <para>This register has the following instances:</para>

      </attributes_text>
      <attributes_text>
        <list type="unordered">
<listitem><content>ICC_SRE, when EL3 is not implemented or FEAT_AA64 is implemented.</content>
</listitem><listitem><content>ICC_SRE_S, when FEAT_AA32EL3 is implemented.</content>
</listitem><listitem><content>ICC_SRE_NS, when FEAT_AA32EL3 is implemented.</content>
</listitem></list>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="32">
  <text_before_fields/>
  <field id="fieldset_0-31_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>31</field_msb>
    <field_lsb>3</field_lsb>
    <rel_range>31:3</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-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>DIB</field_name>
    <field_msb>2</field_msb>
    <field_lsb>2</field_lsb>
    <rel_range>2</rel_range>
    <field_description order="before">
      <para>Disable IRQ bypass.</para>
    </field_description>
    <field_description order="after"><para>If EL3 is implemented and <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 0, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.DIB.</para>
<para>If EL3 is implemented and <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 1, and EL2 is not implemented, this field is a read/write alias of <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.DIB.</para>
<para>If EL3 is not implemented and EL2 is implemented, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_hsre.xml">ICC_HSRE</register_link>.DIB.</para>
<para>If <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 1 and EL2 is implemented, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_hsre.xml">ICC_HSRE</register_link>.DIB.</para>
<para>In systems that do not support IRQ bypass, this field is RAO/WI.</para></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>IRQ bypass enabled.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>IRQ bypass disabled.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_number>'0'</field_reset_number>
      </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>DFB</field_name>
    <field_msb>1</field_msb>
    <field_lsb>1</field_lsb>
    <rel_range>1</rel_range>
    <field_description order="before">
      <para>Disable FIQ bypass.</para>
    </field_description>
    <field_description order="after"><para>If EL3 is implemented and <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 0, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.DFB.</para>
<para>If EL3 is implemented and <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 1, and EL2 is not implemented, this field is a read/write alias of <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.DFB.</para>
<para>If EL3 is not implemented and EL2 is implemented, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_hsre.xml">ICC_HSRE</register_link>.DFB.</para>
<para>If <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS == 1 and EL2 is implemented, this field is a read-only alias of <register_link state="AArch32" id="AArch32-icc_hsre.xml">ICC_HSRE</register_link>.DFB.</para>
<para>In systems that do not support FIQ bypass, this field is RAO/WI.</para></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>FIQ bypass enabled.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>FIQ bypass disabled.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_number>'0'</field_reset_number>
      </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>SRE</field_name>
    <field_msb>0</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before">
      <para>System Register Enable.</para>
    </field_description>
    <field_description order="after"><para>If software changes this bit from 1 to 0 in the Secure instance of this register, the results are <arm-defined-word>UNPREDICTABLE</arm-defined-word>.</para>
<para>If an implementation supports only a System register interface to the GIC CPU interface, this bit is RAO/WI.</para>
<para>If EL3 is implemented and using AArch64:</para>
<list type="unordered">
<listitem><content>When <register_link state="AArch64" id="AArch64-icc_sre_el3.xml">ICC_SRE_EL3</register_link>.SRE==0 the Secure copy of this bit is RAZ/WI.</content>
</listitem><listitem><content>When <register_link state="AArch64" id="AArch64-icc_sre_el3.xml">ICC_SRE_EL3</register_link>.SRE==0 the Non-secure copy of this bit is RAZ/WI.</content>
</listitem></list>
<para>If EL3 is implemented and using AArch32:</para>
<list type="unordered">
<listitem><content>When <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.SRE==0 the Secure copy of this bit is RAZ/WI.</content>
</listitem><listitem><content>When <register_link state="AArch32" id="AArch32-icc_msre.xml">ICC_MSRE</register_link>.SRE==0 the Non-secure copy of this bit is RAZ/WI.</content>
</listitem></list>
<para>If EL2 is implemented and using AArch64:</para>
<list type="unordered">
<listitem><content>When <register_link state="AArch64" id="AArch64-icc_sre_el2.xml">ICC_SRE_EL2</register_link>.SRE==0 the Non-secure copy of this bit is RAZ/WI.</content>
</listitem></list>
<para>If EL2 is implemented and using AArch32:</para>
<list type="unordered">
<listitem><content>When <register_link state="AArch32" id="AArch32-icc_hsre.xml">ICC_HSRE</register_link>.SRE==0 the Non-secure copy of this bit is RAZ/WI.</content>
</listitem></list></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>The memory-mapped interface must be used. Accesses at EL1 to any ICC_* System register other than ICC_SRE are <arm-defined-word>UNDEFINED</arm-defined-word>.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>The System register interface for the current Security state is enabled.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_number>'0'</field_reset_number>
      </field_reset>
    </field_resets>
  </field>
  <text_after_fields/>
</fields>




<reg_fieldset length="32">
  <fieldat id="fieldset_0-31_3" msb="31" 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>The GIC architecture permits, but does not require, that registers can be shared between memory-mapped registers and the equivalent System registers. This means that if the memory-mapped registers have been accessed while ICC_SRE.SRE==0, then the System registers might be modified. Therefore, software must only rely on the reset values of the System registers if there has been no use of the GIC functionality while the memory-mapped registers are in use. Otherwise, the System register values must be treated as <arm-defined-word>UNKNOWN</arm-defined-word>.</para>
      </access_permission_text>





    
        
        <access_mechanism accessor="MRC ICC_SRE" type="SystemAccessor">
            <encoding>
            <access_instruction>MRC{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;CRn&gt;, &lt;CRm&gt;{, {#}&lt;opc2&gt;}</access_instruction>
                
                <enc n="coproc" v="0b1111"/>
                
                <enc n="opc1" v="0b000"/>
                
                <enc n="CRn" v="0b1100"/>
                
                <enc n="CRm" v="0b1100"/>
                
                <enc n="opc2" v="0b101"/>
            </encoding>
            <access_permission>
                <ps name="MRC" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_AA32EL1) &amp;&amp; IsFeatureImplemented(FEAT_GICv3)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        Undefined();
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HSTR_EL2().T12 == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HSTR().T12 == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; EffectiveICC_SRE_EL2_Enable() == '0' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; ICC_HSRE().Enable == '0' then
        AArch32_TakeHypTrapException(0x03);
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; ICC_MSRE().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_AArch32SystemAccessTrap(EL3, 0x03);
        end;
    elsif HaveEL(EL3) then
        if EffectiveSCR_EL3_NS() == '0' then
            R(t) = ICC_SRE_S();
        else
            R(t) = ICC_SRE_NS();
        end;
    else
        R(t) = ICC_SRE();
    end;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_AArch32SystemAccessTrap(EL3, 0x03);
        end;
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; ICC_MSRE().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) then
        if EffectiveSCR_EL3_NS() == '0' then
            R(t) = ICC_SRE_S();
        else
            R(t) = ICC_SRE_NS();
        end;
    else
        R(t) = ICC_SRE();
    end;
elsif PSTATE.EL == EL3 then
    if EffectiveSCR_EL3_NS() == '0' then
        R(t) = ICC_SRE_S();
    else
        R(t) = ICC_SRE_NS();
    end;
end;
                </pstext>
                </ps>
            </access_permission>
        </access_mechanism>
    
        
        <access_mechanism accessor="MCR ICC_SRE" type="SystemAccessor">
            <encoding>
            <access_instruction>MCR{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;CRn&gt;, &lt;CRm&gt;{, {#}&lt;opc2&gt;}</access_instruction>
                
                <enc n="coproc" v="0b1111"/>
                
                <enc n="opc1" v="0b000"/>
                
                <enc n="CRn" v="0b1100"/>
                
                <enc n="CRm" v="0b1100"/>
                
                <enc n="opc2" v="0b101"/>
            </encoding>
            <access_permission>
                <ps name="MCR" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_AA32EL1) &amp;&amp; IsFeatureImplemented(FEAT_GICv3)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        Undefined();
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HSTR_EL2().T12 == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HSTR().T12 == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; EffectiveICC_SRE_EL2_Enable() == '0' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; ICC_HSRE().Enable == '0' then
        AArch32_TakeHypTrapException(0x03);
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; ICC_MSRE().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_AArch32SystemAccessTrap(EL3, 0x03);
        end;
    elsif HaveEL(EL3) then
        if EffectiveSCR_EL3_NS() == '0' then
            ICC_SRE_S() = R(t);
        else
            ICC_SRE_NS() = R(t);
        end;
    else
        ICC_SRE() = R(t);
    end;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; ICC_SRE_EL3().Enable == '0' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_AArch32SystemAccessTrap(EL3, 0x03);
        end;
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; ICC_MSRE().Enable == '0' then
        Undefined();
    elsif HaveEL(EL3) then
        if EffectiveSCR_EL3_NS() == '0' then
            ICC_SRE_S() = R(t);
        else
            ICC_SRE_NS() = R(t);
        end;
    else
        ICC_SRE() = R(t);
    end;
elsif PSTATE.EL == EL3 then
    if EffectiveSCR_EL3_NS() == '0' then
        ICC_SRE_S() = R(t);
    else
        ICC_SRE_NS() = R(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>