<?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_ASGI1R</reg_short_name>
        
        <reg_long_name>Interrupt Controller Alias Software Generated Interrupt Group 1 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_asgi1r_el1.xml">ICC_ASGI1R_EL1</mapped_name>
  <mapped_type>Functional</mapped_type>
      <mapped_execution_state>AArch64</mapped_execution_state>

      </reg_mapping>

      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Generates Group 1 SGIs for the Security state that is not the current Security state.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GIC control registers</reg_group>
            <reg_group>GIC</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>Under certain conditions a write to ICC_ASGI1R can generate Group 0 interrupts, see <xref filename="AS_programmers_model.fm" linkend="BEIIJFBD">'Forwarding an SGI to a target PE' in ARM&#174; Generic Interrupt Controller Architecture Specification, GIC architecture version 3.0 and version 4.0 (ARM IHI 0069)</xref>.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>ICC_ASGI1R 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 Secure 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 Non-secure Group 1 SGIs. It will also allow software executing in a Non-secure state to generate Secure Group 1 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 from Secure Monitor mode are treated as Secure regardless of the value of <xref filename="AS_introduction.fm" linkend="CACIBCFJ">SCR</xref>.NS.</para></note>
      </access_permission_text>





    
        
        <access_mechanism accessor="MCRR ICC_ASGI1R" type="SystemAccessor">
            <encoding>
            <access_instruction>MCRR{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;Rt2&gt;, &lt;CRm&gt;</access_instruction>
                
                <enc n="coproc" v="0b1111"/>
                
                <enc n="CRm" v="0b1100"/>
                
                <enc n="opc1" v="0b0001"/>
            </encoding>
            <access_permission>
                <ps name="MCRR" 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; SCR_EL3().[IRQ,FIQ] == '11' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; PSTATE.M != M32_Monitor &amp;&amp; SCR().[IRQ,FIQ] == '11' 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 ICC_SRE().SRE == '0' then
        Undefined();
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; ICH_HCR_EL2().TC == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; ICH_HCR().TC == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2().FMO == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2().IMO == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR().FMO == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR().IMO == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' 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; PSTATE.M != M32_Monitor &amp;&amp; SCR().[IRQ,FIQ] == '11' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch32_TakeMonitorTrapException();
        end;
    else
        ICC_ASGI1R() = R(t, t2);
    end;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL3) &amp;&amp; ELUsingAArch32(EL3) &amp;&amp; SCR().[IRQ,FIQ] == '11' then
        Undefined();
    elsif ICC_HSRE().SRE == '0' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_AA64EL3) &amp;&amp; !ELUsingAArch32(EL3) &amp;&amp; SCR_EL3().[IRQ,FIQ] == '11' 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; SCR().[IRQ,FIQ] == '11' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch32_TakeMonitorTrapException();
        end;
    else
        ICC_ASGI1R() = R(t, t2);
    end;
elsif PSTATE.EL == EL3 then
    if ICC_MSRE().SRE == '0' then
        Undefined();
    else
        ICC_ASGI1R() = R(t, t2);
    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>