From e1a2d7255eb8c282fc91e951c7453932c1e9a55f Mon Sep 17 00:00:00 2001 From: "Rodrigo L. Rosa" Date: Tue, 30 Aug 2011 14:19:09 -0700 Subject: [PATCH] optional crc for flash writing crc check was always performed on newly flashed data, now it is optional flash mem can be locked by writing a specific word to a specific address in flash. to verify flash, target must be halted, and this will (when the new halt sequence is implemented) require reseting the chip. if the target is reset after writing the lock words, then it will lock, hence the CRC will fail because it is not possible to read stuff from the target. also added a function that resets the jtag state machine. this is not used yet, but will be soon. it is implemented to allow strict control over JTAG state machine, necessary to implement to halt and unlocking sequences. --- src/flash/nor/dsp5680xx_flash.c | 2 +- src/target/dsp5680xx.c | 53 ++++++++++++++++++++++----------- src/target/dsp5680xx.h | 3 +- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/flash/nor/dsp5680xx_flash.c b/src/flash/nor/dsp5680xx_flash.c index 4ed72066..688493b3 100644 --- a/src/flash/nor/dsp5680xx_flash.c +++ b/src/flash/nor/dsp5680xx_flash.c @@ -157,7 +157,7 @@ static int dsp5680xx_flash_write(struct flash_bank *bank, uint8_t *buffer, uint3 LOG_ERROR("%s: Writing to odd addresses not supported. This chip uses word addressing, Openocd only supports byte addressing. The workaround results in disabling writing to odd byte addresses.",__FUNCTION__); return ERROR_FAIL; } - retval = dsp5680xx_f_wr(bank->target, buffer, bank->base + offset/2, count); + retval = dsp5680xx_f_wr(bank->target, buffer, bank->base + offset/2, count, 0); uint32_t addr_word; for(addr_word = bank->base + offset/2;addr_wordtap->enabled){ @@ -1457,7 +1476,7 @@ int dsp5680xx_f_unlock(struct target * target){ int dsp5680xx_f_lock(struct target * target){ int retval; uint16_t lock_word[] = {HFM_LOCK_FLASH,HFM_LOCK_FLASH}; - retval = dsp5680xx_f_wr(target,(uint8_t *)(lock_word),HFM_LOCK_ADDR_L,4); + retval = dsp5680xx_f_wr(target,(uint8_t *)(lock_word),HFM_LOCK_ADDR_L,4,1); err_check_propagate(retval); return retval; } diff --git a/src/target/dsp5680xx.h b/src/target/dsp5680xx.h index 6c86ef80..05b4a28e 100644 --- a/src/target/dsp5680xx.h +++ b/src/target/dsp5680xx.h @@ -234,10 +234,11 @@ static inline struct dsp5680xx_common *target_to_dsp5680xx(struct target *target * @param buffer * @param address Word addressing. * @param count In bytes. + * @param verify_flash Execute a CRC check after flashing. * * @return */ -int dsp5680xx_f_wr(struct target * target, uint8_t *buffer, uint32_t address, uint32_t count); +int dsp5680xx_f_wr(struct target * target, uint8_t *buffer, uint32_t address, uint32_t count, int is_flash_lock); /** * The FM has the funcionality of checking if the flash array is erased. This function executes it. It does not support individual sector analysis. -- 2.39.5