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(); }