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

Steve Rae
2016-07-25T23:23:21Z

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]