kernel: bump 4.14 to 4.14.97
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.14 / 950-0292-net-mdiobus-add-unlocked-accessors.patch
1 From b2b8b06f18281c637da274b18e330bc52351637e Mon Sep 17 00:00:00 2001
2 From: Russell King <rmk+kernel@armlinux.org.uk>
3 Date: Tue, 2 Jan 2018 10:58:27 +0000
4 Subject: [PATCH 292/454] net: mdiobus: add unlocked accessors
5
6 commit 34dc08e4be208539b7c4aa8154a610e1736705e8 upstream.
7
8 Add unlocked versions of the bus accessors, which allows access to the
9 bus with all the tracing. These accessors validate that the bus mutex
10 is held, which is a basic requirement for all mii bus accesses.
11
12 Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
13 Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
14 Signed-off-by: David S. Miller <davem@davemloft.net>
15 ---
16 drivers/net/phy/mdio_bus.c | 65 +++++++++++++++++++++++++++++++-------
17 include/linux/mdio.h | 3 ++
18 2 files changed, 56 insertions(+), 12 deletions(-)
19
20 --- a/drivers/net/phy/mdio_bus.c
21 +++ b/drivers/net/phy/mdio_bus.c
22 @@ -494,6 +494,55 @@ struct phy_device *mdiobus_scan(struct m
23 EXPORT_SYMBOL(mdiobus_scan);
24
25 /**
26 + * __mdiobus_read - Unlocked version of the mdiobus_read function
27 + * @bus: the mii_bus struct
28 + * @addr: the phy address
29 + * @regnum: register number to read
30 + *
31 + * Read a MDIO bus register. Caller must hold the mdio bus lock.
32 + *
33 + * NOTE: MUST NOT be called from interrupt context.
34 + */
35 +int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)
36 +{
37 + int retval;
38 +
39 + WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
40 +
41 + retval = bus->read(bus, addr, regnum);
42 +
43 + trace_mdio_access(bus, 1, addr, regnum, retval, retval);
44 +
45 + return retval;
46 +}
47 +EXPORT_SYMBOL(__mdiobus_read);
48 +
49 +/**
50 + * __mdiobus_write - Unlocked version of the mdiobus_write function
51 + * @bus: the mii_bus struct
52 + * @addr: the phy address
53 + * @regnum: register number to write
54 + * @val: value to write to @regnum
55 + *
56 + * Write a MDIO bus register. Caller must hold the mdio bus lock.
57 + *
58 + * NOTE: MUST NOT be called from interrupt context.
59 + */
60 +int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)
61 +{
62 + int err;
63 +
64 + WARN_ON_ONCE(!mutex_is_locked(&bus->mdio_lock));
65 +
66 + err = bus->write(bus, addr, regnum, val);
67 +
68 + trace_mdio_access(bus, 0, addr, regnum, val, err);
69 +
70 + return err;
71 +}
72 +EXPORT_SYMBOL(__mdiobus_write);
73 +
74 +/**
75 * mdiobus_read_nested - Nested version of the mdiobus_read function
76 * @bus: the mii_bus struct
77 * @addr: the phy address
78 @@ -513,11 +562,9 @@ int mdiobus_read_nested(struct mii_bus *
79 BUG_ON(in_interrupt());
80
81 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
82 - retval = bus->read(bus, addr, regnum);
83 + retval = __mdiobus_read(bus, addr, regnum);
84 mutex_unlock(&bus->mdio_lock);
85
86 - trace_mdio_access(bus, 1, addr, regnum, retval, retval);
87 -
88 return retval;
89 }
90 EXPORT_SYMBOL(mdiobus_read_nested);
91 @@ -539,11 +586,9 @@ int mdiobus_read(struct mii_bus *bus, in
92 BUG_ON(in_interrupt());
93
94 mutex_lock(&bus->mdio_lock);
95 - retval = bus->read(bus, addr, regnum);
96 + retval = __mdiobus_read(bus, addr, regnum);
97 mutex_unlock(&bus->mdio_lock);
98
99 - trace_mdio_access(bus, 1, addr, regnum, retval, retval);
100 -
101 return retval;
102 }
103 EXPORT_SYMBOL(mdiobus_read);
104 @@ -569,11 +614,9 @@ int mdiobus_write_nested(struct mii_bus
105 BUG_ON(in_interrupt());
106
107 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED);
108 - err = bus->write(bus, addr, regnum, val);
109 + err = __mdiobus_write(bus, addr, regnum, val);
110 mutex_unlock(&bus->mdio_lock);
111
112 - trace_mdio_access(bus, 0, addr, regnum, val, err);
113 -
114 return err;
115 }
116 EXPORT_SYMBOL(mdiobus_write_nested);
117 @@ -596,11 +639,9 @@ int mdiobus_write(struct mii_bus *bus, i
118 BUG_ON(in_interrupt());
119
120 mutex_lock(&bus->mdio_lock);
121 - err = bus->write(bus, addr, regnum, val);
122 + err = __mdiobus_write(bus, addr, regnum, val);
123 mutex_unlock(&bus->mdio_lock);
124
125 - trace_mdio_access(bus, 0, addr, regnum, val, err);
126 -
127 return err;
128 }
129 EXPORT_SYMBOL(mdiobus_write);
130 --- a/include/linux/mdio.h
131 +++ b/include/linux/mdio.h
132 @@ -257,6 +257,9 @@ static inline u16 ethtool_adv_to_mmd_eee
133 return reg;
134 }
135
136 +int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
137 +int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
138 +
139 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
140 int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum);
141 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);