[dv,chip,clkmgr] Improve checks for clock measurements
Change clkmgr_testutils_check_measurement_counts to return status
instead of failing right away.
Create clkmgr_testutils_check_measurement_enables to avoid replicating
the checks in multiple tests.
Signed-off-by: Guillermo Maturana <maturana@google.com>
diff --git a/sw/device/lib/testing/clkmgr_testutils.c b/sw/device/lib/testing/clkmgr_testutils.c
index 8e2f506..79ca6a4 100644
--- a/sw/device/lib/testing/clkmgr_testutils.c
+++ b/sw/device/lib/testing/clkmgr_testutils.c
@@ -155,6 +155,23 @@
}
}
+bool clkmgr_testutils_check_measurement_enables(const dif_clkmgr_t *clkmgr,
+ dif_toggle_t expected_status) {
+ bool success = true;
+ for (int i = kDifClkmgrMeasureClockIo; i <= kDifClkmgrMeasureClockUsb; ++i) {
+ dif_clkmgr_measure_clock_t clock = (dif_clkmgr_measure_clock_t)i;
+ dif_toggle_t actual_status;
+ CHECK_DIF_OK(
+ dif_clkmgr_measure_counts_get_enable(clkmgr, clock, &actual_status));
+ if (actual_status != expected_status) {
+ LOG_INFO("Unexpected enable for clock %d: expected %s", i,
+ (expected_status == kDifToggleEnabled ? "enabled" : "disabled"));
+ success = false;
+ }
+ }
+ return success;
+}
+
void clkmgr_testutils_disable_clock_counts(const dif_clkmgr_t *clkmgr) {
LOG_INFO("Disabling all clock count measurements");
for (int i = 0; i <= kDifClkmgrMeasureClockUsb; ++i) {
@@ -163,16 +180,19 @@
}
}
-void clkmgr_testutils_check_measurement_counts(const dif_clkmgr_t *clkmgr) {
+bool clkmgr_testutils_check_measurement_counts(const dif_clkmgr_t *clkmgr) {
+ bool success = true;
dif_clkmgr_recov_err_codes_t err_codes;
CHECK_DIF_OK(dif_clkmgr_recov_err_code_get_codes(clkmgr, &err_codes));
if (err_codes != 0) {
LOG_ERROR("Unexpected recoverable error codes 0x%x", err_codes);
+ success = false;
} else {
LOG_INFO("Clock measurements are okay");
}
- // clear recoverable errors
+ // Clear recoverable errors.
CHECK_DIF_OK(dif_clkmgr_recov_err_code_clear_codes(clkmgr, ~0u));
+ return success;
}
void clkmgr_testutils_enable_external_clock_and_wait_for_completion(
diff --git a/sw/device/lib/testing/clkmgr_testutils.h b/sw/device/lib/testing/clkmgr_testutils.h
index 6de696a..e4a2e18 100644
--- a/sw/device/lib/testing/clkmgr_testutils.h
+++ b/sw/device/lib/testing/clkmgr_testutils.h
@@ -89,8 +89,21 @@
* Checks that there are no clock measurement errors.
*
* @param clkmgr A clkmgr DIF handle.
+ * @return False if any measurement has errors.
*/
-void clkmgr_testutils_check_measurement_counts(const dif_clkmgr_t *clkmgr);
+OT_WARN_UNUSED_RESULT
+bool clkmgr_testutils_check_measurement_counts(const dif_clkmgr_t *clkmgr);
+
+/**
+ * Check all measurement enables.
+ *
+ * @param clkmgr A clkmgr DIF handle.
+ * @param expected_status The expected status of the enables.
+ * @return False if any enable status is unexpected.
+ */
+OT_WARN_UNUSED_RESULT
+bool clkmgr_testutils_check_measurement_enables(const dif_clkmgr_t *clkmgr,
+ dif_toggle_t expected_status);
/**
* Disable all clock measurements.
diff --git a/sw/device/tests/ast_clk_outs_test.c b/sw/device/tests/ast_clk_outs_test.c
index fe75f2b..d8974c4 100644
--- a/sw/device/tests/ast_clk_outs_test.c
+++ b/sw/device/tests/ast_clk_outs_test.c
@@ -40,16 +40,6 @@
static dif_clkmgr_t clkmgr;
static dif_pwrmgr_t pwrmgr;
-// Will flag a failure if any measurements are enabled.
-void check_all_measurements_are_disabled(const dif_clkmgr_t *clkmgr) {
- dif_toggle_t status;
- for (int i = kDifClkmgrMeasureClockIo; i <= kDifClkmgrMeasureClockUsb; ++i) {
- dif_clkmgr_measure_clock_t clock = (dif_clkmgr_measure_clock_t)i;
- CHECK_DIF_OK(dif_clkmgr_measure_counts_get_enable(clkmgr, clock, &status));
- CHECK(status == kDifToggleDisabled);
- }
-}
-
bool test_main(void) {
dif_sensor_ctrl_t sensor_ctrl;
dif_aon_timer_t aon_timer;
@@ -89,7 +79,7 @@
busy_spin_micros(kMeasurementDelayMicros);
// check results
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
clkmgr_testutils_disable_clock_counts(&clkmgr);
// Set wakeup timer to 100 us to have enough down time, and also wait before
@@ -120,7 +110,8 @@
} else if (pwrmgr_testutils_is_wakeup_reason(
&pwrmgr, kDifPwrmgrWakeupRequestSourceFive)) {
// Fail if some measurements are enabled.
- check_all_measurements_are_disabled(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_enables(&clkmgr,
+ kDifToggleDisabled));
// Check measurement control regwen is enabled.
dif_toggle_t state;
CHECK_DIF_OK(dif_clkmgr_measure_ctrl_get_enable(&clkmgr, &state));
@@ -141,7 +132,7 @@
&clkmgr, /*jitter_enabled=*/false, /*external_clk=*/false,
/*low_speed=*/false);
busy_spin_micros(kMeasurementDelayMicros);
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
clkmgr_testutils_disable_clock_counts(&clkmgr);
LOG_INFO("TEST: done");
diff --git a/sw/device/tests/clkmgr_external_clk_src_for_sw_impl.c b/sw/device/tests/clkmgr_external_clk_src_for_sw_impl.c
index 1990716..9d801f4 100644
--- a/sw/device/tests/clkmgr_external_clk_src_for_sw_impl.c
+++ b/sw/device/tests/clkmgr_external_clk_src_for_sw_impl.c
@@ -49,7 +49,7 @@
&clkmgr, /*jitter_enabled=*/false, /*external_clk=*/false,
/*low_speed=*/false);
busy_spin_micros(kMeasurementDelayMicros);
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
clkmgr_testutils_disable_clock_counts(&clkmgr);
// Configure external clock:
@@ -70,6 +70,6 @@
&clkmgr, /*jitter_enabled=*/false, /*external_clk=*/true,
/*low_speed=*/!fast_ext_clk);
busy_spin_micros(kMeasurementDelayMicros);
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
clkmgr_testutils_disable_clock_counts(&clkmgr);
}
diff --git a/sw/device/tests/clkmgr_reset_frequency_test.c b/sw/device/tests/clkmgr_reset_frequency_test.c
index 3bcfe1c..9dfb677 100644
--- a/sw/device/tests/clkmgr_reset_frequency_test.c
+++ b/sw/device/tests/clkmgr_reset_frequency_test.c
@@ -34,16 +34,6 @@
kMeasurementsPerRound = 100,
};
-// Will flag a failure if any measurements are enabled.
-void check_all_measurements_are_disabled(const dif_clkmgr_t *clkmgr) {
- dif_toggle_t status;
- for (int i = kDifClkmgrMeasureClockIo; i <= kDifClkmgrMeasureClockUsb; ++i) {
- dif_clkmgr_measure_clock_t clock = (dif_clkmgr_measure_clock_t)i;
- CHECK_DIF_OK(dif_clkmgr_measure_counts_get_enable(clkmgr, clock, &status));
- CHECK(status == kDifToggleDisabled);
- }
-}
-
bool test_main(void) {
dif_clkmgr_t clkmgr;
dif_rstmgr_t rstmgr;
@@ -90,8 +80,9 @@
CHECK_DIF_OK(dif_rstmgr_software_device_reset(&rstmgr));
} else if (rstmgr_testutils_reset_info_any(&rstmgr, kDifRstmgrResetInfoSw)) {
LOG_INFO("Back from rstmgr SW reset");
- check_all_measurements_are_disabled(&clkmgr);
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_enables(&clkmgr,
+ kDifToggleDisabled));
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
return true;
} else {
dif_rstmgr_reset_info_bitfield_t rst_info;
diff --git a/sw/device/tests/clkmgr_sleep_frequency_test.c b/sw/device/tests/clkmgr_sleep_frequency_test.c
index d9706e8..c912b9c 100644
--- a/sw/device/tests/clkmgr_sleep_frequency_test.c
+++ b/sw/device/tests/clkmgr_sleep_frequency_test.c
@@ -52,22 +52,6 @@
static volatile bool isr_entered;
-// Will flag a failure if any measurements are disabled.
-static void check_all_measurements_are_enabled(const dif_clkmgr_t *clkmgr) {
- dif_toggle_t status;
- bool success = true;
- for (int i = kDifClkmgrMeasureClockIo; i <= kDifClkmgrMeasureClockUsb; ++i) {
- dif_clkmgr_measure_clock_t clock = (dif_clkmgr_measure_clock_t)i;
- CHECK_DIF_OK(dif_clkmgr_measure_counts_get_enable(clkmgr, clock, &status));
- if (status != kDifToggleEnabled) {
- LOG_INFO("Expected measurement enabled for clock %s(%d)",
- clkmgr_testutils_measurement_name(clock), i);
- success = false;
- }
- }
- CHECK(success);
-}
-
/**
* External interrupt handler.
*/
@@ -126,7 +110,7 @@
busy_spin_micros(kMeasurementDelayMicros);
// check results
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
clkmgr_testutils_disable_clock_counts(&clkmgr);
// Start new round of measurements.
@@ -163,8 +147,8 @@
CHECK(isr_entered);
// Interrupt happened. Check the measurement state.
- clkmgr_testutils_check_measurement_counts(&clkmgr);
- check_all_measurements_are_enabled(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
+ CHECK(clkmgr_testutils_check_measurement_enables(&clkmgr, kDifToggleEnabled));
return true;
}
diff --git a/sw/device/tests/sim_dv/uart_tx_rx_test.c b/sw/device/tests/sim_dv/uart_tx_rx_test.c
index 8f2aa8b..478e830 100644
--- a/sw/device/tests/sim_dv/uart_tx_rx_test.c
+++ b/sw/device/tests/sim_dv/uart_tx_rx_test.c
@@ -567,7 +567,7 @@
// Execute the test.
execute_test(&uart);
- clkmgr_testutils_check_measurement_counts(&clkmgr);
+ CHECK(clkmgr_testutils_check_measurement_counts(&clkmgr));
return true;
}