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".
---
 src/flash/nor/stellaris.c |   23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

--- a/src/flash/nor/stellaris.c
+++ b/src/flash/nor/stellaris.c
@@ -345,8 +345,8 @@ static uint32_t stellaris_get_flash_stat
        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(st
                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_
                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 flas
                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_
        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 f
                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);
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to