Registers

The RoT shall define three registers and drive the debug policy bus from that. These registers are updated by the RoT FW and are distributed by the debug policy bus to all consumers, e.g., HW TAPs in the system. Depending on the configured debug category, a consumer might accept the debug command or not (if it is not part of the selected debug category).

Summary of the core interface’s registers

NameOffsetLengthDescription
soc_dbg_ctrl.ALERT_TEST0x04Alert Test Register
soc_dbg_ctrl.DEBUG_POLICY_VALID_SHADOWED0x44Debug Policy Valid.
soc_dbg_ctrl.DEBUG_POLICY_CATEGORY_SHADOWED0x84Debug Policy category
soc_dbg_ctrl.DEBUG_POLICY_RELOCKED0xc4Debug Policy relocked
soc_dbg_ctrl.TRACE_DEBUG_POLICY_CATEGORY0x104Trace register to observe the debug category that is either determined by hardware or software.
soc_dbg_ctrl.TRACE_DEBUG_POLICY_VALID_RELOCKED0x144Trace register to observe the valid or relocked state that is either determined by hardware or software.
soc_dbg_ctrl.STATUS0x184Debug Status Register

ALERT_TEST

Alert Test Register

  • Offset: 0x0
  • Reset default: 0x0
  • Reset mask: 0x3

Fields

