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 <piotr.sawicki@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
a8d4b9fe91
commit
3ff0121a70
1 changed files with 21 additions and 4 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue