GitHub/MotorolaMobilityLLC/kernel-slsi.git
9 years agommc: sdhci-esdhc-imx: Convert to mmc_send_tuning()
Ulf Hansson [Fri, 5 Dec 2014 11:59:40 +0000 (12:59 +0100)]
mmc: sdhci-esdhc-imx: Convert to mmc_send_tuning()

Instead of having a local function taking care of sending the tuning
command, let's use the common mmc_send_tuning() API provided by the mmc
core. In this way the request will be handled as any other request by
sdhci core.

As an effect of this change, the pm_runtime_get_sync() call at
esdhc_prepare_tuning() isn't needed any more.

This patch will also introduce another change in behavior, since before
the response pattern to the tuning command wasn't verified by
sdhci-esdhc-imx. The mmc_send_tuning() does that.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Dong Aisheng <b29396@freescale.com>
Acked-by: Dong Aisheng <b29396@freescale.com>
9 years agommc: core: Let mmc_send_tuning() to take struct mmc_host* as parameter
Ulf Hansson [Fri, 5 Dec 2014 10:31:22 +0000 (11:31 +0100)]
mmc: core: Let mmc_send_tuning() to take struct mmc_host* as parameter

To be able to use mmc_send_tuning() prior the struct mmc_card has been
allocated, let's convert it to take the struct mmc_host* as parameter
instead.

Suggested-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Dong Aisheng <b29396@freescale.com>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
9 years agommc: queue: Improve error handling during allocation of bounce buffers
Bhuvanesh Surachari [Mon, 1 Dec 2014 07:23:02 +0000 (02:23 -0500)]
mmc: queue: Improve error handling during allocation of bounce buffers

Allocation of previous bounce buffer in mmc_init_queue when the current
bounce buffer allocation fails was leading to a crash later in
__blk_segment_map_sg. Error handling is improved by allocating previous
bounce buffer only if the current bounce buffer allocation succeeds.

Signed-off-by: Bhuvanesh Surachari <bhuvanesh_surachari@mentor.com>
Signed-off-by: Harish Jenny K N <harish_kandiga@mentor.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: sdhci-acpi: Add two host capabilities for Intel
Adrian Hunter [Mon, 1 Dec 2014 13:51:19 +0000 (15:51 +0200)]
mmc: sdhci-acpi: Add two host capabilities for Intel

Intel host controllers are capable of doing the bus
width test and of waiting while busy, so add the
capability flags.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: sdhci-pci: Add two host capabilities for BYT
Adrian Hunter [Mon, 1 Dec 2014 13:51:18 +0000 (15:51 +0200)]
mmc: sdhci-pci: Add two host capabilities for BYT

BYT host controllers are capable of doing the bus
width test and of waiting while busy, so add the
capability flags.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: sdhci-acpi: Add SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC
Adrian Hunter [Mon, 1 Dec 2014 13:51:17 +0000 (15:51 +0200)]
mmc: sdhci-acpi: Add SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC

SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC actually causes
standard-compliant behaviour by causing the flagging
of the last DMA transfer descriptor as the end
instead of there being an additional nop descriptor
which is flagged as the end.  Consequently, it is
better to have the quirk.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: sdhci-pci: Add SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC to BYT
Adrian Hunter [Mon, 1 Dec 2014 13:51:16 +0000 (15:51 +0200)]
mmc: sdhci-pci: Add SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC to BYT

SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC actually causes
standard-compliant behaviour by causing the flagging
of the last DMA transfer descriptor as the end
instead of there being an additional nop descriptor
which is flagged as the end.  Consequently, it is
better to have the quirk.  Add it for BYT.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: atmel-mci: use probe deferring if dma controller is not ready yet
ludovic.desroches@atmel.com [Mon, 1 Dec 2014 14:35:09 +0000 (15:35 +0100)]
mmc: atmel-mci: use probe deferring if dma controller is not ready yet

Return probe defer if requesting a dma channel without a dma controller
probed.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: atmel-mci: stop using specific initcall
ludovic.desroches@atmel.com [Mon, 1 Dec 2014 14:35:08 +0000 (15:35 +0100)]
mmc: atmel-mci: stop using specific initcall

No more use late initcall to manage probing order. Use probe deferring
if needed.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: atmel-mci: remove __init/__exit attributes
ludovic.desroches@atmel.com [Mon, 1 Dec 2014 14:35:07 +0000 (15:35 +0100)]
mmc: atmel-mci: remove __init/__exit attributes

Using __init/__exit attributes can cause several breakages so remove
them.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
9 years agommc: atmel-mci: remove useless DMA stuff for non-dt devices
ludovic.desroches@atmel.com [Mon, 1 Dec 2014 14:35:06 +0000 (15:35 +0100)]
mmc: atmel-mci: remove useless DMA stuff for non-dt devices

All devices with a DMA controller are DT compliant and legacy support
has been removed. For those reasons, some DMA stuff is useless.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: Fix UHS card with DDR50 support
Ulf Hansson [Tue, 25 Nov 2014 12:05:13 +0000 (13:05 +0100)]
mmc: omap_hsmmc: Fix UHS card with DDR50 support

The commit, mmc: omap: clarify DDR timing mode between SD-UHS and eMMC,
switched omap_hsmmc to support MMC DDR mode instead of UHS DDR50 mode.

Add UHS DDR50 mode again and this time let's also keep the MMC DDR mode.

Fixes: 5438ad95a57c (mmc: omap: clarify DDR timing mode between SD-UHS and eMMC)
Reported-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: add core-level function for sending tuning commands
Minda Chen [Wed, 26 Nov 2014 05:05:33 +0000 (13:05 +0800)]
mmc: core: add core-level function for sending tuning commands

According to the SD card spec, Add a manual tuning command function
for SDR104/HS200.
Sending command 19 or command 21 to read data and compare with the
tunning block pattern.

This patch will help to decrease some platform private codes in SDHCI
platform_execute_tuning() callbacks.

