aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sfc')
-rw-r--r--drivers/net/sfc/net_driver.h4
-rw-r--r--drivers/net/sfc/siena.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h
index 40c0d931b182..6b2e4402ec57 100644
--- a/drivers/net/sfc/net_driver.h
+++ b/drivers/net/sfc/net_driver.h
@@ -649,6 +649,7 @@ union efx_multicast_hash {
649 * struct efx_nic - an Efx NIC 649 * struct efx_nic - an Efx NIC
650 * @name: Device name (net device name or bus id before net device registered) 650 * @name: Device name (net device name or bus id before net device registered)
651 * @pci_dev: The PCI device 651 * @pci_dev: The PCI device
652 * @port_num: Index of this host port within the controller
652 * @type: Controller type attributes 653 * @type: Controller type attributes
653 * @legacy_irq: IRQ number 654 * @legacy_irq: IRQ number
654 * @workqueue: Workqueue for port reconfigures and the HW monitor. 655 * @workqueue: Workqueue for port reconfigures and the HW monitor.
@@ -732,6 +733,7 @@ union efx_multicast_hash {
732struct efx_nic { 733struct efx_nic {
733 char name[IFNAMSIZ]; 734 char name[IFNAMSIZ];
734 struct pci_dev *pci_dev; 735 struct pci_dev *pci_dev;
736 unsigned port_num;
735 const struct efx_nic_type *type; 737 const struct efx_nic_type *type;
736 int legacy_irq; 738 int legacy_irq;
737 struct workqueue_struct *workqueue; 739 struct workqueue_struct *workqueue;
@@ -834,7 +836,7 @@ static inline const char *efx_dev_name(struct efx_nic *efx)
834 836
835static inline unsigned int efx_port_num(struct efx_nic *efx) 837static inline unsigned int efx_port_num(struct efx_nic *efx)
836{ 838{
837 return PCI_FUNC(efx->pci_dev->devfn); 839 return efx->port_num;
838} 840}
839 841
840/** 842/**
diff --git a/drivers/net/sfc/siena.c b/drivers/net/sfc/siena.c
index 727b4228e081..7ecd255a7cc0 100644
--- a/drivers/net/sfc/siena.c
+++ b/drivers/net/sfc/siena.c
@@ -206,6 +206,7 @@ static int siena_probe_nic(struct efx_nic *efx)
206{ 206{
207 struct siena_nic_data *nic_data; 207 struct siena_nic_data *nic_data;
208 bool already_attached = 0; 208 bool already_attached = 0;
209 efx_oword_t reg;
209 int rc; 210 int rc;
210 211
211 /* Allocate storage for hardware specific data */ 212 /* Allocate storage for hardware specific data */
@@ -220,6 +221,9 @@ static int siena_probe_nic(struct efx_nic *efx)
220 goto fail1; 221 goto fail1;
221 } 222 }
222 223
224 efx_reado(efx, &reg, FR_AZ_CS_DEBUG);
225 efx->port_num = EFX_OWORD_FIELD(reg, FRF_CZ_CS_PORT_NUM) - 1;
226
223 efx_mcdi_init(efx); 227 efx_mcdi_init(efx);
224 228
225 /* Recover from a failed assertion before probing */ 229 /* Recover from a failed assertion before probing */