<?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>ICC_SGI0R_EL1</reg_short_name>
        
        <reg_long_name>Interrupt Controller Software Generated Interrupt Group 0 Register</reg_long_name>



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




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        



    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch32-icc_sgi0r.xml">ICC_SGI0R</mapped_name>
  <mapped_type>Functional</mapped_type>
      <mapped_execution_state>AArch32</mapped_execution_state>

      </reg_mapping>

      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Generates Secure Group 0 SGIs.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GIC control registers</reg_group>
            <reg_group>GIC</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>ICC_SGI0R_EL1 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_56" 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>56</field_lsb>
    <rel_range>63:56</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-55_48" 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>55</field_msb>
    <field_lsb>48</field_lsb>
    <rel_range>55:48</rel_range>
    <field_description order="before"><para>The affinity 3 value of the affinity path of the cluster for which SGI interrupts will be generated.</para>
<para>If the IRM bit is 1, this field is <arm-defined-word>RES0</arm-defined-word>.</para></field_description>
  </field>
  <field id="fieldset_0-47_44" 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>RS</field_name>
    <field_msb>47</field_msb>
    <field_lsb>44</field_lsb>
    <rel_range>47:44</rel_range>
    <field_description order="before"><para>RangeSelector</para>
<para>Controls which group of 16 values is represented by the TargetList field.</para>
<para>TargetList[n] represents aff0 value ((RS * 16) + n).</para>
<para>When <register_link state="AArch64" id="AArch64-icc_ctlr_el1.xml">ICC_CTLR_EL1</register_link>.RSS==0, RS is <arm-defined-word>RES0</arm-defined-word>.</para>
<para>When <register_link state="AArch64" id="AArch64-icc_ctlr_el1.xml">ICC_CTLR_EL1</register_link>.RSS==1 and <register_link state="ext" id="ext-gicd_typer.xml">GICD_TYPER</register_link>.RSS==0, writing this register with RS != 0 is a <arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word> choice of:</para>
<list type="unordered">
<listitem><content>The write is ignored.</content>
</listitem><listitem><content>The RS field is treated as 0.</content>
</listitem></list></field_description>
  </field>
  <field id="fieldset_0-43_41" 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>43</field_msb>
    <field_lsb>41</field_lsb>
    <rel_range>43:41</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-40_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">
    <field_name>IRM</field_name>
    <field_msb>40</field_msb>
    <field_lsb>40</field_lsb>
    <rel_range>40</rel_range>
    <field_description order="before">
      <para>Interrupt Routing Mode. Determines how the generated interrupts are distributed to PEs. Possible values are:</para>
    </field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Interrupts routed to the PEs specified by Aff3.Aff2.Aff1.&lt;target list&gt;.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Interrupts routed to all PEs in the system, excluding "self".</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
  </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>Aff2</field_name>
    <field_msb>39</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>39:32</rel_range>
    <field_description order="before"><para>The affinity 2 value of the affinity path of the cluster for which SGI interrupts will be generated.</para>
<para>If the IRM bit is 1, this field is <arm-defined-word>RES0</arm-defined-word>.</para></field_description>
  </field>
  <field id="fieldset_0-31_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" rwtype="RES0">
    <field_msb>31</field_msb>
    <field_lsb>28</field_lsb>
    <rel_range>31:28</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-27_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>INTID</field_name>
    <field_msb>27</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>27:24</rel_range>
    <field_description order="before">
      <para>The INTID of the SGI.</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>Aff1</field_name>
    <field_msb>23</field_msb>
    <field_lsb>16</field_lsb>
    <rel_range>23:16</rel_range>
    <field_description order="before"><para>The affinity 1 value of the affinity path of the cluster for which SGI interrupts will be generated.</para>
<para>If the IRM bit is 1, this field is <arm-defined-word>RES0</arm-defined-word>.</para></field_description>
  </field>
  <field id="fieldset_0-15_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>TargetList</field_name>
    <field_msb>15</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>15:0</rel_range>
    <field_description order="before"><para>Target List. The set of PEs for which SGI interrupts will be generated. Each bit corresponds to the PE within a cluster with an Affinity 0 value equal to the bit number.</para>