Signed-off-by: Minda Chen <Minda.Chen@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: hold SD Clock before CMD11 during Signal
Vincent Yang [Fri, 21 Nov 2014 00:51:40 +0000 (08:51 +0800)]
mmc: core: hold SD Clock before CMD11 during Signal

Voltage Switch Procedure

This patch is to fix an issue found on mb86s7x platforms.

[symptom]
There are some UHS-1 SD memory cards sometimes cannot be detected correctly,
e.g., Transcend 600x SDXC 64GB UHS-1 memory card.
During Signal Voltage Switch Procedure, failure to switch is indicated
by the card holding DAT[3:0] low.

[analysis]
According to SD Host Controller Simplified Specification Version 3.00
chapter 3.6.1, the Signal Voltage Switch Procedure should be:
(1) Check S18A; (2) Issue CMD11; (3) Check CMD 11 response;
(4) Stop providing SD clock; (5) Check DAT[3:0] should be 0000b;
(6) Set 1.8V Signal Enable; (7) Wait 5ms; (8) Check 1.8V Signal Enable;
(9) Provide SD Clock; (10) Wait 1ms; (11) Check DAT[3:0] should be 1111b;
(12) error handling

With CONFIG_MMC_CLKGATE=y, sometimes there is one more gating/un-gating
SD clock between (2) and (3). In this case, some UHS-1 SD cards will hold
DAT[3:0] 0000b at (11) and thus fails Signal Voltage Switch Procedure.

[solution]
By mmc_host_clk_hold() before CMD11, the additional gating/un-gating
SD clock between (2) and (3) can be prevented and thus no failure at (11).
It has been verified with many UHS-1 SD cards on mb86s7x platforms and
works correctly.

Signed-off-by: Vincent Yang <Vincent.Yang@tw.fujitsu.com>
Reviewed-by: Johan Rudholm <jrudholm@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mxs-mmc: Check for clk_prepare_enable() error
Fabio Estevam [Wed, 19 Nov 2014 13:16:59 +0000 (11:16 -0200)]
mmc: mxs-mmc: Check for clk_prepare_enable() error

clk_prepare_enable() may fail and in this case we should propagate the error.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mxs-mmc: Propagate the real error
Fabio Estevam [Wed, 19 Nov 2014 13:16:58 +0000 (11:16 -0200)]
mmc: mxs-mmc: Propagate the real error

If platform_get_irq() fails, it is better to propagate the real error value
instead of a 'fake' one.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mxs-mmc: No need to do NULL check on 'iores'
Fabio Estevam [Wed, 19 Nov 2014 13:16:57 +0000 (11:16 -0200)]
mmc: mxs-mmc: No need to do NULL check on 'iores'

devm_ioremap_resource() already checks if 'iores' is NULL or not, so we can
skip this manual check.

While at it, move platform_get_resource() closer to devm_ioremap_resource() for
better readability.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: Add support for IMG Pistachio
Andrew Bresticker [Thu, 13 Nov 2014 18:50:21 +0000 (10:50 -0800)]
mmc: dw_mmc: Add support for IMG Pistachio

Add support for the DW MMC host found on the Imagination Pistachio SoC.
Like the DW MMC hosts found on SOCFPGA and Rockchip SoCs, the DW MMC
host on Pistachio requires the use of SDMMC_CMD_USE_HOLD_REG.

Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
Reviewed-by: Doug Anderson <dianders@chromium.org>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mxs-mmc: Simplify PM hooks
Fabio Estevam [Tue, 18 Nov 2014 02:43:39 +0000 (00:43 -0200)]
mmc: mxs-mmc: Simplify PM hooks

By using SIMPLE_DEV_PM_OPS we can make the code smaller and cleaner.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mxs-mmc: Register the irq with the device name
Fabio Estevam [Tue, 18 Nov 2014 02:37:12 +0000 (00:37 -0200)]
mmc: mxs-mmc: Register the irq with the device name

Instead of registering the irq name with the driver's name, it's better to pass
the device name so that we have a more explicit indication as to what mmc
instance the irq is related:

$ cat /proc/interrupts
           CPU0
...
 26:          6         -  96  80010000.ssp

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: avoid write to CDTHRCTL on older versions
James Hogan [Mon, 17 Nov 2014 17:49:05 +0000 (17:49 +0000)]
mmc: dw_mmc: avoid write to CDTHRCTL on older versions

Commit f1d2736c8156 (mmc: dw_mmc: control card read threshold) added
dw_mci_ctrl_rd_thld() with an unconditional write to the CDTHRCTL
register at offset 0x100. However before version 240a, the FIFO region
started at 0x100, so the write messes with the FIFO and completely
breaks the driver.

If the version id < 240A, return early from dw_mci_ctl_rd_thld() so as
not to hit this problem.

Fixes: f1d2736c8156 (mmc: dw_mmc: control card read threshold)
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: <stable@vger.kernel.org> # v3.13+
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: toshsd: move dereference below check for NULL
Dan Carpenter [Sat, 15 Nov 2014 18:56:41 +0000 (21:56 +0300)]
mmc: toshsd: move dereference below check for NULL

We check for NULL pointers after dereferencing so it's too late.  Oddly
enough, Smatch misses this code but complains about the caller passing
NULL pointers to this function:

drivers/mmc/host/toshsd.c:389 toshsd_irq()
error: we previously assumed 'host->cmd' could be null (see line 349)

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: atmel-mci: remove compat for non DT board when requesting dma chan
ludovic.desroches@atmel.com [Fri, 14 Nov 2014 14:36:24 +0000 (15:36 +0100)]
mmc: atmel-mci: remove compat for non DT board when requesting dma chan

All boards with a dma controller have DT support so using
dma_request_slave_channel_compat is no more needed.

Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: add support for the other bit of sdio interrupt
Addy Ke [Tue, 4 Nov 2014 14:03:09 +0000 (22:03 +0800)]
mmc: dw_mmc: add support for the other bit of sdio interrupt

