drivers/block/ahci: Fix pci mapping bug
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>
This commit is contained in:
parent
d591a80e74
commit
1785dbeed4
|
@ -251,7 +251,6 @@ static void ahci_print_info(struct ahci_probe_ent *probe_ent)
|
||||||
|
|
||||||
static int ahci_init_one(pci_dev_t pdev)
|
static int ahci_init_one(pci_dev_t pdev)
|
||||||
{
|
{
|
||||||
u32 iobase;
|
|
||||||
u16 vendor;
|
u16 vendor;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -261,9 +260,6 @@ static int ahci_init_one(pci_dev_t pdev)
|
||||||
memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
|
memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
|
||||||
probe_ent->dev = pdev;
|
probe_ent->dev = pdev;
|
||||||
|
|
||||||
pci_read_config_dword(pdev, AHCI_PCI_BAR, &iobase);
|
|
||||||
iobase &= ~0xf;
|
|
||||||
|
|
||||||
probe_ent->host_flags = ATA_FLAG_SATA
|
probe_ent->host_flags = ATA_FLAG_SATA
|
||||||
| ATA_FLAG_NO_LEGACY
|
| ATA_FLAG_NO_LEGACY
|
||||||
| ATA_FLAG_MMIO
|
| ATA_FLAG_MMIO
|
||||||
|
@ -272,7 +268,8 @@ static int ahci_init_one(pci_dev_t pdev)
|
||||||
probe_ent->pio_mask = 0x1f;
|
probe_ent->pio_mask = 0x1f;
|
||||||
probe_ent->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */
|
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:
|
/* Take from kernel:
|
||||||
* JMicron-specific fixup:
|
* JMicron-specific fixup:
|
||||||
|
|
Loading…
Reference in New Issue