Fix problems with CDROM drive as slave device on Lite5200 IDE bus.
diff --git a/CHANGELOG b/CHANGELOG
index 6c82aa4..4e7e1e4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@
 Changes since U-Boot 1.1.1:
 ======================================================================
 
+* Fix problems with CDROM drive as slave device on Lite5200 IDE bus.
+
 * Patch by Stephen Williams, 15 July 2004
   Set the PCI class code for JSE board as part of PCI interface setup
 
diff --git a/board/icecube/icecube.c b/board/icecube/icecube.c
index 15def0c..07c25ed 100644
--- a/board/icecube/icecube.c
+++ b/board/icecube/icecube.c
@@ -288,6 +288,8 @@
     	/* Configure PSC1_4 as GPIO output for ATA reset */
 	*(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_PSC1_4;
 	*(vu_long *) MPC5XXX_WU_GPIO_DIR    |= GPIO_PSC1_4;
+	/* Deassert reset */
+	*(vu_long *) MPC5XXX_WU_GPIO_DATA   |= GPIO_PSC1_4;
 }
 
 void ide_set_reset (int idereset)
@@ -296,6 +298,8 @@
 
 	if (idereset) {
 		*(vu_long *) MPC5XXX_WU_GPIO_DATA &= ~GPIO_PSC1_4;
+		/* Make a delay. MPC5200 spec says 25 usec min */
+		udelay(500000);
 	} else {
 		*(vu_long *) MPC5XXX_WU_GPIO_DATA |=  GPIO_PSC1_4;
 	}
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 0c9927b..9e50599 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -1009,8 +1009,10 @@
 
 #ifdef CONFIG_AMIGAONEG3SE
 	int max_bus_scan;
-	int retries = 0;
 	char *s;
+#endif
+#ifdef CONFIG_ATAPI
+	int retries = 0;
 	int do_retry = 0;
 #endif
 
@@ -1041,14 +1043,11 @@
 	dev_desc->if_type=IF_TYPE_IDE;
 #ifdef CONFIG_ATAPI
 
-#ifdef CONFIG_AMIGAONEG3SE
     do_retry = 0;
     retries = 0;
 
     /* Warning: This will be tricky to read */
     while (retries <= 1) {
-#endif	/* CONFIG_AMIGAONEG3SE */
-
 	/* check signature */
 	if ((ide_inb(device,ATA_SECT_CNT) == 0x01) &&
 		 (ide_inb(device,ATA_SECT_NUM) == 0x01) &&
@@ -1079,32 +1078,35 @@
 
 	if (((c & ATA_STAT_DRQ) == 0) ||
 	    ((c & (ATA_STAT_FAULT|ATA_STAT_ERR)) != 0) ) {
+#ifdef CONFIG_ATAPI
 #ifdef CONFIG_AMIGAONEG3SE
-		if (retries == 0) {
-			do_retry = 1;
-		} else {
-			return;
-		}
+		s = getenv("ide_doreset");
+		if (s && strcmp(s, "on") == 0)
+#endif
+			{
+				/* Need to soft reset the device in case it's an ATAPI...  */
+				PRINTF("Retrying...\n");
+				ide_outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device));
+				udelay(100000);
+				ide_outb (device, ATA_COMMAND, 0x08);
+				udelay (500000);	/* 500 ms */
+			}
+		/* Select device
+		 */
+		ide_outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device));
+		retries++;
 #else
 		return;
-#endif	/* CONFIG_AMIGAONEG3SE */
+#endif
 	}
-
-#ifdef CONFIG_AMIGAONEG3SE
-	s = getenv("ide_doreset");
-	if (s && strcmp(s, "on") == 0 && 1 == do_retry) {
-		/* Need to soft reset the device in case it's an ATAPI...  */
-		PRINTF("Retrying...\n");
-		ide_outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device));
-		udelay(100000);
-		ide_outb (device, ATA_COMMAND, 0x08);
-		udelay (100000);	/* 100 ms */
-		retries++;
-	} else {
-		retries = 100;
-	}
+#ifdef CONFIG_ATAPI
+	else
+		break;
     }	/* see above - ugly to read */
-#endif	/* CONFIG_AMIGAONEG3SE */
+
+	if (retries == 2) /* Not found */
+		return;
+#endif
 
 	input_swap_data (device, iobuf, ATA_SECTORWORDS);
 
diff --git a/include/configs/IceCube.h b/include/configs/IceCube.h
index ce6e591..3c1b2ab 100644
--- a/include/configs/IceCube.h
+++ b/include/configs/IceCube.h
@@ -84,6 +84,7 @@
 /* Partitions */
 #define CONFIG_MAC_PARTITION
 #define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
 
 /* USB */
 #if 1
@@ -324,7 +325,7 @@
 #define CONFIG_IDE_PREINIT
 
 #define CFG_IDE_MAXBUS		1	/* max. 1 IDE bus		*/
-#define CFG_IDE_MAXDEVICE	1	/* max. 1 drive per IDE bus	*/
+#define CFG_IDE_MAXDEVICE	2	/* max. 1 drive per IDE bus	*/
 
 #define CFG_ATA_IDE0_OFFSET	0x0000
 
@@ -342,4 +343,6 @@
 /* Interval between registers                                                */
 #define CFG_ATA_STRIDE          4
 
+#define CONFIG_ATAPI            1
+
 #endif /* __CONFIG_H */