diff options
Diffstat (limited to 'drivers/scsi/aic7xxx/aic79xx_osm_pci.c')
-rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_osm_pci.c | 19 |
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); |