| From foo@baz Sat 11 Jan 2020 09:13:20 AM CET |
| From: Andrew Lunn <andrew@lunn.ch> |
| Date: Thu, 2 Jan 2020 15:33:34 +0100 |
| Subject: net: freescale: fec: Fix ethtool -d runtime PM |
| |
| From: Andrew Lunn <andrew@lunn.ch> |
| |
| [ Upstream commit c72a0bc0aa19f49160330a65ab77184b5b7d131b ] |
| |
| In order to dump the FECs registers the clocks have to be ticking, |
| otherwise a data abort occurs. Add calls to runtime PM so they are |
| enabled and later disabled. |
| |
| Fixes: e8fcfcd5684a ("net: fec: optimize the clock management to save power") |
| Reported-by: Chris Healy <Chris.Healy@zii.aero> |
| Signed-off-by: Andrew Lunn <andrew@lunn.ch> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/freescale/fec_main.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/net/ethernet/freescale/fec_main.c |
| +++ b/drivers/net/ethernet/freescale/fec_main.c |
| @@ -2199,8 +2199,14 @@ static void fec_enet_get_regs(struct net |
| { |
| struct fec_enet_private *fep = netdev_priv(ndev); |
| u32 __iomem *theregs = (u32 __iomem *)fep->hwp; |
| + struct device *dev = &fep->pdev->dev; |
| u32 *buf = (u32 *)regbuf; |
| u32 i, off; |
| + int ret; |
| + |
| + ret = pm_runtime_get_sync(dev); |
| + if (ret < 0) |
| + return; |
| |
| regs->version = fec_enet_register_version; |
| |
| @@ -2216,6 +2222,9 @@ static void fec_enet_get_regs(struct net |
| off >>= 2; |
| buf[off] = readl(&theregs[off]); |
| } |
| + |
| + pm_runtime_mark_last_busy(dev); |
| + pm_runtime_put_autosuspend(dev); |
| } |
| |
| static int fec_enet_get_ts_info(struct net_device *ndev, |