2021-02-04 12:12:25

by Yann Gautier

[permalink] [raw]
Subject: [PATCH 0/2] mmc: mmci/mmc_test: update mmc_erase management

From: Yann Gautier <[email protected]>

We are facing issues when testing STM32MP157C-EV1 board with latest MMC
developments.

The commands with R1B responses weren't correctly managed, needing
MMC_CAP_NEED_RSP_BUSY.
The Ux500 platforms have the same busy detection feature, so this
flag is enabled for them too. But this change has only been tested
on STM32MP1 boards, as I don't have ux500 hardware.

The mmc_test should rely on the erase argument set in the framework,
when using MMC_ERASE command.

Yann Gautier (2):
mmc: mmci: enable MMC_CAP_NEED_RSP_BUSY
mmc: mmc_test: use erase_arg for mmc_erase command

drivers/mmc/core/mmc_test.c | 2 +-
drivers/mmc/host/mmci.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

--
2.17.1


2021-02-04 12:14:40

by Yann Gautier

[permalink] [raw]
Subject: [PATCH 2/2] mmc: mmc_test: use erase_arg for mmc_erase command

From: Yann Gautier <[email protected]>

Since [1], the erase argument for mmc_erase() function is saved in
erase_arg field of card structure. It is preferable to use it instead of
hard-coded MMC_SECURE_ERASE_ARG, which from eMMC 4.51 spec is not
recommended:
"6.6.16 Secure Erase
NOTE Secure Erase is included for backwards compatibility. New system
level implementations (based on v4.51 devices and beyond) should use
Erase combined with Sanitize instead of secure erase."

[1] commit 01904ff77676 ("mmc: core: Calculate the discard arg only once")

Signed-off-by: Yann Gautier <[email protected]>
---
drivers/mmc/core/mmc_test.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
index 39a478874ca3..63524551a13a 100644
--- a/drivers/mmc/core/mmc_test.c
+++ b/drivers/mmc/core/mmc_test.c
@@ -2110,7 +2110,7 @@ static int mmc_test_rw_multiple(struct mmc_test_card *test,
if (mmc_can_erase(test->card) &&
tdata->prepare & MMC_TEST_PREP_ERASE) {
ret = mmc_erase(test->card, dev_addr,
- size / 512, MMC_SECURE_ERASE_ARG);
+ size / 512, test->card->erase_arg);
if (ret)
ret = mmc_erase(test->card, dev_addr,
size / 512, MMC_ERASE_ARG);
--
2.17.1

2021-02-05 06:35:08

by Adrian Hunter

[permalink] [raw]
Subject: Re: [PATCH 2/2] mmc: mmc_test: use erase_arg for mmc_erase command

On 4/02/21 2:05 pm, [email protected] wrote:
> From: Yann Gautier <[email protected]>
>
> Since [1], the erase argument for mmc_erase() function is saved in
> erase_arg field of card structure. It is preferable to use it instead of
> hard-coded MMC_SECURE_ERASE_ARG, which from eMMC 4.51 spec is not
> recommended:
> "6.6.16 Secure Erase
> NOTE Secure Erase is included for backwards compatibility. New system
> level implementations (based on v4.51 devices and beyond) should use
> Erase combined with Sanitize instead of secure erase."
>
> [1] commit 01904ff77676 ("mmc: core: Calculate the discard arg only once")
>

Did you experience an issue because of this? You could add that to the
commit message.

There does not seem to be a need for secure erase, so:

Acked-by: Adrian Hunter <[email protected]>


> Signed-off-by: Yann Gautier <[email protected]>
> ---
> drivers/mmc/core/mmc_test.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
> index 39a478874ca3..63524551a13a 100644
> --- a/drivers/mmc/core/mmc_test.c
> +++ b/drivers/mmc/core/mmc_test.c
> @@ -2110,7 +2110,7 @@ static int mmc_test_rw_multiple(struct mmc_test_card *test,
> if (mmc_can_erase(test->card) &&
> tdata->prepare & MMC_TEST_PREP_ERASE) {
> ret = mmc_erase(test->card, dev_addr,
> - size / 512, MMC_SECURE_ERASE_ARG);
> + size / 512, test->card->erase_arg);
> if (ret)
> ret = mmc_erase(test->card, dev_addr,
> size / 512, MMC_ERASE_ARG);
>

2021-02-05 09:13:03

by Yann Gautier

[permalink] [raw]
Subject: Re: [PATCH 2/2] mmc: mmc_test: use erase_arg for mmc_erase command

On 2/5/21 7:33 AM, Adrian Hunter wrote:
> On 4/02/21 2:05 pm, [email protected] wrote:
>> From: Yann Gautier <[email protected]>
>>
>> Since [1], the erase argument for mmc_erase() function is saved in
>> erase_arg field of card structure. It is preferable to use it instead of
>> hard-coded MMC_SECURE_ERASE_ARG, which from eMMC 4.51 spec is not
>> recommended:
>> "6.6.16 Secure Erase
>> NOTE Secure Erase is included for backwards compatibility. New system
>> level implementations (based on v4.51 devices and beyond) should use
>> Erase combined with Sanitize instead of secure erase."
>>
>> [1] commit 01904ff77676 ("mmc: core: Calculate the discard arg only once")
>>
>
> Did you experience an issue because of this? You could add that to the
> commit message.

Hi Adrian,

Thanks for the review!
Yes, I've seen an issue on STM32MP157C-EV1 board.
After a write test (e.g. test 36), the tests 37 or 38, using mmc_erase
fail. With the erase argument used by default in the framework
(MMC_DISCARD_ARG), I can no more see this.

I can send a new version of the series with comment update here, and a
fixup on the first patch.


Regards,
Yann

>
> There does not seem to be a need for secure erase, so:
>
> Acked-by: Adrian Hunter <[email protected]>
>
>
>> Signed-off-by: Yann Gautier <[email protected]>
>> ---
>> drivers/mmc/core/mmc_test.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
>> index 39a478874ca3..63524551a13a 100644
>> --- a/drivers/mmc/core/mmc_test.c
>> +++ b/drivers/mmc/core/mmc_test.c
>> @@ -2110,7 +2110,7 @@ static int mmc_test_rw_multiple(struct mmc_test_card *test,
>> if (mmc_can_erase(test->card) &&
>> tdata->prepare & MMC_TEST_PREP_ERASE) {
>> ret = mmc_erase(test->card, dev_addr,
>> - size / 512, MMC_SECURE_ERASE_ARG);
>> + size / 512, test->card->erase_arg);
>> if (ret)
>> ret = mmc_erase(test->card, dev_addr,
>> size / 512, MMC_ERASE_ARG);
>>
>