aboutsummaryrefslogtreecommitdiff
path: root/src/flash/nor/at91sam3.c
diff options
context:
space:
mode:
authorChuen Chou <zhouquan27@gmail.com>2012-09-02 00:45:15 -0700
committerFreddie Chopin <freddie.chopin@gmail.com>2012-09-07 06:16:57 +0000
commite26ddb627ba035ab9bfc9c54a5585865a6c89132 (patch)
tree0fab34124253a89abe27f3f0a6e33dc206590fb6 /src/flash/nor/at91sam3.c
parent8a197f0bbce93baf7100e99461b58a5d03d8b50c (diff)
downloadriscv-openocd-e26ddb627ba035ab9bfc9c54a5585865a6c89132.zip
riscv-openocd-e26ddb627ba035ab9bfc9c54a5585865a6c89132.tar.gz
riscv-openocd-e26ddb627ba035ab9bfc9c54a5585865a6c89132.tar.bz2
flash: fix sam3 page read/write address computation error
In at91sam3.c for Atmel SAM3 flash support, there are arithmetic errors in the functions sam3_page_read() and sam3_page_write(). Address locations are computed incorrectly due to an extra addition operation. This leads to memory locations being skipped during flash writes and reads. Smaller programs are written successfully into flash, with memory gaps, while larger programs of legitimate size fail because the skipped memory is not utilized and therefore unavailable. The changes address this condition, and have been tested with an Atmel SAM3X-EK evaluation board. Change-Id: I9ea3b9ed0130b71cbc32b2294e31a6a2bc71b47a Signed-off-by: Chuen Chou <zhouquan27@gmail.com> Reviewed-on: http://openocd.zylin.com/806 Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Diffstat (limited to 'src/flash/nor/at91sam3.c')
-rw-r--r--src/flash/nor/at91sam3.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/flash/nor/at91sam3.c b/src/flash/nor/at91sam3.c
index 7dbfa24..de792ec 100644
--- a/src/flash/nor/at91sam3.c
+++ b/src/flash/nor/at91sam3.c
@@ -3018,7 +3018,7 @@ static int sam3_page_read(struct sam3_bank_private *pPrivate, unsigned pagenum,
int r;
adr = pagenum * pPrivate->page_size;
- adr += adr + pPrivate->base_address;
+ adr += pPrivate->base_address;
r = target_read_memory(pPrivate->pChip->target,
adr,
@@ -3126,7 +3126,7 @@ static int sam3_page_write(struct sam3_bank_private *pPrivate, unsigned pagenum,
int r;
adr = pagenum * pPrivate->page_size;
- adr += (adr + pPrivate->base_address);
+ adr += pPrivate->base_address;
/* Get flash mode register value */
r = target_read_u32(pPrivate->pChip->target, pPrivate->controller_address, &fmr);