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 <[email protected]>
>> Cc: Liming Gao <[email protected]>
>> Cc: Maurice Ma <[email protected]>
>> Cc: Prince Agyeman <[email protected]>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Star Zeng <[email protected]>
>> Reviewed-by: Maurice Ma <[email protected]>
>> ---
>> 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).
Thanks
Laszlo
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel