[sw/silicon_creator] Remove is_busy() from flash_ctrl driver
Since all operations are blocking, we don't need to check if the flash
controller is busy before starting a new operation.
Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/silicon_creator/lib/drivers/flash_ctrl.c b/sw/device/silicon_creator/lib/drivers/flash_ctrl.c
index 79175fb..d1fe509 100644
--- a/sw/device/silicon_creator/lib/drivers/flash_ctrl.c
+++ b/sw/device/silicon_creator/lib/drivers/flash_ctrl.c
@@ -29,12 +29,6 @@
kBase = TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR,
};
-static bool is_busy(void) {
- uint32_t bitfield =
- abs_mmio_read32(kBase + FLASH_CTRL_CTRL_REGWEN_REG_OFFSET);
- return !bitfield_bit32_read(bitfield, FLASH_CTRL_CTRL_REGWEN_EN_BIT);
-}
-
/**
* Flash transaction parameters.
*/
@@ -79,11 +73,7 @@
* @param params Transaction parameters, see `transaction_params_t`.
* @return The result of the operation.
*/
-static rom_error_t transaction_start(transaction_params_t params) {
- if (is_busy()) {
- return kErrorFlashCtrlBusy;
- }
-
+static void transaction_start(transaction_params_t params) {
// Set the address.
abs_mmio_write32(kBase + FLASH_CTRL_ADDR_REG_OFFSET, params.addr);
// Configure flash_ctrl and start the transaction.
@@ -104,7 +94,6 @@
reg = bitfield_field32_write(reg, FLASH_CTRL_CONTROL_NUM_FIELD,
params.word_count - 1);
abs_mmio_write32(kBase + FLASH_CTRL_CONTROL_REG_OFFSET, reg);
- return kErrorOk;
}
/**
@@ -180,14 +169,14 @@
window_word_count =
word_count < window_word_count ? word_count : window_word_count;
- RETURN_IF_ERROR(transaction_start((transaction_params_t){
+ transaction_start((transaction_params_t){
.addr = addr,
.op_type = FLASH_CTRL_CONTROL_OP_VALUE_PROG,
.partition = partition,
.word_count = window_word_count,
// Does not apply to program transactions.
.erase_type = kFlashCtrlEraseTypePage,
- }));
+ });
fifo_write(window_word_count, data);
RETURN_IF_ERROR(wait_for_done(error));
@@ -242,14 +231,14 @@
rom_error_t flash_ctrl_data_read(uint32_t addr, uint32_t word_count,
uint32_t *data) {
- RETURN_IF_ERROR(transaction_start((transaction_params_t){
+ transaction_start((transaction_params_t){
.addr = addr,
.op_type = FLASH_CTRL_CONTROL_OP_VALUE_READ,
.partition = kFlashCtrlPartitionData,
.word_count = word_count,
// Does not apply to read transactions.
.erase_type = kFlashCtrlEraseTypePage,
- }));
+ });
fifo_read(word_count, data);
return wait_for_done(kErrorFlashCtrlDataRead);
}
@@ -260,14 +249,14 @@
const uint32_t addr = info_page_addr(info_page) + offset;
const flash_ctrl_partition_t partition =
bitfield_field32_read(info_page, FLASH_CTRL_INFO_PAGE_FIELD_PARTITION);
- RETURN_IF_ERROR(transaction_start((transaction_params_t){
+ transaction_start((transaction_params_t){
.addr = addr,
.op_type = FLASH_CTRL_CONTROL_OP_VALUE_READ,
.partition = partition,
.word_count = word_count,
// Does not apply to read transactions.
.erase_type = kFlashCtrlEraseTypePage,
- }));
+ });
fifo_read(word_count, data);
return wait_for_done(kErrorFlashCtrlInfoRead);
}
@@ -289,14 +278,14 @@
rom_error_t flash_ctrl_data_erase(uint32_t addr,
flash_ctrl_erase_type_t erase_type) {
- RETURN_IF_ERROR(transaction_start((transaction_params_t){
+ transaction_start((transaction_params_t){
.addr = addr,
.op_type = FLASH_CTRL_CONTROL_OP_VALUE_ERASE,
.erase_type = erase_type,
.partition = kFlashCtrlPartitionData,
// Does not apply to erase transactions.
.word_count = 1,
- }));
+ });
return wait_for_done(kErrorFlashCtrlDataErase);
}
@@ -305,14 +294,14 @@
const uint32_t addr = info_page_addr(info_page);
const flash_ctrl_partition_t partition =
bitfield_field32_read(info_page, FLASH_CTRL_INFO_PAGE_FIELD_PARTITION);
- RETURN_IF_ERROR(transaction_start((transaction_params_t){
+ transaction_start((transaction_params_t){
.addr = addr,
.op_type = FLASH_CTRL_CONTROL_OP_VALUE_ERASE,
.erase_type = erase_type,
.partition = partition,
// Does not apply to erase transactions.
.word_count = 1,
- }));
+ });
return wait_for_done(kErrorFlashCtrlInfoErase);
}
diff --git a/sw/device/silicon_creator/lib/drivers/flash_ctrl_unittest.cc b/sw/device/silicon_creator/lib/drivers/flash_ctrl_unittest.cc
index 5ef5ef4..15e61ec 100644
--- a/sw/device/silicon_creator/lib/drivers/flash_ctrl_unittest.cc
+++ b/sw/device/silicon_creator/lib/drivers/flash_ctrl_unittest.cc
@@ -69,11 +69,6 @@
protected:
const std::vector<uint32_t> words_ = {0x12345678, 0x90ABCDEF, 0x0F1E2D3C,
0x4B5A6978};
- void ExpectCheckBusy(bool busy) {
- EXPECT_ABS_READ32(base_ + FLASH_CTRL_CTRL_REGWEN_REG_OFFSET,
- {{FLASH_CTRL_CTRL_REGWEN_EN_BIT, !busy}});
- }
-
void ExpectWaitForDone(bool done, bool error) {
EXPECT_ABS_READ32(base_ + FLASH_CTRL_OP_STATUS_REG_OFFSET,
{{FLASH_CTRL_OP_STATUS_DONE_BIT, done},
@@ -86,7 +81,6 @@
void ExpectTransferStart(uint8_t part_sel, uint8_t info_sel,
uint8_t erase_sel, uint32_t op, uint32_t addr,
uint32_t word_count) {
- ExpectCheckBusy(false);
EXPECT_ABS_WRITE32(base_ + FLASH_CTRL_ADDR_REG_OFFSET, addr);
EXPECT_ABS_WRITE32(base_ + FLASH_CTRL_CONTROL_REG_OFFSET,
{
@@ -112,22 +106,6 @@
}
};
-TEST_F(TransferTest, ReadBusy) {
- ExpectCheckBusy(true);
- EXPECT_EQ(flash_ctrl_data_read(0, 0, NULL), kErrorFlashCtrlBusy);
-}
-
-TEST_F(TransferTest, ProgBusy) {
- ExpectCheckBusy(true);
- EXPECT_EQ(flash_ctrl_data_write(0, 4, NULL), kErrorFlashCtrlBusy);
-}
-
-TEST_F(TransferTest, EraseBusy) {
- ExpectCheckBusy(true);
- EXPECT_EQ(flash_ctrl_data_erase(0, kFlashCtrlEraseTypePage),
- kErrorFlashCtrlBusy);
-}
-
TEST_F(TransferTest, ReadDataOk) {
ExpectTransferStart(0, 0, 0, FLASH_CTRL_CONTROL_OP_VALUE_READ, 0x01234567,
words_.size());
diff --git a/sw/device/silicon_creator/lib/error.h b/sw/device/silicon_creator/lib/error.h
index 8c36bd7..950ed99 100644
--- a/sw/device/silicon_creator/lib/error.h
+++ b/sw/device/silicon_creator/lib/error.h
@@ -98,7 +98,6 @@
X(kErrorFlashCtrlInfoWrite, ERROR_(4, kModuleFlashCtrl, kInternal)), \
X(kErrorFlashCtrlDataErase, ERROR_(5, kModuleFlashCtrl, kInternal)), \
X(kErrorFlashCtrlInfoErase, ERROR_(6, kModuleFlashCtrl, kInternal)), \
- X(kErrorFlashCtrlBusy, ERROR_(7, kModuleFlashCtrl, kUnavailable)), \
X(kErrorSecMmioRegFileSize, ERROR_(0, kModuleSecMmio, kResourceExhausted)), \
X(kErrorSecMmioReadFault, ERROR_(1, kModuleSecMmio, kInternal)), \
X(kErrorSecMmioWriteFault, ERROR_(2, kModuleSecMmio, kInternal)), \