aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/aic7xxx/aic79xx_osm_pci.c')
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm_pci.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
index 1a3ab6aa856b..c62ce41f2793 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
@@ -132,6 +132,7 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
132 struct ahd_pci_identity *entry; 132 struct ahd_pci_identity *entry;
133 char *name; 133 char *name;
134 int error; 134 int error;
135 struct device *dev = &pdev->dev;
135 136
136 pci = pdev; 137 pci = pdev;
137 entry = ahd_find_pci_device(pci); 138 entry = ahd_find_pci_device(pci);
@@ -161,20 +162,18 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
161 pci_set_master(pdev); 162 pci_set_master(pdev);
162 163
163 if (sizeof(dma_addr_t) > 4) { 164 if (sizeof(dma_addr_t) > 4) {
164 uint64_t memsize; 165 const u64 required_mask = dma_get_required_mask(dev);
165 const uint64_t mask_39bit = 0x7FFFFFFFFFULL;
166 166
167 memsize = ahd_linux_get_memsize(); 167 if (required_mask > DMA_39BIT_MASK &&
168 168 dma_set_mask(dev, DMA_64BIT_MASK) == 0)
169 if (memsize >= 0x8000000000ULL
170 && pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) {
171 ahd->flags |= AHD_64BIT_ADDRESSING; 169 ahd->flags |= AHD_64BIT_ADDRESSING;
172 } else if (memsize > 0x80000000 170 else if (required_mask > DMA_32BIT_MASK &&
173 && pci_set_dma_mask(pdev, mask_39bit) == 0) { 171 dma_set_mask(dev, DMA_39BIT_MASK) == 0)
174 ahd->flags |= AHD_39BIT_ADDRESSING; 172 ahd->flags |= AHD_39BIT_ADDRESSING;
175 } 173 else
174 dma_set_mask(dev, DMA_32BIT_MASK);
176 } else { 175 } else {
177 pci_set_dma_mask(pdev, DMA_32BIT_MASK); 176 dma_set_mask(dev, DMA_32BIT_MASK);
178 } 177 }
179 ahd->dev_softc = pci; 178 ahd->dev_softc = pci;
180 error = ahd_pci_config(ahd, entry); 179 error = ahd_pci_config(ahd, entry);