Skip to main content

CboCleanEmitter

Trait CboCleanEmitter 

Source
pub trait CboCleanEmitter<T0> {
    // Required method
    fn cbo_clean(&mut self, rs1: T0);
}
Expand description

Cache Block Clean

Cleans an entire cache block globally throughout the system.

Exactly what happens is coherence protocol-dependent, but in general it is expected that after this operation():

  • The cache block will be in the clean (not dirty) state in any coherent cache holding a valid copy of the line.
  • The data will be cleaned to a point such that an incoherent load can observe the cleaned data.

cbo.clean is ordered by FENCE instructions but not FENCE.I or SFENCE.VMA.

<%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Both PMP and PMA access control must be the same for all bytes in the block; otherwise, cbo.clean has UNSPECIFIED behavior. <%- end -%>

Clean operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur:

<%- if ext?(:H) -%>

  • Store/AMO Guest-Page Fault if virtual memory translation fails during G-stage translation. <%- end -%>
  • Store/AMO Page Fault if virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>
  • Store/AMO Access Fault if a PMP or PMA access check fails

<%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%>

CBO operations never raise a misaligned address fault.

§Forms

Assembly: cbo.clean "TODO" Rust: cbo_clean(rs1)

§Arguments

  • rs1 — Source register.

Required Methods§

Source

fn cbo_clean(&mut self, rs1: T0)

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§