blob: c3da1d7249e219caabccaf3b0cc1dd6baae60c1b [file] [log] [blame] [view]
Hugo McNallyf6298b32023-02-12 14:47:22 +00001# System Reset Control Technical Specification
Eric Shiu97b905a2021-04-09 15:11:27 -07002
3# Overview
4
Michael Schaffner88db0fb2022-01-20 15:42:33 -08005This document specifies the functionality of the System Reset Controller (`sysrst_ctrl`) that provides programmable hardware-level responses to trusted IOs and basic board-level reset sequencing capabilities.
Michael Schaffner816c8162022-01-20 14:54:42 -08006These capabilities include keyboard and button combination-triggered actions, reset stretching for system-level reset signals, and internal reset / wakeup requests that go to the OpenTitan reset and power manager blocks.
Hugo McNallyaef0a662023-02-11 19:44:55 +00007This module conforms to the [Comportable guideline for peripheral functionality](../../../doc/contributing/hw/comportability/README.md).
Eric Shiu97b905a2021-04-09 15:11:27 -07008See that document for integration overview within the broader top level system.
9
10## Features
11
12The IP block implements the following features:
13
Michael Schaffnercb4e5792021-08-12 18:05:19 -070014- Always-on: uses the always-on power and clock domain
Eric Shiu97b905a2021-04-09 15:11:27 -070015- EC reset pulse duration control and stretching
Michael Schaffnercb4e5792021-08-12 18:05:19 -070016- Keyboard and button combination (combo) triggered action
Timothy Trippelf82e75a2022-07-27 14:42:22 -070017- AC_present can trigger interrupt
Eric Shiu97b905a2021-04-09 15:11:27 -070018- Configuration registers can be set and locked until the next chip reset
19- Pin output override
20
21## Description
22
Michael Schaffnercb4e5792021-08-12 18:05:19 -070023The `sysrst_ctrl` logic is very simple.
Marno van der Maas87ffdef2023-02-17 14:23:35 +000024It looks up the configuration registers to decide how long the EC reset pulse duration and how long the key presses should be.
Michael Schaffner9aefd162021-08-18 20:38:55 -070025Also what actions to take (e.g. Interrupt, EC reset, OpenTitan reset request, disconnect the battery from the power tree).
Eric Shiu97b905a2021-04-09 15:11:27 -070026
27## Compatibility
28
29The configuration programming interface is not based on any existing interface.
30
31# Theory of Operations
32
Hugo McNallyaef0a662023-02-11 19:44:55 +000033![`sysrst_ctrl` Block Diagram](./doc/sysrst_ctrl_blockdiagram.svg)
Eric Shiu97b905a2021-04-09 15:11:27 -070034
Michael Schaffnercb4e5792021-08-12 18:05:19 -070035The block diagram above shows a conceptual view of the `sysrst_ctrl` block, which consists of 3 main modules:
36The first is the configuration and status registers, the second is the keyboard combo debounce and detection logic, and the third is the pinout override logic.
Marno van der Maas87ffdef2023-02-17 14:23:35 +000037The debounce logic does not implement a low-pass filter, instead it uses a simpler technique of sampling once when the timer starts and then again when the timer ends.
38The detection logic does require the signal to stay active for the entire period, which can be used to detect any anomoulous signals that might elude the rudimentary debounce logic.
39For the auto block, key interrupt and ultra-low-power features there is only a debounce timer so it is good to be aware of this behavior of sampling the signal only twice.
Michael Schaffnercb4e5792021-08-12 18:05:19 -070040
Michael Schaffnerc544e112022-02-10 17:36:28 -080041The `sysrst_ctrl` has four input pins (`pwrb_in_i`, `key[0,1,2]_in_i`) with corresponding output pins (`pwrb_out`, `key[0,1,2]_out`).
Michael Schaffnercb4e5792021-08-12 18:05:19 -070042During normal operation the `sysrst_ctrl` will pass the pin information directly from the input pins to the output pins with optional inversion.
Timothy Trippelf82e75a2022-07-27 14:42:22 -070043Combinations of the inputs being active for a specified time can be detected and used to trigger actions.
44The override logic allows the output to be overridden (i.e. not follow the corresponding input) based either on trigger or software settings.
Eric Shiu97b905a2021-04-09 15:11:27 -070045This allows the security chip to take over the inputs for its own use without disturbing the main user.
46
Michael Schaffnerc544e112022-02-10 17:36:28 -080047The `sysrst_ctrl` also controls two active-low open-drain I/Os named `flash_wp_l_i` / `flash_wp_l_o` and `ec_rst_l_i` / `ec_rst_l_o`.
48The `ec_rst_l_i` / `ec_rst_l_o` signals are connected to the same bidirectional pin of the OpenTitan chip, and are used to either reset the embedded controller (EC), or to detect self-reset of the EC and stretch the reset pulse (hence the bidirectional nature of this pin).
Michael Schaffner9aefd162021-08-18 20:38:55 -070049This output is always asserted when `sysrst_ctrl` is reset (allowing its use as a power-on reset) and remains asserted until released by software.
Michael Schaffnerc544e112022-02-10 17:36:28 -080050The flash write-protect output `flash_wp_l_o` is typically connected to the BIOS flash chip in the system.
Michael Schaffner9aefd162021-08-18 20:38:55 -070051This output is always asserted when the `sysrst_ctrl` block is reset and remains asserted until released by software.
Eric Shiu97b905a2021-04-09 15:11:27 -070052
Michael Schaffnercb4e5792021-08-12 18:05:19 -070053## Hardware Interfaces
Eric Shiu97b905a2021-04-09 15:11:27 -070054
Hugo McNallyba16bae2023-02-12 21:08:04 +000055* [Interface Tables](data/sysrst_ctrl.hjson#interfaces)
Michael Schaffnercb4e5792021-08-12 18:05:19 -070056
Eric Shiu97b905a2021-04-09 15:11:27 -070057## Combo detection
58
Michael Schaffnercb4e5792021-08-12 18:05:19 -070059Software can program the `sysrst_ctrl` block to detect certain button combos and for how long they have to be asserted until they trigger a programmable action.
Michael Schaffnerfee58742022-12-22 08:45:22 +010060A combo is a combination of multiple keys that are pressed together for a programmable amount of time.
Michael Schaffnercb4e5792021-08-12 18:05:19 -070061
Michael Schaffnerfee58742022-12-22 08:45:22 +010062In order to detect a combo, the hardware first OR's the active-low key-pressed indications and debounces the combined trigger signal.
63The hardware then detects a negative edge on the combined trigger signal and checks whether it stays asserted low for the programmed amount of cycles.
64If the combined trigger signal fulfills the programmed timing constraint, a combo is detected.
Michael Schaffnercb4e5792021-08-12 18:05:19 -070065
Michael Schaffnerfee58742022-12-22 08:45:22 +010066Optionally, a combo detection channel may also specify a pre-condition.
67Such a pre-condition is a set of keys that must remain pressed in order to activate the combo detection circuit.
68The main difference with respect to the combo detection circuit is that the pre-condition checks for a low level of the combined key-pressed indications instead of checking for a negative edge.
69The pre-condition debounce timing is the same as for combo detection, but the key-pressed timing can be configured independently.
70
71Let's use the "Power button + Key0 + Key1" combo with pre-condition "Key2" as an example:
72
Hugo McNally6321c5e2023-02-16 21:39:55 +0000730. Software can define the key value `key2_in_i==0` as pre-condition in the [`COM_PRE_SEL_CTL_0`](../spi_host/data/spi_host.hjson#com_pre_sel_ctl_0) register.
741. The key-pressed time for the pre-condition (e.g. 2 seconds) can be configured via the [`COM_DET_SEL_CTL_0`](../spi_host/data/spi_host.hjson#com_det_sel_ctl_0) register.
752. Software can define the three key values `pwrb_in_i==0`, `key0_in_i==0` and `key1_in_i==0` as trigger combination in the [`COM_SEL_CTL_0`](../spi_host/data/spi_host.hjson#com_sel_ctl_0) register.
763. The combo duration for which the above combo should be pressed (e.g. 10 seconds) can be configured via the [`COM_DET_CTL_0`](../spi_host/data/spi_host.hjson#com_det_ctl_0) register.
774. Actions such as asserting `ec_rst_l_o` and raising an interrupt can be configured via the [`COM_OUT_CTL_0`](../spi_host/data/spi_host.hjson#com_out_ctl_0) register.
785. The pulse width of the `ec_rst_l_o` pulse can be set in the [`EC_RST_CTL`](../spi_host/data/spi_host.hjson#ec_rst_ctl) register.
796. The software can optionally lock the `sysrst_ctrl` configuration via [`REGWEN`](../spi_host/data/spi_host.hjson#regwen)
Michael Schaffnerfee58742022-12-22 08:45:22 +010080
81Once the above configuration is active, `sysrst_ctrl` will start the timer when the pre-condition is valid (logic 0 level on all pre-condition signals).
82If the timing condition (2 seconds) is met, `systrst_ctrl` will enable combo detection, and wait for a high (logic 1) to low (logic 0) transition of the combined trigger signal.
Hugo McNally6321c5e2023-02-16 21:39:55 +000083If a transition is seen, and the timing condition is met (10 seconds), `sysrst_ctrl` will assert `ec_rst_l_o`, the interrupt request and set the interrupt status register [`COMBO_INTR_STATUS`](../spi_host/data/spi_host.hjson#combo_intr_status) to indicate the interrupt cause.
84The software interrupt handler should then read the [`COMBO_INTR_STATUS`](../spi_host/data/spi_host.hjson#combo_intr_status) register and clear the interrupt via the [`INTR_STATE`](../spi_host/data/spi_host.hjson#intr_state) register.
Michael Schaffner816c8162022-01-20 14:54:42 -080085
Michael Schaffner9c0b24d2022-08-05 13:56:09 -070086Note that an interrupt will also issue a wakeup request to the OpenTitan power manager via `wkup_req_o`.
Hugo McNally6321c5e2023-02-16 21:39:55 +000087Software should therefore read and clear the [`WKUP_STATUS`](../spi_host/data/spi_host.hjson#wkup_status) register as well.
Eric Shiu97b905a2021-04-09 15:11:27 -070088
Michael Schaffner2babd942022-02-04 20:19:18 -080089### Combo actions
90
91The following four combo actions can be triggered:
92
Timothy Trippelf82e75a2022-07-27 14:42:22 -070093- Drive the `bat_disable` output high until the next reset.
Michael Schaffner9c0b24d2022-08-05 13:56:09 -070094- Issue an interrupt to the processor via `intr_event_detected_o`.
Hugo McNally6321c5e2023-02-16 21:39:55 +000095- Assert `ec_rst_l_o` for the amount of cycles configured in [`EC_RST_CTL`](../spi_host/data/spi_host.hjson#ec_rst_ctl).
Michael Schaffner9c0b24d2022-08-05 13:56:09 -070096- Issue a reset request via `rst_req_o` to the reset manager of the OpenTitan system. Note that once a reset request is issued, it will remain asserted until the next reset.
Timothy Trippelf82e75a2022-07-27 14:42:22 -070097
Hugo McNally6321c5e2023-02-16 21:39:55 +000098These actions can be configured via the [`COM_OUT_CTL_0`](../spi_host/data/spi_host.hjson#com_out_ctl_0) register for each of the combo blocks as described in the previous section.
Michael Schaffner2babd942022-02-04 20:19:18 -080099
100### Hardwired reset stretching functionality
101
Hugo McNally6321c5e2023-02-16 21:39:55 +0000102In addition to the combo action described above, `ec_rst_l_o` is automatically asserted for the amount of cycles defined in the [`EC_RST_CTL`](../spi_host/data/spi_host.hjson#ec_rst_ctl) register whenever the `ec_rst_l_i` input is asserted (i.e., when it transitions from high to low).
Michael Schaffner2babd942022-02-04 20:19:18 -0800103
Eric Shiu97b905a2021-04-09 15:11:27 -0700104## Auto-block key outputs
105
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700106Software can program the `sysrst_ctrl` block to override the output value of specific passthrough signals, depending on whether certain input signals are asserted or not.
107Let's use the "Power button + Esc + Refresh" combo as an example.
Michael Schaffnerc544e112022-02-10 17:36:28 -0800108When `pwrb_in_i` is asserted, `key1_out_o` (row) should be overridden so that `sysrst_ctrl` can detect if `key0_in_i` (column) is Refresh.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700109
Hugo McNally6321c5e2023-02-16 21:39:55 +00001101. The software enables the auto block feature and sets an appropriate debounce timer value in the [`AUTO_BLOCK_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#auto_block_debounce_ctl) register.
1112. The software then defines the key outputs to auto override and their override values in the [`AUTO_BLOCK_OUT_CTL`](../spi_host/data/spi_host.hjson#auto_block_out_ctl) register.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700112
Michael Schaffnerc544e112022-02-10 17:36:28 -0800113Once the above configuration is active, `sysrst_ctrl` will detect a high (logic 1) to low (logic 0) transition on `pwrb_in_i` and check whether the key `pwrb_in_i` stays low for the programmed duration.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000114If this condition is met, `sysrst_ctrl` will drive `key1_out_o` to the value programmed in [`AUTO_BLOCK_OUT_CTL`](../spi_host/data/spi_host.hjson#auto_block_out_ctl).
Eric Shiu97b905a2021-04-09 15:11:27 -0700115
116## Keyboard and input triggered interrupt
117
Michael Schaffnerc544e112022-02-10 17:36:28 -0800118Software can program the `sysrst_ctrl` block to detect edge transitions on the `pwrb_in_i`, `key0_in_i`, `key1_in_i`, `key2_in_i`, `ac_present_i`, `ec_rst_l_i` and `flash_wp_l_i` signals and trigger an interrupt:
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700119
Hugo McNally6321c5e2023-02-16 21:39:55 +00001201. Software first defines the input signal and the edge transition to detect (H->L or L->H) via the [`KEY_INTR_CTL`](../spi_host/data/spi_host.hjson#key_intr_ctl) register.
1212. The software then programs an appropriate debounce timer value to the [`KEY_INTR_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#key_intr_debounce_ctl) register.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700122
Michael Schaffnerc544e112022-02-10 17:36:28 -0800123For example, when the power button is pressed, `pwrb_in_i` goes from logic 1 to logic 0 which would amount to an H->L transition.
124Likewise, when the power button is released, `pwrb_in_i` goes from logic 0 to logic 1 which would amount to an L->H transition.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000125When `sysrst_ctrl` detects a transition (H->L or L->H) as specified in [`KEY_INTR_CTL`](../spi_host/data/spi_host.hjson#key_intr_ctl) and it meets the debounce requirement in [`KEY_INTR_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#key_intr_debounce_ctl), `sysrst_ctrl` sets the [`KEY_INTR_STATUS`](../spi_host/data/spi_host.hjson#key_intr_status) register to indicate the interrupt cause and send out a consolidated interrupt to the PLIC.
126The software interrupt handler should then read the [`KEY_INTR_STATUS`](../spi_host/data/spi_host.hjson#key_intr_status) register and clear the interrupt via the [`INTR_STATE`](../spi_host/data/spi_host.hjson#intr_state) register.
Michael Schaffner816c8162022-01-20 14:54:42 -0800127
Michael Schaffner9c0b24d2022-08-05 13:56:09 -0700128Note that an interrupt will also issue a wakeup request to the OpenTitan power manager via `wkup_req_o`.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000129Software should therefore read and clear the [`WKUP_STATUS`](../spi_host/data/spi_host.hjson#wkup_status) register as well.
Michael Schaffner816c8162022-01-20 14:54:42 -0800130
131## Ultra-low-power Wakeup Feature
132
Michael Schaffnerc544e112022-02-10 17:36:28 -0800133Software can program the `sysrst_ctrl` block to detect certain specific signal transitions on the (possibly inverted) `ac_present_i`, `pwrb_in_i` and `lid_open_i` inputs.
Timothy Trippelf82e75a2022-07-27 14:42:22 -0700134As opposed to the combo detection and general key interrupt features above, this is a fixed function feature with limited configurability.
Michael Schaffner816c8162022-01-20 14:54:42 -0800135In particular, the transitions that can be detected are fixed to the following:
136
Michael Schaffnerc544e112022-02-10 17:36:28 -0800137- A high level on the `ac_present_i` signal
138- A H -> L transition on the `pwrb_in_i` signal
139- A L -> H transition on the `lid_open_i` signal
Michael Schaffner88db0fb2022-01-20 15:42:33 -0800140
Hugo McNallyba16bae2023-02-12 21:08:04 +0000141Note that the signals may be potentially inverted due to the [input inversion feature]({{< relref "#inversion" >}}).
Michael Schaffner816c8162022-01-20 14:54:42 -0800142
143In order to activate this feature, software should do the following:
144
Hugo McNally6321c5e2023-02-16 21:39:55 +00001451. Software can program the appropriate debounce times via the [`ULP_AC_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#ulp_ac_debounce_ctl), [`ULP_LID_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#ulp_lid_debounce_ctl) and [`ULP_PWRB_DEBOUNCE_CTL`](../spi_host/data/spi_host.hjson#ulp_pwrb_debounce_ctl) registers.
1462. Then, software can activate detection by setting the [`ULP_CTL`](../spi_host/data/spi_host.hjson#ulp_ctl) register to 1.
Michael Schaffner816c8162022-01-20 14:54:42 -0800147
148Once the above configuration is active, `sysrst_ctrl` will start the timer when a transition is detected.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000149Once the timing condition is met, `sysrst_ctrl` will assert `z3_wakeup` output signal, the interrupt request and set the interrupt status register [`ULP_STATUS`](../spi_host/data/spi_host.hjson#ulp_status) to indicate the interrupt cause.
150The software interrupt handler should then read the [`ULP_STATUS`](../spi_host/data/spi_host.hjson#ulp_status) register and clear the interrupt via the [`INTR_STATE`](../spi_host/data/spi_host.hjson#intr_state) register.
Michael Schaffner816c8162022-01-20 14:54:42 -0800151
Michael Schaffner9c0b24d2022-08-05 13:56:09 -0700152Note that an interrupt will also issue a wakeup request to the OpenTitan power manager via `wkup_req_o`.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000153Software should therefore read and clear the [`WKUP_STATUS`](../spi_host/data/spi_host.hjson#wkup_status) register as well.
Michael Schaffner816c8162022-01-20 14:54:42 -0800154
155Also note that the detection status is sticky.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000156I.e., software needs to explicitly disable this feature by setting [`ULP_CTL`](../spi_host/data/spi_host.hjson#ulp_ctl) to 0 in order to clear the FSM state.
157If software wants to re-arm the mechanism right away, it should first read back [`ULP_CTL`](../spi_host/data/spi_host.hjson#ulp_ctl) to make sure it has been cleared before setting that register to 1 again.
Dan McArdlea5ca8fc2022-09-27 12:48:08 -0400158This is needed because this register has to be synchronized over to the AON clock domain.
Eric Shiu97b905a2021-04-09 15:11:27 -0700159
160## Pin input value accessibility
161
Hugo McNally6321c5e2023-02-16 21:39:55 +0000162`sysrst_ctrl` allows the software to read the raw input pin values via the [`PIN_IN_VALUE`](../spi_host/data/spi_host.hjson#pin_in_value) register like GPIOs.
Michael Schaffnerc544e112022-02-10 17:36:28 -0800163To this end, the hardware samples the raw input values of `pwrb_in_i`, `key[0,1,2]_in_i`, `ac_present_i`, `ec_rst_l_i`, `flash_wp_l_i` before they are being inverted, and synchronizes them onto the bus clock domain.
Eric Shiu97b905a2021-04-09 15:11:27 -0700164
Michael Schaffner88db0fb2022-01-20 15:42:33 -0800165## Pin output and keyboard inversion control {#inversion}
Eric Shiu97b905a2021-04-09 15:11:27 -0700166
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700167Software can optionally override all output signals, and change the signal polarity of some of the input and output signals.
168The output signal override feature always has higher priority than any of the combo pattern detection mechanisms described above.
169
Hugo McNally6321c5e2023-02-16 21:39:55 +0000170The selection of output signals to override, and the override values are programmable and lockable via the [`PIN_ALLOWED_CTL`](../spi_host/data/spi_host.hjson#pin_allowed_ctl) register.
171For example, [`PIN_ALLOWED_CTL.EC_RST_L_0`](../spi_host/data/spi_host.hjson#pin_allowed_ctl) to 1 and [`PIN_ALLOWED_CTL.EC_RST_L_1`](../spi_host/data/spi_host.hjson#pin_allowed_ctl) to 0 means that software allows `ec_rst_l_o` to be overridden with logic 0, but not with logic 1.
172If the SW locks the configuration with [`REGWEN`](../spi_host/data/spi_host.hjson#regwen), [`PIN_ALLOWED_CTL`](../spi_host/data/spi_host.hjson#pin_allowed_ctl) cannot be modified until the next OpenTitan reset.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700173
Hugo McNally6321c5e2023-02-16 21:39:55 +0000174When the system is up and running, the software can modify [`PIN_OUT_CTL`](../spi_host/data/spi_host.hjson#pin_out_ctl) and [`PIN_OUT_VALUE`](../spi_host/data/spi_host.hjson#pin_out_value) to enable or disable the feature.
175For example, to release `ec_rst_l_o` after OpenTitan completes the reset, software can set [`PIN_OUT_CTL`](../spi_host/data/spi_host.hjson#pin_out_ctl) to 0 to stop the hardware from driving `ec_rst_l_o` to 0.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700176
Hugo McNally6321c5e2023-02-16 21:39:55 +0000177The input / output signal inversions can be programmed via the [`KEY_INVERT_CTL`](../spi_host/data/spi_host.hjson#key_invert_ctl) register.
Michael Schaffnercb4e5792021-08-12 18:05:19 -0700178Input signals will be inverted before the combo detection logic, while output signals will be inverted after the output signal override logic.
Eric Shiu97b905a2021-04-09 15:11:27 -0700179
180## EC and Power-on-reset
181
Michael Schaffner9aefd162021-08-18 20:38:55 -0700182OpenTitan and EC will be reset together during power-on.
Michael Schaffnerc544e112022-02-10 17:36:28 -0800183When OpenTitan is in reset, `ec_rst_l_o` will be asserted (active low).
Hugo McNally6321c5e2023-02-16 21:39:55 +0000184The power-on-reset value of [`PIN_ALLOWED_CTL.EC_RST_L_1`](../spi_host/data/spi_host.hjson#pin_allowed_ctl) and [`PIN_OUT_CTL.EC_RST_L`](../spi_host/data/spi_host.hjson#pin_out_ctl) will guarantee that `ec_rst_l_o` remains asserted after OpenTitan reset is released.
185The software can release `ec_rst_l_o` explicitly by setting [`PIN_OUT_CTL.EC_RST_L`](../spi_host/data/spi_host.hjson#pin_out_ctl) to 0 during boot in order to complete the OpenTitan and EC power-on-reset sequence.
Michael Schaffner9aefd162021-08-18 20:38:55 -0700186
Hugo McNallyaef0a662023-02-11 19:44:55 +0000187Note that since the `sysrst_ctrl` does not have control over the pad open-drain settings, software should properly initialize the pad attributes of the corresponding pad in the [pinmux configuration](../pinmux/README.md) before releasing `ec_rst_l_o`.
Michael Schaffner9aefd162021-08-18 20:38:55 -0700188
189## Flash Write Protect Output
190
Michael Schaffnerc544e112022-02-10 17:36:28 -0800191Upon reset, the `flash_wp_l_o` signal will be asserted active low.
Hugo McNally6321c5e2023-02-16 21:39:55 +0000192The software can release `flash_wp_l_o` explicitly by setting [`PIN_OUT_CTL.FLASH_WP_L`](../spi_host/data/spi_host.hjson#pin_out_ctl) to 0 when needed.
Michael Schaffnerc544e112022-02-10 17:36:28 -0800193The `flash_wp_l_o` signal does have a corresponding input signal `flash_wp_l_i` - but that one is mainly intended for pad observability and does not have a bypass path to `flash_wp_l_o`.
194Hence, the value of `flash_wp_l_o` defaults to logic 0 when it is not explicitly driven via the override function.
Michael Schaffner9aefd162021-08-18 20:38:55 -0700195
Hugo McNallyaef0a662023-02-11 19:44:55 +0000196Note that since the `sysrst_ctrl` does not have control over the pad open-drain settings, software should properly initialize the pad attributes of the corresponding pad in the [pinmux configuration](../pinmux/README.md) before releasing `flash_wp_l_o`.
Eric Shiu97b905a2021-04-09 15:11:27 -0700197
Timothy Trippelf82e75a2022-07-27 14:42:22 -0700198## Device Interface Functions (DIFs)
199
Hugo McNallyac9f9b52023-02-14 12:15:34 +0000200- [Device Interface Functions](../../../sw/device/lib/dif/dif_sysrst_ctrl.h)
Timothy Trippelf82e75a2022-07-27 14:42:22 -0700201
Eric Shiu97b905a2021-04-09 15:11:27 -0700202## Registers
203
Hugo McNallyba16bae2023-02-12 21:08:04 +0000204* [Register Table](data/sysrst_ctrl.hjson#registers)