ARM: 7215/1: mmc: mmci: Increase max_segs from 16 to 128

A significant increase (10-20%) in performance throughput for
USB mass storage is the reason for incrementing the value.
By some reason the USB driver allocates buffers which requires
a scattergather list to contain a lot more than 16 elements to
get optimal performance. This change sets the maximum elements
to 128.

Tests with large reads and large writes (100 MiB) show that the
throughput increase is significant for write (10% for this test)
but not for read. Tests are run on a Linux host with ext4 FS on
the gadget mass storage device. The sg-len still exceeds 16 for
the read tests but the performance gain is low or nothing.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Per Forlin <per.forlin@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7217/1: mmc: mmci: Put power register deviations in variant data

Use variant data to store hardware controller deviations concerning
power registers to improve readability of the code.

Signed-off-by: Sebastian Rasmussen <sebastian.rasmussen@stericsson.com>
Tested-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
mmc: mmci: add capabilities2 for MMC_CAP2

Signed-off-by: Per Forlin <per.forlin@stericsson.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
ARM: 7218/1: mmc: mmci: Provide option to configure bus signal direction

The ST Micro variant supports bus signal direction indication. A new
member in the variant struct is added for this.

Moreover the actual signal direction configuration is board specific,
thus the amba mmci platform data is extended with a new member to be
able provide mmci with these specific board configurations.

This patch is based upon a patch from Sebastian Rasmussen.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Rasmussen <sebastian.rasmussen@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 6981/2: mmci: adjust calculation of f_min

The ARM version maximum clock divider is 512 whereas for the ST
variants it's 257. Let's use DIV_ROUND_UP() for both cases so we
can see clearly what's going on here.

[Use DIV_ROUND_UP to clarify elder code]

Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Reviewed-by: Sebastian Rasmussen <sebastian.rasmussen@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
mmc: mmci: implement pre_req() and post_req()

pre_req() runs dma_map_sg() and prepares the dma descriptor for the next
mmc data transfer. post_req() runs dma_unmap_sg.  If not calling pre_req()
before mmci_request(), mmci_request() will prepare the cache and dma just
like it did it before.  It is optional to use pre_req() and post_req()
for mmci.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
PM: add runtime PM support to MMCI

Add runtime PM support to the MMCI primecell driver, making use of
the core primecell bus runtime PM support.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
clk: mmci: convert to clk_prepare()/clk_unprepare()

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
mmc: mmci: simplify err check in mmci_post_request

The error condition indicates that mmci_post_request() should cleanup
after the mmci_pre_request(). In this case the resources allocated by
device_prep_slave_sg() are freed by calling dmaengine_terminate_all().
dma_unmap_sg() should always be performed if the host_cookie is set.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
mmc-host: move to dma_transfer_direction

fixup usage of dma direction by introducing dma_transfer_direction,
this patch moves mmc drivers to use new enum

Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Chris Ball <cjb@laptop.org>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
ARM: 7216/1: mmc: mmci: Do not release spinlock in request_end

The patch "mmc: core: move ->request() call from atomic context",
is the reason to why this change is possible. This simplifies the
error handling code execution path quite a lot and potentially also
fixes some error handling hang problems.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7221/1: mmc: mmci: Change from using legacy suspend

This patch switch from using the legacy suspend/resume
to the new way of registering PM callbacks. No functional
change is done.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7219/1: mmc: mmci: Change vdd_handler to a generic ios_handler

The purpose of the vdd_handler does not make sense. We remove it
and use a generic approach instead. A new ios_handler is added, the
purpose of which e.g. can be to control GPIO pins to a levelshifter.

Previously the vdd_handler was also used for making additional
changes to the power register bits. This option is superfluous and is
therefore removed.

Adaptaptions from the old vdd_handler to the new ios_handler is done for
mach-ux500 board, which was the only one using the vdd_handler.

This patch is based upon a patch from Sebastian Rasmussen.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Rasmussen <sebastian.rasmussen@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

Conflicts:
	arch/arm/mach-ux500/board-mop500-sdi.c
ARM: 7223/1: mmc: mmci: Fixup use of runtime PM and use autosuspend

Added use of runtime PM autosuspend feature, with a fixed
timeout of 50 ms. This will prevent adding a latency,
although very minor, for _every_ request.

Moreover the runtime_get_sync is now also used in set_ios and
suspend since the runtime resourses are needed here as well.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7227/1: mmc: mmci: Prepare for SDIO before setting up DMA job

