[SCSI] pm80xx: Indirect SMP request fix.
authorAnand Kumar Santhanam <AnandKumar.Santhanam@pmcs.com>
Tue, 17 Sep 2013 09:07:14 +0000 (14:37 +0530)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 25 Oct 2013 08:58:14 +0000 (09:58 +0100)
Fix for indirect data transfer mode in case of SMP request.

Signed-off-by: Anandkumar.Santhanam@pmcs.com
Reviewed-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/pm8001/pm80xx_hwi.c

index 6f836d18f26918ad8425c35a92c3eb5577f73473..8bac5aeaa804c75b97cc1e8faba4a2e1d1c8ee08 100644 (file)
@@ -3492,8 +3492,6 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
        else
                pm8001_ha->smp_exp_mode = SMP_INDIRECT;
 
-       /* DIRECT MODE support only in spcv/ve */
-       pm8001_ha->smp_exp_mode = SMP_DIRECT;
 
        tmp_addr = cpu_to_le64((u64)sg_dma_address(&task->smp_task.smp_req));
        preq_dma_addr = (char *)phys_to_virt(tmp_addr);
@@ -3509,7 +3507,7 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
                /* exclude top 4 bytes for SMP req header */
                smp_cmd.long_smp_req.long_req_addr =
                        cpu_to_le64((u64)sg_dma_address
-                               (&task->smp_task.smp_req) - 4);
+                               (&task->smp_task.smp_req) + 4);
                /* exclude 4 bytes for SMP req header and CRC */
                smp_cmd.long_smp_req.long_req_size =
                        cpu_to_le32((u32)sg_dma_len(&task->smp_task.smp_req)-8);