flash/nrf5: time-based timeout waiting for flash controller
Change-Id: Id214df154dc359ca130c8d8fe1554d106621b9cd Signed-off-by: Kai Geissdoerfer <kai.geissdoerfer@tu-dresden.de> Reviewed-on: http://openocd.zylin.com/4648 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
8c67115c7b
commit
ad41246cf6
|
@ -26,6 +26,7 @@
|
||||||
#include <target/algorithm.h>
|
#include <target/algorithm.h>
|
||||||
#include <target/armv7m.h>
|
#include <target/armv7m.h>
|
||||||
#include <helper/types.h>
|
#include <helper/types.h>
|
||||||
|
#include <helper/time_support.h>
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NRF5_FLASH_BASE = 0x00000000,
|
NRF5_FLASH_BASE = 0x00000000,
|
||||||
|
@ -240,7 +241,8 @@ static int nrf5_wait_for_nvmc(struct nrf5_info *chip)
|
||||||
{
|
{
|
||||||
uint32_t ready;
|
uint32_t ready;
|
||||||
int res;
|
int res;
|
||||||
int timeout = 100;
|
int timeout_ms = 200;
|
||||||
|
int64_t ts_start = timeval_ms();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
res = target_read_u32(chip->target, NRF5_NVMC_READY, &ready);
|
res = target_read_u32(chip->target, NRF5_NVMC_READY, &ready);
|
||||||
|
@ -252,8 +254,9 @@ static int nrf5_wait_for_nvmc(struct nrf5_info *chip)
|
||||||
if (ready == 0x00000001)
|
if (ready == 0x00000001)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
||||||
alive_sleep(1);
|
keep_alive();
|
||||||
} while (timeout--);
|
|
||||||
|
} while ((timeval_ms()-ts_start) < timeout_ms);
|
||||||
|
|
||||||
LOG_DEBUG("Timed out waiting for NVMC_READY");
|
LOG_DEBUG("Timed out waiting for NVMC_READY");
|
||||||
return ERROR_FLASH_BUSY;
|
return ERROR_FLASH_BUSY;
|
||||||
|
|
Loading…
Reference in New Issue