diff options
Diffstat (limited to 'src/drivers/net/sfc/efx_common.c')
-rw-r--r-- | src/drivers/net/sfc/efx_common.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/drivers/net/sfc/efx_common.c b/src/drivers/net/sfc/efx_common.c index 79a99435..40388770 100644 --- a/src/drivers/net/sfc/efx_common.c +++ b/src/drivers/net/sfc/efx_common.c @@ -72,13 +72,19 @@ void efx_probe(struct net_device *netdev, enum efx_revision revision) struct efx_nic *efx = netdev_priv(netdev); struct pci_device *pci = container_of(netdev->dev, struct pci_device, dev); + unsigned int reg = PCI_BASE_ADDRESS_0; + uint32_t bar_low; efx->netdev = netdev; efx->revision = revision; - /* MMIO bar */ - efx->mmio_start = pci_bar_start(pci, PCI_BASE_ADDRESS_2); - efx->mmio_len = pci_bar_size(pci, PCI_BASE_ADDRESS_2); + /* Find the memory bar to use */ + pci_read_config_dword(pci, reg, &bar_low); + if ((bar_low & PCI_BASE_ADDRESS_IO_MASK) == PCI_BASE_ADDRESS_SPACE_IO) + reg = PCI_BASE_ADDRESS_2; + + efx->mmio_start = pci_bar_start(pci, reg); + efx->mmio_len = pci_bar_size(pci, reg); efx->membase = ioremap(efx->mmio_start, efx->mmio_len); DBGCP(efx, "BAR of %lx bytes at phys %lx mapped at %p\n", |