# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
# Makefile option groups that can be enabled by test Makefile / command line.
# These are generic set of option groups that apply to all testbenches.
# These are meant to be simulator agnostic
# Please add tool specific options with appropriate ifeq's

TEST_PREFIX     ?= ${DUT_TOP}

ifeq (${TEST_NAME},${TEST_PREFIX}_csr_hw_reset)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +csr_hw_reset
  RUN_OPTS      += +en_scb=0
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_csr_rw)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +csr_rw
  RUN_OPTS      += +en_scb=0
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_csr_bit_bash)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +csr_bit_bash
  RUN_OPTS      += +en_scb=0
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_csr_aliasing)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +csr_aliasing
  RUN_OPTS      += +en_scb=0
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_same_csr_outstanding)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +run_same_csr_outstanding
  RUN_OPTS      += +en_scb=0
endif

# make sure DUT has memory and support this seq before run the test
ifeq (${TEST_NAME},${TEST_PREFIX}_csr_mem_walk)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +csr_mem_walk
  RUN_OPTS      += +en_scb=0
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_tl_errors)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +run_tl_errors
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_intr_test)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +run_intr_test
endif

ifeq (${TEST_NAME},${TEST_PREFIX}_stress_all_with_rand_reset)
  UVM_TEST_SEQ   = ${TEST_PREFIX}_common_vseq
  RUN_OPTS      += +run_stress_all_with_rand_reset
  // 10ms
  RUN_OPTS      += +test_timeout_ns=10000000000
  RUN_OPTS      += +stress_seq=${TEST_PREFIX}_stress_all_vseq
endif


