提交 15bf176d 编写于 作者: C Claudiu Manoil 提交者: David S. Miller

gianfar: Don't enable the Filer w/o the Parser

Under one unusual circumstance it's possible to wrongly set
FILREN without enabling PRSDEP as well in the RCTRL register,
against the hardware specifications.  With the default config
this does not happen because the default Rx offloads (Rx csum
and Rx VLAN) properly enable PRSDEP.  But if anyone disables
all these offloads (via ethtool), we get a wrong configuration
were the Rx flow classification and hashing, and other Filer
based features (e.g. wake-on-filer interrupt) won't work.
This patch fixes the issue.
Also, account for Rx FCB insertion which happens every time
PRSDEP is set.
Signed-off-by: NClaudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 5188f7e5
...@@ -341,7 +341,7 @@ static void gfar_rx_offload_en(struct gfar_private *priv) ...@@ -341,7 +341,7 @@ static void gfar_rx_offload_en(struct gfar_private *priv)
if (priv->ndev->features & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) if (priv->ndev->features & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX))
priv->uses_rxfcb = 1; priv->uses_rxfcb = 1;
if (priv->hwts_rx_en) if (priv->hwts_rx_en || priv->rx_filer_enable)
priv->uses_rxfcb = 1; priv->uses_rxfcb = 1;
} }
...@@ -351,7 +351,7 @@ static void gfar_mac_rx_config(struct gfar_private *priv) ...@@ -351,7 +351,7 @@ static void gfar_mac_rx_config(struct gfar_private *priv)
u32 rctrl = 0; u32 rctrl = 0;
if (priv->rx_filer_enable) { if (priv->rx_filer_enable) {
rctrl |= RCTRL_FILREN; rctrl |= RCTRL_FILREN | RCTRL_PRSDEP_INIT;
/* Program the RIR0 reg with the required distribution */ /* Program the RIR0 reg with the required distribution */
if (priv->poll_mode == GFAR_SQ_POLLING) if (priv->poll_mode == GFAR_SQ_POLLING)
gfar_write(&regs->rir0, DEFAULT_2RXQ_RIR0); gfar_write(&regs->rir0, DEFAULT_2RXQ_RIR0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册