summaryrefslogtreecommitdiff
path: root/src/flash/nor
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-12-16 14:17:31 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-12-16 14:17:31 -0800
commitf85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf (patch)
treeb7a99230b8d440038e61efe8a006800523a1c1f0 /src/flash/nor
parent47998a55e0f66d513b52f7851901bc79bc1f7213 (diff)
downloadopenocd_libswd-f85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf.tar.gz
openocd_libswd-f85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf.tar.bz2
openocd_libswd-f85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf.tar.xz
openocd_libswd-f85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf.zip
stellaris: avoid chip writes
Previously "reading" clock info (and part info) also, as a side effect, wrote the flash timing register. Instead, be more safe: "reading" should only read. Write paths still refresh timing, coping with changes the application code may have made. Also rename the routine which sets flash timing, indicating what it's really doing; it's got nothing to do with a "mode". Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src/flash/nor')
-rw-r--r--src/flash/nor/stellaris.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c
index 103202d2..8b0d9d30 100644
--- a/src/flash/nor/stellaris.c
+++ b/src/flash/nor/stellaris.c
@@ -345,8 +345,8 @@ static uint32_t stellaris_get_flash_status(struct flash_bank *bank)
return fmc;
}
-/* Setup the timimg registers */
-static void stellaris_set_flash_mode(struct flash_bank *bank,int mode)
+/* Set the flash timimg register to match current clocking */
+static void stellaris_set_flash_timing(struct flash_bank *bank)
{
struct stellaris_flash_bank *stellaris_info = bank->driver_priv;
struct target *target = bank->target;
@@ -471,9 +471,6 @@ static void stellaris_read_clock_info(struct flash_bank *bank)
stellaris_info->mck_freq = mainfreq/(1 + sysdiv);
else
stellaris_info->mck_freq = mainfreq;
-
- /* Forget old flash timing */
- stellaris_set_flash_mode(bank, 0);
}
#if 0
@@ -714,9 +711,9 @@ static int stellaris_erase(struct flash_bank *bank, int first, int last)
return stellaris_mass_erase(bank);
}
- /* Configure the flash controller timing */
+ /* Refresh flash controller timing */
stellaris_read_clock_info(bank);
- stellaris_set_flash_mode(bank,0);
+ stellaris_set_flash_timing(bank);
/* Clear and disable flash programming interrupts */
target_write_u32(target, FLASH_CIM, 0);
@@ -791,9 +788,9 @@ static int stellaris_protect(struct flash_bank *bank, int set, int first, int la
return ERROR_FLASH_OPERATION_FAILED;
}
- /* Configure the flash controller timing */
+ /* Refresh flash controller timing */
stellaris_read_clock_info(bank);
- stellaris_set_flash_mode(bank, 0);
+ stellaris_set_flash_timing(bank);
/* convert from pages to lockregions */
first /= 2;
@@ -1011,9 +1008,9 @@ static int stellaris_write(struct flash_bank *bank, uint8_t *buffer, uint32_t of
if (offset + count > bank->size)
return ERROR_FLASH_DST_OUT_OF_BANK;
- /* Configure the flash controller timing */
+ /* Refresh flash controller timing */
stellaris_read_clock_info(bank);
- stellaris_set_flash_mode(bank, 0);
+ stellaris_set_flash_timing(bank);
/* Clear and disable flash programming interrupts */
target_write_u32(target, FLASH_CIM, 0);
@@ -1156,9 +1153,9 @@ static int stellaris_mass_erase(struct flash_bank *bank)
return ERROR_FLASH_OPERATION_FAILED;
}
- /* Configure the flash controller timing */
+ /* Refresh flash controller timing */
stellaris_read_clock_info(bank);
- stellaris_set_flash_mode(bank, 0);
+ stellaris_set_flash_timing(bank);
/* Clear and disable flash programming interrupts */
target_write_u32(target, FLASH_CIM, 0);