fix(chip): Skip direct connected DIOs

Some of the SPI PADs cannot be controlled by `cfg.chip_vif.ios_if`. SW
skips those signals while randomly generating the victim.

SpiHostCLK and SpiHostCsL are output only PADs.

Signed-off-by: Eunchan Kim <eunchan@opentitan.org>
diff --git a/sw/device/tests/sim_dv/sleep_pin_wake_test.c b/sw/device/tests/sim_dv/sleep_pin_wake_test.c
index d66969e..1a2814a 100644
--- a/sw/device/tests/sim_dv/sleep_pin_wake_test.c
+++ b/sw/device/tests/sim_dv/sleep_pin_wake_test.c
@@ -26,6 +26,11 @@
 
 static const uint32_t kNumDio = 16;  // top_earlgrey has 16 DIOs
 
+// kDirectDio is a list of Dio index that TB cannot control the PAD value.
+// The list should be incremental order (see the code below)
+#define NUM_DIRECT_DIO 5
+static const uint32_t kDirectDio [NUM_DIRECT_DIO] = { 6, 12, 13, 14, 15};
+
 bool test_main(void) {
   dif_pwrmgr_t pwrmgr;
   dif_pinmux_t pinmux;
@@ -51,10 +56,18 @@
     uint32_t mio0_dio1 = rand_testutils_gen32_range(0, 1);
     uint32_t pad_sel = 0;
 
+    // SpiDev CLK(idx 12), CS#(idx 13), D0(idx 6) and SpiHost CLK (14), CS#
+    // (15) are directly connected to the SPI IF. Cannot control them. Roll 3
+    // less and compensated later.
     if (mio0_dio1) {
       // DIO
-      pad_sel = rand_testutils_gen32_range(0, kNumDio - 1);
+      pad_sel = rand_testutils_gen32_range(0, kNumDio - 1 - NUM_DIRECT_DIO);
 
+      for (int i = 0; i < NUM_DIRECT_DIO; i++) {
+        if (pad_sel >= kDirectDio[i]) {
+          pad_sel++;
+        }
+      }
     } else {
       // MIO: 0, 1 are tie-0, tie-1
       pad_sel = rand_testutils_gen32_range(2, kTopEarlgreyPinmuxInselLast);