else
                        dev->sa_firmware = 0;
 
+               if (status[4] & le32_to_cpu(AAC_EXTOPT_SOFT_RESET))
+                       dev->soft_reset_support = 1;
+               else
+                       dev->soft_reset_support = 0;
+
                if ((dev->comm_interface == AAC_COMM_MESSAGE) &&
                    (status[2] > dev->base_size)) {
                        aac_adapter_ioremap(dev, 0);
 
        return ctrl_up;
 }
 
+static void aac_src_drop_io(struct aac_dev *dev)
+{
+       if (!dev->soft_reset_support)
+               return;
+
+       aac_adapter_sync_cmd(dev, DROP_IO,
+                       0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL);
+}
+
 static void aac_notify_fw_of_iop_reset(struct aac_dev *dev)
 {
        aac_adapter_sync_cmd(dev, IOP_RESET_ALWAYS, 0, 0, 0, 0, 0, 0, NULL,
                                                NULL, NULL, NULL, NULL);
+       aac_src_drop_io(dev);
 }
 
 static void aac_send_iop_reset(struct aac_dev *dev)