Hi Feng,

> You may misunderstand what I meant. Sorry for that.

Indeed, we understood that introducing new PCD is a main problem.

>
> At first, the SD_MMC_PASS_THRU protocol is defined by UEFI spec, you couldn't 
> change its interfaces.
>
> Secondly, the transfer mode judgement should be done at SdMmcPciHcDxe driver. 
> This way could avoid introducing a new interface like you proposed. And we 
> have done this at SdMmcCreateTrb(). (You can search Trb->Mode key word to 
> find out the place).
>
> Thirdly, I suppose your PIO mode doesn't work as I didn't add PIO full 
> support.

As we mentioned, we have our own pass_thru and dxe driver, based on
generic ones and PIO mode works fine both for SD and EMMC.

I thought DMA support is enough (of course now the assumption doesn't
meet your requirement). I only force to do PIO for clock tuning cmd.
So you would have to update the logic in SdMmcExecTrb() to support PIO
mode.
> 1. line 1272 to line 1276 of SdMmcCreateTrb() to assign PIO mode for your 
> cmds besides clock tuning cmd.
> 2. line 1815 to line 1839 of SdMmcCheckTrbResult() to read data till all 
> blocks get read out. (see SD Host controller spec 3.0 figure 3-13)
>
> Last, I am not sure why SetBlockLen() and StopTransmission() are needed for 
> multiple block r/w. we always use 512 block size, and looks like we should 
> use CMD12 or CMD23 for SD card to stop transmission whatever it's in DMA or 
> PIO. Am I right?

Thanks for the hints above, they will be checked. The best solution
would be fixing dma support in our driver, so that PIO-related changes
are not needed. We will try both and update. This won't be instant,
but if the patches 1 and 2 are fine and could be accepted, how about
doing it and keeping PIO-ones aside for now, until we find a solution?

Best regards,
Marcin
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to