<note><para>If SRE is set only for EL3, software executing at EL3 might use the System register interface to generate SGIs. Therefore, the Distributor must always be able to receive and acknowledge Generate SGI packets received from CPU interface regardless of the ARE settings for a Security state. However, the Distributor might discard such packets.</para></note><para>If the IRM bit is 1, this field is <arm-defined-word>RES0</arm-defined-word>.</para></field_description>
    <field_description order="after">
      <para>If a bit is 1 and the bit does not correspond to a valid target PE, the bit must be ignored by the Distributor. It is <arm-defined-word>IMPLEMENTATION DEFINED</arm-defined-word> whether, in such cases, a Distributor can signal a system error.</para>
    </field_description>
  </field>
  <text_after_fields/>
</fields>




<reg_fieldset length="64">
  <fieldat id="fieldset_0-63_56" msb="63" lsb="56"/>
  <fieldat id="fieldset_0-55_48" msb="55" lsb="48"/>
  <fieldat id="fieldset_0-47_44" msb="47" lsb="44"/>
  <fieldat id="fieldset_0-43_41" msb="43" lsb="41"/>
  <fieldat id="fieldset_0-40_40" msb="40" lsb="40"/>
  <fieldat id="fieldset_0-39_32" msb="39" lsb="32"/>
  <fieldat id="fieldset_0-31_28" msb="31" lsb="28"/>
  <fieldat id="fieldset_0-27_24" msb="27" lsb="24"/>
  <fieldat id="fieldset_0-23_16" msb="23" lsb="16"/>
  <fieldat id="fieldset_0-15_0" msb="15" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>This register allows software executing in a Secure state to generate Group 0 SGIs. It will also allow software executing in a Non-secure state to generate Group 0 SGIs, if permitted by the settings of <register_link state="ext" id="ext-gicr_nsacr.xml">GICR_NSACR</register_link> in the Redistributor corresponding to the target PE.</para>

      </access_permission_text>
      <access_permission_text>
        <para>When <register_link state="ext" id="ext-gicd_ctlr.xml">GICD_CTLR</register_link>.DS==0, Non-secure writes do not generate an interrupt for a target PE if not permitted by the <register_link state="ext" id="ext-gicr_nsacr.xml">GICR_NSACR</register_link> register associated with the target PE. For more information, see <xref filename="AS_programmers_model.fm" linkend="CHDJCIBI">'Use of control registers for SGI forwarding' in ARM&#174; Generic Interrupt Controller Architecture Specification, GIC architecture version 3.0 and version 4.0 (ARM IHI 0069)</xref>.</para>

      </access_permission_text>
      <access_permission_text>
        <note><para>Accesses at EL3 are treated as Secure regardless of the value of <xref filename="AS_introduction.fm" linkend="CACICECE">SCR_EL3</xref>.NS.</para></note>
      </access_permission_text>





    
        
        <access_mechanism accessor="MSRregister ICC_SGI0R_EL1" type="SystemAccessor">
            <encoding>
            <access_instruction>MSR ICC_SGI0R_EL1, &lt;Xt&gt;</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b000"/>
                
                <enc n="CRn" v="0b1100"/>
                
                <enc n="CRm" v="0b1011"/>
                
                <enc n="op2" v="0b111"/>
            </encoding>
            <access_permission>
                <ps name="MSRregister" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_GICv3) &amp;&amp; IsFeatureImplemented(FEAT_AA64)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' then
        Undefined();
    elsif ICC_SRE_EL1().SRE == '0' then
        AArch64_SystemAccessTrap(EL1, 0x18);
    elsif EL2Enabled() &amp;&amp; ICH_HCR_EL2().TC == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif EL2Enabled() &amp;&amp; HCR_EL2().FMO == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif EL2Enabled() &amp;&amp; HCR_EL2().IMO == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif HaveEL(EL3) &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_SystemAccessTrap(EL3, 0x18);
        end;
    else
        ICC_SGI0R_EL1() = X{64}(t);
    end;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' then
        Undefined();
    elsif ICC_SRE_EL2().SRE == '0' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif HaveEL(EL3) &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_SystemAccessTrap(EL3, 0x18);
        end;
    else
        ICC_SGI0R_EL1() = X{64}(t);
    end;
elsif PSTATE.EL == EL3 then
    if ICC_SRE_EL3().SRE == '0' then
        AArch64_SystemAccessTrap(EL3, 0x18);
    else
        ICC_SGI0R_EL1() = 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>