Commit graph

172 commits

Author SHA1 Message Date
Jonas Gorski
c674c874b7 ag71xx: close a race between the phy state machine and link state
A fast stop/start cycle could leave the ag71xx interrupts and tx engine
disabled when using a phy driver with a fixed link and the start/stop
happens between two phy state machine polls.

Prevent this by always forcing the link down on stop regardless of phy
state and having a phy connected.

SVN-Revision: 28380
2011-10-08 11:37:14 +00:00
Felix Fietkau
1bdf65f580 ar71xx: fix register range check for DMA stuck checks (thx, Frédéric Moulins)
SVN-Revision: 28213
2011-09-11 17:44:12 +00:00
Felix Fietkau
12c84f8eeb ar71xx: add some code to detect DMA stuck conditions on ar7240
SVN-Revision: 27975
2011-08-13 22:30:14 +00:00
Felix Fietkau
85ccc74e1b ar71xx: on ar724x only reset the link status in the restart handler, the fast reset takes care of DMA stuck issues
SVN-Revision: 27973
2011-08-13 21:49:46 +00:00
Felix Fietkau
4b75394056 ar71xx: fix ethernet FIFO state corruption on ar7240
When starting/stopping DMA sometimes the FIFO state gets corrupted,
leading to wildly fluctuating latencies or packet data corruption.
Fix this by issuing a fast MAC reset as soon as the link is detected
as up. Fixes #9689, #9405

SVN-Revision: 27896
2011-08-04 17:36:31 +00:00
Felix Fietkau
d2aeca6b6d ag71xx: fix memory corruption issues on ar7240 on ethernet start/stop
When the DMA engine state gets corrupted due to a hardware issues, it
often won't stop rx until a full reset is issued. In that case the hardware
must keep a valid descriptor, otherwise it will write to random places in
system RAM, triggering random crashes. To fix this, keep a dummy descriptor
without a buffer that keeps the DMA engine in a sane state until the reset
is done

SVN-Revision: 27895
2011-08-04 17:36:27 +00:00
Felix Fietkau
500c3a1475 ar71xx: fix MAC/MDIO reset mask handling
SVN-Revision: 27894
2011-08-04 17:36:23 +00:00
Felix Fietkau
c7173a211d ar71xx: reinitialize global switch settings after reset on ar7240
SVN-Revision: 27705
2011-07-20 14:39:47 +00:00
Felix Fietkau
ca473833c4 ar71xx: configure address aging on ar7240
SVN-Revision: 27704
2011-07-20 14:39:42 +00:00
Felix Fietkau
fefc79f3cb ar71xx: reset the phy in the ethernet init on ar724x
SVN-Revision: 27703
2011-07-20 12:04:34 +00:00
Felix Fietkau
005fe5d1fd ar71xx: make sure that rx and interrupts are disabled before issuing the hardware reset
SVN-Revision: 27702
2011-07-20 12:04:29 +00:00
Felix Fietkau
e7ab000008 ar71xx: increase the delay after the ethernet MAC reset
SVN-Revision: 27701
2011-07-20 12:04:25 +00:00
Felix Fietkau
255dcaa3a6 ar71xx: fix an unused variable warning
SVN-Revision: 27700
2011-07-20 12:04:20 +00:00
Felix Fietkau
f3d693c0ee ar71xx: do not reset the hardware on transmit timeout - this would mess up the up the PHY state
SVN-Revision: 27568
2011-07-09 06:30:13 +00:00
Felix Fietkau
2806c75c07 ag71xx: keep the rx engine stopped while the link is not up, should hopefully fix stability issues from #9405
SVN-Revision: 27567
2011-07-09 06:29:46 +00:00
Felix Fietkau
31dd60689e Revert "ar71xx: only enable the rx engine after the link is up..."
It messes up the DMA state when the link goes down

SVN-Revision: 27088
2011-06-01 18:15:43 +00:00
Gabor Juhos
60d5abbc27 ar71xx: ag71xx: make ring sizes configurable via ethtool
SVN-Revision: 27041
2011-05-31 22:53:10 +00:00
Gabor Juhos
7a2651f633 ar71xx: ag71xx: prepare to make ring sizes configurable
SVN-Revision: 27040
2011-05-31 22:53:09 +00:00
Gabor Juhos
669aba3871 ar71xx: ag71xx: nuke unused AG71XX_TX_FIFO_LEN define
Reported-by: Dave Täht <dave.taht@gmail.com>

