Index: IdeMode.c
===================================================================
--- IdeMode.c	(revision 16207)
+++ IdeMode.c	(working copy)
@@ -280,6 +280,7 @@
 
     if ((StatusBlock.AtaError & ATA_ERRREG_ABRT) != 0) {
       DEBUG ((EFI_D_ERROR, "CheckRegisterStatus()-- %02x : Error : Abort\n", StatusBlock.AtaError));
+//      CpuDeadLoop();
     }
 
     if ((StatusBlock.AtaError & ATA_ERRREG_TK0NF) != 0) {
@@ -2593,6 +2594,11 @@
 
   for (IdeDevice = 0; IdeDevice < EfiIdeMaxDevice; IdeDevice++) {
     //
+    // Select Master or Slave device to get the return signature for ATA DEVICE DIAGNOSTIC cmd.
+    //
+    IdeWritePortB (PciIo, IdeRegisters->Head, (UINT8)((IdeDevice << 4) | 0xe0));
+
+    //
     // Send ATA Device Execut Diagnostic command.
     // This command should work no matter DRDY is ready or not
     //
