Commit 3ff0121a authored by Piotr Sawicki's avatar Piotr Sawicki Committed by Dan Williams
Browse files

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: default avatarPiotr Sawicki <piotr.sawicki@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent a8d4b9fe
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -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;