EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
From: "Tien Hock, Loh" <tien.hock.loh@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@intel.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Ard Biesheuvel <ard.biesheuvel@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;
- 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);
+
Data |= DWEMMC_IDMAC_ENABLE | DWEMMC_IDMAC_FB;
MmioWrite32 (DWEMMC_BMOD, Data);
- 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 (#39941): https://edk2.groups.io/g/devel/message/39941
Mute This Topic: https://groups.io/mt/31480083/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On Fri, May 03, 2019 at 11:27:03AM +0800, tien.hock.loh@intel.com wrote: > From: "Tien Hock, Loh" <tien.hock.loh@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@intel.com> > Cc: Leif Lindholm <leif.lindholm@linaro.org> > Cc: Ard Biesheuvel <ard.biesheuvel@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/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
> -----Original Message----- > From: Leif Lindholm <leif.lindholm@linaro.org> > Sent: Friday, May 3, 2019 8:19 PM > To: Loh, Tien Hock <tien.hock.loh@intel.com> > Cc: devel@edk2.groups.io; thloh85@gmail.com; Ard Biesheuvel > <ard.biesheuvel@linaro.org> > Subject: Re: [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs > > On Fri, May 03, 2019 at 11:27:03AM +0800, tien.hock.loh@intel.com wrote: > > From: "Tien Hock, Loh" <tien.hock.loh@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@intel.com> > > Cc: Leif Lindholm <leif.lindholm@linaro.org> > > Cc: Ard Biesheuvel <ard.biesheuvel@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?... Can you clarify further on this? I didn't change anything on DWEMMC_BLOCK_SIZE. Do you want me to assign DWEMMC_BLOCK_SIZE to a BlockSize variable and use it? > > > - 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. OK noted. > > > 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:) OK, noted with thanks! > > / > 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 (#40284): https://edk2.groups.io/g/devel/message/40284 Mute This Topic: https://groups.io/mt/31480083/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.