<?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="False" is_internal="True" is_stub_entry="False">
      <reg_short_name>DC CIGDPAPA</reg_short_name>
        
        <reg_long_name>Clean and Invalidate of Data and Allocation Tags by PA to PoPA</reg_long_name>



      
            <reg_condition otherwise="UNDEFINED">when FEAT_RME is implemented, FEAT_MTE2 is implemented, and FEAT_AA64 is implemented</reg_condition>
      




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Clean and Invalidate data and Allocation Tags in data cache by physical address to the Point of Physical Aliasing.</para>

      </purpose_text>
      <purpose_text>
        <note><para>This instruction cleans and invalidates all copies of the Location specified in the Xt argument, irrespective of any MECID associated with the Location. Memory accesses resulting from the Clean operation use the MECID associated with the cache entry.</para></note>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>Cache</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>DC CIGDPAPA is a 64-bit System instruction.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <text_before_fields/>
  <field id="fieldset_0-63_63-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>NS</field_name>
    <field_msb>63</field_msb>
    <field_lsb>63</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before"><para>Together with the NSE2 and NSE field, this field specifies the target physical address space.</para>
<table><tgroup cols="4"><thead><row><entry>NSE2</entry><entry>NSE</entry><entry>NS</entry><entry>Meaning</entry></row></thead><tbody><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>When Secure state is implemented, Secure. Otherwise reserved.</entry></row><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>Non-secure.</entry></row><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>Root.</entry></row><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>Realm.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>System Agent.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>NS Protected.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>Reserved.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>Reserved.</entry></row></tbody></tgroup></table></field_description>
    <field_description order="after">
      <para>If {NSE2, NSE, NS} is reserved, then no cache entries are required to be cleaned or invalidated.</para>
    </field_description>
    <fields_condition>When FEAT_RME_GDI is implemented</fields_condition>
  </field>
  <field id="fieldset_0-63_63-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>NS</field_name>
    <field_msb>63</field_msb>
    <field_lsb>63</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before"><para>Together with the NSE field, this field specifies the target physical address space.</para>
<table><tgroup cols="3"><thead><row><entry>NSE</entry><entry>NS</entry><entry>Meaning</entry></row></thead><tbody><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>When Secure state is implemented, Secure. Otherwise reserved.</entry></row><row><entry><binarynumber>0b0</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>Non-secure.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b0</binarynumber></entry><entry>Root.</entry></row><row><entry><binarynumber>0b1</binarynumber></entry><entry><binarynumber>0b1</binarynumber></entry><entry>Realm.</entry></row></tbody></tgroup></table></field_description>
    <field_description order="after">
      <para>If FEAT_SEL2 is not implemented, and {NSE, NS} == {0, 0}, then no cache entries are required to be cleaned or invalidated</para>
    </field_description>
    <fields_condition>Otherwise</fields_condition>
  </field>
  <field id="fieldset_0-62_62" 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>NSE</field_name>
    <field_msb>62</field_msb>
    <field_lsb>62</field_lsb>
    <rel_range>62</rel_range>
    <field_description order="before"><para>If <xref linkend="#FEAT_RME_GDI">FEAT_RME_GDI</xref> is implemented, this field together with the NS and NSE2 fields, specifies the target physical address space.</para>
<para>Otherwise, this field and the NS field specify the physical address space</para>
<para>For a description of the values derived by evaluating NS, NSE, and NSE2 together, see DC CIGDPAPA.NS.</para></field_description>
  </field>
  <field id="fieldset_0-61_61-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>NSE2</field_name>
    <field_msb>61</field_msb>
    <field_lsb>61</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before"><para>Together with the NS and NSE field, this field specifies the target physical address space.</para>
<para>For a description of the values derived by evaluating NS and NSE together, see DC CIGDPAPA.NS.</para></field_description>
    <fields_condition>When FEAT_RME_GDI is implemented</fields_condition>
  </field>
  <field id="fieldset_0-61_61-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>61</field_msb>
    <field_lsb>61</field_lsb>
    <rel_range>61</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-60_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>60</field_msb>
    <field_lsb>56</field_lsb>
    <rel_range>60: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_52-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>PA[55:52]</field_name>
    <field_msb>55</field_msb>
    <field_lsb>52</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before">
      <para>Extension to PA[51:0] if <register_link state="AArch64" id="AArch64-id_aa64mmfr0_el1.xml">ID_AA64MMFR0_EL1</register_link>.PARange = 0111. For more information see PA[51:0].</para>
    </field_description>
    <fields_condition>When FEAT_D128 is implemented</fields_condition>
  </field>
  <field id="fieldset_0-55_52-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>55</field_msb>
    <field_lsb>52</field_lsb>
    <rel_range>55:52</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-51_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>PA</field_name>
    <field_shortdesc>Physical address</field_shortdesc>
    <field_msb>51</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>51:0</rel_range>
    <field_description order="before">
      <para>Physical address to use. No alignment restrictions apply to this PA.</para>
    </field_description>
  </field>
  <text_after_fields/>
</fields>




<reg_fieldset length="64">
  <fieldat id="fieldset_0-63_63-1" msb="63" lsb="63"/>
  <fieldat id="fieldset_0-62_62" msb="62" lsb="62"/>
  <fieldat id="fieldset_0-61_61-1" msb="61" lsb="61"/>
  <fieldat id="fieldset_0-60_56" msb="60" lsb="56"/>
  <fieldat id="fieldset_0-55_52-1" msb="55" lsb="52"/>
  <fieldat id="fieldset_0-51_0" msb="51" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <list type="unordered">
<listitem><content>
<para>This instruction is not subject to any translation, permission checks, or granule protection checks.</para>
</content>
</listitem><listitem><content>
<para>This instruction affects all caches in the Outer Shareable shareability domain.</para>
</content>
</listitem><listitem><content>
<para>This instruction has the same ordering, observability, and completion behavior as VA-based cache maintenance instructions issued to the Outer Shareable shareability domain.</para>
</content>
</listitem></list>

      </access_permission_text>
      <access_permission_text>
        <para>This system instruction is an alias of the SYS instruction.</para>
      </access_permission_text>





    
        
        <access_mechanism accessor="DC CIGDPAPA" type="SystemAccessor">
            <encoding>
            <access_instruction>DC CIGDPAPA, &lt;Xt&gt;</access_instruction>
                
                <enc n="op0" v="0b01"/>
                
                <enc n="op1" v="0b110"/>
                
                <enc n="CRn" v="0b0111"/>
                
                <enc n="CRm" v="0b1110"/>
                
                <enc n="op2" v="0b101"/>
            </encoding>
            <access_permission>
                <ps name="DC" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_RME) &amp;&amp; IsFeatureImplemented(FEAT_MTE2) &amp;&amp; IsFeatureImplemented(FEAT_AA64)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    Undefined();
elsif PSTATE.EL == EL2 then
    Undefined();
elsif PSTATE.EL == EL3 then
    AArch64_DC(X{64}(t), CacheType_Data_Tag, CacheOp_CleanInvalidate, CacheOpScope_PoPA);
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>