diff options
author | Christoph Hellwig <hch@lst.de> | 2018-10-10 13:59:50 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2018-10-17 21:58:52 -0400 |
commit | f73bdebdf020a31ad43ce4de590ec7a09e383abd (patch) | |
tree | e208c83cd5d4dad081fcf5694c73c3111bfb7546 | |
parent | 03676e1d31fa0e156df0caecbacf20b488f7bd3a (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.c | 22 | ||||
-rw-r--r-- | drivers/scsi/pm8001/pm8001_init.c | 28 | ||||
-rw-r--r-- | drivers/scsi/pm8001/pm8001_sas.c | 8 | ||||
-rw-r--r-- | drivers/scsi/pm8001/pm80xx_hwi.c | 22 |
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. */ |
4207 | static const u8 data_dir_flags[] = { | 4207 | static 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 | }; |
4213 | void | 4213 | void |
4214 | pm8001_chip_make_sg(struct scatterlist *scatter, int nr, void *prd) | 4214 | pm8001_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 | ||
4295 | err_out_2: | 4295 | err_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); |
4298 | err_out: | 4298 | err_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. */ |
3859 | static const u8 data_dir_flags[] = { | 3859 | static 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 | ||
3866 | static void build_smp_cmd(u32 deviceID, __le32 hTag, | 3866 | static 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 | ||
4000 | err_out_2: | 4000 | err_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); |
4003 | err_out: | 4003 | err_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)) { |