diff options
-rw-r--r-- | drivers/block/rsxx/cregs.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/block/rsxx/cregs.c b/drivers/block/rsxx/cregs.c index 4914464c19fc..926dce9c452f 100644 --- a/drivers/block/rsxx/cregs.c +++ b/drivers/block/rsxx/cregs.c | |||
@@ -431,6 +431,15 @@ static int __issue_creg_rw(struct rsxx_cardinfo *card, | |||
431 | *hw_stat = completion.creg_status; | 431 | *hw_stat = completion.creg_status; |
432 | 432 | ||
433 | if (completion.st) { | 433 | if (completion.st) { |
434 | /* | ||
435 | * This read is needed to verify that there has not been any | ||
436 | * extreme errors that might have occurred, i.e. EEH. The | ||
437 | * function iowrite32 will not detect EEH errors, so it is | ||
438 | * necessary that we recover if such an error is the reason | ||
439 | * for the timeout. This is a dummy read. | ||
440 | */ | ||
441 | ioread32(card->regmap + SCRATCH); | ||
442 | |||
434 | dev_warn(CARD_TO_DEV(card), | 443 | dev_warn(CARD_TO_DEV(card), |
435 | "creg command failed(%d x%08x)\n", | 444 | "creg command failed(%d x%08x)\n", |
436 | completion.st, addr); | 445 | completion.st, addr); |