Hi Laszlo,

On 2015/11/27 1:44, Laszlo Ersek wrote:
On 11/26/15 18:39, Laszlo Ersek wrote:
Hi Star,

On 11/25/15 02:33, Star Zeng wrote:
1. Update fdf and dsc to use SerialDxe in MdeModulePkg.
2. Separate the code that gets SerialRegBase and SerialRegAccessType
    by CbParseLib from CorebootPayloadPkg/Library/SerialPortLib to
    PlatformHookLib, and then leverage BaseSerialPortLib16550 in
    MdeModulePkg.
3. Remove CorebootPayloadPkg/SerialDxe and
    CorebootPayloadPkg/Library/SerialPortLib.

Cc: Michael D Kinney <michael.d.kin...@intel.com>
Cc: Liming Gao <liming....@intel.com>
Cc: Maurice Ma <maurice...@intel.com>
Cc: Prince Agyeman <prince.agye...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.z...@intel.com>
Reviewed-by: Maurice Ma <maurice...@intel.com>
---
  CorebootPayloadPkg/CorebootPayloadPkg.fdf          |   4 +-
  CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc      |  11 +-
  CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc   |  11 +-
  .../Library/PlatformBdsLib/BdsPlatform.h           |   5 +-
  .../Library/PlatformHookLib/PlatformHookLib.c      |  56 +++
  .../Library/PlatformHookLib/PlatformHookLib.inf    |  38 ++
  .../Library/SerialPortLib/SerialPortLib.c          | 316 -----------------
  .../Library/SerialPortLib/SerialPortLib.inf        |  42 ---
  CorebootPayloadPkg/SerialDxe/SerialDxe.inf         |  55 ---
  CorebootPayloadPkg/SerialDxe/SerialIo.c            | 392 ---------------------
  10 files changed, 114 insertions(+), 816 deletions(-)
  create mode 100644 
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
  create mode 100644 
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
  delete mode 100644 CorebootPayloadPkg/Library/SerialPortLib/SerialPortLib.c
  delete mode 100644 CorebootPayloadPkg/Library/SerialPortLib/SerialPortLib.inf
  delete mode 100644 CorebootPayloadPkg/SerialDxe/SerialDxe.inf
  delete mode 100644 CorebootPayloadPkg/SerialDxe/SerialIo.c

I'm not completely sure if this patch caused the breakage, but I got a 
CorebootPayloadPkg build failure report, and I sort of guess this patch could 
be the culprit.

The build error is as follows:

In file included from <command-line>:0:0:
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c: In function 
'PlatformHookSerialPortInitialize':
Build/CorebootPayloadPkgIA32/DEBUG_GCC49/IA32/CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib/DEBUG/AutoGen.h:31:102:
 error: right-hand operand of comma expression has no effect 
[-Werror=unused-value]
  #define _PCD_SET_MODE_BOOL_S_PcdSerialUseMmio(Value)  
((_gPcd_BinaryPatch_PcdSerialUseMmio = (Value)), RETURN_SUCCESS)
                                                                                
                       ^
MdePkg/Include/Library/PcdLib.h:687:45: note: in expansion of macro 
'_PCD_SET_MODE_BOOL_S_PcdSerialUseMmio'
  #define PcdSetBoolS(TokenName, Value)       _PCD_SET_MODE_BOOL_S_##TokenName  
  ((Value))
                                              ^
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c:48:5: note: in 
expansion of macro 'PcdSetBoolS'
      PcdSetBoolS (PcdSerialUseMmio, TRUE);
      ^
Build/CorebootPayloadPkgIA32/DEBUG_GCC49/IA32/CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib/DEBUG/AutoGen.h:31:102:
 error: right-hand operand of comma expression has no effect 
[-Werror=unused-value]
  #define _PCD_SET_MODE_BOOL_S_PcdSerialUseMmio(Value)  
((_gPcd_BinaryPatch_PcdSerialUseMmio = (Value)), RETURN_SUCCESS)
                                                                                
                       ^
MdePkg/Include/Library/PcdLib.h:687:45: note: in expansion of macro 
'_PCD_SET_MODE_BOOL_S_PcdSerialUseMmio'
  #define PcdSetBoolS(TokenName, Value)       _PCD_SET_MODE_BOOL_S_##TokenName  
  ((Value))
                                              ^
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c:50:5: note: in 
expansion of macro 'PcdSetBoolS'
      PcdSetBoolS (PcdSerialUseMmio, FALSE);
      ^
Build/CorebootPayloadPkgIA32/DEBUG_GCC49/IA32/CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib/DEBUG/AutoGen.h:39:110:
 error: right-hand operand of comma expression has no effect 
[-Werror=unused-value]
  #define _PCD_SET_MODE_64_S_PcdSerialRegisterBase(Value)  
((_gPcd_BinaryPatch_PcdSerialRegisterBase = (Value)), RETURN_SUCCESS)
                                                                                
                               ^
MdePkg/Include/Library/PcdLib.h:647:45: note: in expansion of macro 
'_PCD_SET_MODE_64_S_PcdSerialRegisterBase'
  #define PcdSet64S(TokenName, Value)         _PCD_SET_MODE_64_S_##TokenName    
((Value))
                                              ^
CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c:52:3: note: in 
expansion of macro 'PcdSet64S'
    PcdSet64S (PcdSerialRegisterBase, (UINT64) SerialRegBase);
    ^
cc1: all warnings being treated as errors
GNUmakefile:299: recipe for target 
'Build/CorebootPayloadPkgIA32/DEBUG_GCC49/IA32/CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib/OUTPUT/PlatformHookLib.obj'
 failed
make: *** 
[Build/CorebootPayloadPkgIA32/DEBUG_GCC49/IA32/CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib/OUTPUT/PlatformHookLib.obj]
 Error 1

Thinking a bit further, I believe this occurs because your patch adds a number 
of PcdSetxxxS() calls, but the return status is never checked:

+RETURN_STATUS
+EFIAPI
+PlatformHookSerialPortInitialize (
+  VOID
+  )
+{
+  RETURN_STATUS     Status;
+  UINT32            SerialRegBase;
+  UINT32            SerialRegAccessType;
+
+  Status = CbParseSerialInfo (&SerialRegBase, &SerialRegAccessType, NULL);
+  if (RETURN_ERROR (Status)) {
+    return Status;
+  }
+
+  if (SerialRegAccessType == 2) { //MMIO
+    PcdSetBoolS (PcdSerialUseMmio, TRUE);
+  } else { //IO
+    PcdSetBoolS (PcdSerialUseMmio, FALSE);
+  }
+  PcdSet64S (PcdSerialRegisterBase, (UINT64) SerialRegBase);
+
+  return RETURN_SUCCESS;
+}
+

This makes PcdSetxxxS() kinda useless -- their purpose is *exactly* so the 
programmer can check the return value.

So I'd propose to either check the return values, or to use the older 
PcdSetxxxx() macros / functions (that don't return statuses).

Yes, I select to check the return status to fix this build failure.
And I have sent out patch with your Suggested-by.

Thanks for the report.
Star


Thanks
Laszlo


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

Reply via email to