mirror of https://gitee.com/openkylin/linux.git
sfc: EFX_WORKAROUND_ALWAYS is really specific to Falcon-architecture
The workarounds that currently use EFX_WORKAROUND_ALWAYS are in Falcon-specific or Falcon-arch-specific code, so get rid of the conditions altogether. Add/move comments as appropriate. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
b105798fa5
commit
ab3b825060
|
@ -686,7 +686,7 @@ static void falcon_ack_status_intr(struct efx_nic *efx)
|
|||
return;
|
||||
|
||||
/* We expect xgmii faults if the wireside link is down */
|
||||
if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up)
|
||||
if (!efx->link_state.up)
|
||||
return;
|
||||
|
||||
/* We can only use this interrupt to signal the negative edge of
|
||||
|
@ -795,29 +795,22 @@ static void falcon_reconfigure_xgxs_core(struct efx_nic *efx)
|
|||
bool xgxs_loopback = (efx->loopback_mode == LOOPBACK_XGXS);
|
||||
bool xaui_loopback = (efx->loopback_mode == LOOPBACK_XAUI);
|
||||
bool xgmii_loopback = (efx->loopback_mode == LOOPBACK_XGMII);
|
||||
bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback;
|
||||
|
||||
/* XGXS block is flaky and will need to be reset if moving
|
||||
* into our out of XGMII, XGXS or XAUI loopbacks. */
|
||||
if (EFX_WORKAROUND_5147(efx)) {
|
||||
bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback;
|
||||
bool reset_xgxs;
|
||||
efx_reado(efx, ®, FR_AB_XX_CORE_STAT);
|
||||
old_xgxs_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN);
|
||||
old_xgmii_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN);
|
||||
|
||||
efx_reado(efx, ®, FR_AB_XX_CORE_STAT);
|
||||
old_xgxs_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN);
|
||||
old_xgmii_loopback =
|
||||
EFX_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN);
|
||||
efx_reado(efx, ®, FR_AB_XX_SD_CTL);
|
||||
old_xaui_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_LPBKA);
|
||||
|
||||
efx_reado(efx, ®, FR_AB_XX_SD_CTL);
|
||||
old_xaui_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_LPBKA);
|
||||
|
||||
/* The PHY driver may have turned XAUI off */
|
||||
reset_xgxs = ((xgxs_loopback != old_xgxs_loopback) ||
|
||||
(xaui_loopback != old_xaui_loopback) ||
|
||||
(xgmii_loopback != old_xgmii_loopback));
|
||||
|
||||
if (reset_xgxs)
|
||||
falcon_reset_xaui(efx);
|
||||
}
|
||||
/* The PHY driver may have turned XAUI off */
|
||||
if ((xgxs_loopback != old_xgxs_loopback) ||
|
||||
(xaui_loopback != old_xaui_loopback) ||
|
||||
(xgmii_loopback != old_xgmii_loopback))
|
||||
falcon_reset_xaui(efx);
|
||||
|
||||
efx_reado(efx, ®, FR_AB_XX_CORE_STAT);
|
||||
EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_FORCE_SIG,
|
||||
|
@ -946,8 +939,8 @@ static void falcon_poll_xmac(struct efx_nic *efx)
|
|||
{
|
||||
struct falcon_nic_data *nic_data = efx->nic_data;
|
||||
|
||||
if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up ||
|
||||
!nic_data->xmac_poll_required)
|
||||
/* We expect xgmii faults if the wireside link is down */
|
||||
if (!efx->link_state.up || !nic_data->xmac_poll_required)
|
||||
return;
|
||||
|
||||
nic_data->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 1);
|
||||
|
|
|
@ -830,8 +830,7 @@ efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
|
|||
netif_tx_lock(efx->net_dev);
|
||||
efx_farch_notify_tx_desc(tx_queue);
|
||||
netif_tx_unlock(efx->net_dev);
|
||||
} else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR) &&
|
||||
EFX_WORKAROUND_10727(efx)) {
|
||||
} else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR)) {
|
||||
efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH);
|
||||
} else {
|
||||
netif_err(efx, tx_err, efx->net_dev,
|
||||
|
@ -1531,8 +1530,7 @@ irqreturn_t efx_farch_legacy_interrupt(int irq, void *dev_id)
|
|||
}
|
||||
|
||||
if (queues != 0) {
|
||||
if (EFX_WORKAROUND_15783(efx))
|
||||
efx->irq_zero_count = 0;
|
||||
efx->irq_zero_count = 0;
|
||||
|
||||
/* Schedule processing of any interrupting queues */
|
||||
if (likely(soft_enabled)) {
|
||||
|
@ -1544,9 +1542,11 @@ irqreturn_t efx_farch_legacy_interrupt(int irq, void *dev_id)
|
|||
}
|
||||
result = IRQ_HANDLED;
|
||||
|
||||
} else if (EFX_WORKAROUND_15783(efx)) {
|
||||
} else {
|
||||
efx_qword_t *event;
|
||||
|
||||
/* Legacy ISR read can return zero once (SF bug 15783) */
|
||||
|
||||
/* We can't return IRQ_HANDLED more than once on seeing ISR=0
|
||||
* because this might be a shared interrupt. */
|
||||
if (efx->irq_zero_count++ == 0)
|
||||
|
|
|
@ -15,25 +15,15 @@
|
|||
* Bug numbers are from Solarflare's Bugzilla.
|
||||
*/
|
||||
|
||||
#define EFX_WORKAROUND_ALWAYS(efx) 1
|
||||
#define EFX_WORKAROUND_FALCON_A(efx) (efx_nic_rev(efx) <= EFX_REV_FALCON_A1)
|
||||
#define EFX_WORKAROUND_FALCON_AB(efx) (efx_nic_rev(efx) <= EFX_REV_FALCON_B0)
|
||||
#define EFX_WORKAROUND_SIENA(efx) (efx_nic_rev(efx) == EFX_REV_SIENA_A0)
|
||||
#define EFX_WORKAROUND_10G(efx) 1
|
||||
|
||||
/* XAUI resets if link not detected */
|
||||
#define EFX_WORKAROUND_5147 EFX_WORKAROUND_ALWAYS
|
||||
/* RX PCIe double split performance issue */
|
||||
#define EFX_WORKAROUND_7575 EFX_WORKAROUND_ALWAYS
|
||||
/* Bit-bashed I2C reads cause performance drop */
|
||||
#define EFX_WORKAROUND_7884 EFX_WORKAROUND_10G
|
||||
/* TX_EV_PKT_ERR can be caused by a dangling TX descriptor
|
||||
* or a PCIe error (bug 11028) */
|
||||
#define EFX_WORKAROUND_10727 EFX_WORKAROUND_ALWAYS
|
||||
/* Truncated IPv4 packets can confuse the TX packet parser */
|
||||
#define EFX_WORKAROUND_15592 EFX_WORKAROUND_FALCON_AB
|
||||
/* Legacy ISR read can return zero once */
|
||||
#define EFX_WORKAROUND_15783 EFX_WORKAROUND_ALWAYS
|
||||
/* Legacy interrupt storm when interrupt fifo fills */
|
||||
#define EFX_WORKAROUND_17213 EFX_WORKAROUND_SIENA
|
||||
|
||||
|
|
Loading…
Reference in New Issue