Commit graph

317 commits

Author SHA1 Message Date
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
Felix Fietkau
58e049ea80 ar71xx: ethernet: reduce tx and rx DMA ring size to improve cache footprint
256 entries is a bit excessive, even for gigabit speeds

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

SVN-Revision: 37762
2013-08-12 17:26:03 +00:00
Felix Fietkau
f43b4ea962 ar71xx: ethernet: cache skb->len in the tx function to avoid accessing it again in completion
Improves ethernet performance, especially during bridging

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

SVN-Revision: 37761
2013-08-12 17:26:00 +00:00
Felix Fietkau
53c3b2a193 ar71xx: fix typo
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37759
2013-08-12 12:41:53 +00:00
Felix Fietkau
f18fd5512e ar71xx: ethernet: skip calls to netdev_completed_queue and netif_wake_queue if no tx cleanup was done
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37758
2013-08-12 11:44:35 +00:00
Felix Fietkau
81cfb9e5ed ar71xx: ethernet: do not update the unused dev->last_rx field
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37757
2013-08-12 11:44:31 +00:00
Felix Fietkau
104ff48e25 ar71xx: add missing return statement in ethernet mtu change op
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37756
2013-08-12 11:44:28 +00:00
Felix Fietkau
7b05fe59a4 ar71xx: allow mtu > 1500 based on the configured tx/rx mtu register value
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37748
2013-08-10 15:31:38 +00:00
Felix Fietkau
64dde7d981 ar71xx: add linux 3.10
Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37214
2013-07-09 12:52:18 +00:00
Gabor Juhos
4341b11f3e ar71xx: remove __dev{init,exit} annotations from kernel files
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 35687
2013-02-19 20:52:06 +00:00
Felix Fietkau
2e7a4b088d ar71xx: allow unknown multicast frames to pass to the CPU on AR934x
SVN-Revision: 35564
2013-02-11 18:59:05 +00:00
Gabor Juhos
1dc2b6e8fa ar71xx: ag71xx: show PHY interface mode in dmesg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 34880
2012-12-25 18:45:29 +00:00
Gabor Juhos
9edcd9d3a3 ar71xx: ag71xx: fix mii_bus_dev sanity check
The mii_bus device is not required if phy_mask is zero.
The driver will use a fixed connection if it is not
specified.

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

SVN-Revision: 34849
2012-12-22 12:12:41 +00:00
Gabor Juhos
ad0f03d250 ar71xx: ag71xx: don't start/stop built-in switch w/o mii_bus_dev
Trying to do that causes a NULL pointer dereference:

CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 801d170c, ra == 801d18d4
Oops[#1]:
Cpu 0
$ 0   : 00000000 00000000 00000000 00000001
$ 4   : 00000000 802e6390 ffff8f45 00000001
$ 8   : 804b5360 ffffff80 802f93bc 00000000
$12   : 802f93e8 00000000 00000000 00000000
$16   : 8381aba0 8381aba0 00000000 00000000
$20   : 8295eff0 00000032 80000000 004101b8
$24   : 00000000 777265b0
$28   : 82936000 82937cf0 00420000 801d18d4
Hi    : 00000000
Lo    : 00000001
epc   : 801d170c ar7240sw_reset+0x1c/0x19c
    Tainted: G           O
ra    : 801d18d4 ag71xx_ar7240_start+0x28/0xc0
Status: 1100fc03    KERNEL EXL IE
Cause : 00800008
BadVA : 00000000
PrId  : 00019750 (MIPS 74Kc)
Modules linked in: ath79_wdt ohci_hcd ledtrig_usbdev ledtrig_netdev
nf_nat_irc nf_nat_ftp nf_conntrack_irc nf_conntrack_ftp
 ipt_MASQUERADE iptable_nat nf_nat pppoe xt_conntrack xt_CT xt_NOTRACK
iptable_raw xt_state nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack
ehci_hcd pppox ipt_REJECT xt_TCPMSS xt_LOG xt_comment xt_multiport
xt_mac xt_limit iptable_mangle iptable_filter ip_tables xt_tcpudp x_tab
les ppp_async ppp_generic slhc ath9k(O) ath9k_common(O) ath9k_hw(O)
ath(O) mac80211(O) usbcore usb_common nls_base crc_ccitt cfg80211(O) c
ompat(O) arc4 aes_generic crypto_blkcipher cryptomgr aead crypto_hash
crypto_algapi ledtrig_timer ledtrig_default_on leds_gpio gpio_button
_hotplug(O)
Process netifd (pid: 677, threadinfo=82936000, task=82cbe140, tls=77803750)
Stack : ffffffff 80087900 00000001 82937d74 8381aba0 8381aba0 00000000 00000000
        8295eff0 801d18d4 8295eff0 801fa4a4 00420000 80092158 00000002 8381aba0
        8381a800 00000000 00000080 801cf900 8027e720 00000000 00000000 8009223c
        8381a800 8381a82c 8027e720 00000000 00000000 7f9d14f0 00420000 801ec08c
        8381a800 801ebfb0 33000000 82937e30 00000001 8381a800 00001003 801ec348
        ...
Call Trace:
[<801d170c>] ar7240sw_reset+0x1c/0x19c
[<801d18d4>] ag71xx_ar7240_start+0x28/0xc0
[<801cf900>] ag71xx_open+0x1d0/0x258
[<801ec08c>] __dev_open+0xcc/0x130
[<801ec348>] __dev_change_flags+0xc0/0x160
[<801ec490>] dev_change_flags+0x20/0x6c
[<801ec5c8>] dev_ifsioc+0xec/0x348
[<801ecdb8>] dev_ioctl+0x594/0x67c
[<800ec00c>] do_vfs_ioctl+0x598/0x5ec
[<800ec0b0>] sys_ioctl+0x50/0x90
[<8006a3c4>] stack_done+0x20/0x40
Code: afbf0024  afb40020  afb10014 <8c910000> 00809021  24100104 24130704  8e440000  02002821

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

SVN-Revision: 34848
2012-12-22 12:12:40 +00:00
Gabor Juhos
1f7ae58a2c ar71xx: ar934x_nfc: allow to control DMA data swap via platform data
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 34588
2012-12-10 10:38:07 +00:00
Gabor Juhos
188908e885 ar71xx: make rb750_nand driver compatible with 3.7
Also add compatibility patches for the currently
supported kernels.

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

SVN-Revision: 34279
2012-11-20 16:29:43 +00:00
Gabor Juhos
8194237789 ar71xx: make ar934x_nfc driver compatible with 3.7
Also add compatibility patches for the currently
supported kernels.

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

SVN-Revision: 34278
2012-11-20 16:29:42 +00:00
Gabor Juhos
46a3b818b9 ar71xx: remove buffer verification reference from rb4xx_nand.c
It is a dead code.

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

SVN-Revision: 34276
2012-11-20 14:40:22 +00:00
Gabor Juhos
d833ca527d ar71xx: restore rb4xx kernel partition size to the original value
The new lzma compressed elf kernel image fits into
that, even on devices with large page NAND chips.

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

SVN-Revision: 34274
2012-11-20 12:17:45 +00:00
Gabor Juhos
a6549ac1cb ar71xx: remove NO_AUTOINCR flag from the NAND drivers
The flag is not present in 3.6.
Also add compatibility patches for 3.3.

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

SVN-Revision: 33971
2012-10-28 12:21:15 +00:00
Gabor Juhos
e2ec99889e ar71xx: ag71xx: fix build_skb arguments for 3.6
Also add a compatibility patch for 3.3

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

SVN-Revision: 33969
2012-10-27 17:11:06 +00:00
Gabor Juhos
269872fe1e ar71xx: use mtd_read in wrt160nl_part
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 33951
2012-10-27 07:57:58 +00:00
Gabor Juhos
973eda6077 ar71xx: use mtd_read in tplinkpart
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 33950
2012-10-27 07:57:57 +00:00
Gabor Juhos
7c85646176 ar71xx: ar934x_nfc: remove unused oob parameter of ar934x_nfc_send_read
SVN-Revision: 33454
2012-09-17 20:30:55 +00:00
Gabor Juhos
3bdf0bc36f ar71xx: ar934x_nfc: increase DMA retry count
SVN-Revision: 33453
2012-09-17 20:30:54 +00:00
Gabor Juhos
b7cb43f6a6 ar71xx: ar934x_nfc: optimize READOOB operation on large page devices
SVN-Revision: 33452
2012-09-17 20:30:53 +00:00
Gabor Juhos
96dde2e591 ar71xx: ar934x_nfc: fix RNDOUT operation
SVN-Revision: 33451
2012-09-17 20:30:51 +00:00
Gabor Juhos
338b698fb6 ar71xx: ar934x_nfc: fix READ{0,1} operation on large page devices
SVN-Revision: 33450
2012-09-17 20:30:50 +00:00
Gabor Juhos
1e5fdbeae5 ar71xx: ar934x_nfc: experimental NAND Flash Controller driver for AR934x
SVN-Revision: 33385
2012-09-13 07:26:22 +00:00
Gabor Juhos
7592057774 ar71xx: add dynamic MDIO clock calculation
SVN-Revision: 33342
2012-09-09 14:05:17 +00:00
Gabor Juhos
b8618fd3f2 ar71xx: improve MDIO busy wait code
SVN-Revision: 32586
2012-07-03 15:24:02 +00:00
Felix Fietkau
a9cd8446f3 ar71xx: do not override the mdio clock for ar9330. the override value (obtained from an atheros driver) seems to break ethernet functionality
SVN-Revision: 31956
2012-05-28 20:39:50 +00:00
Felix Fietkau
367e4b3994 ar71xx: improve rx performance of the ethernet driver by using build_skb to deliver a cache-hot skb to the network stack
SVN-Revision: 31934
2012-05-28 02:55:59 +00:00
Felix Fietkau
8039a1bbb2 ar71xx: fix MII clock settings for various chips, improves ethernet stability on AR934x
SVN-Revision: 31925
2012-05-27 21:02:41 +00:00
Felix Fietkau
a3f2fd187b ar71xx: remove AG71XX_RX_PKT_RESERVE, it is no longer necessary (found by Eric Dumazet)
SVN-Revision: 31736
2012-05-15 10:36:39 +00:00
Felix Fietkau
0ff3c396d3 kernel: rewrite the phy packet hook, put it in the network stack to avoid having to keep non-upstream ethernet driver changes
SVN-Revision: 31637
2012-05-06 21:19:14 +00:00
Gabor Juhos
3e3a4d3d6b ar71xx: allow to disable link polling on unused PHYs
SVN-Revision: 31533
2012-04-29 18:29:24 +00:00
Gabor Juhos
a447f1810c ar71xx: enable MIB counters in the built-in switch of the AR934x
SVN-Revision: 31476
2012-04-25 13:02:11 +00:00
Gabor Juhos
5348f46c80 ar71xx: add latch_change field to rb750_led_platform_data
SVN-Revision: 31023
2012-03-19 15:57:01 +00:00
Gabor Juhos
8a471efe01 ar71xx: add platform data for the RB750 NAND driver
SVN-Revision: 31022
2012-03-19 15:56:59 +00:00
Gabor Juhos
c00b53f3d0 ar71xx: move micrel PHY driver to the generic linux target
SVN-Revision: 30946
2012-03-15 09:25:53 +00:00
Gabor Juhos
ff909edf94 ar71xx: ag71xx: fix ARP frame reception on AR934x switch ports
SVN-Revision: 30926
2012-03-13 17:29:38 +00:00
Gabor Juhos
cd6a4cde13 ar71xx: ag71xx: start aneg on switch PHYs after reset
SVN-Revision: 30925
2012-03-13 17:29:37 +00:00
Gabor Juhos
7c9534cfd7 ar71xx: ag71xx: poll PHY status of all available switch ports
SVN-Revision: 30924
2012-03-13 17:29:36 +00:00