diff mbox series

[edk2,platforms:,06/10] Marvell/Library: MppLib: Take 0xFF placeholders into account

Message ID 1508980777-29006-7-git-send-email-mw@semihalf.com
State New
Headers show
Series None | expand

Commit Message

Marcin Wojtas Oct. 26, 2017, 1:19 a.m. UTC
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>


The MppSel definition PCDs contain 0xFF placeholders for values that
should be left untouched. MppLib needs to be taught how to take those
into account.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Signed-off-by: Marcin Wojtas <mw@semihalf.com>

---
 Platform/Marvell/Library/MppLib/MppLib.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

-- 
2.7.4

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

Comments

Leif Lindholm Oct. 26, 2017, 1:30 p.m. UTC | #1
On Thu, Oct 26, 2017 at 03:19:33AM +0200, Marcin Wojtas wrote:
> From: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> 

> The MppSel definition PCDs contain 0xFF placeholders for values that

> should be left untouched. MppLib needs to be taught how to take those

> into account.

> 

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> Signed-off-by: Marcin Wojtas <mw@semihalf.com>

> ---

>  Platform/Marvell/Library/MppLib/MppLib.c | 12 ++++++++----

>  1 file changed, 8 insertions(+), 4 deletions(-)

> 

> diff --git a/Platform/Marvell/Library/MppLib/MppLib.c b/Platform/Marvell/Library/MppLib/MppLib.c

> index 383c820..9e42f08 100644

> --- a/Platform/Marvell/Library/MppLib/MppLib.c

> +++ b/Platform/Marvell/Library/MppLib/MppLib.c

> @@ -79,18 +79,22 @@ SetRegisterValue (

>    BOOLEAN ReverseFlag

>    )

>  {

> -  UINT32 i, j, CtrlVal;

> +  UINT32 i, j, CtrlVal, CtrlMask;

>    INTN Sign;

>  

>    Sign = ReverseFlag ? -1 : 1;

>  

>    for (i = 0; i < RegCount; i++) {

>      CtrlVal = 0;

> +    CtrlMask = 0;

>      for (j = 0; j < MPP_PINS_PER_REG; j++) {

> -      CtrlVal |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign,

> -        MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign]);

> +      if (MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign] != 0xff) {


This addition makes an already messy situation worse.
Can we have a descriptively named temporary variable for
"7 * (UINTN) ReverseFlag + j * Sign"?

/
    Leif

> +        CtrlVal |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign,

> +          MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign]);

> +        CtrlMask |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign, 0xf);

> +      }

>      }

> -    MmioWrite32 (BaseAddr + 4 * i * Sign, CtrlVal);

> +    MmioAndThenOr32 (BaseAddr + 4 * i * Sign, ~CtrlMask, CtrlVal);

>    }

>  }

>  

> -- 

> 2.7.4

> 

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

Patch

diff --git a/Platform/Marvell/Library/MppLib/MppLib.c b/Platform/Marvell/Library/MppLib/MppLib.c
index 383c820..9e42f08 100644
--- a/Platform/Marvell/Library/MppLib/MppLib.c
+++ b/Platform/Marvell/Library/MppLib/MppLib.c
@@ -79,18 +79,22 @@  SetRegisterValue (
   BOOLEAN ReverseFlag
   )
 {
-  UINT32 i, j, CtrlVal;
+  UINT32 i, j, CtrlVal, CtrlMask;
   INTN Sign;
 
   Sign = ReverseFlag ? -1 : 1;
 
   for (i = 0; i < RegCount; i++) {
     CtrlVal = 0;
+    CtrlMask = 0;
     for (j = 0; j < MPP_PINS_PER_REG; j++) {
-      CtrlVal |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign,
-        MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign]);
+      if (MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign] != 0xff) {
+        CtrlVal |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign,
+          MppRegPcd[i][7 * (UINTN) ReverseFlag + j * Sign]);
+        CtrlMask |= MPP_PIN_VAL(7 * (UINTN) ReverseFlag + j * Sign, 0xf);
+      }
     }
-    MmioWrite32 (BaseAddr + 4 * i * Sign, CtrlVal);
+    MmioAndThenOr32 (BaseAddr + 4 * i * Sign, ~CtrlMask, CtrlVal);
   }
 }