summaryrefslogtreecommitdiff
path: root/target/linux/ar71xx/files/drivers
AgeCommit message (Collapse)Author
2014-01-11ar71xx: ag71xx: increase calculated max frame length valuejuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39219 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-20ar71xx: ag71xx: fix max frame length setup of the built-in switchesjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39148 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-20ar71xx: ag71xx: calculate max frame len register value from the MTUjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39147 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-20ar71xx: ag71xx: add ag71xx_max_frame_len() helperjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39146 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-20ar71xx: ag71xx: get max_frame_len and desc_pktlen_mask from platform datajuhosg
This will allow to use SoC specific values for both. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39145 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-20ar71xx: ag71xx: store descriptor packet length mask in ag71xx structjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39144 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ar71xx: implement callback in mdio resetjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39127 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ar71xx: ag71xx: compute the RX buffer size from the maximum frame sizejuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39121 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ar71xx: ag71xx: store RX buffer size in the ag71xx structjuhosg
This allows to change the value dynamically. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39120 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ar71xx: ag71xx: store maximum frame length in the ag71xx structjuhosg
This will allow to use different values for the different SoCs. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39117 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ar71xx: ag71xx: use mdio bus name in ar7240_probe messagesjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39116 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-17ag71xx: ag71xx: use device name for debugfs entryjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39115 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-12-16ar71xx: add NAND driver for the Mikrotik RB91x boardsjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39097 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-11-11ar71xx: ag71xx: fix ag71xx_probe error pathjuhosg
Signed-off-by: Catalin Patulea <cat@vv.carleton.ca> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38716 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-11-08ar71xx: ag71xx: fix a race involving netdev registrationjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38689 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-09-27ar71xx: ar934x-nfc: disable subpage write when hardware ECC is usedjuhosg
It is not supported by the controller. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38234 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-09-21ar71xx: use netgear prefix for WNDR3700 LED namesjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38098 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-09-19ar71xx: ar934x_nfc: add experimental support for hardware ECCjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38069 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-09-19ar71xx: ar934x_nfc: return error code from some low-level functionsjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38068 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-09-19ar71xx: ar934x_nfc: use devm_* functionsjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38067 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-13ar71xx: ethernet: reduce tx dma ring size further to improve cache footprintnbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37765 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: ethernet: reduce tx and rx DMA ring size to improve cache footprintnbd
256 entries is a bit excessive, even for gigabit speeds Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37762 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: ethernet: cache skb->len in the tx function to avoid accessing it ↵nbd
again in completion Improves ethernet performance, especially during bridging Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37761 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: fix typonbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37759 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: ethernet: skip calls to netdev_completed_queue and netif_wake_queue ↵nbd
if no tx cleanup was done Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37758 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: ethernet: do not update the unused dev->last_rx fieldnbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37757 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-12ar71xx: add missing return statement in ethernet mtu change opnbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37756 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-08-10ar71xx: allow mtu > 1500 based on the configured tx/rx mtu register valuenbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37748 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-07-09ar71xx: add linux 3.10nbd
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@37214 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-02-19ar71xx: remove __dev{init,exit} annotations from kernel filesjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35687 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-02-11ar71xx: allow unknown multicast frames to pass to the CPU on AR934xnbd
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35564 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-12-25ar71xx: ag71xx: show PHY interface mode in dmesgjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34880 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-12-22ar71xx: ag71xx: fix mii_bus_dev sanity checkjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34849 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-12-22ar71xx: ag71xx: don't start/stop built-in switch w/o mii_bus_devjuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34848 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-12-10ar71xx: ar934x_nfc: allow to control DMA data swap via platform datajuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34588 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-11-20ar71xx: make rb750_nand driver compatible with 3.7juhosg
Also add compatibility patches for the currently supported kernels. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34279 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-11-20ar71xx: make ar934x_nfc driver compatible with 3.7juhosg
Also add compatibility patches for the currently supported kernels. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34278 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-11-20ar71xx: remove buffer verification reference from rb4xx_nand.cjuhosg
It is a dead code. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34276 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-11-20ar71xx: restore rb4xx kernel partition size to the original valuejuhosg
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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34274 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-10-28ar71xx: remove NO_AUTOINCR flag from the NAND driversjuhosg
The flag is not present in 3.6. Also add compatibility patches for 3.3. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33971 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-10-27ar71xx: ag71xx: fix build_skb arguments for 3.6juhosg
Also add a compatibility patch for 3.3 Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33969 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-10-27ar71xx: use mtd_read in wrt160nl_partjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33951 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-10-27ar71xx: use mtd_read in tplinkpartjuhosg
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33950 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-17ar71xx: ar934x_nfc: remove unused oob parameter of ar934x_nfc_send_readjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33454 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-17ar71xx: ar934x_nfc: increase DMA retry countjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33453 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-17ar71xx: ar934x_nfc: optimize READOOB operation on large page devicesjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33452 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-17ar71xx: ar934x_nfc: fix RNDOUT operationjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33451 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-17ar71xx: ar934x_nfc: fix READ{0,1} operation on large page devicesjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33450 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-13ar71xx: ar934x_nfc: experimental NAND Flash Controller driver for AR934xjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33385 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-09-09ar71xx: add dynamic MDIO clock calculationjuhosg
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33342 3c298f89-4303-0410-b956-a3cf2f4a3e73