Software APIs
lc_ctrl_testutils.c
1// Copyright lowRISC contributors (OpenTitan project).
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4
5#include "sw/device/lib/testing/lc_ctrl_testutils.h"
6
7#include <stdbool.h>
8
11#include "sw/device/lib/testing/test_framework/check.h"
12
13status_t lc_ctrl_testutils_lc_state_log(const dif_lc_ctrl_state_t *state) {
14 switch (*state) {
16 LOG_INFO("Life cycle state: TEST_UNLOCKED0");
17 break;
19 LOG_INFO("Life cycle state: TEST_UNLOCKED1");
20 break;
22 LOG_INFO("Life cycle state: TEST_UNLOCKED2");
23 break;
25 LOG_INFO("Life cycle state: TEST_UNLOCKED3");
26 break;
28 LOG_INFO("Life cycle state: TEST_UNLOCKED4");
29 break;
31 LOG_INFO("Life cycle state: TEST_UNLOCKED5");
32 break;
34 LOG_INFO("Life cycle state: TEST_UNLOCKED6");
35 break;
37 LOG_INFO("Life cycle state: TEST_UNLOCKED7");
38 break;
40 LOG_INFO("Life cycle state: DEV");
41 break;
43 LOG_INFO("Life cycle state: PROD");
44 break;
46 LOG_INFO("Life cycle state: PROD_END");
47 break;
49 LOG_INFO("Life cycle state: RMA");
50 break;
51 default:
52 LOG_ERROR("CPU is executing in locked/invalid life cycle state: %d",
53 (uint32_t)state);
54 return FAILED_PRECONDITION();
55 }
56 return OK_STATUS();
57}
58
59status_t lc_ctrl_testutils_debug_func_enabled(const dif_lc_ctrl_t *lc_ctrl,
60 bool *debug_enabled) {
62 TRY(dif_lc_ctrl_get_state(lc_ctrl, &state));
63
64 switch (state) {
75 *debug_enabled = true;
76 break;
77 default:
78 *debug_enabled = false;
79 break;
80 }
81 return OK_STATUS();
82}
83
84status_t lc_ctrl_testutils_check_transition_count(const dif_lc_ctrl_t *lc_ctrl,
85 uint8_t exp_lc_count) {
86 LOG_INFO("Read LC count and check with expect_val=%d", exp_lc_count);
87 uint8_t lc_count;
88 TRY(dif_lc_ctrl_get_attempts(lc_ctrl, &lc_count));
89 TRY_CHECK(lc_count == exp_lc_count,
90 "LC_count error, expected %d but actual count is %d", exp_lc_count,
91 lc_count);
92 return OK_STATUS();
93}
94
95status_t lc_ctrl_testutils_check_lc_state(const dif_lc_ctrl_t *lc_ctrl,
96 dif_lc_ctrl_state_t exp_lc_state) {
97 LOG_INFO("Read LC state and check with expect_state=%d", exp_lc_state);
98 dif_lc_ctrl_state_t lc_state;
99 TRY(dif_lc_ctrl_get_state(lc_ctrl, &lc_state));
100 TRY_CHECK(lc_state == exp_lc_state,
101 "LC_state error, expected %d but actual state is %d", exp_lc_state,
102 lc_state);
103 return OK_STATUS();
104}
105
106status_t lc_ctrl_testutils_operational_state_check(
107 const dif_lc_ctrl_t *lc_ctrl) {
109 TRY(dif_lc_ctrl_get_state(lc_ctrl, &state));
110 if (state == kDifLcCtrlStateProd || state == kDifLcCtrlStateProdEnd ||
111 state == kDifLcCtrlStateDev) {
112 return OK_STATUS();
113 }
114 return FAILED_PRECONDITION();
115}