Lines Matching refs:efx
151 static int tenxpress_init(struct efx_nic *efx) in tenxpress_init() argument
154 efx_mdio_write(efx, MDIO_MMD_PCS, PCS_TEST_SELECT_REG, in tenxpress_init()
158 efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_CTRL_REG, in tenxpress_init()
160 efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, in tenxpress_init()
166 static int tenxpress_phy_probe(struct efx_nic *efx) in tenxpress_phy_probe() argument
174 efx->phy_data = phy_data; in tenxpress_phy_probe()
175 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_probe()
177 efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; in tenxpress_phy_probe()
178 efx->mdio.mode_support = MDIO_SUPPORTS_C45; in tenxpress_phy_probe()
180 efx->loopback_modes = SFX7101_LOOPBACKS | FALCON_XMAC_LOOPBACKS; in tenxpress_phy_probe()
182 efx->link_advertising = (ADVERTISED_TP | ADVERTISED_Autoneg | in tenxpress_phy_probe()
188 static int tenxpress_phy_init(struct efx_nic *efx) in tenxpress_phy_init() argument
192 falcon_board(efx)->type->init_phy(efx); in tenxpress_phy_init()
194 if (!(efx->phy_mode & PHY_MODE_SPECIAL)) { in tenxpress_phy_init()
195 rc = efx_mdio_wait_reset_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_phy_init()
199 rc = efx_mdio_check_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_phy_init()
204 rc = tenxpress_init(efx); in tenxpress_phy_init()
209 efx_link_set_wanted_fc(efx, efx->wanted_fc); in tenxpress_phy_init()
210 efx_mdio_an_reconfigure(efx); in tenxpress_phy_init()
215 falcon_reset_xaui(efx); in tenxpress_phy_init()
223 static int tenxpress_special_reset(struct efx_nic *efx) in tenxpress_special_reset() argument
230 falcon_stop_nic_stats(efx); in tenxpress_special_reset()
233 reg = efx_mdio_read(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG); in tenxpress_special_reset()
235 efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); in tenxpress_special_reset()
240 rc = efx_mdio_wait_reset_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_special_reset()
245 rc = tenxpress_init(efx); in tenxpress_special_reset()
252 falcon_start_nic_stats(efx); in tenxpress_special_reset()
256 static void sfx7101_check_bad_lp(struct efx_nic *efx, bool link_ok) in sfx7101_check_bad_lp() argument
258 struct tenxpress_phy_data *pd = efx->phy_data; in sfx7101_check_bad_lp()
266 reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_STAT1); in sfx7101_check_bad_lp()
281 reg = efx_mdio_read(efx, MDIO_MMD_PMAPMD, in sfx7101_check_bad_lp()
288 netif_err(efx, link, efx->net_dev, in sfx7101_check_bad_lp()
294 efx_mdio_write(efx, MDIO_MMD_PMAPMD, in sfx7101_check_bad_lp()
300 static bool sfx7101_link_ok(struct efx_nic *efx) in sfx7101_link_ok() argument
302 return efx_mdio_links_ok(efx, in sfx7101_link_ok()
308 static void tenxpress_ext_loopback(struct efx_nic *efx) in tenxpress_ext_loopback() argument
310 efx_mdio_set_flag(efx, MDIO_MMD_PHYXS, PHYXS_TEST1, in tenxpress_ext_loopback()
312 efx->loopback_mode == LOOPBACK_PHYXS); in tenxpress_ext_loopback()
315 static void tenxpress_low_power(struct efx_nic *efx) in tenxpress_low_power() argument
318 efx, !!(efx->phy_mode & PHY_MODE_LOW_POWER), in tenxpress_low_power()
322 static int tenxpress_phy_reconfigure(struct efx_nic *efx) in tenxpress_phy_reconfigure() argument
324 struct tenxpress_phy_data *phy_data = efx->phy_data; in tenxpress_phy_reconfigure()
327 if (efx->phy_mode & (PHY_MODE_OFF | PHY_MODE_SPECIAL)) { in tenxpress_phy_reconfigure()
328 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_reconfigure()
332 phy_mode_change = (efx->phy_mode == PHY_MODE_NORMAL && in tenxpress_phy_reconfigure()
334 loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, LOOPBACKS_EXTERNAL(efx)) || in tenxpress_phy_reconfigure()
335 LOOPBACK_CHANGED(phy_data, efx, 1 << LOOPBACK_GPHY)); in tenxpress_phy_reconfigure()
338 tenxpress_special_reset(efx); in tenxpress_phy_reconfigure()
339 falcon_reset_xaui(efx); in tenxpress_phy_reconfigure()
342 tenxpress_low_power(efx); in tenxpress_phy_reconfigure()
343 efx_mdio_transmit_disable(efx); in tenxpress_phy_reconfigure()
344 efx_mdio_phy_reconfigure(efx); in tenxpress_phy_reconfigure()
345 tenxpress_ext_loopback(efx); in tenxpress_phy_reconfigure()
346 efx_mdio_an_reconfigure(efx); in tenxpress_phy_reconfigure()
348 phy_data->loopback_mode = efx->loopback_mode; in tenxpress_phy_reconfigure()
349 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_reconfigure()
355 tenxpress_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd);
358 static bool tenxpress_phy_poll(struct efx_nic *efx) in tenxpress_phy_poll() argument
360 struct efx_link_state old_state = efx->link_state; in tenxpress_phy_poll()
362 efx->link_state.up = sfx7101_link_ok(efx); in tenxpress_phy_poll()
363 efx->link_state.speed = 10000; in tenxpress_phy_poll()
364 efx->link_state.fd = true; in tenxpress_phy_poll()
365 efx->link_state.fc = efx_mdio_get_pause(efx); in tenxpress_phy_poll()
367 sfx7101_check_bad_lp(efx, efx->link_state.up); in tenxpress_phy_poll()
369 return !efx_link_state_equal(&efx->link_state, &old_state); in tenxpress_phy_poll()
372 static void sfx7101_phy_fini(struct efx_nic *efx) in sfx7101_phy_fini() argument
378 efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); in sfx7101_phy_fini()
386 static void tenxpress_phy_remove(struct efx_nic *efx) in tenxpress_phy_remove() argument
388 kfree(efx->phy_data); in tenxpress_phy_remove()
389 efx->phy_data = NULL; in tenxpress_phy_remove()
394 void tenxpress_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) in tenxpress_set_id_led() argument
414 efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, reg); in tenxpress_set_id_led()
421 static const char *sfx7101_test_name(struct efx_nic *efx, unsigned int index) in sfx7101_test_name() argument
429 sfx7101_run_tests(struct efx_nic *efx, int *results, unsigned flags) in sfx7101_run_tests() argument
437 rc = tenxpress_special_reset(efx); in sfx7101_run_tests()
440 efx_mdio_an_reconfigure(efx); in sfx7101_run_tests()
446 tenxpress_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) in tenxpress_get_settings() argument
451 reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL); in tenxpress_get_settings()
454 reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_10GBT_STAT); in tenxpress_get_settings()
458 mdio45_ethtool_gset_npage(&efx->mdio, ecmd, adv, lpa); in tenxpress_get_settings()
462 if (LOOPBACK_EXTERNAL(efx)) in tenxpress_get_settings()
466 static int tenxpress_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) in tenxpress_set_settings() argument
471 return efx_mdio_set_settings(efx, ecmd); in tenxpress_set_settings()
474 static void sfx7101_set_npage_adv(struct efx_nic *efx, u32 advertising) in sfx7101_set_npage_adv() argument
476 efx_mdio_set_flag(efx, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL, in sfx7101_set_npage_adv()