diff --git a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_base_vseq.sv b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_base_vseq.sv
index e78e877..a2c409e 100644
--- a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_base_vseq.sv
+++ b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_base_vseq.sv
@@ -21,12 +21,13 @@
   endtask
 
   // Set the inputs back to inactive
-  virtual function void reset_combo_inputs(bit[4:0] input_invert=5'h0);
-    cfg.vif.key0_in = ~input_invert[0];
-    cfg.vif.key1_in = ~input_invert[1];
-    cfg.vif.key2_in = ~input_invert[2];
-    cfg.vif.pwrb_in = ~input_invert[3];
-    cfg.vif.ac_present = ~input_invert[4];
+  virtual function void reset_combo_inputs(input bit [4:0] val = 5'h1F, bit [4:0] mask = 5'h1F);
+    // Set the inputs
+    if (mask[0]) cfg.vif.key0_in = val[0];
+    if (mask[1]) cfg.vif.key1_in = val[1];
+    if (mask[2]) cfg.vif.key2_in = val[2];
+    if (mask[3]) cfg.vif.pwrb_in = val[3];
+    if (mask[4]) cfg.vif.ac_present = val[4];
   endfunction
 
   // Get input of combo detection logic
diff --git a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_combo_detect_with_pre_cond_vseq.sv b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_combo_detect_with_pre_cond_vseq.sv
index 990079d..e6735d7 100644
--- a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_combo_detect_with_pre_cond_vseq.sv
+++ b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_combo_detect_with_pre_cond_vseq.sv
@@ -198,21 +198,24 @@
     `DV_CHECK_EQ(cfg.vif.ec_rst_l_out, 1)
   endtask
 
-  task config_register();
+  task config_combo_register(int i, uint16_t mask = 16'hFF);
     // Select the inputs for precondition
-    foreach (ral.com_pre_sel_ctl[i]) csr_wr(ral.com_pre_sel_ctl[i], trigger_combo_precondition[i]);
+    csr_wr(ral.com_pre_sel_ctl[i], mask & trigger_combo_precondition[i]);
 
     // Set the duration for precondition keys to pressed
-    foreach (ral.com_pre_det_ctl[i]) csr_wr(ral.com_pre_det_ctl[i], set_duration_precondition[i]);
-
+    csr_wr(ral.com_pre_det_ctl[i], mask & set_duration_precondition[i]);
     // Select the inputs for the combo
-    foreach (ral.com_sel_ctl[i]) csr_wr(ral.com_sel_ctl[i], trigger_combo[i]);
+    csr_wr(ral.com_sel_ctl[i], mask & trigger_combo[i]);
 
     // Set the duration for combo to pressed
-    foreach (ral.com_det_ctl[i]) csr_wr(ral.com_det_ctl[i], set_duration[i]);
+    csr_wr(ral.com_det_ctl[i], mask & set_duration[i]);
 
     // Set the trigger action
-    foreach (ral.com_out_ctl[i]) csr_wr(ral.com_out_ctl[i], set_action[i]);
+    csr_wr(ral.com_out_ctl[i], mask & set_action[i]);
+  endtask
+
+  task config_register();
+    for( int i = 0; i < 4; i++) config_combo_register(i);
 
     // Set the ec_rst_0 pulse width
     csr_wr(ral.ec_rst_ctl, set_pulse_width);
@@ -513,7 +516,7 @@
               // Wait till next iteration
               cfg.clk_aon_rst_vif.wait_clks(set_pulse_width);
               // Reset combo inputs except the ones required to enable precondition
-              reset_combo_inputs(~combo_precondition_mask);
+              reset_combo_inputs(combo_precondition_mask);
             end
             begin : bat_disable_check
               if (bat_act_triggered) begin
diff --git a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_feature_disable_vseq.sv b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_feature_disable_vseq.sv
index b202dd7..f21b053 100644
--- a/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_feature_disable_vseq.sv
+++ b/hw/ip/sysrst_ctrl/dv/env/seq_lib/sysrst_ctrl_feature_disable_vseq.sv
@@ -4,16 +4,10 @@
 
 // This sequence asserts the inputs of sysrst_ctrl such that the
 // key detection blocks transition from Debounce to Idle state
-class sysrst_ctrl_feature_disable_vseq extends sysrst_ctrl_base_vseq;
+class sysrst_ctrl_feature_disable_vseq extends sysrst_ctrl_combo_detect_with_pre_cond_vseq;
   `uvm_object_utils(sysrst_ctrl_feature_disable_vseq)
 
   `uvm_object_new
-  // Combo detect egister settings
-  rand bit [4:0] trigger_combo[4];
-  rand bit [4:0] trigger_combo_precondition[4];
-  rand uvm_reg_data_t set_action[4];
-  rand uint16_t set_duration[4], set_duration_precondition[4];
-  rand uint16_t set_key_timer;
   // ec_rst_l_o assertion time
   rand uint16_t set_pulse_width;
   // Key debounce timer
@@ -71,38 +65,9 @@
 
   constraint ulp_debounce_time_c {ulp_debounce_ctl inside {[15 : 50]};}
 
-
-  function void set_combo_inputs(input bit [4:0] val = 5'h1F, bit [4:0] mask = 5'h1F);
-    // Set the inputs
-    if (mask[0]) cfg.vif.key0_in = val[0];
-    if (mask[1]) cfg.vif.key1_in = val[1];
-    if (mask[2]) cfg.vif.key2_in = val[2];
-    if (mask[3]) cfg.vif.pwrb_in = val[3];
-    if (mask[4]) cfg.vif.ac_present = val[4];
-  endfunction
-
-  task config_combo_register(int i, uint16_t mask = 16'hFF);
-    // Select the inputs for precondition
-    csr_wr(ral.com_pre_sel_ctl[i], mask & trigger_combo_precondition[i]);
-
-    // Set the duration for precondition keys to pressed
-    csr_wr(ral.com_pre_det_ctl[i], mask & set_duration_precondition[i]);
-    // Select the inputs for the combo
-    csr_wr(ral.com_sel_ctl[i], mask & trigger_combo[i]);
-
-    // Set the duration for combo to pressed
-    csr_wr(ral.com_det_ctl[i], mask & set_duration[i]);
-
-    // Set the trigger action
-    csr_wr(ral.com_out_ctl[i], mask & set_action[i]);
-
-    // It takes 2-3 clock cycles to sync the register values
-    cfg.clk_aon_rst_vif.wait_clks(3);
-  endtask
-
   task combo_debounce_to_idle();
     // Reset Combo detect inputs
-    set_combo_inputs();
+    reset_combo_inputs();
     release_ec_rst_l_o();
     // Set the ec_rst_0 pulse width
     csr_wr(ral.ec_rst_ctl, set_pulse_width);
@@ -119,73 +84,73 @@
       //            deassertion of inputs before debounce timer
       config_combo_register(i);
       // Set combo input
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer - 10);
       // Deassert input signals before debounce timer
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(15);
 
       // Scenario : Trigger precondition Debounce to Idle state via
       //            disabling precondition before debounce timer
       // Assert input signals to match predoncition selection
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer - 10);
       // Disable precondition before debounce timer
       csr_wr(ral.com_pre_sel_ctl[i], 0);
       cfg.clk_aon_rst_vif.wait_clks(10);
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(3);
 
       // Scenario : Trigger precondition Detect to Idle state via
       //            disabling precondition before detect timer
       // Assert input signals to match predoncition selection
       config_combo_register(i);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] - 10);
       // Disable precondition before detect timer
       csr_wr(ral.com_pre_sel_ctl[i], 0);
       cfg.clk_aon_rst_vif.wait_clks(10);
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(3);
 
       // Scenario : Trigger precondition Detect to Idle state via
       //            deassertion of input signals
       // Assert input signals to match predoncition selection
       config_combo_register(i);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] - 10);
       // Disable precondition before detect timer
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(15);
 
       // Scenario : Trigger combo detect Debounce to Idle state via
       //            deassertion of input signals before debounce timer
       // Set combo input to trigger precondition
       config_combo_register(i);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] + 10);
       // Set combo input to trigger combo detection
-      set_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
       // Wait for some time but dont exceed debounce time
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer - 10);
       // Deassert combo inputs before debounce timer
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(10);
 
       // Scenario : Trigger combo detect Debounce to Idle state via
       //            disabling detection before debounce timer
       // Set combo input to trigger precondition
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] + 10);
       // Set combo input to trigger combo detection
-      set_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
       // Wait for some time but dont exceed debounce time
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer - 10);
       // Disable combo detect before debounce timer
       csr_wr(ral.com_sel_ctl[i], 0);
       cfg.clk_aon_rst_vif.wait_clks(15);
       // Reset combo inputs
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(10);
 
       // Scenario : Trigger combo Detect to Idle state via
@@ -194,16 +159,16 @@
       config_combo_register(i);
       // Wait for 3 clock cycles to sync the register value
       cfg.clk_aon_rst_vif.wait_clks(3);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] + 10);
       // Set combo input to trigger combo detection
-      set_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
       // Wait for some time but dont exceed detect time
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration[i] - 10);
       // Disable combo detect before detect timer
       csr_wr(ral.com_sel_ctl[i], 0);
       cfg.clk_aon_rst_vif.wait_clks(10);
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(10);
 
       // Scenario : Trigger combo Detect to Idle state via
@@ -212,14 +177,14 @@
       config_combo_register(i);
       // Wait for 3 clock cycles to sync the register value
       cfg.clk_aon_rst_vif.wait_clks(3);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] + 10);
       // Set combo input to trigger combo detection
-      set_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
       // Wait for some time but dont exceed detect time
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration[i] - 10);
       // Deassert combo inputs before detect timer
-      set_combo_inputs();
+      reset_combo_inputs();
       cfg.clk_aon_rst_vif.wait_clks(20);
 
       check_interrupts(.interrupts(1 << IntrSysrstCtrl), .check_set(0));
@@ -234,9 +199,9 @@
       `uvm_info(`gfn, $sformatf("configuring combo channel %0d", i), UVM_LOW)
       // Scenario : Assert ec_rst_l_i just before combo action triggers ec_rst_l_o
       config_combo_register(i);
-      set_combo_inputs(~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration_precondition[i] + 10);
-      set_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
+      reset_combo_inputs(~trigger_combo[i], ~trigger_combo_precondition[i]);
       cfg.clk_aon_rst_vif.wait_clks(set_key_timer + set_duration[i] - 5);
       fork
         begin
@@ -253,7 +218,7 @@
       join
       `uvm_info(`gfn, "ec_rst_l_o asserted as expected", UVM_LOW)
       // Reset combo inputs
-      set_combo_inputs();
+      reset_combo_inputs();
       // Disable combo detect
       config_combo_register(i, 0);
     end
