aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/falcon_xmac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sfc/falcon_xmac.c')
-rw-r--r--drivers/net/sfc/falcon_xmac.c63
1 files changed, 31 insertions, 32 deletions
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c
index ab114b4c3426..be5a86f0e5cf 100644
--- a/drivers/net/sfc/falcon_xmac.c
+++ b/drivers/net/sfc/falcon_xmac.c
@@ -70,7 +70,7 @@ static int falcon_reset_xmac(struct efx_nic *efx)
70 } 70 }
71 71
72 /* This often fails when DSP is disabled, ignore it */ 72 /* This often fails when DSP is disabled, ignore it */
73 if (sfe4001_phy_flash_cfg != 0) 73 if (sfe4001_phy_flash_cfg)
74 return 0; 74 return 0;
75 75
76 EFX_ERR(efx, "timed out waiting for XMAC core reset\n"); 76 EFX_ERR(efx, "timed out waiting for XMAC core reset\n");
@@ -217,12 +217,12 @@ int falcon_reset_xaui(struct efx_nic *efx)
217 return rc; 217 return rc;
218} 218}
219 219
220static int falcon_xgmii_status(struct efx_nic *efx) 220static bool falcon_xgmii_status(struct efx_nic *efx)
221{ 221{
222 efx_dword_t reg; 222 efx_dword_t reg;
223 223
224 if (falcon_rev(efx) < FALCON_REV_B0) 224 if (falcon_rev(efx) < FALCON_REV_B0)
225 return 1; 225 return true;
226 226
227 /* The ISR latches, so clear it and re-read */ 227 /* The ISR latches, so clear it and re-read */
228 falcon_xmac_readl(efx, &reg, XM_MGT_INT_REG_MAC_B0); 228 falcon_xmac_readl(efx, &reg, XM_MGT_INT_REG_MAC_B0);
@@ -231,13 +231,13 @@ static int falcon_xgmii_status(struct efx_nic *efx)
231 if (EFX_DWORD_FIELD(reg, XM_LCLFLT) || 231 if (EFX_DWORD_FIELD(reg, XM_LCLFLT) ||
232 EFX_DWORD_FIELD(reg, XM_RMTFLT)) { 232 EFX_DWORD_FIELD(reg, XM_RMTFLT)) {
233 EFX_INFO(efx, "MGT_INT: "EFX_DWORD_FMT"\n", EFX_DWORD_VAL(reg)); 233 EFX_INFO(efx, "MGT_INT: "EFX_DWORD_FMT"\n", EFX_DWORD_VAL(reg));
234 return 0; 234 return false;
235 } 235 }
236 236
237 return 1; 237 return true;
238} 238}
239 239
240static void falcon_mask_status_intr(struct efx_nic *efx, int enable) 240static void falcon_mask_status_intr(struct efx_nic *efx, bool enable)
241{ 241{
242 efx_dword_t reg; 242 efx_dword_t reg;
243 243
@@ -274,7 +274,7 @@ int falcon_init_xmac(struct efx_nic *efx)
274 if (rc) 274 if (rc)
275 goto fail2; 275 goto fail2;
276 276
277 falcon_mask_status_intr(efx, 1); 277 falcon_mask_status_intr(efx, true);
278 return 0; 278 return 0;
279 279
280 fail2: 280 fail2:
@@ -283,13 +283,14 @@ int falcon_init_xmac(struct efx_nic *efx)
283 return rc; 283 return rc;
284} 284}
285 285
286int falcon_xaui_link_ok(struct efx_nic *efx) 286bool falcon_xaui_link_ok(struct efx_nic *efx)
287{ 287{
288 efx_dword_t reg; 288 efx_dword_t reg;
289 int align_done, sync_status, link_ok = 0; 289 bool align_done, link_ok = false;
290 int sync_status;
290 291
291 if (LOOPBACK_INTERNAL(efx)) 292 if (LOOPBACK_INTERNAL(efx))
292 return 1; 293 return true;
293 294
294 /* Read link status */ 295 /* Read link status */
295 falcon_xmac_readl(efx, &reg, XX_CORE_STAT_REG_MAC); 296 falcon_xmac_readl(efx, &reg, XX_CORE_STAT_REG_MAC);
@@ -297,7 +298,7 @@ int falcon_xaui_link_ok(struct efx_nic *efx)
297 align_done = EFX_DWORD_FIELD(reg, XX_ALIGN_DONE); 298 align_done = EFX_DWORD_FIELD(reg, XX_ALIGN_DONE);
298 sync_status = EFX_DWORD_FIELD(reg, XX_SYNC_STAT); 299 sync_status = EFX_DWORD_FIELD(reg, XX_SYNC_STAT);
299 if (align_done && (sync_status == XX_SYNC_STAT_DECODE_SYNCED)) 300 if (align_done && (sync_status == XX_SYNC_STAT_DECODE_SYNCED))
300 link_ok = 1; 301 link_ok = true;
301 302
302 /* Clear link status ready for next read */ 303 /* Clear link status ready for next read */
303 EFX_SET_DWORD_FIELD(reg, XX_COMMA_DET, XX_COMMA_DET_RESET); 304 EFX_SET_DWORD_FIELD(reg, XX_COMMA_DET, XX_COMMA_DET_RESET);
@@ -309,8 +310,7 @@ int falcon_xaui_link_ok(struct efx_nic *efx)
309 * (error conditions from the wire side propoagate back through 310 * (error conditions from the wire side propoagate back through
310 * the phy to the xaui side). */ 311 * the phy to the xaui side). */
311 if (efx->link_up && link_ok) { 312 if (efx->link_up && link_ok) {
312 int has_phyxs = efx->phy_op->mmds & (1 << MDIO_MMD_PHYXS); 313 if (efx->phy_op->mmds & (1 << MDIO_MMD_PHYXS))
313 if (has_phyxs)
314 link_ok = mdio_clause45_phyxgxs_lane_sync(efx); 314 link_ok = mdio_clause45_phyxgxs_lane_sync(efx);
315 } 315 }
316 316
@@ -326,7 +326,7 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
326{ 326{
327 unsigned int max_frame_len; 327 unsigned int max_frame_len;
328 efx_dword_t reg; 328 efx_dword_t reg;
329 int rx_fc = (efx->flow_control & EFX_FC_RX) ? 1 : 0; 329 bool rx_fc = !!(efx->flow_control & EFX_FC_RX);
330 330
331 /* Configure MAC - cut-thru mode is hard wired on */ 331 /* Configure MAC - cut-thru mode is hard wired on */
332 EFX_POPULATE_DWORD_3(reg, 332 EFX_POPULATE_DWORD_3(reg,
@@ -365,7 +365,7 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
365 365
366 EFX_POPULATE_DWORD_2(reg, 366 EFX_POPULATE_DWORD_2(reg,
367 XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */ 367 XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */
368 XM_DIS_FCNTL, rx_fc ? 0 : 1); 368 XM_DIS_FCNTL, !rx_fc);
369 falcon_xmac_writel(efx, &reg, XM_FC_REG_MAC); 369 falcon_xmac_writel(efx, &reg, XM_FC_REG_MAC);
370 370
371 /* Set MAC address */ 371 /* Set MAC address */
@@ -384,16 +384,15 @@ static void falcon_reconfigure_xmac_core(struct efx_nic *efx)
384static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) 384static void falcon_reconfigure_xgxs_core(struct efx_nic *efx)
385{ 385{
386 efx_dword_t reg; 386 efx_dword_t reg;
387 int xgxs_loopback = (efx->loopback_mode == LOOPBACK_XGXS) ? 1 : 0; 387 bool xgxs_loopback = (efx->loopback_mode == LOOPBACK_XGXS);
388 int xaui_loopback = (efx->loopback_mode == LOOPBACK_XAUI) ? 1 : 0; 388 bool xaui_loopback = (efx->loopback_mode == LOOPBACK_XAUI);
389 int xgmii_loopback = 389 bool xgmii_loopback = (efx->loopback_mode == LOOPBACK_XGMII);
390 (efx->loopback_mode == LOOPBACK_XGMII) ? 1 : 0;
391 390
392 /* XGXS block is flaky and will need to be reset if moving 391 /* XGXS block is flaky and will need to be reset if moving
393 * into our out of XGMII, XGXS or XAUI loopbacks. */ 392 * into our out of XGMII, XGXS or XAUI loopbacks. */
394 if (EFX_WORKAROUND_5147(efx)) { 393 if (EFX_WORKAROUND_5147(efx)) {
395 int old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback; 394 bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback;
396 int reset_xgxs; 395 bool reset_xgxs;
397 396
398 falcon_xmac_readl(efx, &reg, XX_CORE_STAT_REG_MAC); 397 falcon_xmac_readl(efx, &reg, XX_CORE_STAT_REG_MAC);
399 old_xgxs_loopback = EFX_DWORD_FIELD(reg, XX_XGXS_LB_EN); 398 old_xgxs_loopback = EFX_DWORD_FIELD(reg, XX_XGXS_LB_EN);
@@ -438,7 +437,7 @@ static void falcon_reconfigure_xgxs_core(struct efx_nic *efx)
438 437
439/* Try and bring the Falcon side of the Falcon-Phy XAUI link fails 438/* Try and bring the Falcon side of the Falcon-Phy XAUI link fails
440 * to come back up. Bash it until it comes back up */ 439 * to come back up. Bash it until it comes back up */
441static int falcon_check_xaui_link_up(struct efx_nic *efx) 440static bool falcon_check_xaui_link_up(struct efx_nic *efx)
442{ 441{
443 int max_tries, tries; 442 int max_tries, tries;
444 tries = EFX_WORKAROUND_5147(efx) ? 5 : 1; 443 tries = EFX_WORKAROUND_5147(efx) ? 5 : 1;
@@ -446,11 +445,11 @@ static int falcon_check_xaui_link_up(struct efx_nic *efx)
446 445
447 if ((efx->loopback_mode == LOOPBACK_NETWORK) || 446 if ((efx->loopback_mode == LOOPBACK_NETWORK) ||
448 (efx->phy_type == PHY_TYPE_NONE)) 447 (efx->phy_type == PHY_TYPE_NONE))
449 return 0; 448 return false;
450 449
451 while (tries) { 450 while (tries) {
452 if (falcon_xaui_link_ok(efx)) 451 if (falcon_xaui_link_ok(efx))
453 return 1; 452 return true;
454 453
455 EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n", 454 EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n",
456 __func__, tries); 455 __func__, tries);
@@ -461,14 +460,14 @@ static int falcon_check_xaui_link_up(struct efx_nic *efx)
461 460
462 EFX_LOG(efx, "Failed to bring XAUI link back up in %d tries!\n", 461 EFX_LOG(efx, "Failed to bring XAUI link back up in %d tries!\n",
463 max_tries); 462 max_tries);
464 return 0; 463 return false;
465} 464}
466 465
467void falcon_reconfigure_xmac(struct efx_nic *efx) 466void falcon_reconfigure_xmac(struct efx_nic *efx)
468{ 467{
469 int xaui_link_ok; 468 bool xaui_link_ok;
470 469
471 falcon_mask_status_intr(efx, 0); 470 falcon_mask_status_intr(efx, false);
472 471
473 falcon_deconfigure_mac_wrapper(efx); 472 falcon_deconfigure_mac_wrapper(efx);
474 473
@@ -484,7 +483,7 @@ void falcon_reconfigure_xmac(struct efx_nic *efx)
484 xaui_link_ok = falcon_check_xaui_link_up(efx); 483 xaui_link_ok = falcon_check_xaui_link_up(efx);
485 484
486 if (xaui_link_ok && efx->link_up) 485 if (xaui_link_ok && efx->link_up)
487 falcon_mask_status_intr(efx, 1); 486 falcon_mask_status_intr(efx, true);
488} 487}
489 488
490void falcon_fini_xmac(struct efx_nic *efx) 489void falcon_fini_xmac(struct efx_nic *efx)
@@ -563,14 +562,14 @@ void falcon_update_stats_xmac(struct efx_nic *efx)
563 562
564int falcon_check_xmac(struct efx_nic *efx) 563int falcon_check_xmac(struct efx_nic *efx)
565{ 564{
566 unsigned xaui_link_ok; 565 bool xaui_link_ok;
567 int rc; 566 int rc;
568 567
569 if ((efx->loopback_mode == LOOPBACK_NETWORK) || 568 if ((efx->loopback_mode == LOOPBACK_NETWORK) ||
570 (efx->phy_type == PHY_TYPE_NONE)) 569 (efx->phy_type == PHY_TYPE_NONE))
571 return 0; 570 return 0;
572 571
573 falcon_mask_status_intr(efx, 0); 572 falcon_mask_status_intr(efx, false);
574 xaui_link_ok = falcon_xaui_link_ok(efx); 573 xaui_link_ok = falcon_xaui_link_ok(efx);
575 574
576 if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok) 575 if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok)
@@ -581,7 +580,7 @@ int falcon_check_xmac(struct efx_nic *efx)
581 580
582 /* Unmask interrupt if everything was (and still is) ok */ 581 /* Unmask interrupt if everything was (and still is) ok */
583 if (xaui_link_ok && efx->link_up) 582 if (xaui_link_ok && efx->link_up)
584 falcon_mask_status_intr(efx, 1); 583 falcon_mask_status_intr(efx, true);
585 584
586 return rc; 585 return rc;
587} 586}
@@ -622,7 +621,7 @@ int falcon_xmac_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd)
622 621
623int falcon_xmac_set_pause(struct efx_nic *efx, enum efx_fc_type flow_control) 622int falcon_xmac_set_pause(struct efx_nic *efx, enum efx_fc_type flow_control)
624{ 623{
625 int reset; 624 bool reset;
626 625
627 if (flow_control & EFX_FC_AUTO) { 626 if (flow_control & EFX_FC_AUTO) {
628 EFX_LOG(efx, "10G does not support flow control " 627 EFX_LOG(efx, "10G does not support flow control "