From 64f70bede37f833d2ed31311ff293c759c41a2a6 Mon Sep 17 00:00:00 2001 From: wdenk Date: Tue, 28 Sep 2004 20:34:50 +0000 Subject: 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 @@ void init_ide_reset (void) /* 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 @@ void ide_set_reset (int idereset) 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 @@ static void ide_ident (block_dev_desc_t *dev_desc) #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 @@ static void ide_ident (block_dev_desc_t *dev_desc) 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 @@ static void ide_ident (block_dev_desc_t *dev_desc) 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; - } -#else - return; -#endif /* CONFIG_AMIGAONEG3SE */ - } - -#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"); + 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)); - udelay(100000); - ide_outb (device, ATA_COMMAND, 0x08); - udelay (100000); /* 100 ms */ retries++; - } else { - retries = 100; +#else + return; +#endif } +#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 */ -- cgit v0.10.2