diff --git a/arch/arm/src/samv7/sam_us.c b/arch/arm/src/samv7/sam_us.c index f3720f95a8b..87aab731666 100644 --- a/arch/arm/src/samv7/sam_us.c +++ b/arch/arm/src/samv7/sam_us.c @@ -98,6 +98,7 @@ int sam_erase_user_signature(void) int sam_write_user_signature(void *buffer, size_t buflen) { + irqstate_t flags; uint32_t *dest; int ret; @@ -120,6 +121,7 @@ int sam_write_user_signature(void *buffer, size_t buflen) * within the internal memory area address space. */ + flags = up_irq_save(); dest = (uint32_t *)SAMV7_US_START; for (int i = 0; i < SAMV7_US_PAGE_WORDS; i++) { @@ -134,6 +136,8 @@ int sam_write_user_signature(void *buffer, size_t buflen) up_clean_dcache(SAMV7_US_START, SAMV7_US_START + SAMV7_US_SIZE); + up_irq_restore(flags); + /* EEFC_FCR_FARG does not have any affect for user signature, * therefore second argument can be zero. */ @@ -166,6 +170,7 @@ int sam_write_user_signature(void *buffer, size_t buflen) int sam_read_user_signature(void *buffer, size_t buflen) { + irqstate_t flags; size_t nwords; int ret; @@ -180,7 +185,9 @@ int sam_read_user_signature(void *buffer, size_t buflen) /* sam_eefc_readsequence requires read length in bit words. */ nwords = (buflen + sizeof(uint32_t)) / sizeof(uint32_t); + flags = up_irq_save(); sam_eefc_readsequence(FCMD_STUS, FCMD_SPUS, g_page_buffer, nwords); + up_irq_restore(flags); /* Copy local buffer to void *buffer provided by the user. */