22: Added EDAC API r=robamu a=robamu



Co-authored-by: Robin Mueller <robin.mueller.m@gmail.com>
This commit is contained in:
bors[bot] 2021-12-04 21:01:41 +00:00 committed by GitHub
commit baec0980b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 0 deletions

View File

@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [unreleased]
### Added
- Basic API for EDAC functionality
## [0.2.2]
### Added

View File

@ -12,6 +12,7 @@ pub mod time;
pub mod timer;
pub mod typelevel;
pub mod uart;
pub mod utility;
mod private {
/// Super trait used to mark traits with an exhaustive set of

43
src/utility.rs Normal file
View File

@ -0,0 +1,43 @@
//! # API for utility functions like the Error Detection and Correction (EDAC) block
//!
//! Some more information about the recommended scrub rates can be found on the
//! [Vorago White Paper website](https://www.voragotech.com/resources) in the
//! application note AN1212
use va108xx::SYSCONFIG;
#[derive(PartialEq, Debug)]
pub enum UtilityError {
InvalidCounterResetVal,
}
/// Enable scrubbing for the ROM
///
/// Returns [`UtilityError::InvalidCounterResetVal`] if the scrub rate is 0
/// (equivalent to disabling) or larger than 24 bits
pub fn enable_rom_scrubbing(syscfg: &mut SYSCONFIG, scrub_rate: u32) -> Result<(), UtilityError> {
if scrub_rate == 0 || scrub_rate > u32::pow(2, 24) {
return Err(UtilityError::InvalidCounterResetVal);
}
syscfg.rom_scrub.write(|w| unsafe { w.bits(scrub_rate) });
Ok(())
}
pub fn disable_rom_scrubbing(syscfg: &mut SYSCONFIG) {
syscfg.rom_scrub.write(|w| unsafe { w.bits(0) })
}
/// Enable scrubbing for the RAM
///
/// Returns [`UtilityError::InvalidCounterResetVal`] if the scrub rate is 0
/// (equivalent to disabling) or larger than 24 bits
pub fn enable_ram_scrubbing(syscfg: &mut SYSCONFIG, scrub_rate: u32) -> Result<(), UtilityError> {
if scrub_rate == 0 || scrub_rate > u32::pow(2, 24) {
return Err(UtilityError::InvalidCounterResetVal);
}
syscfg.ram_scrub.write(|w| unsafe { w.bits(scrub_rate) });
Ok(())
}
pub fn disable_ram_scrubbing(syscfg: &mut SYSCONFIG) {
syscfg.ram_scrub.write(|w| unsafe { w.bits(0) })
}