diff --git a/src/zynq/mod.rs b/src/zynq/mod.rs index 3cd0723a..d4625d06 100644 --- a/src/zynq/mod.rs +++ b/src/zynq/mod.rs @@ -5,3 +5,4 @@ pub mod eth; pub mod axi_hp; pub mod axi_gp; pub mod ddr; +pub mod mpcore; diff --git a/src/zynq/mpcore.rs b/src/zynq/mpcore.rs new file mode 100644 index 00000000..36e503ce --- /dev/null +++ b/src/zynq/mpcore.rs @@ -0,0 +1,29 @@ +///! Register definitions for Application Processing Unit (mpcore) + +use volatile_register::{RO, RW, WO}; +use crate::{register, register_at, register_bit}; + +#[repr(C)] +pub struct RegisterBlock { + pub scu_control: ScuControl, + pub scu_config: RO, + pub scu_cpu_power: RW, + pub scu_invalidate: WO, + reserved0: [u32; 12], + pub filter_start: RW, + pub filter_end: RW, + reserved1: [u32; 2], + pub scu_access_control: RW, + pub scu_non_secure_access_control: RW, + // there is plenty more (unimplemented) +} +register_at!(RegisterBlock, 0xF8F00000, new); + +register!(scu_control, ScuControl, RW, u32); +register_bit!(scu_control, ic_standby_enable, 6); +register_bit!(scu_control, scu_standby_enable, 5); +register_bit!(scu_control, force_to_port0_enable, 4); +register_bit!(scu_control, scu_speculative_linefill_enable, 3); +register_bit!(scu_control, scu_rams_parity_enable, 2); +register_bit!(scu_control, address_filtering_enable, 1); +register_bit!(scu_control, enable, 0);