12 Jun, 2017

1 commit

  • There have been reports about SDIO failing with certain WiFi chips in
    descriptor chain mode. SD / eMMC are working fine.

    So let's fall back to bounce buffer mode for command SD_IO_RW_EXTENDED.
    This was reported to fix the error.

    Fixes: 79ed05e329c3 "mmc: meson-gx: add support for descriptor chain mode"
    Signed-off-by: Heiner Kallweit
    Tested-by: Martin Blumenstingl
    Signed-off-by: Ulf Hansson

    Heiner Kallweit
     

27 May, 2017

1 commit

  • Pull MMC fixes from Ulf Hansson:
    "This contains fixes to make the WiFi work again for the ARM64 Hikey
    board.

    Together with a couple of DTS updates for the Hikey board we have also
    extended the mmc pwrseq_simple, to support a new power-off-delay-us DT
    property, as that was required to enable a graceful power off sequence
    for the WiFi chip"

    * tag 'mmc-v4.12-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
    arm64: dts: hikey: Fix WiFi support
    arm64: dts: hi6220: Move board data from the dwmmc nodes to hikey dts
    arm64: dts: hikey: Add the SYS_5V and the VDD_3V3 regulators
    arm64: dts: hi6220: Move the fixed_5v_hub regulator to the hikey dts
    arm64: dts: hikey: Add clock for the pmic mfd
    mfd: dts: hi655x: Add clock binding for the pmic
    mmc: pwrseq_simple: Parse DTS for the power-off-delay-us property
    mmc: dt: pwrseq-simple: Invent power-off-delay-us

    Linus Torvalds
     

23 May, 2017

4 commits

  • If the optional power-off-delay-us property is found, insert the
    corresponding delay after asserting the GPIO during power off. This enables
    a graceful shutdown sequence for some devices.

    Cc: linux-mmc@vger.kernel.org
    Signed-off-by: Ulf Hansson
    Acked-by: Arnd Bergmann

    Ulf Hansson
     
  • The stingray SDHCI hardware supports ACMD12 and automatically
    issues after multi block transfer completed.

    If ACMD12 in SDHCI is disabled, spurious tx done interrupts are seen
    on multi block read command with below error message:

    Got data interrupt 0x00000002 even though no data
    operation was in progress.

    This patch uses SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 to enable
    ACM12 support in SDHCI hardware and suppress spurious interrupt.

    Signed-off-by: Srinath Mannam
    Reviewed-by: Ray Jui
    Reviewed-by: Scott Branden
    Acked-by: Adrian Hunter
    Fixes: b580c52d58d9 ("mmc: sdhci-iproc: add IPROC SDHCI driver")
    Cc:
    Signed-off-by: Ulf Hansson

    Srinath Mannam
     
  • If the regulator probing is not yet finished this driver
    might catch a -EPROBE_DEFER. Returning after this condition
    did not remove the created platform device. On a repeated
    call to the probe function the of_platform_device_create
    fails.

    Calling of_platform_device_destroy after EPROBE_DEFER resolves
    this bug.

    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    Jan Glauber
     
  • In case the DT specifies neither a regulator nor a gpio
    for the shared power the driver will crash accessing the regulator.
    Prevent the crash by checking the regulator before use.

    Use mmc_regulator_get_supply() instead of open coding the same
    logic.

    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    Jan Glauber
     

19 May, 2017

3 commits

  • The devm_gpiod_get_optional() function appends a "-gpios" to the
    string passed to it, so if we want to find the "power-gpios" signal,
    we must pass "power" to this function.

    Fixes: 01d95843335c ("mmc: cavium: Add MMC support for Octeon SOCs.")
    Signed-off-by: David Daney
    [jglauber@cavium.com: removed point after subject line]
    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    David Daney
     
  • OCTEON SoCs with CIU3 do not have interrupt masking local to the MMC
    bus interface. Unfortunately, some even have a diagnostic register at
    the same address of the enable register, which causes the interrupts
    to fire immediately if stored to, thus breaking the driver. The proper
    action on these SoCs is not to touch this register.

    Fixes: 01d95843335c ("mmc: cavium: Add MMC support for Octeon SOCs.")
    Signed-off-by: David Daney
    [jglauber@cavium.com: removed point after subject line]
    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    David Daney
     
  • Currently, the xenon_clean_phy() is only used for freeing phy_params.
    The phy_params is allocated by devm_kzalloc(), there's no need to free
    is explicitly.

    Signed-off-by: Jisheng Zhang
    Acked-by: Hu Ziji
    Acked-by: Adrian Hunter

    Jisheng Zhang
     

