On Thu, 6 Jun 2024 at 15:12, <linux-mmc@xxxxxxxxx> wrote: > > From: Daniel Kucera <linux-mmc@xxxxxxxxx> > > Locked SD 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. > For eMMC, this is not necessary because all initialization > commands are allowed in locked state. > Until unlocked, all read/write calls will timeout. > > Signed-off-by: Daniel Kucera <linux-mmc@xxxxxxxxx> > --- > 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 I understand correctly, there is no point in sending the CMD13 above, unless this is the first attempt to initialize the card. Therefore, it's better to move the whole part above, inside the below if-clause too, otherwise we would end up sending a CMD13 in cases when it's not needed. > + > + if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) { > /* > * Fetch SCR from card. > */ > -- > 2.34.1 > Kind regards Uffe