Some IP cores of dc2114x or its variants do not comply so well with the behaviors described by the official document. A packet could be sent successfully but reported with No Carrier error. Latest drivers of this IP core have not detect this error anymore.
Signed-off-by: Hanyuan Zhao <zhaoh...@mails.tsinghua.edu.cn> --- drivers/net/Kconfig | 11 +++++++++++ drivers/net/dc2114x.c | 2 ++ 2 files changed, 13 insertions(+) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 41b7c66105..d79d8ad9c4 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -748,6 +748,17 @@ config TULIP_SUPPORT_NON_PCI Say Y to this and you can run this driver on platforms that do not have PCI controllers. +config TULIP_IGNORE_TX_NO_CARRIER + bool "Ignore tx no carrier error" + depends on TULIP + default n + help + Some IP cores of dc2114x or its variants do not comply so well with + the behaviors described by the official document. A packet could be + sent successfully but reported with No Carrier error. Latest drivers + of this IP core do not detect this error anymore. Say Y to this could + disable handling of this error. + config XILINX_AXIEMAC select PHYLIB select MII diff --git a/drivers/net/dc2114x.c b/drivers/net/dc2114x.c index 8a285742a1..dc28712221 100644 --- a/drivers/net/dc2114x.c +++ b/drivers/net/dc2114x.c @@ -371,7 +371,9 @@ static int dc21x4x_send_common(struct dc2114x_priv *priv, void *packet, int leng if (le32_to_cpu(priv->tx_ring[priv->tx_new].status) & TD_ES) { priv->tx_ring[priv->tx_new].status = 0x0; +#if !CONFIG_IS_ENABLED(TULIP_IGNORE_TX_NO_CARRIER) goto done; +#endif } status = length; -- 2.39.2