// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  // Use the name 'main' for this generic testplan. The actual testplan that imports
  // this file can override the name if needed.
  name: main
  entries: [
    {
      name: xbar_sanity
      desc: '''Sequentially test each host to access any device'''
      milestone: V1
      tests: ["xbar_{name}_sanity"]
    }
    {
      name: xbar_base_random_sequence
      desc: '''Enable all hosts to randomly send transactions to any device'''
      milestone: V2
      tests: ["xbar_{name}_random"]
    }
    {
      name: xbar_random_delay
      desc: '''Control delays through plusargs to create tests for below types of delay
            - Zero delay for sending a/d_valid and a/d_ready
            - Large delay from 0 ~ 1000 cycles
            - Small delay (0-10 cycles) for a_channel, large delay (0-1000 cycles) for d_channel'''
      milestone: V2
      tests: ["xbar_{name}_sanity_zero_delays", "xbar_{name}_sanity_large_delays", "xbar_{name}_sanity_slow_rsp",
              "xbar_{name}_random_zero_delays", "xbar_{name}_random_large_delays", "xbar_{name}_random_slow_rsp"]
    }
    {
      name: xbar_unmapped_address
      desc: '''
            - Host randomly drives transactions with mapped and unmapped address
            - Ensure DUT returns d_error=1 if address is unmapped and transaction isn't passed down
              to any device'''
      milestone: V2
      tests: ["xbar_{name}_unmapped_addr", "xbar_{name}_error_and_unmapped_addr"]
    }
    {
      name: xbar_error_cases
      desc: '''
            - Drive any random value on size, mask, opcode in both channels
            - Ensure everything just pass through host to device or device to host'''
      milestone: V2
      tests: ["xbar_{name}_error_random", "xbar_{name}_error_and_unmapped_addr"]
    }
    {
      name: xbar_all_access_same_device
      desc: '''
            - Randomly pick a device, make all hosts to access this device
            - If the device isn't accessible for the host, let the host randomly access the other
              devices'''
      milestone: V2
      tests: ["xbar_{name}_access_same_device", "xbar_{name}_access_same_device_slow_rsp"]
    }
    {
      name: xbar_all_hosts_use_same_source_id
      desc: '''Test all hosts use same ID at the same same'''
      milestone: V2
      tests: ["xbar_{name}_same_source"]
    }
    {
      name: xbar_stress_all
      desc: '''
            - Combine all sequences and run in parallel
            - Add random reset between each iteration'''
      milestone: V2
      tests: ["xbar_{name}_stress_all", "xbar_{name}_stress_all_with_error"]
    }
    {
      name: xbar_stress_with_reset
      desc: '''
            - Inject reset while stress_all is running, after reset is completed, kill the
              stress seq and then start a new stress seq
            - Run a few iteration to ensure reset doesn't break the design'''
      milestone: V2
      tests: ["xbar_{name}_stress_all_with_rand_reset", "xbar_{name}_stress_all_with_reset_error"]
    }
  ]
}
