Merge "Add clkmgr tests to edacloud"
diff --git a/hw/top_matcha/dv/chip_sim_cfg.hjson b/hw/top_matcha/dv/chip_sim_cfg.hjson
index 2f574e4..8be09e9 100644
--- a/hw/top_matcha/dv/chip_sim_cfg.hjson
+++ b/hw/top_matcha/dv/chip_sim_cfg.hjson
@@ -409,98 +409,100 @@
tests: [
{
name: chip_sw_smc_isp_wrapper_tpg_64_64_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_isp_wrapper_tpg_64_64_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_env_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_env_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_isp_wrapper_irq_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_isp_wrapper_irq_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_tlul_mailbox_test
- uvm_test_seq: chip_sw_smc_base_vseq
- sw_images: ["//sw/device/tests/smc:smc_tlul_mailbox_test:6:matcha"]
- en_run_modes: ["sw_test_mode_test_simple_sec"]
+ uvm_test_seq: chip_sw_base_vseq
+ sw_images: [
+ "//sw/device/tests:tlul_mailbox_test:1:ot_flash_binary:matcha",
+ "//sw/device/tests/smc:smc_tlul_mailbox_test:6:matcha"]
+ en_run_modes: ["sw_test_mode_test_rom_with_smc"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_cam_irq_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_cam_irq_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_ml_sram_smoketest
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_ml_dmem_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_kelvin_hello_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_kelvin_hello_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_ml_top_irq_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_ml_top_irq_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_supervisor_mode_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_supervisor_mode_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_virtual_memory_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_virtual_memory_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_interrupt_boundary_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_interrupt_boundary_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_lsu_interrupt_boundary_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_lsu_interrupt_boundary_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_page_boundary_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_page_boundary_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_lsu_page_boundary_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_lsu_page_boundary_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
@@ -508,8 +510,8 @@
{
name: chip_sw_atomics_test
uvm_test_seq: chip_sw_base_vseq
- sw_images: ["//sw/device/tests:atomics_test:1:ot_flash_binary:matcha"]
- en_run_modes: ["sw_test_mode_test_rom"]
+ sw_images: ["//sw/device/tests/smc:smc_atomics_test:6:matcha"]
+ en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
@@ -549,35 +551,35 @@
}
{
name: chip_sw_smc_i2s_rx_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_i2s_rx_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_i2s_tx_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_i2s_tx_test:6:matcha"]
- en_run_modes: ["sw_test_mode_test_rom"]
+ en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_rv_timer_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_rv_timer_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_kelvin_checksum_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_kelvin_checksum_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
}
{
name: chip_sw_smc_isp_wrapper_test
- uvm_test_seq: chip_sw_smc_base_vseq
+ uvm_test_seq: chip_sw_base_vseq
sw_images: ["//sw/device/tests/smc:smc_isp_wrapper_test:6:matcha"]
en_run_modes: ["sw_test_mode_test_simple_sec"]
run_opts:["+sw_test_timeout_ns=40_000_000"]
@@ -2011,6 +2013,7 @@
tests: [
"chip_sw_alert_test",
"chip_sw_aon_timer_smoketest",
+ "chip_sw_atomics_test",
"chip_sw_cam_ctrl_test",
"chip_sw_clkmgr_smoketest",
"chip_sw_crt_test",
@@ -2031,6 +2034,7 @@
"chip_sw_smc_ctrl_test",
"chip_sw_smc_env_test",
"chip_sw_smc_i2s_rx_test",
+ "chip_sw_smc_i2s_tx_test",
"chip_sw_smc_interrupt_boundary_test",
"chip_sw_smc_isp_wrapper_irq_test",
"chip_sw_smc_isp_wrapper_test",
@@ -2042,6 +2046,7 @@
"chip_sw_smc_page_boundary_test",
"chip_sw_smc_rv_timer_test",
"chip_sw_smc_supervisor_mode_test",
+ "chip_sw_smc_tlul_mailbox_test",
"chip_sw_smc_virtual_memory_test",
"chip_sw_spi_device_tx_rx",
"chip_sw_spi_host_tx_rx",
@@ -2062,6 +2067,7 @@
"chip_sw_alert_test",
"chip_sw_aon_timer_smoketest",
"chip_sw_ast_clk_rst_inputs",
+ "chip_sw_atomics_test",
"chip_sw_cam_ctrl_test",
"chip_sw_clkmgr_external_clk_src_for_sw_fast",
"chip_sw_clkmgr_external_clk_src_for_sw_slow",
@@ -2109,6 +2115,7 @@
"chip_sw_smc_ctrl_test",
"chip_sw_smc_env_test",
"chip_sw_smc_i2s_rx_test",
+ "chip_sw_smc_i2s_tx_test",
"chip_sw_smc_interrupt_boundary_test",
"chip_sw_smc_isp_wrapper_irq_test",
"chip_sw_smc_isp_wrapper_test",
@@ -2120,6 +2127,7 @@
"chip_sw_smc_page_boundary_test",
"chip_sw_smc_rv_timer_test",
"chip_sw_smc_supervisor_mode_test",
+ "chip_sw_smc_tlul_mailbox_test",
"chip_sw_smc_virtual_memory_test",
"chip_sw_spi_device_pass_through",
"chip_sw_spi_device_tx_rx",
diff --git a/hw/top_matcha/dv/env/chip_env.core b/hw/top_matcha/dv/env/chip_env.core
index 8b229e1..28fb4bf 100644
--- a/hw/top_matcha/dv/env/chip_env.core
+++ b/hw/top_matcha/dv/env/chip_env.core
@@ -55,7 +55,6 @@
- seq_lib/chip_prim_tl_access_vseq.sv: {is_include_file: true}
- seq_lib/chip_tap_straps_vseq.sv: {is_include_file: true}
- seq_lib/chip_sw_base_vseq.sv: {is_include_file: true}
- - seq_lib/chip_sw_smc_base_vseq.sv: {is_include_file: true}
- seq_lib/chip_sw_uart_smoke_vseq.sv: {is_include_file: true}
- seq_lib/chip_jtag_base_vseq.sv: {is_include_file: true}
- seq_lib/chip_sw_alert_handler_entropy_vseq.sv: {is_include_file: true}
diff --git a/hw/top_matcha/dv/env/seq_lib/chip_sw_base_vseq.sv b/hw/top_matcha/dv/env/seq_lib/chip_sw_base_vseq.sv
index f2a74c4..ad8fdc2 100644
--- a/hw/top_matcha/dv/env/seq_lib/chip_sw_base_vseq.sv
+++ b/hw/top_matcha/dv/env/seq_lib/chip_sw_base_vseq.sv
@@ -1,4 +1,3 @@
-// Copyright 2023 Google LLC.
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
@@ -59,6 +58,7 @@
`uvm_info(`gfn, "Starting cpu_init", UVM_MEDIUM)
// Initialize the sw logger interface.
+ // SEC
foreach (cfg.sw_images[i]) begin
if (i inside {SwTypeRom, SwTypeDebug, SwTypeTestSlotA, SwTypeTestSlotB}) begin
cfg.sw_logger_vif.add_sw_log_db(cfg.sw_images[i]);
@@ -67,9 +67,19 @@
cfg.sw_logger_vif.sw_log_addr = SW_DV_LOG_ADDR;
cfg.sw_logger_vif.write_sw_logs_to_file = cfg.write_sw_logs_to_file;
cfg.sw_logger_vif.ready();
+ // SMC
+ foreach (cfg.sw_images[i]) begin
+ if (i inside {SwTypeSmc}) begin
+ cfg.sw_smc_logger_vif.add_sw_log_db(cfg.sw_images[i]);
+ end
+ end
+ cfg.sw_smc_logger_vif.sw_log_addr = SW_DV_SMC_LOG_ADDR;
+ cfg.sw_smc_logger_vif.write_sw_logs_to_file = cfg.write_sw_logs_to_file;
+ cfg.sw_smc_logger_vif.ready();
// Initialize the sw test status.
- cfg.sw_test_status_vif.sw_test_status_addr = SW_DV_TEST_STATUS_ADDR;
+ cfg.sw_test_status_vif.sw_test_status_addr = SW_DV_TEST_STATUS_ADDR;
+ cfg.sw_smc_test_status_vif.sw_test_status_addr = SW_DV_SMC_TEST_STATUS_ADDR;
`uvm_info(`gfn, "Initializing SRAMs", UVM_MEDIUM)
@@ -119,6 +129,11 @@
cfg.mem_bkdr_util_h[FlashBank1Data].load_mem_from_file(
{cfg.sw_images[SwTypeTestSlotB], ".64.scr.vmem"});
end
+ // SMC RAM sw imsage load
+ if (cfg.sw_images.exists(SwTypeSmc)) begin
+ cfg.mem_bkdr_util_h[Smc_ram].load_mem_from_file(
+ {cfg.sw_images[SwTypeSmc], ".32.vmem"});
+ end
config_jitter();
@@ -232,7 +247,7 @@
fork
begin: isolation_thread
fork
- wait (cfg.sw_test_status_vif.sw_test_done);
+ wait (cfg.sw_test_status_vif.sw_test_done || cfg.sw_smc_test_status_vif.sw_test_done);
#(cfg.sw_test_timeout_ns * 1ns);
join_any
disable fork;
@@ -243,15 +258,24 @@
// Print pass / fail message to the log.
virtual function void log_sw_test_status();
- case (cfg.sw_test_status_vif.sw_test_status)
- SwTestStatusPassed: `uvm_info(`gfn, "SW TEST PASSED!", UVM_LOW)
- SwTestStatusFailed: `uvm_error(`gfn, "SW TEST FAILED!")
- default: begin
- // If the SW test has not reached the passed / failed state, then it timed out.
+ if(cfg.sw_test_status_vif.sw_test_done || cfg.sw_smc_test_status_vif.sw_test_done) begin
+ if(cfg.sw_test_status_vif.sw_test_done) begin
+ case (cfg.sw_test_status_vif.sw_test_status)
+ SwTestStatusPassed: `uvm_info(`gfn, "[SEC] SW TEST PASSED!", UVM_LOW)
+ SwTestStatusFailed: `uvm_error(`gfn, "[SEC] SW TEST FAILED!")
+ endcase
+ end
+ if(cfg.sw_smc_test_status_vif.sw_test_done) begin
+ case (cfg.sw_smc_test_status_vif.sw_test_status)
+ SwTestStatusPassed: `uvm_info(`gfn, "[SMC] SW TEST PASSED!", UVM_LOW)
+ SwTestStatusFailed: `uvm_error(`gfn, "[SMC] SW TEST FAILED!")
+ endcase
+ end
+ end
+ else begin
`uvm_error(`gfn, $sformatf("SW TEST TIMED OUT. STATE: %0s, TIMEOUT = %0d ns\n",
- cfg.sw_test_status_vif.sw_test_status.name(), cfg.sw_test_timeout_ns))
- end
- endcase
+ cfg.sw_smc_test_status_vif.sw_test_status.name(), cfg.sw_test_timeout_ns))
+ end
endfunction
// Configure the provided spi_agent_cfg to use flash mode, and add the
diff --git a/hw/top_matcha/dv/env/seq_lib/chip_sw_smc_base_vseq.sv b/hw/top_matcha/dv/env/seq_lib/chip_sw_smc_base_vseq.sv
deleted file mode 100644
index 612c3f2..0000000
--- a/hw/top_matcha/dv/env/seq_lib/chip_sw_smc_base_vseq.sv
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2023 Google LLC.
-// Copyright lowRISC contributors.
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-
-class chip_sw_smc_base_vseq extends chip_sw_base_vseq;
- `uvm_object_utils(chip_sw_smc_base_vseq)
-
- `uvm_object_new
-
- virtual task cpu_init();
- super.cpu_init();
-
- `uvm_info(`gfn, "Starting SMC cpu_init", UVM_MEDIUM)
-
- foreach (cfg.sw_images[i]) begin
- if (i inside {SwTypeSmc}) begin
- cfg.sw_smc_logger_vif.add_sw_log_db(cfg.sw_images[i]);
- end
- end
- cfg.sw_smc_logger_vif.sw_log_addr = SW_DV_SMC_LOG_ADDR;
- cfg.sw_smc_logger_vif.write_sw_logs_to_file = cfg.write_sw_logs_to_file;
- cfg.sw_smc_logger_vif.ready();
-
- // Initialize the sw test status.
- cfg.sw_smc_test_status_vif.sw_test_status_addr = SW_DV_SMC_TEST_STATUS_ADDR;
-
- // SMC RAM sw image load
- if (cfg.sw_images.exists(SwTypeSmc)) begin
- cfg.mem_bkdr_util_h[Smc_ram].load_mem_from_file(
- {cfg.sw_images[SwTypeSmc], ".32.vmem"});
- end
-
- `uvm_info(`gfn, "SMC cpu_init completed", UVM_MEDIUM)
- endtask
-
- virtual task body();
- cfg.sw_smc_test_status_vif.set_num_iterations(num_trans);
- // Initialize the CPU to kick off the sw test. TODO: Should be called in pre_start() instead.
- cpu_init();
- endtask
-
- virtual task wait_for_sw_test_done();
- `uvm_info(`gfn, "Waiting for the SW test to finish", UVM_MEDIUM)
- fork
- begin: isolation_thread
- fork
- wait (cfg.sw_smc_test_status_vif.sw_test_done);
- #(cfg.sw_test_timeout_ns * 1ns);
- join_any
- disable fork;
- log_sw_test_status();
- end: isolation_thread
- join
- endtask
-
- virtual function void log_sw_test_status();
- case (cfg.sw_smc_test_status_vif.sw_test_status)
- SwTestStatusPassed: `uvm_info(`gfn, "SW TEST PASSED!", UVM_LOW)
- SwTestStatusFailed: `uvm_error(`gfn, "SW TEST FAILED!")
- default: begin
- // If the SW test has not reached the passed / failed state, then it timed out.
- `uvm_error(`gfn, $sformatf("SW TEST TIMED OUT. STATE: %0s, TIMEOUT = %0d ns\n",
- cfg.sw_smc_test_status_vif.sw_test_status.name(), cfg.sw_test_timeout_ns))
- end
- endcase
- endfunction
-
-endclass
diff --git a/hw/top_matcha/dv/env/seq_lib/chip_vseq_list.sv b/hw/top_matcha/dv/env/seq_lib/chip_vseq_list.sv
index 3701ea8..ebe1a2b 100644
--- a/hw/top_matcha/dv/env/seq_lib/chip_vseq_list.sv
+++ b/hw/top_matcha/dv/env/seq_lib/chip_vseq_list.sv
@@ -11,7 +11,6 @@
`include "chip_jtag_mem_vseq.sv"
// This needs to be listed prior to all sequences that derive from it.
`include "chip_sw_base_vseq.sv"
-`include "chip_sw_smc_base_vseq.sv"
`include "chip_sw_uart_smoke_vseq.sv"
`include "chip_jtag_base_vseq.sv"
`include "chip_prim_tl_access_vseq.sv"
diff --git a/sw/device/tests/smc/BUILD b/sw/device/tests/smc/BUILD
index ede3404..66f08d0 100644
--- a/sw/device/tests/smc/BUILD
+++ b/sw/device/tests/smc/BUILD
@@ -347,8 +347,8 @@
],
deps = [
"//sw/device/lib/dif:i2s",
+ "//sw/device/lib/dif:rv_plic_smc",
"//sw/device/tests:test_lib_smc",
- "@lowrisc_opentitan//sw/device/lib/dif:rv_plic",
"@lowrisc_opentitan//sw/device/lib/runtime:irq",
],
)
@@ -365,8 +365,8 @@
],
deps = [
"//sw/device/lib/dif:i2s",
+ "//sw/device/lib/dif:rv_plic_smc",
"//sw/device/tests:test_lib_smc",
- "@lowrisc_opentitan//sw/device/lib/dif:rv_plic",
"@lowrisc_opentitan//sw/device/lib/runtime:irq",
],
)
diff --git a/sw/device/tests/smc/smc_i2s_tx_test.c b/sw/device/tests/smc/smc_i2s_tx_test.c
index 7f14988..efd556c 100644
--- a/sw/device/tests/smc/smc_i2s_tx_test.c
+++ b/sw/device/tests/smc/smc_i2s_tx_test.c
@@ -125,7 +125,7 @@
48); // divide by 96
mmio_region_write32(i2s.base_addr, I2S_CTRL_REG_OFFSET, reg_val);
- uint32_t samples_to_tx = kDeviceType == kDeviceSimVerilator
+ uint32_t samples_to_tx = kDeviceType == kDeviceSimVerilator || kDeviceType == kDeviceSimDV
? 6
: (i2s_440hz_audio_tx_len / sizeof(uint32_t));
while (tx_audio_count < samples_to_tx) {