diff options
Diffstat (limited to 'drivers/net/sfc/falcon.c')
-rw-r--r-- | drivers/net/sfc/falcon.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c index fde4e7912c39..5a70ee7e8142 100644 --- a/drivers/net/sfc/falcon.c +++ b/drivers/net/sfc/falcon.c | |||
@@ -910,22 +910,20 @@ static void falcon_handle_global_event(struct efx_channel *channel, | |||
910 | efx_qword_t *event) | 910 | efx_qword_t *event) |
911 | { | 911 | { |
912 | struct efx_nic *efx = channel->efx; | 912 | struct efx_nic *efx = channel->efx; |
913 | bool is_phy_event = false, handled = false; | 913 | bool handled = false; |
914 | 914 | ||
915 | /* Check for interrupt on either port. Some boards have a | ||
916 | * single PHY wired to the interrupt line for port 1. */ | ||
917 | if (EFX_QWORD_FIELD(*event, G_PHY0_INTR) || | 915 | if (EFX_QWORD_FIELD(*event, G_PHY0_INTR) || |
918 | EFX_QWORD_FIELD(*event, G_PHY1_INTR) || | 916 | EFX_QWORD_FIELD(*event, G_PHY1_INTR) || |
919 | EFX_QWORD_FIELD(*event, XG_PHY_INTR)) | 917 | EFX_QWORD_FIELD(*event, XG_PHY_INTR) || |
920 | is_phy_event = true; | 918 | EFX_QWORD_FIELD(*event, XFP_PHY_INTR)) { |
919 | efx->phy_op->clear_interrupt(efx); | ||
920 | queue_work(efx->workqueue, &efx->phy_work); | ||
921 | handled = true; | ||
922 | } | ||
921 | 923 | ||
922 | if ((falcon_rev(efx) >= FALCON_REV_B0) && | 924 | if ((falcon_rev(efx) >= FALCON_REV_B0) && |
923 | EFX_QWORD_FIELD(*event, XG_MNT_INTR_B0)) | 925 | EFX_QWORD_FIELD(*event, XG_MNT_INTR_B0)) { |
924 | is_phy_event = true; | 926 | queue_work(efx->workqueue, &efx->mac_work); |
925 | |||
926 | if (is_phy_event) { | ||
927 | efx->phy_op->clear_interrupt(efx); | ||
928 | queue_work(efx->workqueue, &efx->reconfigure_work); | ||
929 | handled = true; | 927 | handled = true; |
930 | } | 928 | } |
931 | 929 | ||