drivers/block/ahci: Fix pci mapping bug
authorBecky Bruce <beckyb@kernel.crashing.org>
Wed, 4 Feb 2009 00:10:55 +0000 (18:10 -0600)
committerWolfgang Denk <wd@denx.de>
Mon, 9 Feb 2009 23:31:05 +0000 (00:31 +0100)
The code assumes that the pci bus address and the virtual
address used to access a region are the same, but they might
not be.  Fix this assumption.

Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
drivers/block/ahci.c

index 2445e8c62e7e5d0568575f703994a3b909447e9a..e1b66fd4b6d3a9fa7b475ac66f796206a1f10e25 100644 (file)
@@ -251,7 +251,6 @@ static void ahci_print_info(struct ahci_probe_ent *probe_ent)
 
 static int ahci_init_one(pci_dev_t pdev)
 {
-       u32 iobase;
        u16 vendor;
        int rc;
 
@@ -261,9 +260,6 @@ static int ahci_init_one(pci_dev_t pdev)
        memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
        probe_ent->dev = pdev;
 
-       pci_read_config_dword(pdev, AHCI_PCI_BAR, &iobase);
-       iobase &= ~0xf;
-
        probe_ent->host_flags = ATA_FLAG_SATA
                                | ATA_FLAG_NO_LEGACY
                                | ATA_FLAG_MMIO
@@ -272,7 +268,8 @@ static int ahci_init_one(pci_dev_t pdev)
        probe_ent->pio_mask = 0x1f;
        probe_ent->udma_mask = 0x7f;    /*Fixme,assume to support UDMA6 */
 
-       probe_ent->mmio_base = iobase;
+       probe_ent->mmio_base = (u32)pci_map_bar(pdev, AHCI_PCI_BAR,
+                                               PCI_REGION_MEM);
 
        /* Take from kernel:
         * JMicron-specific fixup: