linux/arch/arm
Roger Quadros d248220f04 ARM: 8617/1: dma: fix dma_max_pfn()
Since commit 6ce0d20016 ("ARM: dma: Use dma_pfn_offset for dma address translation"),
dma_to_pfn() already returns the PFN with the physical memory start offset
so we don't need to add it again.

This fixes USB mass storage lock-up problem on systems that can't do DMA
over the entire physical memory range (e.g.) Keystone 2 systems with 4GB RAM
can only do DMA over the first 2GB. [K2E-EVM].

What happens there is that without this patch SCSI layer sets a wrong
bounce buffer limit in scsi_calculate_bounce_limit() for the USB mass
storage device. dma_max_pfn() evaluates to 0x8fffff and bounce_limit
is set to 0x8fffff000 whereas maximum DMA'ble physical memory on Keystone 2
is 0x87fffffff. This results in non DMA'ble pages being given to the
USB controller and hence the lock-up.

NOTE: in the above case, USB-SCSI-device's dma_pfn_offset was showing as 0.
This should have really been 0x780000 as on K2e, LOWMEM_START is 0x80000000
and HIGHMEM_START is 0x800000000. DMA zone is 2GB so dma_max_pfn should be
0x87ffff. The incorrect dma_pfn_offset for the USB storage device is because
USB devices are not correctly inheriting the dma_pfn_offset from the
USB host controller. This will be fixed by a separate patch.

Fixes: 6ce0d20016 ("ARM: dma: Use dma_pfn_offset for dma address translation")
Cc: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Olof Johansson <olof@lixom.net>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Reported-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2016-09-29 16:57:44 +01:00
..
boot ARM: SoC fixes 2016-09-08 12:05:15 -07:00
common ARM: locomo: fix locomo irq handling 2016-09-12 12:12:31 +01:00
configs Revert "ARM: aspeed: adapt defconfigs for new CONFIG_PRINTK_TIME" 2016-08-03 11:07:57 +02:00
crypto
firmware
include ARM: 8617/1: dma: fix dma_max_pfn() 2016-09-29 16:57:44 +01:00
kernel ARM: 8616/1: dt: Respect property size when parsing CPUs 2016-09-29 16:57:43 +01:00
kvm KVM/ARM Fixes for v4.8-rc3 2016-08-18 12:19:19 +02:00
lib
mach-alpine
mach-artpec
mach-asm9260
mach-aspeed
mach-at91 ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-axxia
mach-bcm ARM: DT updates for v4.8 2016-08-01 18:37:45 -04:00
mach-berlin
mach-clps711x ARM: do away with final ARCH_REQUIRE_GPIOLIB 2016-08-02 12:31:58 -07:00
mach-cns3xxx
mach-davinci ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-digicolor
mach-dove
mach-ebsa110
mach-efm32
mach-ep93xx
mach-exynos ARM: SoC driver updates for v4.8 2016-08-01 18:36:01 -04:00
mach-footbridge
mach-gemini
mach-highbank
mach-hisi ARM: hisi: consolidate the hisilicon machine entries 2016-07-07 09:37:59 +01:00
mach-imx i.MX fixes for 4.8, 2nd round: 2016-09-07 21:24:22 -07:00
mach-integrator treewide: replace obsolete _refok by __ref 2016-08-02 17:31:41 -04:00
mach-iop13xx
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-keystone ARM: SoC defconfig updates for v4.8 2016-08-01 18:30:44 -04:00
mach-ks8695
mach-lpc18xx
mach-lpc32xx
mach-mediatek
mach-meson arm: meson: explicitly select clk drivers 2016-07-07 17:54:25 +02:00
mach-mmp
mach-moxart ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-mv78xx0 treewide: replace obsolete _refok by __ref 2016-08-02 17:31:41 -04:00
mach-mvebu ARM: don't include removed directories 2016-08-10 22:42:18 +02:00
mach-mxs ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-netx
mach-nomadik
mach-nspire DeviceTree update for 4.8: 2016-07-30 11:32:01 -07:00
mach-omap1 ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-omap2 Merge branch 'omap-for-v4.8/soc' into omap-for-v4.8/fixes 2016-08-15 08:29:44 -07:00
mach-orion5x RTC for 4.8 2016-08-05 09:48:22 -04:00
mach-oxnas ARM: oxnas: select reset controller framework 2016-08-10 22:42:32 +02:00
mach-picoxcell ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-prima2 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-pxa ARM: pxa/lubbock: add pcmcia clock 2016-09-12 12:12:31 +01:00
mach-qcom
mach-realview net: smc91x: fix SMC accesses 2016-08-28 23:44:55 -04:00
mach-rockchip ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-rpc
mach-s3c24xx ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-s3c64xx ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-s5pv210 ARM: don't include removed directories 2016-08-10 22:42:18 +02:00
mach-sa1100 Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm 2016-09-09 08:32:10 -07:00
mach-shmobile ARM: shmobile: don't call platform_can_secondary_boot on UP 2016-08-02 12:34:49 -07:00
mach-socfpga
mach-spear ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-sti Highlights: 2016-07-14 15:08:15 +02:00
mach-stm32
mach-sunxi
mach-tango ARM: tango: add Suspend-to-RAM support 2016-07-07 16:09:30 +02:00
mach-tegra ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-u300 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-uniphier Merge ARCH_[WANT_OPTIONAL|REQUIRE]_GPIOLIB changes into next/soc 2016-07-06 18:00:32 +02:00
mach-ux500 ARM: SoC driver updates for v4.8 2016-08-01 18:36:01 -04:00
mach-versatile
mach-vexpress ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-vt8500 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-w90x900
mach-zx
mach-zynq
mm ARM: 8612/1: LPAE: initialize cache policy correctly 2016-09-12 12:12:30 +01:00
net
nwfpe
oprofile
plat-iop ARM: iop: Fix indentation 2016-07-07 18:06:40 +02:00
plat-omap
plat-orion
plat-pxa
plat-samsung ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
plat-versatile
probes
tools
vdso
vfp arm: Convert VFP hotplug notifiers to state machine 2016-07-15 10:40:22 +02:00
xen xen: change the type of xen_vcpu_id to uint32_t 2016-08-24 18:17:27 +01:00
Kconfig Implements HARDENED_USERCOPY verification of copy_to_user/copy_from_user 2016-08-08 14:48:14 -07:00
Kconfig-nommu
Kconfig.debug Merge tag 'arm-soc/for-4.8/soc-part2' of http://github.com/Broadcom/stblinux into next/soc 2016-07-07 16:09:25 +02:00
Makefile ARM: hide mach-*/ include for ARM_SINGLE_ARMV7M 2016-08-10 22:42:26 +02:00