// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  name: "edn"
  import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson",
                     "edn_sec_cm_testplan.hjson"]
  testpoints: [
    {
      name: smoke
      desc: '''
            Verify send instantiate/generate command
            Verify single endpoint requests
            Verify endpoint data = genbits data
            '''
      stage: V1
      tests: ["edn_smoke"]
    }
    {
      name: firmware
      desc: '''
            Verify SW_CMD_REQ/SW_CMD_STS registers/bits behave as predicted.
            Verify software mode behaves as predicted.
            Verify INSTANTIATE/GENERATE software cmds.
            Verify cmd_fifo_reset bit causes fifos to reset.
            '''
      stage: V2
      tests: ["edn_genbits"]
    }
    {
      name: csrng_commands
      desc: '''
            Verify when no/some/all endpoints requesting (test arbiter).
            Verify boot request mode behaves as predicted.
            Verify BOOT_INS_CMD/BOOT_GEN_CMD registers.
            Verify auto request mode behaves as predicted.
            Verify RESEED_CMD/GENERATE_CMD/MAX_NUM_REQS_BETWEEN_RESEEDS registers.
            Verify SUM_STS register bits behave as predicted.
            Verify all csrng commands (clen = 0-12, sw_mode, boot/auto_req_mode).
            Verify with ready randomly asserting/deasserting
            '''
      stage: V2
      tests: ["edn_genbits"]
    }
    {
      name: genbits
      desc: '''
            Verify genbits input is transferred to endpoint(s) as predicted.
            Verify fips bit(s) are properly transferred to endpoint.
            '''
      stage: V2
      tests: ["edn_genbits"]
    }
    {
      name: interrupts
      desc: '''
            Verify intr_edn_cmd_req_done interrupt asserts/clears as predicted.
            Verify intr_edn_fatal_err interrupt asserts/clears as predicted.
            '''
      stage: V2
      tests: ["edn_intr"]
    }
    {
      name: alerts
      desc: '''
            Verify recov_alert_sts asserts/clears as predicted.
            '''
      stage: V2
      tests: ["edn_alert"]
    }
    {
      name: errs
      desc: '''
            Verify ERR_CODE asserts as predicted.
            Verify ERR_CODE all reg bits via ERR_CODE_TEST.
            '''
      stage: V2
      tests: ["edn_err"]
    }
    {
      name: stress_all
      desc: '''
            Combine the other individual testpoints while injecting TL errors and running CSR tests
            in parallel.
            '''
      stage: V2
      tests: ["edn_stress_all"]
    }
  ]

covergroups: [
    {
      name: edn_cfg_cg
      desc: '''
            Covers that all edn configuration options have been tested.
            Individual config settings that will be covered include:
            - boot_req_mode
            - auto_req_mode
            - sw_mode (neither boot_req_mode/auto_req_mode)
            - num_endpoints
            - num_boot_reqs
            Cross between num_endpoints and mode.
            '''
    }
    {
      name: edn_endpoints_cg
      desc: '''
            Covers none/some/all endpoints requesting
            '''
    }
    {
      name: cs_cmds_cg
      desc: '''
            Covers the following:
            - csrng_commands vs clen, flags, glen
              - sw, auto_req_mode commands (boot_req_mode cmds have no additional data)
            - ready deasserts during command
            Crosses between above coverpoints
            '''
    }
    {
      name: err_test_cg
      desc: '''
            Covers that all fatal errors, all fifo errors and all error codes of edn
            have been tested.
            Individual config settings that will be covered include:
            - which_fatal_err (0 to 4), 5 possible fatal errors including rescmd, gencmd fifo
              error, ack_sm_err, main_sm_err and cntr_err
            - which_fifo (0 to 1), 2 differnt fifos, rescmd fifo and gencmd fifo
            - which_err_code (0 to 15), 8 ERR_CODE errors, plus 8 ERR_CODE_TEST bits test
            - which_fifo_err (0 to 2), fifo write/read/state errors
            - which_invalid_mubi (0 to 3), 4 possible invalid mubi4 value fields
            '''
    }
  ]
}
