diff options
author | Tim Newsome <tim@sifive.com> | 2016-11-27 15:09:42 -0800 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2016-11-27 15:09:42 -0800 |
commit | b8879d81a2d342a6054cc92ed3c1a63ffce38bc0 (patch) | |
tree | 6ca2caebc9d973295fa7149bee7f048c9f41cee8 /src/flash | |
parent | 364f4b5ab955f76f8dfebc1eb8d28b8f39ad7df3 (diff) | |
download | riscv-openocd-b8879d81a2d342a6054cc92ed3c1a63ffce38bc0.zip riscv-openocd-b8879d81a2d342a6054cc92ed3c1a63ffce38bc0.tar.gz riscv-openocd-b8879d81a2d342a6054cc92ed3c1a63ffce38bc0.tar.bz2 |
Add timeout to infinite loop.
Change-Id: I7d005b4779154b4dfe8c9a26f4f0e351f426df9b
Diffstat (limited to 'src/flash')
-rw-r--r-- | src/flash/nor/fespi.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/flash/nor/fespi.c b/src/flash/nor/fespi.c index e6fffd4..f8436b1 100644 --- a/src/flash/nor/fespi.c +++ b/src/flash/nor/fespi.c @@ -226,7 +226,19 @@ static int fespi_tx(struct flash_bank *bank, uint8_t in){ struct fespi_flash_bank *fespi_info = bank->driver_priv; uint32_t ctrl_base = fespi_info->ctrl_base; - while ((int32_t) FESPI_READ_REG(FESPI_REG_TXFIFO) < 0); + int64_t start = timeval_ms(); + + while (1) { + if ((int32_t) FESPI_READ_REG(FESPI_REG_TXFIFO) >= 0) { + break; + } + int64_t now = timeval_ms(); + if (now - start > 1000) { + LOG_ERROR("txfifo stayed negative."); + return ERROR_TARGET_TIMEOUT; + } + } + FESPI_WRITE_REG(FESPI_REG_TXFIFO, in); return ERROR_OK; |