Lines Matching refs:efx
54 static int efx_mdio_check_mmd(struct efx_nic *efx, int mmd) in efx_mdio_check_mmd() argument
60 status = efx_mdio_read(efx, mmd, MDIO_STAT2); in efx_mdio_check_mmd()
62 netif_err(efx, hw, efx->net_dev, in efx_mdio_check_mmd()
75 int efx_mdio_wait_reset_mmds(struct efx_nic *efx, unsigned int mmd_mask) in efx_mdio_wait_reset_mmds() argument
89 stat = efx_mdio_read(efx, mmd, MDIO_CTRL1); in efx_mdio_wait_reset_mmds()
91 netif_err(efx, hw, efx->net_dev, in efx_mdio_wait_reset_mmds()
108 netif_err(efx, hw, efx->net_dev, in efx_mdio_wait_reset_mmds()
116 int efx_mdio_check_mmds(struct efx_nic *efx, unsigned int mmd_mask) in efx_mdio_check_mmds() argument
128 devs1 = efx_mdio_read(efx, probe_mmd, MDIO_DEVS1); in efx_mdio_check_mmds()
129 devs2 = efx_mdio_read(efx, probe_mmd, MDIO_DEVS2); in efx_mdio_check_mmds()
131 netif_err(efx, hw, efx->net_dev, in efx_mdio_check_mmds()
137 netif_err(efx, hw, efx->net_dev, in efx_mdio_check_mmds()
142 netif_vdbg(efx, hw, efx->net_dev, "Devices present: %x\n", devices); in efx_mdio_check_mmds()
146 if ((mmd_mask & 1) && efx_mdio_check_mmd(efx, mmd)) in efx_mdio_check_mmds()
155 bool efx_mdio_links_ok(struct efx_nic *efx, unsigned int mmd_mask) in efx_mdio_links_ok() argument
159 if (LOOPBACK_INTERNAL(efx)) in efx_mdio_links_ok()
161 else if (LOOPBACK_MASK(efx) & LOOPBACKS_WS) in efx_mdio_links_ok()
163 else if (efx_phy_mode_disabled(efx->phy_mode)) in efx_mdio_links_ok()
165 else if (efx->loopback_mode == LOOPBACK_PHYXS) in efx_mdio_links_ok()
170 else if (efx->loopback_mode == LOOPBACK_PCS) in efx_mdio_links_ok()
174 else if (efx->loopback_mode == LOOPBACK_PMAPMD) in efx_mdio_links_ok()
178 return mdio45_links_ok(&efx->mdio, mmd_mask); in efx_mdio_links_ok()
181 void efx_mdio_transmit_disable(struct efx_nic *efx) in efx_mdio_transmit_disable() argument
183 efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, in efx_mdio_transmit_disable()
185 efx->phy_mode & PHY_MODE_TX_DISABLED); in efx_mdio_transmit_disable()
188 void efx_mdio_phy_reconfigure(struct efx_nic *efx) in efx_mdio_phy_reconfigure() argument
190 efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, in efx_mdio_phy_reconfigure()
192 efx->loopback_mode == LOOPBACK_PMAPMD); in efx_mdio_phy_reconfigure()
193 efx_mdio_set_flag(efx, MDIO_MMD_PCS, in efx_mdio_phy_reconfigure()
195 efx->loopback_mode == LOOPBACK_PCS); in efx_mdio_phy_reconfigure()
196 efx_mdio_set_flag(efx, MDIO_MMD_PHYXS, in efx_mdio_phy_reconfigure()
198 efx->loopback_mode == LOOPBACK_PHYXS_WS); in efx_mdio_phy_reconfigure()
201 static void efx_mdio_set_mmd_lpower(struct efx_nic *efx, in efx_mdio_set_mmd_lpower() argument
204 int stat = efx_mdio_read(efx, mmd, MDIO_STAT1); in efx_mdio_set_mmd_lpower()
206 netif_vdbg(efx, drv, efx->net_dev, "Setting low power mode for MMD %d to %d\n", in efx_mdio_set_mmd_lpower()
210 efx_mdio_set_flag(efx, mmd, MDIO_CTRL1, in efx_mdio_set_mmd_lpower()
215 void efx_mdio_set_mmds_lpower(struct efx_nic *efx, in efx_mdio_set_mmds_lpower() argument
222 efx_mdio_set_mmd_lpower(efx, low_power, mmd); in efx_mdio_set_mmds_lpower()
233 int efx_mdio_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) in efx_mdio_set_settings() argument
237 efx->phy_op->get_settings(efx, &prev); in efx_mdio_set_settings()
255 efx_link_set_advertising(efx, ecmd->advertising | ADVERTISED_Autoneg); in efx_mdio_set_settings()
256 efx_mdio_an_reconfigure(efx); in efx_mdio_set_settings()
264 void efx_mdio_an_reconfigure(struct efx_nic *efx) in efx_mdio_an_reconfigure() argument
268 WARN_ON(!(efx->mdio.mmds & MDIO_DEVS_AN)); in efx_mdio_an_reconfigure()
272 if (efx->link_advertising & ADVERTISED_Pause) in efx_mdio_an_reconfigure()
274 if (efx->link_advertising & ADVERTISED_Asym_Pause) in efx_mdio_an_reconfigure()
276 efx_mdio_write(efx, MDIO_MMD_AN, MDIO_AN_ADVERTISE, reg); in efx_mdio_an_reconfigure()
279 efx->phy_op->set_npage_adv(efx, efx->link_advertising); in efx_mdio_an_reconfigure()
282 reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_CTRL1); in efx_mdio_an_reconfigure()
284 efx_mdio_write(efx, MDIO_MMD_AN, MDIO_CTRL1, reg); in efx_mdio_an_reconfigure()
287 u8 efx_mdio_get_pause(struct efx_nic *efx) in efx_mdio_get_pause() argument
291 if (!(efx->wanted_fc & EFX_FC_AUTO)) in efx_mdio_get_pause()
292 return efx->wanted_fc; in efx_mdio_get_pause()
294 WARN_ON(!(efx->mdio.mmds & MDIO_DEVS_AN)); in efx_mdio_get_pause()
297 mii_advertise_flowctrl(efx->wanted_fc), in efx_mdio_get_pause()
298 efx_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_LPA)); in efx_mdio_get_pause()
301 int efx_mdio_test_alive(struct efx_nic *efx) in efx_mdio_test_alive() argument
304 int devad = __ffs(efx->mdio.mmds); in efx_mdio_test_alive()
307 mutex_lock(&efx->mac_lock); in efx_mdio_test_alive()
309 physid1 = efx_mdio_read(efx, devad, MDIO_DEVID1); in efx_mdio_test_alive()
310 physid2 = efx_mdio_read(efx, devad, MDIO_DEVID2); in efx_mdio_test_alive()
314 netif_err(efx, hw, efx->net_dev, in efx_mdio_test_alive()
315 "no MDIO PHY present with ID %d\n", efx->mdio.prtad); in efx_mdio_test_alive()
318 rc = efx_mdio_check_mmds(efx, efx->mdio.mmds); in efx_mdio_test_alive()
321 mutex_unlock(&efx->mac_lock); in efx_mdio_test_alive()