[PATCH v2 2/2] mmc: dw_mmc: support transfer mode auto detection

Johan Jonker jbx6244 at gmail.com
Sat Mar 12 10:44:01 CET 2022



On 3/12/22 10:23, Jagan Teki wrote:
> On Wed, Feb 23, 2022 at 6:37 PM Johan Jonker <jbx6244 at gmail.com> wrote:
>>
>> From: Paweł Jarosz <paweljarosz3691 at gmail.com>
>>
>> dw_mmc supports two transfer modes in u-boot: IDMA and FIFO.
>> This patch adds auto detection of transfer mode and
>> eliminates the need to set this in host config struct.
>> Allow handling for a u-boot,spl-fifo-mode host property in the
>> logic to not put the MMC controllers into FIFO mode for all time.
> 

> Does it mean fifo-mode property is not useful in SPI and U-Boot
> proper? If yes better drop that change as part of this patch.

This is about setting the fifo-mode for rk3066/rk3188 without DT as
these early models don't seem to have IDMA.

Handling of the fifo_mode variable is still needed for the Rockchip
exception that needs to be included in the logic.

rockchip: dwmmc: add handling for u-boot, spl-fifo-mode
https://source.denx.de/u-boot/custodians/u-boot-rockchip/-/commit/c8dd0e42d709c9734f313c547d0707e27ca0de51

We could remove normal fifo-mode parsing, but as this is a generic file
for multiple SoC families I'm a little bit reluctant to change that for
other drivers then Rockchip.

Otherwise patch V1 does the job without changing dw_mmc.c

Please advise what direction we should go or what changes should be made.

Kind regards,

Johan Jonker


>>
>> Signed-off-by: Paweł Jarosz <paweljarosz3691 at gmail.com>
>> Signed-off-by: Johan Jonker <jbx6244 at gmail.com>
>> ---
>>
>> Changed V2:
>>   use bitfield_extract
>>   remove use_dma variable
>>   include fifo_mode from host in logic
>> ---
>>  drivers/mmc/dw_mmc.c | 6 ++++++
>>  include/dwmmc.h      | 5 +++++
>>  2 files changed, 11 insertions(+)
>>
>> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
>> index a949dad5..7e2cd5ed 100644
>> --- a/drivers/mmc/dw_mmc.c
>> +++ b/drivers/mmc/dw_mmc.c
>> @@ -536,6 +536,12 @@ static int dwmci_init(struct mmc *mmc)
>>                 return -EIO;
>>         }
>>
>> +       if (!host->fifo_mode &&
>> +           SDMMC_GET_TRANS_MODE(dwmci_readl(host, DWMCI_HCON)) == DMA_INTERFACE_IDMA)
>> +               host->fifo_mode = 0;
>> +       else
>> +               host->fifo_mode = 1;
> 
> fifo_mode is bool so use true/false.
> 
> Jagan.


More information about the U-Boot mailing list