// 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: disable
      desc: '''
            Disable EDN in all states and verify proper operation when re-enabled.
            '''
      stage: V2
      tests: ["edn_disable", "edn_disable_auto_req_mode"]
    }
    {
      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
            '''
    }
  ]
}
