From: Niklas Cassel <niklas.cas...@axis.com> Date: Tue, 14 Nov 2017 11:15:54 +0100
> The LPI transitioning logic in stmmac_main uses > priv->tx_path_in_lpi_mode to enter/exit LPI. > > However, priv->tx_path_in_lpi_mode is assigned > using the return value from host_irq_status(). > > So for dwmac4, priv->tx_path_in_lpi_mode was always false, > so stmmac_tx_clean() would always try to put us in eee mode, > and stmmac_xmit() would never take us out of eee mode. > > To fix this, make host_irq_status() read and return the LPI > irq status also for dwmac4. > > This also increments the existing LPI counters, so that > ethtool --statistics shows LPI transitions also for dwmac4. > > For dwmac1000, irqs are enabled/disabled using the register > named "Interrupt Mask Register", and thus setting a bit disables > that specific irq. > > For dwmac4 the matching register is named "MAC_Interrupt_Enable", > and thus setting a bit enables that specific irq. > > Looking at dwmac1000_core.c, the irqs that are always enabled are: > LPI and PMT. > > Looking at dwmac4_core.c, the irqs that are always enabled are: > PMT. > > To be able to read the LPI irq status, we need to enable the LPI > irq also for dwmac4. > > Signed-off-by: Niklas Cassel <niklas.cas...@axis.com> Applied.