blob: 55dea16b31a9fd673e5690e025d2088d8b8852c7 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
name: "flash_ctrl"
// TODO: remove the common testplans if not applicable
import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson",
"hw/dv/tools/dvsim/testplans/mem_testplan.hjson",
"hw/dv/tools/dvsim/testplans/alert_test_testplan.hjson",
"hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson",
"hw/dv/tools/dvsim/testplans/shadow_reg_errors_testplan.hjson",
"hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson",
"hw/dv/tools/dvsim/testplans/stress_all_with_reset_testplan.hjson",
// TODO: Top-level specific Hjson imported here. This will likely be resolved
// once we move to IPgen flow.
"hw/top_earlgrey/ip/flash_ctrl/data/autogen/flash_ctrl_sec_cm_testplan.hjson"]
testpoints: [
{
name: smoke
desc: '''
Randomly read, program or erase (page or a bank) a randomized chunk of flash memory.
Only the data partition is accessed. No extra features enabled. Flash memory is
invalidated and the targeted chunk is initialized with random data for reads and all 1s
for writes. Interrupts are not enabled, Completion is ascertained through polling. The
success of each operation is verified via backdoor.
'''
milestone: V1
tests: ["flash_ctrl_smoke"]
}
{
name: smoke_hw
desc: '''
Perform host direct read on the single page of Data partition. First Flash memory is
initialized with random values and then it is being read directly by Host interface.
Finally, backdoor read is used for checking read data.
'''
milestone: V1
tests: ["flash_ctrl_smoke_hw"]
}
{
name: sw_op
desc: '''
Perform flash protocol controller read, program and erase on the single page of one
bank within Data partition. Finally perform read on same location in order to test
if previous operation was done successfully.
'''
milestone: V2
tests: ["flash_ctrl_sw_op"]
}
{
name: host_read_direct
desc: '''
Perform back-to-back direct reads via Host in order to test bandwidth of hardware host
interface. In addition, perform stalls to test pipeline structure. Enable scramble to
test pipeline structure.
'''
milestone: V2
tests: ["flash_ctrl_host_dir_rd"]
}
{
name: rma_hw_if
desc: '''
Perform RMA entry requests and check afterwards that the software has no access to
the Flash. After RMA entry, verify that the content of the flash is wiped out.
'''
milestone: V2
tests: ["flash_ctrl_hw_rma"]
}
{
name: host_controller_arb
desc: '''
Perform operations via the Flash Software Interface, and at the same time invoke a
Hardware RMA operation. This verifies the arbitration within the Flash Protocol
Controller. The arbiter should allow any outstanding Software operations to complete
before the RMA starts. When the RMA completes the RMA FSM remains in its final state
until Reset and software access is blocked.
'''
milestone: V2
tests: ["flash_ctrl_host_ctrl_arb"]
}
{
name: erase_suspend
desc: '''
Perform erase suspend when erase is ongoing and also when erase is not ongoing.
Check if request is immediately cleared in case when no erase is ongoing.
Check if request is cleared in case when suspend is handled.
Read affected bank in order to verify erase suspension feature.
'''
milestone: V2
tests: ["flash_ctrl_erase_suspend"]
}
{
name: full_memory_access
desc: '''
Entire memory is accessed by Controller and directly by Host. In addition, Data
partitions can be directly read by Software(Flash controller) and hardware hosts,
while Info partitions can be read only by the Flash controller.
'''
milestone: V2
tests: ["flash_ctrl_full_mem_access"]
}
{
name: rd_buff_eviction
desc: '''
Perform following sequences of operations: read/program/read and read/erase/read in
order to test read buffer eviction properly. Read should be executed by both Software
and Host interface. All combinations should be tested. Covergroup for this hazardous
behavior is rd_buff_evict_cg.
'''
milestone: V2
tests: ["flash_ctrl_rd_buff_evict"]
}
{
name: host_arb
desc: '''
Test arbitration within Flash Physical Controller by reading from both interfaces at
the same time. Perform continuously direct read data from host interface and at the
same time, perform all operations READ/PROGRAM/ERASE from the flash controller is in
progress. Perform parallel operations at addresses of different banks and also on same
bank. Expect that operations are successfully executed.
'''
milestone: V2
tests: ["flash_ctrl_phy_arb"]
}
{
name: host_interleave
desc: '''
At same time, perform two read operations and the same time via host and via
controller. At same time, perform read operation via host and program
operation via controller. Perform mentioned parallel operations at different addresses
and on the same address. Expect that operations are successfully
executed.
'''
milestone: V2
tests: ["flash_ctrl_phy_arb"]
}
{
name: memory_protection
desc: '''
Perform READ/ PROGRAM/ ERASE operations over protected regions and pages of data and
info partitions. Use set and reset values of corresponding read, program and erase
enable bits. Test boundary values of regions. Test overlap of regions in which lower
region wins arbitration. Covergroup is region_range_cg.
'''
milestone: V2
tests: ["flash_ctrl_mp_regions"]
}
{
name: fetch_code
desc: '''
Verify the Code Fetch Feature.
Reads for instructions via the Hardware Interface are allowed if a specific value
is written to the EXEC csr.
'''
milestone: V2
tests: ["flash_ctrl_fetch_code"]
}
{
name: all_partitions
desc: '''
Sanity + both, legal data and info partitions are accessed. In future, support for
multiple info partitions may be added - those will be covered as well.
'''
milestone: V2
tests: ["flash_ctrl_rand_ops"]
}
{
name: error_mp
desc: '''
Perform accesses in order to provoke memory permission errors. Test the Software
interface (Erase, Program, Read). Related covergroup is error_cg.
'''
milestone: V2
tests: ["flash_ctrl_error_mp"]
}
{
name: error_rd
desc: '''
Perform accesses in order to provoke read data error. Test both, Software interface and
Hardware interface. Related covergroup is error_cg.
'''
milestone: V2S
tests: []
}
{
name: error_prog_win
desc: '''
Perform accesses in order to provoke the 'program resolution' error.
Test via the Software interface. Related covergroup is error_cg.
'''
milestone: V2
tests: ["flash_ctrl_error_prog_win"]
}
{
name: error_prog_type
desc: '''
Perform accesses in order to provoke the 'program type' error.
Test via the Software interface. Related covergroup is error_cg.
'''
milestone: V2
tests: ["flash_ctrl_error_prog_type"]
}
{
name: stress_all
desc: '''
- combine above sequences in one test to run sequentially, except csr sequence
- randomly add reset between each sequence
'''
milestone: V2
tests: ["flash_ctrl_stress_all"]
}
{
name: error_flash_phy
desc: '''
Perform accesses in order to provoke native flash error. Test both, Software interface
and Hardware interface. Related covergroup is error_cg.
'''
milestone: V2S
tests: []
}
{
name: error_lc
desc: '''
Perform accesses in order to provoke life cycle management interface error. Related
covergroup is error_cg.
'''
milestone: V2S
tests: []
}
{
name: secret_partition
desc: '''
Verify the secret information partitions. Accessibility is controlled by the Life Cycle Controller
Seeds are read upon flash controller initialization and sent to the Key Manager, additionally verify
that scramble Keys are Read from the OTP and sent into the Flash Ctlr. Also erify that programmed
Secret Partitions retain their values through a Reset Cycle.
'''
milestone: V2
tests: ["flash_ctrl_hw_sec_otp"]
}
{
name: isolation_partition
desc: '''
Verify the isolated information partitions. Accessablity is controlled by Life
Cycle Controller. Verify Partition can be erase, written and programmed, with
HW control, and wipes after an RMA.
'''
milestone: V2
tests: ["flash_ctrl_hw_rma"]
}
{
name: interrupts
desc: '''
Perform accesses in order to raise all interrupts given in register map.
Check behaviour of Interrupt Enable and Status Registers.
'''
milestone: V2
tests: []
}
{
name: invalid_op
desc: '''
Send invalid command in order to check that it does not affect memory content.
Check that recovery alert is triggered.
'''
milestone: V2
tests: ["flash_ctrl_invalid_op"]
}
{
name: ecc
desc: '''
Randomly enable ECC for a randomly selected set of pages. Randomly corrupt a single bit
in the memory that is about to be read and ensure that the ECC works - the corrupted
bit should be fixed. Corrupt randomly either the data or the ECC bits. Randomly corrupt
2 bits in the same word and ensure that the read results in error. Ensure that pages
with ECC not enabled reads back corrupted data without any errors. Verify both types,
pre-scramble ECC(integrity ESS, 4-bits) and post-scramble ECC(reliability ECC, 8-bits).
Test status and control ECC bits.
'''
milestone: V2S
tests: []
}
{
name: scramble
desc: '''
Enable scrambling, along with randomized scramble keys. Program a fresh chunk of
memory and read back (both, via controller and host) to ensure data integrity. On
program, verify via backdoor scrambling was done on the raw data correctly. When
reading via host, read the same memory via host multiple times back-to-back and ensure
the timing is correct (subsequent reads should be faster). When scrambling is not
enabled, ensure that the raw data is written and read back.
'''
milestone: V2S
tests: []
}
{
name: robustness
desc: '''
Enable full randomization in order to fully stress DUT. Perform illegal accesses in
order to gain robustness.
'''
milestone: V3
tests: []
}
]
covergroups: [
{
name: control_cg
desc: '''
Covers that all operations READ/PROGRAM/ERASE/UNKNOWN have been tested.
Covers that ERASE operation is performed on a page and on entire bank.
Covers data and info partitions selection.
All valid combinations of the above will also be crossed.
'''
}
{
name: erase_susp_cg
desc: '''
Covers if request of erase suspension occured.
'''
}
{
name: msgfifo_level_cg
desc: '''
Covers that all possible fifo statuses generate interrupts for operations READ/PROGRAM.
Covers both boundary values 0 and 31. Also covers acceptable distributions within
ranges.
'''
}
{
name: rd_buff_evict_cg
desc: '''
Covers that all possible combinations for following sequences of operations
READ/PROGRAM/READ and READ/ERASE/READ are executed. Software Interface can perform all
three operations READ/PROGRAM/ERASE while Host Interface can perform direct READ.
'''
}
{
name: error_cg
desc: '''
Covers following error scenarios given in Flash error code register:
- mp_err: Flash access has encountered an access permission error.
- rd_err: Flash read has an uncorrectable data error.
- prog_win_err: Flash program has a window resolution error.
- prog_type_err: Flash program selected unavailable type.
- flash_phy_err: The flash access encountered a native flash error.
Covers following error scenarios given in Flash fault status register:
- mp_err: The flash hardware interface encountered a memory permission error.
- rd_err: The flash hardware interface encountered a read data error.
- prog_win_err: The flash hardware interface encountered a program resolution error.
- prog_type_err: The flash hardware interface encountered a program type error.
- flash_phy_err: The flash hardware interface encountered a native flash error.
- lcmgr_err: The life cycle management interface has encountered a fatal error.
'''
}
]
}