Avoid building duplicated GFX HOB (#1002)

In some cases Bootloader will build GFX HOB. This patch updated
SBL to check the bootloader GFX HOB first before building a new
GFX HOB from FSP. This is to avoid duplicated GFX HOB to be
generated in bootloader HOB.

Signed-off-by: Maurice Ma <maurice.ma@intel.com>
This commit is contained in:
Maurice Ma 2021-02-05 09:03:06 -08:00 committed by GitHub
parent ca738786cc
commit f9c97abfdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 11 deletions

View File

@ -326,23 +326,27 @@ BuildBaseInfoHob (
} }
// Build graphic info hob // Build graphic info hob
BlGfxHob = BuildGuidHob (&gEfiGraphicsInfoHobGuid, sizeof (EFI_PEI_GRAPHICS_INFO_HOB)); BlGfxHob = (EFI_PEI_GRAPHICS_INFO_HOB *)GetGuidHobData (NULL, &Length, &gEfiGraphicsInfoHobGuid);
if (BlGfxHob != NULL) { if (BlGfxHob == NULL) {
ZeroMem (BlGfxHob, sizeof (EFI_PEI_GRAPHICS_INFO_HOB));
FspGfxHob = (EFI_PEI_GRAPHICS_INFO_HOB *)GetGuidHobData (LdrGlobal->FspHobList, &Length, FspGfxHob = (EFI_PEI_GRAPHICS_INFO_HOB *)GetGuidHobData (LdrGlobal->FspHobList, &Length,
&gEfiGraphicsInfoHobGuid); &gEfiGraphicsInfoHobGuid);
if (FspGfxHob != NULL) { if (FspGfxHob != NULL) {
CopyMem (BlGfxHob, FspGfxHob, sizeof (EFI_PEI_GRAPHICS_INFO_HOB)); BlGfxHob = BuildGuidHob (&gEfiGraphicsInfoHobGuid, sizeof (EFI_PEI_GRAPHICS_INFO_HOB));
GfxMode = &BlGfxHob->GraphicsMode; if (BlGfxHob != NULL) {
DEBUG ((DEBUG_INFO, "Graphics Info: %d x %d x 32 @ 0x%08X\n",GfxMode->HorizontalResolution,\ CopyMem (BlGfxHob, FspGfxHob, sizeof (EFI_PEI_GRAPHICS_INFO_HOB));
GfxMode->VerticalResolution, BlGfxHob->FrameBufferBase)); GfxMode = &BlGfxHob->GraphicsMode;
if ((GfxMode->PixelFormat != PixelRedGreenBlueReserved8BitPerColor) && DEBUG ((DEBUG_INFO, "Graphics Info: %d x %d x 32 @ 0x%08X\n",GfxMode->HorizontalResolution,\
(GfxMode->PixelFormat != PixelBlueGreenRedReserved8BitPerColor)) { GfxMode->VerticalResolution, BlGfxHob->FrameBufferBase));
DEBUG ((DEBUG_ERROR, "Graphics PixelFormat NOT expected (0x%x)\n", GfxMode->PixelFormat)); if ((GfxMode->PixelFormat != PixelRedGreenBlueReserved8BitPerColor) &&
(GfxMode->PixelFormat != PixelBlueGreenRedReserved8BitPerColor)) {
DEBUG ((DEBUG_ERROR, "Graphics PixelFormat NOT expected (0x%x)\n", GfxMode->PixelFormat));
}
} }
} else { } else {
DEBUG ((DEBUG_INFO, "Failed to get Graphics Info HOB from FSP\n")); DEBUG ((DEBUG_INFO, "Failed to get GFX HOB from FSP\n"));
} }
} else {
DEBUG ((DEBUG_INFO, "Use existing GFX HOB from bootloader\n"));
} }
// Build graphic device info hob // Build graphic device info hob