5 #include "sw/device/lib/base/status.h"
8 #include "sw/device/silicon_creator/lib/boot_svc/boot_svc_msg.h"
9 #include "sw/device/silicon_creator/lib/boot_svc/boot_svc_next_boot_bl0_slot.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();
18 TRY_CHECK(state->primary_side ==
'A');
19 boot_svc_next_boot_bl0_slot_req_init(
21 kBootSlotUnspecified, &msg.next_boot_bl0_slot_req);
24 state->state = kBootSvcTestStateNextSideB;
32 TRY(boot_svc_header_check(&msg.
header));
33 TRY_CHECK(msg.
header.
type == kBootSvcNextBl0SlotResType);
34 TRY_CHECK(msg.next_boot_bl0_slot_res.status == kErrorOk);
35 TRY_CHECK(msg.next_boot_bl0_slot_res.primary_bl0_slot == kBootSlotB);
36 TRY_CHECK(state->current_side ==
'B');
37 TRY_CHECK(state->primary_side ==
'B');
38 if (state->boots == 4) {
40 boot_svc_next_boot_bl0_slot_req_init(
42 kBootSlotUnspecified, &msg.next_boot_bl0_slot_req);
44 state->state = kBootSvcTestStateReturnSideA;
53 TRY(boot_svc_header_check(&msg.
header));
54 TRY_CHECK(msg.
header.
type == kBootSvcNextBl0SlotResType);
55 TRY_CHECK(state->current_side ==
'A');
56 TRY_CHECK(state->primary_side ==
'A');
57 TRY_CHECK(msg.next_boot_bl0_slot_res.primary_bl0_slot == kBootSlotA);
58 state->state = kBootSvcTestStateFinal;
62 static status_t next_boot_bl0_slot_test(
void) {
64 TRY(boot_svc_test_init(retram, kBootSvcTestPrimaryBl0));
68 LOG_INFO(
"Test state = %d", state->state);
69 LOG_INFO(
"CurrentBootLog: %d:%s", state->boots, state->partition);
70 switch (state->state) {
71 case kBootSvcTestStateInit:
72 TRY(initialize(retram, state));
74 case kBootSvcTestStateNextSideB:
75 TRY(check_side_b(retram, state));
77 case kBootSvcTestStateReturnSideA:
78 TRY(check_return_side_a(retram, state));
80 case kBootSvcTestStateFinal:
81 LOG_INFO(
"FinalBootLog: %d:%s", state->boots, state->partition);
84 LOG_ERROR(
"Unknown state: %d", state->state);
91 status_t sts = next_boot_bl0_slot_test();
92 if (status_err(sts)) {
93 LOG_ERROR(
"next_boot_bl0_slot_test: %r", sts);
95 return status_ok(sts);