7 #include "gtest/gtest.h"
9 #include "sw/device/lib/base/mock_mmio.h"
10 #include "sw/device/lib/base/multibits.h"
14 #include "flash_ctrl_regs.h"
16 namespace dif_flash_ctrl_unittest {
59 bool bool_arg =
false;
66 uint32_t data_arg = 0;
90 nullptr, 0, toggle_arg));
92 nullptr, 0, &toggle_arg));
140 nullptr, 0, toggle_arg));
142 nullptr, 0, &toggle_arg));
173 uint32_t scratch_arg = 0;
179 TEST_F(FlashCtrlTest, EnableFlash) {
181 EXPECT_WRITE32(FLASH_CTRL_DIS_REG_OFFSET, kMultiBitBool4True);
184 EXPECT_READ32(FLASH_CTRL_DIS_REG_OFFSET, kMultiBitBool4True);
188 EXPECT_WRITE32(FLASH_CTRL_DIS_REG_OFFSET, kMultiBitBool4False);
191 EXPECT_READ32(FLASH_CTRL_DIS_REG_OFFSET, kMultiBitBool4False);
196 TEST_F(FlashCtrlTest, EnableFetch) {
198 EXPECT_WRITE32(FLASH_CTRL_EXEC_REG_OFFSET, 0);
201 EXPECT_READ32(FLASH_CTRL_EXEC_REG_OFFSET, 0);
205 EXPECT_WRITE32(FLASH_CTRL_EXEC_REG_OFFSET, FLASH_CTRL_PARAM_EXEC_EN);
208 EXPECT_READ32(FLASH_CTRL_EXEC_REG_OFFSET, FLASH_CTRL_PARAM_EXEC_EN);
213 TEST_F(FlashCtrlTest, ControllerInit) {
214 EXPECT_READ32(FLASH_CTRL_INIT_REG_OFFSET, 0);
215 EXPECT_WRITE32(FLASH_CTRL_INIT_REG_OFFSET, {{FLASH_CTRL_INIT_VAL_BIT, 1}});
218 EXPECT_READ32(FLASH_CTRL_INIT_REG_OFFSET, {{FLASH_CTRL_INIT_VAL_BIT, 1}});
222 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
224 {FLASH_CTRL_STATUS_INIT_WIP_BIT, 1},
227 EXPECT_EQ(
status.controller_init_wip, 1);
229 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
231 {FLASH_CTRL_STATUS_INIT_WIP_BIT, 0},
234 EXPECT_EQ(
status.controller_init_wip, 0);
237 TEST_F(FlashCtrlTest, SetProgPermissions) {
240 .repair_prog_type = 1,
243 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
244 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 1}});
246 EXPECT_WRITE32(FLASH_CTRL_PROG_TYPE_EN_REG_OFFSET,
248 {FLASH_CTRL_PROG_TYPE_EN_NORMAL_BIT, 1},
249 {FLASH_CTRL_PROG_TYPE_EN_REPAIR_BIT, 0},
253 EXPECT_READ32(FLASH_CTRL_PROG_TYPE_EN_REG_OFFSET,
255 {FLASH_CTRL_PROG_TYPE_EN_NORMAL_BIT, 1},
256 {FLASH_CTRL_PROG_TYPE_EN_REPAIR_BIT, 0},
266 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
267 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 1}});
269 EXPECT_WRITE32(FLASH_CTRL_PROG_TYPE_EN_REG_OFFSET,
271 {FLASH_CTRL_PROG_TYPE_EN_NORMAL_BIT, 0},
272 {FLASH_CTRL_PROG_TYPE_EN_REPAIR_BIT, 1},
276 EXPECT_READ32(FLASH_CTRL_PROG_TYPE_EN_REG_OFFSET,
278 {FLASH_CTRL_PROG_TYPE_EN_NORMAL_BIT, 0},
279 {FLASH_CTRL_PROG_TYPE_EN_REPAIR_BIT, 1},
287 TEST_F(FlashCtrlTest, ReadTransaction) {
290 .partition_type = kDifFlashCtrlPartitionTypeInfo,
292 .byte_address = 0x80,
297 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
299 {FLASH_CTRL_STATUS_RD_FULL_BIT, 0},
300 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 0},
301 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 1},
307 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
309 {FLASH_CTRL_STATUS_RD_FULL_BIT, 0},
310 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
311 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 1},
313 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
314 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 0}});
319 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
321 {FLASH_CTRL_STATUS_RD_FULL_BIT, 0},
322 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
323 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 1},
325 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
326 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 1}});
328 FLASH_CTRL_CONTROL_REG_OFFSET,
330 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_READ},
331 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 1},
332 {FLASH_CTRL_CONTROL_INFO_SEL_OFFSET, 1},
333 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x20 - 1},
335 EXPECT_WRITE32(FLASH_CTRL_ADDR_REG_OFFSET, 0x80);
337 FLASH_CTRL_CONTROL_REG_OFFSET,
339 {FLASH_CTRL_CONTROL_START_BIT, 1},
340 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_READ},
341 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 1},
342 {FLASH_CTRL_CONTROL_INFO_SEL_OFFSET, 1},
343 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x20 - 1},
346 EXPECT_TRUE(dif_flash_ctrl_.transaction_pending);
351 FLASH_CTRL_CONTROL_REG_OFFSET,
353 {FLASH_CTRL_CONTROL_START_BIT, 1},
354 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_READ},
355 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 1},
356 {FLASH_CTRL_CONTROL_INFO_SEL_OFFSET, 1},
357 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x20 - 1},
359 for (uint32_t i = 0; i < 0x20; ++i) {
360 EXPECT_READ32(FLASH_CTRL_RD_FIFO_REG_OFFSET, i);
363 for (uint32_t i = 0; i < 0x20; i++) {
364 EXPECT_EQ(data[i], i);
369 EXPECT_READ32(FLASH_CTRL_OP_STATUS_REG_OFFSET,
371 {FLASH_CTRL_OP_STATUS_DONE_BIT, 0},
372 {FLASH_CTRL_OP_STATUS_ERR_BIT, 0},
375 EXPECT_READ32(FLASH_CTRL_OP_STATUS_REG_OFFSET,
377 {FLASH_CTRL_OP_STATUS_DONE_BIT, 1},
378 {FLASH_CTRL_OP_STATUS_ERR_BIT, 0},
380 EXPECT_READ32(FLASH_CTRL_ERR_CODE_REG_OFFSET,
382 {FLASH_CTRL_ERR_CODE_MP_ERR_BIT, 1},
383 {FLASH_CTRL_ERR_CODE_RD_ERR_BIT, 0},
384 {FLASH_CTRL_ERR_CODE_PROG_WIN_ERR_BIT, 1},
385 {FLASH_CTRL_ERR_CODE_PROG_TYPE_ERR_BIT, 0},
386 {FLASH_CTRL_ERR_CODE_UPDATE_ERR_BIT, 0},
388 EXPECT_READ32(FLASH_CTRL_ERR_ADDR_REG_OFFSET, 0x12345678u);
389 EXPECT_WRITE32(FLASH_CTRL_OP_STATUS_REG_OFFSET, 0);
391 EXPECT_FALSE(dif_flash_ctrl_.transaction_pending);
402 TEST_F(FlashCtrlTest, ProgramTransaction) {
405 .partition_type = kDifFlashCtrlPartitionTypeData,
407 .byte_address = 0x1800,
412 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
414 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
415 {FLASH_CTRL_STATUS_PROG_FULL_BIT, 0},
416 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 0},
421 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
423 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
424 {FLASH_CTRL_STATUS_PROG_FULL_BIT, 0},
425 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 1},
427 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
428 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 0}});
433 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
435 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
436 {FLASH_CTRL_STATUS_PROG_FULL_BIT, 0},
437 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 1},
439 EXPECT_READ32(FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
440 {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, 1}});
442 FLASH_CTRL_CONTROL_REG_OFFSET,
444 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_PROG},
445 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 0},
446 {FLASH_CTRL_CONTROL_PROG_SEL_BIT, 1},
447 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x16 - 1},
449 EXPECT_WRITE32(FLASH_CTRL_ADDR_REG_OFFSET, 0x1800);
451 FLASH_CTRL_CONTROL_REG_OFFSET,
453 {FLASH_CTRL_CONTROL_START_BIT, 1},
454 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_PROG},
455 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 0},
456 {FLASH_CTRL_CONTROL_PROG_SEL_BIT, 1},
457 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x16 - 1},
460 EXPECT_TRUE(dif_flash_ctrl_.transaction_pending);
465 FLASH_CTRL_CONTROL_REG_OFFSET,
467 {FLASH_CTRL_CONTROL_START_BIT, 1},
468 {FLASH_CTRL_CONTROL_OP_OFFSET, FLASH_CTRL_CONTROL_OP_VALUE_PROG},
469 {FLASH_CTRL_CONTROL_PARTITION_SEL_BIT, 0},
470 {FLASH_CTRL_CONTROL_PROG_SEL_BIT, 1},
471 {FLASH_CTRL_CONTROL_NUM_OFFSET, 0x16 - 1},
473 for (uint32_t i = 0; i < 0x16; ++i) {
475 EXPECT_WRITE32(FLASH_CTRL_PROG_FIFO_REG_OFFSET, i);
481 EXPECT_READ32(FLASH_CTRL_OP_STATUS_REG_OFFSET,
483 {FLASH_CTRL_OP_STATUS_DONE_BIT, 0},
484 {FLASH_CTRL_OP_STATUS_ERR_BIT, 0},
487 EXPECT_READ32(FLASH_CTRL_OP_STATUS_REG_OFFSET,
489 {FLASH_CTRL_OP_STATUS_DONE_BIT, 1},
490 {FLASH_CTRL_OP_STATUS_ERR_BIT, 0},
492 EXPECT_READ32(FLASH_CTRL_ERR_CODE_REG_OFFSET,
494 {FLASH_CTRL_ERR_CODE_MP_ERR_BIT, 0},
495 {FLASH_CTRL_ERR_CODE_RD_ERR_BIT, 0},
496 {FLASH_CTRL_ERR_CODE_PROG_WIN_ERR_BIT, 1},
497 {FLASH_CTRL_ERR_CODE_PROG_TYPE_ERR_BIT, 1},
498 {FLASH_CTRL_ERR_CODE_UPDATE_ERR_BIT, 1},
500 EXPECT_READ32(FLASH_CTRL_ERR_ADDR_REG_OFFSET, 0x87654321u);
501 EXPECT_WRITE32(FLASH_CTRL_OP_STATUS_REG_OFFSET, 0);
503 EXPECT_FALSE(dif_flash_ctrl_.transaction_pending);
514 TEST_F(FlashCtrlTest, SuspendErase) {
515 EXPECT_WRITE32(FLASH_CTRL_ERASE_SUSPEND_REG_OFFSET,
517 {FLASH_CTRL_ERASE_SUSPEND_REQ_BIT, 1},
521 bool erase_suspend_status;
522 EXPECT_READ32(FLASH_CTRL_ERASE_SUSPEND_REG_OFFSET,
524 {FLASH_CTRL_ERASE_SUSPEND_REQ_BIT, 1},
527 &erase_suspend_status));
528 EXPECT_TRUE(erase_suspend_status);
530 EXPECT_READ32(FLASH_CTRL_ERASE_SUSPEND_REG_OFFSET,
532 {FLASH_CTRL_ERASE_SUSPEND_REQ_BIT, 0},
535 &erase_suspend_status));
536 EXPECT_FALSE(erase_suspend_status);
539 TEST_F(FlashCtrlTest, ConfigureDataRegion) {
545 FLASH_CTRL_MP_REGION_CFG_4_REG_OFFSET,
547 {FLASH_CTRL_MP_REGION_CFG_4_EN_4_OFFSET, kMultiBitBool4False},
555 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
556 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 1}});
559 EXPECT_FALSE(locked);
567 .rd_en = kMultiBitBool4False,
568 .prog_en = kMultiBitBool4True,
569 .erase_en = kMultiBitBool4True,
570 .scramble_en = kMultiBitBool4False,
571 .ecc_en = kMultiBitBool4False,
572 .high_endurance_en = kMultiBitBool4False,
575 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_2_REG_OFFSET,
576 {{FLASH_CTRL_REGION_CFG_REGWEN_2_REGION_2_BIT, 1}});
579 FLASH_CTRL_MP_REGION_CFG_2_REG_OFFSET,
580 {{FLASH_CTRL_MP_REGION_CFG_2_EN_2_OFFSET, kMultiBitBool4False}});
583 FLASH_CTRL_MP_REGION_CFG_2_REG_OFFSET,
585 {FLASH_CTRL_MP_REGION_CFG_2_EN_2_OFFSET, kMultiBitBool4False},
586 {FLASH_CTRL_MP_REGION_CFG_2_RD_EN_2_OFFSET, kMultiBitBool4False},
587 {FLASH_CTRL_MP_REGION_CFG_2_PROG_EN_2_OFFSET, kMultiBitBool4True},
588 {FLASH_CTRL_MP_REGION_CFG_2_ERASE_EN_2_OFFSET, kMultiBitBool4True},
589 {FLASH_CTRL_MP_REGION_CFG_2_SCRAMBLE_EN_2_OFFSET,
590 kMultiBitBool4False},
591 {FLASH_CTRL_MP_REGION_CFG_2_ECC_EN_2_OFFSET, kMultiBitBool4False},
592 {FLASH_CTRL_MP_REGION_CFG_2_HE_EN_2_OFFSET, kMultiBitBool4False},
595 EXPECT_WRITE32(FLASH_CTRL_MP_REGION_2_REG_OFFSET,
597 {FLASH_CTRL_MP_REGION_2_BASE_2_OFFSET, 0x48},
598 {FLASH_CTRL_MP_REGION_2_SIZE_2_OFFSET, 0x9a},
605 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
606 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 1}});
608 FLASH_CTRL_MP_REGION_CFG_3_REG_OFFSET,
610 {FLASH_CTRL_MP_REGION_CFG_3_EN_3_OFFSET, kMultiBitBool4False},
611 {FLASH_CTRL_MP_REGION_CFG_3_RD_EN_3_OFFSET, kMultiBitBool4False},
612 {FLASH_CTRL_MP_REGION_CFG_3_PROG_EN_3_OFFSET, kMultiBitBool4True},
613 {FLASH_CTRL_MP_REGION_CFG_3_ERASE_EN_3_OFFSET, kMultiBitBool4True},
614 {FLASH_CTRL_MP_REGION_CFG_3_SCRAMBLE_EN_3_OFFSET,
615 kMultiBitBool4False},
616 {FLASH_CTRL_MP_REGION_CFG_3_ECC_EN_3_OFFSET, kMultiBitBool4False},
617 {FLASH_CTRL_MP_REGION_CFG_3_HE_EN_3_OFFSET, kMultiBitBool4False},
621 FLASH_CTRL_MP_REGION_CFG_3_REG_OFFSET,
623 {FLASH_CTRL_MP_REGION_CFG_3_EN_3_OFFSET, kMultiBitBool4True},
624 {FLASH_CTRL_MP_REGION_CFG_3_RD_EN_3_OFFSET, kMultiBitBool4False},
625 {FLASH_CTRL_MP_REGION_CFG_3_PROG_EN_3_OFFSET, kMultiBitBool4True},
626 {FLASH_CTRL_MP_REGION_CFG_3_ERASE_EN_3_OFFSET, kMultiBitBool4True},
627 {FLASH_CTRL_MP_REGION_CFG_3_SCRAMBLE_EN_3_OFFSET,
628 kMultiBitBool4False},
629 {FLASH_CTRL_MP_REGION_CFG_3_ECC_EN_3_OFFSET, kMultiBitBool4False},
630 {FLASH_CTRL_MP_REGION_CFG_3_HE_EN_3_OFFSET, kMultiBitBool4False},
638 FLASH_CTRL_MP_REGION_CFG_3_REG_OFFSET,
640 {FLASH_CTRL_MP_REGION_CFG_3_RD_EN_3_OFFSET, kMultiBitBool4False},
641 {FLASH_CTRL_MP_REGION_CFG_3_PROG_EN_3_OFFSET, kMultiBitBool4True},
642 {FLASH_CTRL_MP_REGION_CFG_3_ERASE_EN_3_OFFSET, kMultiBitBool4True},
643 {FLASH_CTRL_MP_REGION_CFG_3_SCRAMBLE_EN_3_OFFSET,
644 kMultiBitBool4False},
645 {FLASH_CTRL_MP_REGION_CFG_3_ECC_EN_3_OFFSET, kMultiBitBool4False},
646 {FLASH_CTRL_MP_REGION_CFG_3_HE_EN_3_OFFSET, kMultiBitBool4False},
649 EXPECT_READ32(FLASH_CTRL_MP_REGION_3_REG_OFFSET,
651 {FLASH_CTRL_MP_REGION_3_BASE_3_OFFSET, 0x48},
652 {FLASH_CTRL_MP_REGION_3_SIZE_3_OFFSET, 0x9a},
663 EXPECT_EQ(data_mp.
base, 0x48);
664 EXPECT_EQ(data_mp.
size, 0x9a);
667 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
668 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 1}});
671 EXPECT_FALSE(locked);
673 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
674 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 1}});
675 EXPECT_WRITE32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
676 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 0}});
680 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
681 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 0}});
685 EXPECT_READ32(FLASH_CTRL_REGION_CFG_REGWEN_3_REG_OFFSET,
686 {{FLASH_CTRL_REGION_CFG_REGWEN_3_REGION_3_BIT, 0}});
692 TEST_F(FlashCtrlTest, SimpleQueries) {
694 EXPECT_READ32(FLASH_CTRL_STATUS_REG_OFFSET,
696 {FLASH_CTRL_STATUS_RD_FULL_BIT, 0},
697 {FLASH_CTRL_STATUS_RD_EMPTY_BIT, 1},
698 {FLASH_CTRL_STATUS_PROG_FULL_BIT, 1},
699 {FLASH_CTRL_STATUS_PROG_EMPTY_BIT, 0},
700 {FLASH_CTRL_STATUS_INIT_WIP_BIT, 0},
703 EXPECT_EQ(
status.read_fifo_full, 0);
704 EXPECT_EQ(
status.read_fifo_empty, 1);
705 EXPECT_EQ(
status.prog_fifo_full, 1);
706 EXPECT_EQ(
status.prog_fifo_empty, 0);
707 EXPECT_EQ(
status.controller_init_wip, 0);
710 EXPECT_READ32(FLASH_CTRL_ERR_CODE_REG_OFFSET,
712 {FLASH_CTRL_ERR_CODE_MP_ERR_BIT, 1},
713 {FLASH_CTRL_ERR_CODE_RD_ERR_BIT, 0},
714 {FLASH_CTRL_ERR_CODE_PROG_WIN_ERR_BIT, 0},
715 {FLASH_CTRL_ERR_CODE_PROG_TYPE_ERR_BIT, 1},
716 {FLASH_CTRL_ERR_CODE_UPDATE_ERR_BIT, 1},
718 EXPECT_READ32(FLASH_CTRL_ERR_ADDR_REG_OFFSET, 0x1effe0u);
725 EXPECT_EQ(error_value.
address, 0x1effe0u);
734 FLASH_CTRL_BANK1_INFO0_PAGE_CFG_3_REG_OFFSET,
736 {FLASH_CTRL_MP_REGION_CFG_0_EN_0_OFFSET, kMultiBitBool4True},
739 &dif_flash_ctrl_, info_region, &toggle));
744 FLASH_CTRL_DEFAULT_REGION_REG_OFFSET,
746 {FLASH_CTRL_DEFAULT_REGION_RD_EN_OFFSET, kMultiBitBool4True},
747 {FLASH_CTRL_DEFAULT_REGION_PROG_EN_OFFSET, kMultiBitBool4True},
748 {FLASH_CTRL_DEFAULT_REGION_ERASE_EN_OFFSET, kMultiBitBool4False},
749 {FLASH_CTRL_DEFAULT_REGION_SCRAMBLE_EN_OFFSET, kMultiBitBool4False},
750 {FLASH_CTRL_DEFAULT_REGION_ECC_EN_OFFSET, kMultiBitBool4True},
751 {FLASH_CTRL_DEFAULT_REGION_HE_EN_OFFSET, kMultiBitBool4False},
755 EXPECT_EQ(mp.
rd_en, kMultiBitBool4True);
756 EXPECT_EQ(mp.
prog_en, kMultiBitBool4True);
757 EXPECT_EQ(mp.
erase_en, kMultiBitBool4False);
759 EXPECT_EQ(mp.
ecc_en, kMultiBitBool4True);
762 info_region.
bank = 0;
764 info_region.
page = 1;
765 EXPECT_READ32(FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_REG_OFFSET,
767 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_RD_EN_1_OFFSET,
769 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_PROG_EN_1_OFFSET,
770 kMultiBitBool4False},
771 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_ERASE_EN_1_OFFSET,
773 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_SCRAMBLE_EN_1_OFFSET,
774 kMultiBitBool4False},
775 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_ECC_EN_1_OFFSET,
777 {FLASH_CTRL_BANK0_INFO2_PAGE_CFG_1_HE_EN_1_OFFSET,
778 kMultiBitBool4False},
782 EXPECT_EQ(mp.
rd_en, kMultiBitBool4True);
783 EXPECT_EQ(mp.
prog_en, kMultiBitBool4False);
784 EXPECT_EQ(mp.
erase_en, kMultiBitBool4True);
786 EXPECT_EQ(mp.
ecc_en, kMultiBitBool4True);
790 info_region.
bank = 0;
792 info_region.
page = 2;
793 EXPECT_READ32(FLASH_CTRL_BANK0_INFO0_REGWEN_2_REG_OFFSET,
794 {{FLASH_CTRL_BANK0_INFO0_REGWEN_2_REGION_2_BIT, 1}});
796 info_region, &locked));
797 EXPECT_FALSE(locked);
799 EXPECT_READ32(FLASH_CTRL_MP_BANK_CFG_SHADOWED_REG_OFFSET,
801 {FLASH_CTRL_MP_BANK_CFG_SHADOWED_ERASE_EN_0_BIT, 0},
802 {FLASH_CTRL_MP_BANK_CFG_SHADOWED_ERASE_EN_1_BIT, 1},
808 EXPECT_READ32(FLASH_CTRL_BANK_CFG_REGWEN_REG_OFFSET,
809 {{FLASH_CTRL_BANK_CFG_REGWEN_BANK_BIT, 1}});
812 EXPECT_FALSE(locked);
814 uint32_t prog_level, read_level;
815 EXPECT_READ32(FLASH_CTRL_FIFO_LVL_REG_OFFSET,
817 {FLASH_CTRL_FIFO_LVL_PROG_OFFSET, 9},
818 {FLASH_CTRL_FIFO_LVL_RD_OFFSET, 13},
821 &prog_level, &read_level));
822 EXPECT_EQ(prog_level, 9);
823 EXPECT_EQ(read_level, 13);
826 EXPECT_READ32(FLASH_CTRL_FAULT_STATUS_REG_OFFSET,
828 {FLASH_CTRL_FAULT_STATUS_MP_ERR_BIT, 1},
829 {FLASH_CTRL_FAULT_STATUS_RD_ERR_BIT, 0},
830 {FLASH_CTRL_FAULT_STATUS_PROG_WIN_ERR_BIT, 1},
831 {FLASH_CTRL_FAULT_STATUS_PROG_TYPE_ERR_BIT, 0},
833 EXPECT_READ32(FLASH_CTRL_STD_FAULT_STATUS_REG_OFFSET,
835 {FLASH_CTRL_STD_FAULT_STATUS_REG_INTG_ERR_BIT, 0},
836 {FLASH_CTRL_STD_FAULT_STATUS_PROG_INTG_ERR_BIT, 1},
837 {FLASH_CTRL_STD_FAULT_STATUS_LCMGR_ERR_BIT, 0},
838 {FLASH_CTRL_STD_FAULT_STATUS_STORAGE_ERR_BIT, 1},
852 FLASH_CTRL_ECC_SINGLE_ERR_CNT_REG_OFFSET,
854 {FLASH_CTRL_ECC_SINGLE_ERR_CNT_ECC_SINGLE_ERR_CNT_0_OFFSET, 7},
855 {FLASH_CTRL_ECC_SINGLE_ERR_CNT_ECC_SINGLE_ERR_CNT_1_OFFSET, 11},
857 EXPECT_READ32(FLASH_CTRL_ECC_SINGLE_ERR_ADDR_1_REG_OFFSET, 0x16487590u);
864 EXPECT_READ32(FLASH_CTRL_PHY_STATUS_REG_OFFSET,
866 {FLASH_CTRL_PHY_STATUS_INIT_WIP_BIT, 0},
867 {FLASH_CTRL_PHY_STATUS_PROG_NORMAL_AVAIL_BIT, 1},
868 {FLASH_CTRL_PHY_STATUS_PROG_REPAIR_AVAIL_BIT, 0},
876 EXPECT_READ32(FLASH_CTRL_SCRATCH_REG_OFFSET, 0x89abcdefu);
878 EXPECT_EQ(scratch, 0x89abcdefu);