mbox series

[U-Boot,v2,00/26] mmc: Add support for HS200 and UHS modes

Message ID 1506004213-22620-1-git-send-email-jjhiblot@ti.com
Headers show
Series mmc: Add support for HS200 and UHS modes | expand

Message

Jean-Jacques Hiblot Sept. 21, 2017, 2:29 p.m. UTC
This series brings support for HS200 and UHS modes to the mmc core.
It has been tested with the hsmmc driver on several platforms (DRA7,
AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some modifications
are required in the host driver to take advantage of this (voltage switching,
tuning). The changes to the host driver will be posted a another series as this
one is already long enough. 

The series starts with a small refactoring of th sd/mmc startup. The first 5 commits
are mostly moving code around with little or no functionnal change.

Then the notion of "mode" is introduced. Until now, this information wasn't
kept in struct mmc. Only the clock and a flag for ddr was kept. Later the mode
information will be used to select the clock frequency, the ddr flag and the
tuning procedure. It will be also be check against the host capabilities.

Then comes the big refactoring job in:
"mmc: refactor MMC startup to make it easier to support new modes" and
"mmc: refactor SD startup to make it easier to support new modes"
Since the number of modes is increasing, it makes sense to try them in a more
organized way. those commits use a list of supported modes and iterate through
them to find the best working one. It also allows to switch more easilly from
one mode to another (switching from HS200 to DDR52 to access boot partitions for example)

Then there are a couple of new callback added to:
- send the initialization stream (74 clock cycles)
- wait while the card is busy (used during UHS voltage switching). checking is
  done on dat0.
- select the IO voltage

Then Power cycle is added. Without power cycle, if a UHS card fails to enumerate in
UHS mode, it can't fall back to high speed mode and card enumeration will fail.
Also in case of a reset (as opposed to a power on), it ensures that the SDCard
is in clean state before re-doing the initialization.

And finally the last commits add the support for HS200 and UHS.

With this in place and the required changes in the HSMMC host driver (including
DMA), we observe significant improvements in the performances on a DRA72 evm:
eMMC HS200: 124 MB/s
eMMC DDR52: 78 MB/s
sd   SDR104: 71 MB/s
sd   SDR50: 44 MB/s

cheers,

Jean-Jacques

changes since v1:
Changes take in account all the comment made during the first round of review.
But it also include a rework of the handling of the voltage supplies and 2 new
helper functions that can be used by the host driver during tuning and dts
parsing.

Here is a detailed list:
 * rebase on u-boot/master.
 * add the description for the new functions/members
 * fix the typos found in the reviews
 * limit the new features to DM_MMC only
 * fix the new checkpatch warnings/errors (is it now more strict ?)
 * get the voltage regulators from dts (main and IO-lines)
 * remove the set_vdd callback and do the job in the mmc core
 * add a send_init_stream callback to perform the 74 clock cycle
   sequence after power up
 * do a full power cycle (if possible) before the initialization. This ensures
   that the sd/MMC is in valid knwon state. Also it allows to check if the power
   cycling works as expected.
 * disable the UHS modes is power cycling is not available/working. This ensures
   that we won't be stuck if the UHS initialization fails.
 * select the appropriate signal voltage when selecting a mode (MMC only) 
 * add a helper function to parse the generic dt bindings
 * add a helper function to send the tuning command
 
Jean-Jacques Hiblot (17):
  mmc: dm: get the IO-line and main voltage regulators from the dts
  mmc: split mmc_startup()
  mmc: move the MMC startup for version above v4.0 in a separate
    function
  mmc: make ext_csd part of struct mmc
  mmc: add a function to read and test the ext csd (mmc >= 4)
  mmc: introduce mmc modes
  mmc: Add a function to dump the mmc capabilities
  mmc: use mmc modes to select the correct bus speed
  cmd: mmc: display the mode name and current bus speed in the mmc info
  mmc: refactor SD startup to make it easier to support new modes
  mmc: refactor MMC startup to make it easier to support new modes
  mmc: Add a new callback function to perform the 74 clocks cycle
    sequence
  mmc: Add support for UHS modes
  mmc: disable UHS modes if Vcc cannot be switched on and off
  mmc: Change mode when switching to a boot partition
  mmc: use the right voltage level for MMC DDR and HS200 modes
  mmc: add a library function to send tuning command

Kishon Vijay Abraham I (9):
  mmc: make mmc_set_ios() return status
  mmc: Enable signal voltage to be selected from mmc core
  mmc: add power cyle support in mmc core
  mmc: add a new mmc parameter to disable mmc clock
  mmc: disable the mmc clock during power off
  mmc: Add a execute_tuning() callback to the mmc operations.
  mmc: add HS200 support in MMC core
  mmc: Retry some MMC cmds on failure
  dm: mmc: Add a library function to parse generic dt binding

 cmd/mmc.c                |    3 +-
 drivers/mmc/Kconfig      |   23 +
 drivers/mmc/fsl_esdhc.c  |    2 +-
 drivers/mmc/mmc-uclass.c |   87 +++
 drivers/mmc/mmc.c        | 1511 ++++++++++++++++++++++++++++++++++------------
 include/mmc.h            |  176 +++++-
 6 files changed, 1417 insertions(+), 385 deletions(-)

Comments

Jaehoon Chung Sept. 22, 2017, 2:42 p.m. UTC | #1
Dear JJ,

On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
> This series brings support for HS200 and UHS modes to the mmc core.
> It has been tested with the hsmmc driver on several platforms (DRA7,
> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some modifications
> are required in the host driver to take advantage of this (voltage switching,
> tuning). The changes to the host driver will be posted a another series as this
> one is already long enough. 
> 
> The series starts with a small refactoring of th sd/mmc startup. The first 5 commits
> are mostly moving code around with little or no functionnal change.
> 
> Then the notion of "mode" is introduced. Until now, this information wasn't
> kept in struct mmc. Only the clock and a flag for ddr was kept. Later the mode
> information will be used to select the clock frequency, the ddr flag and the
> tuning procedure. It will be also be check against the host capabilities.
> 
> Then comes the big refactoring job in:
> "mmc: refactor MMC startup to make it easier to support new modes" and
> "mmc: refactor SD startup to make it easier to support new modes"
> Since the number of modes is increasing, it makes sense to try them in a more
> organized way. those commits use a list of supported modes and iterate through
> them to find the best working one. It also allows to switch more easilly from
> one mode to another (switching from HS200 to DDR52 to access boot partitions for example)
> 
> Then there are a couple of new callback added to:
> - send the initialization stream (74 clock cycles)
> - wait while the card is busy (used during UHS voltage switching). checking is
>   done on dat0.
> - select the IO voltage
> 
> Then Power cycle is added. Without power cycle, if a UHS card fails to enumerate in
> UHS mode, it can't fall back to high speed mode and card enumeration will fail.
> Also in case of a reset (as opposed to a power on), it ensures that the SDCard
> is in clean state before re-doing the initialization.
> 
> And finally the last commits add the support for HS200 and UHS.
> 
> With this in place and the required changes in the HSMMC host driver (including
> DMA), we observe significant improvements in the performances on a DRA72 evm:
> eMMC HS200: 124 MB/s
> eMMC DDR52: 78 MB/s
> sd   SDR104: 71 MB/s
> sd   SDR50: 44 MB/s

I have one question. 

Did you test about accessing Boot partition of eMMC?
As i know, boot partition doesn't support the HS200 mode.

When i checked your patches, there is no the function of mode changing for accessing boot partition.
If i missed it, let me know, plz.

Best Regards,
Jaehoon Chung

> 
> cheers,
> 
> Jean-Jacques
> 
> changes since v1:
> Changes take in account all the comment made during the first round of review.
> But it also include a rework of the handling of the voltage supplies and 2 new
> helper functions that can be used by the host driver during tuning and dts
> parsing.
> 
> Here is a detailed list:
>  * rebase on u-boot/master.
>  * add the description for the new functions/members
>  * fix the typos found in the reviews
>  * limit the new features to DM_MMC only
>  * fix the new checkpatch warnings/errors (is it now more strict ?)
>  * get the voltage regulators from dts (main and IO-lines)
>  * remove the set_vdd callback and do the job in the mmc core
>  * add a send_init_stream callback to perform the 74 clock cycle
>    sequence after power up
>  * do a full power cycle (if possible) before the initialization. This ensures
>    that the sd/MMC is in valid knwon state. Also it allows to check if the power
>    cycling works as expected.
>  * disable the UHS modes is power cycling is not available/working. This ensures
>    that we won't be stuck if the UHS initialization fails.
>  * select the appropriate signal voltage when selecting a mode (MMC only) 
>  * add a helper function to parse the generic dt bindings
>  * add a helper function to send the tuning command
>  
> Jean-Jacques Hiblot (17):
>   mmc: dm: get the IO-line and main voltage regulators from the dts
>   mmc: split mmc_startup()
>   mmc: move the MMC startup for version above v4.0 in a separate
>     function
>   mmc: make ext_csd part of struct mmc
>   mmc: add a function to read and test the ext csd (mmc >= 4)
>   mmc: introduce mmc modes
>   mmc: Add a function to dump the mmc capabilities
>   mmc: use mmc modes to select the correct bus speed
>   cmd: mmc: display the mode name and current bus speed in the mmc info
>   mmc: refactor SD startup to make it easier to support new modes
>   mmc: refactor MMC startup to make it easier to support new modes
>   mmc: Add a new callback function to perform the 74 clocks cycle
>     sequence
>   mmc: Add support for UHS modes
>   mmc: disable UHS modes if Vcc cannot be switched on and off
>   mmc: Change mode when switching to a boot partition
>   mmc: use the right voltage level for MMC DDR and HS200 modes
>   mmc: add a library function to send tuning command
> 
> Kishon Vijay Abraham I (9):
>   mmc: make mmc_set_ios() return status
>   mmc: Enable signal voltage to be selected from mmc core
>   mmc: add power cyle support in mmc core
>   mmc: add a new mmc parameter to disable mmc clock
>   mmc: disable the mmc clock during power off
>   mmc: Add a execute_tuning() callback to the mmc operations.
>   mmc: add HS200 support in MMC core
>   mmc: Retry some MMC cmds on failure
>   dm: mmc: Add a library function to parse generic dt binding
> 
>  cmd/mmc.c                |    3 +-
>  drivers/mmc/Kconfig      |   23 +
>  drivers/mmc/fsl_esdhc.c  |    2 +-
>  drivers/mmc/mmc-uclass.c |   87 +++
>  drivers/mmc/mmc.c        | 1511 ++++++++++++++++++++++++++++++++++------------
>  include/mmc.h            |  176 +++++-
>  6 files changed, 1417 insertions(+), 385 deletions(-)
>
Jean-Jacques Hiblot Oct. 2, 2017, 9:15 a.m. UTC | #2
On 22/09/2017 16:42, Jaehoon Chung wrote:
> Dear JJ,
>
> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>> This series brings support for HS200 and UHS modes to the mmc core.
>> It has been tested with the hsmmc driver on several platforms (DRA7,
>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some modifications
>> are required in the host driver to take advantage of this (voltage switching,
>> tuning). The changes to the host driver will be posted a another series as this
>> one is already long enough.
>>
>> The series starts with a small refactoring of th sd/mmc startup. The first 5 commits
>> are mostly moving code around with little or no functionnal change.
>>
>> Then the notion of "mode" is introduced. Until now, this information wasn't
>> kept in struct mmc. Only the clock and a flag for ddr was kept. Later the mode
>> information will be used to select the clock frequency, the ddr flag and the
>> tuning procedure. It will be also be check against the host capabilities.
>>
>> Then comes the big refactoring job in:
>> "mmc: refactor MMC startup to make it easier to support new modes" and
>> "mmc: refactor SD startup to make it easier to support new modes"
>> Since the number of modes is increasing, it makes sense to try them in a more
>> organized way. those commits use a list of supported modes and iterate through
>> them to find the best working one. It also allows to switch more easilly from
>> one mode to another (switching from HS200 to DDR52 to access boot partitions for example)
>>
>> Then there are a couple of new callback added to:
>> - send the initialization stream (74 clock cycles)
>> - wait while the card is busy (used during UHS voltage switching). checking is
>>    done on dat0.
>> - select the IO voltage
>>
>> Then Power cycle is added. Without power cycle, if a UHS card fails to enumerate in
>> UHS mode, it can't fall back to high speed mode and card enumeration will fail.
>> Also in case of a reset (as opposed to a power on), it ensures that the SDCard
>> is in clean state before re-doing the initialization.
>>
>> And finally the last commits add the support for HS200 and UHS.
>>
>> With this in place and the required changes in the HSMMC host driver (including
>> DMA), we observe significant improvements in the performances on a DRA72 evm:
>> eMMC HS200: 124 MB/s
>> eMMC DDR52: 78 MB/s
>> sd   SDR104: 71 MB/s
>> sd   SDR50: 44 MB/s
> I have one question.
>
> Did you test about accessing Boot partition of eMMC?

> As i know, boot partition doesn't support the HS200 mode.
>
> When i checked your patches, there is no the function of mode changing for accessing boot partition.
> If i missed it, let me know, plz.
Yes I did test the boot partitions. HS200 is not used in this case.
The key function is mmc_boot_part_access_chk(). It checks if the current 
mode is supported by the partition. If not, it'll reselect a new mode.

Jean-Jacques


>
> Best Regards,
> Jaehoon Chung
>
>> cheers,
>>
>> Jean-Jacques
>>
>> changes since v1:
>> Changes take in account all the comment made during the first round of review.
>> But it also include a rework of the handling of the voltage supplies and 2 new
>> helper functions that can be used by the host driver during tuning and dts
>> parsing.
>>
>> Here is a detailed list:
>>   * rebase on u-boot/master.
>>   * add the description for the new functions/members
>>   * fix the typos found in the reviews
>>   * limit the new features to DM_MMC only
>>   * fix the new checkpatch warnings/errors (is it now more strict ?)
>>   * get the voltage regulators from dts (main and IO-lines)
>>   * remove the set_vdd callback and do the job in the mmc core
>>   * add a send_init_stream callback to perform the 74 clock cycle
>>     sequence after power up
>>   * do a full power cycle (if possible) before the initialization. This ensures
>>     that the sd/MMC is in valid knwon state. Also it allows to check if the power
>>     cycling works as expected.
>>   * disable the UHS modes is power cycling is not available/working. This ensures
>>     that we won't be stuck if the UHS initialization fails.
>>   * select the appropriate signal voltage when selecting a mode (MMC only)
>>   * add a helper function to parse the generic dt bindings
>>   * add a helper function to send the tuning command
>>   
>> Jean-Jacques Hiblot (17):
>>    mmc: dm: get the IO-line and main voltage regulators from the dts
>>    mmc: split mmc_startup()
>>    mmc: move the MMC startup for version above v4.0 in a separate
>>      function
>>    mmc: make ext_csd part of struct mmc
>>    mmc: add a function to read and test the ext csd (mmc >= 4)
>>    mmc: introduce mmc modes
>>    mmc: Add a function to dump the mmc capabilities
>>    mmc: use mmc modes to select the correct bus speed
>>    cmd: mmc: display the mode name and current bus speed in the mmc info
>>    mmc: refactor SD startup to make it easier to support new modes
>>    mmc: refactor MMC startup to make it easier to support new modes
>>    mmc: Add a new callback function to perform the 74 clocks cycle
>>      sequence
>>    mmc: Add support for UHS modes
>>    mmc: disable UHS modes if Vcc cannot be switched on and off
>>    mmc: Change mode when switching to a boot partition
>>    mmc: use the right voltage level for MMC DDR and HS200 modes
>>    mmc: add a library function to send tuning command
>>
>> Kishon Vijay Abraham I (9):
>>    mmc: make mmc_set_ios() return status
>>    mmc: Enable signal voltage to be selected from mmc core
>>    mmc: add power cyle support in mmc core
>>    mmc: add a new mmc parameter to disable mmc clock
>>    mmc: disable the mmc clock during power off
>>    mmc: Add a execute_tuning() callback to the mmc operations.
>>    mmc: add HS200 support in MMC core
>>    mmc: Retry some MMC cmds on failure
>>    dm: mmc: Add a library function to parse generic dt binding
>>
>>   cmd/mmc.c                |    3 +-
>>   drivers/mmc/Kconfig      |   23 +
>>   drivers/mmc/fsl_esdhc.c  |    2 +-
>>   drivers/mmc/mmc-uclass.c |   87 +++
>>   drivers/mmc/mmc.c        | 1511 ++++++++++++++++++++++++++++++++++------------
>>   include/mmc.h            |  176 +++++-
>>   6 files changed, 1417 insertions(+), 385 deletions(-)
>>
>
Marek Vasut Oct. 14, 2017, 2:51 p.m. UTC | #3
On 10/02/2017 11:15 AM, Jean-Jacques Hiblot wrote:
> 
> 
> On 22/09/2017 16:42, Jaehoon Chung wrote:
>> Dear JJ,
>>
>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>> This series brings support for HS200 and UHS modes to the mmc core.
>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>> modifications
>>> are required in the host driver to take advantage of this (voltage
>>> switching,
>>> tuning). The changes to the host driver will be posted a another
>>> series as this
>>> one is already long enough.
>>>
>>> The series starts with a small refactoring of th sd/mmc startup. The
>>> first 5 commits
>>> are mostly moving code around with little or no functionnal change.
>>>
>>> Then the notion of "mode" is introduced. Until now, this information
>>> wasn't
>>> kept in struct mmc. Only the clock and a flag for ddr was kept. Later
>>> the mode
>>> information will be used to select the clock frequency, the ddr flag
>>> and the
>>> tuning procedure. It will be also be check against the host
>>> capabilities.
>>>
>>> Then comes the big refactoring job in:
>>> "mmc: refactor MMC startup to make it easier to support new modes" and
>>> "mmc: refactor SD startup to make it easier to support new modes"
>>> Since the number of modes is increasing, it makes sense to try them
>>> in a more
>>> organized way. those commits use a list of supported modes and
>>> iterate through
>>> them to find the best working one. It also allows to switch more
>>> easilly from
>>> one mode to another (switching from HS200 to DDR52 to access boot
>>> partitions for example)
>>>
>>> Then there are a couple of new callback added to:
>>> - send the initialization stream (74 clock cycles)
>>> - wait while the card is busy (used during UHS voltage switching).
>>> checking is
>>>    done on dat0.
>>> - select the IO voltage
>>>
>>> Then Power cycle is added. Without power cycle, if a UHS card fails
>>> to enumerate in
>>> UHS mode, it can't fall back to high speed mode and card enumeration
>>> will fail.
>>> Also in case of a reset (as opposed to a power on), it ensures that
>>> the SDCard
>>> is in clean state before re-doing the initialization.
>>>
>>> And finally the last commits add the support for HS200 and UHS.
>>>
>>> With this in place and the required changes in the HSMMC host driver
>>> (including
>>> DMA), we observe significant improvements in the performances on a
>>> DRA72 evm:
>>> eMMC HS200: 124 MB/s
>>> eMMC DDR52: 78 MB/s
>>> sd   SDR104: 71 MB/s
>>> sd   SDR50: 44 MB/s
>> I have one question.
>>
>> Did you test about accessing Boot partition of eMMC?
> 
>> As i know, boot partition doesn't support the HS200 mode.
>>
>> When i checked your patches, there is no the function of mode changing
>> for accessing boot partition.
>> If i missed it, let me know, plz.
> Yes I did test the boot partitions. HS200 is not used in this case.
> The key function is mmc_boot_part_access_chk(). It checks if the current
> mode is supported by the partition. If not, it'll reselect a new mode.

Is anything new happening on the HS200 front ?
Jean-Jacques Hiblot Oct. 18, 2017, 1:19 p.m. UTC | #4
On 14/10/2017 16:51, Marek Vasut wrote:
> On 10/02/2017 11:15 AM, Jean-Jacques Hiblot wrote:
>>
>> On 22/09/2017 16:42, Jaehoon Chung wrote:
>>> Dear JJ,
>>>
>>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>>> This series brings support for HS200 and UHS modes to the mmc core.
>>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>>> modifications
>>>> are required in the host driver to take advantage of this (voltage
>>>> switching,
>>>> tuning). The changes to the host driver will be posted a another
>>>> series as this
>>>> one is already long enough.
>>>>
>>>> The series starts with a small refactoring of th sd/mmc startup. The
>>>> first 5 commits
>>>> are mostly moving code around with little or no functionnal change.
>>>>
>>>> Then the notion of "mode" is introduced. Until now, this information
>>>> wasn't
>>>> kept in struct mmc. Only the clock and a flag for ddr was kept. Later
>>>> the mode
>>>> information will be used to select the clock frequency, the ddr flag
>>>> and the
>>>> tuning procedure. It will be also be check against the host
>>>> capabilities.
>>>>
>>>> Then comes the big refactoring job in:
>>>> "mmc: refactor MMC startup to make it easier to support new modes" and
>>>> "mmc: refactor SD startup to make it easier to support new modes"
>>>> Since the number of modes is increasing, it makes sense to try them
>>>> in a more
>>>> organized way. those commits use a list of supported modes and
>>>> iterate through
>>>> them to find the best working one. It also allows to switch more
>>>> easilly from
>>>> one mode to another (switching from HS200 to DDR52 to access boot
>>>> partitions for example)
>>>>
>>>> Then there are a couple of new callback added to:
>>>> - send the initialization stream (74 clock cycles)
>>>> - wait while the card is busy (used during UHS voltage switching).
>>>> checking is
>>>>     done on dat0.
>>>> - select the IO voltage
>>>>
>>>> Then Power cycle is added. Without power cycle, if a UHS card fails
>>>> to enumerate in
>>>> UHS mode, it can't fall back to high speed mode and card enumeration
>>>> will fail.
>>>> Also in case of a reset (as opposed to a power on), it ensures that
>>>> the SDCard
>>>> is in clean state before re-doing the initialization.
>>>>
>>>> And finally the last commits add the support for HS200 and UHS.
>>>>
>>>> With this in place and the required changes in the HSMMC host driver
>>>> (including
>>>> DMA), we observe significant improvements in the performances on a
>>>> DRA72 evm:
>>>> eMMC HS200: 124 MB/s
>>>> eMMC DDR52: 78 MB/s
>>>> sd   SDR104: 71 MB/s
>>>> sd   SDR50: 44 MB/s
>>> I have one question.
>>>
>>> Did you test about accessing Boot partition of eMMC?
>>> As i know, boot partition doesn't support the HS200 mode.
>>>
>>> When i checked your patches, there is no the function of mode changing
>>> for accessing boot partition.
>>> If i missed it, let me know, plz.
>> Yes I did test the boot partitions. HS200 is not used in this case.
>> The key function is mmc_boot_part_access_chk(). It checks if the current
>> mode is supported by the partition. If not, it'll reselect a new mode.
> Is anything new happening on the HS200 front ?
I've been busy lately but I'll send the v3  in a few days that adresses 
all the comments done by Jaheoon and Simon.

Jean-Jacques
>
Marek Vasut Oct. 18, 2017, 1:26 p.m. UTC | #5
On 10/18/2017 03:19 PM, Jean-Jacques Hiblot wrote:
> 
> 
> On 14/10/2017 16:51, Marek Vasut wrote:
>> On 10/02/2017 11:15 AM, Jean-Jacques Hiblot wrote:
>>>
>>> On 22/09/2017 16:42, Jaehoon Chung wrote:
>>>> Dear JJ,
>>>>
>>>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>>>> This series brings support for HS200 and UHS modes to the mmc core.
>>>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>>>> modifications
>>>>> are required in the host driver to take advantage of this (voltage
>>>>> switching,
>>>>> tuning). The changes to the host driver will be posted a another
>>>>> series as this
>>>>> one is already long enough.
>>>>>
>>>>> The series starts with a small refactoring of th sd/mmc startup. The
>>>>> first 5 commits
>>>>> are mostly moving code around with little or no functionnal change.
>>>>>
>>>>> Then the notion of "mode" is introduced. Until now, this information
>>>>> wasn't
>>>>> kept in struct mmc. Only the clock and a flag for ddr was kept. Later
>>>>> the mode
>>>>> information will be used to select the clock frequency, the ddr flag
>>>>> and the
>>>>> tuning procedure. It will be also be check against the host
>>>>> capabilities.
>>>>>
>>>>> Then comes the big refactoring job in:
>>>>> "mmc: refactor MMC startup to make it easier to support new modes" and
>>>>> "mmc: refactor SD startup to make it easier to support new modes"
>>>>> Since the number of modes is increasing, it makes sense to try them
>>>>> in a more
>>>>> organized way. those commits use a list of supported modes and
>>>>> iterate through
>>>>> them to find the best working one. It also allows to switch more
>>>>> easilly from
>>>>> one mode to another (switching from HS200 to DDR52 to access boot
>>>>> partitions for example)
>>>>>
>>>>> Then there are a couple of new callback added to:
>>>>> - send the initialization stream (74 clock cycles)
>>>>> - wait while the card is busy (used during UHS voltage switching).
>>>>> checking is
>>>>>     done on dat0.
>>>>> - select the IO voltage
>>>>>
>>>>> Then Power cycle is added. Without power cycle, if a UHS card fails
>>>>> to enumerate in
>>>>> UHS mode, it can't fall back to high speed mode and card enumeration
>>>>> will fail.
>>>>> Also in case of a reset (as opposed to a power on), it ensures that
>>>>> the SDCard
>>>>> is in clean state before re-doing the initialization.
>>>>>
>>>>> And finally the last commits add the support for HS200 and UHS.
>>>>>
>>>>> With this in place and the required changes in the HSMMC host driver
>>>>> (including
>>>>> DMA), we observe significant improvements in the performances on a
>>>>> DRA72 evm:
>>>>> eMMC HS200: 124 MB/s
>>>>> eMMC DDR52: 78 MB/s
>>>>> sd   SDR104: 71 MB/s
>>>>> sd   SDR50: 44 MB/s
>>>> I have one question.
>>>>
>>>> Did you test about accessing Boot partition of eMMC?
>>>> As i know, boot partition doesn't support the HS200 mode.
>>>>
>>>> When i checked your patches, there is no the function of mode changing
>>>> for accessing boot partition.
>>>> If i missed it, let me know, plz.
>>> Yes I did test the boot partitions. HS200 is not used in this case.
>>> The key function is mmc_boot_part_access_chk(). It checks if the current
>>> mode is supported by the partition. If not, it'll reselect a new mode.
>> Is anything new happening on the HS200 front ?
> I've been busy lately but I'll send the v3  in a few days that adresses
> all the comments done by Jaheoon and Simon.

Awesome, thanks !

If you have a tree with those patches applied somewhere, that'd be nice
as I'm working on adding HS200/SDR104 support into the uniphier-sd driver.

Also, any plan for HS400 ? :-)
Jaehoon Chung Oct. 20, 2017, 10:49 a.m. UTC | #6
On 10/14/2017 11:51 PM, Marek Vasut wrote:
> On 10/02/2017 11:15 AM, Jean-Jacques Hiblot wrote:
>>
>>
>> On 22/09/2017 16:42, Jaehoon Chung wrote:
>>> Dear JJ,
>>>
>>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>>> This series brings support for HS200 and UHS modes to the mmc core.
>>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>>> modifications
>>>> are required in the host driver to take advantage of this (voltage
>>>> switching,
>>>> tuning). The changes to the host driver will be posted a another
>>>> series as this
>>>> one is already long enough.
>>>>
>>>> The series starts with a small refactoring of th sd/mmc startup. The
>>>> first 5 commits
>>>> are mostly moving code around with little or no functionnal change.
>>>>
>>>> Then the notion of "mode" is introduced. Until now, this information
>>>> wasn't
>>>> kept in struct mmc. Only the clock and a flag for ddr was kept. Later
>>>> the mode
>>>> information will be used to select the clock frequency, the ddr flag
>>>> and the
>>>> tuning procedure. It will be also be check against the host
>>>> capabilities.
>>>>
>>>> Then comes the big refactoring job in:
>>>> "mmc: refactor MMC startup to make it easier to support new modes" and
>>>> "mmc: refactor SD startup to make it easier to support new modes"
>>>> Since the number of modes is increasing, it makes sense to try them
>>>> in a more
>>>> organized way. those commits use a list of supported modes and
>>>> iterate through
>>>> them to find the best working one. It also allows to switch more
>>>> easilly from
>>>> one mode to another (switching from HS200 to DDR52 to access boot
>>>> partitions for example)
>>>>
>>>> Then there are a couple of new callback added to:
>>>> - send the initialization stream (74 clock cycles)
>>>> - wait while the card is busy (used during UHS voltage switching).
>>>> checking is
>>>>    done on dat0.
>>>> - select the IO voltage
>>>>
>>>> Then Power cycle is added. Without power cycle, if a UHS card fails
>>>> to enumerate in
>>>> UHS mode, it can't fall back to high speed mode and card enumeration
>>>> will fail.
>>>> Also in case of a reset (as opposed to a power on), it ensures that
>>>> the SDCard
>>>> is in clean state before re-doing the initialization.
>>>>
>>>> And finally the last commits add the support for HS200 and UHS.
>>>>
>>>> With this in place and the required changes in the HSMMC host driver
>>>> (including
>>>> DMA), we observe significant improvements in the performances on a
>>>> DRA72 evm:
>>>> eMMC HS200: 124 MB/s
>>>> eMMC DDR52: 78 MB/s
>>>> sd   SDR104: 71 MB/s
>>>> sd   SDR50: 44 MB/s
>>> I have one question.
>>>
>>> Did you test about accessing Boot partition of eMMC?
>>
>>> As i know, boot partition doesn't support the HS200 mode.
>>>
>>> When i checked your patches, there is no the function of mode changing
>>> for accessing boot partition.
>>> If i missed it, let me know, plz.
>> Yes I did test the boot partitions. HS200 is not used in this case.
>> The key function is mmc_boot_part_access_chk(). It checks if the current
>> mode is supported by the partition. If not, it'll reselect a new mode.
> 
> Is anything new happening on the HS200 front ?

Will apply this patchset. Thanks!

Best Regards,
Jaehoon Chung

>
Jaehoon Chung Oct. 20, 2017, 11:31 a.m. UTC | #7
Dear JJ

On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
> This series brings support for HS200 and UHS modes to the mmc core.
> It has been tested with the hsmmc driver on several platforms (DRA7,
> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some modifications
> are required in the host driver to take advantage of this (voltage switching,
> tuning). The changes to the host driver will be posted a another series as this
> one is already long enough. 
> 
> The series starts with a small refactoring of th sd/mmc startup. The first 5 commits
> are mostly moving code around with little or no functionnal change.
> 
> Then the notion of "mode" is introduced. Until now, this information wasn't
> kept in struct mmc. Only the clock and a flag for ddr was kept. Later the mode
> information will be used to select the clock frequency, the ddr flag and the
> tuning procedure. It will be also be check against the host capabilities.
> 
> Then comes the big refactoring job in:
> "mmc: refactor MMC startup to make it easier to support new modes" and
> "mmc: refactor SD startup to make it easier to support new modes"
> Since the number of modes is increasing, it makes sense to try them in a more
> organized way. those commits use a list of supported modes and iterate through
> them to find the best working one. It also allows to switch more easilly from
> one mode to another (switching from HS200 to DDR52 to access boot partitions for example)
> 
> Then there are a couple of new callback added to:
> - send the initialization stream (74 clock cycles)
> - wait while the card is busy (used during UHS voltage switching). checking is
>   done on dat0.
> - select the IO voltage
> 
> Then Power cycle is added. Without power cycle, if a UHS card fails to enumerate in
> UHS mode, it can't fall back to high speed mode and card enumeration will fail.
> Also in case of a reset (as opposed to a power on), it ensures that the SDCard
> is in clean state before re-doing the initialization.
> 
> And finally the last commits add the support for HS200 and UHS.
> 
> With this in place and the required changes in the HSMMC host driver (including
> DMA), we observe significant improvements in the performances on a DRA72 evm:
> eMMC HS200: 124 MB/s
> eMMC DDR52: 78 MB/s
> sd   SDR104: 71 MB/s
> sd   SDR50: 44 MB/s

Applied to u-boot-mmc! Thanks!
I will apply the patches relevant to this patchset. Sorry for late applying this.

Best Regards,
Jaehoon Chung

> 
> cheers,
> 
> Jean-Jacques
> 
> changes since v1:
> Changes take in account all the comment made during the first round of review.
> But it also include a rework of the handling of the voltage supplies and 2 new
> helper functions that can be used by the host driver during tuning and dts
> parsing.
> 
> Here is a detailed list:
>  * rebase on u-boot/master.
>  * add the description for the new functions/members
>  * fix the typos found in the reviews
>  * limit the new features to DM_MMC only
>  * fix the new checkpatch warnings/errors (is it now more strict ?)
>  * get the voltage regulators from dts (main and IO-lines)
>  * remove the set_vdd callback and do the job in the mmc core
>  * add a send_init_stream callback to perform the 74 clock cycle
>    sequence after power up
>  * do a full power cycle (if possible) before the initialization. This ensures
>    that the sd/MMC is in valid knwon state. Also it allows to check if the power
>    cycling works as expected.
>  * disable the UHS modes is power cycling is not available/working. This ensures
>    that we won't be stuck if the UHS initialization fails.
>  * select the appropriate signal voltage when selecting a mode (MMC only) 
>  * add a helper function to parse the generic dt bindings
>  * add a helper function to send the tuning command
>  
> Jean-Jacques Hiblot (17):
>   mmc: dm: get the IO-line and main voltage regulators from the dts
>   mmc: split mmc_startup()
>   mmc: move the MMC startup for version above v4.0 in a separate
>     function
>   mmc: make ext_csd part of struct mmc
>   mmc: add a function to read and test the ext csd (mmc >= 4)
>   mmc: introduce mmc modes
>   mmc: Add a function to dump the mmc capabilities
>   mmc: use mmc modes to select the correct bus speed
>   cmd: mmc: display the mode name and current bus speed in the mmc info
>   mmc: refactor SD startup to make it easier to support new modes
>   mmc: refactor MMC startup to make it easier to support new modes
>   mmc: Add a new callback function to perform the 74 clocks cycle
>     sequence
>   mmc: Add support for UHS modes
>   mmc: disable UHS modes if Vcc cannot be switched on and off
>   mmc: Change mode when switching to a boot partition
>   mmc: use the right voltage level for MMC DDR and HS200 modes
>   mmc: add a library function to send tuning command
> 
> Kishon Vijay Abraham I (9):
>   mmc: make mmc_set_ios() return status
>   mmc: Enable signal voltage to be selected from mmc core
>   mmc: add power cyle support in mmc core
>   mmc: add a new mmc parameter to disable mmc clock
>   mmc: disable the mmc clock during power off
>   mmc: Add a execute_tuning() callback to the mmc operations.
>   mmc: add HS200 support in MMC core
>   mmc: Retry some MMC cmds on failure
>   dm: mmc: Add a library function to parse generic dt binding
> 
>  cmd/mmc.c                |    3 +-
>  drivers/mmc/Kconfig      |   23 +
>  drivers/mmc/fsl_esdhc.c  |    2 +-
>  drivers/mmc/mmc-uclass.c |   87 +++
>  drivers/mmc/mmc.c        | 1511 ++++++++++++++++++++++++++++++++++------------
>  include/mmc.h            |  176 +++++-
>  6 files changed, 1417 insertions(+), 385 deletions(-)
>
Siva Durga Prasad Paladugu Nov. 23, 2017, 9:46 a.m. UTC | #8
Hi Jaehoon,

> -----Original Message-----

> From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Jaehoon

> Chung

> Sent: Friday, October 20, 2017 5:02 PM

> To: Jean-Jacques Hiblot <jjhiblot@ti.com>; trini@konsulko.com;

> kishon@ti.com; sjg@chromium.org

> Cc: u-boot@lists.denx.de

> Subject: Re: [U-Boot] [PATCH v2 00/26] mmc: Add support for HS200 and

> UHS modes

> 

> Dear JJ

> 

> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:

> > This series brings support for HS200 and UHS modes to the mmc core.

> > It has been tested with the hsmmc driver on several platforms (DRA7,

> > AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some

> > modifications are required in the host driver to take advantage of

> > this (voltage switching, tuning). The changes to the host driver will

> > be posted a another series as this one is already long enough.

> >

> > The series starts with a small refactoring of th sd/mmc startup. The

> > first 5 commits are mostly moving code around with little or no

> functionnal change.

> >

> > Then the notion of "mode" is introduced. Until now, this information

> > wasn't kept in struct mmc. Only the clock and a flag for ddr was kept.

> > Later the mode information will be used to select the clock frequency,

> > the ddr flag and the tuning procedure. It will be also be check against the

> host capabilities.

> >

> > Then comes the big refactoring job in:

> > "mmc: refactor MMC startup to make it easier to support new modes"

> and

> > "mmc: refactor SD startup to make it easier to support new modes"

> > Since the number of modes is increasing, it makes sense to try them in

> > a more organized way. those commits use a list of supported modes and

> > iterate through them to find the best working one. It also allows to

> > switch more easilly from one mode to another (switching from HS200 to

> > DDR52 to access boot partitions for example)

> >

> > Then there are a couple of new callback added to:

> > - send the initialization stream (74 clock cycles)

> > - wait while the card is busy (used during UHS voltage switching). checking

> is

> >   done on dat0.

> > - select the IO voltage

> >

> > Then Power cycle is added. Without power cycle, if a UHS card fails to

> > enumerate in UHS mode, it can't fall back to high speed mode and card

> enumeration will fail.

> > Also in case of a reset (as opposed to a power on), it ensures that

> > the SDCard is in clean state before re-doing the initialization.

> >

> > And finally the last commits add the support for HS200 and UHS.

> >

> > With this in place and the required changes in the HSMMC host driver

> > (including DMA), we observe significant improvements in the

> performances on a DRA72 evm:

> > eMMC HS200: 124 MB/s

> > eMMC DDR52: 78 MB/s

> > sd   SDR104: 71 MB/s

> > sd   SDR50: 44 MB/s

> 

> Applied to u-boot-mmc! Thanks!

> I will apply the patches relevant to this patchset. Sorry for late applying this.


I would like to test UHS and HS200 series on ZynqMP platform. 
Is it the branch " testing-uhs-supporting" that I should be using for testing it?
Please confirm.

Thanks,
Siva

> 

> Best Regards,

> Jaehoon Chung

> 

> >

> > cheers,

> >

> > Jean-Jacques

> >

> > changes since v1:

> > Changes take in account all the comment made during the first round of

> review.

> > But it also include a rework of the handling of the voltage supplies

> > and 2 new helper functions that can be used by the host driver during

> > tuning and dts parsing.

> >

> > Here is a detailed list:

> >  * rebase on u-boot/master.

> >  * add the description for the new functions/members

> >  * fix the typos found in the reviews

> >  * limit the new features to DM_MMC only

> >  * fix the new checkpatch warnings/errors (is it now more strict ?)

> >  * get the voltage regulators from dts (main and IO-lines)

> >  * remove the set_vdd callback and do the job in the mmc core

> >  * add a send_init_stream callback to perform the 74 clock cycle

> >    sequence after power up

> >  * do a full power cycle (if possible) before the initialization. This ensures

> >    that the sd/MMC is in valid knwon state. Also it allows to check if the

> power

> >    cycling works as expected.

> >  * disable the UHS modes is power cycling is not available/working. This

> ensures

> >    that we won't be stuck if the UHS initialization fails.

> >  * select the appropriate signal voltage when selecting a mode (MMC

> > only)

> >  * add a helper function to parse the generic dt bindings

> >  * add a helper function to send the tuning command

> >

> > Jean-Jacques Hiblot (17):

> >   mmc: dm: get the IO-line and main voltage regulators from the dts

> >   mmc: split mmc_startup()

> >   mmc: move the MMC startup for version above v4.0 in a separate

> >     function

> >   mmc: make ext_csd part of struct mmc

> >   mmc: add a function to read and test the ext csd (mmc >= 4)

> >   mmc: introduce mmc modes

> >   mmc: Add a function to dump the mmc capabilities

> >   mmc: use mmc modes to select the correct bus speed

> >   cmd: mmc: display the mode name and current bus speed in the mmc

> info

> >   mmc: refactor SD startup to make it easier to support new modes

> >   mmc: refactor MMC startup to make it easier to support new modes

> >   mmc: Add a new callback function to perform the 74 clocks cycle

> >     sequence

> >   mmc: Add support for UHS modes

> >   mmc: disable UHS modes if Vcc cannot be switched on and off

> >   mmc: Change mode when switching to a boot partition

> >   mmc: use the right voltage level for MMC DDR and HS200 modes

> >   mmc: add a library function to send tuning command

> >

> > Kishon Vijay Abraham I (9):

> >   mmc: make mmc_set_ios() return status

> >   mmc: Enable signal voltage to be selected from mmc core

> >   mmc: add power cyle support in mmc core

> >   mmc: add a new mmc parameter to disable mmc clock

> >   mmc: disable the mmc clock during power off

> >   mmc: Add a execute_tuning() callback to the mmc operations.

> >   mmc: add HS200 support in MMC core

> >   mmc: Retry some MMC cmds on failure

> >   dm: mmc: Add a library function to parse generic dt binding

> >

> >  cmd/mmc.c                |    3 +-

> >  drivers/mmc/Kconfig      |   23 +

> >  drivers/mmc/fsl_esdhc.c  |    2 +-

> >  drivers/mmc/mmc-uclass.c |   87 +++

> >  drivers/mmc/mmc.c        | 1511

> ++++++++++++++++++++++++++++++++++------------

> >  include/mmc.h            |  176 +++++-

> >  6 files changed, 1417 insertions(+), 385 deletions(-)

> >

> 

> _______________________________________________

> U-Boot mailing list

> U-Boot@lists.denx.de

> https://lists.denx.de/listinfo/u-boot
Marek Vasut Nov. 23, 2017, 9:51 a.m. UTC | #9
On 11/23/2017 10:46 AM, Siva Durga Prasad Paladugu wrote:
> Hi Jaehoon,
> 
>> -----Original Message-----
>> From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Jaehoon
>> Chung
>> Sent: Friday, October 20, 2017 5:02 PM
>> To: Jean-Jacques Hiblot <jjhiblot@ti.com>; trini@konsulko.com;
>> kishon@ti.com; sjg@chromium.org
>> Cc: u-boot@lists.denx.de
>> Subject: Re: [U-Boot] [PATCH v2 00/26] mmc: Add support for HS200 and
>> UHS modes
>>
>> Dear JJ
>>
>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>> This series brings support for HS200 and UHS modes to the mmc core.
>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>> modifications are required in the host driver to take advantage of
>>> this (voltage switching, tuning). The changes to the host driver will
>>> be posted a another series as this one is already long enough.
>>>
>>> The series starts with a small refactoring of th sd/mmc startup. The
>>> first 5 commits are mostly moving code around with little or no
>> functionnal change.
>>>
>>> Then the notion of "mode" is introduced. Until now, this information
>>> wasn't kept in struct mmc. Only the clock and a flag for ddr was kept.
>>> Later the mode information will be used to select the clock frequency,
>>> the ddr flag and the tuning procedure. It will be also be check against the
>> host capabilities.
>>>
>>> Then comes the big refactoring job in:
>>> "mmc: refactor MMC startup to make it easier to support new modes"
>> and
>>> "mmc: refactor SD startup to make it easier to support new modes"
>>> Since the number of modes is increasing, it makes sense to try them in
>>> a more organized way. those commits use a list of supported modes and
>>> iterate through them to find the best working one. It also allows to
>>> switch more easilly from one mode to another (switching from HS200 to
>>> DDR52 to access boot partitions for example)
>>>
>>> Then there are a couple of new callback added to:
>>> - send the initialization stream (74 clock cycles)
>>> - wait while the card is busy (used during UHS voltage switching). checking
>> is
>>>   done on dat0.
>>> - select the IO voltage
>>>
>>> Then Power cycle is added. Without power cycle, if a UHS card fails to
>>> enumerate in UHS mode, it can't fall back to high speed mode and card
>> enumeration will fail.
>>> Also in case of a reset (as opposed to a power on), it ensures that
>>> the SDCard is in clean state before re-doing the initialization.
>>>
>>> And finally the last commits add the support for HS200 and UHS.
>>>
>>> With this in place and the required changes in the HSMMC host driver
>>> (including DMA), we observe significant improvements in the
>> performances on a DRA72 evm:
>>> eMMC HS200: 124 MB/s
>>> eMMC DDR52: 78 MB/s
>>> sd   SDR104: 71 MB/s
>>> sd   SDR50: 44 MB/s
>>
>> Applied to u-boot-mmc! Thanks!
>> I will apply the patches relevant to this patchset. Sorry for late applying this.
> 
> I would like to test UHS and HS200 series on ZynqMP platform. 
> Is it the branch " testing-uhs-supporting" that I should be using for testing it?
> Please confirm.

That should do, plus look at the uniphier/renesas SDHI patches posted to
the ML adding UHS200 support, that should get you started with the
arasan IP too.
Jaehoon Chung Nov. 27, 2017, 10:13 a.m. UTC | #10
On 11/23/2017 06:46 PM, Siva Durga Prasad Paladugu wrote:
> Hi Jaehoon,
> 
>> -----Original Message-----
>> From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Jaehoon
>> Chung
>> Sent: Friday, October 20, 2017 5:02 PM
>> To: Jean-Jacques Hiblot <jjhiblot@ti.com>; trini@konsulko.com;
>> kishon@ti.com; sjg@chromium.org
>> Cc: u-boot@lists.denx.de
>> Subject: Re: [U-Boot] [PATCH v2 00/26] mmc: Add support for HS200 and
>> UHS modes
>>
>> Dear JJ
>>
>> On 09/21/2017 11:29 PM, Jean-Jacques Hiblot wrote:
>>> This series brings support for HS200 and UHS modes to the mmc core.
>>> It has been tested with the hsmmc driver on several platforms (DRA7,
>>> AM57x, AM437x, beaglebone black, Atmel SAMA5D3 xplained). Some
>>> modifications are required in the host driver to take advantage of
>>> this (voltage switching, tuning). The changes to the host driver will
>>> be posted a another series as this one is already long enough.
>>>
>>> The series starts with a small refactoring of th sd/mmc startup. The
>>> first 5 commits are mostly moving code around with little or no
>> functionnal change.
>>>
>>> Then the notion of "mode" is introduced. Until now, this information
>>> wasn't kept in struct mmc. Only the clock and a flag for ddr was kept.
>>> Later the mode information will be used to select the clock frequency,
>>> the ddr flag and the tuning procedure. It will be also be check against the
>> host capabilities.
>>>
>>> Then comes the big refactoring job in:
>>> "mmc: refactor MMC startup to make it easier to support new modes"
>> and
>>> "mmc: refactor SD startup to make it easier to support new modes"
>>> Since the number of modes is increasing, it makes sense to try them in
>>> a more organized way. those commits use a list of supported modes and
>>> iterate through them to find the best working one. It also allows to
>>> switch more easilly from one mode to another (switching from HS200 to
>>> DDR52 to access boot partitions for example)
>>>
>>> Then there are a couple of new callback added to:
>>> - send the initialization stream (74 clock cycles)
>>> - wait while the card is busy (used during UHS voltage switching). checking
>> is
>>>   done on dat0.
>>> - select the IO voltage
>>>
>>> Then Power cycle is added. Without power cycle, if a UHS card fails to
>>> enumerate in UHS mode, it can't fall back to high speed mode and card
>> enumeration will fail.
>>> Also in case of a reset (as opposed to a power on), it ensures that
>>> the SDCard is in clean state before re-doing the initialization.
>>>
>>> And finally the last commits add the support for HS200 and UHS.
>>>
>>> With this in place and the required changes in the HSMMC host driver
>>> (including DMA), we observe significant improvements in the
>> performances on a DRA72 evm:
>>> eMMC HS200: 124 MB/s
>>> eMMC DDR52: 78 MB/s
>>> sd   SDR104: 71 MB/s
>>> sd   SDR50: 44 MB/s
>>
>> Applied to u-boot-mmc! Thanks!
>> I will apply the patches relevant to this patchset. Sorry for late applying this.
> 
> I would like to test UHS and HS200 series on ZynqMP platform. 
> Is it the branch " testing-uhs-supporting" that I should be using for testing it?
> Please confirm.

Hi, i applied these patch into u-boot-mmc/master. So if you want to check, just use master branch.
If there are problem, let me know, plz. and send patches, plz.
Then it's useful to me. 

(I will remove the testing-uhs-supporting" branch, because it's already merged into master branch.)

Best Regards,
Jaehoon Chung

> 
> Thanks,
> Siva
> 
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>>
>>> cheers,
>>>
>>> Jean-Jacques
>>>
>>> changes since v1:
>>> Changes take in account all the comment made during the first round of
>> review.
>>> But it also include a rework of the handling of the voltage supplies
>>> and 2 new helper functions that can be used by the host driver during
>>> tuning and dts parsing.
>>>
>>> Here is a detailed list:
>>>  * rebase on u-boot/master.
>>>  * add the description for the new functions/members
>>>  * fix the typos found in the reviews
>>>  * limit the new features to DM_MMC only
>>>  * fix the new checkpatch warnings/errors (is it now more strict ?)
>>>  * get the voltage regulators from dts (main and IO-lines)
>>>  * remove the set_vdd callback and do the job in the mmc core
>>>  * add a send_init_stream callback to perform the 74 clock cycle
>>>    sequence after power up
>>>  * do a full power cycle (if possible) before the initialization. This ensures
>>>    that the sd/MMC is in valid knwon state. Also it allows to check if the
>> power
>>>    cycling works as expected.
>>>  * disable the UHS modes is power cycling is not available/working. This
>> ensures
>>>    that we won't be stuck if the UHS initialization fails.
>>>  * select the appropriate signal voltage when selecting a mode (MMC
>>> only)
>>>  * add a helper function to parse the generic dt bindings
>>>  * add a helper function to send the tuning command
>>>
>>> Jean-Jacques Hiblot (17):
>>>   mmc: dm: get the IO-line and main voltage regulators from the dts
>>>   mmc: split mmc_startup()
>>>   mmc: move the MMC startup for version above v4.0 in a separate
>>>     function
>>>   mmc: make ext_csd part of struct mmc
>>>   mmc: add a function to read and test the ext csd (mmc >= 4)
>>>   mmc: introduce mmc modes
>>>   mmc: Add a function to dump the mmc capabilities
>>>   mmc: use mmc modes to select the correct bus speed
>>>   cmd: mmc: display the mode name and current bus speed in the mmc
>> info
>>>   mmc: refactor SD startup to make it easier to support new modes
>>>   mmc: refactor MMC startup to make it easier to support new modes
>>>   mmc: Add a new callback function to perform the 74 clocks cycle
>>>     sequence
>>>   mmc: Add support for UHS modes
>>>   mmc: disable UHS modes if Vcc cannot be switched on and off
>>>   mmc: Change mode when switching to a boot partition
>>>   mmc: use the right voltage level for MMC DDR and HS200 modes
>>>   mmc: add a library function to send tuning command
>>>
>>> Kishon Vijay Abraham I (9):
>>>   mmc: make mmc_set_ios() return status
>>>   mmc: Enable signal voltage to be selected from mmc core
>>>   mmc: add power cyle support in mmc core
>>>   mmc: add a new mmc parameter to disable mmc clock
>>>   mmc: disable the mmc clock during power off
>>>   mmc: Add a execute_tuning() callback to the mmc operations.
>>>   mmc: add HS200 support in MMC core
>>>   mmc: Retry some MMC cmds on failure
>>>   dm: mmc: Add a library function to parse generic dt binding
>>>
>>>  cmd/mmc.c                |    3 +-
>>>  drivers/mmc/Kconfig      |   23 +
>>>  drivers/mmc/fsl_esdhc.c  |    2 +-
>>>  drivers/mmc/mmc-uclass.c |   87 +++
>>>  drivers/mmc/mmc.c        | 1511
>> ++++++++++++++++++++++++++++++++++------------
>>>  include/mmc.h            |  176 +++++-
>>>  6 files changed, 1417 insertions(+), 385 deletions(-)
>>>
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot@lists.denx.de
>> https://lists.denx.de/listinfo/u-boot