<?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>PMBIDR_EL1</reg_short_name>
        
        <reg_long_name>Profiling Buffer ID Register</reg_long_name>



      
            <reg_condition otherwise="UNDEFINED">when FEAT_SPE is implemented</reg_condition>
      




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Provides information to software as to whether the buffer can be programmed at the current Exception level.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
          <reg_group>SPE</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>PMBIDR_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_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" rwtype="RES0">
    <field_msb>63</field_msb>
    <field_lsb>48</field_lsb>
    <rel_range>63:48</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-47_32" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>MaxBuffSize</field_name>
    <field_msb>47</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>47:32</rel_range>
    <field_description order="before">
      <para>Maximum supported Profiling Buffer size. Reserved for software use.</para>
    </field_description>
    <field_description order="after"><para>The only permitted value is <hexnumber>0x0000</hexnumber>, indicating there is no limit to the maximum buffer size.</para>
<note><para>Permitted values relate to the values an implementation is permitted to set this field to. A hypervisor might trap accesses to this register and use other values to describe limitations of its virtualization support to a guest operating system, as follows:</para><list type="unordered"><listitem><content>MaxBuffSize bits[8:0] encodes a mantissa value, <value>M</value>.</content></listitem><listitem><content>MaxBuffSize bits[13:9] encodes an exponent value, <value>E</value>.</content></listitem><listitem><content>MaxBuffSize bits[15:14] are reserved.</content></listitem></list><para>The maximum buffer size, in bytes, is expressed using the following function:</para><para><value> if IsZero(E), then UInt(M:Zeros(12)) else UInt('1':M:Zeros(UInt(E)+11)) </value></para><para>For example:</para><list type="unordered"><listitem><content>A value of <hexnumber>0x0001</hexnumber> means a maximum buffer size of 4KB.</content></listitem><listitem><content>A value of <hexnumber>0x3FFF</hexnumber> means a maximum buffer size of 4092TB.</content></listitem></list></note><para>Reads as <hexnumber>0x0000</hexnumber>.</para></field_description>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-31_12" 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>12</field_lsb>
    <rel_range>31:12</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-11_8" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>EA</field_name>
    <field_msb>11</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>11:8</rel_range>
    <field_description order="before">
      <para>External Abort handling. Describes how the PE manages External aborts on writes made by the Statistical Profiling Unit to the Profiling Buffer.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>From Armv8.8, the value <binarynumber>0b0000</binarynumber> is not permitted.</para>
<para>The behavior described by this field does not apply for External aborts on a translation table walk, translation table update, or GPT walk made by the Statistical Profiling Unit that are reported as MMU faults using <xref linkend="#PMBSR_ELx">PMBSR_ELx</xref>. For more information, see <xref linkend="#CHDHJJDH">'External aborts'</xref>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Not described.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>The PE ignores External aborts on writes made by the Statistical Profiling Unit.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0010</field_value>
        <field_value_description>
          <para>An External abort on a write made by the Statistical Profiling Unit generates an asynchronous SError exception at the PE.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </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>AddrMode</field_name>
    <field_msb>7</field_msb>
    <field_lsb>6</field_lsb>
    <rel_range>1:0</rel_range>
    <field_description order="before">
      <para>Address Modes. Describes the addressing modes available for the Profiling Buffer.</para>
    </field_description>
    <field_description order="after"><para>Other values are reserved.</para>
