fix(chip): Release func intf prior to drive
Releas preholding intf befor driving PADs directly to avoid Unknown
signal.
A few dedicated IOs have pull up setting. To detect posedge, they need
to be 0 prior to enter sleep mode.
Signed-off-by: Eunchan Kim <eunchan@opentitan.org>
diff --git a/hw/top_earlgrey/dv/env/seq_lib/chip_sw_sleep_pin_wake_vseq.sv b/hw/top_earlgrey/dv/env/seq_lib/chip_sw_sleep_pin_wake_vseq.sv
index 3712a6a..aead42c 100644
--- a/hw/top_earlgrey/dv/env/seq_lib/chip_sw_sleep_pin_wake_vseq.sv
+++ b/hw/top_earlgrey/dv/env/seq_lib/chip_sw_sleep_pin_wake_vseq.sv
@@ -127,6 +127,9 @@
super.cpu_init();
+ // Turn off Mux
+ cfg.chip_vif.enable_flash_ctrl_jtag = 1'b 0;
+
byte_arr = '{detector_idx};
sw_symbol_backdoor_overwrite("kWakeupSel", byte_arr);
@@ -156,6 +159,78 @@
`uvm_info(`gfn, $sformatf("VSEQ: Pad Selection %d / %d", mio0_dio1, pad_sel), UVM_LOW)
+ // Check if selected PAD is pull up
+ // UsbP, IoR8, IoR9 are pull up
+ if (mio0_dio1) begin
+ case (DioPads[pad_sel])
+ UsbP: begin
+ cfg.chip_vif.ios_if.drive_pin(UsbP, 1'b 0);
+ end
+
+ IoR8, IoR9: begin
+ cfg.chip_vif.ec_rst_l_if.drive_en('0);
+ cfg.chip_vif.flash_wp_l_if.drive_en('0);
+ cfg.chip_vif.ios_if.drive_pin(DioPads[pad_sel], 1'b 0);
+ end
+
+ default:;
+ endcase
+ end else begin
+
+ // GPIO ports are many. Blindly turning them off.
+ cfg.chip_vif.gpio_pins_if.drive_en('0);
+
+ case (MioPads[pad_sel-2]) inside
+ [IoC0:IoC2]: begin
+ cfg.chip_vif.sw_straps_if.drive_en(3'b 000);
+ end
+
+ [IoC3:IoC4]: begin
+ // Disable Uart0
+ cfg.chip_vif.enable_uart(0, 1'b0);
+
+ // DFT
+ cfg.chip_vif.dft_straps_if.drive_en('0);
+ end
+
+ [IoB4:IoB5]: begin
+ // Disable Uart1
+ cfg.chip_vif.enable_uart(1, 1'b0);
+ end
+
+ [IoA4:IoA5]: begin
+ // Disable Uart2
+ cfg.chip_vif.enable_uart(2, 1'b0);
+ end
+
+ [IoA0:IoA1]: begin
+ // Disable Uart3
+ cfg.chip_vif.enable_uart(3, 1'b0);
+ end
+
+ IoR4: begin
+ // jtag rst_n
+ // It is pull up PADs. Need to off it first
+ cfg.chip_vif.ios_if.pins_pu[IoR4] = 1'b 0;
+ end
+
+ IoC6: begin
+ // Ext Clk needs to be off
+ cfg.chip_vif.ext_clk_if.set_active(0, 0);
+ end
+
+ IoC8, IoC5: begin
+ cfg.chip_vif.tap_straps_if.drive_en('0);
+ end
+
+ IoB3, IoB6, IoB8, IoB9, IoC7, IoC9, IoR5, IoR6: begin
+ cfg.chip_vif.sysrst_ctrl_if.drive_en('0);
+ end
+
+ default:;
+ endcase
+ end
+
// Wait until chip enters low power (sleep or deep sleep).
`DV_WAIT(
cfg.sw_logger_vif.printed_log == "Entering low power mode."