Move the SDIO preparation to be done before the DMA job is setup.
This makes it possible to do DMA for SDIO transfers as well as the
earlier supported pio mode.

Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7230/1: mmc: mmci: Fix PIO read for small SDIO packets

Corrects a bug in MMCI host driver which silently causes
small reads (< 4 bytes as only used in SDIO) from PL-18X to fail.

Signed-off-by: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Fredrik Soderstedt <fredrik.soderstedt@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: amba: make irq 0 invalid

Fix core bus and MMCI such that irq 0 means that there is no IRQ
attached.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
mmc: mxcmmc: add missing dma_async_issue_pending

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
ARM: 7280/1: mmc: mmci: Cache MMCICLOCK and MMCIPOWER register

Instead of reading a register value everytime we need to
apply a new value for it, maintain a cached copy for it.
This also means we are able to skip writes that are not
needed.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
treewide: Convert uses of struct resource to resource_size(ptr)

Several fixes as well where the +1 was missing.

Done via coccinelle scripts like:

@@
struct resource *ptr;
@@

- ptr->end - ptr->start + 1
+ resource_size(ptr)

and some grep and typing.

Mostly uncompiled, no cross-compilers.

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>

Conflicts:
	arch/arm/mach-at91/at91sam9261_devices.c
	arch/arm/mach-mv78xx0/pcie.c
	arch/arm/mach-u300/core.c
	arch/arm/plat-mxc/pwm.c
	arch/arm/plat-s5p/sysmmu.c
	arch/arm/plat-samsung/pm-check.c
	arch/avr32/kernel/setup.c
	arch/avr32/mach-at32ap/extint.c
	arch/avr32/mach-at32ap/hsmc.c
	arch/avr32/mach-at32ap/intc.c
	arch/avr32/mach-at32ap/pio.c
	arch/microblaze/pci/pci-common.c
	arch/mips/pci/pci-rc32434.c
	arch/mips/pci/pci-vr41xx.c
	arch/mips/powertv/asic/asic_devices.c
	arch/powerpc/include/asm/macio.h
	arch/powerpc/kernel/machine_kexec.c
	arch/powerpc/kernel/pci-common.c
	arch/powerpc/platforms/52xx/mpc52xx_pci.c
	arch/powerpc/platforms/83xx/km83xx.c
	arch/powerpc/platforms/83xx/mpc832x_mds.c
	arch/powerpc/platforms/83xx/mpc834x_mds.c
	arch/powerpc/platforms/83xx/mpc836x_mds.c
	arch/powerpc/platforms/83xx/usb.c
	arch/powerpc/platforms/85xx/sbc8560.c
	arch/powerpc/platforms/85xx/xes_mpc85xx.c
	arch/powerpc/platforms/cell/celleb_scc_epci.c
	arch/powerpc/platforms/cell/celleb_scc_pciex.c
	arch/powerpc/platforms/cell/spu_manage.c
	arch/powerpc/platforms/chrp/pci.c
	arch/powerpc/platforms/pasemi/dma_lib.c
	arch/powerpc/platforms/powermac/nvram.c
	arch/powerpc/platforms/powermac/pci.c
	arch/powerpc/platforms/powermac/time.c
	arch/powerpc/sysdev/cpm1.c
	arch/powerpc/sysdev/cpm_common.c
	arch/powerpc/sysdev/dart_iommu.c
	arch/powerpc/sysdev/fsl_msi.c
	arch/powerpc/sysdev/fsl_pci.c
	arch/powerpc/sysdev/fsl_rio.c
	arch/powerpc/sysdev/ipic.c
	arch/powerpc/sysdev/mmio_nvram.c
	arch/powerpc/sysdev/mpc8xx_pic.c
	arch/powerpc/sysdev/mv64x60_udbg.c
	arch/powerpc/sysdev/ppc4xx_pci.c
	arch/powerpc/sysdev/qe_lib/qe_ic.c
	arch/powerpc/sysdev/qe_lib/qe_io.c
	arch/powerpc/sysdev/xics/icp-native.c
	arch/sh/kernel/io_trapped.c
	arch/sh/kernel/machine_kexec.c
	arch/sparc/kernel/ioport.c
	arch/sparc/kernel/pci.c
	arch/tile/kernel/setup.c
	arch/x86/kernel/pci-calgary_64.c
	arch/x86/kernel/probe_roms.c
	drivers/video/msm/mdp.c
	drivers/video/msm/msm_fb.c