android_kernel_oneplus_msm8998/arch/blackfin
Russell King 8c945f5aac net: smc91x: fix SMC accesses
[ Upstream commit 2fb04fdf30192ff1e2b5834e9b7745889ea8bbcb ]

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
..
boot blackfin: Ignore generated uImages 2013-09-13 10:42:39 +08:00
configs bf609: enable soft switch gpio driver by default 2015-04-23 21:34:29 +08:00
include blackfin: fix copy_from_user() 2016-09-24 10:07:44 +02:00
kernel treewide: Remove old email address 2015-11-23 09:44:58 +01:00
lib blackfin: license: Change ADI BSD license 2012-05-21 14:54:30 +08:00
mach-bf518 blackfin: cleanup board files 2014-04-12 08:48:01 +08:00
mach-bf527 debug-mmrs: Eliminate all traces of the USB_PHY_TEST MMR 2015-04-23 21:34:31 +08:00
mach-bf533 arch/blackfin/mach-bf533/boards/stamp.c: add linux/delay.h 2015-01-08 15:10:52 -08:00
mach-bf537 genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mach-bf538 blackfin: cleanup board files 2014-04-12 08:48:01 +08:00
mach-bf548 debug-mmrs: Eliminate all traces of the USB_PHY_TEST MMR 2015-04-23 21:34:31 +08:00
mach-bf561 net: smc91x: fix SMC accesses 2016-09-30 10:18:37 +02:00
mach-bf609 eth: bf609 eth clock: add pclk clock for stmmac driver probe 2015-04-24 11:36:35 +08:00
mach-common genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
mm mm/blackfin: prepare for removing num_physpages and simplify mem_init() 2013-07-03 16:07:35 -07:00
oprofile Blackfin arch: remove hardware PM code, oprofile not use it 2009-01-07 23:14:39 +08:00
Clear_BSD.txt blackfin: license: Change ADI BSD license 2012-05-21 14:54:30 +08:00
Kconfig treewide: Fix typos in Kconfig 2014-09-26 11:12:28 +02:00
Kconfig.debug consolidate per-arch stack overflow debugging options 2013-07-04 11:25:39 -07:00
Makefile blackfin: rename vmImage to uImage after we move to buildroot 2013-05-07 18:26:39 +08:00