SVN-Revision: 27039
2011-05-31 22:53:07 +00:00
Felix Fietkau
2b5402d128 ar71xx: only enable the rx engine after the link is up, fixes a race condition that got rx stuck when the interface is brought up during lots of inbound traffic (thx, matteo)
SVN-Revision: 27035
2011-05-30 23:08:01 +00:00
Felix Fietkau
0ebc93831f ar71xx: disable flow control for ar724x, it can get stuck in a loop of continously sending MAC pause frames
SVN-Revision: 27034
2011-05-30 23:07:57 +00:00
Matteo Croce
4deecea26b ar71xx: detect link on LAN ports
SVN-Revision: 26922
2011-05-17 11:12:56 +00:00
Matteo Croce
c0c2e18452 use correct macros and frame size in ag71xx
SVN-Revision: 26890
2011-05-14 23:10:06 +00:00
Gabor Juhos
5d77f370d6 ar71xx: ag71xx: make switch register access atomic
Reading of the PHY registers occasionally returns with bogus values
under heavy load. This misleads the PHY driver and thus causes false
link/speed change notifications which leads to performance loss.

This is easily noticable during an iperf session:

...
[  3] 52.0-53.0 sec  11.3 MBytes  94.4 Mbits/sec
[  3] 53.0-54.0 sec  11.4 MBytes  95.4 Mbits/sec
eth1: link down
br-lan: port 2(eth1) entering forwarding state
eth1: link up (100Mbps/Full duplex)
br-lan: port 2(eth1) entering forwarding state
br-lan: port 2(eth1) entering forwarding state
[  3] 54.0-55.0 sec  6.75 MBytes  56.6 Mbits/sec
[  3] 55.0-56.0 sec  0.00 Bytes  0.00 bits/sec
[  3] 56.0-57.0 sec  10.5 MBytes  88.1 Mbits/sec
...
[  3] 169.0-170.0 sec  11.4 MBytes  95.4 Mbits/sec
[  3] 170.0-171.0 sec  11.4 MBytes  95.4 Mbits/sec
eth1: link up (10Mbps/Half duplex)
[  3] 171.0-172.0 sec  7.63 MBytes  64.0 Mbits/sec
[  3] 172.0-173.0 sec  9.38 MBytes  78.6 Mbits/sec
eth1: link up (100Mbps/Full duplex)
[  3] 173.0-174.0 sec  11.3 MBytes  94.4 Mbits/sec
[  3] 174.0-175.0 sec  11.4 MBytes  95.4 Mbits/sec

SVN-Revision: 26856
2011-05-08 16:32:53 +00:00
Gabor Juhos
3711658281 ar71xx: ag71xx: fix section mismatch warnings
The function __devinit ag71xx_probe() references
a function __devexit ag71xx_phy_disconnect().
This is often seen when error handling in the init function
uses functionality in the exit path.
The fix is often to remove the __devexit annotation of
ag71xx_phy_disconnect() so it may be used outside an exit section.

The function ag71xx_phy_disconnect() references a function in an exit
section.
Often the function ag71xx_ar7240_cleanup() has valid usage outside the
exit section
and the fix is to remove the __devexit annotation of
ag71xx_ar7240_cleanup.

SVN-Revision: 26855
2011-05-08 13:30:36 +00:00
Gabor Juhos
ef53029870 ar71xx: ag71xx: fix build error if debugfs is enabled
SVN-Revision: 26854
2011-05-08 13:30:26 +00:00
Gabor Juhos
8b67d748cb ar71xx: ag71xx: add debugfs entry for [rt]x_ring
SVN-Revision: 26845
2011-05-07 12:40:34 +00:00
Gabor Juhos
2166432ba0 ar71xx: ag71xx: add timestamps to ag71xx_buf
SVN-Revision: 26844
2011-05-07 12:40:28 +00:00
Gabor Juhos
896e1d1ab4 ar71xx: ag71xx: use dynamically allocated buffer for napi_stats
SVN-Revision: 26843
2011-05-07 12:40:26 +00:00
Gabor Juhos
a6708d20d1 ar71xx: ag71xx: use debugfs_remove_recursive
SVN-Revision: 26842
2011-05-07 12:40:25 +00:00
Felix Fietkau
41ee4a283c ar71xx: only allow internal access to the ar7240 switch, export the MDIO bus behind the switch instead
SVN-Revision: 26393
2011-04-02 00:47:29 +00:00
Felix Fietkau
acbb3e50e7 ar71xx: frequent ethernet mac resets upset the MDIO bus on ar7240, so do not run them on every device open, only on tx timeouts
SVN-Revision: 26392
2011-04-02 00:47:25 +00:00
Gabor Juhos
3106aea40b ar71xx: drivers/ag71xx: remove deprecated usage of IRQF_SAMPLE_RANDOM
Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23982
2010-11-12 18:52:28 +00:00
Gabor Juhos
30ef7d55fc ar71xx: use pr_* functions in drivers
Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23981
2010-11-12 18:52:12 +00:00
Gabor Juhos
f4d5c885e4 ar71xx: return statements does not need parenthesis
Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23979
2010-11-12 18:51:38 +00:00
Gabor Juhos
e244e1c7cd ar71xx: fix inline attribute location
Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23978
2010-11-12 18:51:21 +00:00
Gabor Juhos
acd8ad4de5 ar71xx: wrap long lines
(build errors has been fixed - juhosg)

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23977
2010-11-12 18:51:04 +00:00
Gabor Juhos
500fac1735 ar71xx: fix whitespaces nits
(build error has been fixed - juhosg)

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

