Commit Graph

360 Commits

Author SHA1 Message Date
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
e5b5cce442 ar71xx: fix a few include errors
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48562
2016-01-30 13:19:37 +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
1dada3fc3c ar71xx: add LED driver NU801
The MR18 uses a 3-channel 16-bit PWM Constant Current Driver
for its status LED.

Signed-off-by: Chris R Blake <chrisrblake93@gmail.com>

SVN-Revision: 47848
2015-12-11 15:04:57 +00:00
John Crispin
a2b38ebf77 ar71xx: add 64kb bootloader mtd parser for tplinkpart
Signed-off-by: Weijie Gao <hackpascal@gmail.com>

This patch adds flash layout parser for TP-Link firmwares which have a 64kb
bootloader.

This is used for TP-Link TL-WDR6500 v2.

SVN-Revision: 46662
2015-08-17 06:23:49 +00:00
Felix Fietkau
38dbf49b61 ar71xx: remove the use of the obsolete IRQF_DISABLED flag in the NAND flash driver (fixes #20125)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 46433
2015-07-20 06:01:18 +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
a5cd02aec4 ar71xx: ar934x-nfc: allow ECC to be configured in software BCH mode
Some devices ship with NAND images that use BCH ECC. Let the driver know
about that ECC mode so that it can be selected by machine files.

Signed-off-by: Thomas Hebb <tommyhebb@gmail.com>

SVN-Revision: 46022
2015-06-18 06:37:01 +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
John Crispin
69955cf733 ar71xx: generalize cybertan partition parser
By removing the NL16 signature check, the parser can be
utilized by other devices like the WD My Net Wi-fi Range
Extender.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>

SVN-Revision: 44664
2015-03-11 15:56:27 +00:00
John Crispin
e5373f2761 ar71xx: rename wrt160nl's trx partition parser
This patch renames the partition parser from
wrt160nl to more generic cybertan.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>

SVN-Revision: 44663
2015-03-11 15:56:15 +00:00
John Crispin
daf2140192 ar71xx: fix gpio-latch driver
gpio api has changed. the remove call no longer returns a value.

Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 44650
2015-03-10 20:19:54 +00:00
John Crispin
4e5c2b6f46 ar71xx: fix mv88e6063 compile for 3.14
Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 44459
2015-02-15 21:15:42 +00:00
John Crispin
7e4b3de249 ar71xx: add v3.18 support
Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 44456
2015-02-15 19:45:29 +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
Hauke Mehrtens
f5e5477c81 kernel: modify mtd related patches for 3.14
The change is the same as ("kernel/generic: modify mtd related
patches"). Since these files are under files directory, not a files
directory of specific kernel version, better to also change them. So
it will avoid adding files to future specific files directory
(e.g. files-3.14) for this mtd related change.

Signed-off-by: Zhao, Gang <gamerh2o@gmail.com>

SVN-Revision: 40732
2014-05-08 21:52:04 +00:00
Gabor Juhos
3d906ac6ac ar71xx: rb91x-nand: rewrite to use GPIO API
Rewrite tha rb91x-nand driver to use GPIO API to
modify the NAND control lines.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39700
2014-02-23 07:19:32 +00:00
Gabor Juhos
ab08c40487 ar71xx: add a generic GPIO latch driver
It will be used for the Mikrotik boards.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39697
2014-02-22 18:05:29 +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
Gabor Juhos
2b220f3550 ar71xx: ag71xx: fix max frame length setup of the built-in switches
The currently used bitmask of the maximum frame length field
is wrong for both models. On AR724x/AR933x the largest frame
size is 2047 bytes, on the AR934x it is 16383 bytes.

Make the MTU setup code model specific, and use the correct
bitmask for both models. Also change the value to the maximum.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39148
2013-12-20 11:41:22 +00:00
Gabor Juhos
35d601f974 ar71xx: ag71xx: calculate max frame len register value from the MTU
Set the MAX_FRAME_LEN register to zero in ag71xx_hw_init()
and write the correct value into that from the ag71xx_open()
and ag71xx_fast_reset() functions.

Also recalculate the RX buffer size based on the actual
maximum frame length value to optimize memory allocation.
Additionaly, disallow to change the MTU value while the
interface it running.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39147
2013-12-20 11:41:20 +00:00
Gabor Juhos
9e7d77de2d ar71xx: ag71xx: add ag71xx_max_frame_len() helper
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39146
2013-12-20 11:41:18 +00:00
Gabor Juhos
2c4e3cf33a ar71xx: ag71xx: get max_frame_len and desc_pktlen_mask from platform data
This will allow to use SoC specific values for both.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39145
2013-12-20 11:41:17 +00:00
Gabor Juhos
9be1e508f9 ar71xx: ag71xx: store descriptor packet length mask in ag71xx struct
The currently used bitmask is not correct for all SoCs.
Introduce a new field in struct ag71xx and store the
bitmask in that. Use the current value for now, it will
be adjusted for each SoCs in further patches.

Aslo use the new field directly in the ag71xx_rx_packets
and ag71xx_hard_start_xmit() functions and remove the
ag71xx_desc_pktlen() helper.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39144
2013-12-20 11:41:16 +00:00
Gabor Juhos
8b712436f3 ar71xx: implement callback in mdio reset
This enables us to add fixups to the board specific code for boards that
require special treatment of PHYs on mdio bus reset.

Signed-off-by: Felix Kaechele <heffer@fedoraproject.org>
http://patchwork.openwrt.org/patch/4614/
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39127
2013-12-17 22:14:10 +00:00
Gabor Juhos
31de995025 ar71xx: ag71xx: compute the RX buffer size from the maximum frame size
Currently, the AG71XX_RX_PKT_SIZE value limits the received
frame size to 1514/1516 bytes with/without a VLAN header
respectively. However the hardware limit is controlled by
the value the AG71XX_REG_MAC_MFL register which contains
the value of the max_frame_len field.

Compute the RX buffer size from the max_frame_len field
to get rid of the 1514/1516 byte limitation. Also remove
the unused AG71XX_RX_PKT_SIZE definition.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39121
2013-12-17 16:27:46 +00:00
Gabor Juhos
b35e0da0f4 ar71xx: ag71xx: store RX buffer size in the ag71xx struct
This allows to change the value dynamically.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39120
2013-12-17 16:27:44 +00:00
Gabor Juhos
6072e777e9 ar71xx: ag71xx: store maximum frame length in the ag71xx struct
This will allow to use different values for the
different SoCs.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39117
2013-12-17 15:18:16 +00:00
Gabor Juhos
ea89cc9250 ar71xx: ag71xx: use mdio bus name in ar7240_probe messages
The ar7240_probe function uses the network device name
in the kernel log messages, however the name is not yet
initialized when the ar7240_probe function is called.
Use the mdio bus name in the messages to avoid ugly
log lines like the following one:

  eth%d: Found an AR7240/AR9330 built-in switch

Reported-by: Ronald Wahl <ronald.wahl@raritan.com>
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39116
2013-12-17 15:12:52 +00:00
Gabor Juhos
0d7a6748e1 ag71xx: ag71xx: use device name for debugfs entry
The ag71xx debugfs code uses the network device name
for the device specific debugfs directory. Since r38689
'ar71xx: ag71xx: fix a race involving netdev registration'
the debugfs initialization happens before the ethernet
device gets registered and the network device name contains
'eth%d' at this point. If the board setup code registers
multiple ag71xx devices, the debugfs code tries to create
the device specific dir with the same name which causes
an error like this:

  eth0: Atheros AG71xx at 0xba000000, irq 5, mode:GMII
  ag71xx ag71xx.0: connected to PHY at ag71xx-mdio.1:04 [uid=004dd041, driver=Generic PHY]
  ag71xx: probe of ag71xx.0 failed with error -12

Use the device name for the debugfs directory to avoid the
collisions. Also add an error message and change the return
code if the debugfs_create_dir call fails.

Reported-by: Ronald Wahl <ronald.wahl@raritan.com>
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39115
2013-12-17 15:12:50 +00:00
Gabor Juhos
8461ffccc1 ar71xx: add NAND driver for the Mikrotik RB91x boards
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 39097
2013-12-16 12:57:24 +00:00
Gabor Juhos
ec09569b17 ar71xx: ag71xx: fix ag71xx_probe error path
Signed-off-by: Catalin Patulea <cat@vv.carleton.ca>
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38716
2013-11-11 07:47:00 +00:00
Gabor Juhos
7bd3a7bc7b ar71xx: ag71xx: fix a race involving netdev registration
In particular, phy_connect before register_netdev. This is because
register_netdev runs the netdev notifiers, which can race with the rest of
the initialization in ag71xx_probe. In my case this manifested in two ways:

1) If ag71xx is compiled as a module and inserted after netifd has started,
   netifd is notified by register_netdev before the call to
   ag71xx_phy_connect. netifd tries to bring the interface up, which calls
   ag71xx_open, which in turn enters ag71xx_phy_start. This keys off
   ag->phy_dev (which is still NULL) and thinks this is a fixed-link board,
   and enters ag71xx_link_adjust. This looks at ag->speed which is not yet
   initialized and hits the BUG() in the switch (ag->speed) in
   ag71xx_link_adjust.

   This is the wrong code path for ag71xx_phy_start - my board has PHYs that
   need to be brought up with phy_start. Doing ag71xx_phy_connect before
   register_netdev ensures that ag->phy_dev is non-NULL before
   ag71xx_phy_start is ever called.

2) When ag71xx is built into the kernel, and netconsole is enabled, there
   is a gap in the initial burst of replayed printks right after the netdev
   comes up. My assumption is that netconsole is also triggered by a netdev
   notifier, and part of this printk burst happens before the call into
   ag71xx_phy_connect, so part of the burst is lost while the PHY comes up.
   This patch fixes the gap - all the printks before eth0 comes up are bursted
   in full when netconsole initializes.