11 May, 2017

1 commit

  • Pull hw lockdown support from David Howells:
    "Annotation of module parameters that configure hardware resources
    including ioports, iomem addresses, irq lines and dma channels.

    This allows a future patch to prohibit the use of such module
    parameters to prevent that hardware from being abused to gain access
    to the running kernel image as part of locking the kernel down under
    UEFI secure boot conditions.

    Annotations are made by changing:

    module_param(n, t, p)
    module_param_named(n, v, t, p)
    module_param_array(n, t, m, p)

    to:

    module_param_hw(n, t, hwtype, p)
    module_param_hw_named(n, v, t, hwtype, p)
    module_param_hw_array(n, t, hwtype, m, p)

    where the module parameter refers to a hardware setting

    hwtype specifies the type of the resource being configured. This can
    be one of:

    ioport Module parameter configures an I/O port
    iomem Module parameter configures an I/O mem address
    ioport_or_iomem Module parameter could be either (runtime set)
    irq Module parameter configures an I/O port
    dma Module parameter configures a DMA channel
    dma_addr Module parameter configures a DMA buffer address
    other Module parameter configures some other value

    Note that the hwtype is compile checked, but not currently stored (the
    lockdown code probably won't require it). It is, however, there for
    future use.

    A bonus is that the hwtype can also be used for grepping.

    The intention is for the kernel to ignore or reject attempts to set
    annotated module parameters if lockdown is enabled. This applies to
    options passed on the boot command line, passed to insmod/modprobe or
    direct twiddling in /sys/module/ parameter files.

    The module initialisation then needs to handle the parameter not being
    set, by (1) giving an error, (2) probing for a value or (3) using a
    reasonable default.

    What I can't do is just reject a module out of hand because it may
    take a hardware setting in the module parameters. Some important
    modules, some ipmi stuff for instance, both probe for hardware and
    allow hardware to be manually specified; if the driver is aborts with
    any error, you don't get any ipmi hardware.

    Further, trying to do this entirely in the module initialisation code
    doesn't protect against sysfs twiddling.

    [!] Note that in and of itself, this series of patches should have no
    effect on the the size of the kernel or code execution - that is
    left to a patch in the next series to effect. It does mark
    annotated kernel parameters with a KERNEL_PARAM_FL_HWPARAM flag in
    an already existing field"

    * tag 'hwparam-20170420' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs: (38 commits)
    Annotate hardware config module parameters in sound/pci/
    Annotate hardware config module parameters in sound/oss/
    Annotate hardware config module parameters in sound/isa/
    Annotate hardware config module parameters in sound/drivers/
    Annotate hardware config module parameters in fs/pstore/
    Annotate hardware config module parameters in drivers/watchdog/
    Annotate hardware config module parameters in drivers/video/
    Annotate hardware config module parameters in drivers/tty/
    Annotate hardware config module parameters in drivers/staging/vme/
    Annotate hardware config module parameters in drivers/staging/speakup/
    Annotate hardware config module parameters in drivers/staging/media/
    Annotate hardware config module parameters in drivers/scsi/
    Annotate hardware config module parameters in drivers/pcmcia/
    Annotate hardware config module parameters in drivers/pci/hotplug/
    Annotate hardware config module parameters in drivers/parport/
    Annotate hardware config module parameters in drivers/net/wireless/
    Annotate hardware config module parameters in drivers/net/wan/
    Annotate hardware config module parameters in drivers/net/irda/
    Annotate hardware config module parameters in drivers/net/hamradio/
    Annotate hardware config module parameters in drivers/net/ethernet/
    ...

    Linus Torvalds
     

03 May, 2017

1 commit

  • Pull MMC updates from Ulf Hansson:
    "MMC core:
    - Continue to re-factor code to prepare for eMMC CMDQ and blkmq support
    - Introduce queue semantics to prepare for eMMC CMDQ and blkmq support
    - Add helper functions to manage temporary enable/disable of eMMC CMDQ
    - Improve wait-busy detection for SDIO

    MMC host:
    - cavium: Add driver to support Cavium controllers
    - cavium: Extend Cavium driver to support Octeon and ThunderX SOCs
    - bcm2835: Add new driver for Broadcom BCM2835 controller
    - sdhci-xenon: Add driver to support Marvell Xenon SDHCI controller
    - sdhci-tegra: Add support for the Tegra186 variant
    - sdhci-of-esdhc: Support for UHS-I SD cards
    - sdhci-of-esdhc: Support for eMMC HS200 cards
    - sdhci-cadence: Add eMMC HS400 enhanced strobe support
    - sdhci-esdhc-imx: Reset tuning circuit when needed
    - sdhci-pci: Modernize and clean-up some PM related code
    - sdhci-pci: Avoid re-tuning at runtime PM for some Intel devices
    - sdhci-pci|acpi: Use aggressive PM for some Intel BYT controllers
    - sdhci: Re-factoring and modernizations
    - sdhci: Optimize delay loops
    - sdhci: Improve register dump print format
    - sdhci: Add support for the Command Queue Engine
    - meson-gx: Various improvements and clean-ups
    - meson-gx: Add support for CMD23
    - meson-gx: Basic tuning support to avoid CRC errors
    - s3cmci: Enable probing via DT
    - mediatek: Improve tuning support for eMMC HS200 and HS400 mode
    - tmio: Improve DMA support
    - tmio: Use correct response for CMD12
    - dw_mmc: Minor improvements and clean-ups"

    * tag 'mmc-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: (148 commits)
    mmc: sdhci-of-esdhc: limit SD clock for ls1012a/ls1046a
    mmc: sdhci-of-esdhc: poll ESDHC_CLOCK_STABLE bit with udelay
    mmc: sdhci-xenon: Fix default value of LOGIC_TIMING_ADJUST for eMMC5.0 PHY
    mmc: sdhci-xenon: Fix the work flow in xenon_remove().
    MIPS: Octeon: cavium_octeon_defconfig: Enable Octeon MMC
    mmc: sdhci-xenon: Remove redundant dev_err call in get_dt_pad_ctrl_data()
    mmc: cavium: Use module_pci_driver to simplify the code
    mmc: cavium: Add MMC support for Octeon SOCs.
    mmc: cavium: Fix detection of block or byte addressing.
    mmc: core: Export API to allow hosts to get the card address
    mmc: sdio: Fix sdio wait busy implement limitation
    mmc: sdhci-esdhc-imx: reset tuning circuit when power on mmc card
    clk: apn806: fix spelling mistake: "mising" -> "missing"
    mmc: sdhci-of-esdhc: add delay between tuning cycles
    mmc: sdhci: Control the delay between tuning commands
    mmc: sdhci-of-esdhc: add tuning support
    mmc: sdhci-of-esdhc: add support for signal voltage switch
    mmc: sdhci-of-esdhc: add peripheral clock support
    mmc: sdhci-pci: Allow for 3 bytes from Intel DSM
    mmc: cavium: Fix a shift wrapping bug
    ...

    Linus Torvalds
     

02 May, 2017

1 commit

  • Pull block layer updates from Jens Axboe:

    - Add BFQ IO scheduler under the new blk-mq scheduling framework. BFQ
    was initially a fork of CFQ, but subsequently changed to implement
    fairness based on B-WF2Q+, a modified variant of WF2Q. BFQ is meant
    to be used on desktop type single drives, providing good fairness.
    From Paolo.

    - Add Kyber IO scheduler. This is a full multiqueue aware scheduler,
    using a scalable token based algorithm that throttles IO based on
    live completion IO stats, similary to blk-wbt. From Omar.

    - A series from Jan, moving users to separately allocated backing
    devices. This continues the work of separating backing device life
    times, solving various problems with hot removal.

    - A series of updates for lightnvm, mostly from Javier. Includes a
    'pblk' target that exposes an open channel SSD as a physical block
    device.

    - A series of fixes and improvements for nbd from Josef.

    - A series from Omar, removing queue sharing between devices on mostly
    legacy drivers. This helps us clean up other bits, if we know that a
    queue only has a single device backing. This has been overdue for
    more than a decade.

    - Fixes for the blk-stats, and improvements to unify the stats and user
    windows. This both improves blk-wbt, and enables other users to
    register a need to receive IO stats for a device. From Omar.

    - blk-throttle improvements from Shaohua. This provides a scalable
    framework for implementing scalable priotization - particularly for
    blk-mq, but applicable to any type of block device. The interface is
    marked experimental for now.

    - Bucketized IO stats for IO polling from Stephen Bates. This improves
    efficiency of polled workloads in the presence of mixed block size
    IO.

    - A few fixes for opal, from Scott.

    - A few pulls for NVMe, including a lot of fixes for NVMe-over-fabrics.
    From a variety of folks, mostly Sagi and James Smart.

    - A series from Bart, improving our exposed info and capabilities from
    the blk-mq debugfs support.

    - A series from Christoph, cleaning up how handle WRITE_ZEROES.

    - A series from Christoph, cleaning up the block layer handling of how
    we track errors in a request. On top of being a nice cleanup, it also
    shrinks the size of struct request a bit.

    - Removal of mg_disk and hd (sorry Linus) by Christoph. The former was
    never used by platforms, and the latter has outlived it's usefulness.

    - Various little bug fixes and cleanups from a wide variety of folks.

    * 'for-4.12/block' of git://git.kernel.dk/linux-block: (329 commits)
    block: hide badblocks attribute by default
    blk-mq: unify hctx delay_work and run_work
    block: add kblock_mod_delayed_work_on()
    blk-mq: unify hctx delayed_run_work and run_work
    nbd: fix use after free on module unload
    MAINTAINERS: bfq: Add Paolo as maintainer for the BFQ I/O scheduler
    blk-mq-sched: alloate reserved tags out of normal pool
    mtip32xx: use runtime tag to initialize command header
    scsi: Implement blk_mq_ops.show_rq()
    blk-mq: Add blk_mq_ops.show_rq()
    blk-mq: Show operation, cmd_flags and rq_flags names
    blk-mq: Make blk_flags_show() callers append a newline character
    blk-mq: Move the "state" debugfs attribute one level down
    blk-mq: Unregister debugfs attributes earlier
    blk-mq: Only unregister hctxs for which registration succeeded
    blk-mq-debugfs: Rename functions for registering and unregistering the mq directory
    blk-mq: Let blk_mq_debugfs_register() look up the queue name
    blk-mq: Register /queue/mq after having registered /queue
    ide-pm: always pass 0 error to ide_complete_rq in ide_do_devset
    ide-pm: always pass 0 error to __blk_end_request_all
    ..

    Linus Torvalds
     

28 Apr, 2017

4 commits


25 Apr, 2017

24 commits

  • There is a error message within devm_ioremap_resource
    already, so remove the dev_err call to avoid redundant
    error message.

    Signed-off-by: Wei Yongjun
    Signed-off-by: Ulf Hansson

    Wei Yongjun
     
  • Use the module_pci_driver() macro to make the code simpler
    by eliminating module_init and module_exit calls.

    Signed-off-by: Wei Yongjun
    Acked-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    Wei Yongjun
     
  • Add platform driver for Octeon SOCs.

    Signed-off-by: Steven J. Hill
    Signed-off-by: David Daney
    Signed-off-by: Ulf Hansson

    Steven J. Hill
     
  • Use the mmc_card_is_blockaddr() function to properly detect if the
    card uses byte or block addressing.

    Signed-off-by: Steven J. Hill
    Acked-by: David Daney
    Signed-off-by: Ulf Hansson

    Steven J. Hill
     
  • Some hosts controllers, like Cavium, needs to know whether the card
    operates in byte- or block-address mode. Therefore export a new API,
    mmc_card_is_blockaddr(), which provides this information.

    Signed-off-by: Ulf Hansson
    Signed-off-by: Steven J. Hill
    Acked-by: David Daney

    Ulf Hansson
     
  • The host may issue an I/O abort by writing to the CCCR at any time
    during I/O read operation via CMD52. And host may need suspend
    transcation during write busy stage in SDIO suspend/resume scenario.
    >From other side, a card may accept CMD52 during data transfer phase.

    Previous implement would block issuing above command in busy stage.
    It cause function driver can't implement as proper way and has no
    opportunity to do some coverage in error case via I/O abort etc.

    We need bypass some necessary operation during busy check stage.

    Signed-off-by: Jiajie Hao
    Signed-off-by: Ulf Hansson

    jiajie.hao@mediatek.com
     
  • USDHC tuning circuit should be reset before every time card enumeration
    or re-enumeration.

    SD3.0 card need tuning. For SDR104 card, when system suspend in standby
    mode, and then resume back, the IO timing is still SDR104(tuned) which
    may result in card re-enumeration fail in low card speed(400khz) for some
    cards. And we did meet the issue that in certain probability, SDR104
    card meet mmc command CRC/Timeout error when send CMD2 during mmc bus
    resume.

    This patch reset the tuning circuit when the ios timing is
    MMC_TIMING_LEGACY/MMC_TIMING_MMC_HS/MMC_TIMING_SD_HS, which means both
    mmc_power_up() and mmc_power_off() will reset the tuning circuit.

    Signed-off-by: Haibo Chen
    Acked-by: Dong Aisheng
    Acked-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    Haibo Chen
     
  • It's observed that eSDHC needed delay between tuning cycles for
    HS200 successful tuning. This patch is to set 1ms delay for that.

    Signed-off-by: Yangbo Lu
    Acked-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    yangbo lu
     
  • The delay between tuning commands for SD cards is not part of the
    specification. A driver that needs it probably needs it for eMMC
    too, whereas most drivers would probably like to set it to 0. Make
    it a host member (host->tuning_delay) that defaults to the existing
    behaviour. Drivers can set it to zero to eliminate the delay, or
    set it to a positive value to always have a delay.

    Signed-off-by: Adrian Hunter
    Signed-off-by: Yangbo Lu
    Signed-off-by: Ulf Hansson

    Adrian Hunter
     
  • eSDHC uses tuning block for tuning procedure. So the tuning
    block control register must be configured properly before tuning.

    Signed-off-by: Yangbo Lu
    Acked-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    yangbo lu
     
  • eSDHC supports signal voltage switch from 3.3v to 1.8v by
    eSDHC_PROCTL[VOLT_SEL] bit. This bit changes the value of output
    signal SDHC_VS, and there must be a control circuit out of eSDHC
    to change the signal voltage according to SDHC_VS output signal.

    Signed-off-by: Yangbo Lu
    Acked-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    yangbo lu
     
  • eSDHC could select peripheral clock or platform clock as clock source by
    the PCS bit of eSDHC Control Register, and this bit couldn't be reset by
    software reset for all. In default, the platform clock is used. But we have
    to use peripheral clock since it has a higher frequency to support eMMC
    HS200 mode and SD UHS-I mode. This patch is to add peripheral clock support
    and use it instead of platform clock if it's declared in eSDHC dts node.

    Signed-off-by: Yangbo Lu
    Acked-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    yangbo lu
     
  • The DSM used by some Intel controllers can return a 3 byte package. Allow
    for that by using memcpy to copy the bytes.

    Signed-off-by: Adrian Hunter
    Signed-off-by: Ulf Hansson

    Adrian Hunter
     
  • "dat" is a u64 and "shift" starts as 54 so this is a shift wrapping bug.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Ulf Hansson

    Dan Carpenter
     
  • Add a pointer check to prevent this smatch warning:

    drivers/mmc/host/cavium.c:803 cvm_mmc_request()
    error: we previously assumed 'cmd->data' could be null (see line 782)

    This is a theoretical fix because MMC_CMD_ADTC seems to imply
    that cmd->data is not null. Nevertheless checking cmd->data
    before using it improves readability.

    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    Jan Glauber
     
  • Remove redundant mmc->card check reported by smatch:

    drivers/mmc/host/cavium.c:694 cvm_mmc_dma_request()
    warn: variable dereferenced before check 'mmc->card' (see line 675)

    Signed-off-by: Jan Glauber
    Signed-off-by: Ulf Hansson

    Jan Glauber
     
  • So far a bounce buffer is used to serialize the scatterlist(s).
    This overhead can be avoided by switching to descriptor chain mode.
    As result the performance is drastically improved. On a Odroid-C2 with
    a 128 GB eMMC module raw reads reach 140 MB/s.

    Prerequisite for descriptor chain mode is that all scatterlist buffers
    are 8 byte aligned for 64-bit DMA. That's not always the case, at least
    the brcmfmac SDIO WiFi driver is known to cause problems.

    Therefore, for each request, check upfront whether all scatterlist
    buffers are 8 byte aligned and fall back to bounce buffer mode if
    that's not the case.

    Signed-off-by: Heiner Kallweit
    Signed-off-by: Ulf Hansson

    Heiner Kallweit
     
  • 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

    Heiner Kallweit
     
  • 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

    Heiner Kallweit
     
  • 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

    Winkler, Tomas
     
  • 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

    Piotr Sroka
     
  • 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

    Dan Carpenter
     
  • 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

    Hu Ziji
     
  • 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

    Hu Ziji