| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| #ifndef OPENTITAN_SW_DEVICE_LIB_DIF_DIF_SYSRST_CTRL_H_ |
| #define OPENTITAN_SW_DEVICE_LIB_DIF_DIF_SYSRST_CTRL_H_ |
| |
| /** |
| * @file |
| * @brief <a href="/hw/ip/sysrst_ctrl/doc/">System Reset Controller</a> Device |
| * Interface Functions |
| */ |
| |
| #include "sw/device/lib/dif/autogen/dif_sysrst_ctrl_autogen.h" |
| #include "sysrst_ctrl_regs.h" // Generated. |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| /** |
| * A System Reset Controller key combination. |
| */ |
| typedef enum dif_sysrst_ctrl_key_combo { |
| /** |
| * Key combination 0. |
| */ |
| kDifSysrstCtrlKeyCombo0 = 1U << 0, |
| /** |
| * Key combination 1. |
| */ |
| kDifSysrstCtrlKeyCombo1 = 1U << 1, |
| /** |
| * Key combination 2. |
| */ |
| kDifSysrstCtrlKeyCombo2 = 1U << 2, |
| /** |
| * Key combination 3. |
| */ |
| kDifSysrstCtrlKeyCombo3 = 1U << 3, |
| /** |
| * All key combination ORed together. |
| * |
| * This is useful when clearing all key combination IRQ causes at once, e.g., |
| * when initializing the System Reset Controller. |
| */ |
| kDifSysrstCtrlKeyComboAll = (1U << 4) - 1, |
| } dif_sysrst_ctrl_key_combo_t; |
| |
| /** |
| * System Reset Controller keys that can form a key combination. |
| */ |
| typedef enum dif_sysrst_ctrl_key { |
| /** |
| * Key 0. |
| */ |
| kDifSysrstCtrlKey0 = 1U << 0, |
| /** |
| * Key 1. |
| */ |
| kDifSysrstCtrlKey1 = 1U << 1, |
| /** |
| * Key 2. |
| */ |
| kDifSysrstCtrlKey2 = 1U << 2, |
| /** |
| * Power button key. |
| */ |
| kDifSysrstCtrlKeyPowerButton = 1U << 3, |
| /** |
| * AC power preset key. |
| */ |
| kDifSysrstCtrlKeyAcPowerPresent = 1U << 4, |
| /** |
| * All keys ORed together. |
| */ |
| kDifSysrstCtrlKeyAll = (1U << 5) - 1, |
| } dif_sysrst_ctrl_key_t; |
| |
| /** |
| * System Reset Controller key combination detection actions. |
| */ |
| typedef enum dif_sysrst_ctrl_key_combo_action { |
| /** |
| * Disable / disconnect battery. |
| */ |
| kDifSysrstCtrlKeyComboActionBatteryDisable = 1U << 0, |
| /** |
| * Issue an interrupt to the processor. |
| */ |
| kDifSysrstCtrlKeyComboActionInterrupt = 1U << 1, |
| /** |
| * Assert the embedded controller reset for a specified duration. |
| */ |
| kDifSysrstCtrlKeyComboActionEcReset = 1U << 2, |
| /** |
| * Issue a reset request to the reset manager block. |
| */ |
| kDifSysrstCtrlKeyComboActionSelfReset = 1U << 3, |
| /** |
| * All actions. |
| */ |
| kDifSysrstCtrlKeyComboActionAll = (1U << 4) - 1, |
| } dif_sysrst_ctrl_key_combo_action_t; |
| |
| /** |
| * Runtime configuration for the System Reset Controller key combination |
| * detection feature. |
| */ |
| typedef struct dif_sysrst_ctrl_key_combo_config { |
| /** |
| * The keys that comprise the key combination to detect (i.e., one or more |
| * `dif_sysrst_ctrl_key_t`s ORed together). |
| */ |
| uint32_t keys; |
| /** |
| * The duration the key combination should be pressed to trigger an action. |
| * |
| * Units: increments of 5us; [0, 2^32) represents [0, 60) seconds. |
| */ |
| uint32_t detection_time_threshold; |
| /** |
| * The actions to trigger after detecting the key press combination (one or |
| * more `dif_sysrst_ctrl_key_combo_action_t`s ORed together). |
| */ |
| uint32_t actions; |
| /** |
| * The embedded controller's reset pulse width. |
| * |
| * Note: only applicable if the `kDifSysrstCtrlKeyComboActionEcReset` action |
| * is enabled for the key combination. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [10, 200) milliseconds. |
| */ |
| uint16_t embedded_controller_reset_duration; |
| } dif_sysrst_ctrl_key_combo_config_t; |
| |
| /** |
| * System Reset Controller input signal changes that may be detected. |
| */ |
| typedef enum dif_sysrst_ctrl_input_change { |
| /** |
| * Power button input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputPowerButtonH2L = 1U << 0, |
| /** |
| * Key 0 input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputKey0H2L = 1U << 1, |
| /** |
| * Key 1 input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputKey1H2L = 1U << 2, |
| /** |
| * Key 2 input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputKey2H2L = 1U << 3, |
| /** |
| * AC power present input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputAcPowerPresetH2L = 1U << 4, |
| /** |
| * Embedded controller reset input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputEcResetH2L = 1U << 5, |
| /** |
| * Flash write protect input signal high-to-low. |
| */ |
| kDifSysrstCtrlInputFlashWriteProtectH2L = 1U << 6, |
| /** |
| * Power button input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputPowerButtonL2H = 1U << 7, |
| /** |
| * Key 0 input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputKey0L2H = 1U << 8, |
| /** |
| * Key 1 input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputKey1L2H = 1U << 9, |
| /** |
| * Key 2 input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputKey2L2H = 1U << 10, |
| /** |
| * AC power present input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputAcPowerPresetL2H = 1U << 11, |
| /** |
| * Embedded controller reset input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputEcResetL2H = 1U << 12, |
| /** |
| * Flash write protect input signal low-to-high. |
| */ |
| kDifSysrstCtrlInputFlashWriteProtectL2H = 1U << 13, |
| /** |
| * All input signal transitions. |
| */ |
| kDifSysrstCtrlInputAll = ((1U << 14) - 1), |
| } dif_sysrst_ctrl_input_change_t; |
| |
| /** |
| * System Reset Controller key interrupt sources. |
| */ |
| typedef enum dif_sysrst_ctrl_key_intr_src { |
| /** |
| * Power button input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputPowerButtonH2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_PWRB_H2L_BIT, |
| /** |
| * Key 0 input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey0H2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY0_IN_H2L_BIT, |
| /** |
| * Key 1 input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey1H2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY1_IN_H2L_BIT, |
| /** |
| * Key 2 input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey2H2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY2_IN_H2L_BIT, |
| /** |
| * AC power present input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputAcPowerPresetH2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_AC_PRESENT_H2L_BIT, |
| /** |
| * Embedded controller reset input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputEcResetH2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_EC_RST_L_H2L_BIT, |
| /** |
| * Flash write protect input signal high-to-low. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputFlashWriteProtectH2L = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_FLASH_WP_L_H2L_BIT, |
| /** |
| * Power button input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputPowerButtonL2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_PWRB_L2H_BIT, |
| /** |
| * Key 0 input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey0L2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY0_IN_L2H_BIT, |
| /** |
| * Key 1 input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey1L2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY1_IN_L2H_BIT, |
| /** |
| * Key 2 input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputKey2L2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_KEY2_IN_L2H_BIT, |
| /** |
| * AC power present input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputAcPowerPresetL2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_AC_PRESENT_L2H_BIT, |
| /** |
| * Embedded controller reset input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputEcResetL2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_EC_RST_L_L2H_BIT, |
| /** |
| * Flash write protect input signal low-to-high. |
| */ |
| kDifSysrstCtrlKeyIntrStatusInputFlashWriteProtectL2H = |
| 1U << SYSRST_CTRL_KEY_INTR_STATUS_FLASH_WP_L_L2H_BIT, |
| } dif_sysrst_ctrl_key_intr_src_t; |
| |
| /** |
| * System Reset Controller combo interrupt sources. |
| */ |
| typedef enum dif_sysrst_ctrl_combo_intr_src { |
| /** |
| * Power button input signal high-to-low. |
| */ |
| kDifSysrstCtrlComboIntrStatusCombo0H2L = |
| 1U << SYSRST_CTRL_COMBO_INTR_STATUS_COMBO0_H2L_BIT, |
| /** |
| * Key 0 input signal high-to-low. |
| */ |
| kDifSysrstCtrlComboIntrStatusCombo1H2L = |
| 1U << SYSRST_CTRL_COMBO_INTR_STATUS_COMBO1_H2L_BIT, |
| /** |
| * Key 1 input signal high-to-low. |
| */ |
| kDifSysrstCtrlComboIntrStatusCombo2H2L = |
| 1U << SYSRST_CTRL_COMBO_INTR_STATUS_COMBO2_H2L_BIT, |
| /** |
| * Key 2 input signal high-to-low. |
| */ |
| kDifSysrstCtrlComboIntrStatusCombo3H2L = |
| 1U << SYSRST_CTRL_COMBO_INTR_STATUS_COMBO3_H2L_BIT, |
| } dif_sysrst_ctrl_combo_intr_src_t; |
| |
| /** |
| * Runtime configuration for the System Reset Controller input signal change |
| * detection feature. |
| */ |
| typedef struct dif_sysrst_ctrl_input_change_config { |
| /** |
| * A combination of input signal changes to detect (one or more |
| * `dif_sysrst_ctrl_input_change_t`s ORed together). |
| */ |
| uint32_t input_changes; |
| /** |
| * The time to allow the input signal to stabilize before reevaluating its |
| * value to decide whether to trigger an interrupt. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [0, 200) milliseconds. |
| */ |
| uint16_t debounce_time_threshold; |
| } dif_sysrst_ctrl_input_change_config_t; |
| |
| /** |
| * Runtime configuration for the System Reset Controller key signal |
| * auto-override feature. |
| * |
| * Upon detection of a Power Button high-to-low transition, the signals from |
| * generic keys 0 through 2 may be overriden with specified values. |
| */ |
| typedef struct dif_sysrst_ctrl_auto_override_config { |
| /** |
| * The time to allow the Power Button signal to stabilize before reevaluating |
| * its value to decide whether it was pressed. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [0, 200) milliseconds. |
| */ |
| uint16_t debounce_time_threshold; |
| /** |
| * Whether to override the key 0 signal. |
| */ |
| dif_toggle_t override_key_0; |
| /** |
| * The value to override onto the key 0 signal. |
| */ |
| bool key_0_override_value; |
| /** |
| * Whether to override the key 1 signal. |
| */ |
| dif_toggle_t override_key_1; |
| /** |
| * The value to override onto the key 1 signal. |
| */ |
| bool key_1_override_value; |
| /** |
| * Whether to override the key 2 signal. |
| */ |
| dif_toggle_t override_key_2; |
| /** |
| * The value to override onto the key 2 signal. |
| */ |
| bool key_2_override_value; |
| } dif_sysrst_ctrl_auto_override_config_t; |
| |
| /** |
| * System Reset Controller pins that can be inverted, read, or overridden. |
| */ |
| typedef enum dif_sysrst_ctrl_pin { |
| /** |
| * Key 0 input. |
| */ |
| kDifSysrstCtrlPinKey0In = 1U << 0, |
| /** |
| * Key 0 output. |
| */ |
| kDifSysrstCtrlPinKey0Out = 1U << 1, |
| /** |
| * Key 1 input. |
| */ |
| kDifSysrstCtrlPinKey1In = 1U << 2, |
| /** |
| * Key 1 output. |
| */ |
| kDifSysrstCtrlPinKey1Out = 1U << 3, |
| /** |
| * Key 2 input. |
| */ |
| kDifSysrstCtrlPinKey2In = 1U << 4, |
| /** |
| * Key 2 output. |
| */ |
| kDifSysrstCtrlPinKey2Out = 1U << 5, |
| /** |
| * Power button input. |
| */ |
| kDifSysrstCtrlPinPowerButtonIn = 1U << 6, |
| /** |
| * Power button output. |
| */ |
| kDifSysrstCtrlPinPowerButtonOut = 1U << 7, |
| /** |
| * AC power preset input. |
| */ |
| kDifSysrstCtrlPinAcPowerPresentIn = 1U << 8, |
| /** |
| * Battery disable output. |
| */ |
| kDifSysrstCtrlPinBatteryDisableOut = 1U << 9, |
| /** |
| * Lid open input. |
| */ |
| kDifSysrstCtrlPinLidOpenIn = 1U << 10, |
| /** |
| * Z3 Wakeup output. |
| */ |
| kDifSysrstCtrlPinZ3WakeupOut = 1U << 11, |
| /** |
| * Embedded controller reset inout. |
| */ |
| kDifSysrstCtrlPinEcResetInOut = 1U << 12, |
| /** |
| * Flash write protect inout. |
| */ |
| kDifSysrstCtrlPinFlashWriteProtectInOut = 1U << 13, |
| /** |
| * All non open drain pins. |
| */ |
| kDifSysrstCtrlPinAllNonOpenDrain = (1U << 12) - 1, |
| } dif_sysrst_ctrl_pin_t; |
| |
| /** |
| * Runtime configuration for the System Reset Controller output pin override |
| * feature. |
| */ |
| typedef struct dif_sysrst_ctrl_pin_config_t { |
| /** |
| * The enablement of the output pin's override feature. |
| */ |
| dif_toggle_t enabled; |
| /** |
| * Whether to allow overriding the output pin with a value of 0. |
| */ |
| bool allow_zero; |
| /** |
| * Whether to allow overriding the output pin with a value of 1. |
| */ |
| bool allow_one; |
| /** |
| * The override value to write. |
| * |
| * Note: writing a non-allowable value will cause |
| * `dif_sysrst_ctrl_output_pin_override_configure()` to return `kDifBadArg`. |
| */ |
| bool override_value; |
| } dif_sysrst_ctrl_pin_config_t; |
| |
| /** |
| * Runtime configuration for the System Reset Controller ultra-low-power (ULP) |
| * wakeup feature. |
| * |
| * When enabled, detection of any of the following conditions: |
| * |
| * 1. HIGH level on the AC Power present signal, or |
| * 2. HIGH --> LOW transition on the Power Button signal, or |
| * 3. LOW --> HIGH transition on the Lid Open signal, |
| * |
| * will cause the System Reset Controller to assert the Z3 Wakeup output signal |
| * and trigger an interrupt, which will also issue a wakeup request to the power |
| * manager. |
| */ |
| typedef struct dif_sysrst_ctrl_ulp_wakeup_config_t { |
| /** |
| * The enablement of the ULP wakeup feature. |
| */ |
| dif_toggle_t enabled; |
| /** |
| * The time to allow the AC Power present signal to stabilize before |
| * reevaluating its value to decide whether it was activated. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [10, 200) milliseconds. |
| */ |
| uint16_t ac_power_debounce_time_threshold; |
| /** |
| * The time to allow the Lid Open signal to stabilize before reevaluating its |
| * value to decide whether it was activated. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [10, 200) milliseconds. |
| */ |
| uint16_t lid_open_debounce_time_threshold; |
| /** |
| * The time to allow the Power Button signal to stabilize before reevaluating |
| * its value to decide whether it was pressed. |
| * |
| * Units: increments of 5us; [0, 2^16) represents [10, 200) milliseconds. |
| */ |
| uint16_t power_button_debounce_time_threshold; |
| } dif_sysrst_ctrl_ulp_wakeup_config_t; |
| |
| /** |
| * Configures a System Reset Controller's key combination detection feature. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param key_combo Key combination to configure. |
| * @param config Runtime configuration parameters. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_key_combo_detect_configure( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_key_combo_t key_combo, |
| dif_sysrst_ctrl_key_combo_config_t config); |
| |
| /** |
| * Configures a System Reset Controller's input signal change detection feature. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param config Runtime configuration parameters. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_input_change_detect_configure( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, |
| dif_sysrst_ctrl_input_change_config_t config); |
| |
| /** |
| * Configures a System Reset Controller's output pin override feature. |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to configure the override feature for input pins will |
| * return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param output_pin Output pin to configure. |
| * @param config Output pin override configuration parameters. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_override_configure( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t output_pin, |
| dif_sysrst_ctrl_pin_config_t config); |
| |
| /** |
| * Configures a System Reset Controller's key signal auto-override feature. |
| * |
| * Upon detection of a Power Button high-to-low transition, the signals from |
| * generic keys 0 through 2 may be overriden with specified values. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param config Runtime configuration parameters. |
| * @param enabled Whether to enable the feature or not. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_auto_override_configure( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, |
| dif_sysrst_ctrl_auto_override_config_t config, dif_toggle_t enabled); |
| |
| /** |
| * Configures a System Reset Controller's ultra-low-power (ULP) wakeup feature. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param config Runtime configuration parameters. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_ulp_wakeup_configure( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, |
| dif_sysrst_ctrl_ulp_wakeup_config_t config); |
| |
| /** |
| * Sets the enablement state of a System Reset Controller's ultra-low-power |
| * (ULP) wakeup feature. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param enabled The enablement state to configure the ULP wakeup feature in. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_ulp_wakeup_set_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_toggle_t enabled); |
| |
| /** |
| * Gets the enablement state of a System Reset Controller's ultra-low-power |
| * (ULP) wakeup feature. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param[out] is_enabled The enablement state of the ULP wakeup feature. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_ulp_wakeup_get_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_toggle_t *is_enabled); |
| |
| /** |
| * Sets the inversion state a System Reset Controller's input and output pins. |
| * |
| * Note, only input and output (NOT inout) pins may be inverted. Attempting |
| * to set the inversion state of inout pins will return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pins The input and output pins to set the inverted state of (i.e., one |
| * or more `dif_sysrst_ctrl_pin_t`s ORed together). |
| * @param inverted The inverted state to configure for the pins. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_pins_set_inverted( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t pins, bool inverted); |
| |
| /** |
| * Gets the inversion state a System Reset Controller's input and output pins. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param[out] inverted_pins The input and output pins that are inverted (i.e., |
| * one or more `dif_sysrst_ctrl_pin_t`s ORed |
| * together). |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_pins_get_inverted( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t *inverted_pins); |
| |
| /** |
| * Sets allowable override values for a System Reset Controller's output pin. |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to set the allowable override values for input pins will |
| * return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The output pin whose allowable override values should be set. |
| * @param allow_zero Whether to allow overriding the pin's value to 0. |
| * @param allow_one Whether to allow overriding the pin's value to 1. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_override_set_allowed( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| bool allow_zero, bool allow_one); |
| |
| /** |
| * Gets allowable override values for a System Reset Controller's output pin. |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to get the allowable override values for input pins will |
| * return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The allowable override values to get for an output pin. |
| * @param[out] allow_zero Whether overriding the pin's value to 0 is allowed. |
| * @param[out] allow_one Whether overriding the pin's value to 1 is allowed. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_override_get_allowed( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| bool *allow_zero, bool *allow_one); |
| |
| /** |
| * Sets the enablement of a System Reset Controller's output pin override |
| * feature. |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to set the enablement of the override feature for input |
| * pins will return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The output pin whose override feature should be set. |
| * @param enabled The enablement state to configure the override feature in. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_override_set_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| dif_toggle_t enabled); |
| |
| /** |
| * Gets the enablement of a System Reset Controller's output pin override |
| * feature. |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to get the enablement of the override feature for input |
| * pins will return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The output pin whose override feature should be set. |
| * @param[out] is_enabled The enablement state the override feature is |
| * configured in. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_override_get_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| dif_toggle_t *is_enabled); |
| |
| /** |
| * Sets the override value of a System Reset Controller's output pin (like |
| * writing to a GPIO pin). |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to set the override value of an input pin will return |
| * `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The output pin to override. |
| * @param value The override value to set on the pin. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_set_override( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| bool value); |
| |
| /** |
| * Gets the override value of a System Reset Controller's output pin (like |
| * writing to a GPIO pin). |
| * |
| * Note, only output (or inout) pins may be overriden, i.e., set to a specific |
| * value. Attempting to get the override value of an input pin will return |
| * `kDifBadArg`. |
| * |
| * Additionally, this will return the configured override value of an output pin |
| * regardless if the override function is enabled or the override value is |
| * allowed. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The output pin to override. |
| * @param[out] value The override value set on the pin. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_output_pin_get_override( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| bool *value); |
| |
| /** |
| * Reads a System Reset Controller's input pin (like a GPIO pin). |
| * |
| * Note, only input (or inout) pins may be read. Attempting to read the value of |
| * an output pin will return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param pin The pin to read. |
| * @param[out] value The value set on the pin. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_input_pin_read( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_pin_t pin, |
| bool *value); |
| |
| /** |
| * Sets the enablement of a System Reset Controller's key signal auto-override |
| * feature. |
| * |
| * Note, this feature is only available for keys 0, 1, and 2. Attempting to |
| * enable the auto-override feature on non-supported keys will return |
| * `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param key The key to enable the override feature for. |
| * @param enabled Whether to enable the feature or not. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_auto_override_set_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_key_t key, |
| dif_toggle_t enabled); |
| |
| /** |
| * Gets the enablement of a System Reset Controller's key signal auto-override |
| * feature. |
| * |
| * Note, this feature is only available for keys 0, 1, and 2. Attempting to |
| * check whether the auto-override feature is enabled non-supported keys will |
| * return `kDifBadArg`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param key The key the override feature is enabled for. |
| * @param[out] is_enabled Whether the feature is enabled or not. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_auto_override_get_enabled( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, dif_sysrst_ctrl_key_t key, |
| dif_toggle_t *is_enabled); |
| |
| /** |
| * Gets the cause(s) of a key combination detection IRQ. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @param[out] causes The causes of the IRQ (one or more |
| * `dif_sysrst_ctrl_key_combo_t`s ORed together). |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_key_combo_irq_get_causes( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t *causes); |
| |
| /** |
| * Clears the cause(s) of a key combination detection IRQ. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @param causes The causes of the IRQ (one or more |
| * `dif_sysrst_ctrl_key_combo_t`s ORed together). |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_key_combo_irq_clear_causes( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t causes); |
| |
| /** |
| * Gets the cause(s) of an input signal change detection IRQ. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @param[out] causes The causes of the IRQ (one or more |
| * `dif_sysrst_ctrl_input_change_t`s ORed together). |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_input_change_irq_get_causes( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t *causes); |
| |
| /** |
| * Clears the cause(s) of an input signal change detection IRQ. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @param causes The causes of the IRQ (one or more |
| * `dif_sysrst_ctrl_input_change_t`s ORed together). |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_input_change_irq_clear_causes( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, uint32_t causes); |
| |
| /** |
| * Gets the ultra-low-power wakeup status. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @param[out] wakeup_detected The ULP wakeup detection state. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_ulp_wakeup_get_status( |
| const dif_sysrst_ctrl_t *sysrst_ctrl, bool *wakeup_detected); |
| |
| /** |
| * Clears the ultra-low-power wakeup status. |
| * |
| * @param sysrst_ctrl An sysrst_ctrl handle. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_ulp_wakeup_clear_status( |
| const dif_sysrst_ctrl_t *sysrst_ctrl); |
| |
| /** |
| * Locks System Reset Controller configurations. |
| * |
| * This function is reentrant: calling it while locked will have no effect and |
| * return `kDifOk`. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_lock(const dif_sysrst_ctrl_t *sysrst_ctrl); |
| |
| /** |
| * Checks whether System Reset Controller configurations are locked. |
| * |
| * @param sysrst_ctrl A System Reset Controller handle. |
| * @param[out] is_locked Out-param for the locked state. |
| * @return The result of the operation. |
| */ |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_sysrst_ctrl_is_locked(const dif_sysrst_ctrl_t *sysrst_ctrl, |
| bool *is_locked); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif // __cplusplus |
| |
| #endif // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_SYSRST_CTRL_H_ |