mmc: st: correct retries management

The retries number should be 3.
A warning message is added in mmc_block_read(), and the code is refactored.

Change-Id: I577c7dd91c451c7580b1660042cb5fe26ee3fa12
Signed-off-by: Yann Gautier <yann.gautier@st.com>
This commit is contained in:
Yann Gautier 2020-06-12 12:17:17 +02:00
parent ea30694561
commit 7d8e1218c2
2 changed files with 22 additions and 15 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -97,14 +97,21 @@ static int mmc_block_seek(io_entity_t *entity, int mode,
static int mmc_block_read(io_entity_t *entity, uintptr_t buffer,
size_t length, size_t *length_read)
{
*length_read = mmc_read_blocks(seek_offset / MMC_BLOCK_SIZE,
buffer, length);
uint8_t retries;
if (*length_read != length) {
return -EIO;
for (retries = 0U; retries < 3U; retries++) {
*length_read = mmc_read_blocks(seek_offset / MMC_BLOCK_SIZE,
buffer, length);
if (*length_read == length) {
return 0;
}
WARN("%s: length_read = %lu (!= %lu), retry %u\n", __func__,
(unsigned long)*length_read, (unsigned long)length,
retries + 1U);
}
return 0;
return -EIO;
}
/* Close a file on the mmc device */

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2019, STMicroelectronics - All Rights Reserved
* Copyright (c) 2018-2020, STMicroelectronics - All Rights Reserved
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -373,15 +373,15 @@ err_exit:
static int stm32_sdmmc2_send_cmd(struct mmc_cmd *cmd)
{
int8_t retry;
int err = 0;
uint8_t retry;
int err;
assert(cmd != NULL);
for (retry = 0; retry <= 3; retry++) {
for (retry = 0U; retry < 3U; retry++) {
err = stm32_sdmmc2_send_cmd_req(cmd);
if (err == 0) {
return err;
return 0;
}
if ((cmd->cmd_idx == MMC_CMD(1)) ||
@ -390,12 +390,12 @@ static int stm32_sdmmc2_send_cmd(struct mmc_cmd *cmd)
}
/* Command 8 is expected to fail for eMMC */
if (!(cmd->cmd_idx == MMC_CMD(8))) {
WARN(" CMD%d, Retry: %d, Error: %d\n",
cmd->cmd_idx, retry, err);
if (cmd->cmd_idx != MMC_CMD(8)) {
WARN(" CMD%u, Retry: %u, Error: %d\n",
cmd->cmd_idx, retry + 1U, err);
}
udelay(10);
udelay(10U);
}
return err;