From 90f5b12fde9767d7d227ae39816092e77ea14aba Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 5 Nov 2022 21:16:36 -0700 Subject: [PATCH] at91samd: Force manual flash writing mode Change-Id: Ie0bc43e62cfb985c1a7bd1cac3c52d34132c4492 Signed-off-by: Keith Packard --- src/flash/nor/at91samd.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/flash/nor/at91samd.c b/src/flash/nor/at91samd.c index 8c9bacc5b..45386dcba 100644 --- a/src/flash/nor/at91samd.c +++ b/src/flash/nor/at91samd.c @@ -832,10 +832,12 @@ static int samd_write(struct flash_bank *bank, const uint8_t *buffer, if (manual_wp) { LOG_WARNING("manual write mode detected"); - nvm_ctrlb &= ~SAMD_NVM_CTRLB_MANW; + } else { + LOG_WARNING("automatic write mode detected"); + nvm_ctrlb |= SAMD_NVM_CTRLB_MANW; res = target_write_u32(bank->target, SAMD_NVMCTRL + SAMD_NVMCTRL_CTRLB, nvm_ctrlb); if (res != ERROR_OK) { - LOG_ERROR("select automatic mode write_u32 failed"); + LOG_ERROR("select manual mode write_u32 failed"); return res; } @@ -844,14 +846,14 @@ static int samd_write(struct flash_bank *bank, const uint8_t *buffer, if (res != ERROR_OK) return res; - if (nvm_ctrlb & SAMD_NVM_CTRLB_MANW) { - LOG_ERROR("select automatic mode failed"); + if ((nvm_ctrlb & SAMD_NVM_CTRLB_MANW) == 0) { + LOG_ERROR("select manual mode failed"); return ERROR_FAIL; } - manual_wp = false; - } else - LOG_WARNING("automatic write mode detected"); + LOG_INFO("manual write mode selected"); + manual_wp = true; + } uint32_t nvm_param; -- 2.47.2