Linux MultiMedia Card development
 help / color / mirror / Atom feed
* [PATCH v3] mmc: core: allow detection of locked cards
@ 2024-05-23 13:20 linux-mmc
  2024-06-01 21:43 ` Daniel Kucera
  0 siblings, 1 reply; 7+ messages in thread
From: linux-mmc @ 2024-05-23 13:20 UTC (permalink / raw)
  To: linux-mmc, ulf.hansson; +Cc: Daniel Kucera

From: Daniel Kucera <linux-mmc@danman.eu>

Locked card will not reply to SEND_SCR or SD_STATUS commands
so it was failing to initialize previously. When skipped,
the card will get initialized and CMD42 can be sent using
ioctl to unlock the card or remove password protection.
Until unlocked, all read/write calls will timeout.

Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
---
 drivers/mmc/core/sd.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 1c8148cdd..ae821df7d 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
 	bool reinit)
 {
 	int err;
+	u32 card_status;
 
-	if (!reinit) {
+	err = mmc_send_status(card, &card_status);
+	if (err){
+		pr_err("%s: unable to get card status\n", mmc_hostname(host));
+		return err;
+	}
+
+	if (card_status & R1_CARD_IS_LOCKED){
+		pr_warn("%s: card is locked\n", mmc_hostname(host));
+	}
+
+	if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
 		/*
 		 * Fetch SCR from card.
 		 */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] mmc: core: allow detection of locked cards
  2024-05-23 13:20 [PATCH v3] mmc: core: allow detection of locked cards linux-mmc
@ 2024-06-01 21:43 ` Daniel Kucera
  2024-06-02  5:26   ` Avri Altman
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Kucera @ 2024-06-01 21:43 UTC (permalink / raw)
  To: linux-mmc, ulf.hansson

On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
> From: Daniel Kucera <linux-mmc@danman.eu>
> 
> Locked card will not reply to SEND_SCR or SD_STATUS commands
> so it was failing to initialize previously. When skipped,
> the card will get initialized and CMD42 can be sent using
> ioctl to unlock the card or remove password protection.
> Until unlocked, all read/write calls will timeout.
> 
> Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
> ---
>  drivers/mmc/core/sd.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
> index 1c8148cdd..ae821df7d 100644
> --- a/drivers/mmc/core/sd.c
> +++ b/drivers/mmc/core/sd.c
> @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host,
> struct mmc_card *card,
>  	bool reinit)
>  {
>  	int err;
> +	u32 card_status;
> 
> -	if (!reinit) {
> +	err = mmc_send_status(card, &card_status);
> +	if (err){
> +		pr_err("%s: unable to get card status\n", mmc_hostname(host));
> +		return err;
> +	}
> +
> +	if (card_status & R1_CARD_IS_LOCKED){
> +		pr_warn("%s: card is locked\n", mmc_hostname(host));
> +	}
> +
> +	if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
>  		/*
>  		 * Fetch SCR from card.
>  		 */

Any feedback please?

D.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v3] mmc: core: allow detection of locked cards
  2024-06-01 21:43 ` Daniel Kucera
@ 2024-06-02  5:26   ` Avri Altman
  2024-06-02 12:37     ` Daniel Kucera
  0 siblings, 1 reply; 7+ messages in thread
From: Avri Altman @ 2024-06-02  5:26 UTC (permalink / raw)
  To: Daniel Kucera, linux-mmc@vger.kernel.org, ulf.hansson@linaro.org

