Lines Matching refs:efx
148 static int tenxpress_init(struct ef4_nic *efx) in tenxpress_init() argument
151 ef4_mdio_write(efx, MDIO_MMD_PCS, PCS_TEST_SELECT_REG, in tenxpress_init()
155 ef4_mdio_set_flag(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_CTRL_REG, in tenxpress_init()
157 ef4_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, in tenxpress_init()
163 static int tenxpress_phy_probe(struct ef4_nic *efx) in tenxpress_phy_probe() argument
171 efx->phy_data = phy_data; in tenxpress_phy_probe()
172 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_probe()
174 efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; in tenxpress_phy_probe()
175 efx->mdio.mode_support = MDIO_SUPPORTS_C45; in tenxpress_phy_probe()
177 efx->loopback_modes = SFX7101_LOOPBACKS | FALCON_XMAC_LOOPBACKS; in tenxpress_phy_probe()
179 efx->link_advertising = (ADVERTISED_TP | ADVERTISED_Autoneg | in tenxpress_phy_probe()
185 static int tenxpress_phy_init(struct ef4_nic *efx) in tenxpress_phy_init() argument
189 falcon_board(efx)->type->init_phy(efx); in tenxpress_phy_init()
191 if (!(efx->phy_mode & PHY_MODE_SPECIAL)) { in tenxpress_phy_init()
192 rc = ef4_mdio_wait_reset_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_phy_init()
196 rc = ef4_mdio_check_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_phy_init()
201 rc = tenxpress_init(efx); in tenxpress_phy_init()
206 ef4_link_set_wanted_fc(efx, efx->wanted_fc); in tenxpress_phy_init()
207 ef4_mdio_an_reconfigure(efx); in tenxpress_phy_init()
212 falcon_reset_xaui(efx); in tenxpress_phy_init()
220 static int tenxpress_special_reset(struct ef4_nic *efx) in tenxpress_special_reset() argument
227 falcon_stop_nic_stats(efx); in tenxpress_special_reset()
230 reg = ef4_mdio_read(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG); in tenxpress_special_reset()
232 ef4_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); in tenxpress_special_reset()
237 rc = ef4_mdio_wait_reset_mmds(efx, TENXPRESS_REQUIRED_DEVS); in tenxpress_special_reset()
242 rc = tenxpress_init(efx); in tenxpress_special_reset()
249 falcon_start_nic_stats(efx); in tenxpress_special_reset()
253 static void sfx7101_check_bad_lp(struct ef4_nic *efx, bool link_ok) in sfx7101_check_bad_lp() argument
255 struct tenxpress_phy_data *pd = efx->phy_data; in sfx7101_check_bad_lp()
263 reg = ef4_mdio_read(efx, MDIO_MMD_AN, MDIO_STAT1); in sfx7101_check_bad_lp()
278 reg = ef4_mdio_read(efx, MDIO_MMD_PMAPMD, in sfx7101_check_bad_lp()
285 netif_err(efx, link, efx->net_dev, in sfx7101_check_bad_lp()
291 ef4_mdio_write(efx, MDIO_MMD_PMAPMD, in sfx7101_check_bad_lp()
297 static bool sfx7101_link_ok(struct ef4_nic *efx) in sfx7101_link_ok() argument
299 return ef4_mdio_links_ok(efx, in sfx7101_link_ok()
305 static void tenxpress_ext_loopback(struct ef4_nic *efx) in tenxpress_ext_loopback() argument
307 ef4_mdio_set_flag(efx, MDIO_MMD_PHYXS, PHYXS_TEST1, in tenxpress_ext_loopback()
309 efx->loopback_mode == LOOPBACK_PHYXS); in tenxpress_ext_loopback()
312 static void tenxpress_low_power(struct ef4_nic *efx) in tenxpress_low_power() argument
315 efx, !!(efx->phy_mode & PHY_MODE_LOW_POWER), in tenxpress_low_power()
319 static int tenxpress_phy_reconfigure(struct ef4_nic *efx) in tenxpress_phy_reconfigure() argument
321 struct tenxpress_phy_data *phy_data = efx->phy_data; in tenxpress_phy_reconfigure()
324 if (efx->phy_mode & (PHY_MODE_OFF | PHY_MODE_SPECIAL)) { in tenxpress_phy_reconfigure()
325 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_reconfigure()
329 phy_mode_change = (efx->phy_mode == PHY_MODE_NORMAL && in tenxpress_phy_reconfigure()
331 loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, LOOPBACKS_EXTERNAL(efx)) || in tenxpress_phy_reconfigure()
332 LOOPBACK_CHANGED(phy_data, efx, 1 << LOOPBACK_GPHY)); in tenxpress_phy_reconfigure()
335 tenxpress_special_reset(efx); in tenxpress_phy_reconfigure()
336 falcon_reset_xaui(efx); in tenxpress_phy_reconfigure()
339 tenxpress_low_power(efx); in tenxpress_phy_reconfigure()
340 ef4_mdio_transmit_disable(efx); in tenxpress_phy_reconfigure()
341 ef4_mdio_phy_reconfigure(efx); in tenxpress_phy_reconfigure()
342 tenxpress_ext_loopback(efx); in tenxpress_phy_reconfigure()
343 ef4_mdio_an_reconfigure(efx); in tenxpress_phy_reconfigure()
345 phy_data->loopback_mode = efx->loopback_mode; in tenxpress_phy_reconfigure()
346 phy_data->phy_mode = efx->phy_mode; in tenxpress_phy_reconfigure()
352 static bool tenxpress_phy_poll(struct ef4_nic *efx) in tenxpress_phy_poll() argument
354 struct ef4_link_state old_state = efx->link_state; in tenxpress_phy_poll()
356 efx->link_state.up = sfx7101_link_ok(efx); in tenxpress_phy_poll()
357 efx->link_state.speed = 10000; in tenxpress_phy_poll()
358 efx->link_state.fd = true; in tenxpress_phy_poll()
359 efx->link_state.fc = ef4_mdio_get_pause(efx); in tenxpress_phy_poll()
361 sfx7101_check_bad_lp(efx, efx->link_state.up); in tenxpress_phy_poll()
363 return !ef4_link_state_equal(&efx->link_state, &old_state); in tenxpress_phy_poll()
366 static void sfx7101_phy_fini(struct ef4_nic *efx) in sfx7101_phy_fini() argument
372 ef4_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); in sfx7101_phy_fini()
380 static void tenxpress_phy_remove(struct ef4_nic *efx) in tenxpress_phy_remove() argument
382 kfree(efx->phy_data); in tenxpress_phy_remove()
383 efx->phy_data = NULL; in tenxpress_phy_remove()
388 void tenxpress_set_id_led(struct ef4_nic *efx, enum ef4_led_mode mode) in tenxpress_set_id_led() argument
408 ef4_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, reg); in tenxpress_set_id_led()
415 static const char *sfx7101_test_name(struct ef4_nic *efx, unsigned int index) in sfx7101_test_name() argument
423 sfx7101_run_tests(struct ef4_nic *efx, int *results, unsigned flags) in sfx7101_run_tests() argument
431 rc = tenxpress_special_reset(efx); in sfx7101_run_tests()
434 ef4_mdio_an_reconfigure(efx); in sfx7101_run_tests()
440 tenxpress_get_link_ksettings(struct ef4_nic *efx, in tenxpress_get_link_ksettings() argument
446 reg = ef4_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL); in tenxpress_get_link_ksettings()
449 reg = ef4_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_10GBT_STAT); in tenxpress_get_link_ksettings()
453 mdio45_ethtool_ksettings_get_npage(&efx->mdio, cmd, adv, lpa); in tenxpress_get_link_ksettings()
457 if (LOOPBACK_EXTERNAL(efx)) in tenxpress_get_link_ksettings()
462 tenxpress_set_link_ksettings(struct ef4_nic *efx, in tenxpress_set_link_ksettings() argument
468 return ef4_mdio_set_link_ksettings(efx, cmd); in tenxpress_set_link_ksettings()
471 static void sfx7101_set_npage_adv(struct ef4_nic *efx, u32 advertising) in sfx7101_set_npage_adv() argument
473 ef4_mdio_set_flag(efx, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL, in sfx7101_set_npage_adv()