summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dev/arm/flash_device.cc2
-rw-r--r--src/dev/arm/ufs_device.cc4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/dev/arm/flash_device.cc b/src/dev/arm/flash_device.cc
index b651a1eeb..8e337cd86 100644
--- a/src/dev/arm/flash_device.cc
+++ b/src/dev/arm/flash_device.cc
@@ -605,7 +605,7 @@ FlashDevice::drain()
void
FlashDevice::checkDrain()
{
- if (drainState() == DrainState::Draining)
+ if (drainState() != DrainState::Draining)
return;
if (planeEvent.when() > curTick()) {
diff --git a/src/dev/arm/ufs_device.cc b/src/dev/arm/ufs_device.cc
index 61b125ef5..fbc3bd394 100644
--- a/src/dev/arm/ufs_device.cc
+++ b/src/dev/arm/ufs_device.cc
@@ -1822,6 +1822,8 @@ UFSHostDevice::generateInterrupt()
pendingDoorbells = 0;
DPRINTF(UFSHostDevice, "Clear doorbell %X\n", UFSHCIMem.TRUTRLDBR);
+ checkDrain();
+
/**step6 raise interrupt*/
gic->sendInt(intNum);
DPRINTF(UFSHostDevice, "Send interrupt @ transaction: 0x%8x!\n",
@@ -1838,6 +1840,8 @@ UFSHostDevice::clearInterrupt()
gic->clearInt(intNum);
DPRINTF(UFSHostDevice, "Clear interrupt: 0x%8x!\n", countInt);
+ checkDrain();
+
if (!(UFSHCIMem.TRUTRLDBR)) {
idlePhaseStart = curTick();
}