diff mbox

[edk2] EmbeddedPkg/DwEmmcDxe: limit max clock for platform

Message ID 1499054517-22398-1-git-send-email-jun.nie@linaro.org
State Superseded
Headers show

Commit Message

Jun Nie July 3, 2017, 4:01 a.m. UTC
Some boards may have max clock limitation. Add a Pcd to notify
driver.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jun Nie <jun.nie@linaro.org>

---
 EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c   | 4 ++++
 EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf | 1 +
 EmbeddedPkg/EmbeddedPkg.dec                 | 1 +
 3 files changed, 6 insertions(+)

-- 
1.9.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel July 3, 2017, 9:40 a.m. UTC | #1
On 3 July 2017 at 05:01, Jun Nie <jun.nie@linaro.org> wrote:
> Some boards may have max clock limitation. Add a Pcd to notify

> driver.

>

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Jun Nie <jun.nie@linaro.org>

> ---

>  EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c   | 4 ++++

>  EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf | 1 +

>  EmbeddedPkg/EmbeddedPkg.dec                 | 1 +

>  3 files changed, 6 insertions(+)

>

> diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> index fe23d11..308f3a7 100644

> --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> @@ -560,6 +560,10 @@ DwEmmcSetIos (

>    EFI_STATUS Status = EFI_SUCCESS;

>    UINT32    Data;

>

> +  if (BusClockFreq > PcdGet32 (PcdDwEmmcDxeMaxClockFrequencyInHz)) {

> +    return EFI_UNSUPPORTED;

> +  }

> +

>    if (TimingMode != EMMCBACKWARD) {

>      Data = MmioRead32 (DWEMMC_UHSREG);

>      switch (TimingMode) {

> diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> index e3c8313..3582997 100644

> --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> @@ -48,6 +48,7 @@

>  [Pcd]

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz

> +  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz

>

>  [Depex]

>    TRUE

> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec

> index 0d4a062..aec8259 100644

> --- a/EmbeddedPkg/EmbeddedPkg.dec

> +++ b/EmbeddedPkg/EmbeddedPkg.dec

> @@ -167,6 +167,7 @@

>    # DwEmmc Driver PCDs

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress|0x0|UINT32|0x00000035

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz|0x0|UINT32|0x00000036

> +  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz|0x0|UINT32|400000000

>


Please use the correct token space guid, or add it to the correct .dec file.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm July 3, 2017, 12:36 p.m. UTC | #2
On Mon, Jul 03, 2017 at 12:01:56PM +0800, Jun Nie wrote:
> Some boards may have max clock limitation. Add a Pcd to notify

> driver.

> 

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Jun Nie <jun.nie@linaro.org>

> ---

>  EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c   | 4 ++++

>  EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf | 1 +

>  EmbeddedPkg/EmbeddedPkg.dec                 | 1 +

>  3 files changed, 6 insertions(+)

> 

> diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> index fe23d11..308f3a7 100644

> --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c

> @@ -560,6 +560,10 @@ DwEmmcSetIos (

>    EFI_STATUS Status = EFI_SUCCESS;

>    UINT32    Data;

>  

> +  if (BusClockFreq > PcdGet32 (PcdDwEmmcDxeMaxClockFrequencyInHz)) {


This snippet means that any platform that was using this driver
successfully, but where BusClockFreq is higher than the default value
of this Pcd will stop working.

> +    return EFI_UNSUPPORTED;

> +  }

> +

>    if (TimingMode != EMMCBACKWARD) {

>      Data = MmioRead32 (DWEMMC_UHSREG);

>      switch (TimingMode) {

> diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> index e3c8313..3582997 100644

> --- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> +++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf

> @@ -48,6 +48,7 @@

>  [Pcd]

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz

> +  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz

>  

>  [Depex]

>    TRUE

> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec

> index 0d4a062..aec8259 100644

> --- a/EmbeddedPkg/EmbeddedPkg.dec

> +++ b/EmbeddedPkg/EmbeddedPkg.dec

> @@ -167,6 +167,7 @@

>    # DwEmmc Driver PCDs

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress|0x0|UINT32|0x00000035

>    gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz|0x0|UINT32|0x00000036

> +  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz|0x0|UINT32|400000000


And this definition sets the default value of this Pcd to 0. Meaning
that all existing drivers would stop working.
Also, 0x00000037 would seem like a more suitable Token than 400000000.

If introducing a new limit value like this, I would strongly recommend
making "0" a magic value meaning "no restrictions".

i.e.
  UINT32 MaxFreq;
  MaxFreq = PcdGet32 (PcdDwEmmcDxeMaxClockFrequencyInHz);
  if ((MaxFreq != 0) && (BusClockFreq > MaxFreq)) {

/
    Leif

>  

>    #

>    # Android FastBoot

> -- 

> 1.9.1

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
index fe23d11..308f3a7 100644
--- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
+++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.c
@@ -560,6 +560,10 @@  DwEmmcSetIos (
   EFI_STATUS Status = EFI_SUCCESS;
   UINT32    Data;
 
+  if (BusClockFreq > PcdGet32 (PcdDwEmmcDxeMaxClockFrequencyInHz)) {
+    return EFI_UNSUPPORTED;
+  }
+
   if (TimingMode != EMMCBACKWARD) {
     Data = MmioRead32 (DWEMMC_UHSREG);
     switch (TimingMode) {
diff --git a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf
index e3c8313..3582997 100644
--- a/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf
+++ b/EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf
@@ -48,6 +48,7 @@ 
 [Pcd]
   gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress
   gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz
+  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz
 
 [Depex]
   TRUE
diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
index 0d4a062..aec8259 100644
--- a/EmbeddedPkg/EmbeddedPkg.dec
+++ b/EmbeddedPkg/EmbeddedPkg.dec
@@ -167,6 +167,7 @@ 
   # DwEmmc Driver PCDs
   gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress|0x0|UINT32|0x00000035
   gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz|0x0|UINT32|0x00000036
+  gDwEmmcDxeTokenSpaceGuid.PcdDwEmmcDxeMaxClockFrequencyInHz|0x0|UINT32|400000000
 
   #
   # Android FastBoot