diff options
Diffstat (limited to 'common/cmd_ide.c')
| -rw-r--r-- | common/cmd_ide.c | 52 | 
1 files changed, 27 insertions, 25 deletions
| diff --git a/common/cmd_ide.c b/common/cmd_ide.c index 0c9927be7..9e50599bf 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); |