<para>If the Effective value of <register_link state="AArch64" id="AArch64-pmscr_el2.xml">PMSCR_EL2</register_link>.EnVM is 1 and the value returned for PMBIDR_EL1.P is 0, then this field reads as <binarynumber>0b01</binarynumber>. Otherwise, this field reads as <binarynumber>0b00</binarynumber>.</para>
<note><para>A hypervisor might trap accesses to this register to describe limitations of its virtualization support to a guest operating system.</para></note></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b00</field_value>
        <field_value_description>
          <para>Only virtual address mode is supported.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b01</field_value>
        <field_value_description>
          <para>Virtual and physical address modes are supported.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b11</field_value>
        <field_value_description>
          <para>Reserved for software use under virtualization, to show that only physical address mode is supported.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <fields_condition>When FEAT_SPE_nVM is implemented</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" 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_5" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>F</field_name>
    <field_msb>5</field_msb>
    <field_lsb>5</field_lsb>
    <rel_range>5</rel_range>
    <field_description order="before">
      <para>Flag updates. Describes how address translations performed by the Statistical Profiling Unit manage the Access flag and dirty state.</para>
    </field_description>
    <field_description order="after">
      <note>
        <para>If hardware management of the Access flag is disabled for a stage of translation, an access to a Page or Block with the Access flag bit not set in the descriptor will generate an Access Flag fault.</para>
        <para>If hardware management of the dirty state is disabled for a stage of translation, an access to a Page or Block will ignore the Dirty Bit Modifier in the descriptor and might generate a Permission fault, depending on the values of the access permission bits in the descriptor.</para>
      </note>
      <para>From Armv8.8, the value 0 is not permitted.</para>
    </field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Hardware management of the Access flag and dirty state for accesses made by the Statistical Profiling Unit is always disabled for all translation stages.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Hardware management of the Access flag and dirty state for accesses made by the Statistical Profiling Unit is controlled in the same way as explicit memory accesses in the Profiling Buffer owning translation regime.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-4_4" 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>P</field_name>
    <field_msb>4</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>4</rel_range>
    <field_description order="before">
      <para>Programming not allowed. When read at EL3, this field reads as zero. Otherwise, indicates that the Profiling Buffer owning Exception level is a higher Exception level or the Profiling Buffer owning Security state is not the current Security state.</para>
    </field_description>
    <field_description order="after"><para>The value read from this field depends on the current Exception level and the Effective values of 
<register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPB, <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPBE, and <register_link state="AArch64" id="AArch64-mdcr_el2.xml">MDCR_EL2</register_link>.E2PB:</para>
<list type="unordered">
<listitem><content>If EL3 is implemented, <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPB is <binarynumber>0b0x</binarynumber>, and either <xref linkend="#FEAT_RME">FEAT_RME</xref> is not implemented, or Secure state is implemented and <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPBE is 0, then this field reads as one from:<list type="unordered">
<listitem><content>Non-secure EL1 and Non-secure EL2.</content>
</listitem><listitem><content>If <xref linkend="#FEAT_RME">FEAT_RME</xref> is implemented, Realm EL1 and Realm EL2.</content>
</listitem><listitem><content>If Secure EL2 is implemented and enabled, and <register_link state="AArch64" id="AArch64-mdcr_el2.xml">MDCR_EL2</register_link>.E2PB is <binarynumber>0b00</binarynumber>, Secure EL1.</content>
</listitem></list>
</content>
</listitem><listitem><content>If EL3 is implemented, <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPB is <binarynumber>0b1x</binarynumber> and either <xref linkend="#FEAT_RME">FEAT_RME</xref> is not implemented or <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.NSPBE is 0, then this field reads as one from:<list type="unordered">
<listitem><content>If Secure state is implemented, Secure EL1.</content>
</listitem><listitem><content>If Secure EL2 is implemented, Secure EL2.</content>
</listitem><listitem><content>If EL2 is implemented and <register_link state="AArch64" id="AArch64-mdcr_el2.xml">MDCR_EL2</register_link>.E2PB is <binarynumber>0b00</binarynumber>, Non-secure EL1.</content>
</listitem><listitem><content>If <xref linkend="#FEAT_RME">FEAT_RME</xref> is implemented, Realm EL1 and Realm EL2.</content>
</listitem></list>
</content>
</listitem><listitem><content>If <xref linkend="#FEAT_RME">FEAT_RME</xref> is implemented, and <register_link state="AArch64" id="AArch64-mdcr_el3.xml">MDCR_EL3</register_link>.{NSPB, NSPBE} is {<binarynumber>0b1x</binarynumber>, 1}, then this field reads as one from:<list type="unordered">
<listitem><content>Non-secure EL1 and Non-secure EL2.</content>
</listitem><listitem><content>If Secure state is implemented, Secure EL1 and Secure EL2.</content>
</listitem><listitem><content>If <register_link state="AArch64" id="AArch64-mdcr_el2.xml">MDCR_EL2</register_link>.E2PB is <binarynumber>0b00</binarynumber>, Realm EL1.</content>
</listitem></list>
</content>
</listitem><listitem><content>If EL3 is not implemented, EL2 is implemented, and <register_link state="AArch64" id="AArch64-mdcr_el2.xml">MDCR_EL2</register_link>.E2PB is <binarynumber>0b00</binarynumber>, then this field reads as one from EL1.</content>
</listitem></list>
<para>Otherwise, this field reads as zero.</para></field_description>
    <field_values impdef="False">
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>Programming is allowed.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description>
          <para>Programming not allowed.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
  </field>
  <field id="fieldset_0-3_0" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>Align</field_name>
    <field_msb>3</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before">
      <para>Defines the minimum alignment constraint for writes to <register_link state="AArch64" id="AArch64-pmbptr_el1.xml">PMBPTR_EL1</register_link>.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>For more information, see <xref filename="D_the_statistical_profiling_extension.fm" linkend="CHDGCEIB">'Restrictions on the current write pointer'</xref>.</para>
