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

2022-03-12 Thread Johan Jonker



On 3/12/22 10:23, Jagan Teki wrote:
> On Wed, Feb 23, 2022 at 6:37 PM Johan Jonker  wrote:
>>
>> From: Paweł Jarosz 
>>
>> 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 
>> Signed-off-by: Johan Jonker 
>> ---
>>
>> 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.


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

2022-03-12 Thread Jagan Teki
On Wed, Feb 23, 2022 at 6:37 PM Johan Jonker  wrote:
>
> From: Paweł Jarosz 
>
> 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.
>
> Signed-off-by: Paweł Jarosz 
> Signed-off-by: Johan Jonker 
> ---
>
> 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.


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

2022-02-23 Thread Johan Jonker
From: Paweł Jarosz 

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.

Signed-off-by: Paweł Jarosz 
Signed-off-by: Johan Jonker 
---

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;
+
/* Enumerate at 400KHz */
dwmci_setup_bus(host, mmc->cfg->f_min);
 
diff --git a/include/dwmmc.h b/include/dwmmc.h
index 5fc8ed83..d8d9ebe7 100644
--- a/include/dwmmc.h
+++ b/include/dwmmc.h
@@ -9,6 +9,7 @@
 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -119,6 +120,10 @@
 #define RX_WMARK_SHIFT 16
 #define RX_WMARK_MASK  (0xfff << RX_WMARK_SHIFT)
 
+/* HCON Register */
+#define DMA_INTERFACE_IDMA (0x0)
+#define SDMMC_GET_TRANS_MODE(x)bitfield_extract(x, 16, 2)
+
 #define DWMCI_IDMAC_OWN(1 << 31)
 #define DWMCI_IDMAC_CH (1 << 4)
 #define DWMCI_IDMAC_FS (1 << 3)
-- 
2.20.1