The bit of sdio interrupt is 16 in designware implementation,
but it is 24 on Rockchip SoCs.This patch add sdio_id0 for the
number of slot0 in the SDIO interrupt registers.

Signed-off-by: Addy Ke <addy.ke@rock-chips.com>
Reviewed-by: Doug Anderson <dianders@chromium.org>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: mvsdio: Work around broken TX DMA
Andrew Lunn [Wed, 12 Nov 2014 22:10:08 +0000 (23:10 +0100)]
mmc: mvsdio: Work around broken TX DMA

In order to use the mvsdio driver for sdio, it has been necessary to
use a module parameter to disable DMA so to force PIO is used. It is
then possible to use wireless LAN devices like mwifiex found on
topkick and mirabox. However, accessing an MMC SD card does work with
DMA.

Investigation has shown that MMC block device accesses are always
aligned to 64 byte boundaries, where as transfers from mwifiex are
rarely more than word aligned. It has also been determined that card
to host transfers work with DMA for SDIO devices, but host to card
transfers with DMA have problems.

This patch extends the current checks for buffers which are not word
aligned or multiple of words. All host to card transfers which are not
64 byte aligned are now also performed via PIO. This should not affect
the performance of SD cards, but allow sdio devices to work out of the
box, and they are likely to be more efficient since DMA will be used
for card to host transfers.

Tested on mirabox for wifi via mwifiex
Tested on 370 RD for file systems on an SD card.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: block: Increase max_devices
Ben Hutchings [Thu, 6 Nov 2014 03:35:09 +0000 (03:35 +0000)]
mmc: block: Increase max_devices

Currently the driver imposes a limit of 256 total minor numbers,
apparently based on the historic Unix/Linux limit.  This is quite
restrictive, particularly if we raise the maximum number of
partitions per card to 256 to match sd.

In order to make the full minor number space available we would
have to replace the static dev_use and name_use arrays with struct
ida.  But we can at least allow use of 256 cards rather than just
256 minors, with only a small change.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: add support for ARM64
Alim Akhtar [Fri, 29 Aug 2014 10:24:51 +0000 (15:54 +0530)]
mmc: dw_mmc: add support for ARM64

There are upcoming ARM64 SoCs with dw_mmc host controller.

Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: reset sdio card properly on resume.
NeilBrown [Wed, 12 Nov 2014 03:55:19 +0000 (14:55 +1100)]
mmc: core: reset sdio card properly on resume.

mmc_sdio_power_restore() calls
mmc_send_if_cond(host, host->card->ocr);

ret = mmc_send_io_op_cond(host, 0, NULL);

between mmc_go_idle() and mmc_sdio_init_card().
mmc_sdio_resume() needs to as well, else my libertas sdio wifi
device doesn't resume properly from suspend.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: use card->ocr when negotiating voltage setting in mmc_sdio_power_restore
NeilBrown [Wed, 12 Nov 2014 03:55:19 +0000 (14:55 +1100)]
mmc: core: use card->ocr when negotiating voltage setting in mmc_sdio_power_restore

As we are restoring power to a known card, it makes sense to use
the 'ocr' value known for the card rather than the generic one
for the host interface.
This matches the use of card->ocr passed to mmc_power_up in
mmc_sdio_runtime_resume  (just before mmc_sdio_power_restore is
called), and the value passed to mmc_sdio_init_card() a little
later in mmc_sdio_power_restore().

Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: add Toshiba PCI SD controller driver
Ondrej Zary [Tue, 11 Nov 2014 16:54:55 +0000 (17:54 +0100)]
mmc: add Toshiba PCI SD controller driver

This patch resurrects an old never-finished driver for Toshiba PCI SD
controllers found in some older Toshiba laptops (such as Portege R100):

02:0d.0 System peripheral [0880]: Toshiba America Info Systems SD TypA Controller [1179:0805] (rev 05)

