[flash_ctrl, sw] update test for new scramble / ECC control scheme
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/sw/device/lib/flash_ctrl.c b/sw/device/lib/flash_ctrl.c
index 371d69c..eaa9478 100644
--- a/sw/device/lib/flash_ctrl.c
+++ b/sw/device/lib/flash_ctrl.c
@@ -132,10 +132,6 @@
return get_clr_err();
}
-void flash_cfg_scramble_enable(bool en) {
- REG32(FLASH_CTRL_SCRAMBLE_EN(0)) = en & 1;
-}
-
void flash_cfg_bank_erase(bank_index_t bank, bool erase_en) {
REG32(FLASH_CTRL_MP_BANK_CFG(0)) =
(erase_en) ? SETBIT(REG32(FLASH_CTRL_MP_BANK_CFG(0)), bank)
@@ -160,12 +156,15 @@
region_cfg->rd_en << FLASH_CTRL_MP_REGION_CFG_0_RD_EN_0 |
region_cfg->prog_en << FLASH_CTRL_MP_REGION_CFG_0_PROG_EN_0 |
region_cfg->erase_en << FLASH_CTRL_MP_REGION_CFG_0_ERASE_EN_0 |
+ region_cfg->scramble_en << FLASH_CTRL_MP_REGION_CFG_0_SCRAMBLE_EN_0 |
0x1 << FLASH_CTRL_MP_REGION_CFG_0_EN_0;
} else if (region_cfg->part == kInfoPartition) {
reg_value =
region_cfg->rd_en << FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_RD_EN_0 |
region_cfg->prog_en << FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_PROG_EN_0 |
region_cfg->erase_en << FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_ERASE_EN_0 |
+ region_cfg->scramble_en
+ << FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_SCRAMBLE_EN_0 |
0x1 << FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_EN_0;
bank_sel = region_cfg->base / FLASH_PAGES_PER_BANK;
diff --git a/sw/device/lib/flash_ctrl.h b/sw/device/lib/flash_ctrl.h
index 94f1b0e..ff5d5cf 100644
--- a/sw/device/lib/flash_ctrl.h
+++ b/sw/device/lib/flash_ctrl.h
@@ -50,6 +50,8 @@
uint32_t prog_en;
/** Erase enable flag. */
uint32_t erase_en;
+ /** Scramble / ECC enable flag. */
+ uint32_t scramble_en;
} mp_region_t;
/**
@@ -100,11 +102,6 @@
void flash_cfg_bank_erase(bank_index_t bank, bool erase_en);
/**
- * Configure scramble enable
- */
-void flash_cfg_scramble_enable(bool en);
-
-/**
* Set flash controller default permissions.
*
* @param rd_end Read enable.
diff --git a/sw/device/tests/flash_ctrl_test.c b/sw/device/tests/flash_ctrl_test.c
index 06d16d0..bda92de 100644
--- a/sw/device/tests/flash_ctrl_test.c
+++ b/sw/device/tests/flash_ctrl_test.c
@@ -34,17 +34,27 @@
/*erase_en=*/true);
// info partition has no default access, specifically setup a region
- mp_region_t info_region = {
- .num = 0x0,
- .base = FLASH_PAGES_PER_BANK,
- .size = 0x1,
- .part = kInfoPartition,
- .rd_en = true,
- .prog_en = true,
- .erase_en = true,
- };
+ mp_region_t info_region = {.num = 0x0,
+ .base = FLASH_PAGES_PER_BANK,
+ .size = 0x1,
+ .part = kInfoPartition,
+ .rd_en = true,
+ .prog_en = true,
+ .erase_en = true,
+ .scramble_en = true};
flash_cfg_region(&info_region);
+ // also setup data region to enable scrambling
+ mp_region_t data_region = {.num = 0x0,
+ .base = FLASH_PAGES_PER_BANK,
+ .size = 0x1,
+ .part = kDataPartition,
+ .rd_en = true,
+ .prog_en = true,
+ .erase_en = true,
+ .scramble_en = true};
+ flash_cfg_region(&data_region);
+
uintptr_t flash_bank_1_addr = FLASH_MEM_BASE_ADDR + FLASH_BANK_SZ;
mmio_region_t flash_bank_1 = mmio_region_from_addr(flash_bank_1_addr);
@@ -112,15 +122,14 @@
/*erase_en=*/true);
// A memory protection region representing the first page of the second bank.
- mp_region_t protection_region = {
- .num = 0x0,
- .base = FLASH_PAGES_PER_BANK,
- .size = 0x1,
- .part = kDataPartition,
- .rd_en = true,
- .prog_en = true,
- .erase_en = true,
- };
+ mp_region_t protection_region = {.num = 0x0,
+ .base = FLASH_PAGES_PER_BANK,
+ .size = 0x1,
+ .part = kDataPartition,
+ .rd_en = true,
+ .prog_en = true,
+ .erase_en = true,
+ .scramble_en = false};
uintptr_t ok_region_start =
FLASH_MEM_BASE_ADDR + (protection_region.base * FLASH_PAGE_SZ);
@@ -181,7 +190,6 @@
LOG_INFO("flash test!");
- flash_cfg_scramble_enable(true);
flash_cfg_bank_erase(FLASH_BANK_0, /*erase_en=*/true);
flash_cfg_bank_erase(FLASH_BANK_1, /*erase_en=*/true);