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>
This commit is contained in:
parent
47998a55e0
commit
f85dc92d2a
|
@ -345,8 +345,8 @@ static uint32_t stellaris_get_flash_status(struct flash_bank *bank)
|
||||||
return fmc;
|
return fmc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup the timimg registers */
|
/* Set the flash timimg register to match current clocking */
|
||||||
static void stellaris_set_flash_mode(struct flash_bank *bank,int mode)
|
static void stellaris_set_flash_timing(struct flash_bank *bank)
|
||||||
{
|
{
|
||||||
struct stellaris_flash_bank *stellaris_info = bank->driver_priv;
|
struct stellaris_flash_bank *stellaris_info = bank->driver_priv;
|
||||||
struct target *target = bank->target;
|
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);
|
stellaris_info->mck_freq = mainfreq/(1 + sysdiv);
|
||||||
else
|
else
|
||||||
stellaris_info->mck_freq = mainfreq;
|
stellaris_info->mck_freq = mainfreq;
|
||||||
|
|
||||||
/* Forget old flash timing */
|
|
||||||
stellaris_set_flash_mode(bank, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -714,9 +711,9 @@ static int stellaris_erase(struct flash_bank *bank, int first, int last)
|
||||||
return stellaris_mass_erase(bank);
|
return stellaris_mass_erase(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure the flash controller timing */
|
/* Refresh flash controller timing */
|
||||||
stellaris_read_clock_info(bank);
|
stellaris_read_clock_info(bank);
|
||||||
stellaris_set_flash_mode(bank,0);
|
stellaris_set_flash_timing(bank);
|
||||||
|
|
||||||
/* Clear and disable flash programming interrupts */
|
/* Clear and disable flash programming interrupts */
|
||||||
target_write_u32(target, FLASH_CIM, 0);
|
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;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure the flash controller timing */
|
/* Refresh flash controller timing */
|
||||||
stellaris_read_clock_info(bank);
|
stellaris_read_clock_info(bank);
|
||||||
stellaris_set_flash_mode(bank, 0);
|
stellaris_set_flash_timing(bank);
|
||||||
|
|
||||||
/* convert from pages to lockregions */
|
/* convert from pages to lockregions */
|
||||||
first /= 2;
|
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)
|
if (offset + count > bank->size)
|
||||||
return ERROR_FLASH_DST_OUT_OF_BANK;
|
return ERROR_FLASH_DST_OUT_OF_BANK;
|
||||||
|
|
||||||
/* Configure the flash controller timing */
|
/* Refresh flash controller timing */
|
||||||
stellaris_read_clock_info(bank);
|
stellaris_read_clock_info(bank);
|
||||||
stellaris_set_flash_mode(bank, 0);
|
stellaris_set_flash_timing(bank);
|
||||||
|
|
||||||
/* Clear and disable flash programming interrupts */
|
/* Clear and disable flash programming interrupts */
|
||||||
target_write_u32(target, FLASH_CIM, 0);
|
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;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Configure the flash controller timing */
|
/* Refresh flash controller timing */
|
||||||
stellaris_read_clock_info(bank);
|
stellaris_read_clock_info(bank);
|
||||||
stellaris_set_flash_mode(bank, 0);
|
stellaris_set_flash_timing(bank);
|
||||||
|
|
||||||
/* Clear and disable flash programming interrupts */
|
/* Clear and disable flash programming interrupts */
|
||||||
target_write_u32(target, FLASH_CIM, 0);
|
target_write_u32(target, FLASH_CIM, 0);
|
||||||
|
|
Loading…
Reference in New Issue