From: Piotr Sawicki Date: Fri, 25 Feb 2011 21:07:38 +0000 (-0800) Subject: isci: handle cases where a d2h fis is used report an ncq error X-Git-Tag: v3.0-rc6~1^2~1^2~235 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=3ff0121a704172aa4bca9c4026b419ddfe1921c8;p=karo-tx-linux.git 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 --- 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 1d8d9013068f..9a615f07cefe 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;