{"reg": [{"name": "fatal_fault", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "recov_ctrl_update_err", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 30}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetNameDescription
31:2Reserved
1wo0x0recov_ctrl_update_errWrite 1 to trigger one alert event of this kind.
0wo0x0fatal_faultWrite 1 to trigger one alert event of this kind.

DEBUG_POLICY_VALID_SHADOWED

Debug Policy Valid. Once valid is set to Mubi4::True, the debug policy cannot be written anymore.

  • Offset: 0x4
  • Reset default: 0x9
  • Reset mask: 0xf

Fields

{"reg": [{"name": "debug_policy_valid", "bits": 4, "attr": ["rw1s"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
BitsTypeResetNameDescription
31:4Reserved
3:0rw1s0x9debug_policy_validThe valid state of the debug policy.

DEBUG_POLICY_CATEGORY_SHADOWED

Debug Policy category

  • Offset: 0x8
  • Reset default: 0x50
  • Reset mask: 0x7f

Fields

{"reg": [{"name": "debug_policy_category", "bits": 7, "attr": ["rw"], "rotate": -90}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetNameDescription
31:7Reserved
6:0rw0x50debug_policy_categoryDebug Policy Control Setting. Indicates the current debug authorization policy that is distributed to the rest of the SoC to govern debug / DFT feature unlock.

DEBUG_POLICY_RELOCKED

Debug Policy relocked

  • Offset: 0xc
  • Reset default: 0x9
  • Reset mask: 0xf

Fields

{"reg": [{"name": "debug_policy_relocked", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetNameDescription
31:4Reserved
3:0rw0x9debug_policy_relockedThe relocked state.

TRACE_DEBUG_POLICY_CATEGORY

Trace register to observe the debug category that is either determined by hardware or software.

  • Offset: 0x10
  • Reset default: 0x50
  • Reset mask: 0x7f

Fields

{"reg": [{"name": "category", "bits": 7, "attr": ["ro"], "rotate": 0}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:7Reserved
6:0ro0x50categoryThe debug policy determined by hardware or software.

TRACE_DEBUG_POLICY_VALID_RELOCKED

Trace register to observe the valid or relocked state that is either determined by hardware or software.

  • Offset: 0x14
  • Reset default: 0x99
  • Reset mask: 0xff

Fields

{"reg": [{"name": "valid", "bits": 4, "attr": ["ro"], "rotate": 0}, {"name": "relocked", "bits": 4, "attr": ["ro"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 100}}
BitsTypeResetNameDescription
31:8Reserved
7:4ro0x9relockedThe relocked state determined by hardware or software.
3:0ro0x9validThe valid state determined by hardware or software.

STATUS

Debug Status Register

  • Offset: 0x18
  • Reset default: 0x0
  • Reset mask: 0xf1

Fields

{"reg": [{"name": "auth_debug_intent_set", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 3}, {"name": "auth_window_open", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "auth_window_closed", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "auth_unlock_success", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "auth_unlock_failed", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetNameDescription
31:8Reserved
7rw0x0auth_unlock_failedStatus bit indicating whether the unlock protocol resulted in unlock failure at requested level.
6rw0x0auth_unlock_successStatus bit indicating whether the unlock protocol resulted in a successful unlock at requested level.
5rw0x0auth_window_closedStatus bit that indicates that SoC reset sequence is unpaused SoC shall continue to boot and the debug authorization exchange cannot take place anymore until next reset. Note that the rest of the SoC reset sequence is triggered by the OT RoT.
4rw0x0auth_window_openStatus bit that tells whether debug authorization exchange can take place. This bit is set when auth_debug_intent_set is 1 and SoC reset sequence is paused to enable debug authorization exchange.
3:1Reserved
0rw0x0auth_debug_intent_setStatus bit indicating whether the debug intent hardware strap was set. If set, SoC will be treated as under debug and authorized debug can be enabled to unlock the SoC at desired debug unlock level.

Summary of the jtag interface’s registers

NameOffsetLengthDescription
soc_dbg_ctrl.JTAG_TRACE_DEBUG_POLICY_CATEGORY0x04Trace register to observe the debug category that is either determined by hardware or software.
soc_dbg_ctrl.JTAG_TRACE_DEBUG_POLICY_VALID_RELOCKED0x44Trace register to observe the valid or relocked state that is either determined by hardware or software.
soc_dbg_ctrl.JTAG_CONTROL0x84JTAG control register to interact with the boot flow.
soc_dbg_ctrl.JTAG_STATUS0xc4Debug Status Register
soc_dbg_ctrl.JTAG_BOOT_STATUS0x104Debug boot status register that tells important boot state information.
soc_dbg_ctrl.JTAG_TRACE_SOC_DBG_STATE0x144Tells the current debug state coming from OTP.

JTAG_TRACE_DEBUG_POLICY_CATEGORY

Trace register to observe the debug category that is either determined by hardware or software.

  • Offset: 0x0
  • Reset default: 0x50
  • Reset mask: 0x7f

Fields

{"reg": [{"name": "category", "bits": 7, "attr": ["ro"], "rotate": 0}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:7Reserved
6:0ro0x50categoryThe debug policy determined by hardware or software.

JTAG_TRACE_DEBUG_POLICY_VALID_RELOCKED

Trace register to observe the valid or relocked state that is either determined by hardware or software.

  • Offset: 0x4
  • Reset default: 0x99
  • Reset mask: 0xff

Fields

{"reg": [{"name": "valid", "bits": 4, "attr": ["ro"], "rotate": 0}, {"name": "relocked", "bits": 4, "attr": ["ro"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 100}}
BitsTypeResetNameDescription
31:8Reserved
7:4ro0x9relockedThe relocked state determined by hardware or software.
3:0ro0x9validThe valid state determined by hardware or software.

JTAG_CONTROL

JTAG control register to interact with the boot flow.

  • Offset: 0x8
  • Reset default: 0x0
  • Reset mask: 0x1

Fields

{"reg": [{"name": "boot_continue", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 150}}
BitsTypeResetNameDescription
31:1Reserved
0rw0x0boot_continueJTAG bit to stop or continue the boot flow of Ibex. 1’b0: Stop and halt boot flow. 1’b1: Continue with the boot flow and let Ibex fetch code.

JTAG_STATUS

Debug Status Register

  • Offset: 0xc
  • Reset default: 0x0
  • Reset mask: 0xf1

Fields

{"reg": [{"name": "auth_debug_intent_set", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 3}, {"name": "auth_window_open", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "auth_window_closed", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "auth_unlock_success", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "auth_unlock_failed", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetNameDescription
31:8Reserved
7ro0x0auth_unlock_failedStatus bit indicating whether the unlock protocol resulted in unlock failure at requested level
6ro0x0auth_unlock_successStatus bit indicating whether the unlock protocol resulted in a successful unlock at requested level
5ro0x0auth_window_closedStatus bit that indicates that SoC reset sequence is unpaused, SoC shall continue to boot and the debug authorization exchange cannot take place anymore until next reset. Note that the rest of the SoC reset sequence is triggered by the OT RoT“
4ro0x0auth_window_openStatus bit that tells whether debug authorization exchange can take place. This bit is set when auth_debug_intent_set is 1 and SoC reset sequence is paused to enable debug authorization exchange.
3:1Reserved
0ro0x0auth_debug_intent_setStatus bit indicating whether the debug intent hardware strap was set. If set, SoC will be treated as under debug and authorized debug can be enabled to unlock the SoC at desired debug unlock level.

JTAG_BOOT_STATUS

Debug boot status register that tells important boot state information. Note that this information is reflected only if the hw_dft_en signal is true.

  • Offset: 0x10
  • Reset default: 0x0
  • Reset mask: 0x1ffff

Fields

{"reg": [{"name": "main_clk_status", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "io_clk_status", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "otp_done", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "lc_done", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "cpu_fetch_en", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "halt_fsm_state", "bits": 6, "attr": ["ro"], "rotate": -90}, {"name": "boot_greenlight_done", "bits": 3, "attr": ["ro"], "rotate": -90}, {"name": "boot_greenlight_good", "bits": 3, "attr": ["ro"], "rotate": -90}, {"bits": 15}], "config": {"lanes": 1, "fontsize": 10, "vspace": 220}}
BitsTypeResetNameDescription
31:17Reserved
16:14ro0x0boot_greenlight_goodGreen lights status for the boot process: good indication coming from [0]: base ROM [1]: second ROM [2]: this module
13:11ro0x0boot_greenlight_doneGreen lights for the boot process: done indication coming from [0]: base ROM [1]: second ROM [2]: this module Note that for the boot process to go through, all done bits in this field and all good bits in the next field need to be set.
10:5ro0x0halt_fsm_stateThe state of the halt state FSM.
4ro0x0cpu_fetch_enIndication from powermanger to IBEX to state code execution
3ro0x0lc_doneLifecycle controller initialization done; LC policy is decoded and set
2ro0x0otp_doneOTP controller initialization complete
1ro0x0io_clk_statusStatus of the IO Clock activation
0ro0x0main_clk_statusStatus of the main clock activation

JTAG_TRACE_SOC_DBG_STATE

Tells the current debug state coming from OTP. Note that this information is reflected only if the hw_dft_en signal is true.

  • Offset: 0x14
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "soc_dbg_state", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0ro0x0soc_dbg_stateThe current debug state.