Skip to content

Commit

Permalink
fsi/sbefifo: Fix reset timeout
Browse files Browse the repository at this point in the history
[ Upstream commit 9ab1428 ]

On BMCs with lower timer resolution than 1ms, msleep(1) will take
way longer than 1ms, so looping 10k times won't wait for 10s but
significantly longer.

Fix this by using jiffies like the rest of the code.

Fixes: 9f4a8a2 ("fsi/sbefifo: Add driver for the SBE FIFO")
Signed-off-by: Joachim Fenkes <fenkes@de.ibm.com>
Link: https://lore.kernel.org/r/20200724071518.430515-3-joel@jms.id.au
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
fenkes-ibm authored and gregkh committed Jul 14, 2021
1 parent 4a95eb0 commit e5a3a31
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions drivers/fsi/fsi-sbefifo.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,8 @@ static int sbefifo_up_write(struct sbefifo *sbefifo, __be32 word)
static int sbefifo_request_reset(struct sbefifo *sbefifo)
{
struct device *dev = &sbefifo->fsi_dev->dev;
u32 status, timeout;
unsigned long end_time;
u32 status;
int rc;

dev_dbg(dev, "Requesting FIFO reset\n");
Expand All @@ -341,7 +342,8 @@ static int sbefifo_request_reset(struct sbefifo *sbefifo)
}

/* Wait for it to complete */
for (timeout = 0; timeout < SBEFIFO_RESET_TIMEOUT; timeout++) {
end_time = jiffies + msecs_to_jiffies(SBEFIFO_RESET_TIMEOUT);
while (!time_after(jiffies, end_time)) {
rc = sbefifo_regr(sbefifo, SBEFIFO_UP | SBEFIFO_STS, &status);
if (rc) {
dev_err(dev, "Failed to read UP fifo status during reset"
Expand All @@ -355,7 +357,7 @@ static int sbefifo_request_reset(struct sbefifo *sbefifo)
return 0;
}

msleep(1);
cond_resched();
}
dev_err(dev, "FIFO reset timed out\n");

Expand Down

0 comments on commit e5a3a31

Please sign in to comment.