[edk2-devel] [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs
Leif Lindholm
leif.lindholm at linaro.org
Fri May 3 12:19:03 UTC 2019
On Fri, May 03, 2019 at 11:27:03AM +0800, tien.hock.loh at intel.com wrote:
> From: "Tien Hock, Loh" <tien.hock.loh at intel.com>
>
> Add support for reading data that is less than DWEMMC_BLOCK_SIZE, otherwise
> it would read bigger data than requested and cause errors
>
> Signed-off-by: "Tien Hock, Loh" <tien.hock.loh at intel.com>
> Cc: Leif Lindholm <leif.lindholm at linaro.org>
> Cc: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> ---
> EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
> index c38b5a4..4183ad4 100644
> --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
> +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
> @@ -495,7 +495,10 @@ PrepareDmaData (
>
> Cnt = (Length + DWEMMC_DMA_BUF_SIZE - 1) / DWEMMC_DMA_BUF_SIZE;
> Blks = (Length + DWEMMC_BLOCK_SIZE - 1) / DWEMMC_BLOCK_SIZE;
Could we add a BlockSize variable instead?...
> - Length = DWEMMC_BLOCK_SIZE * Blks;
> +
> + if(Length >= DWEMMC_BLOCK_SIZE) {
> + Length = DWEMMC_BLOCK_SIZE * Blks;
> + }
>
> for (Idx = 0; Idx < Cnt; Idx++) {
> (IdmacDesc + Idx)->Des0 = DWEMMC_IDMAC_DES0_OWN | DWEMMC_IDMAC_DES0_CH |
> @@ -533,11 +536,18 @@ StartDma (
> Data |= DWEMMC_CTRL_INT_EN | DWEMMC_CTRL_DMA_EN | DWEMMC_CTRL_IDMAC_EN;
> MmioWrite32 (DWEMMC_CTRL, Data);
> Data = MmioRead32 (DWEMMC_BMOD);
> +
Drop unrelated whitespace addition.
> Data |= DWEMMC_IDMAC_ENABLE | DWEMMC_IDMAC_FB;
> MmioWrite32 (DWEMMC_BMOD, Data);
>
And do
if (Length < DWEMMC_BLOCK_SIZE) {
BlockSize = Length;
} else {
BlockSize = DWEMMC_BLOCK_SIZE;
}
MmioWrite32 (DWEMMC_BLKSIZ, BlockSize);
MmioWrite32 (DWEMMC_BYTCNT, Length);
instead?
(I have no comments on the patches I have not responded to at this
point, but I want to see their proper subject lines before giving a R-b:)
/
Leif
> - MmioWrite32 (DWEMMC_BLKSIZ, DWEMMC_BLOCK_SIZE);
> - MmioWrite32 (DWEMMC_BYTCNT, Length);
> + if(Length < DWEMMC_BLOCK_SIZE) {
> + MmioWrite32 (DWEMMC_BLKSIZ, Length);
> + MmioWrite32 (DWEMMC_BYTCNT, Length);
> + }
> + else {
> + MmioWrite32 (DWEMMC_BLKSIZ, DWEMMC_BLOCK_SIZE);
> + MmioWrite32 (DWEMMC_BYTCNT, Length);
> + }
> }
>
> EFI_STATUS
> --
> 2.2.2
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#39958): https://edk2.groups.io/g/devel/message/39958
Mute This Topic: https://groups.io/mt/31480083/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list