linux/drivers/net
Russell King 8c945f5aac net: smc91x: fix SMC accesses
[ Upstream commit 2fb04fdf30 ]

Commit b70661c708 ("net: smc91x: use run-time configuration on all ARM
machines") broke some ARM platforms through several mistakes.  Firstly,
the access size must correspond to the following rule:

(a) at least one of 16-bit or 8-bit access size must be supported
(b) 32-bit accesses are optional, and may be enabled in addition to
    the above.

Secondly, it provides no emulation of 16-bit accesses, instead blindly
making 16-bit accesses even when the platform specifies that only 8-bit
is supported.

Reorganise smc91x.h so we can make use of the existing 16-bit access
emulation already provided - if 16-bit accesses are supported, use
16-bit accesses directly, otherwise if 8-bit accesses are supported,
use the provided 16-bit access emulation.  If neither, BUG().  This
exactly reflects the driver behaviour prior to the commit being fixed.

Since the conversion incorrectly cut down the available access sizes on
several platforms, we also need to go through every platform and fix up
the overly-restrictive access size: Arnd assumed that if a platform can
perform 32-bit, 16-bit and 8-bit accesses, then only a 32-bit access
size needed to be specified - not so, all available access sizes must
be specified.

This likely fixes some performance regressions in doing this: if a
platform does not support 8-bit accesses, 8-bit accesses have been
emulated by performing a 16-bit read-modify-write access.

Tested on the Intel Assabet/Neponset platform, which supports only 8-bit
accesses, which was broken by the original commit.

Fixes: b70661c708 ("net: smc91x: use run-time configuration on all ARM machines")
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Tested-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-09-30 10:18:37 +02:00
..
appletalk
arcnet arcnet/com20020: add LEDS_CLASS dependency 2015-11-03 11:29:56 -05:00
bonding bonding: Fix bonding crash 2016-09-30 10:18:36 +02:00
caif net: caif: check return value of alloc_netdev 2015-11-09 11:31:13 -05:00
can can: fix oops caused by wrong rtnl dellink usage 2016-08-10 11:49:29 +02:00
cris
dsa net: dsa: bcm_sf2: Fix race condition while unmasking interrupts 2016-09-30 10:18:36 +02:00
ethernet net: smc91x: fix SMC accesses 2016-09-30 10:18:37 +02:00
fddi
fjes fjes: fix inconsistent indenting 2015-11-15 17:09:23 -05:00
hamradio mkiss: fix scribble on freed memory 2016-01-06 15:06:27 -05:00
hippi
hyperv
ieee802154 spi: Updates for v4.4 2015-11-05 13:15:12 -08:00
ipvlan ipvlan: fix use after free of skb 2015-11-17 14:39:29 -05:00
irda net: irda: Fix use-after-free in irtty_open() 2016-04-12 09:08:49 -07:00
phy Revert "phy: IRQ cannot be shared" 2016-09-30 10:18:37 +02:00
plip
ppp ppp: take reference on channels netns 2016-04-20 15:42:05 +09:00
slip ppp, slip: Validate VJ compression slot parameters completely 2015-11-02 16:25:00 -05:00
team team: don't call netdev_change_features under team->lock 2016-06-24 10:18:17 -07:00
usb cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind 2016-08-16 09:30:48 +02:00
vmxnet3 Driver: Vmxnet3: Fix regression caused by 5738a09 2016-01-06 16:20:13 -05:00
wan farsync: fix off-by-one bug in fst_add_one 2016-04-20 15:42:03 +09:00
wimax
wireless iwlegacy: avoid warning about missing braces 2016-09-30 10:18:36 +02:00
xen-netback xen: bug fixes for 4.4-rc5 2015-12-18 12:24:52 -08:00
dummy.c net: dummy: add more features 2015-10-21 19:36:10 -07:00
eql.c
geneve.c vxlan, gre, geneve: Set a large MTU on ovs-created tunnel devices 2016-06-24 10:18:18 -07:00
ifb.c
Kconfig
LICENSE.SRC
loopback.c
macvlan.c macvlan: fix leak in macvlan_handle_frame 2015-11-17 14:39:29 -05:00
macvtap.c macvtap: always pass ethernet header in linear 2016-04-20 15:42:02 +09:00
Makefile
mdio.c
mii.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c rapidio/rionet: fix deadlock on SMP 2016-04-12 09:08:58 -07:00
sb1000.c
Space.c
sungem_phy.c
tun.c tuntap: correctly wake up process during uninit 2016-06-24 10:18:16 -07:00
veth.c veth: don’t modify ip_summed; doing so treats packets with bad checksums as good. 2015-12-22 15:15:34 -05:00
virtio_net.c virtio-net: Stop doing DMA from the stack 2015-12-07 16:10:53 +02:00
vrf.c net: vrf: Remove direct access to skb->data 2016-04-20 15:41:57 +09:00
vxlan.c vxlan, gre, geneve: Set a large MTU on ovs-created tunnel devices 2016-06-24 10:18:18 -07:00
xen-netfront.c xen: features for 4.4-rc0 2015-11-04 17:32:42 -08:00