Commit graph

96 commits

Author SHA1 Message Date
Felix Fietkau
36fb0697e2 ar71xx: fix build with ag71xx debugfs support enabled
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2018-02-28 13:57:58 +01:00
Rosen Penev
810659a22c ag71xx: Move timestamp struct member outside of struct.
With this change, the timestamp variable is only used in ag71xx_check_dma_stuck. Small tx speedup.

Based on a Qualcomm commit. ag->timestamp = jiffies was not replaced with netif_trans_update(dev) because of this quote:

It should be noted that after this series several instances
of netif_trans_update() are useless (if they occur in
.ndo_start_xmit and driver doesn't set LLTX flag -- stack already
did an update).

From: http://lists.openwall.net/netdev/2016/05/03/87

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2018-02-28 12:46:02 +01:00
Felix Fietkau
798497c66e ar71xx: use global timestamp for hang check
Shrink the size of struct ag71xx_buf to 8 bytes, which improves cache
footprint

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2018-02-05 10:16:25 +01:00
Felix Fietkau
31e6016d2e ar71xx: only access device stats in tx handler if packets were processed
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2018-02-05 10:16:25 +01:00
Felix Fietkau
890e7458b0 ar71xx: allocate rx/tx descriptor/buffers in one chunk
Reduces false sharing due to cache aliases

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2018-02-05 10:16:25 +01:00
Rosen Penev
4e03a742e0 ag71xx: Reorder ag71xx struct members for better cache performance
Qualcomm claims this improves the D-cache footprint. Origina commit message below:

From: Ben Menchaca <ben.menchaca@qca.qualcomm.com>
Date: Fri, 7 Jun 2013 10:57:28 -0500
Subject: [ag71xx] cluster/align structs for cache perf

Cluster the frequently used, per-packet structures in ag71xx near
to each other, and cacheline-align them.  Some other re-ordering
occurred to move "warmer" structures near the per-packet structures.

Signed-off-by: Ben Menchaca <ben.menchaca@qca.qualcomm.com>
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2018-02-05 10:16:25 +01:00
Gabor Juhos
8f44c8086b ar71xx: remove obsolete '< KERNEL_VERSION(4, 2, 0)' check
Because the oldest supported kernel version on the ar71xx target is 4.4,
the condition that the kernel version is smaller than 4.2.0 is always
false. Remove the obsolete check from ag71xx_main.c to clean up the code
a bit.

Signed-off-by: Gabor Juhos <juhosg@freemail.hu>
2018-01-09 21:33:18 +01:00
Vittorio Gambaletta
d40a358136
ag71xx: Fix rx ring buffer stall on small packets flood on qca956x and qca953x.
Backported from Code Aurora QSDK

Signed-off-by: Vittorio Gambaletta <openwrt@vittgam.net>
2017-12-29 15:17:07 +01:00
Rosen Penev
1c2fdfbaf2 ag71xx: Reduce NAPI weight to 32.
Qualcomm claims this reduces cache misses. Original commit message below:

From: Ben Menchaca <ben.menchaca@qca.qualcomm.com>
Date: Tue, 11 Jun 2013 12:18:46 -0500
Subject: [ag71xx] reduce NAPI weight

In an attempt to increase our cache warmth, we are decreasing NAPI.
This increases the warmth of the reused SKBs.

Signed-off-by: Ben Menchaca <ben.menchaca@qca.qualcomm.com>
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2017-12-08 19:54:37 +01:00
Rosen Penev
524d103e7e Revert "ag71xx: Switch from driver to kernel macro for NAPI_WEIGHT."
The motivation for this was misguided. It turns out tuning the NAPI weight could be useful for testing purposes. Therefore reverting.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2017-12-08 19:54:34 +01:00
Rosen Penev
e555153807 ag71xx: Switch from driver to kernel macro for NAPI_WEIGHT.
NAPI_POLL_WEIGHT was introduced in the kernel for exactly this purpose 5 years ago.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2017-11-06 16:39:41 +01:00
Felix Fietkau
3db529d5cc Revert "ar71xx: Add GRO support to ag71xx"
This reverts commit 13e5e47369.
This commit causes a severe regression in LAN->WAN routing performance
for several devices. This appears to be caused by the extra requirement
to validate the SKB checksum early in the rx path, which the ethernet
hardware does not do

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2017-10-17 16:03:11 +02:00
Hauke Mehrtens
7bbf4117c6 ar71xx: Add kernel 4.9 support
This add support for kernel 4.9 to the ar71xx target.
It was compile tested with the generic, NAND and mikrotik subtarget.
Multiple members of the community tested it on their boards and did not
report any major problem so far.

