diff mbox

[U-Boot,1/2] mmc: sdhci: set to INT_DATA_END when there are data

Message ID CAAGaQKBUuYfhq-shicUUtdHuEvZd1VqV0gCgpK31x=FkwEjqvw@mail.gmail.com
State Not Applicable
Headers show

Commit Message

Steve Rae July 25, 2016, 11:23 p.m. UTC
Hi Jaehoon,

On Mon, Jul 25, 2016 at 3:21 AM, Lukasz Majewski <l.majewski@samsung.com> wrote:
> Hi Jaehoon,
>
>> Hi All,
>>
>> On 07/12/2016 09:55 PM, Lukasz Majewski wrote:
>> > Hi Jaehoon,
>> >
>> >> There is no data, it doesn't needs to wait for completing data
>> >> transfer. (It seems that it can be removed.)
>> >> Almost all timeout error is occured from stop command without data.
>> >> After applied this patch, I hope that we don't need to increase
>> >> timeout value anymore.
>> >
>> > This patch fixes issue (in a better way) for Odroid U3 write
>> > performance (http://patchwork.ozlabs.org/patch/646932/) and hence
>> > should be used.
>> >
>>
>> Is there any other opinion for this patch?
>> Who is maintaining u-boot-mmc? Is Pantelis still maintaining
>> u-boot-mmc?
>>
>> Who can apply this patch and patch relevant to mmc?
>
> To be honest, I do look forward to see this patch included to u-boot
> master branch.
>
> Addition of some extra Odroid U3 tests hinge on it.
>
>>
>> Best Regards,
>> Jaehoon Chung
>>
>> >
>> >>
>> >> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> >> ---
>> >>  drivers/mmc/sdhci.c | 3 ++-
>> >>  1 file changed, 2 insertions(+), 1 deletion(-)
>> >>
>> >> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>> >> index 604f18d..0a38a56 100644
>> >> --- a/drivers/mmc/sdhci.c
>> >> +++ b/drivers/mmc/sdhci.c
>> >> @@ -175,7 +175,8 @@ static int sdhci_send_command(struct mmc *mmc,
>> >> struct mmc_cmd *cmd, flags = SDHCI_CMD_RESP_LONG;
>> >>    else if (cmd->resp_type & MMC_RSP_BUSY) {
>> >>            flags = SDHCI_CMD_RESP_SHORT_BUSY;
>> >> -          mask |= SDHCI_INT_DATA_END;
>> >> +          if (data)
>> >> +                  mask |= SDHCI_INT_DATA_END;
>> >>    } else
>> >>            flags = SDHCI_CMD_RESP_SHORT;
>> >>
>> >
>> > Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>> > Tested-by: Lukasz Majewski <l.majewski@samsung.com>
>> >
>> > Test HW: Odroid U3 (Exynos4):
>> >
>> > Odroid # ext4load mmc 0:2 0x41000000 dat_31M.img
>> > 32505856 bytes read in 1471 ms (21.1 MiB/s)
>> > Odroid # ext4write mmc 0:2 0x41000000 /dat_w55.img 0x1f00000
>> > File System is consistent
>> > update journal finished
>> > 32505856 bytes written in 3528 ms (8.8 MiB/s)
>> >
>> > Performance improvement is even better than with previously proposed
>> > patches.
>> >
>> > Test HW: Odroid XU3 (Exynos5):
>> >
>> > ODROID-XU3 # ext4load mmc 0:2 0x41000000 dat_31M.img
>> > 32505856 bytes read in 6309 ms (4.9 MiB/s)
>> > ODROID-XU3 # ext4write mmc 0:2 0x41000000 /dat_w1.img 0x1f00000
>> > File System is consistent
>> > update journal finished
>> > 32505856 bytes written in 4884 ms (6.3 MiB/s)
>> >
>> >
>>
>
>
>
> --
> Best regards,
>
> Lukasz Majewski
>
> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

with this change, I can also set the following back to 100:

 static int sdhci_send_command(struct udevice *dev, struct mmc_cmd *cmd,

And it still works on my board !  Thanks !

Tested-by: Steve Rae <steve.rae@raedomain.com> [Test HW: bcm235xx board]

Comments

Steve Rae July 25, 2016, 11:28 p.m. UTC | #1
On Mon, Jul 25, 2016 at 4:23 PM, Steve Rae <steve.rae@raedomain.com> wrote:
> Hi Jaehoon,
>
> On Mon, Jul 25, 2016 at 3:21 AM, Lukasz Majewski <l.majewski@samsung.com> wrote:
>> Hi Jaehoon,
>>
>>> Hi All,
>>>
>>> On 07/12/2016 09:55 PM, Lukasz Majewski wrote:
>>> > Hi Jaehoon,
>>> >
>>> >> There is no data, it doesn't needs to wait for completing data
>>> >> transfer. (It seems that it can be removed.)
>>> >> Almost all timeout error is occured from stop command without data.
>>> >> After applied this patch, I hope that we don't need to increase
>>> >> timeout value anymore.
>>> >
>>> > This patch fixes issue (in a better way) for Odroid U3 write
>>> > performance (http://patchwork.ozlabs.org/patch/646932/) and hence
>>> > should be used.
>>> >
>>>
>>> Is there any other opinion for this patch?
>>> Who is maintaining u-boot-mmc? Is Pantelis still maintaining
>>> u-boot-mmc?
>>>
>>> Who can apply this patch and patch relevant to mmc?
>>
>> To be honest, I do look forward to see this patch included to u-boot
>> master branch.
>>
>> Addition of some extra Odroid U3 tests hinge on it.
>>
>>>
>>> Best Regards,
>>> Jaehoon Chung
>>>
>>> >
>>> >>
>>> >> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>>> >> ---
>>> >>  drivers/mmc/sdhci.c | 3 ++-
>>> >>  1 file changed, 2 insertions(+), 1 deletion(-)
>>> >>
>>> >> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>>> >> index 604f18d..0a38a56 100644
>>> >> --- a/drivers/mmc/sdhci.c
>>> >> +++ b/drivers/mmc/sdhci.c
>>> >> @@ -175,7 +175,8 @@ static int sdhci_send_command(struct mmc *mmc,
>>> >> struct mmc_cmd *cmd, flags = SDHCI_CMD_RESP_LONG;
>>> >>    else if (cmd->resp_type & MMC_RSP_BUSY) {
>>> >>            flags = SDHCI_CMD_RESP_SHORT_BUSY;
>>> >> -          mask |= SDHCI_INT_DATA_END;
>>> >> +          if (data)
>>> >> +                  mask |= SDHCI_INT_DATA_END;
>>> >>    } else
>>> >>            flags = SDHCI_CMD_RESP_SHORT;
>>> >>
>>> >
>>> > Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>>> > Tested-by: Lukasz Majewski <l.majewski@samsung.com>
>>> >
>>> > Test HW: Odroid U3 (Exynos4):
>>> >
>>> > Odroid # ext4load mmc 0:2 0x41000000 dat_31M.img
>>> > 32505856 bytes read in 1471 ms (21.1 MiB/s)
>>> > Odroid # ext4write mmc 0:2 0x41000000 /dat_w55.img 0x1f00000
>>> > File System is consistent
>>> > update journal finished
>>> > 32505856 bytes written in 3528 ms (8.8 MiB/s)
>>> >
>>> > Performance improvement is even better than with previously proposed
>>> > patches.
>>> >
>>> > Test HW: Odroid XU3 (Exynos5):
>>> >
>>> > ODROID-XU3 # ext4load mmc 0:2 0x41000000 dat_31M.img
>>> > 32505856 bytes read in 6309 ms (4.9 MiB/s)
>>> > ODROID-XU3 # ext4write mmc 0:2 0x41000000 /dat_w1.img 0x1f00000
>>> > File System is consistent
>>> > update journal finished
>>> > 32505856 bytes written in 4884 ms (6.3 MiB/s)
>>> >
>>> >
>>>
>>
>>
>>
>> --
>> Best regards,
>>
>> Lukasz Majewski
>>
>> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
>
> with this change, I can also set the following back to 100:
>
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index de8d8ea..d593dc6 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -128,7 +128,7 @@ static int sdhci_transfer_data(struct sdhci_host
> *host, struct mmc_data *data,
>  #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
>  #endif
>  #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
> -#define SDHCI_READ_STATUS_TIMEOUT              1000
> +#define SDHCI_READ_STATUS_TIMEOUT              100
>
>  #ifdef CONFIG_DM_MMC_OPS
>  static int sdhci_send_command(struct udevice *dev, struct mmc_cmd *cmd,
>
> And it still works on my board !  Thanks !
>
> Tested-by: Steve Rae <steve.rae@raedomain.com> [Test HW: bcm235xx board]

patchworks added a new entry; so try again:
Tested-by: Steve Rae <steve.rae@raedomain.com> [Test HW: bcm235xx board]
Ɓukasz Majewski July 26, 2016, 9:13 a.m. UTC | #2
Hi Steve,

> with this change, I can also set the following back to 100:
> 
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index de8d8ea..d593dc6 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -128,7 +128,7 @@ static int sdhci_transfer_data(struct sdhci_host
> *host, struct mmc_data *data,
>  #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
>  #endif
>  #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
> -#define SDHCI_READ_STATUS_TIMEOUT              1000
> +#define SDHCI_READ_STATUS_TIMEOUT              100
> 
>  #ifdef CONFIG_DM_MMC_OPS
>  static int sdhci_send_command(struct udevice *dev, struct mmc_cmd
> *cmd,
> 
> And it still works on my board !  Thanks !

Could you prepare proper revert patch?
Steve Rae July 26, 2016, 4:10 p.m. UTC | #3
HI Lukasz,

On Tue, Jul 26, 2016 at 2:13 AM, Lukasz Majewski <l.majewski@samsung.com> wrote:
> Hi Steve,
>
>> with this change, I can also set the following back to 100:
>>
>> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>> index de8d8ea..d593dc6 100644
>> --- a/drivers/mmc/sdhci.c
>> +++ b/drivers/mmc/sdhci.c
>> @@ -128,7 +128,7 @@ static int sdhci_transfer_data(struct sdhci_host
>> *host, struct mmc_data *data,
>>  #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
>>  #endif
>>  #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
>> -#define SDHCI_READ_STATUS_TIMEOUT              1000
>> +#define SDHCI_READ_STATUS_TIMEOUT              100
>>
>>  #ifdef CONFIG_DM_MMC_OPS
>>  static int sdhci_send_command(struct udevice *dev, struct mmc_cmd
>> *cmd,
>>
>> And it still works on my board !  Thanks !
>
> Could you prepare proper revert patch?
>
> --
> Best regards,
>
> Lukasz Majewski
>
> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

Looking at the code, I don't think there is any value changing the
SDHCI_READ_STATUS_TIMEOUT from 1000 to 100.
But maybe someone (Jaehoon ?) could comment on the impact of this
SDHCI_READ_STATUS_TIMEOUT value in the SDHCI_QUIRK_BROKEN_R1B case...
Does it affect performance in anyway?
If it does, the I'll prepare a patch....

Thanks, Steve
Jaehoon Chung July 27, 2016, 5:11 a.m. UTC | #4
Hi 

On 07/27/2016 01:10 AM, Steve Rae wrote:
> HI Lukasz,
> 
> On Tue, Jul 26, 2016 at 2:13 AM, Lukasz Majewski <l.majewski@samsung.com> wrote:
>> Hi Steve,
>>
>>> with this change, I can also set the following back to 100:
>>>
>>> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>>> index de8d8ea..d593dc6 100644
>>> --- a/drivers/mmc/sdhci.c
>>> +++ b/drivers/mmc/sdhci.c
>>> @@ -128,7 +128,7 @@ static int sdhci_transfer_data(struct sdhci_host
>>> *host, struct mmc_data *data,
>>>  #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
>>>  #endif
>>>  #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
>>> -#define SDHCI_READ_STATUS_TIMEOUT              1000
>>> +#define SDHCI_READ_STATUS_TIMEOUT              100
>>>
>>>  #ifdef CONFIG_DM_MMC_OPS
>>>  static int sdhci_send_command(struct udevice *dev, struct mmc_cmd
>>> *cmd,
>>>
>>> And it still works on my board !  Thanks !
>>
>> Could you prepare proper revert patch?
>>
>> --
>> Best regards,
>>
>> Lukasz Majewski
>>
>> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
> 
> Looking at the code, I don't think there is any value changing the
> SDHCI_READ_STATUS_TIMEOUT from 1000 to 100.
> But maybe someone (Jaehoon ?) could comment on the impact of this
> SDHCI_READ_STATUS_TIMEOUT value in the SDHCI_QUIRK_BROKEN_R1B case...
> Does it affect performance in anyway?

There is no performance effect whatever SDHCI_READ_STATUS_TIMEOUT is using value.
So i think that we don't need to revert it..

SDHCI_QUIRK_BROKEN_R1B had been added from me.
At that time, i didn't know why added SDHCI_INT_DAT_END.
I'm not sure but if remove the SDHCI_INT_DAT_END, 
I guess that SDHCI_QUIRK_BROKEN_R1B can be also removed.
(quirks is workaround flags, so if it can be removed, it's best.)

In future, I want to remove SDHCI_QUIRK_BROKEN_R1B.

Best Regards,
Jaehoon Chung

> If it does, the I'll prepare a patch....
> 
> Thanks, Steve
> 
> 
>
diff mbox

Patch

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index de8d8ea..d593dc6 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -128,7 +128,7 @@  static int sdhci_transfer_data(struct sdhci_host
*host, struct mmc_data *data,
 #define CONFIG_SDHCI_CMD_MAX_TIMEOUT           3200
 #endif
 #define CONFIG_SDHCI_CMD_DEFAULT_TIMEOUT       100
-#define SDHCI_READ_STATUS_TIMEOUT              1000
+#define SDHCI_READ_STATUS_TIMEOUT              100

 #ifdef CONFIG_DM_MMC_OPS