// 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
  testpoints: [
    {
      name: xbar_smoke
      desc: '''Sequentially test each host to access any device'''
      stage: V1
      tests: ["xbar_{name}_smoke"]
    }
    {
      name: xbar_base_random_sequence
      desc: '''Enable all hosts to randomly send transactions to any device'''
      stage: 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'''
      stage: V2
      tests: ["xbar_{name}_smoke_zero_delays", "xbar_{name}_smoke_large_delays", "xbar_{name}_smoke_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'''
      stage: 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'''
      stage: 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'''
      stage: 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'''
      stage: V2
      tests: ["xbar_{name}_same_source"]
    }
    {
      name: xbar_stress_all
      desc: '''
            - Combine all sequences and run in parallel
            - Add random reset between each iteration'''
      stage: 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'''
      stage: V2
      tests: ["xbar_{name}_stress_all_with_rand_reset", "xbar_{name}_stress_all_with_reset_error"]
    }
  ]
}
