android_kernel_oneplus_msm8998/drivers/net/ethernet
David Woodhouse a9dbe40fc1 8139cp: set ring address after enabling C+ mode
This fixes (for me) a regression introduced by commit b01af457 ("8139cp:
set ring address before enabling receiver"). That commit configured the
descriptor ring addresses earlier in the initialisation sequence, in
order to avoid the possibility of triggering stray DMA before the
correct address had been set up.

Unfortunately, it seems that the hardware will scribble garbage into the
TxRingAddr registers when we enable "plus mode" Tx in the CpCmd
register. Observed on a Traverse Geos router board.

To deal with this, while not reintroducing the problem which led to the
original commit, we augment cp_start_hw() to write to the CpCmd register
*first*, then set the descriptor ring addresses, and then finally to
enable Rx and Tx in the original 8139 Cmd register. The datasheet
actually indicates that we should enable Tx/Rx in the Cmd register
*before* configuring the descriptor addresses, but that would appear to
re-introduce the problem that the offending commit b01af457 was trying
to solve. And this variant appears to work fine on real hardware.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Cc: stable@kernel.org [3.5+]
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-11-25 15:53:31 -05:00
..
3com
8390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-11-25 12:49:17 -05:00
adaptec sections: fix section conflicts in drivers/net 2012-10-06 03:04:42 +09:00
adi ptp: fixup Kconfig for two PHC drivers. 2012-11-03 15:37:35 -04:00
aeroflex
alteon
amd drivers/net/ethernet/amd/au1000_eth.c: fix error return code 2012-10-07 14:37:11 -04:00
apple
atheros sections: fix section conflicts in drivers/net 2012-10-06 03:04:42 +09:00
broadcom Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-11-25 12:49:17 -05:00
brocade
cadence net/macb: GEM DMA configuration register update 2012-11-23 14:29:51 -05:00
calxeda net: calxedaxgmac: ip align receive buffers 2012-11-07 03:51:14 -05:00
chelsio net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
cirrus
cisco net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
davicom
dec drivers/net/ethernet/dec/tulip/dmfe.c: fix error return code 2012-10-07 14:37:04 -04:00
dlink dlink: dl2k: use the module_pci_driver macro 2012-10-31 13:56:39 -04:00
emulex be2net: fix a possible events_get() race on BE2 2012-11-23 14:26:08 -05:00
faraday
freescale Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-11-10 18:32:51 -05:00
fujitsu
hp
i825xx net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
ibm ehea: Remove remnants of LRO support 2012-11-19 19:13:59 -05:00
icplus
intel igb: Do not parse past IP header on fragments beyond the first 2012-11-22 02:01:04 -08:00
marvell Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-11-10 18:32:51 -05:00
mellanox net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
micrel net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
microchip
myricom
natsemi drivers/net/ethernet/natsemi/xtsonic.c: fix error return code 2012-10-07 14:37:12 -04:00
neterion net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
nuvoton
nvidia
nxp net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
octeon Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2012-10-09 16:08:04 +09:00
oki-semi pch_gbe, ptp_pch: Fix the dependency direction between these drivers 2012-11-17 22:11:45 -05:00
packetengines
pasemi
qlogic qlcnic: fix sparse warnings 2012-11-18 02:32:16 -05:00
racal
rdc
realtek 8139cp: set ring address after enabling C+ mode 2012-11-25 15:53:31 -05:00
renesas net: sh_eth: Fix a typo - replace regist with register. 2012-11-03 15:37:35 -04:00
seeq net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
sfc net: Remove bogus dependencies on INET 2012-11-19 19:13:59 -05:00
sgi
silan
sis sis900: fix sis900_set_mode call parameters. 2012-11-18 18:28:15 -05:00
smsc net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
stmicro net: remove skb recycling 2012-10-07 00:40:54 -04:00
sun drivers/net/ethernet/sun/sungem.c: fix error return code 2012-10-07 14:37:12 -04:00
tehuti
ti net: cpsw: halt network stack before halting the device during suspend 2012-11-14 22:09:06 -05:00
tile tilegx: request_irq with a non-null device name 2012-11-16 01:40:41 -05:00
toshiba wireless: gelic: make use of WLAN_EID_VENDOR_SPECIFIC 2012-10-18 09:01:55 +02:00
tundra
via
wiznet net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
xilinx net: fix build failure in xilinx 2012-11-20 15:51:55 -05:00
xircom
xscale ixp4xx_eth: avoid calling dma_pool_create() with NULL dev 2012-11-20 15:12:44 -05:00
dnet.c net/ethernet: remove useless is_valid_ether_addr from drivers ndo_open 2012-11-19 19:01:18 -05:00
dnet.h
ethoc.c
fealnx.c sections: fix section conflicts in drivers/net 2012-10-06 03:04:42 +09:00
jme.c drivers/net: fix tasklet misuse issue 2012-11-14 21:50:10 -05:00
jme.h
Kconfig
korina.c
lantiq_etop.c
Makefile
netx-eth.c
s6gmac.c