Hi Hao,

OK. I tried to enable auto stop command in Designware MMC driver. So this
patch could be ignored.

Thanks
Haojian

On 3 May 2018 at 10:45, Wu, Hao A <hao.a...@intel.com> wrote:
> Hi Haojian,
>
> Sorry for the delayed response.
>
> As far as I know, we enabled the auto CMD12 feature within:
> SdMmcExecTrb(), MdeModulePkg\Bus\Pci\SdMmcPciHcDxe\SdMmcPciHci.c
>
>     //
>     // Only SD memory card needs to use AUTO CMD12 feature.
>     //
>     if (Private->Slot[Trb->Slot].CardType == SdCardType) {
>       if (BlkCount > 1) {
>         TransMode |= BIT2;
>       }
>     }
>
> So I think the explicitly sending CMD12 in SdRwMultiBlocks() is not needed.
>
> Have you met problems when using SdRwMultiBlocks()? Could you help to
> provide detailed device information when you meet the problem?
>
> Thanks in advance.
>
> Best Regards,
> Hao Wu
>
>> -----Original Message-----
>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
>> Haojian Zhuang
>> Sent: Saturday, April 28, 2018 1:24 PM
>> To: edk2-devel@lists.01.org
>> Cc: Ni, Ruiyu; Dong, Eric; Ard Biesheuvel; Leif Lindholm; Haojian Zhuang; 
>> Zeng,
>> Star
>> Subject: [edk2] [PATCH 1/1] MdeModulePkg/Sd: append CMD12 for multiple
>> blocks
>>
>> Send CMD12 to stop transimission for accessing multiple blocks. It's
>> required by SD Card protocol.
>>
>> Cc: Star Zeng <star.z...@intel.com>
>> Cc: Eric Dong <eric.d...@intel.com>
>> Cc: Ruiyu Ni <ruiyu...@intel.com>
>> Cc: Leif Lindholm <leif.lindh...@linaro.org>
>> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Haojian Zhuang <haojian.zhu...@linaro.org>
>> ---
>>  MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c | 35
>> +++++++++++++++++++++++++++++++++++
>>  1 file changed, 35 insertions(+)
>>
>> diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c
>> b/MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c
>> index 516c3e704288..64259f99f9bc 100644
>> --- a/MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c
>> +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdBlockIo.c
>> @@ -426,6 +426,36 @@ Error:
>>    return Status;
>>  }
>>
>> +EFI_STATUS
>> +SdStopTrans (
>> +  IN  SD_DEVICE                 *Device
>> +  )
>> +{
>> +  EFI_STATUS                           Status;
>> +  EFI_SD_MMC_PASS_THRU_PROTOCOL        *PassThru;
>> +  EFI_SD_MMC_COMMAND_BLOCK             SdMmcCmdBlk;
>> +  EFI_SD_MMC_STATUS_BLOCK              SdMmcStatusBlk;
>> +  EFI_SD_MMC_PASS_THRU_COMMAND_PACKET  Packet;
>> +
>> +  PassThru = Device->Private->PassThru;
>> +
>> +  ZeroMem (&SdMmcCmdBlk, sizeof (SdMmcCmdBlk));
>> +  ZeroMem (&SdMmcStatusBlk, sizeof (SdMmcStatusBlk));
>> +  ZeroMem (&Packet, sizeof (Packet));
>> +
>> +  Packet.SdMmcCmdBlk    = &SdMmcCmdBlk;
>> +  Packet.SdMmcStatusBlk = &SdMmcStatusBlk;
>> +  Packet.Timeout        = SD_GENERIC_TIMEOUT;
>> +
>> +  SdMmcCmdBlk.CommandIndex = SD_STOP_TRANSMISSION;
>> +  SdMmcCmdBlk.CommandType  = SdMmcCommandTypeAc;
>> +  SdMmcCmdBlk.ResponseType = SdMmcResponseTypeR1b;
>> +  SdMmcCmdBlk.CommandArgument = 0;
>> +
>> +  Status = PassThru->PassThru (PassThru, Device->Slot, &Packet, NULL);
>> +  return Status;
>> +}
>> +
>>  /**
>>    Read/write multiple blocks through sync or async I/O request.
>>
>> @@ -555,6 +585,11 @@ Error:
>>      }
>>    }
>>
>> +  if (EFI_ERROR (Status)) {
>> +    return Status;
>> +  }
>> +
>> +  Status = SdStopTrans (Device);
>>    return Status;
>>  }
>>
>> --
>> 2.7.4
>>
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to