From c9a93b2b01d29cdcada09967ab72f2ba52a54129 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 28 Sep 2022 14:02:52 -0700 Subject: [PATCH] flash/nor/at91samd: Use 32-bit register writes for ST-Link compat ST-Link v2 dongles can be used with many cortex-m parts, but they have one limitation -- they can only perform 8-bit and 32-bit writes to the target. 16-bit writes are done using a pair of 8-bit writes. While not usually an issue, in the case of the at91samd flash driver, the 16-bit 'command' register must have both halves written in the same operation. Fortunately, this register has two pad bytes above it in the address space, making it safe to always access with 32-bit operations. Change-Id: I44b0db9406982a8db5818c0533d3101618741db2 Signed-off-by: Keith Packard --- src/flash/nor/at91samd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flash/nor/at91samd.c b/src/flash/nor/at91samd.c index a0252a276..3b8893252 100644 --- a/src/flash/nor/at91samd.c +++ b/src/flash/nor/at91samd.c @@ -543,7 +543,7 @@ static int samd_issue_nvmctrl_command(struct target *target, uint16_t cmd) } /* Issue the NVM command */ - res = target_write_u16(target, + res = target_write_u32(target, SAMD_NVMCTRL + SAMD_NVMCTRL_CTRLA, SAMD_NVM_CMD(cmd)); if (res != ERROR_OK) return res; -- 2.30.2