Especially the NAND part received some changes to adapt to the new
kernel APIs. The serial driver hack used for the Arduino Yun was not
ported because the kernel changed there a lot.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2017-10-11 22:32:39 +02:00
Rosen Penev
13e5e47369 ar71xx: Add GRO support to ag71xx
On a TL-WN710N, this patch increases iperf performance from ~92.5 to ~93.5 mbps. Keep in mind the WN710N is a 100mbps device. I expect greater numbers from gigabit devices.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2017-09-11 17:12:42 +02:00
Milan Krstić
4c1ce83548 ag71xx: add support for port mirroring
This exposes hardware port mirroring in ag71xx driver (e.g. TL-WR841ND) via
swconfig API.

Signed-off-by: Milan Krstić <milan.krstic@gmail.com>
2017-07-21 08:10:38 +02:00
Alexander Couzens
1025941662 ar71xx/ag71xx_ethtool: don't return uninitialized return value on success
ag71xx_ethtool_set_ringparam() will return an uninitialized value on
success.

Found-by: Coverity Scan #1330877
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2017-06-11 14:22:44 +02:00
Alexander Couzens
64cd4b48e8 ar71xx/ag71xx_mdio_probe: fix a memory leak when probe fails
Found-by: Coverity Scan #1330233
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2017-06-11 14:22:44 +02:00
Alexander Couzens
d18cb142d5 ar71xx/ag71xx_ar7240_get_port_link: fix off-by-one check on argument port
Found-by: Coverity Scan #1329901
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2017-06-11 14:22:44 +02:00
Felix Fietkau
02a9a74d17 ar71xx: fix ethernet driver fast reset issue causing tx timeouts
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-09-03 22:50:28 +02:00
Stephen Walker
900da27c91 ar71xx: add software transmit timestamp support
Add software transmit timestamp and ethtool (-T) timestamp support

Signed-off-by: Stephen Walker <stephendwalker+github@gmail.com>
2016-07-15 14:19:32 +02:00
Felix Fietkau
f9e7ffe73b ar71xx: prevent spurious ethernet resets from dma hang check false positives
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-07-02 10:30:58 +02:00
Felix Fietkau
75b2105cd3 ar71xx: rename ethernet pdata->builtin_switch to use_flow_control
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-27 12:12:40 +02:00
Felix Fietkau
3bf3512673 Revert "ar71xx: prevent spurious ethernet resets from dma hang check false positives"
This reverts commit 3d58d7f053.
2016-06-26 16:53:11 +02:00
Felix Fietkau
3d58d7f053 ar71xx: prevent spurious ethernet resets from dma hang check false positives
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-26 11:21:17 +02:00
Felix Fietkau
26b8db2537 ar71xx: enable flow control for ethernet MACs with built-in switch
Should fix LAN speed issues on some devices. This is an updated version
of the previously reverted commit with the same name.
It improves the check for MACs connected to a built-in switch

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-26 11:21:17 +02:00
Felix Fietkau
7c02ecdd35 Revert "ar71xx: enable flow control for ethernet MACs with built-in switch"
This reverts commit 1beb5bec64.

It was found to cause the WAN port to fail on some AR934x devices

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-14 10:45:10 +02:00
Felix Fietkau
1beb5bec64 ar71xx: enable flow control for ethernet MACs with built-in switch
Should fix LAN speed issues on some devices

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-13 17:58:07 +02:00
Felix Fietkau
7eeb254cc4 treewide: replace nbd@openwrt.org with nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2016-06-07 08:58:42 +02:00
Felix Fietkau
29bbc6e6be ar71xx: reset ethernet tx ring on fast reset to prevent packet loss / irq issues
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48753
2016-02-22 15:11:23 +00:00
Felix Fietkau
376e3ade79 ag71xx: fix build error with debugfs code
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48695
2016-02-11 22:48:36 +00:00
Felix Fietkau
37dd95b772 ag71xx: increase rx ring size to improve performance
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48694
2016-02-11 15:02:07 +00:00
Felix Fietkau
11ca71cfdb ag71xx: store ring size order instead of ring size to avoid div/mod
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48693
2016-02-11 15:02:00 +00:00
Felix Fietkau
033fbb7778 ag71xx: increase tx ring size to improve performance
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48692
2016-02-11 15:01:54 +00:00
Felix Fietkau
b7a2c533da ag71xx: optimize icache footprint of the receive poll function
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48691
2016-02-11 15:01:48 +00:00
Felix Fietkau
2067f7f1de ar71xx: use page fragment API in the ethernet driver
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48578
2016-01-31 12:29:34 +00:00
Felix Fietkau
5c5c60fec4 ar71xx: fix ethernet MAC reset on DMA hang
Fully reset the chip like on a full up/down, but without the PHY
statemachine restart.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48228
2016-01-13 16:22:16 +00:00
Felix Fietkau
cf2cf43717 ar71xx: extend ethernet DMA stuck check to all ar724x (and newer) chips
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48227
2016-01-13 16:22:05 +00:00
Felix Fietkau
6505dc3367 ar71xx: clean up ethernet tx queue after reset, wake queues when done - fixes hangs reported in #18922
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 47892
2015-12-14 20:22:09 +00:00
John Crispin
3b14473968 ar71xx: ag71xx remove IRQF_DISABLED
no-op since 2.6.35
removed in Kernel 4.1
see https://lwn.net/Articles/380931/

