Lines Matching refs:efx

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