Some old WD SATA disks report supported and enabled device-initiated

interface power management, but return ABORT error on attempt to disable
it. Make CAM SATA probe sequence ignore this error, as it is not fatal.
This commit is contained in:
Alexander Motin 2011-01-15 09:43:25 +00:00
parent 5f73287a6e
commit 26bdaeddd8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=217444

View File

@ -727,6 +727,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
struct ata_params *ident_buf;
probe_softc *softc;
struct cam_path *path;
cam_status status;
u_int32_t priority;
u_int caps;
int found = 1;
@ -751,6 +752,7 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
xpt_release_devq(done_ccb->ccb_h.path, /*count*/1,
/*run_queue*/TRUE);
}
status = done_ccb->ccb_h.status & CAM_STATUS_MASK;
if (softc->restart) {
softc->faults++;
if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) ==
@ -760,12 +762,24 @@ probedone(struct cam_periph *periph, union ccb *done_ccb)
goto done;
else
softc->restart = 0;
} else
/* Old PIO2 devices may not support mode setting. */
if (softc->action == PROBE_SETMODE &&
} else if (softc->action == PROBE_SETMODE &&
status == CAM_ATA_STATUS_ERROR &&
ata_max_pmode(ident_buf) <= ATA_PIO2 &&
(ident_buf->capabilities1 & ATA_SUPPORT_IORDY) == 0)
(ident_buf->capabilities1 & ATA_SUPPORT_IORDY) == 0) {
goto noerror;
/*
* Some old WD SATA disks report supported and enabled
* device-initiated interface power management, but return
* ABORT on attempt to disable it.
*/
} else if (softc->action == PROBE_SETPM &&
status == CAM_ATA_STATUS_ERROR) {
goto noerror;
}
/*
* If we get to this point, we got an error status back
* from the inquiry and the error status doesn't require