[gpio/dv] Move GPIO DV plan to doc directory, Update hjson test plan
diff --git a/hw/ip/gpio/data/gpio_testplan.hjson b/hw/ip/gpio/data/gpio_testplan.hjson
new file mode 100644
index 0000000..0b35888
--- /dev/null
+++ b/hw/ip/gpio/data/gpio_testplan.hjson
@@ -0,0 +1,131 @@
+{
+ name: "gpio"
+ import_testplans: ["hw/dv/tools/testplans/csr_testplan.hjson",
+ "hw/dv/tools/testplans/intr_test_testplan.hjson",
+ "hw/dv/tools/testplans/tl_device_access_types_testplan.hjson"]
+ entries: [
+ {
+ name: sanity
+ desc: '''Basic GPIO sanity test that exercises gpio pins as inputs or outputs, and performs
+ data integrity checks by triggering scoreboard checks by reading data_in register.
+ This test repeats following steps are random no. of times:
+ - Configures all gpio pins as inputs, drives random value on cio_gpio_i signal and
+ reads data_in register after random delay
+ - Configures all gpio pins as outputs, programs direct_out and direct_oe registers to
+ random values and reads data_in register after random delay'''
+ milestone: V1
+ tests: ["gpio_sanity",
+ "gpio_sanity_no_pullup_pulldown"]
+ }
+ {
+ name: direct_and_masked_out
+ desc: '''GPIO test that programs `DIRECT_OUT`, `DIRECT_OE`, `MASKED_OUT_LOWER`,
+ `MASKED_OE_LOWER`, `MASKED_OUT_UPPER` and `MASKED_OE_UPPER` registers and checks their
+ effect on GPIO pins as well as DATA_IN register value.
+ Every random iteration in this test would either:
+ - Program one or more of `\*OUT\*` and `\*OE\*` registers, or
+ - Drive new random value on GPIO pins'''
+ milestone: V2
+ tests: ["gpio_random_dout_din",
+ "gpio_random_dout_din_no_pullup_pulldown"]
+ }
+ {
+ name: out_in_regs_read_write
+ desc: '''GPIO test that exercises functionality of DATA_OUT and DATA_OE internal registers,
+ and `DATA_IN` register by programming any of `\*OUT\` and `\*OE\*` registers,
+ respectively.
+ Every random iteration in this test would perform one out of following operations:
+ - Drive new random value on GPIO pins
+ - Write random value to any one of `\*OUT\*`, `\*OE\*` or `DATA_IN` registers
+ - Read any one of `\*OUT\*`, `\*OE\*` or `DATA_IN` registers'''
+ milestone: V2
+ tests: ["gpio_dout_din_regs_random_rw"]
+ }
+ {
+ name: gpio_interrupt_programming
+ desc: '''GPIO test which programs one or multiple interrupt registers to check GPIO interrupt
+ functionality
+ Every random iteration in this test would do either of following steps, and then read
+ `INTR_STATE` register value:
+ - Drive new random value on GPIO pins (and thereby generate random interrupt event)
+ - Write random value to one or more interrupt registers that include `INTR_ENABLE`,
+ `INTR_CTRL_EN_FALLING`, `INTR_CTRL_EN_LVL_LOW`, `INTR_CTRL_EN_LVL_HIGH` and
+ `INTR_STATE`'''
+ milestone: V2
+ tests: ["gpio_intr_rand_pgm"]
+ }
+ {
+ name: random_interrupt_trigger
+ desc: '''GPIO test that randomly generates and clears multiple GPIO interrupts for each
+ random programming of interrupt registers, and performs checks by reading `DATA_IN`
+ and `INTR_STATE` registers.
+ Each random iteration of this test performs following operations:
+ 1. Programs one more interrupt registers to random values
+ 2. Following two operations are performed in parallel:
+ - Drive random value on GPIO pins multiple times, every time at a random time
+ intervals (random number of clock cycles)
+ - Randomize random time interval (random number of clock cycles) and read either
+ `DATA_IN` or `INTR_STATE` register value at randomized time interval
+ After every read, optionally perform random interrupt clearing operation by
+ writing to `INTR_STATE` register'''
+ milestone: V2
+ tests: ["gpio_rand_intr_trigger"]
+ }
+ {
+ name: interrupt_and_noise_filter
+ desc: '''GPIO test that exercise GPIO noise filter functionaliy along with random interrupt
+ programming and randomly toggling each GPIO pin value, independently of other GPIO pins.
+ Each random iteration performs following operations:
+ 1. programs random values in one or more interrupt registers
+ 2. optionally, programs new random value in `CTRL_EN_INPUT_FILTER` register
+ 3. performs following operations in parallel:
+ - drives each GPIO pin independently such that each pin has stable value for random
+ number of clock cycles within the range `[1:FILTER_CYCLES]`, and also predicts
+ updates in values of `DATA_IN` and `INTR_STATE` registers
+ - multiple registers reads, each for either `DATA_IN` or `INTR_STATE`'''
+ milestone: V2
+ tests: ["gpio_intr_with_filter_rand_intr_event"]
+ }
+ {
+ name: noise_filter_stress
+ desc: '''GPIO test that stresses noise filter functionality by driving each GPIO pin such
+ independently of other pins, and driving could be either synchronous to clock or
+ asynchronous.
+ Each iteration in test does following:
+ 1. Programs one or more interrupt registers with random values
+ 2. Programs noise filter register with random value
+ 3. Drives each GPIO pin with the mix of both synchronous and asynchronous driving,
+ and each pin is driven independently of others'''
+ milestone: V2
+ tests: ["gpio_filter_stress_test"]
+ }
+ {
+ name: regs_long_reads_and_writes
+ desc: '''GPIO test that performs back-to-back register writes and back-to-back register reads
+ on randomly selected GPIO registers.
+ Each iteration in this test performs one out of following operations:
+ - Drive new random value on GPIO pins
+ - Perform multiple random writes on randomly selected GPIO registers
+ - Perform multiple random reads on randomly selected GPIO registers'''
+ milestone: V2
+ tests: ["gpio_random_long_reg_writes_reg_reads"]
+ }
+ {
+ name: full_random
+ desc: '''GPIO full random test that performs any of following in each iteration:
+ - Drive new random value on GPIO pins such that GPIO inputs and GPIO outputs shall not
+ result in unknown value on any pin
+ - Write to one or more of `DIRECT_OUT`, `DIRECT_OE`, `MASKED_OUT_UPPER`,
+ `MASKED_OE_UPPER`, `MASKED_OE_LOWER` and `MASKED_OE_LOWER` registers such that GPIO
+ inputs and GPIO outputs shall not result in unknown value on any pin
+ - Write to one or more of GPIO interrupt registers that include `INTR_ENABLE`,
+ `INTR_CTRL_EN_FALLING`, `INTR_CTRL_EN_RISING`, `INTR_CTRL_EN_LVL_HIGH`,
+ `INTR_CTRL_EN_LVL_LOW` and `INTR_STATE`
+ - Write to other GPIO registers `DATA_IN`, `INTR_TEST`, `CTRL_EN_INPUT_FILTER`
+ - Read any one of the GPIO registers
+ - Apply hard reset'''
+ milestone: V2
+ tests: ["gpio_full_random"]
+ }
+ ]
+}