aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-10-10 13:59:50 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2018-10-17 21:58:52 -0400
commitf73bdebdf020a31ad43ce4de590ec7a09e383abd (patch)
treee208c83cd5d4dad081fcf5694c73c3111bfb7546
parent03676e1d31fa0e156df0caecbacf20b488f7bd3a (diff)
scsi: pm8001: switch to generic DMA API
Switch from the legacy PCI DMA API to the generic DMA API. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Jack Wang <jinpu.wang@profitbricks.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/pm8001/pm8001_hwi.c22
-rw-r--r--drivers/scsi/pm8001/pm8001_init.c28
-rw-r--r--drivers/scsi/pm8001/pm8001_sas.c8
-rw-r--r--drivers/scsi/pm8001/pm80xx_hwi.c22
4 files changed, 31 insertions, 49 deletions
diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
index e37ab9789ba6..d0bb357034d8 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.c
+++ b/drivers/scsi/pm8001/pm8001_hwi.c
@@ -2420,7 +2420,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
2420 sata_resp = &psataPayload->sata_resp[0]; 2420 sata_resp = &psataPayload->sata_resp[0];
2421 resp = (struct ata_task_resp *)ts->buf; 2421 resp = (struct ata_task_resp *)ts->buf;
2422 if (t->ata_task.dma_xfer == 0 && 2422 if (t->ata_task.dma_xfer == 0 &&
2423 t->data_dir == PCI_DMA_FROMDEVICE) { 2423 t->data_dir == DMA_FROM_DEVICE) {
2424 len = sizeof(struct pio_setup_fis); 2424 len = sizeof(struct pio_setup_fis);
2425 PM8001_IO_DBG(pm8001_ha, 2425 PM8001_IO_DBG(pm8001_ha,
2426 pm8001_printk("PIO read len = %d\n", len)); 2426 pm8001_printk("PIO read len = %d\n", len));
@@ -4203,12 +4203,12 @@ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
4203 return ret; 4203 return ret;
4204} 4204}
4205 4205
4206/* PCI_DMA_... to our direction translation. */ 4206/* DMA_... to our direction translation. */
4207static const u8 data_dir_flags[] = { 4207static const u8 data_dir_flags[] = {
4208 [PCI_DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT,/* UNSPECIFIED */ 4208 [DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT, /* UNSPECIFIED */
4209 [PCI_DMA_TODEVICE] = DATA_DIR_OUT,/* OUTBOUND */ 4209 [DMA_TO_DEVICE] = DATA_DIR_OUT, /* OUTBOUND */
4210 [PCI_DMA_FROMDEVICE] = DATA_DIR_IN,/* INBOUND */ 4210 [DMA_FROM_DEVICE] = DATA_DIR_IN, /* INBOUND */
4211 [PCI_DMA_NONE] = DATA_DIR_NONE,/* NO TRANSFER */ 4211 [DMA_NONE] = DATA_DIR_NONE, /* NO TRANSFER */
4212}; 4212};
4213void 4213void
4214pm8001_chip_make_sg(struct scatterlist *scatter, int nr, void *prd) 4214pm8001_chip_make_sg(struct scatterlist *scatter, int nr, void *prd)
@@ -4255,13 +4255,13 @@ static int pm8001_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
4255 * DMA-map SMP request, response buffers 4255 * DMA-map SMP request, response buffers
4256 */ 4256 */
4257 sg_req = &task->smp_task.smp_req; 4257 sg_req = &task->smp_task.smp_req;
4258 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE); 4258 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE);
4259 if (!elem) 4259 if (!elem)
4260 return -ENOMEM; 4260 return -ENOMEM;
4261 req_len = sg_dma_len(sg_req); 4261 req_len = sg_dma_len(sg_req);
4262 4262
4263 sg_resp = &task->smp_task.smp_resp; 4263 sg_resp = &task->smp_task.smp_resp;
4264 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE); 4264 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE);
4265 if (!elem) { 4265 if (!elem) {
4266 rc = -ENOMEM; 4266 rc = -ENOMEM;
4267 goto err_out; 4267 goto err_out;
@@ -4294,10 +4294,10 @@ static int pm8001_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
4294 4294
4295err_out_2: 4295err_out_2:
4296 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, 4296 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1,
4297 PCI_DMA_FROMDEVICE); 4297 DMA_FROM_DEVICE);
4298err_out: 4298err_out:
4299 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, 4299 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1,
4300 PCI_DMA_TODEVICE); 4300 DMA_TO_DEVICE);
4301 return rc; 4301 return rc;
4302} 4302}
4303 4303
@@ -4376,7 +4376,7 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
4376 u32 opc = OPC_INB_SATA_HOST_OPSTART; 4376 u32 opc = OPC_INB_SATA_HOST_OPSTART;
4377 memset(&sata_cmd, 0, sizeof(sata_cmd)); 4377 memset(&sata_cmd, 0, sizeof(sata_cmd));
4378 circularQ = &pm8001_ha->inbnd_q_tbl[0]; 4378 circularQ = &pm8001_ha->inbnd_q_tbl[0];
4379 if (task->data_dir == PCI_DMA_NONE) { 4379 if (task->data_dir == DMA_NONE) {
4380 ATAP = 0x04; /* no data*/ 4380 ATAP = 0x04; /* no data*/
4381 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); 4381 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
4382 } else if (likely(!task->ata_task.device_control_reg_update)) { 4382 } else if (likely(!task->ata_task.device_control_reg_update)) {
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index 501830caba21..d71e7e4ec29c 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -152,7 +152,7 @@ static void pm8001_free(struct pm8001_hba_info *pm8001_ha)
152 152
153 for (i = 0; i < USI_MAX_MEMCNT; i++) { 153 for (i = 0; i < USI_MAX_MEMCNT; i++) {
154 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) { 154 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) {
155 pci_free_consistent(pm8001_ha->pdev, 155 dma_free_coherent(&pm8001_ha->pdev->dev,
156 (pm8001_ha->memoryMap.region[i].total_len + 156 (pm8001_ha->memoryMap.region[i].total_len +
157 pm8001_ha->memoryMap.region[i].alignment), 157 pm8001_ha->memoryMap.region[i].alignment),
158 pm8001_ha->memoryMap.region[i].virt_ptr, 158 pm8001_ha->memoryMap.region[i].virt_ptr,
@@ -501,30 +501,12 @@ static int pci_go_44(struct pci_dev *pdev)
501{ 501{
502 int rc; 502 int rc;
503 503
504 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(44))) { 504 rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(44));
505 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(44)); 505 if (rc) {
506 if (rc) { 506 rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
507 rc = pci_set_consistent_dma_mask(pdev, 507 if (rc)
508 DMA_BIT_MASK(32));
509 if (rc) {
510 dev_printk(KERN_ERR, &pdev->dev,
511 "44-bit DMA enable failed\n");
512 return rc;
513 }
514 }
515 } else {
516 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
517 if (rc) {
518 dev_printk(KERN_ERR, &pdev->dev, 508 dev_printk(KERN_ERR, &pdev->dev,
519 "32-bit DMA enable failed\n"); 509 "32-bit DMA enable failed\n");
520 return rc;
521 }
522 rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
523 if (rc) {
524 dev_printk(KERN_ERR, &pdev->dev,
525 "32-bit consistent DMA enable failed\n");
526 return rc;
527 }
528 } 510 }
529 return rc; 511 return rc;
530} 512}
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index 84092e4e1aa9..b3be49d41375 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -116,8 +116,8 @@ int pm8001_mem_alloc(struct pci_dev *pdev, void **virt_addr,
116 u64 align_offset = 0; 116 u64 align_offset = 0;
117 if (align) 117 if (align)
118 align_offset = (dma_addr_t)align - 1; 118 align_offset = (dma_addr_t)align - 1;
119 mem_virt_alloc = pci_zalloc_consistent(pdev, mem_size + align, 119 mem_virt_alloc = dma_zalloc_coherent(&pdev->dev, mem_size + align,
120 &mem_dma_handle); 120 &mem_dma_handle, GFP_KERNEL);
121 if (!mem_virt_alloc) { 121 if (!mem_virt_alloc) {
122 pm8001_printk("memory allocation error\n"); 122 pm8001_printk("memory allocation error\n");
123 return -1; 123 return -1;
@@ -533,9 +533,9 @@ void pm8001_ccb_task_free(struct pm8001_hba_info *pm8001_ha,
533 switch (task->task_proto) { 533 switch (task->task_proto) {
534 case SAS_PROTOCOL_SMP: 534 case SAS_PROTOCOL_SMP:
535 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1, 535 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_resp, 1,
536 PCI_DMA_FROMDEVICE); 536 DMA_FROM_DEVICE);
537 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1, 537 dma_unmap_sg(pm8001_ha->dev, &task->smp_task.smp_req, 1,
538 PCI_DMA_TODEVICE); 538 DMA_TO_DEVICE);
539 break; 539 break;
540 540
541 case SAS_PROTOCOL_SATA: 541 case SAS_PROTOCOL_SATA:
diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
index 9864a3c7547b..63e4f7d34d6c 100644
--- a/drivers/scsi/pm8001/pm80xx_hwi.c
+++ b/drivers/scsi/pm8001/pm80xx_hwi.c
@@ -2133,7 +2133,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
2133 sata_resp = &psataPayload->sata_resp[0]; 2133 sata_resp = &psataPayload->sata_resp[0];
2134 resp = (struct ata_task_resp *)ts->buf; 2134 resp = (struct ata_task_resp *)ts->buf;
2135 if (t->ata_task.dma_xfer == 0 && 2135 if (t->ata_task.dma_xfer == 0 &&
2136 t->data_dir == PCI_DMA_FROMDEVICE) { 2136 t->data_dir == DMA_FROM_DEVICE) {
2137 len = sizeof(struct pio_setup_fis); 2137 len = sizeof(struct pio_setup_fis);
2138 PM8001_IO_DBG(pm8001_ha, 2138 PM8001_IO_DBG(pm8001_ha,
2139 pm8001_printk("PIO read len = %d\n", len)); 2139 pm8001_printk("PIO read len = %d\n", len));
@@ -3855,12 +3855,12 @@ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
3855 return ret; 3855 return ret;
3856} 3856}
3857 3857
3858/* PCI_DMA_... to our direction translation. */ 3858/* DMA_... to our direction translation. */
3859static const u8 data_dir_flags[] = { 3859static const u8 data_dir_flags[] = {
3860 [PCI_DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT,/* UNSPECIFIED */ 3860 [DMA_BIDIRECTIONAL] = DATA_DIR_BYRECIPIENT, /* UNSPECIFIED */
3861 [PCI_DMA_TODEVICE] = DATA_DIR_OUT,/* OUTBOUND */ 3861 [DMA_TO_DEVICE] = DATA_DIR_OUT, /* OUTBOUND */
3862 [PCI_DMA_FROMDEVICE] = DATA_DIR_IN,/* INBOUND */ 3862 [DMA_FROM_DEVICE] = DATA_DIR_IN, /* INBOUND */
3863 [PCI_DMA_NONE] = DATA_DIR_NONE,/* NO TRANSFER */ 3863 [DMA_NONE] = DATA_DIR_NONE, /* NO TRANSFER */
3864}; 3864};
3865 3865
3866static void build_smp_cmd(u32 deviceID, __le32 hTag, 3866static void build_smp_cmd(u32 deviceID, __le32 hTag,
@@ -3902,13 +3902,13 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
3902 * DMA-map SMP request, response buffers 3902 * DMA-map SMP request, response buffers
3903 */ 3903 */
3904 sg_req = &task->smp_task.smp_req; 3904 sg_req = &task->smp_task.smp_req;
3905 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE); 3905 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE);
3906 if (!elem) 3906 if (!elem)
3907 return -ENOMEM; 3907 return -ENOMEM;
3908 req_len = sg_dma_len(sg_req); 3908 req_len = sg_dma_len(sg_req);
3909 3909
3910 sg_resp = &task->smp_task.smp_resp; 3910 sg_resp = &task->smp_task.smp_resp;
3911 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE); 3911 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE);
3912 if (!elem) { 3912 if (!elem) {
3913 rc = -ENOMEM; 3913 rc = -ENOMEM;
3914 goto err_out; 3914 goto err_out;
@@ -3999,10 +3999,10 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
3999 3999
4000err_out_2: 4000err_out_2:
4001 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, 4001 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1,
4002 PCI_DMA_FROMDEVICE); 4002 DMA_FROM_DEVICE);
4003err_out: 4003err_out:
4004 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, 4004 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1,
4005 PCI_DMA_TODEVICE); 4005 DMA_TO_DEVICE);
4006 return rc; 4006 return rc;
4007} 4007}
4008 4008
@@ -4226,7 +4226,7 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
4226 q_index = (u32) (pm8001_ha_dev->id & 0x00ffffff) % PM8001_MAX_INB_NUM; 4226 q_index = (u32) (pm8001_ha_dev->id & 0x00ffffff) % PM8001_MAX_INB_NUM;
4227 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; 4227 circularQ = &pm8001_ha->inbnd_q_tbl[q_index];
4228 4228
4229 if (task->data_dir == PCI_DMA_NONE) { 4229 if (task->data_dir == DMA_NONE) {
4230 ATAP = 0x04; /* no data*/ 4230 ATAP = 0x04; /* no data*/
4231 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); 4231 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
4232 } else if (likely(!task->ata_task.device_control_reg_update)) { 4232 } else if (likely(!task->ata_task.device_control_reg_update)) {