All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/3] Support SDMA mode on RPI4 target - 32bit
       [not found] <CGME20200324225852epcas1p319422d642625e38efb9febdb4f1385f9@epcas1p3.samsung.com>
@ 2020-03-24 22:58 ` Jaehoon Chung
       [not found]   ` <CGME20200324225852epcas1p2956b4c12ca37492f1bae49dbca6250fd@epcas1p2.samsung.com>
                     ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jaehoon Chung @ 2020-03-24 22:58 UTC (permalink / raw)
  To: u-boot

RPI4's SDHCI controller is supported SDMA mode. (Checked on kernel side)
But It doesn't use on u-boot side. Then it's too slow about read/write performance.
This patchset is supported SDMA mode on RPI4 target(32bit).
- I didn't test on RPI4 64bit.

Read/write time about 8MB file
Before
- Read : 1.472 seconds
- Write : 4.690 seconds
After
- Read : 0.359 seconds
- Write : 0.574 seconds

This patch is based on my RFC's patches.RPI4's SDHCI controller is supported SDMA mode. (Checked on kernel side)
But It doesn't use on u-boot side. Then it's too slow about read/write performance.
This patchset is supported SDMA mode on RPI4 target(32bit).
- I didn't test on RPI4 64bit.

Read/write time about 8MB file
Before
- Read : 1.472 seconds
- Write : 4.690 seconds
After
- Read : 0.359 seconds
- Write : 0.574 seconds

Changelog on V3
- Rebased on latest u-boot-mmc

Changelog on V2
- Keep printf message instead of debug
- Add Peng's Reviewed-by tag

Jaehoon Chung (3):
  mmc: sdhci: use phys2bus macro when dma address is accessed
  mmc: sdhci: not return error when SDMA is not supported
  configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config

 configs/rpi_4_32b_defconfig |  1 +
 drivers/mmc/sdhci.c         | 13 +++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

-- 
2.25.2

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 1/3] mmc: sdhci: use phys2bus macro when dma address is accessed
       [not found]   ` <CGME20200324225852epcas1p2956b4c12ca37492f1bae49dbca6250fd@epcas1p2.samsung.com>
@ 2020-03-24 22:58     ` Jaehoon Chung
  0 siblings, 0 replies; 7+ messages in thread
From: Jaehoon Chung @ 2020-03-24 22:58 UTC (permalink / raw)
  To: u-boot

Use phys2bus macro when dma address is accessed.
Some targets need to use pyhs2bus macro. (e.g, RPI4)
After applied it, SDMA mode can be used.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
---
 drivers/mmc/sdhci.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 520c9f9feb..2b7493fbac 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -16,6 +16,7 @@
 #include <sdhci.h>
 #include <dm.h>
 #include <linux/dma-mapping.h>
+#include <phys2bus.h>
 
 static void sdhci_reset(struct sdhci_host *host, u8 mask)
 {
@@ -150,7 +151,8 @@ static void sdhci_prepare_dma(struct sdhci_host *host, struct mmc_data *data,
 					  mmc_get_dma_dir(data));
 
 	if (host->flags & USE_SDMA) {
-		sdhci_writel(host, host->start_addr, SDHCI_DMA_ADDRESS);
+		sdhci_writel(host, phys_to_bus((ulong)host->start_addr),
+				SDHCI_DMA_ADDRESS);
 	} else if (host->flags & (USE_ADMA | USE_ADMA64)) {
 		sdhci_prepare_adma_table(host, data);
 
@@ -204,7 +206,7 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data)
 				start_addr &=
 				~(SDHCI_DEFAULT_BOUNDARY_SIZE - 1);
 				start_addr += SDHCI_DEFAULT_BOUNDARY_SIZE;
-				sdhci_writel(host, start_addr,
+				sdhci_writel(host, phys_to_bus((ulong)start_addr),
 					     SDHCI_DMA_ADDRESS);
 			}
 		}
-- 
2.25.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/3] mmc: sdhci: not return error when SDMA is not supported
       [not found]   ` <CGME20200324225852epcas1p208ec771c4f4205786eba6a61c79fb854@epcas1p2.samsung.com>
@ 2020-03-24 22:58     ` Jaehoon Chung
  0 siblings, 0 replies; 7+ messages in thread
From: Jaehoon Chung @ 2020-03-24 22:58 UTC (permalink / raw)
  To: u-boot

If Host controller doesn't support SDMA, it doesn't need to return
error. Because it can be worked with PIO mode.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
---
 drivers/mmc/sdhci.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 2b7493fbac..49e67fc7bd 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -741,13 +741,12 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
 	debug("%s, caps: 0x%x\n", __func__, caps);
 
 #ifdef CONFIG_MMC_SDHCI_SDMA
