// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  name: "uart"
  import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson",
                     "uart_sec_cm_testplan.hjson"]
  testpoints: [
    {
      name: smoke
      desc: '''
            - UART smoke test with few bytes transmitted and received asynchronously and
              in parallel with scoreboard checks
            - TX and RX have 2 independent threads respectively.
              -  program one Tx item in register and wait for it to complete at uart interface,
                 before send another one
              - sequencally send one Rx byte, then immediately read from register and check it'''
      stage: V1
      tests: ["uart_smoke"]
    }
    {
      name: base_random_seq
      desc: '''
            - This is the basic sequence that is extended by most of random sequence.
            - TX and RX have 2 independent threads respectively.
              - TX: keep programming csr wdata with random delay when fifo isn't full
              - RX: 2 processes. One is to send item through uart interface when fifo isn't full
                and the other is to read csr rdata when fifo isn't empty'''
      stage: V2
      tests: ["uart_tx_rx"]
    }
    {
      name: parity
      desc: '''Send / receive bytes with parity and odd parity enabled randomly.'''
      stage: V2
      tests: ["uart_smoke", "uart_tx_rx"]
    }
    {
      name: parity_error
      desc: '''
            - Enable parity and randomly set even/odd parity
            - Inject parity error randomly on data sent from rx and ensure the interrupt is
              raised'''
      stage: V2
      tests: ["uart_rx_parity_err", "uart_intr"]
    }
    {
      name: watermark
      desc: '''
            - Program random tx/rx fifo watermark level and keep sending random tx/rx data
              to fifo.
            - As the number of pending data entries in the tx/rx fifo reaches the programmed
              watermark level (fifo size >= watermark level), ensure that the watermark interrupt
              is asserted
            - Ensure interrupt stays asserted until cleared as well as fifo level dropped.
              The tx/rx watermark interrupt is sticky'''
      stage: V2
      tests: ["uart_tx_rx", "uart_intr"]
    }
    {
      name: fifo_full
      desc: '''Send over 32 bytes of data but stop when fifo is full'''
      stage: V2
      tests: ["uart_fifo_full"]
    }
    {
      name: fifo_overflow
      desc: '''
            - Keep sending over 32 bytes of data over tx/rx fifo
            - Ensure excess data bytes are dropped and check overflow interrupt
            - This uart_fifo_overflow_vseq is extent from uart_fifo_full_vseq and override the
              constraint to be able to send data over fifo size'''
      stage: V2
      tests: ["uart_fifo_overflow"]
    }
    {
      name: fifo_reset
      desc: '''
            - Fill up the tx/rx fifo. After a random number of bytes shows up on fifo, reset
              the fifo and ensure that the remaining data bytes do not show up
            - this sequence is extent from uart_fifo_overflow_vseq, so it can also reset when fifo
              is at any level, including full or overflow'''
      stage: V2
      tests: ["uart_fifo_reset"]
    }
    {
      name: rx_frame_err
      desc: '''
            - Inject frame error in parity and non-parity cases by not setting stop bit = 1
            - Ensure the interrupt gets asserted'''
      stage: V2
      tests: ["uart_intr"]
    }
    {
      name: rx_break_err
      desc: '''
            - Program random number of break detection characters
            - create a frame error scenario and send random number of 0 bytes
            - If that random number exceeds the programmed break characters
            - Ensure that the break_err interrupt is asserted'''
      stage: V2
      tests: ["uart_intr"]
    }
    {
      name: rx_timeout
      desc: '''
            - Program timeout_ctrl register to randomize the timeout. Send random number of
              data over rx
            - Wait until it's about to timeout, then check timeout interrupt doesn't fire. Wait
              for timeout and check timeout interrupt fires
            - Wait until it's about to timeout, then use either read csr rdata or send RX item
              through uart interface to reset timeout timer in order to ensure timeout never
              fires'''
      stage: V2
      tests: ["uart_intr"]
    }
    {
      name: perf
      desc: '''Run fifo_full_vseq with very small delays'''
      stage: V2
      tests: ["uart_perf"]
    }
    {
      name: sys_loopback
      desc: '''
            - Enable system looback, then drive uart TX and data will be loopbacked through RX
            - After loopback is done, uart.RDATA will be equal to the data programmed to
              uart.WDATA'''
      stage: V2
      tests: ["uart_loopback"]
    }
    {
      name: line_loopback
      desc: '''
             - Enable line loopback and drive uart_rx with random data and random delay
             - Check uart_tx has same value as uart_rx. There is not synchronizer register between
               uart_rx and uart_tx during line loopback'''
      stage: V2
      tests: ["uart_loopback"]
    }
    {
      name: rx_noise_filter
      desc: '''
            - Use 16x fast clk to sample it, data on uart_rx need to be stable for 3 clocks,
              otherwise, data change won't be taken
            - Enable noise filter and drive many glitches. Each glitch doesn't lasts less than
              3 clocks
            - Ensure the noise will be filterred out and it doesn't affect next normal
              transaction'''
      stage: V2
      tests: ["uart_noise_filter"]
    }
    {
      name: rx_start_bit_filter
      desc: '''
            - Start bit should last for at least half baud clock, otherwise, it will be dropped
            - It's always enabled. Drive start bit for less than half cycle.
            - Ensure the start bit will be dropped'''
      stage: V2
      tests: ["uart_rx_start_bit_filter"]
    }
    {
      name: tx_overide
      desc: '''Enable override control and use register programming to drive uart output
            directly.'''
      stage: V2
      tests: ["uart_tx_ovrd"]
    }
    {
      name: rx_oversample
      desc: '''
            - Use 16x baud clock to sample uart rx
            - Drive uart rx with 16 bits value, using 16x baud clock
            - Read RX oversampled value and ensure it's same as driven value'''
      stage: V2
      tests: ["uart_rx_oversample"]
    }
    {
      name: long_b2b_transfer
      desc: '''
            - Reduce delay to fill TX fifo and read RX fifo to ensure back2back transfers
            - Use long back2back transfer to ensure clock difference won't be accumulated across transactions
            - Uart monitor checks the clock offset between sender and receiver is never over 1/4 of the period'''
      stage: V2
      tests: ["uart_long_xfer_wo_dly"]
    }
    {
      name: stress_all
      desc: '''
            - Combine above sequences in one test to run sequentially, except csr sequence and
              uart_rx_oversample_vseq (requires zero_delays)
            - Randomly add reset between each sequence'''
      stage: V2
      tests: ["uart_stress_all"]
    }
    {
      name: stress_all_with_reset
      desc: '''Have random reset in parallel with stress_all and tl_errors sequences'''
      stage: V2
      tests: ["uart_stress_all_with_rand_reset"]
    }
  ]

  covergroups: [
    {
      name: foo_cg
      desc: '''
            '''
    }
  ]
}
