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(-) > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot