linux/drivers/net
Tim Beale db9683fb41 net: phy: Make sure PHY_RESUMING state change is always processed
If phy_start_aneg() was called while the phydev is in the PHY_RESUMING
state, then its state would immediately transition to PHY_AN (or
PHY_FORCING). This meant the phy_state_machine() never processed the
PHY_RESUMING state change, which meant interrupts weren't enabled for the
PHY. If the PHY used low-power mode (i.e. using BMCR_PDOWN), then the
physical link wouldn't get powered up again.

There seems no point for phy_start_aneg() to make the PHY_RESUMING -->
PHY_AN transition, as the state machine will do this anyway. I'm not sure
about the case where autoneg is disabled, as my patch will change
behaviour so that the PHY goes to PHY_NOLINK instead of PHY_FORCING. An
alternative solution would be to move the phy_config_interrupt() and
phy_resume() work out of the state machine and into phy_start().

The background behind this: we're running linux v3.16.7 and from user-space
we want to enable the eth port (i.e. do a SIOCSIFFLAGS ioctl with the
IFF_UP flag) and immediately afterward set the interface's speed/duplex.
Enabling the interface calls .ndo_open() then phy_start() and the PHY
transitions PHY_HALTED --> PHY_RESUMING. Setting the speed/duplex ends up
calling phy_ethtool_sset(), which calls phy_start_aneg() (meanwhile the
phy_state_machine() hasn't processed the PHY_RESUMING state change yet).

Signed-off-by: Tim Beale <tim.beale@alliedtelesis.co.nz>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-05-16 17:15:40 -04:00
..
appletalk net/appletalk: LTPC needs virt_to_bus 2015-02-20 16:28:46 -05:00
arcnet net: Kill dev_rebuild_header 2015-03-02 16:43:41 -05:00
bonding net: Fix Kernel Panic in bonding driver debugfs file: rlb_hash_table 2015-04-29 15:37:19 -04:00
caif caif: remove unused struct member 2015-04-01 12:43:09 -04:00
can net: can: xilinx_can: fix extended frame handling 2015-05-01 10:11:46 +02:00
cris
dsa net: dsa: mv88e6xxx: unregister mv88e6352 driver 2015-05-04 00:04:43 -04:00
ethernet rocker: fix a neigh entry leak issue 2015-05-15 21:20:16 -04:00
fddi
hamradio ax25: remove unneeded NULL test in ax_xmit() 2015-03-06 21:50:42 -05:00
hippi
hyperv hv_netvsc: remove unused variable in netvsc_send() 2015-05-05 17:31:09 -04:00
ieee802154 at86rf230: add slp_tr support to start tx 2015-04-30 18:48:11 +02:00
ipvlan Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-04-02 16:16:53 -04:00
irda
phy net: phy: Make sure PHY_RESUMING state change is always processed 2015-05-16 17:15:40 -04:00
plip
ppp pppoe: drop pppoe device in pppoe_unbind_sock_work 2015-05-11 12:58:22 -04:00
slip
team team: Don't segment multiple tagged packets on team device 2015-03-29 13:33:24 -07:00
usb usbnet: avoid integer overflow in start_xmit 2015-05-09 16:46:18 -04:00
vmxnet3 vmxnet3: spelling fixes 2015-04-01 22:52:29 -04:00
wan cosa: fix error return code 2015-04-07 15:21:55 -04:00
wimax
wireless ath9k: fix per-packet tx power configuration 2015-05-03 23:54:38 +03:00
xen-netback xen: features and fixes for 4.1-rc0 2015-04-16 14:01:03 -05:00
Kconfig ipvlan: Fix text that talks about ip util support 2015-02-20 16:35:44 -05:00
LICENSE.SRC
Makefile
Space.c
dummy.c
eql.c
ifb.c act_mirred: Fix bogus header when redirecting from VLAN 2015-04-17 13:29:28 -04:00
loopback.c
macvlan.c macvlan: Propagate promiscuity setting to lower devices. 2015-05-04 00:14:13 -04:00
macvtap.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-04-17 16:31:08 -04:00
mdio.c
mii.c
netconsole.c netconsole: Use eth_<foo>_addr instead of memset 2015-03-03 17:01:37 -05:00
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c PNP: net/sb1000: Use module_pnp_driver to register driver 2015-03-18 22:39:17 +01:00
sungem_phy.c
tun.c make new_sync_{read,write}() static 2015-04-11 22:29:40 -04:00
veth.c veth: set iflink to the peer veth 2015-04-02 14:05:01 -04:00
virtio_net.c virtio: document queue state logic 2015-04-06 16:44:24 -04:00
vxlan.c vxlan: remove the unnecessary codes 2015-04-22 18:45:49 -04:00
xen-netfront.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-04-17 16:31:08 -04:00