aboutsummaryrefslogtreecommitdiff
path: root/src/flash
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2016-11-27 15:09:42 -0800
committerTim Newsome <tim@sifive.com>2016-11-27 15:09:42 -0800
commitb8879d81a2d342a6054cc92ed3c1a63ffce38bc0 (patch)
tree6ca2caebc9d973295fa7149bee7f048c9f41cee8 /src/flash
parent364f4b5ab955f76f8dfebc1eb8d28b8f39ad7df3 (diff)
downloadriscv-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.c14
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;