Skip to content

Commit

Permalink
[SCSI] aic79xx: use dma_get_required_mask()
Browse files Browse the repository at this point in the history
As originally noted by Frederic Temporelli, the aic79xx supports 64
bit addressing, but the initialization code of the driver is wrong: it
tests the available memory size instead of testing the maximum
available memory address.

This patch uses the correct dma_get_required_mask() macros to
determine the correct addressing method.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Cc: Xavier Bru <xavier.bru@bull.net>
CC: Frederic Temporelli <frederic.temporelli@bull.net>

cosmetic fixes
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
Hannes Reinecke authored and James Bottomley committed Feb 10, 2007
1 parent 5504802 commit 1996676
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 21 deletions.
9 changes: 0 additions & 9 deletions drivers/scsi/aic7xxx/aic79xx_osm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1126,15 +1126,6 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
return 0;
}

uint64_t
ahd_linux_get_memsize(void)
{
struct sysinfo si;

si_meminfo(&si);
return ((uint64_t)si.totalram << PAGE_SHIFT);
}

/*
* Place the SCSI bus into a known state by either resetting it,
* or forcing transfer negotiations on the next command to any
Expand Down
2 changes: 0 additions & 2 deletions drivers/scsi/aic7xxx/aic79xx_osm.h
Original file line number Diff line number Diff line change
Expand Up @@ -496,8 +496,6 @@ ahd_insb(struct ahd_softc * ahd, long port, uint8_t *array, int count)
int ahd_linux_register_host(struct ahd_softc *,
struct scsi_host_template *);

uint64_t ahd_linux_get_memsize(void);

/*************************** Pretty Printing **********************************/
struct info_str {
char *buffer;
Expand Down
19 changes: 9 additions & 10 deletions drivers/scsi/aic7xxx/aic79xx_osm_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
struct ahd_pci_identity *entry;
char *name;
int error;
struct device *dev = &pdev->dev;

pci = pdev;
entry = ahd_find_pci_device(pci);
Expand Down Expand Up @@ -161,20 +162,18 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_master(pdev);

if (sizeof(dma_addr_t) > 4) {
uint64_t memsize;
const uint64_t mask_39bit = 0x7FFFFFFFFFULL;
const u64 required_mask = dma_get_required_mask(dev);

memsize = ahd_linux_get_memsize();

if (memsize >= 0x8000000000ULL
&& pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) {
if (required_mask > DMA_39BIT_MASK &&
dma_set_mask(dev, DMA_64BIT_MASK) == 0)
ahd->flags |= AHD_64BIT_ADDRESSING;
} else if (memsize > 0x80000000
&& pci_set_dma_mask(pdev, mask_39bit) == 0) {
else if (required_mask > DMA_32BIT_MASK &&
dma_set_mask(dev, DMA_39BIT_MASK) == 0)
ahd->flags |= AHD_39BIT_ADDRESSING;
}
else
dma_set_mask(dev, DMA_32BIT_MASK);
} else {
pci_set_dma_mask(pdev, DMA_32BIT_MASK);
dma_set_mask(dev, DMA_32BIT_MASK);
}
ahd->dev_softc = pci;
error = ahd_pci_config(ahd, entry);
Expand Down

0 comments on commit 1996676

Please sign in to comment.