diff options
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 8ea770a89f2..72cd190b9c1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -781,10 +781,15 @@ static void stmmac_mmc_setup(struct stmmac_priv *priv)  	unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |  			    MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET; -	/* Do not manage MMC IRQ (FIXME) */ +	/* Mask MMC irq, counters are managed in SW and registers +	 * are cleared on each READ eventually. */  	dwmac_mmc_intr_all_mask(priv->ioaddr); -	dwmac_mmc_ctrl(priv->ioaddr, mode); -	memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); + +	if (priv->dma_cap.rmon) { +		dwmac_mmc_ctrl(priv->ioaddr, mode); +		memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); +	} else +		pr_info(" No MAC Management Counters available");  }  static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv) @@ -1012,8 +1017,7 @@ static int stmmac_open(struct net_device *dev)  	memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats));  	priv->xstats.threshold = tc; -	if (priv->dma_cap.rmon) -		stmmac_mmc_setup(priv); +	stmmac_mmc_setup(priv);  	/* Start the ball rolling... */  	DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name);  |