|
@@ -2008,13 +2008,15 @@ static int ata_bus_softreset(struct ata_port *ap, unsigned int devmask,
|
|
|
|
|
|
DPRINTK("ata%u: bus reset via SRST\n", ap->print_id);
|
|
|
|
|
|
- /* software reset. causes dev0 to be selected */
|
|
|
- iowrite8(ap->ctl, ioaddr->ctl_addr);
|
|
|
- udelay(20); /* FIXME: flush */
|
|
|
- iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
|
|
|
- udelay(20); /* FIXME: flush */
|
|
|
- iowrite8(ap->ctl, ioaddr->ctl_addr);
|
|
|
- ap->last_ctl = ap->ctl;
|
|
|
+ if (ap->ioaddr.ctl_addr) {
|
|
|
+ /* software reset. causes dev0 to be selected */
|
|
|
+ iowrite8(ap->ctl, ioaddr->ctl_addr);
|
|
|
+ udelay(20); /* FIXME: flush */
|
|
|
+ iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
|
|
|
+ udelay(20); /* FIXME: flush */
|
|
|
+ iowrite8(ap->ctl, ioaddr->ctl_addr);
|
|
|
+ ap->last_ctl = ap->ctl;
|
|
|
+ }
|
|
|
|
|
|
/* wait the port to become ready */
|
|
|
return ata_sff_wait_after_reset(&ap->link, devmask, deadline);
|
|
@@ -2215,10 +2217,6 @@ void ata_sff_error_handler(struct ata_port *ap)
|
|
|
|
|
|
spin_unlock_irqrestore(ap->lock, flags);
|
|
|
|
|
|
- /* ignore ata_sff_softreset if ctl isn't accessible */
|
|
|
- if (softreset == ata_sff_softreset && !ap->ioaddr.ctl_addr)
|
|
|
- softreset = NULL;
|
|
|
-
|
|
|
/* ignore built-in hardresets if SCR access is not available */
|
|
|
if ((hardreset == sata_std_hardreset ||
|
|
|
hardreset == sata_sff_hardreset) && !sata_scr_valid(&ap->link))
|