diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2009-11-29 10:08:55 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-29 20:23:53 -0500 |
commit | c1c4f453b61463df4df16f7aa5782fc0cfe05b9e (patch) | |
tree | a72b533294500e7f19ab1f67142b732471df53cb /drivers/net/sfc | |
parent | e58f69f4082f60076885798fae8f3a17ea713bf6 (diff) |
sfc: Remove static PHY data and enumerations
New NICs have firmware managing the PHY, and we will discover the PHY
capabilities at run-time. Replace the static data with probe() and
test_name() operations.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc')
-rw-r--r-- | drivers/net/sfc/ethtool.c | 18 | ||||
-rw-r--r-- | drivers/net/sfc/falcon.c | 15 | ||||
-rw-r--r-- | drivers/net/sfc/falcon.h | 20 | ||||
-rw-r--r-- | drivers/net/sfc/falcon_xmac.c | 2 | ||||
-rw-r--r-- | drivers/net/sfc/mdio_10g.c | 4 | ||||
-rw-r--r-- | drivers/net/sfc/net_driver.h | 35 | ||||
-rw-r--r-- | drivers/net/sfc/qt202x_phy.c | 12 | ||||
-rw-r--r-- | drivers/net/sfc/selftest.c | 5 | ||||
-rw-r--r-- | drivers/net/sfc/tenxpress.c | 49 |
9 files changed, 95 insertions, 65 deletions
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c index e86cbca75ea8..4fe874052e3e 100644 --- a/drivers/net/sfc/ethtool.c +++ b/drivers/net/sfc/ethtool.c | |||
@@ -365,9 +365,21 @@ static int efx_ethtool_fill_self_tests(struct efx_nic *efx, | |||
365 | efx_fill_test(n++, strings, data, &tests->registers, | 365 | efx_fill_test(n++, strings, data, &tests->registers, |
366 | "core", 0, "registers", NULL); | 366 | "core", 0, "registers", NULL); |
367 | 367 | ||
368 | for (i = 0; i < efx->phy_op->num_tests; i++) | 368 | if (efx->phy_op->run_tests != NULL) { |
369 | efx_fill_test(n++, strings, data, &tests->phy[i], | 369 | EFX_BUG_ON_PARANOID(efx->phy_op->test_name == NULL); |
370 | "phy", 0, efx->phy_op->test_names[i], NULL); | 370 | |
371 | for (i = 0; true; ++i) { | ||
372 | const char *name; | ||
373 | |||
374 | EFX_BUG_ON_PARANOID(i >= EFX_MAX_PHY_TESTS); | ||
375 | name = efx->phy_op->test_name(efx, i); | ||
376 | if (name == NULL) | ||
377 | break; | ||
378 | |||
379 | efx_fill_test(n++, strings, data, &tests->phy[i], | ||
380 | "phy", 0, name, NULL); | ||
381 | } | ||
382 | } | ||
371 | 383 | ||
372 | /* Loopback tests */ | 384 | /* Loopback tests */ |
373 | for (mode = LOOPBACK_NONE; mode <= LOOPBACK_TEST_MAX; mode++) { | 385 | for (mode = LOOPBACK_NONE; mode <= LOOPBACK_TEST_MAX; mode++) { |
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c index 63e6734d8341..29d45376e4c9 100644 --- a/drivers/net/sfc/falcon.c +++ b/drivers/net/sfc/falcon.c | |||
@@ -2291,19 +2291,12 @@ static int falcon_probe_port(struct efx_nic *efx) | |||
2291 | return -ENODEV; | 2291 | return -ENODEV; |
2292 | } | 2292 | } |
2293 | 2293 | ||
2294 | if (efx->phy_op->macs & EFX_XMAC) | 2294 | /* Fill out MDIO structure and loopback modes */ |
2295 | efx->loopback_modes |= ((1 << LOOPBACK_XGMII) | | ||
2296 | (1 << LOOPBACK_XGXS) | | ||
2297 | (1 << LOOPBACK_XAUI)); | ||
2298 | if (efx->phy_op->macs & EFX_GMAC) | ||
2299 | efx->loopback_modes |= (1 << LOOPBACK_GMAC); | ||
2300 | efx->loopback_modes |= efx->phy_op->loopbacks; | ||
2301 | |||
2302 | /* Set up MDIO structure for PHY */ | ||
2303 | efx->mdio.mmds = efx->phy_op->mmds; | ||
2304 | efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; | ||
2305 | efx->mdio.mdio_read = falcon_mdio_read; | 2295 | efx->mdio.mdio_read = falcon_mdio_read; |
2306 | efx->mdio.mdio_write = falcon_mdio_write; | 2296 | efx->mdio.mdio_write = falcon_mdio_write; |
2297 | rc = efx->phy_op->probe(efx); | ||
2298 | if (rc != 0) | ||
2299 | return rc; | ||
2307 | 2300 | ||
2308 | /* Initial assumption */ | 2301 | /* Initial assumption */ |
2309 | efx->link_state.speed = 10000; | 2302 | efx->link_state.speed = 10000; |
diff --git a/drivers/net/sfc/falcon.h b/drivers/net/sfc/falcon.h index 875b58e94e8e..3085ecfaceed 100644 --- a/drivers/net/sfc/falcon.h +++ b/drivers/net/sfc/falcon.h | |||
@@ -38,6 +38,26 @@ static inline bool efx_nic_is_dual_func(struct efx_nic *efx) | |||
38 | return efx_nic_rev(efx) < EFX_REV_FALCON_B0; | 38 | return efx_nic_rev(efx) < EFX_REV_FALCON_B0; |
39 | } | 39 | } |
40 | 40 | ||
41 | enum { | ||
42 | PHY_TYPE_NONE = 0, | ||
43 | PHY_TYPE_TXC43128 = 1, | ||
44 | PHY_TYPE_88E1111 = 2, | ||
45 | PHY_TYPE_SFX7101 = 3, | ||
46 | PHY_TYPE_QT2022C2 = 4, | ||
47 | PHY_TYPE_PM8358 = 6, | ||
48 | PHY_TYPE_SFT9001A = 8, | ||
49 | PHY_TYPE_QT2025C = 9, | ||
50 | PHY_TYPE_SFT9001B = 10, | ||
51 | }; | ||
52 | |||
53 | #define FALCON_XMAC_LOOPBACKS \ | ||
54 | ((1 << LOOPBACK_XGMII) | \ | ||
55 | (1 << LOOPBACK_XGXS) | \ | ||
56 | (1 << LOOPBACK_XAUI)) | ||
57 | |||
58 | #define FALCON_GMAC_LOOPBACKS \ | ||
59 | (1 << LOOPBACK_GMAC) | ||
60 | |||
41 | /** | 61 | /** |
42 | * struct falcon_board_type - board operations and type information | 62 | * struct falcon_board_type - board operations and type information |
43 | * @id: Board type id, as found in NVRAM | 63 | * @id: Board type id, as found in NVRAM |
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c index 83da79279a95..643622df6e62 100644 --- a/drivers/net/sfc/falcon_xmac.c +++ b/drivers/net/sfc/falcon_xmac.c | |||
@@ -137,7 +137,7 @@ static bool falcon_xaui_link_ok(struct efx_nic *efx) | |||
137 | 137 | ||
138 | /* If the link is up, then check the phy side of the xaui link */ | 138 | /* If the link is up, then check the phy side of the xaui link */ |
139 | if (efx->link_state.up && link_ok) | 139 | if (efx->link_state.up && link_ok) |
140 | if (efx->phy_op->mmds & (1 << MDIO_MMD_PHYXS)) | 140 | if (efx->mdio.mmds & (1 << MDIO_MMD_PHYXS)) |
141 | link_ok = efx_mdio_phyxgxs_lane_sync(efx); | 141 | link_ok = efx_mdio_phyxgxs_lane_sync(efx); |
142 | 142 | ||
143 | return link_ok; | 143 | return link_ok; |
diff --git a/drivers/net/sfc/mdio_10g.c b/drivers/net/sfc/mdio_10g.c index e6ca988abbb5..20e627431d27 100644 --- a/drivers/net/sfc/mdio_10g.c +++ b/drivers/net/sfc/mdio_10g.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "net_driver.h" | 15 | #include "net_driver.h" |
16 | #include "mdio_10g.h" | 16 | #include "mdio_10g.h" |
17 | #include "workarounds.h" | 17 | #include "workarounds.h" |
18 | #include "falcon.h" | ||
18 | 19 | ||
19 | unsigned efx_mdio_id_oui(u32 id) | 20 | unsigned efx_mdio_id_oui(u32 id) |
20 | { | 21 | { |
@@ -312,8 +313,7 @@ void efx_mdio_an_reconfigure(struct efx_nic *efx) | |||
312 | /* Enable and restart AN */ | 313 | /* Enable and restart AN */ |
313 | reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_CTRL1); | 314 | reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_CTRL1); |
314 | reg |= MDIO_AN_CTRL1_ENABLE; | 315 | reg |= MDIO_AN_CTRL1_ENABLE; |
315 | if (!(EFX_WORKAROUND_15195(efx) && | 316 | if (!(EFX_WORKAROUND_15195(efx) && LOOPBACK_EXTERNAL(efx))) |
316 | LOOPBACK_MASK(efx) & efx->phy_op->loopbacks)) | ||
317 | reg |= MDIO_AN_CTRL1_RESTART; | 317 | reg |= MDIO_AN_CTRL1_RESTART; |
318 | if (xnp) | 318 | if (xnp) |
319 | reg |= MDIO_AN_CTRL1_XNP; | 319 | reg |= MDIO_AN_CTRL1_XNP; |
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h index cd2debb0a552..452f83510b0d 100644 --- a/drivers/net/sfc/net_driver.h +++ b/drivers/net/sfc/net_driver.h | |||
@@ -428,19 +428,6 @@ enum efx_int_mode { | |||
428 | }; | 428 | }; |
429 | #define EFX_INT_MODE_USE_MSI(x) (((x)->interrupt_mode) <= EFX_INT_MODE_MSI) | 429 | #define EFX_INT_MODE_USE_MSI(x) (((x)->interrupt_mode) <= EFX_INT_MODE_MSI) |
430 | 430 | ||
431 | enum phy_type { | ||
432 | PHY_TYPE_NONE = 0, | ||
433 | PHY_TYPE_TXC43128 = 1, | ||
434 | PHY_TYPE_88E1111 = 2, | ||
435 | PHY_TYPE_SFX7101 = 3, | ||
436 | PHY_TYPE_QT2022C2 = 4, | ||
437 | PHY_TYPE_PM8358 = 6, | ||
438 | PHY_TYPE_SFT9001A = 8, | ||
439 | PHY_TYPE_QT2025C = 9, | ||
440 | PHY_TYPE_SFT9001B = 10, | ||
441 | PHY_TYPE_MAX /* Insert any new items before this */ | ||
442 | }; | ||
443 | |||
444 | #define EFX_IS10G(efx) ((efx)->link_state.speed == 10000) | 431 | #define EFX_IS10G(efx) ((efx)->link_state.speed == 10000) |
445 | 432 | ||
446 | enum nic_state { | 433 | enum nic_state { |
@@ -483,12 +470,6 @@ enum efx_fc_type { | |||
483 | EFX_FC_AUTO = 4, | 470 | EFX_FC_AUTO = 4, |
484 | }; | 471 | }; |
485 | 472 | ||
486 | /* Supported MAC bit-mask */ | ||
487 | enum efx_mac_type { | ||
488 | EFX_GMAC = 1, | ||
489 | EFX_XMAC = 2, | ||
490 | }; | ||
491 | |||
492 | /** | 473 | /** |
493 | * struct efx_link_state - Current state of the link | 474 | * struct efx_link_state - Current state of the link |
494 | * @up: Link is up | 475 | * @up: Link is up |
@@ -524,6 +505,8 @@ struct efx_mac_operations { | |||
524 | 505 | ||
525 | /** | 506 | /** |
526 | * struct efx_phy_operations - Efx PHY operations table | 507 | * struct efx_phy_operations - Efx PHY operations table |
508 | * @probe: Probe PHY and initialise efx->mdio.mode_support, efx->mdio.mmds, | ||
509 | * efx->loopback_modes. | ||
527 | * @init: Initialise PHY | 510 | * @init: Initialise PHY |
528 | * @fini: Shut down PHY | 511 | * @fini: Shut down PHY |
529 | * @reconfigure: Reconfigure PHY (e.g. for new link parameters) | 512 | * @reconfigure: Reconfigure PHY (e.g. for new link parameters) |
@@ -533,15 +516,12 @@ struct efx_mac_operations { | |||
533 | * @set_settings: Set ethtool settings. Serialised by the mac_lock. | 516 | * @set_settings: Set ethtool settings. Serialised by the mac_lock. |
534 | * @set_npage_adv: Set abilities advertised in (Extended) Next Page | 517 | * @set_npage_adv: Set abilities advertised in (Extended) Next Page |
535 | * (only needed where AN bit is set in mmds) | 518 | * (only needed where AN bit is set in mmds) |
536 | * @num_tests: Number of PHY-specific tests/results | 519 | * @test_name: Get the name of a PHY-specific test/result |
537 | * @test_names: Names of the tests/results | ||
538 | * @run_tests: Run tests and record results as appropriate. | 520 | * @run_tests: Run tests and record results as appropriate. |
539 | * Flags are the ethtool tests flags. | 521 | * Flags are the ethtool tests flags. |
540 | * @mmds: MMD presence mask | ||
541 | * @loopbacks: Supported loopback modes mask | ||
542 | */ | 522 | */ |
543 | struct efx_phy_operations { | 523 | struct efx_phy_operations { |
544 | enum efx_mac_type macs; | 524 | int (*probe) (struct efx_nic *efx); |
545 | int (*init) (struct efx_nic *efx); | 525 | int (*init) (struct efx_nic *efx); |
546 | void (*fini) (struct efx_nic *efx); | 526 | void (*fini) (struct efx_nic *efx); |
547 | int (*reconfigure) (struct efx_nic *efx); | 527 | int (*reconfigure) (struct efx_nic *efx); |
@@ -551,11 +531,8 @@ struct efx_phy_operations { | |||
551 | int (*set_settings) (struct efx_nic *efx, | 531 | int (*set_settings) (struct efx_nic *efx, |
552 | struct ethtool_cmd *ecmd); | 532 | struct ethtool_cmd *ecmd); |
553 | void (*set_npage_adv) (struct efx_nic *efx, u32); | 533 | void (*set_npage_adv) (struct efx_nic *efx, u32); |
554 | u32 num_tests; | 534 | const char *(*test_name) (struct efx_nic *efx, unsigned int index); |
555 | const char *const *test_names; | ||
556 | int (*run_tests) (struct efx_nic *efx, int *results, unsigned flags); | 535 | int (*run_tests) (struct efx_nic *efx, int *results, unsigned flags); |
557 | int mmds; | ||
558 | unsigned loopbacks; | ||
559 | }; | 536 | }; |
560 | 537 | ||
561 | /** | 538 | /** |
@@ -806,7 +783,7 @@ struct efx_nic { | |||
806 | struct efx_mac_operations *mac_op; | 783 | struct efx_mac_operations *mac_op; |
807 | unsigned char mac_address[ETH_ALEN]; | 784 | unsigned char mac_address[ETH_ALEN]; |
808 | 785 | ||
809 | enum phy_type phy_type; | 786 | unsigned int phy_type; |
810 | struct mutex mdio_lock; | 787 | struct mutex mdio_lock; |
811 | struct efx_phy_operations *phy_op; | 788 | struct efx_phy_operations *phy_op; |
812 | void *phy_data; | 789 | void *phy_data; |
diff --git a/drivers/net/sfc/qt202x_phy.c b/drivers/net/sfc/qt202x_phy.c index 49a5ab5efb9a..22b0e89ba8f2 100644 --- a/drivers/net/sfc/qt202x_phy.c +++ b/drivers/net/sfc/qt202x_phy.c | |||
@@ -135,6 +135,14 @@ static int qt202x_reset_phy(struct efx_nic *efx) | |||
135 | return rc; | 135 | return rc; |
136 | } | 136 | } |
137 | 137 | ||
138 | static int qt202x_phy_probe(struct efx_nic *efx) | ||
139 | { | ||
140 | efx->mdio.mmds = QT202X_REQUIRED_DEVS; | ||
141 | efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; | ||
142 | efx->loopback_modes = QT202X_LOOPBACKS | FALCON_XMAC_LOOPBACKS; | ||
143 | return 0; | ||
144 | } | ||
145 | |||
138 | static int qt202x_phy_init(struct efx_nic *efx) | 146 | static int qt202x_phy_init(struct efx_nic *efx) |
139 | { | 147 | { |
140 | struct qt202x_phy_data *phy_data; | 148 | struct qt202x_phy_data *phy_data; |
@@ -224,13 +232,11 @@ static void qt202x_phy_fini(struct efx_nic *efx) | |||
224 | } | 232 | } |
225 | 233 | ||
226 | struct efx_phy_operations falcon_qt202x_phy_ops = { | 234 | struct efx_phy_operations falcon_qt202x_phy_ops = { |
227 | .macs = EFX_XMAC, | 235 | .probe = qt202x_phy_probe, |
228 | .init = qt202x_phy_init, | 236 | .init = qt202x_phy_init, |
229 | .reconfigure = qt202x_phy_reconfigure, | 237 | .reconfigure = qt202x_phy_reconfigure, |
230 | .poll = qt202x_phy_poll, | 238 | .poll = qt202x_phy_poll, |
231 | .fini = qt202x_phy_fini, | 239 | .fini = qt202x_phy_fini, |
232 | .get_settings = qt202x_phy_get_settings, | 240 | .get_settings = qt202x_phy_get_settings, |
233 | .set_settings = efx_mdio_set_settings, | 241 | .set_settings = efx_mdio_set_settings, |
234 | .mmds = QT202X_REQUIRED_DEVS, | ||
235 | .loopbacks = QT202X_LOOPBACKS, | ||
236 | }; | 242 | }; |
diff --git a/drivers/net/sfc/selftest.c b/drivers/net/sfc/selftest.c index 9a240536debc..16258d83b703 100644 --- a/drivers/net/sfc/selftest.c +++ b/drivers/net/sfc/selftest.c | |||
@@ -100,7 +100,7 @@ static int efx_test_mdio(struct efx_nic *efx, struct efx_self_tests *tests) | |||
100 | } | 100 | } |
101 | 101 | ||
102 | if (EFX_IS10G(efx)) { | 102 | if (EFX_IS10G(efx)) { |
103 | rc = efx_mdio_check_mmds(efx, efx->phy_op->mmds, 0); | 103 | rc = efx_mdio_check_mmds(efx, efx->mdio.mmds, 0); |
104 | if (rc) | 104 | if (rc) |
105 | goto out; | 105 | goto out; |
106 | } | 106 | } |
@@ -253,9 +253,6 @@ static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests, | |||
253 | if (!efx->phy_op->run_tests) | 253 | if (!efx->phy_op->run_tests) |
254 | return 0; | 254 | return 0; |
255 | 255 | ||
256 | EFX_BUG_ON_PARANOID(efx->phy_op->num_tests == 0 || | ||
257 | efx->phy_op->num_tests > EFX_MAX_PHY_TESTS); | ||
258 | |||
259 | mutex_lock(&efx->mac_lock); | 256 | mutex_lock(&efx->mac_lock); |
260 | rc = efx->phy_op->run_tests(efx, tests->phy, flags); | 257 | rc = efx->phy_op->run_tests(efx, tests->phy, flags); |
261 | mutex_unlock(&efx->mac_lock); | 258 | mutex_unlock(&efx->mac_lock); |
diff --git a/drivers/net/sfc/tenxpress.c b/drivers/net/sfc/tenxpress.c index 0dfb2275a158..8de97a9f2719 100644 --- a/drivers/net/sfc/tenxpress.c +++ b/drivers/net/sfc/tenxpress.c | |||
@@ -298,6 +298,23 @@ static int tenxpress_init(struct efx_nic *efx) | |||
298 | return 0; | 298 | return 0; |
299 | } | 299 | } |
300 | 300 | ||
301 | static int sfx7101_phy_probe(struct efx_nic *efx) | ||
302 | { | ||
303 | efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; | ||
304 | efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; | ||
305 | efx->loopback_modes = SFX7101_LOOPBACKS | FALCON_XMAC_LOOPBACKS; | ||
306 | return 0; | ||
307 | } | ||
308 | |||
309 | static int sft9001_phy_probe(struct efx_nic *efx) | ||
310 | { | ||
311 | efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; | ||
312 | efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; | ||
313 | efx->loopback_modes = (SFT9001_LOOPBACKS | FALCON_XMAC_LOOPBACKS | | ||
314 | FALCON_GMAC_LOOPBACKS); | ||
315 | return 0; | ||
316 | } | ||
317 | |||
301 | static int tenxpress_phy_init(struct efx_nic *efx) | 318 | static int tenxpress_phy_init(struct efx_nic *efx) |
302 | { | 319 | { |
303 | struct tenxpress_phy_data *phy_data; | 320 | struct tenxpress_phy_data *phy_data; |
@@ -512,7 +529,7 @@ static int tenxpress_phy_reconfigure(struct efx_nic *efx) | |||
512 | 529 | ||
513 | phy_mode_change = (efx->phy_mode == PHY_MODE_NORMAL && | 530 | phy_mode_change = (efx->phy_mode == PHY_MODE_NORMAL && |
514 | phy_data->phy_mode != PHY_MODE_NORMAL); | 531 | phy_data->phy_mode != PHY_MODE_NORMAL); |
515 | loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, efx->phy_op->loopbacks) || | 532 | loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, LOOPBACKS_EXTERNAL(efx)) || |
516 | LOOPBACK_CHANGED(phy_data, efx, 1 << LOOPBACK_GPHY)); | 533 | LOOPBACK_CHANGED(phy_data, efx, 1 << LOOPBACK_GPHY)); |
517 | 534 | ||
518 | if (loop_reset || phy_mode_change) { | 535 | if (loop_reset || phy_mode_change) { |
@@ -627,6 +644,13 @@ static const char *const sfx7101_test_names[] = { | |||
627 | "bist" | 644 | "bist" |
628 | }; | 645 | }; |
629 | 646 | ||
647 | static const char *sfx7101_test_name(struct efx_nic *efx, unsigned int index) | ||
648 | { | ||
649 | if (index < ARRAY_SIZE(sfx7101_test_names)) | ||
650 | return sfx7101_test_names[index]; | ||
651 | return NULL; | ||
652 | } | ||
653 | |||
630 | static int | 654 | static int |
631 | sfx7101_run_tests(struct efx_nic *efx, int *results, unsigned flags) | 655 | sfx7101_run_tests(struct efx_nic *efx, int *results, unsigned flags) |
632 | { | 656 | { |
@@ -656,6 +680,13 @@ static const char *const sft9001_test_names[] = { | |||
656 | "cable.pairD.length", | 680 | "cable.pairD.length", |
657 | }; | 681 | }; |
658 | 682 | ||
683 | static const char *sft9001_test_name(struct efx_nic *efx, unsigned int index) | ||
684 | { | ||
685 | if (index < ARRAY_SIZE(sft9001_test_names)) | ||
686 | return sft9001_test_names[index]; | ||
687 | return NULL; | ||
688 | } | ||
689 | |||
659 | static int sft9001_run_tests(struct efx_nic *efx, int *results, unsigned flags) | 690 | static int sft9001_run_tests(struct efx_nic *efx, int *results, unsigned flags) |
660 | { | 691 | { |
661 | int rc = 0, rc2, i, ctrl_reg, res_reg; | 692 | int rc = 0, rc2, i, ctrl_reg, res_reg; |
@@ -758,7 +789,7 @@ tenxpress_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) | |||
758 | * but doesn't advertise the correct speed. So override it */ | 789 | * but doesn't advertise the correct speed. So override it */ |
759 | if (efx->loopback_mode == LOOPBACK_GPHY) | 790 | if (efx->loopback_mode == LOOPBACK_GPHY) |
760 | ecmd->speed = SPEED_1000; | 791 | ecmd->speed = SPEED_1000; |
761 | else if (LOOPBACK_MASK(efx) & efx->phy_op->loopbacks) | 792 | else if (LOOPBACK_EXTERNAL(efx)) |
762 | ecmd->speed = SPEED_10000; | 793 | ecmd->speed = SPEED_10000; |
763 | } | 794 | } |
764 | 795 | ||
@@ -788,7 +819,7 @@ static void sft9001_set_npage_adv(struct efx_nic *efx, u32 advertising) | |||
788 | } | 819 | } |
789 | 820 | ||
790 | struct efx_phy_operations falcon_sfx7101_phy_ops = { | 821 | struct efx_phy_operations falcon_sfx7101_phy_ops = { |
791 | .macs = EFX_XMAC, | 822 | .probe = sfx7101_phy_probe, |
792 | .init = tenxpress_phy_init, | 823 | .init = tenxpress_phy_init, |
793 | .reconfigure = tenxpress_phy_reconfigure, | 824 | .reconfigure = tenxpress_phy_reconfigure, |
794 | .poll = tenxpress_phy_poll, | 825 | .poll = tenxpress_phy_poll, |
@@ -796,15 +827,12 @@ struct efx_phy_operations falcon_sfx7101_phy_ops = { | |||
796 | .get_settings = tenxpress_get_settings, | 827 | .get_settings = tenxpress_get_settings, |
797 | .set_settings = tenxpress_set_settings, | 828 | .set_settings = tenxpress_set_settings, |
798 | .set_npage_adv = sfx7101_set_npage_adv, | 829 | .set_npage_adv = sfx7101_set_npage_adv, |
799 | .num_tests = ARRAY_SIZE(sfx7101_test_names), | 830 | .test_name = sfx7101_test_name, |
800 | .test_names = sfx7101_test_names, | ||
801 | .run_tests = sfx7101_run_tests, | 831 | .run_tests = sfx7101_run_tests, |
802 | .mmds = TENXPRESS_REQUIRED_DEVS, | ||
803 | .loopbacks = SFX7101_LOOPBACKS, | ||
804 | }; | 832 | }; |
805 | 833 | ||
806 | struct efx_phy_operations falcon_sft9001_phy_ops = { | 834 | struct efx_phy_operations falcon_sft9001_phy_ops = { |
807 | .macs = EFX_GMAC | EFX_XMAC, | 835 | .probe = sft9001_phy_probe, |
808 | .init = tenxpress_phy_init, | 836 | .init = tenxpress_phy_init, |
809 | .reconfigure = tenxpress_phy_reconfigure, | 837 | .reconfigure = tenxpress_phy_reconfigure, |
810 | .poll = tenxpress_phy_poll, | 838 | .poll = tenxpress_phy_poll, |
@@ -812,9 +840,6 @@ struct efx_phy_operations falcon_sft9001_phy_ops = { | |||
812 | .get_settings = tenxpress_get_settings, | 840 | .get_settings = tenxpress_get_settings, |
813 | .set_settings = tenxpress_set_settings, | 841 | .set_settings = tenxpress_set_settings, |
814 | .set_npage_adv = sft9001_set_npage_adv, | 842 | .set_npage_adv = sft9001_set_npage_adv, |
815 | .num_tests = ARRAY_SIZE(sft9001_test_names), | 843 | .test_name = sft9001_test_name, |
816 | .test_names = sft9001_test_names, | ||
817 | .run_tests = sft9001_run_tests, | 844 | .run_tests = sft9001_run_tests, |
818 | .mmds = TENXPRESS_REQUIRED_DEVS, | ||
819 | .loopbacks = SFT9001_LOOPBACKS, | ||
820 | }; | 845 | }; |