Message ID | 1506004213-22620-1-git-send-email-jjhiblot@ti.com |
---|---|
Headers | show |
Series | mmc: Add support for HS200 and UHS modes | expand |
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(-) >
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(-) >> >
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 ?
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 >
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 ? :-)
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 >
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(-) >
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
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.
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