blob: 2571b4c41f7141d32e17a67568924961605c66c3 [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/tl_device_access_types_testplan.hjson",
"hw/dv/tools/dvsim/testplans/stress_all_with_reset_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: backpressure
desc: '''
Sanity + randomly pick between back-pressured reads / writes and fifo status-polled
reads / writes via the controller.
'''
milestone: V2
tests: []
}
{
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: host_read_check
desc: '''
Sanity + the success of each operation is verified by randomly choosing
between backdoor and via the host interface.
'''
milestone: V2
tests: []
}
{
name: host_illegal_access
desc: '''
Do a bunch of illegal accesses via host interface to ensure that an error response is
appropriately seen. This includes writes, out of bound reads, protocol violated reads
and all other unsupported accesses.
'''
milestone: V2
tests: []
}
{
name: host_outstanding_access
desc: '''
Drive back-to-back access to ensure coverage on the maximum supported outstanding
on this interface.
'''
milestone: V2
tests: []
}
{
name: intr_enabled
desc: '''
Sanity + enable all interrupts and verify correctness of assertion and de-assertion of
each pin. Replace polling with waits on interrrupts.
'''
milestone: V2
tests: []
}
{
name: host_ctrl_arb
desc: '''
Continuously read data from host interface while randomly programming or reading from
the flash controller. Ensure the expected bandwidths are seen on both interfaces. Also,
initiate reads from the host to all banks back and forth to ensure the responses arrive
in-order.
'''
milestone: V2
tests: []
}
{
name: host_read_collide
desc: '''
Read LSB bus word via host and program or read the MSB bus word at the same time. This
will cause the internal flash word wide buffer to be updated. Then read the MSB bus word
within the same flash data word - it should read back the updated data, proving that the
internal buffer was cleared from the previous step.
'''
milestone: V2
tests: []
}
{
name: en_mp_regions
desc: '''
Protect randomized and legal ranges of data and info partitions and ensure that the
corresponding read / program / erase enable bits are working. TBD - future support for
sub-page protection may be added - that will be tracked as a part of this test as well.
'''
milestone: V2
tests: []
}
{
name: redundant_pages
desc: '''
TBD - support for adding redundant pages may be added in future for yield recovery. THis
is a placeholder to verify that feature.
'''
milestone: V2
tests: []
}
{
name: lc_ctrl_if
desc: '''
TBD - verify the interface between flash controller and the life cycle controller.
'''
milestone: V2
tests: []
}
{
name: key_mgr_if
desc: '''
TBD - verify the seed output to the key manager.
'''
milestone: V2
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: V2
tests: []
}
{
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.
'''
milestone: V2
tests: []
}
{
name: read_ecc_metadata
desc: '''
TBD - in futurem support for reading the metadata from the ECC bits may be supported -
this is a placeholder to verify that feature.
'''
milestone: V2
tests: []
}
{
name: error
desc: '''
This test will attempt to generate flash error in all possible ways:
1. Read / program / erase a protected chunk
2. Set num words to 0 or out of bounds on read or program
3. Inject double bit errors when ECC is enabled
4. Program or read out-of-bounds info partition
5. Erase whole bank with bank erase not enabled
6. Randomly wiggle scramble enable in the middle of an op and ensure that the FSM does
not get locked up
'''
milestone: V2
tests: []
}
{
name: flash_macro_timing
desc: '''
When verifying against the real flash macro (which will be in a closed source repo),
check that the read / program / erase timing parameters are correct.
'''
milestone: V2
tests: []
}
{
name: stress_all
desc: '''
This enables all of the above features to fully stress all the moving parts in the
design.
'''
milestone: V2
tests: ["flash_ctrl_stress_all"]
}
{
name: flash_init
desc: '''
TBD - if supported - verify flash initialization routine upon reset.
'''
milestone: V2
tests: []
}
{
name: tlul_to_vendor
desc: '''
TBD - if supported - verify TLUL split to the vendor wrapper.
'''
milestone: V2
tests: []
}
]
}