From 3ff0121a704172aa4bca9c4026b419ddfe1921c8 Mon Sep 17 00:00:00 2001 From: Piotr Sawicki Date: Fri, 25 Feb 2011 13:07:38 -0800 Subject: isci: handle cases where a d2h fis is used report an ncq error Observed that some devices return a d2h fis, treat like an sdb error fis. Signed-off-by: Piotr Sawicki Signed-off-by: Dan Williams --- .../scsi/isci/core/scic_sds_stp_remote_device.c | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'drivers/scsi') diff --git a/drivers/scsi/isci/core/scic_sds_stp_remote_device.c b/drivers/scsi/isci/core/scic_sds_stp_remote_device.c index 1d8d901..9a615f0 100644 --- a/drivers/scsi/isci/core/scic_sds_stp_remote_device.c +++ b/drivers/scsi/isci/core/scic_sds_stp_remote_device.c @@ -367,10 +367,27 @@ static enum sci_status scic_sds_stp_remote_device_ready_ncq_substate_frame_handl ); if (status == SCI_SUCCESS) { - if ( - (frame_header->fis_type == SATA_FIS_TYPE_SETDEVBITS) - && (frame_header->status & ATA_STATUS_REG_ERROR_BIT) - ) { + if (frame_header->fis_type == SATA_FIS_TYPE_SETDEVBITS && + (frame_header->status & ATA_STATUS_REG_ERROR_BIT)) { + this_device->not_ready_reason = + SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; + + /* + * / @todo Check sactive and complete associated IO + * if any. + */ + + sci_base_state_machine_change_state( + &this_device->ready_substate_machine, + SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR + ); + } else if (frame_header->fis_type == SATA_FIS_TYPE_REGD2H && + (frame_header->status & ATA_STATUS_REG_ERROR_BIT)) { + + /* + * Some devices return D2H FIS when an NCQ error is detected. + * Treat this like an SDB error FIS ready reason. + */ this_device->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; -- cgit v1.1