The code is fixed, cleaned up and successfully tested with SD, SDHC, SDXC and
MMC cards on Portege R100. (MMC cards don't even work in Windows!)
SDIO probably does not work (don't have any SDIO card).

The hardware is slow (around 2 MB/s - same in Windows) because it does not
support bus mastering (busmaster enable bit cannot be set in PCI control reg).
Also the card clock is limited to 16MHz (33MHz PCI clock divided by 2).

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: exynos: Add support for exynos7
Abhilash Kesavan [Thu, 28 Aug 2014 13:18:53 +0000 (18:48 +0530)]
mmc: dw_mmc: exynos: Add support for exynos7

The Exynos7 has a DWMMC controller (v2.70a) which is different from
prior versions. This patch adds new compatible strings for exynos7.
This patch also fixes the CLKSEL register offset on exynos7.

Signed-off-by: Abhilash Kesavan <a.kesavan@samsung.com>
Signed-off-by: Yuvaraj Kumar C D <yuvaraj.cd@samsung.com>
Tested-by: Vivek Gautam <gautam.vivek@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: consistent handling of initial values
Johan Rudholm [Thu, 6 Nov 2014 13:46:54 +0000 (14:46 +0100)]
mmc: core: consistent handling of initial values

mmc_do_hw_reset(), mmc_power_up() and mmc_power_off() all set similar
initial values for bus_mode, bus_width, chip_select and timing. Let's
make this handling simpler and more consistent by sticking them
together in a common function. This will introduce small changes in
behavior in the following places:

mmc_power_off():

  For SPI hosts, explicitly set bus_mode = MMC_BUSMODE_PUSHPULL and
  chip_select = MMC_CS_HIGH, before we left them as they were.

  For non-SPI hosts, set bus_mode = MMC_BUSMODE_PUSHPULL instead of
  MMC_BUSMODE_OPENDRAIN as before.

  These two changes should not be a problem since the device will be
  powered off anyway.

mmc_do_hw_reset():

  Always set bus_mode = MMC_BUSMODE_PUSHPULL, as required by SD/SDIO
  cards. MMC cards require MMC_BUSMODE_OPENDRAIN, but this is taken
  care of by mmc_init_card() and mmc_attach_mmc().

Signed-off-by: Johan Rudholm <johanru@axis.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove unused slot_id parameter
Andreas Fenkart [Sat, 8 Nov 2014 14:33:17 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove unused slot_id parameter

omap_hsmmc only supports one slot. So slot id is always zero, and
slot id was never used in the callbacks anyway

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: Remove unnecessary callbacks from platform data
Andreas Fenkart [Sat, 8 Nov 2014 14:33:16 +0000 (15:33 +0100)]
mmc: omap_hsmmc: Remove unnecessary callbacks from platform data

These callbacks are set during driver probe and not from the platform
init, -- evtl. they had been for oamp 1/2 -- for omap3 they are local
functions of the driver. These indirection could be dropped
altogether in favor of regular function calls TODO

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: pass mmc_priv struct to gpio init / free
Andreas Fenkart [Sat, 8 Nov 2014 14:33:15 +0000 (15:33 +0100)]
mmc: omap_hsmmc: pass mmc_priv struct to gpio init / free

this is needed when installing callbacks in the host struct and not
in the platform data, e.g. cover detect irq should be stored in
omap_hsmmc_host and not platform data

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove unnecessary omap_hsmmc_slot_data indirection
Andreas Fenkart [Sat, 8 Nov 2014 14:33:14 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove unnecessary omap_hsmmc_slot_data indirection

omap_hsmmc supports only one slot per controller, see OMAP_MMC_MAX_SLOTS.
This unnecessary indirection leads to confusion in the omap_hsmmc driver.
For example the card_detect callback is not installed by platform code
but from the driver probe function. So it should be a field of
omap_hsmmc_host. But since it is declared under the platform slot while
the drivers struct omap_hsmmc_host has no slot abstraction, this looks
like a bug, especially when not familiar that this driver only supports
1 slot anyway.
Either we should add a slot abstraction to omap_hsmmc_host or remove
it from the platform data struct. Removed since slot multiplexing is
an un-implemented feature

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove unused get_context_loss_count callback
Andreas Fenkart [Sat, 8 Nov 2014 14:33:13 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove unused get_context_loss_count callback

trigger of this callback has been removed in 0a82e06e6183

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove never read power_saving field in omap2_hsmmc_info
Andreas Fenkart [Sat, 8 Nov 2014 14:33:12 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove never read power_saving field in omap2_hsmmc_info

these fields are never read, probably an unimplemented feature
or superseded by pm_runtime

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove un-initialized callbacks from platform data
Andreas Fenkart [Sat, 8 Nov 2014 14:33:11 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove un-initialized callbacks from platform data

these callbacks are not set, probably legacy omap 1/2 features

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: omap_hsmmc: remove unused fields in platform_data
Andreas Fenkart [Sat, 8 Nov 2014 14:33:10 +0000 (15:33 +0100)]
mmc: omap_hsmmc: remove unused fields in platform_data

platform data is built from omap2_hsmmc_info, remove all fields that
are never set in omap_hsmmc_info, hence never copied to platform data.
Note that the omap_hsmmc driver is not affected by this patch those
fields were completely unused.

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agoARM: OMAP1/2+: MMC: separate platform data for mmc and mmc hs driver
Andreas Fenkart [Sat, 8 Nov 2014 14:33:09 +0000 (15:33 +0100)]
ARM: OMAP1/2+: MMC: separate platform data for mmc and mmc hs driver

- omap mmc driver supports multiplexing, omap_mmc_hs doesn't
this leads to one of the major confusions in the omap_hsmmc driver

- platform data should be read-only for the driver
most callbacks are not set by the omap3 platform init code while still
required. So they are set from the driver probe function, which is against
the paradigm that platform-data should not be modified by the driver
typical examples are card_detect, read_only callbacks

un-bundling by searching for driver name \"omap_hsmmc in the
arch/arm folder. omap_hsmmc_platform_data is not initialized directly,
but from omap2_hsmmc_info, which is defined in a separate header file
not touched by this patch

hwmod includes platform headers to declare features of the platform. All
the declared features are prefixed OMAP_HSMMC. There is no need to
include platform header from hwmod other except for feature defines

Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agoARM: OMAP2: MMC: include mmc-omap platform header directly
Andreas Fenkart [Sat, 8 Nov 2014 14:33:08 +0000 (15:33 +0100)]
ARM: OMAP2: MMC: include mmc-omap platform header directly

Only a few files really need that platform header. When later splitting
omap_mmc_platform_data into omap_mmc and omap_mmc_hs, those files
declaring an hs mmc platform data will have to change the platform
include, which is a good sanity check.
Also removing omap242x_init_mmc, which is not used anywhere, checked
with grep.

Signed-off-by: Andreas Fenkart <afenkart@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: atmel-mci: adopt pinctrl support
Wenyou Yang [Fri, 7 Nov 2014 00:48:13 +0000 (08:48 +0800)]
mmc: atmel-mci: adopt pinctrl support

Amend the atmel mci pin controller to optionally take a pin control
handle and set the state of the pins to:
- "default" on boot, resume and before performing an transfer.
- "sleep" on suspend().

This should make it possible to optimize energy usage for the pins
both for the suspend/resume cycle.

Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Add HS400 support to SDHCI driver
Adrian Hunter [Thu, 6 Nov 2014 13:19:06 +0000 (15:19 +0200)]
mmc: sdhci: Add HS400 support to SDHCI driver

MMC core already has support for HS400.  Add HS400
support to SDHCI driver.  The SDHC Standard specification
does not define HS400 so consequently HS400 support is
non-standard.  However HS400 is not selected without
the host controller setting the corresponding capability
flags so host controllers not yet supporting HS400
will not be affected.  To support that, a quirk
SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 is introduced to
enable the use of capabilities register reserved bit-63
to indicate HS400 support.

Because HS400 is non-standard for SDHCI, it is possible
that different vendors will do things in different ways.
However HS200 support faced the same issue but currently
there is only one solution.  As such, no attempt has
been made to provide for alternate HS400 solutions except
for SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Clear also HS400 1.2V capability if 1.2V is not supported
Adrian Hunter [Thu, 6 Nov 2014 13:19:05 +0000 (15:19 +0200)]
mmc: sdhci: Clear also HS400 1.2V capability if 1.2V is not supported

1.2V HS200 mode capability is cleared if there is not a voltage
regulator that supports 1.2V.  Do the same for 1.2V HS400 mode.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Fix vqmmc error setting
Adrian Hunter [Thu, 6 Nov 2014 13:19:04 +0000 (15:19 +0200)]
mmc: sdhci: Fix vqmmc error setting

supply.vqmmc is used with the IS_ERR macro which means
the value must be valid or an error code.  NULL is
neither, so replace with ERR_PTR(-EINVAL).

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Remove unused SDHCI_CTRL_HS_SDR200
Adrian Hunter [Thu, 6 Nov 2014 13:19:03 +0000 (15:19 +0200)]
mmc: sdhci: Remove unused SDHCI_CTRL_HS_SDR200

SDHCI_CTRL_HS_SDR200 is unused.  Remove it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: Add IDMAC 64-bit address mode support
Prabu Thangamuthu [Mon, 20 Oct 2014 07:12:33 +0000 (07:12 +0000)]
mmc: dw_mmc: Add IDMAC 64-bit address mode support

Synopsys DW_MMC IP core supports Internal DMA Controller with 64-bit address mode from IP version 2.70a onwards.
Updated the driver to support IDMAC 64-bit addressing mode.

Signed-off-by: Prabu Thangamuthu <prabu.t@synopsys.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pci: enable sdhci doesn't support hs200 quirk for AMD sdhci
Vincent Wan [Wed, 5 Nov 2014 06:09:28 +0000 (14:09 +0800)]
mmc: sdhci-pci: enable sdhci doesn't support hs200 quirk for AMD sdhci

AMD SD controller supports the SDR104 mode, but caps2 can not
be promoted to support hs200 for eMMC.

Signed-off-by: Vincent Wan <vincent.wan@amd.com>
Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pci: enable the clear transfer mode register quirk for AMD sdhci
Vincent Wan [Wed, 5 Nov 2014 06:09:14 +0000 (14:09 +0800)]
mmc: sdhci-pci: enable the clear transfer mode register quirk for AMD sdhci

This patch is to enable the quirk for AMD sdhci requiring transfer
mode register need to be cleared for commands without data

Signed-off-by: Vincent Wan <vincent.wan@amd.com>
Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Add a quirk for AMD SDHC transfer mode register need to be cleared for...
Vincent Wan [Wed, 5 Nov 2014 06:09:00 +0000 (14:09 +0800)]
mmc: sdhci: Add a quirk for AMD SDHC transfer mode register need to be cleared for cmd without data

SDHC controller in AMD chipsets require SDHC transfer mode
register to be cleared for commands without data. The issue was
uncovered during testing eMMC cards on KB/ML based platforms

Signed-off-by: Vincent Wan <vincent.wan@amd.com>
Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
Signed-off-by: Arindam Nath <arindam.nath@amd.com>
Tested-by: Vikram B <vikram.b@amd.com>
Tested-by: Raghavendra Swamy <raghavendra.swamy@amd.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: use mmc_send_status to check hw_reset
Johan Rudholm [Tue, 4 Nov 2014 15:07:03 +0000 (16:07 +0100)]
mmc: core: use mmc_send_status to check hw_reset

Signed-off-by: Johan Rudholm <johanru@axis.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-s3c: Check if clk_set_rate() succeeds
Mark Brown [Tue, 4 Nov 2014 12:26:42 +0000 (12:26 +0000)]
mmc: sdhci-s3c: Check if clk_set_rate() succeeds

It is possible that we may fail to set the clock rate, if we do so then
log the failure and don't bother reprogramming the IP.

Signed-off-by: Mark Brown <broonie@linaro.org>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: atmel-mci: add runtime pm support
Wenyou Yang [Thu, 30 Oct 2014 04:00:41 +0000 (12:00 +0800)]
mmc: atmel-mci: add runtime pm support

Add runtime pm support to atmel mci controller.
Use runtime pm APIs to enable/disable atmel mci's clock.
Use runtime autosuspend APIs to enable auto suspend delay.

Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
[Ulf: Fixed compile error]

10 years agommc: mmc_test: Extend "Badly aligned" tests for 8-byte alignment
Adrian Hunter [Tue, 4 Nov 2014 10:42:49 +0000 (12:42 +0200)]
mmc: mmc_test: Extend "Badly aligned" tests for 8-byte alignment

The "Badly aligned" tests, test reading/writing with alignments
of 1,2 and 3.  SDHCI now has 64-bit ADMA which has 8-byte
alignment, so extend the tests to test up to 7.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pci: Add 64-bit DMA support
Adrian Hunter [Tue, 4 Nov 2014 10:42:48 +0000 (12:42 +0200)]
mmc: sdhci-pci: Add 64-bit DMA support

Set a 64-bit DMA mask when using 64-bit DMA.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-acpi: Add 64-bit DMA support
Adrian Hunter [Tue, 4 Nov 2014 10:42:47 +0000 (12:42 +0200)]
mmc: sdhci-acpi: Add 64-bit DMA support

Set the DMA mask during the first call to ->enable_dma() to
make use of the SDHCI_USE_64_BIT_DMA flag.

This patch is dependent on
commit 8a2f38ddfeb526c30b3ec209468172a30a38d996 ("ACPI / platform: provide default DMA mask")
which provides the dev->dma_mask pointer without
which dma_set_mask_and_coherent() will always fail.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Add 64-bit ADMA support
Adrian Hunter [Tue, 4 Nov 2014 10:42:46 +0000 (12:42 +0200)]
mmc: sdhci: Add 64-bit ADMA support

Add 64-bit ADMA support including:
- add 64-bit ADMA descriptor
- add SDHCI_USE_64_BIT_DMA flag
- set upper 32-bits of DMA addresses
- ability to select 64-bit ADMA
- ability to use 64-bit ADMA sizes and alignment
- display "ADMA 64-bit" when host is added

It is assumed that a 64-bit capable device has set a 64-bit DMA mask
and *must* do 64-bit DMA.  A driver has the opportunity to change
that during the first call to ->enable_dma().  Similarly
SDHCI_QUIRK2_BROKEN_64_BIT_DMA must be left to the drivers to
implement.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Define ADMA descriptor structure
Adrian Hunter [Tue, 4 Nov 2014 10:42:45 +0000 (12:42 +0200)]
mmc: sdhci: Define ADMA descriptor structure

Define the ADMA descriptor structure instead of
using manual offsets and casts.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Define ADMA constants
Adrian Hunter [Tue, 4 Nov 2014 10:42:44 +0000 (12:42 +0200)]
mmc: sdhci: Define ADMA constants

Define all the ADMA constants instead of having numbers
scattered throughout the code.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Define maximum segments
Adrian Hunter [Tue, 4 Nov 2014 10:42:43 +0000 (12:42 +0200)]
mmc: sdhci: Define maximum segments

Define the maximum number of segments instead of
having the constant 128 appearing in the code in
various places.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Parameterize ADMA sizes and alignment
Adrian Hunter [Tue, 4 Nov 2014 10:42:42 +0000 (12:42 +0200)]
mmc: sdhci: Parameterize ADMA sizes and alignment

In preparation for 64-bit ADMA, parameterize ADMA sizes
and alignment.  64-bit ADMA has a larger descriptor
because it contains a 64-bit address instead of a 32-bit
address.  Also data must be 8-byte aligned instead
of 4-byte aligned.  Consequently, sdhci_host members
are added for descriptor, table, and buffer sizes
and alignment.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Use 'void *' for not 'u8 *' for ADMA data
Adrian Hunter [Tue, 4 Nov 2014 10:42:41 +0000 (12:42 +0200)]
mmc: sdhci: Use 'void *' for not 'u8 *' for ADMA data

It is kernel-style to use 'void *' for anonymous data.
This is being applied to the ADMA bounce buffer which
contains unaligned bytes, and to the ADMA descriptor
table which will contain 32-bit ADMA descriptors
or 64-bit ADMA descriptors when support is added.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Add sdhci_adma_mark_end()
Adrian Hunter [Tue, 4 Nov 2014 10:42:40 +0000 (12:42 +0200)]
mmc: sdhci: Add sdhci_adma_mark_end()

In preparation for 64-bit ADMA, separate out code
that touches the ADMA descriptor by adding
sdhci_adma_mark_end().

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Rename adma_desc to adma_table
Adrian Hunter [Tue, 4 Nov 2014 10:42:39 +0000 (12:42 +0200)]
mmc: sdhci: Rename adma_desc to adma_table

In preparation for 64-bit ADMA, rename adma_desc to
adma_table.  That is because members will be added
for descriptor size and table size, so using adma_desc
(which is the table) is confusing.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Rename two ADMA-related functions for consistency
Adrian Hunter [Tue, 4 Nov 2014 10:42:38 +0000 (12:42 +0200)]
mmc: sdhci: Rename two ADMA-related functions for consistency

Rename sdhci_set_adma_desc to sdhci_adma_write_desc and
sdhci_show_adma_error to sdhci_adma_show_error so that
all ADMA functions start with sdhci_adma_.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Fix ADMA table size warning
Adrian Hunter [Tue, 4 Nov 2014 10:42:37 +0000 (12:42 +0200)]
mmc: sdhci: Fix ADMA table size warning

The intent of the warning is to warn if the ADMA table
overflows.  However there can be one more 'end' entry
so the condition should be adjusted accordingly.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Fix ADMA page boundary warnings
Adrian Hunter [Tue, 4 Nov 2014 10:42:36 +0000 (12:42 +0200)]
mmc: sdhci: Fix ADMA page boundary warnings

Bytes are being copied from/to a single page.  The intent
of the warning is to warn if the page boundary is crossed.
There are two problems.  First, PAGE_MASK is mistaken for
(PAGE_SIZE - 1).  Secondly, instead of using the number
of bytes to copy, the warning is using the maximum that
that value could be.  Fix both.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci: Fix incorrect ADMA2 descriptor table size
Adrian Hunter [Tue, 4 Nov 2014 10:42:35 +0000 (12:42 +0200)]
mmc: sdhci: Fix incorrect ADMA2 descriptor table size

The ADMA2 descriptor table size was being calculated incorrectly
Fix it.

Note that it has been wrong for a long time and likely has not
caused any problems because of a combination of 1) not needing
alignment descriptors for block operations 2) more memory being
allocated than was requested 3) the use of
SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC which does not use an extra
descriptor for the end marker.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: host: atmel-mci: Add support for non-removable slots
Timo Kokkonen [Mon, 3 Nov 2014 11:12:59 +0000 (13:12 +0200)]
mmc: host: atmel-mci: Add support for non-removable slots

Add support for non-removable slots which have no card detection GPIO
and which should not be polled for a card change.

Signed-off-by: Timo Kokkonen <timo.kokkonen@offcode.fi>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pxav3: Document clocks and additional clock-names property
Sebastian Hesselbarth [Tue, 21 Oct 2014 09:22:41 +0000 (11:22 +0200)]
mmc: sdhci-pxav3: Document clocks and additional clock-names property

Now that sdhci-pxav3 driver allows to have more than one IP clock defined,
document both clocks and clock-names properties.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pxav3: Get optional core clock
Sebastian Hesselbarth [Tue, 21 Oct 2014 09:22:40 +0000 (11:22 +0200)]
mmc: sdhci-pxav3: Get optional core clock

Besides the I/O clock, some PXAv3 SDHCI IP also requires a core clock to
be enabled. Add an optional core clock to the corresponding driver.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pxav3: Try to get named I/O clock first
Sebastian Hesselbarth [Tue, 21 Oct 2014 09:22:39 +0000 (11:22 +0200)]
mmc: sdhci-pxav3: Try to get named I/O clock first

With support for more than one clock, we'll need to distinguish between
the clock by name. Change clock probing to first try to get "io" clock
before falling back to unnamed clock.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-pxav3: Move I/O clock to private data
Sebastian Hesselbarth [Tue, 21 Oct 2014 09:22:38 +0000 (11:22 +0200)]
mmc: sdhci-pxav3: Move I/O clock to private data

As we are using references to the I/O clock throughout the driver,
move it to the private data. Also, in preparation for core clock,
rename it to clk_io.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-of-arasan: Omit superfluous error messages
Mike Looijmans [Tue, 28 Oct 2014 07:53:21 +0000 (08:53 +0100)]
mmc: sdhci-of-arasan: Omit superfluous error messages

sdhci_add_host and sdhci_platfm_init already report failure,
so don't emit error messages when a failure occurs. This prevents
occurences of "deferred" messages when required power supplies
are not ready for operation yet.

Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Convert to use kzalloc() for CXD register buffers
Ulf Hansson [Fri, 17 Oct 2014 10:00:56 +0000 (12:00 +0200)]
mmc: core: Convert to use kzalloc() for CXD register buffers

While allocating buffers for CXD data, let's use kzalloc() to make sure
those are zeroed.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Don't handle buffers on stack while fetching CXD registers
Ulf Hansson [Fri, 17 Oct 2014 09:58:24 +0000 (11:58 +0200)]
mmc: core: Don't handle buffers on stack while fetching CXD registers

Due to previous patches, all callers of mmc_send_cxd_data() now
allocates their buffers from the heap. This enables us to simplify
mmc_send_cxd_data() by removing the support of handling buffers, which
are allocated from the stack.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove the redundant mmc_send_ext_csd() API
Ulf Hansson [Fri, 17 Oct 2014 09:54:22 +0000 (11:54 +0200)]
mmc: core: Remove the redundant mmc_send_ext_csd() API

Previous patches has replaced the calls to mmc_send_ext_csd() into
mmc_get_ext_csd(), thus mmc_send_ext_csd() has become redundant. Let's
remove it.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Use mmc_get_ext_csd() instead of mmc_send_ext_csd()
Ulf Hansson [Fri, 17 Oct 2014 09:48:23 +0000 (11:48 +0200)]
mmc: core: Use mmc_get_ext_csd() instead of mmc_send_ext_csd()

By using mmc_get_ext_csd() in favor of mmc_send_ext_csd, we decrease
code duplication.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: block: Use mmc_get_ext_csd() instead of mmc_send_ext_csd()
Ulf Hansson [Fri, 17 Oct 2014 09:39:05 +0000 (11:39 +0200)]
mmc: block: Use mmc_get_ext_csd() instead of mmc_send_ext_csd()

By using mmc_get_ext_csd() in favor of mmc_send_ext_csd, we decrease
code duplication.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Export mmc_get_ext_csd()
Ulf Hansson [Fri, 17 Oct 2014 09:32:32 +0000 (11:32 +0200)]
mmc: core: Export mmc_get_ext_csd()

Callers of mmc_send_ext_csd() will be able to decrease code duplication
by using mmc_get_ext_csd() instead. Let's make it available.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Don't panic when fetching EXT_CSD
Ulf Hansson [Thu, 16 Oct 2014 15:00:39 +0000 (17:00 +0200)]
mmc: core: Don't panic when fetching EXT_CSD

Instead of doing BUG_ON(), return an error code.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Let's callers of from mmc_get_ext_csd() do error handling
Ulf Hansson [Mon, 20 Oct 2014 12:08:16 +0000 (14:08 +0200)]
mmc: core: Let's callers of from mmc_get_ext_csd() do error handling

The callers of mmc_get_ext_csd() need the flexibility to handle errors
themselves, because they behave differently.

Let's clean up mmc_get_ext_csd() with its friends and adopt the error
handling as stated above.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Fetch and decode EXT_CSD from mmc_read_ext_csd()
Ulf Hansson [Mon, 20 Oct 2014 11:37:24 +0000 (13:37 +0200)]
mmc: core: Fetch and decode EXT_CSD from mmc_read_ext_csd()

As a step in cleaning up code around reading/decoding EXT_CSD, convert
the current mmc_read_ext_csd(), to handle both fetching the EXT_CSD
and decoding its data.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Add helper function for EXT_CSD support
Ulf Hansson [Mon, 20 Oct 2014 09:33:53 +0000 (11:33 +0200)]
mmc: core: Add helper function for EXT_CSD support

The helper function mmc_can_ext_csd() will return a positive value if
the card supports the EXT_CSD register. Start using it at relavant
places in the mmc core.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove unnecessary 'out of memory' message
Ulf Hansson [Tue, 21 Oct 2014 15:16:14 +0000 (17:16 +0200)]
mmc: core: Remove unnecessary 'out of memory' message

Rely on the prints handled internally by kmalloc().

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove redundant check of max_dtr while selecting timings
Ulf Hansson [Mon, 20 Oct 2014 09:49:21 +0000 (11:49 +0200)]
mmc: core: Remove redundant check of max_dtr while selecting timings

If the MMC spec version is < CSD_SPEC_VER_4, there aren't support for
the EXT_CSD register. Since max_dtr is fetched from there, it will
default to zero, which thus isn't needed to verify.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove redundant check while selecting powerclass
Ulf Hansson [Mon, 20 Oct 2014 09:18:41 +0000 (11:18 +0200)]
mmc: core: Remove redundant check while selecting powerclass

The validation of the buswidth and the MMC spec version in
__mmc_select_powerclass() is redundant, let's remove it.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove duplicated definition of mmc_send_ext_csd()
Ulf Hansson [Fri, 17 Oct 2014 09:16:57 +0000 (11:16 +0200)]
mmc: core: Remove duplicated definition of mmc_send_ext_csd()

mmc_send_ext_csd() is an exported function used by both the mmc core
and the mmc block layer. Let's remove the local duplicated definition
in the mmc core.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: Remove mmc_free_ext_csd()
Ulf Hansson [Thu, 16 Oct 2014 14:18:51 +0000 (16:18 +0200)]
mmc: core: Remove mmc_free_ext_csd()

Let callers of mmc_free_ext_csd() do kfree() directly instead.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: Remove old card detect infrastructure
Doug Anderson [Tue, 14 Oct 2014 16:33:09 +0000 (09:33 -0700)]
mmc: dw_mmc: Remove old card detect infrastructure

The dw_mmc driver had a bunch of code that ran whenever a card was
ejected and inserted.  However, this code was old and crufty and
should be removed.  Some evidence that it's really not needed:

1. Is is supposed to be legal to use 'cd-gpio' on dw_mmc instead of
   using the built-in card detect mechanism.  The 'cd-gpio' code
   doesn't run any of the crufty old code but yet still works.

2. While looking at this, I realized that my old change (369ac86 mmc:
   dw_mmc: don't queue up a card detect at slot startup) actually
   castrated the old code a little bit already and nobody noticed.
   Specifically "last_detect_state" was left as 0 at bootup.  That
   means that on the first card removal none of the crufty code ran.

3. I can run "while true; do dd if=/dev/mmcblk1 of=/dev/null; done"
   while ejecting and inserting an SD Card and the world doesn't
   explode.

If some of the crufty old code is actually needed, we should justify
it and also put it in some place where it will be run even with
"cd-gpio".

Note that in my case I'm using the "cd-gpio" mechanism but for various
reasons the hardware triggers a dw_mmc "card detect" at bootup.  That
was actually causing a real bug.  The card detect workqueue was
running while the system was trying to enumerate the card.  The
"present != slot->last_detect_state" triggered and we were doing all
kinds of crazy stuff and messing up enumeration.  The new mechanism of
just asking the core to check the card is much safer and then the
bogus interrupt doesn't hurt.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Tested-by: Jaehoon Chung <jh80.chung@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: alim.akhtar <alim.akhtar@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: core: silence a shift wrapping warning
Dan Carpenter [Thu, 23 Oct 2014 11:37:00 +0000 (14:37 +0300)]
mmc: core: silence a shift wrapping warning

Presumably ->slotno is normally fairly small and the shift doesn't wrap
but static checkers will complain about it.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: sdhci-of-arasan: Use signed formatting in error messages
Mike Looijmans [Thu, 23 Oct 2014 11:31:00 +0000 (13:31 +0200)]
mmc: sdhci-of-arasan: Use signed formatting in error messages

"ret" is a signed int, so use "%d" in format strings instead of "%u".
This prevents cryptic codes in error messages like this:
sdhci-arasan e0101000.sdhci: platform register failed (4294966779)

Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
Reviewed-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agoavr32: remove mach/atmel-mci.h
Alexandre Belloni [Fri, 17 Oct 2014 08:26:38 +0000 (10:26 +0200)]
avr32: remove mach/atmel-mci.h

Use the generic platform_data header file instead of mach/atmel-mci.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agoARM: at91: remove mach/atmel-mci.h
Alexandre Belloni [Fri, 17 Oct 2014 08:26:37 +0000 (10:26 +0200)]
ARM: at91: remove mach/atmel-mci.h

Use the generic platform_data header file instead of mach/atmel-mci.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: atmel-mci: move mach header to platform_data
Alexandre Belloni [Fri, 17 Oct 2014 08:26:36 +0000 (10:26 +0200)]
mmc: atmel-mci: move mach header to platform_data

Move the mach header that can come either from arm/mach-at91 or avr32 to
platform_data to be able to switch the AT91 platforms to multiplatform.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
[Ulf: Fixed compile error]

10 years agommc: core: Report firmware version for eMMC 5.0 devices.
Gwendal Grignou [Thu, 16 Oct 2014 18:27:16 +0000 (11:27 -0700)]
mmc: core: Report firmware version for eMMC 5.0 devices.

For eMMC 5.0 compliant device, firmware version is stored in ext_csd.
Report firmware as a 64bit hexa decimal. Vendor can use hexa or ascii
string to report firmware version.
Also add FFU related EXT_CSD register and note if the device is FFU capable.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: rockchip: Don't recalc the clock when it goes off
Doug Anderson [Tue, 14 Oct 2014 16:39:12 +0000 (09:39 -0700)]
mmc: dw_mmc: rockchip: Don't recalc the clock when it goes off

The "set_ios" function is called with a clock of 0 when the clock is
turning off.  There's no reason to go through all the extra Rockchip
logic (whose goal is to make sure DIV is 0 or 1) in that case.  The
Rockchip logic happened to work because the CCF will pick the lowest
possible rate when you ask it for a clock of 0, but it's silly to go
through all the remuxing and adjusting for no reason.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: Change signal voltage error to dev_dbg()
Doug Anderson [Sat, 11 Oct 2014 04:16:16 +0000 (21:16 -0700)]
mmc: dw_mmc: Change signal voltage error to dev_dbg()

In (28f92b5 mmc: core: Try other signal levels during power up) we can
see that there are times when it's valid to try several signal
voltages.  Don't print an ugly error in the logs when that happens.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
10 years agommc: dw_mmc: Reset DMA before enabling IDMAC
Sonny Rao [Thu, 16 Oct 2014 16:58:05 +0000 (09:58 -0700)]
mmc: dw_mmc: Reset DMA before enabling IDMAC

We've already got a reset of DMA after it's done.  Add one before we
start DMA too.  This fixes a data corruption on Rockchip SoCs which
will get bad data when doing a DMA transfer after doing a PIO transfer.

We tested this on an Exynos 5800 with HS200 and didn't notice any
difference in sequential read throughput.

Signed-off-by: Sonny Rao <sonnyrao@chromium.org>
Signed-off-by: Doug Anderson <dianders@chromium.org>
Tested-by: Doug Anderson <dianders@chromium.org>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>