ag71xx_phy_connect_xxx no longer runs with a registered netdev, so the
logging has been adjusted accordingly to avoid "unregistered net_device" or
"eth%d" messages in dmesg.

Signed-off-by: Catalin Patulea <cat@vv.carleton.ca>
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38689
2013-11-08 08:17:54 +00:00
Gabor Juhos
7815af409a ar71xx: ar934x-nfc: disable subpage write when hardware ECC is used
It is not supported by the controller.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38234
2013-09-27 11:15:34 +00:00
Gabor Juhos
e33ccdc295 ar71xx: use netgear prefix for WNDR3700 LED names
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38098
2013-09-21 15:55:50 +00:00
Gabor Juhos
d6fef0cb39 ar71xx: ar934x_nfc: add experimental support for hardware ECC
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38069
2013-09-19 18:43:41 +00:00
Gabor Juhos
ceecdfb1c9 ar71xx: ar934x_nfc: return error code from some low-level functions
Change some flow-level unctions to return with an
error code in order to be able to report errors
to the core code.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38068
2013-09-19 18:43:40 +00:00
Gabor Juhos
df8485c7cb ar71xx: ar934x_nfc: use devm_* functions
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 38067
2013-09-19 18:43:38 +00:00
Felix Fietkau
bbd4d4c8b8 ar71xx: ethernet: reduce tx dma ring size further to improve cache footprint
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37765
2013-08-13 10:35:10 +00:00