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);
+ }
+}