Signed-off-by: Dirk Neukirchen <dirkneukirchen@web.de>

SVN-Revision: 46280
2015-07-09 06:57:39 +00:00
Felix Fietkau
a1b8ee0307 ar71xx: return limit as number of processed frames when re-scheduling NAPI poll
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 45971
2015-06-14 17:43:59 +00:00
Felix Fietkau
8c6f1412b1 ar71xx: improve ethernet driver cache footprint by removing an unnecessary pointer
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 43588
2014-12-09 12:28:46 +00:00
John Crispin
59e7999a44 ag71xx: replace delay with sleep calls
I don't see that we're in an atomic context so there's no need to
busy-wait. Therefore replace the delay with sleep calls.
See also Documentation/timers/timers-howto.txt. It states:
"In general, use of mdelay is discouraged and code should
be refactored to allow for the use of msleep."

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

SVN-Revision: 43539
2014-12-07 16:53:09 +00:00
John Crispin
4caa8d50ad ag71xx: replace fixed PHY reset wait time in ar7240sw_setup
Replace the fixed wait time of 1s with polling for BMCR_RESET
to be cleared on all PHYs.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

SVN-Revision: 43538
2014-12-07 16:52:58 +00:00
Felix Fietkau
1961f8cdb7 ar71xx: ack completed tx descriptors only after the full frame has been completed
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42457
2014-09-10 12:56:24 +00:00
Felix Fietkau
60eeadd0ba ar71xx: re-enable descriptor splitting on ar716x after the previous bugfixes (#13072)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42429
2014-09-06 17:51:48 +00:00
Felix Fietkau
2da2317fed ar71xx: fix off-by-one error in packet descriptor splitting (patch from #13072)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42428
2014-09-06 17:51:44 +00:00
Felix Fietkau
05dd36a980 ar71xx: on ar716x, split ethernet packets in 512 byte chunks instead of 256 (improves performance) (patch from #13072)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42427
2014-09-06 17:51:39 +00:00
Felix Fietkau
926f000b99 ar71xx: disable ethernet descriptor splitting for now, as it seems to cause tx hangs in some setups
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42333
2014-08-30 09:11:41 +00:00
Felix Fietkau
2c680151e4 ar71xx: split packets into multiple descriptors on ar716x
This improves performance when doing concurrent rx/tx on a single
ethernet MAC, e.g. when routing between VLANs.

Fixes #13072

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 42328
2014-08-29 19:42:08 +00:00
Gabor Juhos
30ebad2dee ar71xx: ag71xx: increase calculated max frame length value
The r39147 commit introduces a regression: at lease on some routers
with ar8216 switch large packets get lost if 802.1q tagged port is
used on the interface connected to the aforementioned switch.

The r39147 changes code in the way so interface is set to accept
packets no longer than max ethernet frame length for a given mtu.

Unfortunately ar8216 has a feature: it sends two additional bytes
as a packet header and those this header needs to be added to the
max frame length. Otherwise long enough packets get lost.

The problem only manuifests itself if interface is used in vlan
tagged mode. If interface is untagged then ar8216's header fits
into space used by 802.1q tag and not packets are lost.

Include two additional bytes in the max frame length calculation
to fix the issue.

This patch is tested and works with Trendnet TEW-632BRP.

Signed-off-by Nikolay Martynov <mar.kolya@gmail.com>
Patchwork: http://patchwork.openwrt.org/patch/4656/
[juhosg:
  - simplify the patch to include the additional bytes of the
    switch header unconditionally,
  - change subject and update commit message]
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39219
2014-01-11 11:15:30 +00:00