[sram] Add memory initialization
- Software can request memory initialization
- Memory contents will be written with "random" values
- During the duration of initialization, memory reads are blocked
- Software should poll on initialization completion before continuing
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index be011ea..66715be 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -430,8 +430,12 @@
lc_ctrl_pkg::lc_flash_rma_seed_t flash_ctrl_rma_seed;
sram_ctrl_pkg::sram_scr_req_t sram_ctrl_main_sram_scr_req;
sram_ctrl_pkg::sram_scr_rsp_t sram_ctrl_main_sram_scr_rsp;
+ sram_ctrl_pkg::sram_scr_init_req_t sram_ctrl_main_sram_scr_init_req;
+ sram_ctrl_pkg::sram_scr_init_rsp_t sram_ctrl_main_sram_scr_init_rsp;
sram_ctrl_pkg::sram_scr_req_t sram_ctrl_ret_aon_sram_scr_req;
sram_ctrl_pkg::sram_scr_rsp_t sram_ctrl_ret_aon_sram_scr_rsp;
+ sram_ctrl_pkg::sram_scr_init_req_t sram_ctrl_ret_aon_sram_scr_init_req;
+ sram_ctrl_pkg::sram_scr_init_rsp_t sram_ctrl_ret_aon_sram_scr_init_rsp;
tlul_pkg::tl_instr_en_t sram_ctrl_main_en_ifetch;
tlul_pkg::tl_instr_en_t sram_ctrl_ret_aon_en_ifetch;
logic ram_main_intg_error;
@@ -831,7 +835,9 @@
prim_ram_1p_scr #(
.Width(39),
.Depth(32768),
- .EnableParity(0)
+ .EnableParity(0),
+ .LfsrWidth(32),
+ .StatePerm(RndCnstSramCtrlMainSramLfsrPerm)
) u_ram1p_ram_main (
.clk_i (clkmgr_aon_clocks.clk_main_infra),
.rst_ni (rstmgr_aon_resets.rst_sys_n[rstmgr_pkg::Domain0Sel]),
@@ -839,6 +845,9 @@
.key_valid_i (sram_ctrl_main_sram_scr_req.valid),
.key_i (sram_ctrl_main_sram_scr_req.key),
.nonce_i (sram_ctrl_main_sram_scr_req.nonce),
+ .init_req_i (sram_ctrl_main_sram_scr_init_req.req),
+ .init_seed_i (sram_ctrl_main_sram_scr_init_req.seed),
+ .init_ack_o (sram_ctrl_main_sram_scr_init_rsp.ack),
.req_i (ram_main_req),
.intg_error_i(ram_main_intg_err),
@@ -897,7 +906,9 @@
prim_ram_1p_scr #(
.Width(39),
.Depth(1024),
- .EnableParity(0)
+ .EnableParity(0),
+ .LfsrWidth(32),
+ .StatePerm(RndCnstSramCtrlRetAonSramLfsrPerm)
) u_ram1p_ram_ret_aon (
.clk_i (clkmgr_aon_clocks.clk_io_div4_infra),
.rst_ni (rstmgr_aon_resets.rst_sys_io_div4_n[rstmgr_pkg::DomainAonSel]),
@@ -905,6 +916,9 @@
.key_valid_i (sram_ctrl_ret_aon_sram_scr_req.valid),
.key_i (sram_ctrl_ret_aon_sram_scr_req.key),
.nonce_i (sram_ctrl_ret_aon_sram_scr_req.nonce),
+ .init_req_i (sram_ctrl_ret_aon_sram_scr_init_req.req),
+ .init_seed_i (sram_ctrl_ret_aon_sram_scr_init_req.seed),
+ .init_ack_o (sram_ctrl_ret_aon_sram_scr_init_rsp.ack),
.req_i (ram_ret_aon_req),
.intg_error_i(ram_ret_aon_intg_err),
@@ -1783,6 +1797,7 @@
.AlertAsyncOn(alert_handler_reg_pkg::AsyncOn[12:11]),
.RndCnstSramKey(RndCnstSramCtrlRetAonSramKey),
.RndCnstSramNonce(RndCnstSramCtrlRetAonSramNonce),
+ .RndCnstSramLfsrPerm(RndCnstSramCtrlRetAonSramLfsrPerm),
.InstrExec(SramCtrlRetAonInstrExec)
) u_sram_ctrl_ret_aon (
// [11]: fatal_intg_error
@@ -1795,6 +1810,8 @@
.sram_otp_key_i(otp_ctrl_sram_otp_key_rsp[1]),
.sram_scr_o(sram_ctrl_ret_aon_sram_scr_req),
.sram_scr_i(sram_ctrl_ret_aon_sram_scr_rsp),
+ .sram_scr_init_o(sram_ctrl_ret_aon_sram_scr_init_req),
+ .sram_scr_init_i(sram_ctrl_ret_aon_sram_scr_init_rsp),
.lc_escalate_en_i(lc_ctrl_lc_escalate_en),
.lc_hw_debug_en_i(lc_ctrl_lc_hw_debug_en),
.otp_hw_cfg_i(otp_ctrl_otp_hw_cfg),
@@ -2116,6 +2133,7 @@
.AlertAsyncOn(alert_handler_reg_pkg::AsyncOn[26:25]),
.RndCnstSramKey(RndCnstSramCtrlMainSramKey),
.RndCnstSramNonce(RndCnstSramCtrlMainSramNonce),
+ .RndCnstSramLfsrPerm(RndCnstSramCtrlMainSramLfsrPerm),
.InstrExec(SramCtrlMainInstrExec)
) u_sram_ctrl_main (
// [25]: fatal_intg_error
@@ -2128,6 +2146,8 @@
.sram_otp_key_i(otp_ctrl_sram_otp_key_rsp[0]),
.sram_scr_o(sram_ctrl_main_sram_scr_req),
.sram_scr_i(sram_ctrl_main_sram_scr_rsp),
+ .sram_scr_init_o(sram_ctrl_main_sram_scr_init_req),
+ .sram_scr_init_i(sram_ctrl_main_sram_scr_init_rsp),
.lc_escalate_en_i(lc_ctrl_lc_escalate_en),
.lc_hw_debug_en_i(lc_ctrl_lc_hw_debug_en),
.otp_hw_cfg_i(otp_ctrl_otp_hw_cfg),