pm80xx: Set device state response logic fix.
Subsystems (2)
PATCH v3 4/10 pm80xx: Set device state response logic fix.
Quoted 1 line
From
dc172fd3d297afac55060216a3d2ce6e898a0960Mon Sep 17 00:00:00 2001
From: Anand Kumar Santhanam <[email protected]>
Date: Tue, 17 Sep 2013 16:58:10 +0530
Subject: [PATCH V3 04/10] pm80xx: Set device state response logic fix.
Signed-off-by [email protected]
Reviewed-by Jack Wang <[email protected]>
--- drivers/scsi/pm8001/pm8001_hwi.c | 6 ++++-- drivers/scsi/pm8001/pm8001_sas.c | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-)
drivers/scsi/pm8001/pm8001_hwi.c +4 -2
@@ -3087,8 +3087,8 @@ void pm8001_mpi_set_dev_state_resp(struct pm8001_hba_info *pm8001_ha,struct pm8001_device *pm8001_dev = ccb->device;u32 status =le32_to_cpu (pPayload->status);u32 device_id =le32_to_cpu (pPayload->device_id); -u8 pds =le32_to_cpu (pPayload->pds_nds) |PDS_BITS ; -u8 nds =le32_to_cpu (pPayload->pds_nds) |NDS_BITS ; +u8 pds =le32_to_cpu (pPayload->pds_nds) &PDS_BITS ; +u8 nds =le32_to_cpu (pPayload->pds_nds) &NDS_BITS ;PM8001_MSG_DBG (pm8001_ha,pm8001_printk ("Set device id = 0x%x state " "from 0x%x to 0x%x status = 0x%x!\n" , device_id, pds, nds, status));
@@ -4700,6 +4700,8 @@ int pm8001_chip_ssp_tm_req(struct pm8001_hba_info *pm8001_ha, sspTMCmd.tmf =cpu_to_le32 (tmf->tmf);memcpy (sspTMCmd.lun, task->ssp_task.LUN,8 ); sspTMCmd.tag =cpu_to_le32 (ccb->ccb_tag); +if (pm8001_ha->chip_id != chip_8001) + sspTMCmd.ds_ads_m =0x08 ; circularQ = &pm8001_ha->inbnd_q_tbl[0 ]; ret =pm8001_mpi_build_cmd (pm8001_ha, circularQ, opc, &sspTMCmd,0 );return ret;
drivers/scsi/pm8001/pm8001_sas.c +8 -1
@@ -447,7 +447,6 @@ static int pm8001_task_exec(struct sas_task *task, const int num,break ;case SAS_PROTOCOL_SATA :case SAS_PROTOCOL_STP : -case SAS_PROTOCOL_SATA |SAS_PROTOCOL_STP : rc =pm8001_task_prep_ata (pm8001_ha, ccb);break ;default :
@@ -704,6 +703,8 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,int res, retry;struct sas_task *task =NULL ;struct pm8001_hba_info *pm8001_ha =pm8001_find_ha_by_dev (dev); +struct pm8001_device *pm8001_dev = dev->lldd_dev; +DECLARE_COMPLETION_ONSTACK (completion_setstate);for (retry =0 ; retry <3 ; retry++) { task =sas_alloc_slow_task (GFP_KERNEL );
@@ -729,6 +730,12 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev, goto ex_err; }wait_for_completion (&task->slow_task->completion); +if (pm8001_ha->chip_id != chip_8001) { + pm8001_dev->setds_completion = &completion_setstate; +PM8001_CHIP_DISP ->set_dev_state_req (pm8001_ha, + pm8001_dev,0x01 ); +wait_for_completion (&completion_setstate); + } res = -TMF_RESP_FUNC_FAILED ;/* Even TMF timed out, return direct. */ if ((task->task_state_flags &SAS_TASK_STATE_ABORTED )) {
Signature · 1 line
1.7.1