| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| { |
| name: "chip" |
| |
| // Replicate CSR and mem tests over TL and JTAG interfaces. |
| intf: ["_tl", "_jtag"] |
| |
| // TODO: remove the common testplans if not applicable |
| import_testplans: ["hw/dv/tools/dvsim/testplans/csr_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/enable_reg_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/shadow_reg_errors_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/mem_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/intr_test_testplan.hjson", |
| "hw/dv/tools/dvsim/testplans/tl_device_access_types_testplan.hjson", |
| "hw/ip/tlul/data/tlul_testplan.hjson"] |
| |
| entries: [ |
| ////////////////////////////////////////////////////////////////////////////////// |
| // IO Peripherals // |
| // UART, GPIO, I2C, SPIDEV, SPIHOST, USB, PINMUX & PADCTRL, RV_DM, PATTGEN, PWM // |
| ////////////////////////////////////////////////////////////////////////////////// |
| |
| // UART (pre-verified IP) integration tests: |
| { |
| name: chip_uart_tx_rx |
| desc: '''Verify transmission of data over the TX and RX port. |
| |
| SW test sends a known payload over the TX port. The testbench, at the same time |
| sends a known payload over RX. On reception, both payloads are checked for integrity. |
| SW validates the reception of TX watermark, RX watermark, and the TX empty interrupts. |
| Choosing the max supported baud rate for the UART is sufficient. |
| Verify each UART instance at the chip level independently. |
| ''' |
| milestone: V1 |
| tests: ["chip_uart_tx_rx"] |
| } |
| { |
| name: chip_uart_rx_overflow |
| desc: '''Verify the RX overflow interrupt. |
| |
| The testbench sends a random payload of size greater than the RX fifo size (32). The SW |
| ignores the received the data to allow the RX overflow interrupt to assert. |
| Verify each UART instance at the chip level independently. |
| ''' |
| milestone: V1 |
| tests: ["chip_uart_tx_rx"] |
| } |
| |
| // GPIO (pre-verified IP) integration tests: |
| { |
| name: chip_gpio_out |
| desc: '''Verify GPIO outputs. |
| |
| SW test configures the GPIO to be in the output mode. The test walks a 1 through the |
| pins. The testbench checks the value for correctness. |
| ''' |
| milestone: V1 |
| tests: [] |
| } |
| { |
| name: chip_gpio_in |
| desc: '''Verify GPIO inputs. |
| |
| The SW test configures the GPIO to be in input mode and enables all of them to generate |
| an interrupt. The testbench walks a 1 through the pins. SW test ensures that the |
| interrupt corresponding to the right pin is seen. |
| ''' |
| milestone: V1 |
| tests: [] |
| } |
| |
| // SPI_DEVICE (pre-verified IP) integration tests: |
| { |
| name: chip_spi_device_tx_rx |
| desc: '''Verify the transmission of data on the chip's SPI device port. |
| |
| The testbench sends a known payload over the chip's SPI device input port. The SW test, |
| at the same time sends a known payload out over the chip's SPI device output port. On |
| reception, both payloads are checked for integrity. SW validates the reception of RX |
| fifo full, RX fifo over level, TX fifo under level, RX overflow and TX underflow |
| interrupts. Run with min and max SPI clk frequencies. Also, run with single, dual and |
| quad SPI modes. Also, ensure that the spi_device does not recieve transactions when the |
| csb is high. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_spi_device_eeprom |
| desc: '''Verify the SPI device in EEPROM mode. |
| |
| SW puts the SPI device in EEPROM mode and allows a firmware image (a.k.a. a known |
| payload) to be downloaded into the in-built EEPROM. SW verifies the integrity of the |
| payload upon reception by reading the EEPROM. Details TBD since the feature is NA yet. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // SPI_HOST (pre-verified IP) integration tests: |
| { |
| name: chip_spi_host_tx_rx |
| desc: '''Verify the transmission of data on the chip's SPI host port. |
| |
| Details TBD. Run with min and max SPI clk frequencies. Also, run with single, dual, |
| and quad SPI modes. |
| |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_spi_pass_through |
| desc: '''Verifies the pass through mode from an end-to-end perspective. |
| |
| SW configures the SPI device and host in pass through mode. The testbench sends a random |
| payload over the SPI device interface and verifies its integrity on the SPI host |
| interface. Run with min and max SPI clk frequencies. Also, run with single, dual, |
| and quad SPI modes. Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // I2C (pre-verified IP) integration tests: |
| { |
| name: chip_i2c_host_tx_rx |
| desc: '''Verify the transmission of data over the chip's I2C host interface. |
| |
| The SW test writes a known data over the chip's I2C host interface, which is verified by |
| the testbench (which acts as the I2C device). Likewise, SW test then reads and verifies |
| a known data. SW validates the reception of RX watermark, FMT overflow, RX overflow, |
| NAK, FMT watermark and trans complete interrupts (the SW test / testbench work together |
| to create those scenarios). |
| Verify all instances of I2C in the chip independently. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_i2c_device_tx_rx |
| desc: '''Verify the transmission of data over the chip's I2C device interface. |
| |
| The testbench writes a known data over the chip's I2C device interface, which is |
| verified by the SW test for correctness. Testbench then reads and verifies |
| a known data. SW validates the reception of TBD interrupts (the SW test / testbench |
| create those scenarios). |
| Verify all instances of I2C in the chip independently. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // USB (pre-verified IP) integration tests: |
| { |
| name: chip_usb_fs_se_tx_rx |
| desc: '''Verify the transmission of single-ended data over the USB at full speed. As a part of |
| this test, the enablement of USB pullup is also expected to be verified. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_usb_fs_df_tx_rx |
| desc: '''Verify the transmission of data over the USB at full speed. As a part of this test, |
| the enablement of USB pullup is also expected to be verified. In this test, the USB is |
| configured in differential mode. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_usb_vbus |
| desc: '''Verify that the USB device can detect the presence of VBUS from the USB host. |
| |
| TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_usb_suspend |
| desc: '''Verify that the USB device can detect the presence of VBUS from the USB host. |
| |
| TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_usb_suspend |
| desc: '''Same as the above, but tested with low power entry/exit. |
| |
| TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PINMUX (pre-verified IP) integration tests: |
| { |
| name: chip_pin_mux |
| desc: '''Verify the MIO muxing at input and output sides. |
| |
| SW programs MIO INSEL and OUTSEL CSRs to connect and verify each muxed source. At the |
| moment, GPIOs are the only mux inputs. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_pin_mio_dio_val |
| desc: '''Verify the MIO output values in deep sleep state. |
| |
| SW programs the MIO OUTSEL CSRs to to ensure that in deep sleep it randomly picks |
| between tie-0, tie-1 or hi-Z for all muxed outputs coming from non-AON IPs. If an AON |
| peripheral output is muxed, then that peripheral's output is selected to ensure in deep |
| sleep the peripheral can continue its signaling even in deep sleep. The testbench |
| verifies the correctness of the reflected values once the chip goes into deep sleep. |
| This is replicated for DIO pins as well. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_pin_wake |
| desc: '''Verify pin wake up from deep sleep state. |
| |
| Verify one of the 8 possible MIO or DIO pad inputs (randomly configured) can cause the |
| chip to wake up from sleep state. Verifying wake on posedge is sufficient for the chip |
| level integration testing. Upon wake up, SW reads the wake cause CSR to verify |
| correctness. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PADCTRL tests: |
| { |
| name: chip_padctrl_attributes |
| desc: '''Verify pad attribute settings for all MIO and DIO pads. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // RV_DM (JTAG) tests: |
| { |
| name: chip_rv_dm_cpu_debug_mem |
| desc: '''Verify access to the debug mem from the CPU. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rv_dm_jtag_debug_mem |
| desc: '''Verify access to the debug mem from the external JTAG interface. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rv_dm_cpu_debug_req |
| desc: '''Verify debug request to Ibex while it is actively executing. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rv_dm_ndm_reset_req |
| desc: '''Verify non-debug reset req initiated from RV_DM when the chip is awake. |
| |
| Read CSRs / mem within all IPs in the chip to ensure that they are reset to the original |
| values. Read CSRs / mem in the debug domain to ensure that the values survive the reset. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_rv_dm_ndm_reset_req |
| desc: '''Verify non-debug reset req initiated from RV_DM when the chip is in deep sleep. |
| |
| Read CSRs / mem within all IPs in the chip to ensure that they are reset to the original |
| values. Read CSRs / mem in the debug domain to ensure that the values survive the reset. |
| There are also other modules such as clk, pwr, rstmgr which survive this reset. Verify |
| those as well. |
| |
| TODO: `rv_dm` currently is not on the AON domain, so this feature does not exist ATM. |
| Need discussion with SW/Nuvoton. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rv_dm_jtag_tap_sel |
| desc: '''Verify ability to select all available TAPs. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rv_dm_lc_disabled |
| desc: '''Verify that the debug capabilities are disabled in certain life cycle stages. |
| |
| Verify that the debug mem is inaccessible from the CPU as well as external JTAG. |
| Details TBD. X-ref'ed with the LC tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PATTGEN (pre-verified IP) integration tests: |
| { |
| name: chip_pattgen_ios |
| desc: '''Verify pattern generation to chip output pads. |
| |
| SW programs pattgen to generate distinct patterns on both groups. SW programs pinmux to |
| select pattgen outputs to be routed. SW validates the reception of patt_done interrupts. |
| Testbench verifies the correctness of the pattern seen on the IO pins. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PWM (pre-verified IP) integration tests: |
| { |
| name: chip_sleep_pwm_ios_val |
| desc: '''Verify PWM signaling to chip output pads during deep sleep |
| |
| PWM is in the AON domain. During deep sleep, we should be able to signal the 3 external |
| LEDs that are connected to the PWM signals. Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| /////////////////////////////////////////////////////////////// |
| // System Peripherals // |
| // TIMER, WDOG, PLIC, CLK/RST/PWR MGR, ALERT_HANDLER, LC_MGR // |
| /////////////////////////////////////////////////////////////// |
| |
| // RV_TIMER (pre-verified IP) integration tests: |
| { |
| name: chip_timer |
| desc: '''Verify the timeout interrupt from all timer instances. |
| |
| The SW test configures the RV_TIMER to generate interrupt after a set timeout. The SW |
| test validates the received interrupt. The testbench verifies that the interrupt was |
| fired only after the timeout elapsed. |
| Verify all instances of the RV_Timer. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_aon_timer_wake |
| desc: '''Verify the timer in the AON domain can wake up the chip from sleep. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // WATCHDOG (pre-verified IP) integration tests: |
| { |
| name: chip_wdog_bark |
| desc: '''Verify the watchdog bark reception in awake state. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_wdog_bite |
| desc: '''Verify the watchdog bite causing reset in awake state. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_wdog_bark_wake |
| desc: '''Verify the watchdog bark wake up from sleep state. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_wdog_bite_wake |
| desc: '''Verify the watchdog bite reset from sleep state. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PLIC (pre-verified IP) integration tests: |
| { |
| name: chip_plic_all_irqs |
| desc: '''Verify all interrupts from all peripherals aggregated at the PLIC. |
| |
| The automated SW test enables all interrupts at the PLIC to interrupt the core. It uses |
| the `intr_test` CSR in each peripheral to mock assert an interrupt, looping through all |
| available interrupts in that peripheral. The ISR verifies that the right interrupt |
| occurred. This is used as a catch-all interrupt test for all peripheral integration |
| testing within which functionally asserting an interrupt is hard to achieve or not of |
| high value. |
| ''' |
| milestone: V2 |
| tests: [""] |
| } |
| { |
| name: chip_plic_sw_irq |
| desc: '''Verify the SW interrupt to the CPU. |
| |
| Enable all peripheral interrupts at PLIC. Enable all types of interrupt at the CPU core. |
| Write to the MSIP CSR to generate a SW interrupt to the CPU. Verify that the only |
| interrupt that is seen is the SW interrupt. |
| ''' |
| milestone: V2 |
| tests: [""] |
| } |
| { |
| name: chip_plic_nmi_irq |
| desc: '''Verify the NMI interrupt to the CPU and correctness of the cause. |
| |
| TBD if multiple NMI irqs are OR-ed into the CPU (example - NMI from alert handler and |
| the watchdog bark), then map each test to this testpoint. |
| ''' |
| milestone: V2 |
| tests: [""] |
| } |
| |
| // CLKMGR tests: |
| { |
| name: chip_sw_clk_off_trans |
| desc: '''Verify the ability to turn off the transactional clock via SW. |
| |
| Ensure that activity in any of the IPs running on this clock prevents the clock from |
| actually being turned off. Verify that turning off this clock does not affect the other |
| derived clocks. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sw_clk_off_peri |
| desc: '''Verify the ability to turn off the peripheral clock via SW. |
| |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_clk_div |
| desc: '''Verify clk division logic is working correctly. |
| |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // PWRMGR tests: |
| { |
| name: chip_pwrmgr_cold_boot |
| desc: '''Verify the cold boot sequence through the wiggling of `por_rst_n`. |
| |
| This mainly ensures that both FSMs are properly reset on the POR signal. Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_all_wake_ups |
| desc: '''Verify that the chip can go into normal sleep state and be woken up by ALL wake up |
| sources. |
| |
| This verifies ALL wake up sources. This also verifies that the pwrmgr sequencing is |
| working correctly as expected. X-ref'ed with all individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_all_reset_reqs |
| desc: '''Verify that the chip can go into normal sleep state and be reset by ALL reset req |
| sources. |
| |
| This verifies ALL reset sources. This also verifies that the pwrmgr sequencing is |
| working correctly as expected. X-ref'ed with all individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_deep_sleep_all_wake_ups |
| desc: '''Verify that the chip can go into deep sleep state and be woken up by ALL wake up |
| sources. |
| |
| This verifies ALL wake up sources. This also verifies that the pwrmgr sequencing is |
| working correctly as expected. X-ref'ed with all individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_deep_sleep_all_reset_reqs |
| desc: '''Verify that the chip can go into deep sleep state and be reset up by ALL reset req |
| sources. |
| |
| This verifies ALL reset sources. This also verifies that the pwrmgr sequencing is |
| working correctly as expected. X-ref'ed with all individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_all_reset_reqs |
| desc: '''Verify that the chip can be reset by ALL available reset sources. |
| |
| This verifies ALL reset sources. This also verifies that the pwrmgr sequencing is |
| working correctly as expected. X-ref'ed with all individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_bad_main_pok |
| desc: '''Verify the effect of main_pok de-assertion in the middle of low power entry / exit |
| FSM transition. |
| |
| The main_pok from AST is randomly forced to flip while in the middle of a FSM |
| transition. This is done on all normal / deep sleep / reset request tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_b2b_sleep_reset_req |
| desc: '''Verify that the pwrmge sequences sleep_req and reset req coming in almost at the same |
| time, one after the other. |
| |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_debug_sleep |
| desc: '''Verify that when the chip being in "debuggable" state prevent the low power entry. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_wake_req_disabled |
| desc: '''Verify that the chip cannot be woken up from sleep from a wake up source that is |
| disabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_reset_req_disabled |
| desc: '''Verify that the chip cannot be reset from a reset source that is disabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_reset_req_disabled |
| desc: '''Verify that the chip cannot be woken up from sleep from a reset source that is |
| disabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_disabled |
| desc: '''Verify that the chip does not go to sleep on WFI when low power hint is 0. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_wake_up_fall_through |
| desc: '''Verify that the chip sleep falls through when an interrupt arrives just in time |
| before the pwrmgr iniitates the low power entry. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_pwrmgr_sleep_abort |
| desc: '''Verify that the chip sleep transition aborts due to an active flash / lifecycle / OTP |
| transaction. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| |
| // RSTMGR tests: |
| |
| // ALERT_HANDLER (pre-verified IP) integration tests: |
| { |
| name: chip_alert_handler_alerts |
| desc: '''Verify all alerts coming into the alert_handler. |
| |
| X-ref'ed with all IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_alert_handler_irqs |
| desc: '''Verify all classes of alert handler interrupts to the CPU. |
| |
| |
| Program each alert to cause an interrupt in each class. SW validates the reception of |
| the interrupt. X-ref'ed with all IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_alert_handler_esc_irqs |
| desc: '''Verify all alert handler escalation irqs. |
| |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_alert_handler_entropy |
| desc: '''Verify the alert handler entropy input to ensure pseudo-random ping timer. |
| |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_alert_handler_crashdump |
| desc: '''Verify the alert handler crashdump signal. |
| |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_alert_handler_ping_fail |
| desc: '''Verify the alert ping failure results in an escalation. |
| |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // LC_MANAGER (pre-verified IP) integration tests: |
| |
| |
| /////////////////////////////////////////////////////// |
| // Security Peripherals // |
| // AES, HMAC, KMAC, CSRNG, ENTROPY_SRC, KEYMGR, OTBN // |
| /////////////////////////////////////////////////////// |
| |
| // AES (pre-verified IP) integration tests: |
| { |
| name: chip_aes_enc |
| desc: '''Verify the AES operation. |
| |
| Write a 32-byte key and a 16-byte plain text to the AES registers and trigger the AES |
| computation to start. Wait for the AES operation to complete by polling the status |
| register (or interrupt if available). Check the digest registers for correctness against |
| the expected digest value. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_aes_shadow_reg_alert |
| desc: '''Verify shadow reg alert from AES. |
| |
| Inject a storage error via backdoor to generate this alert signal while the SW is |
| actively executing some piece of code. Verify alert propagation to an NMI. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_aes_idle |
| desc: '''Verify AES idle signaling to clkmgr. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // HMAC (pre-verified IP) integration tests: |
| { |
| name: chip_hmac_enc |
| desc: '''Verify HMAC / SHA256 operation. |
| |
| SW test verifies SHA256 operation with a known key, plain text and digest (pick one of |
| the NIST vectors). SW validates the reception of hmac done and fifo empty interrupts. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_hmac_alert |
| desc: '''Verify alert from HMAC. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_hmac_idle |
| desc: '''Verify HMAC idle signaling to clkmgr. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // KMAC pre-verified IP) integration tests: |
| { |
| name: chip_kmac_enc |
| desc: '''Verify the SHA3 operation. |
| |
| SW test verifies SHA3 operation with a known key, plain text and digest (pick one of |
| the NIST vectors). SW validates the reception of kmac done and fifo empty interrupts. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_kmac_sram_uncorrectable_alert |
| desc: '''Verify the SRAM uncorrectable alert from KMAC. |
| |
| Inject 2 bit errors within the SRAM inside KMAC via backdoor and ensure that this alert |
| propagates to an NMI. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_kmac_sram_data_parity_alert |
| desc: '''Verify the data parity alert from KMAC. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_kmac_keymgr_key_data |
| desc: '''Verify the keymgr interface to KMAC. |
| |
| X-ref'ed with keymgr test. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_kmac_idle |
| desc: '''Verify KMAC idle signaling to clkmgr. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // CSRNG tests: |
| { |
| name: chip_csrng_cmd |
| desc: '''Verify the cmd interface to CSRNG. |
| |
| Details TBD. SW test validates the reception of cmd req done interrupt. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_csrng_entropy_src |
| desc: '''Verify the interface to entropy_src. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_csrng_fuse |
| desc: '''Verify the fuse input to CSRNG. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // ENTROPY_SRC (pre-verified IP) integration tests: |
| { |
| name: chip_entropy_src_ast_rng_req |
| desc: '''Verify the RNG req to ast. |
| |
| Details TBD. SW test validates the reception of the entropy valid interrupt. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_entropy_src_fuse |
| desc: '''Verify the fuse input entropy_src. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // KEYMGR (pre-verified IP) integration tests: |
| |
| // OTBN (pre-verified IP) integration tests: |
| { |
| name: chip_otbn_op |
| desc: '''Verify an OTBN operation. |
| |
| SW test directs the BIGNUM engine to perform an operation. The BIGNUM SW image is |
| backdoor loaded into OTBN IMEM. SW validates the reception of the otbn done interrupt. |
| SW also verifies the correctness of the OTBN operation using a reference model. Details |
| TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otbn_imem_uncorrectable_alert |
| desc: '''Verify the imem uncorrectable alert from OTBN. |
| |
| Inject 2 bit errors within the IMEM SRAM inside OTBN via backdoor and ensure that this |
| alert propagates to an NMI. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otbn_dmem_uncorrectable_alert |
| desc: '''Verify the dmem uncorrectable alert from OTBN. |
| |
| Inject 2 bit errors within the DMEM SRAM inside OTBN via backdoor and ensure that this |
| alert propagates to an NMI. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otbn_reg_uncorrectable_alert |
| desc: '''Verify the reg uncorrectable alert from OTBN. |
| |
| Details TBD. Ensure that this alert propagates to an NMI. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otbn_mem_encr |
| desc: '''Verify the encryption of the mem within OTBN using the key provided by the OTP. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otbn_idle |
| desc: '''Verify OTBN idle signaling to clkmgr. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| //////////////////////////////////////////////// |
| // Memory & Controllers // |
| // ROM, RAM, FLASH, FLASH_CTRL, OTP, OTP_CTRL // |
| //////////////////////////////////////////////// |
| |
| // ROM (pre-verified IP) integration tests: |
| // TODO: Not sure if this will really be a pre-verified IP. If not, then more tests are needed |
| // at the chip level. |
| { |
| name: chip_rom_access |
| desc: '''Verify access to the rom. |
| |
| Verify that the CPU can fetch instructions from the ROM. Nothing extra needs to be done |
| here - all SW tests do this anyway. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rom_security_features |
| desc: '''Verify ROM security / ECC features if available. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // SRAM (pre-verified IP) integration tests: |
| { |
| name: chip_sram_access |
| desc: '''Verify access to the SRAM. |
| |
| Verify that the CPU can fetch data from the SRAM. Nothing extra needs to be done |
| here - all SW tests do this anyway. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sram_scramble |
| desc: '''Verify scrambling of the SRAM data. |
| |
| SW enables scrambling within the SRAM. Ensure that the data written to the SRAM is |
| scrambled and likewise, when read from the SRAM is de-scrambled correctly via backdoor. |
| The key and nonce for the scrambling is supplied by the OTP. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sram_ret_access |
| desc: '''Verify access to the retention SRAM. |
| |
| Verify that the CPU can fetch data from the retention SRAM. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sram_ret_scramble |
| desc: '''Verify scrambling of the retention SRAM data. |
| |
| SW enables scrambling within the retention SRAM. Ensure that the data written to the |
| SRAM is scrambled and likewise, when read from the SRAM is de-scrambled correctly via |
| backdoor. The key and nonce for the scrambling is supplied by the OTP. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_sram_ret_contents |
| desc: '''Verify that the data within the retention SRAM survives low power entry-exit. |
| |
| Ensure that the data within the retention SRAM survives ALL low power entry-exit |
| variations. |
| |
| TODO: how to deal with the scramble keys on low power exit? |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // OTP (pre-verified IP) integration tests: |
| // TODO: more testing needed on OTP. |
| { |
| name: chip_otp_init |
| desc: '''Verify the OPT initialization on chip power up. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otp_keys |
| desc: '''Verify the proliferation of keys to security peripherals. |
| |
| Ensure that the correct set of keys are provided to sram, sram_ret, flash, keymgr and |
| the OTBN. X-ref'ed with those individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_otp_lc_program |
| desc: '''Verify the OTP program req from LC. |
| |
| Ensure that the correct set of keys are provided to sram, sram_ret, flash, keymgr and |
| the OTBN. X-ref'ed with those individual IP tests. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // FLASH (pre-verified IP) integration tests: |
| { |
| name: chip_flash_host_access |
| desc: '''Verify access to the flash mem. |
| |
| Verify that the CPU can read the flash mem contents. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_flash_ctrl_ops |
| desc: '''Verify flash ctrl ops. |
| |
| Verify that the CPU can read / program and erase the flash mem. Pick an operation on |
| both data and info partitions. Erase both, bank and page. SW validates the reception of |
| prog empty, prog level, rd full, rd level and op done interrupts. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_flash_ctrl_scramble |
| desc: '''Verify flash scrambling via the controller. |
| |
| Verify that the CPU can program and read back data via the flash ctrl with scrambling |
| enabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_flash_scramble |
| desc: '''Verify flash scrambling via the host interface. |
| |
| Verify that the CPU read data from the flash with scrambling enabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_flash_ast_pwr_dwn |
| desc: '''Verify that power down signaling from AST to flash. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_flash_test_mode |
| desc: '''Verify that flash test mode and flash volt signaling from chip IOs. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| ////////////////////// |
| // CrOS Peripherals // |
| // RBOX, DCD // |
| ////////////////////// |
| |
| // RBOX (pre-verified IP) integration tests: |
| { |
| name: chip_rbox_key_pass_through |
| desc: '''Verify pass through of key in to key out. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_pwrb_pass_through |
| desc: '''Verify pass through of power button signal in to out. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_ac_present_in |
| desc: '''Verify the RBOX can detect AC present input. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_batt_en_out |
| desc: '''Verify the RBOX can signal battery enabled output. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_ec_entering_rw_in |
| desc: '''Verify the RBOX can detect EC entering RW mode input. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_ec_in_rw_out |
| desc: '''Verify the RBOX can signal EC in RW mode output. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_rbox_ec_reset_l_out |
| desc: '''Verify the RBOX can signal EC reset output. |
| |
| Verify EC reset pulse duration. Verify open drain when not active. Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_rbox_ios_val |
| desc: '''Verify the RBOX can signal EC reset output. |
| |
| Verify EC reset pulse duration. Verify open drain when not active. Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // DCD (pre-verified IP) integration tests: |
| { |
| name: chip_sleep_dcd_ast_adc_pd |
| desc: '''Verify that in deep sleep, DCD can signal the ADC within the AST to power down. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sleep_dcd_debug_cable_wake |
| desc: '''Verify that the debug cable detection logic can wake up the chip from sleep. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_dcd_ast_adc |
| desc: '''Verify that the DCD can use the ADC within AST to know the voltage level. |
| |
| Details TBD. SW test validates the reception of debug cable update interrupt. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_dcd_por_l |
| desc: '''Verify the POR reset input to DCD. |
| |
| This sort of also tracks the testing of DCD surviving low power entry/exit. |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| //////////////////////// |
| // Analog Peripherals // |
| // AST, SENSOR_CTRL // |
| //////////////////////// |
| |
| // AST (pre-verified IP) integration tests: |
| { |
| name: chip_ast_clk_outputs |
| desc: '''Verify that the AST generates the 4 clocks when requested by the clkmgr. |
| |
| Verify the clock frequencies are reasonably accurate. Verify that when the clkmgr |
| deasserts the enable (on account of low power entry), the clocks are turned off. Verify |
| that when turned on (low power exit), the clocks are glitch free. |
| |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_ast_clk_rst_inputs |
| desc: '''Verify the clk and rst inputs to AST (from `clkmgr`). |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_ast_sys_clk_jitter |
| desc: '''Verify that the AST sys clk jitter control. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_ast_usb_clk_calib |
| desc: '''Verify the USB clk calibration signaling. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_ast_alerts |
| desc: '''Verify the alerts from AST aggregating into the sensor_ctrl. |
| |
| X-ref'ed with `chip_sensor_ctrl_ast_alerts`. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| // SENSOR_CTRL tests: |
| { |
| name: chip_sensor_ctrl_ast_alerts |
| desc: '''Verify the alerts from AST aggregating into the sensor_ctrl. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_sensor_ctrl_ast_status |
| desc: '''Verify the io power ok status from AST. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| |
| //////////////////////////// |
| // System level scenarios // |
| //////////////////////////// |
| |
| { |
| name: chip_sw_boot |
| desc: '''Verify the full flash image download with bootstrap signal set. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_secure_boot |
| desc: '''Verify the secure boot flow. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_prod_os |
| desc: '''Run the OpenTitan TockOS that will be deployed in production. |
| |
| Run the TockOS image in DV. The advantage of doing so is running Tock with the full |
| suite of design assertions and other checks in place in the DV environment. |
| ''' |
| milestone: V2 |
| tests: ["chip_opentitan_tock"] |
| } |
| { |
| name: chip_lc_walkthrough |
| desc: '''Walk through the life cycle stages reseting the chip each time. |
| |
| Verify that the features that should indeed be disabled are indeed disabled. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| { |
| name: chip_device_ownership |
| desc: '''Walk through device ownership stages and flows. |
| |
| Details TBD. |
| ''' |
| milestone: V2 |
| tests: [] |
| } |
| ] |
| } |