device,
io::poll::read_poll_timeout,
prelude::*,
- time::delay::fsleep,
time::Delta, //
};
Delta::from_micros(150),
);
- regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(true));
-
- // TIMEOUT: falcon engine should not take more than 10us to reset.
- fsleep(Delta::from_micros(10));
-
- regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(false));
-
+ regs::NV_PFALCON_FALCON_ENGINE::reset_engine::<E>(bar);
self.reset_wait_mem_scrubbing(bar)?;
Ok(())
use kernel::{
io::poll::read_poll_timeout,
prelude::*,
- time::delay::fsleep,
time::Delta, //
};
}
fn reset_eng(&self, bar: &Bar0) -> Result {
- regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(true));
-
- // TIMEOUT: falcon engine should not take more than 10us to reset.
- fsleep(Delta::from_micros(10));
-
- regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(false));
-
+ regs::NV_PFALCON_FALCON_ENGINE::reset_engine::<E>(bar);
self.reset_wait_mem_scrubbing(bar)?;
Ok(())
#[macro_use]
pub(crate) mod macros;
-use kernel::prelude::*;
+use kernel::{
+ prelude::*,
+ time, //
+};
use crate::{
+ driver::Bar0,
falcon::{
DmaTrfCmdSize,
FalconCoreRev,
FalconCoreRevSubversion,
+ FalconEngine,
FalconFbifMemType,
FalconFbifTarget,
FalconMem,
0:0 reset as bool;
});
+impl NV_PFALCON_FALCON_ENGINE {
+ /// Resets the falcon
+ pub(crate) fn reset_engine<E: FalconEngine>(bar: &Bar0) {
+ Self::read(bar, &E::ID).set_reset(true).write(bar, &E::ID);
+
+ // TIMEOUT: falcon engine should not take more than 10us to reset.
+ time::delay::fsleep(time::Delta::from_micros(10));
+
+ Self::read(bar, &E::ID).set_reset(false).write(bar, &E::ID);
+ }
+}
+
register!(NV_PFALCON_FBIF_TRANSCFG @ PFalconBase[0x00000600[8]] {
1:0 target as u8 ?=> FalconFbifTarget;
2:2 mem_type as bool => FalconFbifMemType;