Skip to content

Commit a66a56f

Browse files
committed
[sw,rom_ext] Update boot_data functest to verify duplicate entries.
This update modifies the boot data functional test to account for the recently added redundancy where boot data entries are duplicated on each page. It introduces `write_dup_boot_data` to simulate various valid/invalid states using bitmaps and updates existing tests to iterate through these scenarios. Change-Id: I6767b3205759c1285c7e31e2802935cf1cf38ff9 Signed-off-by: Yi-Hsuan Deng <[email protected]>
1 parent 3411433 commit a66a56f

File tree

1 file changed

+70
-36
lines changed

1 file changed

+70
-36
lines changed

sw/device/silicon_creator/lib/boot_data_functest.c

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,28 @@ static void write_boot_data(const flash_ctrl_info_page_t *page, size_t index,
143143
"Flash write failed.");
144144
}
145145

146+
/**
147+
* Writes a boot data entry at the given page multiple times.
148+
149+
* This function is used to write the same boot data entry to multiple indices
150+
* of a flash info page, as specified by a bitmap.
151+
*
152+
* @param page Flash info page.
153+
* @param bitmap A bitmap where each bit represents an index in the page.
154+
* @param boot_data A boot data entry.
155+
*/
156+
static void write_dup_boot_data(const flash_ctrl_info_page_t *page,
157+
uint32_t bitmap, const boot_data_t *boot_data) {
158+
boot_data_t invalid = {0};
159+
for (size_t i = 0; i < kBootDataEntriesPerPage; ++i) {
160+
if ((bitmap >> i) & 1) {
161+
write_boot_data(page, i, boot_data);
162+
} else {
163+
write_boot_data(page, i, &invalid);
164+
}
165+
}
166+
}
167+
146168
/**
147169
* Reads the boot data entry at the given page and index.
148170
*
@@ -374,66 +396,78 @@ rom_error_t write_empty_test(void) {
374396
}
375397

376398
rom_error_t write_page_0_first_test(void) {
377-
erase_boot_data_pages();
378-
write_boot_data(kPages[0], 0, &kTestBootData);
379-
write_boot_data(kPages[1], 0, &kTestBootDataDual); // active page
380-
RETURN_IF_ERROR(boot_data_redundancy_check());
381-
382-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
383-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
399+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
400+
erase_boot_data_pages();
401+
write_dup_boot_data(kPages[0], bitmap, &kTestBootData);
402+
write_dup_boot_data(kPages[1], bitmap, &kTestBootDataDual); // active page
403+
RETURN_IF_ERROR(boot_data_redundancy_check());
404+
405+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
406+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
407+
}
384408
return kErrorOk;
385409
}
386410

387411
rom_error_t write_page_1_first_test(void) {
388-
erase_boot_data_pages();
389-
write_boot_data(kPages[0], 0, &kTestBootDataDual); // active page
390-
write_boot_data(kPages[1], 0, &kTestBootData);
391-
RETURN_IF_ERROR(boot_data_redundancy_check());
392-
393-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
394-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
412+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
413+
erase_boot_data_pages();
414+
write_dup_boot_data(kPages[0], bitmap, &kTestBootDataDual); // active page
415+
write_dup_boot_data(kPages[1], bitmap, &kTestBootData);
416+
RETURN_IF_ERROR(boot_data_redundancy_check());
417+
418+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
419+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
420+
}
395421
return kErrorOk;
396422
}
397423

398424
rom_error_t write_page_0_missing_test(void) {
399-
erase_boot_data_pages();
400-
write_boot_data(kPages[1], 0, &kTestBootDataDual); // active page
401-
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
425+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
426+
erase_boot_data_pages();
427+
write_dup_boot_data(kPages[1], bitmap, &kTestBootDataDual); // active page
428+
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
402429

403-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
404-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
430+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
431+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
432+
}
405433
return kErrorOk;
406434
}
407435

408436
rom_error_t write_page_1_missing_test(void) {
409-
erase_boot_data_pages();
410-
write_boot_data(kPages[0], 0, &kTestBootData); // active page
411-
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
437+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
438+
erase_boot_data_pages();
439+
write_dup_boot_data(kPages[0], bitmap, &kTestBootData); // active page
440+
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
412441

413-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
414-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
442+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
443+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
444+
}
415445
return kErrorOk;
416446
}
417447

418448
rom_error_t write_page_0_invalid_test(void) {
419-
erase_boot_data_pages();
420-
write_boot_data(kPages[1], 0, &kTestBootDataDual); // active page
421-
fill_with_invalidated_boot_data(kPages[0], 2, &kTestBootData);
422-
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
449+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
450+
erase_boot_data_pages();
451+
write_dup_boot_data(kPages[1], bitmap, &kTestBootDataDual); // active page
452+
fill_with_invalidated_boot_data(kPages[0], 2, &kTestBootData);
453+
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
423454

424-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
425-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
455+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
456+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2));
457+
}
426458
return kErrorOk;
427459
}
428460

429461
rom_error_t write_page_1_invalid_test(void) {
430-
erase_boot_data_pages();
431-
write_boot_data(kPages[0], 0, &kTestBootData); // active page
432-
fill_with_invalidated_boot_data(kPages[1], 2, &kTestBootData);
433-
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
462+
for (uint32_t bitmap = 1; bitmap <= 3; ++bitmap) {
463+
erase_boot_data_pages();
464+
write_dup_boot_data(kPages[0], bitmap, &kTestBootData); // active page
465+
fill_with_invalidated_boot_data(kPages[1], 2, &kTestBootData);
466+
CHECK(boot_data_redundancy_check() == kErrorBootDataInvalid);
434467

435-
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
436-
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
468+
RETURN_IF_ERROR(boot_data_write(&kTestBootData));
469+
RETURN_IF_ERROR(check_boot_data_redundency(kTestBootData.counter + 2 ^ 1));
470+
}
437471
return kErrorOk;
438472
}
439473

0 commit comments

Comments
 (0)