aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/sfc/falcon.c3
-rw-r--r--drivers/net/sfc/falcon_boards.c3
-rw-r--r--drivers/net/sfc/falcon_xmac.c13
-rw-r--r--drivers/net/sfc/net_driver.h2
-rw-r--r--drivers/net/sfc/nic.h2
5 files changed, 15 insertions, 8 deletions
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c
index fd5bf0b7e8a2..07f684ed2d9b 100644
--- a/drivers/net/sfc/falcon.c
+++ b/drivers/net/sfc/falcon.c
@@ -886,6 +886,7 @@ static bool
886falcon_handle_global_event(struct efx_channel *channel, efx_qword_t *event) 886falcon_handle_global_event(struct efx_channel *channel, efx_qword_t *event)
887{ 887{
888 struct efx_nic *efx = channel->efx; 888 struct efx_nic *efx = channel->efx;
889 struct falcon_nic_data *nic_data = efx->nic_data;
889 890
890 if (EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_G_PHY0_INTR) || 891 if (EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_G_PHY0_INTR) ||
891 EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_XG_PHY0_INTR) || 892 EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_XG_PHY0_INTR) ||
@@ -895,7 +896,7 @@ falcon_handle_global_event(struct efx_channel *channel, efx_qword_t *event)
895 896
896 if ((efx_nic_rev(efx) == EFX_REV_FALCON_B0) && 897 if ((efx_nic_rev(efx) == EFX_REV_FALCON_B0) &&
897 EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_XG_MGT_INTR)) { 898 EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_XG_MGT_INTR)) {
898 efx->xmac_poll_required = true; 899 nic_data->xmac_poll_required = true;
899 return true; 900 return true;
900 } 901 }
901 902
diff --git a/drivers/net/sfc/falcon_boards.c b/drivers/net/sfc/falcon_boards.c
index a6fc5ce88c88..2dd16f0b3ced 100644
--- a/drivers/net/sfc/falcon_boards.c
+++ b/drivers/net/sfc/falcon_boards.c
@@ -415,10 +415,11 @@ static void sfe4001_fini(struct efx_nic *efx)
415 415
416static int sfe4001_check_hw(struct efx_nic *efx) 416static int sfe4001_check_hw(struct efx_nic *efx)
417{ 417{
418 struct falcon_nic_data *nic_data = efx->nic_data;
418 s32 status; 419 s32 status;
419 420
420 /* If XAUI link is up then do not monitor */ 421 /* If XAUI link is up then do not monitor */
421 if (EFX_WORKAROUND_7884(efx) && !efx->xmac_poll_required) 422 if (EFX_WORKAROUND_7884(efx) && !nic_data->xmac_poll_required)
422 return 0; 423 return 0;
423 424
424 /* Check the powered status of the PHY. Lack of power implies that 425 /* Check the powered status of the PHY. Lack of power implies that
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c
index e293e25d1348..b49e84394641 100644
--- a/drivers/net/sfc/falcon_xmac.c
+++ b/drivers/net/sfc/falcon_xmac.c
@@ -87,6 +87,7 @@ int falcon_reset_xaui(struct efx_nic *efx)
87 87
88static void falcon_ack_status_intr(struct efx_nic *efx) 88static void falcon_ack_status_intr(struct efx_nic *efx)
89{ 89{
90 struct falcon_nic_data *nic_data = efx->nic_data;
90 efx_oword_t reg; 91 efx_oword_t reg;
91 92
92 if ((efx_nic_rev(efx) != EFX_REV_FALCON_B0) || LOOPBACK_INTERNAL(efx)) 93 if ((efx_nic_rev(efx) != EFX_REV_FALCON_B0) || LOOPBACK_INTERNAL(efx))
@@ -98,7 +99,7 @@ static void falcon_ack_status_intr(struct efx_nic *efx)
98 99
99 /* We can only use this interrupt to signal the negative edge of 100 /* We can only use this interrupt to signal the negative edge of
100 * xaui_align [we have to poll the positive edge]. */ 101 * xaui_align [we have to poll the positive edge]. */
101 if (efx->xmac_poll_required) 102 if (nic_data->xmac_poll_required)
102 return; 103 return;
103 104
104 efx_reado(efx, &reg, FR_AB_XM_MGT_INT_MSK); 105 efx_reado(efx, &reg, FR_AB_XM_MGT_INT_MSK);
@@ -276,12 +277,14 @@ static bool falcon_xmac_check_fault(struct efx_nic *efx)
276 277
277static int falcon_reconfigure_xmac(struct efx_nic *efx) 278static int falcon_reconfigure_xmac(struct efx_nic *efx)
278{ 279{
280 struct falcon_nic_data *nic_data = efx->nic_data;
281
279 falcon_reconfigure_xgxs_core(efx); 282 falcon_reconfigure_xgxs_core(efx);
280 falcon_reconfigure_xmac_core(efx); 283 falcon_reconfigure_xmac_core(efx);
281 284
282 falcon_reconfigure_mac_wrapper(efx); 285 falcon_reconfigure_mac_wrapper(efx);
283 286
284 efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 5); 287 nic_data->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 5);
285 falcon_ack_status_intr(efx); 288 falcon_ack_status_intr(efx);
286 289
287 return 0; 290 return 0;
@@ -349,11 +352,13 @@ static void falcon_update_stats_xmac(struct efx_nic *efx)
349 352
350void falcon_poll_xmac(struct efx_nic *efx) 353void falcon_poll_xmac(struct efx_nic *efx)
351{ 354{
355 struct falcon_nic_data *nic_data = efx->nic_data;
356
352 if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up || 357 if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up ||
353 !efx->xmac_poll_required) 358 !nic_data->xmac_poll_required)
354 return; 359 return;
355 360
356 efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 1); 361 nic_data->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 1);
357 falcon_ack_status_intr(efx); 362 falcon_ack_status_intr(efx);
358} 363}
359 364
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h
index f9d53a01bbc5..b7e8fe967826 100644
--- a/drivers/net/sfc/net_driver.h
+++ b/drivers/net/sfc/net_driver.h
@@ -684,7 +684,6 @@ struct efx_filter_state;
684 * @mdio: PHY MDIO interface 684 * @mdio: PHY MDIO interface
685 * @mdio_bus: PHY MDIO bus ID (only used by Siena) 685 * @mdio_bus: PHY MDIO bus ID (only used by Siena)
686 * @phy_mode: PHY operating mode. Serialised by @mac_lock. 686 * @phy_mode: PHY operating mode. Serialised by @mac_lock.
687 * @xmac_poll_required: XMAC link state needs polling
688 * @link_advertising: Autonegotiation advertising flags 687 * @link_advertising: Autonegotiation advertising flags
689 * @link_state: Current state of the link 688 * @link_state: Current state of the link
690 * @n_link_state_changes: Number of times the link has changed state 689 * @n_link_state_changes: Number of times the link has changed state
@@ -771,7 +770,6 @@ struct efx_nic {
771 unsigned int mdio_bus; 770 unsigned int mdio_bus;
772 enum efx_phy_mode phy_mode; 771 enum efx_phy_mode phy_mode;
773 772
774 bool xmac_poll_required;
775 u32 link_advertising; 773 u32 link_advertising;
776 struct efx_link_state link_state; 774 struct efx_link_state link_state;
777 unsigned int n_link_state_changes; 775 unsigned int n_link_state_changes;
diff --git a/drivers/net/sfc/nic.h b/drivers/net/sfc/nic.h
index 980cf4b5a868..f107dc7d67c0 100644
--- a/drivers/net/sfc/nic.h
+++ b/drivers/net/sfc/nic.h
@@ -118,6 +118,7 @@ struct falcon_board {
118 * @spi_eeprom: SPI EEPROM device 118 * @spi_eeprom: SPI EEPROM device
119 * @spi_lock: SPI bus lock 119 * @spi_lock: SPI bus lock
120 * @mdio_lock: MDIO bus lock 120 * @mdio_lock: MDIO bus lock
121 * @xmac_poll_required: XMAC link state needs polling
121 */ 122 */
122struct falcon_nic_data { 123struct falcon_nic_data {
123 struct pci_dev *pci_dev2; 124 struct pci_dev *pci_dev2;
@@ -130,6 +131,7 @@ struct falcon_nic_data {
130 struct efx_spi_device spi_eeprom; 131 struct efx_spi_device spi_eeprom;
131 struct mutex spi_lock; 132 struct mutex spi_lock;
132 struct mutex mdio_lock; 133 struct mutex mdio_lock;
134 bool xmac_poll_required;
133}; 135};
134 136
135static inline struct falcon_board *falcon_board(struct efx_nic *efx) 137static inline struct falcon_board *falcon_board(struct efx_nic *efx)