25 Apr, 2017
40 commits
-
This patch adds basic tuning which changes the rx clock phase only
until a working setting is found.On a Odroid C2 with 128GB eMMC card and 200 MHz MMC clock only
180° rx clock phase make the system boot w/o CRC errors.With other MMC devices / clock speeds this might be different,
therefore don't change the driver config in general.When retuning skip the currently active parameter set. This avoids
the current problematic config to be chosen again if it causes CRC
errors just occasionally.Signed-off-by: Heiner Kallweit
Signed-off-by: Ulf Hansson -
Introduce struct meson_tuning_params for storing the clock phase
configurations. There's no functional change because tx and rx
clock phase were implicitely set to CLK_PHASE_0 before.Signed-off-by: Heiner Kallweit
Signed-off-by: Ulf Hansson -
Annotate big endian values correctly and make sparse happy.
In mmc_app_send_scr remove scr function parameter as it was
updating card->raw_scr anyway.Signed-off-by: Tomas Winkler
Signed-off-by: Ulf Hansson -
Add calling sdhci_get_of_property function to parse sdhci properties.
Signed-off-by: Piotr Sroka
Acked-by: Adrian Hunter
Reviewed-by: Masahiro Yamada
Signed-off-by: Ulf Hansson -
devm_pinctrl_get() returns error pointers, it never returns NULL.
Fixes: 455e5cd6f736 ("mmc: omap_hsmmc: Pin remux workaround to support SDIO interrupt on AM335x")
Signed-off-by: Dan Carpenter
Reviewed-by: Kishon Vijay Abraham I
Signed-off-by: Ulf Hansson -
Add maintainer entry for Marvell Xenon eMMC/SD/SDIO
Host Controller drivers.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Some SoCs have PHY PAD outside Xenon IP.
PHY PAD voltage should match signalling voltage in use.Add generic SoC PHY PAD voltage control interface.
Implement Aramda-3700 SoC PHY PAD voltage control.Signed-off-by: Hu Ziji
Tested-by: Russell King
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Marvell Xenon eMMC/SD/SDIO Host Controller contains PHY.
Multiple types of PHYs are supported.Add support to multiple types of PHYs init and configuration.
Add register definitions of PHYs.Xenon PHY cannot fit in kernel common PHY framework.
Xenon SDHC PHY register is a part of Xenon SDHC register set.
Besides, MMC initialization has to call several PHY functions to
complete timing setting.
Those PHY setting functions have to access SDHC registers and know
current MMC setting, such as bus width, clock frequency and
speed mode.
As a result, implement Xenon PHY in MMC host directory.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Add Xenon eMMC/SD/SDIO host controller core functionality.
Add Xenon specific initialization process.
Add Xenon specific mmc_host_ops APIs.
Add Xenon specific register definitions.Add CONFIG_MMC_SDHCI_XENON support in drivers/mmc/host/Kconfig.
Marvell Xenon SDHC conforms to SD Physical Layer Specification
Version 3.01 and is designed according to the guidelines provided
in the SD Host Controller Standard Specification Version 3.00.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Marvell Xenon SDHC can support eMMC/SD/SDIO.
Add Xenon-specific properties.
Also add properties for Xenon PHY setting.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Acked-by: Rob Herring
Signed-off-by: Ulf Hansson -
Export sdhci_enable_sdio_irq() from sdhci.c.
Thus vendor SDHC driver can implement its specific SDIO irq
control.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Acked-by: Adrian Hunter
Signed-off-by: Ulf Hansson -
Export sdhci_start_signal_voltage_switch() from sdhci.c.
Thus vendor sdhci driver can implement its own signal voltage
switch routine.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Acked-by: Adrian Hunter
Signed-off-by: Ulf Hansson -
Export sdhci_set_ios() in sdhci.c.
Thus vendor sdhci driver can implement its own set_ios() routine.Signed-off-by: Hu Ziji
Signed-off-by: Gregory CLEMENT
Acked-by: Adrian Hunter
Signed-off-by: Ulf Hansson -
First version of the binding didn't have the eMMC clock. This patch
allows to not registering the eMMC clock if it is not present in the
device tree. Then the device tree can be backwards compatible.Suggested-by: Stephen Boyd
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Add fixed clock of 400MHz to system controller driver. This clock is
used as SD/eMMC clock source.Signed-off-by: Konstantin Porotchkin
Reviewed-by: Omri Itach
Reviewed-by: Hanna Hawa
[fixed up conflicts, added error handling --rmk]
Signed-off-by: Russell King
Acked-by: Stephen Boyd
Signed-off-by: Gregory CLEMENT
Signed-off-by: Ulf Hansson -
Signed-off-by: Jan Glauber
Signed-off-by: David Daney
Signed-off-by: Steven J. Hill
Signed-off-by: Ulf Hansson -
Add support for switching to DDR mode for eMMC devices.
Signed-off-by: Jan Glauber
Signed-off-by: Ulf Hansson -
Add Support for the scatter-gather DMA available in the
ThunderX MMC units. Up to 16 DMA requests can be processed
together.Signed-off-by: Jan Glauber
Signed-off-by: Ulf Hansson -
Add a platform driver for ThunderX ARM SOCs.
Signed-off-by: Jan Glauber
Signed-off-by: Ulf Hansson -
This core driver will be used by a MIPS platform driver
or by an ARM64 PCI driver. The core driver implements the
mmc_host_ops and slot probe & remove functions.
Callbacks are provided to allow platform specific interrupt
enable and bus locking.The host controller supports:
- up to 4 slots that can contain sd-cards or eMMC chips
- 1, 4 and 8 bit bus width
- SDR and DDR
- transfers up to 52 Mhz (might be less when multiple slots are used)
- DMA read/write
- multi-block read/write (but not stream mode)Voltage is limited to 3.3v and shared for all slots (vmmc and vmmcq).
A global lock for all MMC devices is required because the host
controller is shared.Signed-off-by: Jan Glauber
Signed-off-by: David Daney
Signed-off-by: Steven J. Hill
Signed-off-by: Ulf Hansson -
Add description of Cavium Octeon and ThunderX SOC device tree bindings.
CC: Ulf Hansson
CC: Rob Herring
CC: Mark Rutland
CC: devicetree@vger.kernel.orgSigned-off-by: Jan Glauber
Signed-off-by: David Daney
Signed-off-by: Steven J. Hill
Acked-by: Rob Herring
Signed-off-by: Ulf Hansson -
We have this construction:
if (a && b && !c)
finalize;
else
block;
finalize;Which is equivalent by boolean logic to:
if (!a || !b || c)
block;
finalize;Which is simpler code.
Reviewed-by: Bartlomiej Zolnierkiewicz
Signed-off-by: Linus Walleij
Signed-off-by: Ulf Hansson -
mmc_wait_for_data_req_done() is called in exactly one place,
and having it spread out is making things hard to oversee.
Factor this function into mmc_finalize_areq().Reviewed-by: Bartlomiej Zolnierkiewicz
Signed-off-by: Linus Walleij
Signed-off-by: Ulf Hansson -
"previous" is a better name for the variable storing the previous
asynchronous request, better than the opaque name "data" atleast.
We see that we assign the return status to the returned variable
on all code paths, so we might as well just do that immediately
after calling mmc_finalize_areq().Reviewed-by: Bartlomiej Zolnierkiewicz
Signed-off-by: Linus Walleij
Signed-off-by: Ulf Hansson -
In preparation to reuse the code for CQE support.
Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
In preparation to reuse the code for CQE support.
Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
Factor out data preparation into a separate function mmc_blk_data_prep()
which can be re-used for command queuing.Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
mmc_apply_rel_rw() will be used by Software Command Queuing also. In that
case the command argument is not the block address so change
mmc_apply_rel_rw() to get block address from the request.Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
RPMB does not allow Command Queue commands. Disable and re-enable the
Command Queue when switching.Note that the driver only switches partitions when the queue is empty.
Signed-off-by: Adrian Hunter
Reviewed-by: Harjani Ritesh
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
Normal read and write commands may not be used while the command queue is
enabled. Disable the Command Queue when mmc_test is probed and re-enable it
when it is removed.Signed-off-by: Adrian Hunter
Reviewed-by: Harjani Ritesh
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
Add helper functions to enable or disable the Command Queue.
Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
eMMC can have multiple internal partitions that are represented as separate
disks / queues. However switching between partitions is only done when the
queue is empty. Consequently the array of mmc requests that are queued can
be shared between partitions saving memory.Keep a pointer to the mmc request queue on the card, and use that instead
of allocating a new one for each partition.Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
Change from viewing the requests in progress as 'current' and 'previous',
to viewing them as a queue. The current request is allocated to the first
free slot. The presence of incomplete requests is determined from the
count (mq->qcnt) of entries in the queue. Non-read-write requests (i.e.
discards and flushes) are not added to the queue at all and require no
special handling. Also no special handling is needed for the
MMC_BLK_NEW_REQUEST case.As well as allowing an arbitrarily sized queue, the queue thread function
is significantly simpler.Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
A subsequent patch will remove 'mq->mqrq_cur'. Prepare for that by
assigning it to a local variable.Signed-off-by: Adrian Hunter
Reviewed-by: Linus Walleij
Signed-off-by: Ulf Hansson -
Allows configuring Samsung S3C24XX MMC/SD/SDIO controller using a device
tree.Signed-off-by: Sergio Prado
[Arnd: fix broken conditional expression]
Signed-off-by: Arnd Bergmann
Signed-off-by: Ulf Hansson -
Adds the device tree bindings description for Samsung S3C24XX
MMC/SD/SDIO controller, used as a connectivity interface with external
MMC, SD and SDIO storage mediums.Acked-by: Rob Herring
Signed-off-by: Sergio Prado
Signed-off-by: Ulf Hansson -
Set MMC_CAP_AGGRESSIVE_PM for BYT-related Intel SD card
controllers.Signed-off-by: Azhar Shaikh
Acked-by: Adrian Hunter
Signed-off-by: Ulf Hansson -
Set MMC_CAP_AGGRESSIVE_PM for BYT-related Intel SD card
controllers.Signed-off-by: Azhar Shaikh
Acked-by: Adrian Hunter
Signed-off-by: Ulf Hansson -
Factor out setting the response configuration bits thus further reducing
complexity of function meson_mmc_start_cmd.Signed-off-by: Heiner Kallweit
Reviewed-by: Kevin Hilman
Signed-off-by: Ulf Hansson -
Factor out setting the block size. This also contributes to reducing
complexity of function meson_mmc_start_cmd.Signed-off-by: Heiner Kallweit
Reviewed-by: Kevin Hilman
Signed-off-by: Ulf Hansson