[edk2-devel] [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs

Loh, Tien Hock posted 1 patch 4 years, 11 months ago
Failed in applying to current master (apply log)
EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
[edk2-devel] [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs
Posted by Loh, Tien Hock 4 years, 11 months ago
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]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs
Posted by Leif Lindholm 4 years, 11 months ago
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]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [[PATCH v2] 7/7] EmbeddedPkg: Fix DwEmmc driver bugs
Posted by Loh, Tien Hock 4 years, 11 months ago
> -----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]
-=-=-=-=-=-=-=-=-=-=-=-