From ba57b5bdc0913c5c102e24c573f78aa9d9d76369 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 13 Nov 2015 11:32:06 -0600 Subject: [PATCH] SAMV7 FLASH: Fix a cache error, fix an address comparison --- arch/arm/src/samv7/sam_progmem.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/arch/arm/src/samv7/sam_progmem.c b/arch/arm/src/samv7/sam_progmem.c index 77a9617c3a..4654ea6f00 100644 --- a/arch/arm/src/samv7/sam_progmem.c +++ b/arch/arm/src/samv7/sam_progmem.c @@ -486,7 +486,6 @@ size_t up_progmem_getaddress(size_t cluster) ssize_t up_progmem_erasepage(size_t cluster) { - uintptr_t address; uint32_t page; uint32_t arg; int ret; @@ -534,12 +533,7 @@ ssize_t up_progmem_erasepage(size_t cluster) return ret; } - /* Invalidate I- and D-Cache in this address range */ - - address = SAMV7_CLUST2BYTE((uintptr_t)cluster) + SAMV7_PROGMEM_START; - arch_invalidate_dcache(address, address + SAMV7_CLUSTER_SIZE); - - /* Verify */ + /* Verify that the cluster of pages is really erased */ if (up_progmem_ispageerased(cluster) == 0) { @@ -580,10 +574,10 @@ ssize_t up_progmem_ispageerased(size_t cluster) return -EFAULT; } - /* Invalidate D-Cache for this address range */ + /* Flush and invalidate nvalidate D-Cache for this address range */ address = (cluster << SAMV7_CLUSTER_SHIFT) + SAMV7_PROGMEM_START; - arch_invalidate_dcache(address, address + SAMV7_CLUSTER_SIZE); + arch_flush_dcache(address, address + SAMV7_CLUSTER_SIZE); /* Verify that the cluster is erased (i.e., all 0xff) */ @@ -651,7 +645,7 @@ ssize_t up_progmem_write(size_t address, const void *buffer, size_t buflen) /* Check for valid address range */ - if ((offset + buflen) >= SAMV7_PROGMEM_NBYTES) + if ((offset + buflen) > SAMV7_PROGMEM_NBYTES) { return -EFAULT; }