summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/sfc/efx_common.c12
-rw-r--r--src/drivers/net/sfc/sfc_hunt.c2
2 files changed, 11 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",
diff --git a/src/drivers/net/sfc/sfc_hunt.c b/src/drivers/net/sfc/sfc_hunt.c
index 25780ffd..dd5f7043 100644
--- a/src/drivers/net/sfc/sfc_hunt.c
+++ b/src/drivers/net/sfc/sfc_hunt.c
@@ -142,6 +142,7 @@ static void hunt_mcdi_copyin(struct hunt_nic *hunt,
hdr_len = sizeof(hdr);
memcpy(pdu, &hdr, hdr_len);
+ assert(inlen <= MCDI_CTL_SDU_LEN_MAX_V2);
memcpy(pdu + hdr_len, inbuf, inlen);
wmb(); /* Sync the data before ringing the doorbell */
@@ -1314,6 +1315,7 @@ const struct efx_nic_type hunt_nic_type = {
static struct pci_device_id hunt_nics[] = {
PCI_ROM(0x1924, 0x0a03, "SFC9220", "Solarflare SFN8xxx Adapter", 0),
+ PCI_ROM(0x1924, 0x0b03, "SFC9250", "Solarflare X25xx Adapter", 0),
};
struct pci_driver hunt_driver __pci_driver = {