SVN-Revision: 23975
2010-11-12 18:50:29 +00:00
Felix Fietkau
6656450c6d ar71xx: fix more section mismatches
SVN-Revision: 23575
2010-10-21 18:42:16 +00:00
Felix Fietkau
8858d90afe ar71xx: improve 2.6.36 compatibility. also, instead of adding a forward port patch to the 2.6.36 patches, add a backport patch to 2.6.32
SVN-Revision: 23574
2010-10-21 18:42:11 +00:00
Felix Fietkau
523fcf0497 ar71xx: add a new driver for the ar7240 switch using swconfig. hooks directly into the ethernet driver, as MAC resets also require switch reinitializations and the switch is part of the cpu core anyway switch only tl-wr741nd (and other devices using this board file, such as tl-wr841nd) over to using this by default, as other devices are still untested fixes #7563
SVN-Revision: 22675
2010-08-16 19:21:57 +00:00
Felix Fietkau
a27ea45e76 ar71xx: only reinit the ethernet MAC at .open() on ar724x for now, until we've figured out what part of it causes the issue described in #7563
SVN-Revision: 22075
2010-07-06 12:40:07 +00:00
Felix Fietkau
15b209d09f ag71xx: reset the hardware during open(), this improves recovery from tx timeouts on ar724x considerably
SVN-Revision: 22055
2010-07-04 02:15:08 +00:00
Felix Fietkau
89da22d1ea ag71xx: fix a memory corruption bug that happens if you flood the interface with packets while it's being brought down fixes boot time crashes under load reported by matteo
SVN-Revision: 22054
2010-07-04 01:31:33 +00:00
Felix Fietkau
7966004d99 ag71xx: remove rx alignment code for small packets, it seems to break ipv6 for some reason (fixes #7236)
SVN-Revision: 21166
2010-04-26 16:39:13 +00:00
Felix Fietkau
1c0e751391 ar71xx: fix up alignment handling
- on ar724x, rx buffers can be aligned with an offset of 2, which keeps the ip header aligned
- alignment offset is only added if the ar8216 workaround is not active and the phy driver does not advertise its own packet alignment
- ar71xx and ar91xx can not handle rx alignment offsets, however taking a hit on unaligned exceptions seems to have less overhead than re-aligning the data for large packets
- use memmove to re-align small packets, if necessary

tested on ar9132, ar7240 and ar7242 based devices without ar8216 headers

SVN-Revision: 20892
2010-04-15 23:31:17 +00:00
Gabor Juhos
4c29a2c263 ar71xx: ag71xx: avoid unalinged accesses when using the phy specific receive functions
Cc: backfire@openwrt.org

SVN-Revision: 20751
2010-04-09 08:40:06 +00:00
Gabor Juhos
4a28844d80 ar71xx: ag71xx: call the phy driver's netif_receive_skb()
Ag71xx needs to call the phy's netif_receive_skb() to allow phy drivers
to mangle rx packets. This patch fixes it.

This fixes the header mangling of the AR8216 driver.

Signed-off-by: Jonas Gorski <jonas.gorski+openwrt@gmail.com>
Cc:backfire@openwrt.org

SVN-Revision: 20750
2010-04-09 08:38:46 +00:00
Gabor Juhos
c874513cfa ar71xx: fix broken LAN ports on the boards with AR8216 switch (closes #7024)
* cc: backfire@openwrt.org

SVN-Revision: 20673
2010-04-03 13:59:08 +00:00
Gabor Juhos
b7ca043240 ar71xx: ag71xx: copy received packet to avoid unaligned access in the IP stack
SVN-Revision: 20506
2010-03-27 13:05:27 +00:00