// 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
            '''
      milestone: 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.
            '''
      milestone: 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
            '''
      milestone: 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.
            '''
      milestone: 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.
            '''
      milestone: V2
      tests: ["edn_intr"]
    }
    {
      name: alerts
      desc: '''
            Verify recov_alert_sts asserts/clears as predicted.
            '''
      milestone: V2
      tests: ["edn_alert"]
    }
    {
      name: errs
      desc: '''
            Verify ERR_CODE asserts as predicted.
            Verify ERR_CODE all reg bits via ERR_CODE_TEST.
            '''
      milestone: V2
      tests: ["edn_err"]
    }
    {
      name: stress_all
      desc: '''
            Combine the other individual testpoints while injecting TL errors and running CSR tests
            in parallel.
            '''
      milestone: 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
            '''
    }
  ]
}
