diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-12-16 14:17:31 -0800 |
---|---|---|
committer | David Brownell <dbrownell@users.sourceforge.net> | 2009-12-16 14:17:31 -0800 |
commit | f85dc92d2a2b336f9844c0eddcdf4df4c0dc9fbf (patch) | |
tree | b7a99230b8d440038e61efe8a006800523a1c1f0 /src/flash | |
parent | 47998a55e0f66d513b52f7851901bc79bc1f7213 (diff) | |
download | openocd_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')
-rw-r--r-- | src/flash/nor/stellaris.c | 23 |
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); |