5 #include "sw/device/lib/base/status.h"
7 #include "sw/device/lib/testing/test_framework/check.h"
9 #include "sw/device/silicon_creator/lib/boot_svc/boot_svc_min_bl0_sec_ver.h"
10 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
11 #include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
12 #include "sw/device/silicon_creator/rom_ext/e2e/boot_svc/boot_svc_test_lib.h"
14 OTTF_DEFINE_TEST_CONFIG();
16 #define MANIFEST_SEC_VER 4
20 boot_svc_min_bl0_sec_ver_req_init(2, &msg.min_bl0_sec_ver_req);
22 state->state = kBootSvcTestStateMinSecAdvance;
29 TRY(boot_svc_header_check(&msg.
header));
30 TRY_CHECK(msg.
header.
type == kBootSvcMinBl0SecVerResType);
31 LOG_INFO(
"Response: status=%08x min_bl0_sec_ver=%d",
32 msg.min_bl0_sec_ver_res.status,
33 msg.min_bl0_sec_ver_res.min_bl0_sec_ver);
35 TRY_CHECK(msg.min_bl0_sec_ver_res.status == kErrorOk);
37 if (msg.min_bl0_sec_ver_res.min_bl0_sec_ver < MANIFEST_SEC_VER) {
39 boot_svc_min_bl0_sec_ver_req_init(
40 msg.min_bl0_sec_ver_res.min_bl0_sec_ver + 1, &msg.min_bl0_sec_ver_req);
45 if (msg.min_bl0_sec_ver_res.min_bl0_sec_ver == MANIFEST_SEC_VER) {
47 state->state = kBootSvcTestStateMinSecTooFar;
48 boot_svc_min_bl0_sec_ver_req_init(
49 msg.min_bl0_sec_ver_res.min_bl0_sec_ver + 1, &msg.min_bl0_sec_ver_req);
58 TRY(boot_svc_header_check(&msg.
header));
59 TRY_CHECK(msg.
header.
type == kBootSvcMinBl0SecVerResType);
60 LOG_INFO(
"Response: status=%08x min_bl0_sec_ver=%d",
61 msg.min_bl0_sec_ver_res.status,
62 msg.min_bl0_sec_ver_res.min_bl0_sec_ver);
63 TRY_CHECK(msg.min_bl0_sec_ver_res.status == kErrorBootSvcBadSecVer);
64 TRY_CHECK(msg.min_bl0_sec_ver_res.min_bl0_sec_ver == MANIFEST_SEC_VER);
67 state->state = kBootSvcTestStateMinSecGoBack;
68 boot_svc_min_bl0_sec_ver_req_init(msg.min_bl0_sec_ver_res.min_bl0_sec_ver - 1,
69 &msg.min_bl0_sec_ver_req);
77 TRY(boot_svc_header_check(&msg.
header));
78 TRY_CHECK(msg.
header.
type == kBootSvcMinBl0SecVerResType);
79 LOG_INFO(
"Response: status=%08x min_bl0_sec_ver=%d",
80 msg.min_bl0_sec_ver_res.status,
81 msg.min_bl0_sec_ver_res.min_bl0_sec_ver);
82 TRY_CHECK(msg.min_bl0_sec_ver_res.status == kErrorBootSvcBadSecVer);
83 TRY_CHECK(msg.min_bl0_sec_ver_res.min_bl0_sec_ver == MANIFEST_SEC_VER);
86 state->state = kBootSvcTestStateFinal;
90 static status_t min_sec_ver_test(
void) {
92 TRY(boot_svc_test_init(retram, kBootSvcTestBl0MinSecVer));
96 LOG_INFO(
"Test state = %d", state->state);
97 switch (state->state) {
98 case kBootSvcTestStateInit:
99 TRY(initialize(retram, state));
101 case kBootSvcTestStateMinSecAdvance:
102 TRY(advance(retram, state));
104 case kBootSvcTestStateMinSecTooFar:
105 TRY(too_far(retram, state));
107 case kBootSvcTestStateMinSecGoBack:
108 TRY(go_back(retram, state));
110 case kBootSvcTestStateFinal:
111 LOG_INFO(
"FinalBootLog: %d:%s", state->boots, state->partition);
121 if (status_err(sts)) {
124 return status_ok(sts);