On 14/11/19 1:18 pm, Yangbo Lu wrote: > The STOP command is disabled for multiple blocks r/w commands > with auto CMD12, when start to send. However, if there is data > error, software still needs to send CMD12 according to SD spec. > This patch is to allow software CMD12 sending for this case. > > Signed-off-by: Yangbo Lu <yangbo.lu@xxxxxxx> Sorry for the delay. This looks good to me. Sending a STOP command on the error path in the auto-CMD12 case should be fine whether it has been sent already or not. Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > --- > drivers/mmc/host/sdhci.c | 17 +++-------------- > 1 file changed, 3 insertions(+), 14 deletions(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index 09cdbe8..3041c39 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -1326,12 +1326,12 @@ static void sdhci_finish_data(struct sdhci_host *host) > > /* > * Need to send CMD12 if - > - * a) open-ended multiblock transfer (no CMD23) > + * a) open-ended multiblock transfer not using auto CMD12 (no CMD23) > * b) error in multiblock transfer > */ > if (data->stop && > - (data->error || > - !data->mrq->sbc)) { > + ((!data->mrq->sbc && !sdhci_auto_cmd12(host, data->mrq)) || > + data->error)) { > /* > * 'cap_cmd_during_tfr' request must not use the command line > * after mmc_command_done() has been called. It is upper layer's > @@ -1825,17 +1825,6 @@ void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) > > sdhci_led_activate(host); > > - /* > - * Ensure we don't send the STOP for non-SET_BLOCK_COUNTED > - * requests if Auto-CMD12 is enabled. > - */ > - if (sdhci_auto_cmd12(host, mrq)) { > - if (mrq->stop) { > - mrq->data->stop = NULL; > - mrq->stop = NULL; > - } > - } > - > if (!present || host->flags & SDHCI_DEVICE_DEAD) { > mrq->cmd->error = -ENOMEDIUM; > sdhci_finish_mrq(host, mrq); >