> On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
> > From: Daniel Kucera <linux-mmc@danman.eu>
> >
> > Locked card will not reply to SEND_SCR or SD_STATUS commands so it was
> > failing to initialize previously. When skipped, the card will get
> > initialized and CMD42 can be sent using ioctl to unlock the card or
> > remove password protection.
> > Until unlocked, all read/write calls will timeout.
> >
> > Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
> > ---
> >  drivers/mmc/core/sd.c | 13 ++++++++++++-
> >  1 file changed, 12 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index
> > 1c8148cdd..ae821df7d 100644
> > --- a/drivers/mmc/core/sd.c
> > +++ b/drivers/mmc/core/sd.c
> > @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host,
> > struct mmc_card *card,
> >       bool reinit)
> >  {
> >       int err;
> > +     u32 card_status;
> >
> > -     if (!reinit) {
> > +     err = mmc_send_status(card, &card_status);
> > +     if (err){
> > +             pr_err("%s: unable to get card status\n", mmc_hostname(host));
> > +             return err;
> > +     }
> > +
> > +     if (card_status & R1_CARD_IS_LOCKED){
> > +             pr_warn("%s: card is locked\n", mmc_hostname(host));
> > +     }
> > +
> > +     if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
> >               /*
> >                * Fetch SCR from card.
> >                */
> 
> Any feedback please?
You didn't address my comment from your v1 - 
Since eMMC & SD shares the very same locking feature (non-COP SD that is) - 
You should at least explain in your commit log why it isn't an issue for eMMC,
If indeed it is not.

Thanks,
Avri

> 
> D.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] mmc: core: allow detection of locked cards
  2024-06-02  5:26   ` Avri Altman
@ 2024-06-02 12:37     ` Daniel Kucera
  2024-06-02 12:59       ` Avri Altman
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Kucera @ 2024-06-02 12:37 UTC (permalink / raw)
  To: Avri Altman; +Cc: linux-mmc, ulf.hansson

Hello Avri,

On 2024-06-02 07:26, Avri Altman wrote:
>> On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
>> > From: Daniel Kucera <linux-mmc@danman.eu>
>> >
>> > Locked card will not reply to SEND_SCR or SD_STATUS commands so it was
>> > failing to initialize previously. When skipped, the card will get
>> > initialized and CMD42 can be sent using ioctl to unlock the card or
>> > remove password protection.
>> > Until unlocked, all read/write calls will timeout.
>> >
>> > Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
>> > ---
>> >  drivers/mmc/core/sd.c | 13 ++++++++++++-
>> >  1 file changed, 12 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index
>> > 1c8148cdd..ae821df7d 100644
>> > --- a/drivers/mmc/core/sd.c
>> > +++ b/drivers/mmc/core/sd.c
>> > @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host,
>> > struct mmc_card *card,
>> >       bool reinit)
>> >  {
>> >       int err;
>> > +     u32 card_status;
>> >
>> > -     if (!reinit) {
>> > +     err = mmc_send_status(card, &card_status);
>> > +     if (err){
>> > +             pr_err("%s: unable to get card status\n", mmc_hostname(host));
>> > +             return err;
>> > +     }
>> > +
>> > +     if (card_status & R1_CARD_IS_LOCKED){
>> > +             pr_warn("%s: card is locked\n", mmc_hostname(host));
>> > +     }
>> > +
>> > +     if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
>> >               /*
>> >                * Fetch SCR from card.
>> >                */
>> 
>> Any feedback please?
> You didn't address my comment from your v1 -
> Since eMMC & SD shares the very same locking feature (non-COP SD that 
> is) -
> You should at least explain in your commit log why it isn't an issue 
> for eMMC,
> If indeed it is not.

I'm sorry, I didn't get what you mean by that. I am touching only the 
sd.c code, not the mmc.c (where eMMC is initialized, am I correct?).
How should I address this?
Should I test with eMMC to SD adaptor? I don't have any currently.

I am sorry if these are stupid questions, I am a layman.

> 
> Thanks,
> Avri
> 
>> 
>> D.

Thank you.
Daniel.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v3] mmc: core: allow detection of locked cards
  2024-06-02 12:37     ` Daniel Kucera
@ 2024-06-02 12:59       ` Avri Altman
  2024-06-06  8:17         ` Daniel Kucera
  0 siblings, 1 reply; 7+ messages in thread
From: Avri Altman @ 2024-06-02 12:59 UTC (permalink / raw)
  To: Daniel Kucera; +Cc: linux-mmc@vger.kernel.org, ulf.hansson@linaro.org

> Hello Avri,
> 
> On 2024-06-02 07:26, Avri Altman wrote:
> >> On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
> >> > From: Daniel Kucera <linux-mmc@danman.eu>
> >> >
> >> > Locked card will not reply to SEND_SCR or SD_STATUS commands so it
> >> > was failing to initialize previously. When skipped, the card will
> >> > get initialized and CMD42 can be sent using ioctl to unlock the
> >> > card or remove password protection.
> >> > Until unlocked, all read/write calls will timeout.
> >> >
> >> > Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
> >> > ---
> >> >  drivers/mmc/core/sd.c | 13 ++++++++++++-
> >> >  1 file changed, 12 insertions(+), 1 deletion(-)
> >> >
> >> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index
> >> > 1c8148cdd..ae821df7d 100644
> >> > --- a/drivers/mmc/core/sd.c
> >> > +++ b/drivers/mmc/core/sd.c
> >> > @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host,
> >> > struct mmc_card *card,
> >> >       bool reinit)
> >> >  {
> >> >       int err;
> >> > +     u32 card_status;
> >> >
> >> > -     if (!reinit) {
> >> > +     err = mmc_send_status(card, &card_status);
> >> > +     if (err){
> >> > +             pr_err("%s: unable to get card status\n", mmc_hostname(host));
> >> > +             return err;
> >> > +     }
> >> > +
> >> > +     if (card_status & R1_CARD_IS_LOCKED){
> >> > +             pr_warn("%s: card is locked\n", mmc_hostname(host));
> >> > +     }
> >> > +
> >> > +     if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
> >> >               /*
> >> >                * Fetch SCR from card.
> >> >                */
> >>
> >> Any feedback please?
> > You didn't address my comment from your v1 - Since eMMC & SD shares
> > the very same locking feature (non-COP SD that
> > is) -
> > You should at least explain in your commit log why it isn't an issue
> > for eMMC, If indeed it is not.
> 
> I'm sorry, I didn't get what you mean by that. I am touching only the sd.c code, not
> the mmc.c (where eMMC is initialized, am I correct?).
> How should I address this?
> Should I test with eMMC to SD adaptor? I don't have any currently.
Theoretically, looking in the eMMC spec, a locked eMMC device shouldn't have any issue returning from power down.
The only flow that is affected is that its not allowed to switch to hs200 in a locked state until unlocked - not to say that it is a problem.
If you can't verify that via code review,  can you test your mmc-utils code on an eMMC platform?

Thanks,
Avri
> 
> I am sorry if these are stupid questions, I am a layman.
> 
> >
> > Thanks,
> > Avri
> >
> >>
> >> D.
> 
> Thank you.
> Daniel.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] mmc: core: allow detection of locked cards
  2024-06-02 12:59       ` Avri Altman
@ 2024-06-06  8:17         ` Daniel Kucera
  2024-06-06  8:39           ` Avri Altman
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Kucera @ 2024-06-06  8:17 UTC (permalink / raw)
  To: Avri Altman; +Cc: linux-mmc, ulf.hansson

Hi Avri,

On 2024-06-02 14:59, Avri Altman wrote:
>> Hello Avri,
>> 
>> On 2024-06-02 07:26, Avri Altman wrote:
>> >> On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
>> >> > From: Daniel Kucera <linux-mmc@danman.eu>
>> >> >
>> >> > Locked card will not reply to SEND_SCR or SD_STATUS commands so it
>> >> > was failing to initialize previously. When skipped, the card will
>> >> > get initialized and CMD42 can be sent using ioctl to unlock the
>> >> > card or remove password protection.
>> >> > Until unlocked, all read/write calls will timeout.
>> >> >
>> >> > Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
>> >> > ---
>> >> >  drivers/mmc/core/sd.c | 13 ++++++++++++-
>> >> >  1 file changed, 12 insertions(+), 1 deletion(-)
>> >> >
>> >> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index
>> >> > 1c8148cdd..ae821df7d 100644
>> >> > --- a/drivers/mmc/core/sd.c
>> >> > +++ b/drivers/mmc/core/sd.c
>> >> > @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host,
>> >> > struct mmc_card *card,
>> >> >       bool reinit)
>> >> >  {
>> >> >       int err;
>> >> > +     u32 card_status;
>> >> >
>> >> > -     if (!reinit) {
>> >> > +     err = mmc_send_status(card, &card_status);
>> >> > +     if (err){
>> >> > +             pr_err("%s: unable to get card status\n", mmc_hostname(host));
>> >> > +             return err;
>> >> > +     }
>> >> > +
>> >> > +     if (card_status & R1_CARD_IS_LOCKED){
>> >> > +             pr_warn("%s: card is locked\n", mmc_hostname(host));
>> >> > +     }
>> >> > +
>> >> > +     if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
>> >> >               /*
>> >> >                * Fetch SCR from card.
>> >> >                */
>> >>
>> >> Any feedback please?
>> > You didn't address my comment from your v1 - Since eMMC & SD shares
>> > the very same locking feature (non-COP SD that
>> > is) -
>> > You should at least explain in your commit log why it isn't an issue
>> > for eMMC, If indeed it is not.
>> 
>> I'm sorry, I didn't get what you mean by that. I am touching only the 
>> sd.c code, not
>> the mmc.c (where eMMC is initialized, am I correct?).
>> How should I address this?
>> Should I test with eMMC to SD adaptor? I don't have any currently.
> Theoretically, looking in the eMMC spec, a locked eMMC device
> shouldn't have any issue returning from power down.
> The only flow that is affected is that its not allowed to switch to
> hs200 in a locked state until unlocked - not to say that it is a
> problem.
> If you can't verify that via code review,  can you test your mmc-utils
> code on an eMMC platform?

I've just tested with an eMMC to SD adapter in my reader and it is 
detected correctly:

[1463181.072006] mmc1: unexpected status 0x2000900 after switch
[1463181.074560] mmc1: unexpected status 0x2000900 after switch
[1463181.077038] mmc1: unexpected status 0x2000900 after switch
[1463181.079709] mmc1: unexpected status 0x2000900 after switch
[1463181.081972] mmc1: unexpected status 0x2000900 after switch
[1463181.083412] mmc1: unexpected status 0x2000900 after switch
[1463181.084831] mmc1: unexpected status 0x2000900 after switch
[1463181.084836] mmc1: new high speed MMC card at address 0001
[1463181.085195] mmcblk1: mmc1:0001 004GA0 2.59 GiB

Do I need to do some changes to the patch?

> 
> Thanks,
> Avri
>> 
>> I am sorry if these are stupid questions, I am a layman.
>> 
>> >
>> > Thanks,
>> > Avri
>> >
>> >>
>> >> D.
>> 
>> Thank you.
>> Daniel.

Thank you,
Daniel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v3] mmc: core: allow detection of locked cards
  2024-06-06  8:17         ` Daniel Kucera
@ 2024-06-06  8:39           ` Avri Altman
  0 siblings, 0 replies; 7+ messages in thread
From: Avri Altman @ 2024-06-06  8:39 UTC (permalink / raw)
  To: Daniel Kucera; +Cc: linux-mmc@vger.kernel.org, ulf.hansson@linaro.org

 
> Hi Avri,
> 
> On 2024-06-02 14:59, Avri Altman wrote:
> >> Hello Avri,
> >>
> >> On 2024-06-02 07:26, Avri Altman wrote:
> >> >> On 2024-05-23 15:20, linux-mmc@danman.eu wrote:
> >> >> > From: Daniel Kucera <linux-mmc@danman.eu>
> >> >> >
> >> >> > Locked card will not reply to SEND_SCR or SD_STATUS commands so
> >> >> > it was failing to initialize previously. When skipped, the card
> >> >> > will get initialized and CMD42 can be sent using ioctl to unlock
> >> >> > the card or remove password protection.
> >> >> > Until unlocked, all read/write calls will timeout.
> >> >> >
> >> >> > Signed-off-by: Daniel Kucera <linux-mmc@danman.eu>
> >> >> > ---
> >> >> >  drivers/mmc/core/sd.c | 13 ++++++++++++-
> >> >> >  1 file changed, 12 insertions(+), 1 deletion(-)
> >> >> >
> >> >> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index
> >> >> > 1c8148cdd..ae821df7d 100644
> >> >> > --- a/drivers/mmc/core/sd.c
> >> >> > +++ b/drivers/mmc/core/sd.c
> >> >> > @@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host
> >> >> > *host, struct mmc_card *card,
> >> >> >       bool reinit)
> >> >> >  {
> >> >> >       int err;
> >> >> > +     u32 card_status;
> >> >> >
> >> >> > -     if (!reinit) {
> >> >> > +     err = mmc_send_status(card, &card_status);
> >> >> > +     if (err){
> >> >> > +             pr_err("%s: unable to get card status\n", mmc_hostname(host));
> >> >> > +             return err;
> >> >> > +     }
> >> >> > +
> >> >> > +     if (card_status & R1_CARD_IS_LOCKED){
> >> >> > +             pr_warn("%s: card is locked\n", mmc_hostname(host));
> >> >> > +     }
> >> >> > +
> >> >> > +     if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
> >> >> >               /*
> >> >> >                * Fetch SCR from card.
> >> >> >                */
> >> >>
> >> >> Any feedback please?
> >> > You didn't address my comment from your v1 - Since eMMC & SD shares
> >> > the very same locking feature (non-COP SD that
> >> > is) -
> >> > You should at least explain in your commit log why it isn't an
> >> > issue for eMMC, If indeed it is not.
> >>
> >> I'm sorry, I didn't get what you mean by that. I am touching only the
> >> sd.c code, not the mmc.c (where eMMC is initialized, am I correct?).
> >> How should I address this?
> >> Should I test with eMMC to SD adaptor? I don't have any currently.
> > Theoretically, looking in the eMMC spec, a locked eMMC device
> > shouldn't have any issue returning from power down.
> > The only flow that is affected is that its not allowed to switch to
> > hs200 in a locked state until unlocked - not to say that it is a
> > problem.
> > If you can't verify that via code review,  can you test your mmc-utils
> > code on an eMMC platform?
> 
> I've just tested with an eMMC to SD adapter in my reader and it is detected
> correctly:
> 
> [1463181.072006] mmc1: unexpected status 0x2000900 after switch
> [1463181.074560] mmc1: unexpected status 0x2000900 after switch
> [1463181.077038] mmc1: unexpected status 0x2000900 after switch
> [1463181.079709] mmc1: unexpected status 0x2000900 after switch
> [1463181.081972] mmc1: unexpected status 0x2000900 after switch
> [1463181.083412] mmc1: unexpected status 0x2000900 after switch
> [1463181.084831] mmc1: unexpected status 0x2000900 after switch
> [1463181.084836] mmc1: new high speed MMC card at address 0001
> [1463181.085195] mmcblk1: mmc1:0001 004GA0 2.59 GiB
> 
> Do I need to do some changes to the patch?
Just add one more line to your commit log saying that no similar attention is needed for eMMC because....

Thanks,
Avri

> 
> >
> > Thanks,
> > Avri
> >>
> >> I am sorry if these are stupid questions, I am a layman.
> >>
> >> >
> >> > Thanks,
> >> > Avri
> >> >
> >> >>
> >> >> D.
> >>
> >> Thank you.
> >> Daniel.
> 
> Thank you,
> Daniel

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-06-06  8:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-23 13:20 [PATCH v3] mmc: core: allow detection of locked cards linux-mmc
2024-06-01 21:43 ` Daniel Kucera
2024-06-02  5:26   ` Avri Altman
2024-06-02 12:37     ` Daniel Kucera
2024-06-02 12:59       ` Avri Altman
2024-06-06  8:17         ` Daniel Kucera
2024-06-06  8:39           ` Avri Altman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox