diff mbox series

mmc: rpmb: poll mmc status after sending rpmb request

Message ID 20230525054535.3181709-1-ji.luo@nxp.com
State New
Delegated to: Peng Fan
Headers show
Series mmc: rpmb: poll mmc status after sending rpmb request | expand

Commit Message

Ji Luo May 25, 2023, 5:45 a.m. UTC
polling the mmc status to make sure the rpmb request has been
sent and the mmc is not in BUSY state. This avoids potential
rpmb request failure during rpmb data write.

Signed-off-by: Ji Luo <ji.luo@nxp.com>
---
 drivers/mmc/rpmb.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Peng Fan (OSS) June 14, 2023, 11:50 a.m. UTC | #1
On 5/25/2023 1:45 PM, Ji Luo wrote:
> polling the mmc status to make sure the rpmb request has been
> sent and the mmc is not in BUSY state. This avoids potential
> rpmb request failure during rpmb data write.
> 
> Signed-off-by: Ji Luo <ji.luo@nxp.com>

Reviewed-by: Peng Fan <peng.fan@nxp.com>

> ---
>   drivers/mmc/rpmb.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/mmc/rpmb.c b/drivers/mmc/rpmb.c
> index b68d98573c..8bf19fd696 100644
> --- a/drivers/mmc/rpmb.c
> +++ b/drivers/mmc/rpmb.c
> @@ -94,6 +94,7 @@ static int mmc_rpmb_request(struct mmc *mmc, const struct s_rpmb *s,
>   	struct mmc_cmd cmd = {0};
>   	struct mmc_data data;
>   	struct sdhci_host *host = mmc->priv;
> +	int timeout_ms = 1000;
>   	int ret;
>   
>   	ret = mmc_set_blockcount(mmc, count, is_rel_write);
> @@ -123,6 +124,15 @@ static int mmc_rpmb_request(struct mmc *mmc, const struct s_rpmb *s,
>   #endif
>   		return 1;
>   	}
> +
> +	/* poll for the ready status */
> +	if (mmc_poll_for_busy(mmc, timeout_ms)) {
> +#ifdef CONFIG_MMC_RPMB_TRACE
> +		printf("%s:mmc is busy!\n", __func__);
> +#endif
> +		return 1;
> +	}
> +
>   	return 0;
>   }
>   static int mmc_rpmb_response(struct mmc *mmc, struct s_rpmb *s,
diff mbox series

Patch

diff --git a/drivers/mmc/rpmb.c b/drivers/mmc/rpmb.c
index b68d98573c..8bf19fd696 100644
--- a/drivers/mmc/rpmb.c
+++ b/drivers/mmc/rpmb.c
@@ -94,6 +94,7 @@  static int mmc_rpmb_request(struct mmc *mmc, const struct s_rpmb *s,
 	struct mmc_cmd cmd = {0};
 	struct mmc_data data;
 	struct sdhci_host *host = mmc->priv;
+	int timeout_ms = 1000;
 	int ret;
 
 	ret = mmc_set_blockcount(mmc, count, is_rel_write);
@@ -123,6 +124,15 @@  static int mmc_rpmb_request(struct mmc *mmc, const struct s_rpmb *s,
 #endif
 		return 1;
 	}
+
+	/* poll for the ready status */
+	if (mmc_poll_for_busy(mmc, timeout_ms)) {
+#ifdef CONFIG_MMC_RPMB_TRACE
+		printf("%s:mmc is busy!\n", __func__);
+#endif
+		return 1;
+	}
+
 	return 0;
 }
 static int mmc_rpmb_response(struct mmc *mmc, struct s_rpmb *s,