matcha/tock: add hal support for smc_ctrl Change-Id: If362d872a47d5e1cb4e5ef965d8dd74bd64a156b
diff --git a/config/src/lib.rs b/config/src/lib.rs index 636ef84..9279cdd 100644 --- a/config/src/lib.rs +++ b/config/src/lib.rs
@@ -40,5 +40,7 @@ pub const RV_CORE_IBEX_SEC_CFG_BASE_ADDRESS: u32 = 0x411F_0000; // TOP_MATCHA_RV_CORE_IBEX_SEC_CFG_BASE_ADDRESS +pub const SMC_CTRL_BASE_ADDRESS: u32 = 0x5402_0000; // TOP_MATCHA_SMC_CTRL_BASE_ADDR + pub const UART0_BASE_ADDRESS: u32 = 0x40000000; // TOP_MATCHA_UART0_BASE_ADDR pub const UART0_BAUDRATE: u32 = 115200;
diff --git a/hal/src/lib.rs b/hal/src/lib.rs index 20c518c..5161ab2 100644 --- a/hal/src/lib.rs +++ b/hal/src/lib.rs
@@ -10,6 +10,7 @@ pub mod plic_constants; pub mod plic_hal; pub mod rv_core_ibex_hal; +pub mod smc_ctrl_hal; pub mod timer_hal; pub mod uart_hal;
diff --git a/hal/src/smc_ctrl_hal.rs b/hal/src/smc_ctrl_hal.rs new file mode 100644 index 0000000..b39304f --- /dev/null +++ b/hal/src/smc_ctrl_hal.rs
@@ -0,0 +1,61 @@ +// Generated register constants for smc_ctrl. +// This file is licensed under either of: +// Apache License, Version 2.0 (LICENSE-APACHE <http://www.apache.org/licenses/LICENSE-2.0>) +// MIT License (LICENSE-MIT <http://opensource.org/licenses/MIT>) + +// Build date: 2023-02-22T01:20:33.682585 + +// Original reference file: hw/matcha/hw/top_matcha/ip/smc_ctrl/data/smc_ctrl.hjson +use kernel::common::registers::{ + register_bitfields, register_structs, ReadWrite +}; +use kernel::common::StaticRef; +// Register width +pub const SMC_CTRL_PARAM_REG_WIDTH: u32 = 32; + +pub const SMC_CTRL_REGISTERS: StaticRef<SmcCtrlRegisters> = + unsafe { StaticRef::new(matcha_config::SMC_CTRL_BASE_ADDRESS as *const SmcCtrlRegisters) }; +pub static mut SMC_CTRL: SmcCtrl = SmcCtrl::new(SMC_CTRL_REGISTERS /*, matcha_config::CHIP_PERIPH_FREQ*/); + +register_structs! { + pub SmcCtrlRegisters { + // Register write enable for software controllable boot enable. + (0x0000 => pub(crate) smc_boot_en_regwen: ReadWrite<u32, SMC_BOOT_EN_REGWEN::Register>), + // Software controllable boot enable. + (0x0004 => pub(crate) smc_boot_en_ctrl: ReadWrite<u32, SMC_BOOT_EN_CTRL::Register>), + (0x0008 => @END), + } +} + +register_bitfields![u32, + pub(crate) SMC_BOOT_EN_REGWEN [ + REGWEN OFFSET(0) NUMBITS(1) [] + ], + pub(crate) SMC_BOOT_EN_CTRL [ + EN_CTRL OFFSET(0) NUMBITS(1) [] + ] +]; + +// End generated register constants for smc_ctrl + +pub struct SmcCtrl { + registers: StaticRef<SmcCtrlRegisters>, +} + +pub trait SmcCtrlHal { + fn smc_ctrl_start(&self); +} + +impl SmcCtrl { + pub const fn new(base: StaticRef<SmcCtrlRegisters>) -> SmcCtrl { + SmcCtrl { + registers: base, + } + } +} + +impl SmcCtrlHal for SmcCtrl { + fn smc_ctrl_start(&self) { + self.registers.smc_boot_en_ctrl.modify(SMC_BOOT_EN_CTRL::EN_CTRL::SET); + } +}