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 Faultif virtual memory translation fails during G-stage translation. <%- end -%>Store/AMO Page Faultif virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>Store/AMO Access Faultif 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§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".