// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  name: "pwrmgr"
  // TODO: remove the common testplans if not applicable
  import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/intr_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",
                     "hw/dv/tools/dvsim/testplans/sec_cm_count_testplan.hjson",
                     "hw/dv/tools/dvsim/testplans/sec_cm_fsm_testplan.hjson",
                     // TODO: Top-level specific Hjson imported here. This will likely be resolved
                     // once we move to IPgen flow.
                     "hw/top_earlgrey/ip/pwrmgr/data/autogen/pwrmgr_sec_cm_testplan.hjson"]
  testpoints: [
    {
      name: smoke
      desc: '''
            Smoke test exercising the pwrmgr state transitions.

            - Brings pwrmgr out of POR.
            - Enables wakeup.
            - Triggers SW initiated low power transition with reset settings
              in `control` CSR.
            - Triggers wakeup.
            - Enables and triggers a reset.
            - Waits for pwrmgr to be out of reset.

            **Stimulus**:
            - CSR writes to `wakeup_en`, `reset_en`, and `low_power_hint`.
            - Needs many input pins to line up correctly in order to prevent the
              pwrmgr from waiting forever. Most of these are set in response
              to outputs, and are checked by SVA.

            **Checks**:
            - The fast fsm becomes active when `fetch_en_o` output rises.
            - The wakeup and reset causes are as expected reading CSRs
              `wake_status` and `reset_status`.
            - The output `pwr_rst_req.reset_cause` matches a low power or
              reset cause.
            - The output `pwr_rst_req.rstreqs` matches the enabled resets.
            '''
      stage: V1
      tests: ["pwrmgr_smoke"]
    }
    {
      name: wakeup
      desc: '''
            Test random wakeup, wakeup_en, wake_info_capture_dis, and
            interrupt.

            The different wakeup inputs can be disabled via bits in the
            `wakeup_en` CSR. Update of `wakeup_info` can be disabled
            via the `wake_info_capture_dis` CSR. Any wakeup causes an
            interrupt unless interrupts are disabled.

            **Stimulus**:
            - Sets `wakeup_en` randomly but don't set it to zero, or the
              test will timeout.
            - Set `wake_info_capture_dis` randomly on and off.
            - Bring pwrmgr to low power.
            - Set `wakeups_i` inputs randomly.
            - Set `intr_enable` randomly.

            **Checks**:
            - The fast fsm becomes active when `fetch_en_o` output rises.
            - Depending on `wakeups_i`:
              - If all wakeups are disabled, wait some time checking the
                state remains inactive.
              - Set `wakeups_i` so at least one is enabled.
            - Checks `wakeup_status` CSR during transition to active state
              since the reset involved will clear the wakeups_i input.
            - Checks the `wake_info` CSR.
            - Checks the output `pwr_rst_req.reset_cause` is `LowPwrEntry`.
            - Check that `intr_wakeup_o` is set according to `intr_enable` CSR.
            - Coverage collected by `wakeup_cg` and `wakeup_intr_cg`.
            '''
      stage: V2
      tests: ["pwrmgr_wakeup"]
    }
    {
      name: control_clks
      desc: '''
            Test CSR control of peripheral clocks during low power.

            The peripheral clocks can be configured to remain on or be turned
            off during low power with bits in the `control` CSR register. The
            usb clock can also be configured off in active mode.

            **Stimulus**:
            - Sets these control bits at random.
            - Cause a low power transition and wakeup.

            **Checks**:
            - The clock enable outputs to the AST clocks during a low
              power transition match the control bits.
            - The usb clock enable is also checked during active mode against
              the control register.
            '''
      stage: V2
      tests: ["pwrmgr_wakeup"]
    }
    {
      name: aborted_low_power
      desc: '''
            Test aborted low power transitions.

            Low power transitions can be aborted in two cases:
            - The processor gets an interrupt soon after a low power entry is
              triggered.
            - OTP, LC, or FLASH are not idle.
            This test aborts low power transitions, and disables any wakeups,
            so the test would timeout if low power was entered.

            **Stimulus**:
            - Bring pwrmgr to low power.
            - Either disable `pwr_cpu.core_sleeping` or keep some of `lc_idle`,
              `otp_idle`, or `flash_idle` inputs off.
            - Disable all wakeup enables.
            - Randomly set `wakeup_info_capture_dis` CSR.

            **Checks**:
            - The `ctrl_cfg_regwen` CSR reads as 1 on the first attempt.
            - Checks the output `pwr_rst_req.reset_cause` doesn't change for
              a bounded amount of time.
            - Check that the `wakeup_info` CSR flags either `fall_through` or
              `abort` events when capture is enabled.
            '''
      stage: V2
      tests: ["pwrmgr_aborted_low_power", "pwrmgr_lowpower_invalid"]
    }
    {
      name: reset
      desc: '''
            Test random reset and reset_en.

            Conditional reset inputs can be disabled via bits in the `reset_en`
            CSR, while escalation and main power are unconditional. Resets can
            be triggered either in active or low power state.

            **Stimulus**:
            - Sets `reset_en` randomly.
            - Randomly choose whether to put the unit in low power mode.
            - Generate resets randomly in value and time:
              - Conditionals via rstreqs_i,
              - Main power glitch via rst_main_ni.
              - Escalation via `esc_rst_tx_i`.
              - Sw reset from rstmgr via `sw_rst_req_i`.

            **Checks**:
            - The fast fsm becomes active when `fetch_en_o` output rises.
            - Checks the `reset_status` CSRs.
            - Checks `ip_clk_en` output has a low transition.
            - SVA that when `pwr_rst_req.reset_cause` is HwReq, and the output
             `pwr_rst_req.rstreqs` matches the unconditional and enabled
             conditional resets inputs.
            '''
      stage: V2
      tests: ["pwrmgr_reset", "pwrmgr_reset_invalid"]
    }
    {
      name: main_power_glitch_reset
      desc: '''
            Test reset due to a glitch in main power.

            A power glitch causes an unconditional reset.

            **Stimulus**:
            - Set the rst_main_ni input low indicating a main power glitch.

            **Checks**:
            - The fast fsm becomes active when `fetch_en_o` output rises.
            - Checks the `reset_status` CSRs.
            - Checks `ip_clk_en` output has a low transition.
            - Checks the output `pwr_rst_req.reset_cause` matches HwReq.
            - Checks the output `pwr_rst_req.rstreqs` matches power glitch.
            '''
      stage: V2
      tests: ["pwrmgr_reset"]
    }
    {
      name: reset_wakeup_race
      desc: '''
            Test wakeup from low power and reset request almost coinciding.

            If a wakeup from low power and a reset occur at nearly the same time
            the system handles them one at a time.

            **Stimulus**:
            - Trigger reset and wakeup from low power as described for other
              testpoints.
            - Issue reset and wakeup a random number of cycles after the slow
              state machine is in LowPower state.
              - This also checks them coinciding.

            **Check**:
            - Similar tests as for the wakeup and reset testpoints, except
              making sure they happen per the triggering order.
              '''
      stage: V2
      tests: ["pwrmgr_wakeup_reset"]
    }
    {
      name: lowpower_wakeup_race
      desc: '''
            Test wakeups coming close to lowpower entry.

            If low power entry and a wakeup are closely aligned the hardware
            could get confused. Notice this is very unlikely, since wakeup is
            only sensed when the slow fsm is in LowPower state.

            **Stimulus**:
            - Trigger low power entry as described for other testpoints.
            - Have all wakeups enabled.
            - Assert wakeups_i in the temporal neighborhood of low power
              entry.

            **Check**:
            - No timeout occurs.
            - Either pwrmgr remains active or a full low power cycle occurs.
            '''
      stage: V2
      tests: ["pwrmgr_lowpower_wakeup_race"]
    }
    {
      name: disable_rom_integrity_check
      desc: '''
            Test rom integrity check is disabled under life cycle test states.

            While running a series of reset event, at FastPwrStateRomCheck
            state,
            - Drive lc_hw_debug_en_i and lc_dft_en_i to random value
              excluding {lc_ctrl_pkg::On, lc_ctrl_pkg::On} for both ports.
            - Set rom_ctrl_i.good = Mubi4False.
            - Wait for a while to make sure fsm state check is not FastPwrStateActive.

            Then,
            - Drive lc_hw_debug_en_i and lc_dft_en_i to {lc_ctrl_pkg::On, lc_ctrl_pkg::On}
            - Check test finish gracefully.

            Try these steps with different lc_ctrl inputs.
            '''
      stage: V2
      tests: ["pwrmgr_disable_rom_integrity_check"]
    }
    {
      name: stress_all
      desc: '''This runs random sequences in succession.

            Randomly chooses from the following sequences:
            - pwrmgr_aborted_low_power_vseq
            - pwrmgr_lowpower_wakeup_race_vseq
            - pwrmgr_reset_vseq
            - pwrmgr_smoke_vseq
            - pwrmgr_wakeup_reset_vseq
            - pwrmgr_wakeup_vseq
	    '''
      stage: V2
      tests: ["pwrmgr_stress_all"]
    }
  ]

  covergroups: [
    {
      name: wakeup_ctrl_cg
      desc: '''
            Collects coverage on wakeup enable and capture functionality.

            This is collected per individual wakeup bit. Covergroup contains
            coverpoints for the `wakeup_en` CSR bit, `wakeup_info_capture_dis`
            CSR, `wakeups_i` input bit, and `wakeup_status` CSR bit, and their
            cross.
            '''
    }
    {
      name: wakeup_intr_cg
      desc: '''
            Collects coverage on interrupts for wakeup functionality.

            This is collected per individual wakeup bit. Covergroup contains
            coverpoints for the `intr_en` CSR, the `wakeup_status` CSR bit,
            the `intr_status` CSR, the output `intr_wakeup` port, and their
            cross.
            '''
    }
    {
      name: control_cg
      desc: '''
            Collects coverage on clock and power bits from `control` CSR during
            a lowpower transition and active state.
            '''
    }
    {
      name: hw_reset_0_cg
      desc: '''
            Collects coverage related to external reset `0`.

            Covergroup contains coverpoints for the `rstreqs_i[0]` external
            reset input, its corresponding bit in `reset_en` CSR, and whether
            this reset is asserted during low power state, and suitable crosses.
            '''
    }
    {
      name: hw_reset_1_cg
      desc: '''
            Collects coverage related to external reset `1`.

            Covergroup contains coverpoints for the `rstreqs_i[1]` external
            reset input, its corresponding bit in `reset_en` CSR, and whether
            this reset is asserted during low power state, and suitable crosses.
            '''
    }
    {
      name: rstmgr_sw_reset_cg
      desc: '''
            Collects coverage on the software reset from rstmgr.

            Covergroup contains a coverpoint for the input `sw_rst_req_i` from
            rstmgr.
            '''
    }
    {
      name: main_power_reset_cg
      desc: '''
            Collects coverage on resets due to a main power glitch.

            Covergroup contains a coverpoint for the input `rst_main_i` that
            triggers a power glitch reset, and whether this reset is asserted
            during low power state.
            '''
    }
    {
      name: esc_reset_cg
      desc: '''
            Collects coverage on resets due to escalation.

            Covergroup contains a coverpoint for the input `esc_rst_tx_i` that
            triggers an escalation reset, and whether this reset is asserted
            during low power state.
            '''
    }
    {
      name: reset_wakeup_distance_cg
      desc: '''
            Covergroup contains a coverpoint for the difference between the
            cycles when the reset and the wakeup were received in the inputs.
            The difference is positive when reset happened after wakeup, and
            zero when the two happened at the same clock cycle.
            '''
    }
  ]
}