<para>If this field is nonzero, then every record is a multiple of this size.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Byte.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Halfword.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0010</field_value>
        <field_value_description>
          <para>Word.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0011</field_value>
        <field_value_description>
          <para>Doubleword.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0100</field_value>
        <field_value_description>
          <para>16 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0101</field_value>
        <field_value_description>
          <para>32 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0110</field_value>
        <field_value_description>
          <para>64 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0111</field_value>
        <field_value_description>
          <para>128 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1000</field_value>
        <field_value_description>
          <para>256 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1001</field_value>
        <field_value_description>
          <para>512 bytes.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1010</field_value>
        <field_value_description>
          <para>1KB.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1011</field_value>
        <field_value_description>
          <para>2KB.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <text_after_fields/>
</fields>




<reg_fieldset length="64">
  <fieldat id="fieldset_0-63_48" msb="63" lsb="48"/>
  <fieldat id="fieldset_0-47_32" msb="47" lsb="32"/>
  <fieldat id="fieldset_0-31_12" msb="31" lsb="12"/>
  <fieldat id="fieldset_0-11_8" msb="11" lsb="8"/>
  <fieldat id="fieldset_0-7_6-1" msb="7" lsb="6"/>
  <fieldat id="fieldset_0-5_5" msb="5" lsb="5"/>
  <fieldat id="fieldset_0-4_4" msb="4" lsb="4"/>
  <fieldat id="fieldset_0-3_0" msb="3" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          






    
        
        <access_mechanism accessor="MRS PMBIDR_EL1" type="SystemAccessor">
            <encoding>
            <access_instruction>MRS &lt;Xt&gt;, PMBIDR_EL1</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b000"/>
                
                <enc n="CRn" v="0b1001"/>
                
                <enc n="CRm" v="0b1010"/>
                
                <enc n="op2" v="0b111"/>
            </encoding>
            <access_permission>
                <ps name="MRS" sections="1" secttype="access_permission">
                <pstext>
if !IsFeatureImplemented(FEAT_SPE) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_FGT) &amp;&amp; (!HaveEL(EL3) || SCR_EL3().FGTEn == '1') &amp;&amp; HDFGRTR_EL2().PMBIDR_EL1 == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        X{64}(t) = PMBIDR_EL1();
    end;
elsif PSTATE.EL == EL2 then
    X{64}(t) = PMBIDR_EL1();
elsif PSTATE.EL == EL3 then
    X{64}(t) = PMBIDR_EL1();
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>