blob: f566a67fd462ae2bafe1c16db5428e23c8a78106 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
# RSTMGR register template
#
{
name: "RSTMGR",
clocking: [
{clock: "clk_i", reset: "rst_ni", primary: true},
{clock: "clk_aon_i"}
{clock: "clk_io_div4_i"}
{clock: "clk_main_i"}
{clock: "clk_io_i"}
{clock: "clk_io_div2_i"}
{clock: "clk_usb_i"}
]
bus_interfaces: [
{ protocol: "tlul", direction: "device" }
],
countermeasures: [
{ name: "BUS.INTEGRITY",
desc: "End-to-end bus integrity scheme."
}
{ name: "SCAN.INTERSIG.MUBI",
desc: "scan control signals are multibit"
}
{ name: "LEAF.RST.BKGN_CHK",
desc: "Background consistency checks for each leaf reset."
}
{ name: "LEAF.RST.SHADOW",
desc: "Lead resets to blocks containing shadow registers are shadowed"
}
{ name: "LEAF.FSM.SPARSE",
desc: "Sparsely encoded fsm for each leaf rst check. he hamming delta is only 3 as there are a significant number of leaf resets"
}
{ name: "SW_RST.CONFIG.REGWEN",
desc: "Software reset controls are protected by regwen"
}
{ name: "DUMP_CTRL.CONFIG.REGWEN",
desc: "Crash dump controls are protected by regwen"
}
]
regwidth: "32",
scan: "true",
scan_reset: "true",
param_list: [
{ name: "RdWidth",
desc: "Read width for crash info",
type: "int",
default: "32",
local: "true"
},
{ name: "IdxWidth",
desc: "Index width for crash info",
type: "int",
default: "4",
local: "true"
},
{ name: "NumSwResets",
desc: "Number of software resets",
type: "int",
default: "2",
local: "true"
},
],
// Define rstmgr struct package
inter_signal_list: [
{ struct: "pwr_rst", // pwr_rst_req_t, pwr_rst_rsp_t
type: "req_rsp",
name: "pwr", // resets_o (req), resets_i (rsp)
act: "rsp",
},
{ struct: "rstmgr_out",
type: "uni",
name: "resets",
act: "req",
package: "rstmgr_pkg", // Origin package (only needs for the req)
},
{ struct: "rstmgr_ast",
type: "uni",
name: "ast",
act: "rcv",
package: "rstmgr_pkg", // Origin package (only needs for the req)
},
{ struct: "rstmgr_cpu",
type: "uni",
name: "cpu",
act: "rcv",
package: "rstmgr_pkg", // Origin package (only needs for the req)
},
{ struct: "alert_crashdump",
type: "uni",
name: "alert_dump",
act: "rcv",
package: "alert_pkg",
},
{ struct: "crash_dump",
type: "uni",
name: "cpu_dump",
act: "rcv",
package: "ibex_pkg",
},
// Exported resets
{ struct: "rstmgr_ast_out",
type: "uni",
name: "resets_ast",
act: "req",
package: "rstmgr_pkg", // Origin package (only needs for the req)
}
],
registers: [
{ name: "RESET_INFO",
desc: '''
Device reset reason.
''',
swaccess: "rw1c",
hwaccess: "hwo",
fields: [
{ bits: "0",
hwaccess: "none",
name: "POR",
desc: '''
Indicates when a device has reset due to power up.
'''
resval: "1"
},
{ bits: "1",
name: "LOW_POWER_EXIT",
desc: '''
Indicates when a device has reset due low power exit.
'''
resval: "0"
},
{ bits: "2",
name: "NDM_RESET",
desc: '''
Indicates when a device has reset due to non-debug-module request.
'''
resval: "0"
},
{ bits: "3:3",
hwaccess: "hrw",
name: "HW_REQ",
desc: '''
Indicates when a device has reset due to a peripheral request.
This can be an alert escalation, watchdog or anything else.
'''
resval: "0"
},
]
},
{ name: "ALERT_INFO_CTRL",
desc: '''
Alert info dump controls.
''',
swaccess: "rw",
hwaccess: "hro",
fields: [
{ bits: "0",
name: "EN",
hwaccess: "hrw",
desc: '''
Enable alert dump to capture new information.
This field is automatically set to 0 upon system reset (even if rstmgr is not reset).
'''
resval: "0"
},
{ bits: "4+IdxWidth-1:4",
name: "INDEX",
desc: '''
Controls which 32-bit value to read.
'''
resval: "0"
},
]
},
{ name: "ALERT_INFO_ATTR",
desc: '''
Alert info dump attributes.
''',
swaccess: "ro",
hwaccess: "hwo",
hwext: "true",
fields: [
{ bits: "IdxWidth-1:0",
name: "CNT_AVAIL",
swaccess: "ro",
hwaccess: "hwo",
desc: '''
The number of 32-bit values contained in the alert info dump.
'''
resval: "0",
tags: [// This field only reflects the status of the design, thus the
// default value is likely to change and not remain 0
"excl:CsrAllTests:CsrExclCheck"]
},
]
},
{ name: "ALERT_INFO",
desc: '''
Alert dump information prior to last reset.
Which value read is controlled by the !!ALERT_INFO_CTRL register.
''',
swaccess: "ro",
hwaccess: "hwo",
hwext: "true",
fields: [
{ bits: "31:0",
name: "VALUE",
desc: '''
The current 32-bit value of alert crash dump.
'''
resval: "0",
},
]
},
# Templated registers for software control
{ multireg: {
cname: "RSTMGR_SW_RST",
name: "SW_RST_REGWEN",
desc: '''
Register write enable for software controllable resets.
When a particular bit value is 0, the corresponding value in !!SW_RST_CTRL_N can no longer be changed.
When a particular bit value is 1, the corresponding value in !!SW_RST_CTRL_N can be changed.
''',
count: "NumSwResets",
swaccess: "rw0c",
hwaccess: "hro",
fields: [
{
bits: "0",
name: "EN",
desc: "Register write enable for software controllable resets",
resval: "1",
},
],
}
}
{ multireg: {
cname: "RSTMGR_SW_RST",
name: "SW_RST_CTRL_N",
desc: '''
Software controllable resets.
When a particular bit value is 0, the corresponding module is held in reset.
When a particular bit value is 1, the corresponding module is not held in reset.
''',
count: "NumSwResets",
swaccess: "rw",
hwaccess: "hrw",
hwext: "true",
hwqe: "true",
fields: [
{
bits: "0",
name: "VAL",
desc: "Software reset value",
resval: "1",
},
],
tags: [// Don't reset other IPs as it will affect CSR access on these IPs
"excl:CsrAllTests:CsrExclWrite"]
}
}
]
}