Commit df727d45 authored by Rasmus Villemoes's avatar Rasmus Villemoes Committed by David S. Miller

net: fec: don't reset irq coalesce settings to defaults on "ip link up"

Currently, when a FEC device is brought up, the irq coalesce settings
are reset to their default values (1000us, 200 frames). That's
unexpected, and breaks for example use of an appropriate .link file to
make systemd-udev apply the desired
settings (https://www.freedesktop.org/software/systemd/man/systemd.link.html),
or any other method that would do a one-time setup during early boot.

Refactor the code so that fec_restart() instead uses
fec_enet_itr_coal_set(), which simply applies the settings that are
stored in the private data, and initialize that private data with the
default values.
Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32b931c8
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
#include "fec.h" #include "fec.h"
static void set_multicast_list(struct net_device *ndev); static void set_multicast_list(struct net_device *ndev);
static void fec_enet_itr_coal_init(struct net_device *ndev); static void fec_enet_itr_coal_set(struct net_device *ndev);
#define DRIVER_NAME "fec" #define DRIVER_NAME "fec"
...@@ -1220,8 +1220,7 @@ fec_restart(struct net_device *ndev) ...@@ -1220,8 +1220,7 @@ fec_restart(struct net_device *ndev)
writel(0, fep->hwp + FEC_IMASK); writel(0, fep->hwp + FEC_IMASK);
/* Init the interrupt coalescing */ /* Init the interrupt coalescing */
fec_enet_itr_coal_init(ndev); fec_enet_itr_coal_set(ndev);
} }
static int fec_enet_ipc_handle_init(struct fec_enet_private *fep) static int fec_enet_ipc_handle_init(struct fec_enet_private *fep)
...@@ -2856,19 +2855,6 @@ static int fec_enet_set_coalesce(struct net_device *ndev, ...@@ -2856,19 +2855,6 @@ static int fec_enet_set_coalesce(struct net_device *ndev,
return 0; return 0;
} }
static void fec_enet_itr_coal_init(struct net_device *ndev)
{
struct ethtool_coalesce ec;
ec.rx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT;
ec.rx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT;
ec.tx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT;
ec.tx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT;
fec_enet_set_coalesce(ndev, &ec, NULL, NULL);
}
static int fec_enet_get_tunable(struct net_device *netdev, static int fec_enet_get_tunable(struct net_device *netdev,
const struct ethtool_tunable *tuna, const struct ethtool_tunable *tuna,
void *data) void *data)
...@@ -3623,6 +3609,10 @@ static int fec_enet_init(struct net_device *ndev) ...@@ -3623,6 +3609,10 @@ static int fec_enet_init(struct net_device *ndev)
fep->rx_align = 0x3; fep->rx_align = 0x3;
fep->tx_align = 0x3; fep->tx_align = 0x3;
#endif #endif
fep->rx_pkts_itr = FEC_ITR_ICFT_DEFAULT;
fep->tx_pkts_itr = FEC_ITR_ICFT_DEFAULT;
fep->rx_time_itr = FEC_ITR_ICTT_DEFAULT;
fep->tx_time_itr = FEC_ITR_ICTT_DEFAULT;
/* Check mask of the streaming and coherent API */ /* Check mask of the streaming and coherent API */
ret = dma_set_mask_and_coherent(&fep->pdev->dev, DMA_BIT_MASK(32)); ret = dma_set_mask_and_coherent(&fep->pdev->dev, DMA_BIT_MASK(32));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment