aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/701-net-0353-staging-fsl-dpaa2-mac-do-not-stop-MAC-when-the-net_d.patch
blob: 80bb697edf316f6e2e8f03c6059e56e43cff76ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
From aae18d4ce3055e459855cc8661cf8f2a5e2cbe73 Mon Sep 17 00:00:00 2001
From: Ioana Ciornei <ioana.ciornei@nxp.com>
Date: Fri, 13 Dec 2019 13:24:01 +0200
Subject: [PATCH] staging: fsl-dpaa2/mac: do not stop MAC when the net_dev is
 not up

In case the net_device is not up, there is no need to call
dpmac_mac_stop(). Guard the call by checking the IFF_UP flag.
This patch will also solve the following warning generated by removing a
dpmac that is not up.

[   40.942937] called from state READY
[   40.946442] WARNING: CPU: 0 PID: 755 at drivers/net/phy/phy.c:838
phy_stop+0x6c/0x78
[   40.954171] Modules linked in:
[   40.957214] CPU: 0 PID: 755 Comm: bash Tainted: G        W
5.4.0-03629-gfd7102c32b2c-dirty #911
[   40.966592] Hardware name: NXP Layerscape LX2160ARDB (DT)
[   40.971978] pstate: 40000005 (nZcv daif -PAN -UAO)
[   40.976756] pc : phy_stop+0x6c/0x78
[   40.980232] lr : phy_stop+0x6c/0x78
(..)
[   41.066487] Call trace:
[   41.068922]  phy_stop+0x6c/0x78
[   41.072052]  dpaa2_mac_stop.part.4+0x34/0x5c
[   41.076309]  dpaa2_mac_remove+0x9c/0xa8

Also, remove the IFF_UP flag from the mac netdev since the PHY is not
anymore started at probe time but is rather started/stopped on ifconfig
up/down.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/staging/fsl-dpaa2/mac/mac.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

--- a/drivers/staging/fsl-dpaa2/mac/mac.c
+++ b/drivers/staging/fsl-dpaa2/mac/mac.c
@@ -1,5 +1,5 @@
 /* Copyright 2015 Freescale Semiconductor Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -664,9 +664,6 @@ static int dpaa2_mac_probe(struct fsl_mc
 	netdev->netdev_ops = &dpaa2_mac_ndo_ops;
 	netdev->ethtool_ops = &dpaa2_mac_ethtool_ops;
 
-	/* phy starts up enabled so netdev should be up too */
-	netdev->flags |= IFF_UP;
-
 	err = register_netdev(priv->netdev);
 	if (err < 0) {
 		dev_err(dev, "register_netdev error %d\n", err);
@@ -775,7 +772,8 @@ static int dpaa2_mac_remove(struct fsl_m
 	struct dpaa2_mac_priv	*priv = dev_get_drvdata(dev);
 	struct net_device	*netdev = priv->netdev;
 
-	dpaa2_mac_stop(netdev);
+	if (netdev->flags & IFF_UP)
+		dpaa2_mac_stop(netdev);
 
 	if (phy_is_pseudo_fixed_link(netdev->phydev))
 		fixed_phy_unregister(netdev->phydev);