31 ptrdiff_t pre_cond_combo_select_ctl_reg_offset;
32 ptrdiff_t pre_cond_combo_detect_ctl_reg_offset;
33 ptrdiff_t combo_select_ctl_reg_offset;
34 ptrdiff_t combo_detect_ctl_reg_offset;
35 ptrdiff_t combo_action_ctl_reg_offset;
39 pre_cond_combo_select_ctl_reg_offset =
40 SYSRST_CTRL_COM_PRE_SEL_CTL_0_REG_OFFSET;
41 pre_cond_combo_detect_ctl_reg_offset =
42 SYSRST_CTRL_COM_PRE_DET_CTL_0_REG_OFFSET;
43 combo_select_ctl_reg_offset = SYSRST_CTRL_COM_SEL_CTL_0_REG_OFFSET;
44 combo_detect_ctl_reg_offset = SYSRST_CTRL_COM_DET_CTL_0_REG_OFFSET;
45 combo_action_ctl_reg_offset = SYSRST_CTRL_COM_OUT_CTL_0_REG_OFFSET;
48 pre_cond_combo_select_ctl_reg_offset =
49 SYSRST_CTRL_COM_PRE_SEL_CTL_1_REG_OFFSET;
50 pre_cond_combo_detect_ctl_reg_offset =
51 SYSRST_CTRL_COM_PRE_DET_CTL_1_REG_OFFSET;
52 combo_select_ctl_reg_offset = SYSRST_CTRL_COM_SEL_CTL_1_REG_OFFSET;
53 combo_detect_ctl_reg_offset = SYSRST_CTRL_COM_DET_CTL_1_REG_OFFSET;
54 combo_action_ctl_reg_offset = SYSRST_CTRL_COM_OUT_CTL_1_REG_OFFSET;
57 pre_cond_combo_select_ctl_reg_offset =
58 SYSRST_CTRL_COM_PRE_SEL_CTL_2_REG_OFFSET;
59 pre_cond_combo_detect_ctl_reg_offset =
60 SYSRST_CTRL_COM_PRE_DET_CTL_2_REG_OFFSET;
61 combo_select_ctl_reg_offset = SYSRST_CTRL_COM_SEL_CTL_2_REG_OFFSET;
62 combo_detect_ctl_reg_offset = SYSRST_CTRL_COM_DET_CTL_2_REG_OFFSET;
63 combo_action_ctl_reg_offset = SYSRST_CTRL_COM_OUT_CTL_2_REG_OFFSET;
66 pre_cond_combo_select_ctl_reg_offset =
67 SYSRST_CTRL_COM_PRE_SEL_CTL_3_REG_OFFSET;
68 pre_cond_combo_detect_ctl_reg_offset =
69 SYSRST_CTRL_COM_PRE_DET_CTL_3_REG_OFFSET;
70 combo_select_ctl_reg_offset = SYSRST_CTRL_COM_SEL_CTL_3_REG_OFFSET;
71 combo_detect_ctl_reg_offset = SYSRST_CTRL_COM_DET_CTL_3_REG_OFFSET;
72 combo_action_ctl_reg_offset = SYSRST_CTRL_COM_OUT_CTL_3_REG_OFFSET;
78 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
79 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
83 mmio_region_write32(sysrst_ctrl->
base_addr,
84 pre_cond_combo_select_ctl_reg_offset,
86 mmio_region_write32(sysrst_ctrl->
base_addr,
87 pre_cond_combo_detect_ctl_reg_offset,
89 mmio_region_write32(sysrst_ctrl->
base_addr, combo_select_ctl_reg_offset,
91 mmio_region_write32(sysrst_ctrl->
base_addr, combo_detect_ctl_reg_offset,
93 mmio_region_write32(sysrst_ctrl->
base_addr, combo_action_ctl_reg_offset,
97 mmio_region_write32(sysrst_ctrl->
base_addr,
98 SYSRST_CTRL_EC_RST_CTL_REG_OFFSET,
130 if (sysrst_ctrl == NULL ||
133 !dif_is_valid_toggle(config.
enabled)) {
137 uint32_t pin_out_ctl_bit_index;
138 uint32_t pin_out_value_bit_index;
139 uint32_t pin_out_allow_0_bit_index;
140 uint32_t pin_out_allow_1_bit_index;
142 switch (output_pin) {
144 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_KEY0_OUT_BIT;
145 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_KEY0_OUT_BIT;
146 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY0_OUT_0_BIT;
147 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY0_OUT_1_BIT;
150 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_KEY1_OUT_BIT;
151 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_KEY1_OUT_BIT;
152 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY1_OUT_0_BIT;
153 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY1_OUT_1_BIT;
156 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_KEY2_OUT_BIT;
157 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_KEY2_OUT_BIT;
158 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY2_OUT_0_BIT;
159 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_KEY2_OUT_1_BIT;
162 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_PWRB_OUT_BIT;
163 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_PWRB_OUT_BIT;
164 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_PWRB_OUT_0_BIT;
165 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_PWRB_OUT_1_BIT;
168 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_BAT_DISABLE_BIT;
169 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_BAT_DISABLE_BIT;
170 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_BAT_DISABLE_0_BIT;
171 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_BAT_DISABLE_1_BIT;
174 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_Z3_WAKEUP_BIT;
175 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_Z3_WAKEUP_BIT;
176 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_Z3_WAKEUP_0_BIT;
177 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_Z3_WAKEUP_1_BIT;
180 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_EC_RST_L_BIT;
181 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_EC_RST_L_BIT;
182 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_EC_RST_L_0_BIT;
183 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_EC_RST_L_1_BIT;
186 pin_out_ctl_bit_index = SYSRST_CTRL_PIN_OUT_CTL_FLASH_WP_L_BIT;
187 pin_out_value_bit_index = SYSRST_CTRL_PIN_OUT_VALUE_FLASH_WP_L_BIT;
188 pin_out_allow_0_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_FLASH_WP_L_0_BIT;
189 pin_out_allow_1_bit_index = SYSRST_CTRL_PIN_ALLOWED_CTL_FLASH_WP_L_1_BIT;
195 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
196 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
201 uint32_t pin_out_ctl_reg = mmio_region_read32(
202 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_OUT_CTL_REG_OFFSET);
203 pin_out_ctl_reg = bitfield_bit32_write(pin_out_ctl_reg, pin_out_ctl_bit_index,
204 dif_toggle_to_bool(config.
enabled));
205 mmio_region_write32(sysrst_ctrl->
base_addr,
206 SYSRST_CTRL_PIN_OUT_CTL_REG_OFFSET, pin_out_ctl_reg);
209 uint32_t pin_out_value_reg = mmio_region_read32(
210 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_OUT_VALUE_REG_OFFSET);
211 pin_out_value_reg = bitfield_bit32_write(
212 pin_out_value_reg, pin_out_value_bit_index, config.
override_value);
213 mmio_region_write32(sysrst_ctrl->
base_addr,
214 SYSRST_CTRL_PIN_OUT_VALUE_REG_OFFSET, pin_out_value_reg);
217 uint32_t pin_out_allowed_values_reg = mmio_region_read32(
218 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_ALLOWED_CTL_REG_OFFSET);
219 pin_out_allowed_values_reg = bitfield_bit32_write(
220 pin_out_allowed_values_reg, pin_out_allow_0_bit_index, config.
allow_zero);
221 pin_out_allowed_values_reg = bitfield_bit32_write(
222 pin_out_allowed_values_reg, pin_out_allow_1_bit_index, config.
allow_one);
223 mmio_region_write32(sysrst_ctrl->
base_addr,
224 SYSRST_CTRL_PIN_ALLOWED_CTL_REG_OFFSET,
225 pin_out_allowed_values_reg);
233 if (sysrst_ctrl == NULL || !dif_is_valid_toggle(config.
enabled)) {
237 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
238 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
242 mmio_region_write32(sysrst_ctrl->
base_addr, SYSRST_CTRL_ULP_CTL_REG_OFFSET,
243 dif_toggle_to_bool(config.
enabled));
244 mmio_region_write32(sysrst_ctrl->
base_addr,
245 SYSRST_CTRL_ULP_AC_DEBOUNCE_CTL_REG_OFFSET,
247 mmio_region_write32(sysrst_ctrl->
base_addr,
248 SYSRST_CTRL_ULP_LID_DEBOUNCE_CTL_REG_OFFSET,
250 mmio_region_write32(sysrst_ctrl->
base_addr,
251 SYSRST_CTRL_ULP_PWRB_DEBOUNCE_CTL_REG_OFFSET,
363 bool allow_zero,
bool allow_one) {
364 if (sysrst_ctrl == NULL) {
368 uint32_t allow_0_bit_index;
369 uint32_t allow_1_bit_index;
370 if (!get_output_pin_allowed_bit_indices(pin, &allow_0_bit_index,
371 &allow_1_bit_index)) {
375 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
376 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
380 uint32_t allowed_values_reg = mmio_region_read32(
381 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_ALLOWED_CTL_REG_OFFSET);
383 bitfield_bit32_write(allowed_values_reg, allow_0_bit_index, allow_zero);
385 bitfield_bit32_write(allowed_values_reg, allow_1_bit_index, allow_one);
386 mmio_region_write32(sysrst_ctrl->
base_addr,
387 SYSRST_CTRL_PIN_ALLOWED_CTL_REG_OFFSET,
395 bool *allow_zero,
bool *allow_one) {
396 if (sysrst_ctrl == NULL || allow_zero == NULL || allow_one == NULL) {
400 uint32_t allow_0_bit_index;
401 uint32_t allow_1_bit_index;
402 if (!get_output_pin_allowed_bit_indices(pin, &allow_0_bit_index,
403 &allow_1_bit_index)) {
407 uint32_t allowed_values_reg = mmio_region_read32(
408 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_ALLOWED_CTL_REG_OFFSET);
409 *allow_zero = bitfield_bit32_read(allowed_values_reg, allow_0_bit_index);
410 *allow_one = bitfield_bit32_read(allowed_values_reg, allow_1_bit_index);
451 if (sysrst_ctrl == NULL || !dif_is_valid_toggle(enabled)) {
455 uint32_t pin_out_ctl_bit_index;
456 if (!get_output_pin_ctl_bit_index(pin, &pin_out_ctl_bit_index)) {
460 uint32_t pin_out_ctl_reg = mmio_region_read32(
461 sysrst_ctrl->
base_addr, SYSRST_CTRL_PIN_OUT_CTL_REG_OFFSET);
462 pin_out_ctl_reg = bitfield_bit32_write(pin_out_ctl_reg, pin_out_ctl_bit_index,
463 dif_toggle_to_bool(enabled));
464 mmio_region_write32(sysrst_ctrl->
base_addr,
465 SYSRST_CTRL_PIN_OUT_CTL_REG_OFFSET, pin_out_ctl_reg);
618 if (sysrst_ctrl == NULL || !dif_is_valid_toggle(config.
override_key_0) ||
621 !dif_is_valid_toggle(enabled)) {
625 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
626 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
631 uint32_t auto_block_ctl_reg = bitfield_bit32_write(
632 0, SYSRST_CTRL_AUTO_BLOCK_DEBOUNCE_CTL_AUTO_BLOCK_ENABLE_BIT,
633 dif_toggle_to_bool(enabled));
634 auto_block_ctl_reg = bitfield_field32_write(
636 SYSRST_CTRL_AUTO_BLOCK_DEBOUNCE_CTL_DEBOUNCE_TIMER_FIELD,
638 mmio_region_write32(sysrst_ctrl->
base_addr,
639 SYSRST_CTRL_AUTO_BLOCK_DEBOUNCE_CTL_REG_OFFSET,
644 bitfield_bit32_write(0, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY0_OUT_SEL_BIT,
646 auto_block_ctl_reg = bitfield_bit32_write(
647 auto_block_ctl_reg, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY0_OUT_VALUE_BIT,
649 auto_block_ctl_reg = bitfield_bit32_write(
650 auto_block_ctl_reg, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY1_OUT_SEL_BIT,
652 auto_block_ctl_reg = bitfield_bit32_write(
653 auto_block_ctl_reg, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY1_OUT_VALUE_BIT,
655 auto_block_ctl_reg = bitfield_bit32_write(
656 auto_block_ctl_reg, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY2_OUT_SEL_BIT,
658 auto_block_ctl_reg = bitfield_bit32_write(
659 auto_block_ctl_reg, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_KEY2_OUT_VALUE_BIT,
661 mmio_region_write32(sysrst_ctrl->
base_addr,
662 SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_REG_OFFSET,
689 if (sysrst_ctrl == NULL || !dif_is_valid_toggle(enabled)) {
693 uint32_t en_bit_index;
694 if (!get_key_auto_override_en_bit_index(key, &en_bit_index)) {
698 if (!mmio_region_read32(sysrst_ctrl->
base_addr,
699 SYSRST_CTRL_REGWEN_REG_OFFSET)) {
703 uint32_t auto_block_ctl_reg = mmio_region_read32(
704 sysrst_ctrl->
base_addr, SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_REG_OFFSET);
705 auto_block_ctl_reg = bitfield_bit32_write(auto_block_ctl_reg, en_bit_index,
706 dif_toggle_to_bool(enabled));
707 mmio_region_write32(sysrst_ctrl->
base_addr,
708 SYSRST_CTRL_AUTO_BLOCK_OUT_CTL_REG_OFFSET,