-	if (!(caps & SDHCI_CAN_DO_SDMA)) {
+	if ((caps & SDHCI_CAN_DO_SDMA)) {
+		host->flags |= USE_SDMA;
+	} else {
 		printf("%s: Your controller doesn't support SDMA!!\n",
 		       __func__);
-		return -EINVAL;
 	}
-
-	host->flags |= USE_SDMA;
 #endif
 #if CONFIG_IS_ENABLED(MMC_SDHCI_ADMA)
 	if (!(caps & SDHCI_CAN_DO_ADMA2)) {
-- 
2.25.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config
       [not found]   ` <CGME20200324225852epcas1p49db843af21ff2b0c19718af029aee773@epcas1p4.samsung.com>
@ 2020-03-24 22:58     ` Jaehoon Chung
  2020-03-25 16:09       ` Matthias Brugger
  0 siblings, 1 reply; 7+ messages in thread
From: Jaehoon Chung @ 2020-03-24 22:58 UTC (permalink / raw)
  To: u-boot

Enable SDHCI_SDMA configuration.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
---
 configs/rpi_4_32b_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
index 72cda5d949..7189914606 100644
--- a/configs/rpi_4_32b_defconfig
+++ b/configs/rpi_4_32b_defconfig
@@ -25,6 +25,7 @@ CONFIG_DFU_MMC=y
 CONFIG_DM_KEYBOARD=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_SDMA=y
 CONFIG_MMC_SDHCI_BCM2835=y
 CONFIG_DM_ETH=y
 CONFIG_BCMGENET=y
-- 
2.25.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config
  2020-03-24 22:58     ` [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config Jaehoon Chung
@ 2020-03-25 16:09       ` Matthias Brugger
  2020-03-26  4:51         ` Jaehoon Chung
  0 siblings, 1 reply; 7+ messages in thread
From: Matthias Brugger @ 2020-03-25 16:09 UTC (permalink / raw)
  To: u-boot



On 24/03/2020 23:58, Jaehoon Chung wrote:
> Enable SDHCI_SDMA configuration.
> 
> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
> Reviewed-by: Peng Fan <peng.fan@nxp.com>
> Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
> ---
>  configs/rpi_4_32b_defconfig | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
> index 72cda5d949..7189914606 100644
> --- a/configs/rpi_4_32b_defconfig
> +++ b/configs/rpi_4_32b_defconfig
> @@ -25,6 +25,7 @@ CONFIG_DFU_MMC=y
>  CONFIG_DM_KEYBOARD=y
>  CONFIG_DM_MMC=y
>  CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_SDMA=y

RPi4 can only do DMA transfers to the first GiB of memory. I wasn't sucessfull
in understanding the mmc/sdhci code to see where we take the dma-ranges property
into account so that we don't use an address > 1 GiB.

Are we safe in this regard? If we are, then we can also enable this for
rpi_4_defconfig and rpi_arm64_defconfig I think.

Regards,
Matthias

>  CONFIG_MMC_SDHCI_BCM2835=y
>  CONFIG_DM_ETH=y
>  CONFIG_BCMGENET=y
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config
  2020-03-25 16:09       ` Matthias Brugger
@ 2020-03-26  4:51         ` Jaehoon Chung
  2020-03-26  8:46           ` Matthias Brugger
  0 siblings, 1 reply; 7+ messages in thread
From: Jaehoon Chung @ 2020-03-26  4:51 UTC (permalink / raw)
  To: u-boot

On 3/26/20 1:09 AM, Matthias Brugger wrote:
> 
> 
> On 24/03/2020 23:58, Jaehoon Chung wrote:
>> Enable SDHCI_SDMA configuration.
>>
>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> Reviewed-by: Peng Fan <peng.fan@nxp.com>
>> Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
>> ---
>>  configs/rpi_4_32b_defconfig | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
>> index 72cda5d949..7189914606 100644
>> --- a/configs/rpi_4_32b_defconfig
>> +++ b/configs/rpi_4_32b_defconfig
>> @@ -25,6 +25,7 @@ CONFIG_DFU_MMC=y
>>  CONFIG_DM_KEYBOARD=y
>>  CONFIG_DM_MMC=y
>>  CONFIG_MMC_SDHCI=y
>> +CONFIG_MMC_SDHCI_SDMA=y
> 
> RPi4 can only do DMA transfers to the first GiB of memory. I wasn't sucessfull
> in understanding the mmc/sdhci code to see where we take the dma-ranges property
> into account so that we don't use an address > 1 GiB.

Sorry i don't understand clearly what you said.

> 
> Are we safe in this regard? If we are, then we can also enable this for
> rpi_4_defconfig and rpi_arm64_defconfig I think.

I checked rpi_arm64_defconfig history. it's unified config for RPi3/RPI4.
As i know, RPi3 doesn't support SDMA mode. So i don't have a plan to apply rpi_arm64_defconfig.
(If i understood wrong, let me know,plz.)

I have tested SDMA mode With rpi_4_defconfig / rpi_4_32b_defconfig.
Test Environment
- Target : RPI4 (1G/2G/4G) target
- config : rpi_4_defconfig / rpi_4_32b_defconfig

Read/write some files from Sd-card.
Read/write performance is increased than before.

I will resend with rpi_4_defconfig, except rpi_arm64_defconfig.

Best Regards,
Jaehoon Chung

> 
> Regards,
> Matthias
> 
>>  CONFIG_MMC_SDHCI_BCM2835=y
>>  CONFIG_DM_ETH=y
>>  CONFIG_BCMGENET=y
>>
> 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config
  2020-03-26  4:51         ` Jaehoon Chung
@ 2020-03-26  8:46           ` Matthias Brugger
  0 siblings, 0 replies; 7+ messages in thread
From: Matthias Brugger @ 2020-03-26  8:46 UTC (permalink / raw)
  To: u-boot



On 26/03/2020 05:51, Jaehoon Chung wrote:
> On 3/26/20 1:09 AM, Matthias Brugger wrote:
>>
>>
>> On 24/03/2020 23:58, Jaehoon Chung wrote:
>>> Enable SDHCI_SDMA configuration.
>>>
>>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>>> Reviewed-by: Peng Fan <peng.fan@nxp.com>
>>> Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
>>> ---
>>>  configs/rpi_4_32b_defconfig | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
>>> index 72cda5d949..7189914606 100644
>>> --- a/configs/rpi_4_32b_defconfig
>>> +++ b/configs/rpi_4_32b_defconfig
>>> @@ -25,6 +25,7 @@ CONFIG_DFU_MMC=y
>>>  CONFIG_DM_KEYBOARD=y
>>>  CONFIG_DM_MMC=y
>>>  CONFIG_MMC_SDHCI=y
>>> +CONFIG_MMC_SDHCI_SDMA=y
>>
>> RPi4 can only do DMA transfers to the first GiB of memory. I wasn't sucessfull
>> in understanding the mmc/sdhci code to see where we take the dma-ranges property
>> into account so that we don't use an address > 1 GiB.
> 
> Sorry i don't understand clearly what you said.
> 

I'll try to rephrase:
How do we make sure that DMA uses only addresses the in the first GiB of RAM for
it's transactions. That a limitation the RPi4 has.

>>
>> Are we safe in this regard? If we are, then we can also enable this for
>> rpi_4_defconfig and rpi_arm64_defconfig I think.
> 
> I checked rpi_arm64_defconfig history. it's unified config for RPi3/RPI4.
> As i know, RPi3 doesn't support SDMA mode. So i don't have a plan to apply rpi_arm64_defconfig.
> (If i understood wrong, let me know,plz.)
> 

Yes, well we have two different device tree compatibles for them. We have to
change the driver to make sure only sdhci of RPi4 does enable SDMA.

Regards,
Matthias

> I have tested SDMA mode With rpi_4_defconfig / rpi_4_32b_defconfig.
> Test Environment
> - Target : RPI4 (1G/2G/4G) target
> - config : rpi_4_defconfig / rpi_4_32b_defconfig
> 
> Read/write some files from Sd-card.
> Read/write performance is increased than before.
> 
> I will resend with rpi_4_defconfig, except rpi_arm64_defconfig.
> 
> Best Regards,
> Jaehoon Chung
> 
>>
>> Regards,
>> Matthias
>>
>>>  CONFIG_MMC_SDHCI_BCM2835=y
>>>  CONFIG_DM_ETH=y
>>>  CONFIG_BCMGENET=y
>>>
>>
>>
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-03-26  8:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20200324225852epcas1p319422d642625e38efb9febdb4f1385f9@epcas1p3.samsung.com>
2020-03-24 22:58 ` [PATCH v3 0/3] Support SDMA mode on RPI4 target - 32bit Jaehoon Chung
     [not found]   ` <CGME20200324225852epcas1p2956b4c12ca37492f1bae49dbca6250fd@epcas1p2.samsung.com>
2020-03-24 22:58     ` [PATCH v3 1/3] mmc: sdhci: use phys2bus macro when dma address is accessed Jaehoon Chung
     [not found]   ` <CGME20200324225852epcas1p208ec771c4f4205786eba6a61c79fb854@epcas1p2.samsung.com>
2020-03-24 22:58     ` [PATCH v3 2/3] mmc: sdhci: not return error when SDMA is not supported Jaehoon Chung
     [not found]   ` <CGME20200324225852epcas1p49db843af21ff2b0c19718af029aee773@epcas1p4.samsung.com>
2020-03-24 22:58     ` [PATCH v3 3/3] configs: rpi_4_32b_defconfig: enable SDHCI_SDMA config Jaehoon Chung
2020-03-25 16:09       ` Matthias Brugger
2020-03-26  4:51         ` Jaehoon Chung
2020-03-26  8:46           ` Matthias Brugger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.