| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| { |
| name: "csrng" |
| 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", |
| "csrng_sec_cm_testplan.hjson"] |
| testpoints: [ |
| { |
| name: smoke |
| desc: ''' |
| Verify that sending an instantiate command via the SW path returns OK. |
| Instantiate the CSRNG with flag0 set to true and clen set to 12. |
| Verify that sending a generate command via the SW path returns glen=1 number of words followed by an OK. |
| ''' |
| stage: V1 |
| tests: ["csrng_smoke"] |
| } |
| { |
| name: interrupts |
| desc: ''' |
| This test verifies the behavior of the Interrupt State Register. |
| Verify cs_cmd_req_done interrupt asserts when glen number of genbit words have been generated. |
| Verify cs_entropy_req interrupt asserts when instantiate or reseed is called with flag0 |
| set to false. |
| Verify cs_hw_inst_exc interrupt asserts when any of the application interfaces responds with a CSRNG_ERROR response status signal. |
| Verify cs_fatal_err interrupt asserts when any bit of err_code register is set. |
| Verify that each interrupt clears back to 0 after writing the corresponding interrupt state bit. |
| ''' |
| stage: V2 |
| tests: ["csrng_intr"] |
| } |
| { |
| //TODO For the following untested features add it to the test or create explicit coverpoints in csrng_cmd_cg: |
| //TODO - Invalid MuBi values for flag0 are currently untested. |
| //TODO - Illegal commands are currently untested. |
| //TODO - Fatal alerts are currently untested. |
| name: alerts |
| desc: ''' |
| Verify recov_alert asserts when recov_alert_sts becomes non-zero. |
| Verify each respective bit of recov_alert_sts asserts when: |
| - Either of the 3 values in the control register are not valid kMultiBitBool values. |
| - When an initiate or reseed command is sent where flag0 is not a valid kMultiBitBool value. |
| - The genbits bus value is equal to the prior valid value. |
| - When an illegal command is used (0x0,0x6-0xf). |
| Verify that writing zeros to the recoverable alert status register resets all the status bits. |
| Verify fatal_alert asserts when: |
| - An illegal state is reached. |
| - The AES block raises a fatal alert. |
| - There is an integrity failure on the bus (this is covered by an automated test). |
| ''' |
| stage: V2 |
| tests: ["csrng_alert"] |
| } |
| { |
| name: err |
| desc: ''' |
| Verify err_code register bits assert when: |
| - An error has been detected in any of the internal fifos and the corresponding write/read/state bits. |
| - An illegal state is reached in any of the 6 state machines. |
| - An error is detected in the generate command counter. |
| Verify that the err_code register clears all bits after reset. |
| ''' |
| stage: V2 |
| tests: ["csrng_err"] |
| } |
| { |
| //TODO For the following untested features add it to the test or create explicit coverpoints in csrng_cmd_cg: |
| //TODO - Verification of otp_en_csrng_sw_app_read is currently untested. |
| //TODO - FIPS bit going low from entropy source is currently untested. |
| name: cmds |
| desc: ''' |
| Verify all csrng commands req/status behave as predicted on all applications: HW0, HW1 and SW. |
| Verify above for all valid values of acmd, clen, flags, glen. |
| Verify for multiple hw app interfaces running in parallel. |
| Verify sw/hw app interfaces running in parallel. |
| Verify main_sm_state for sw/hw apps. |
| Verify that genbits generates the amount specified by glen. |
| Verify fips bit is set to the inverse of flag0 that was used on the last initialize or reseed. |
| Verify that if otp_en_csrng_sw_app_read is set, genbits and int_state_value registers are readable, and unreadable otherwise. |
| Verify that when AES_HALT is set during a generate command that no request is sent to the AES block. |
| Verify commands with continuous/non-continuous valid. |
| Verify that if FIPS bit drops at input from entropy source that the generated block also has FIPS low. |
| ''' |
| stage: V2 |
| tests: ["csrng_cmds"] |
| } |
| { |
| name: life cycle |
| desc: ''' |
| Verify lifecycle hardware debug mode. |
| When lc_hw_debug_en_i is set to on, the seed from the entropy source must be xor'ed with the diversification value. |
| ''' |
| stage: V2 |
| tests: ["csrng_cmds"] |
| } |
| { |
| name: stress_all |
| desc: ''' |
| Combine the other individual testpoints while injecting TL errors and running CSR tests in parallel. |
| ''' |
| stage: V2 |
| tests: ["csrng_stress_all"] |
| } |
| ] |
| |
| covergroups: [ |
| { |
| //TODO Configuration for enable is currently not covered. |
| name: csrng_cfg_cg |
| desc: ''' |
| Covers that all csrng configuration options have been tested. |
| Individual config settings that will be covered include: |
| - otp_en_cs_sw_app_read |
| - sw_app_enable |
| - read_int_state |
| - enable |
| - regwen has been true and false |
| - intr_state has had each bit set and unset at least once (handled in comportable ip coverage) |
| Cross: |
| - intr_enable and intr_state (handled in comportable ip coverage) |
| ''' |
| } |
| { |
| name: csrng_cmds_cg |
| desc: ''' |
| Covers that all csrng commands and variations have been tested for all apps. |
| Individual commands and command options that will be covered include: |
| - app |
| - acmd, clen, flags, glen |
| - continuous/non-continuous valid |
| Crosses of |
| - app/acmd |
| - acmd/clen |
| - acmd/flag0 |
| - acmd/glen |
| - For the instantiate and reseed command: |
| - flag0 false and clen 0 |
| - flag0 false and clen >0 |
| - flag0 true and clen 0 |
| - flag0 true and clen >0 |
| ''' |
| } |
| { |
| name: csrng_sts_cg |
| desc: ''' |
| Covers all possible hw_exc_sts responses from each HW instance and the sub-fields of |
| sw_cmd_sts, which are cmd_rdy and cmd_sts. |
| ''' |
| } |
| { |
| name: csrng_err_code_cg |
| desc: ''' |
| Covers all possible fatal errors and possible AES FSM errors inside CSRNG. |
| ''' |
| } |
| { |
| name: csrng_err_code_test_cg |
| desc: ''' |
| Covers ERR_CODE_TEST register values for setting up fatal errors. |
| ''' |
| } |
| { |
| name: csrng_recov_alert_sts_cg |
| desc: ''' |
| Covers all possible recoverable alert cases. |
| ''' |
| } |
| { |
| name: csrng_sfifo_cg |
| desc: ''' |
| Covers each app's stage FIFO statuses. |
| - cp_hw0_cmd_depth, cp_hw1_cmd_depth, cp_sw_cmd_depth : Covers current number of commands in FIFO |
| - cp_hw0_genbits_depth, cp_hw1_genbits_depth, cp_sw_genbits_depth : Covers current number of genbit responses in FIFO |
| - cmd_depth_cross : Cross for checking each command FIFO status in different apps |
| - genbits_depth_cross : Cross for checking genbits FIFO status in different apps |
| - hw0_cmd_push_cross, hw1_cmd_push_cross, sw_cmd_push_cross : command FIFO fill status x command FIFO write valid x command FIFO write ready |
| - hw0_cmd_pop_cross, hw1_cmd_pop_cross, sw_cmd_pop_cross : command FIFO fill status x command FIFO read ready |
| - hw0_genbits_pop_cross, hw1_genbits_pop_cross, sw_genbits_pop_cross : genbits FIFO fill status x genbits FIFO read valid x genbits FIFO read ready |
| ''' |
| } |
| ] |
| } |