]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CorebootPayloadPkg/FbGop/FbGop.c
CorebootPayloadPkg/FbGop: Locate correct framebuffer device
[mirror_edk2.git] / CorebootPayloadPkg / FbGop / FbGop.c
index 14904ddb53898931ff773a4ef376c0635df6f517..e46f53426e3a9478c10bcfd338cbbadb1aa3a52d 100644 (file)
@@ -16,7 +16,7 @@ EFI_PIXEL_BITMASK  mPixelBitMask = {0x0000FF, 0x00FF00, 0xFF0000, 0x000000};
 //\r
 UINT64                         mOriginalPciAttributes;\r
 BOOLEAN                        mPciAttributesSaved = FALSE;\r
-\r
+FRAME_BUFFER_INFO             *mFrameBufferInfo;\r
 \r
 //\r
 // EFI Driver Binding Protocol Instance\r
@@ -57,10 +57,12 @@ FbGopDriverBindingSupported (
   IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
+  EFI_STATUS                 Status;\r
   EFI_PCI_IO_PROTOCOL       *PciIo;\r
-  PCI_TYPE00                Pci;\r
+  PCI_TYPE00                 Pci;\r
   EFI_DEV_PATH              *Node;\r
+  UINT8                      Index;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Resources;\r
 \r
   //\r
   // Open the IO Abstraction(s) needed to perform the supported test\r
@@ -94,28 +96,45 @@ FbGopDriverBindingSupported (
   }\r
 \r
   Status = EFI_UNSUPPORTED;\r
-  if (Pci.Hdr.ClassCode[2] == 0x03 || (Pci.Hdr.ClassCode[2] == 0x00 && Pci.Hdr.ClassCode[1] == 0x01)) {\r
-\r
-    Status = EFI_SUCCESS;\r
+  if (IS_PCI_DISPLAY (&Pci) || IS_PCI_OLD_VGA (&Pci)) {\r
     //\r
-    // If this is a graphics controller,\r
-    // go further check RemainingDevicePath validation\r
+    // Check if PCI BAR matches the framebuffer base\r
     //\r
-    if (RemainingDevicePath != NULL) {\r
-      Node = (EFI_DEV_PATH *) RemainingDevicePath;\r
+    Status = EFI_UNSUPPORTED;\r
+    for (Index = 0; Index < PCI_MAX_BAR; Index++) {\r
+      Status = PciIo->GetBarAttributes (PciIo, Index, NULL, (VOID**) &Resources);\r
+      if (!EFI_ERROR (Status)) {\r
+        if ((Resources->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) &&\r
+            (Resources->Len == (UINT16) (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3)) &&\r
+            (Resources->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) &&\r
+            (Resources->AddrRangeMin == mFrameBufferInfo->LinearFrameBuffer)) {\r
+          DEBUG ((DEBUG_INFO, "Found matched framebuffer PCI BAR !\n"));\r
+          Status = EFI_SUCCESS;\r
+          break;\r
+        }\r
+      }\r
+    }\r
+\r
+    if (!EFI_ERROR (Status)) {\r
       //\r
-      // Check if RemainingDevicePath is the End of Device Path Node, \r
-      // if yes, return EFI_SUCCESS\r
+      // If this is a graphics controller,\r
+      // go further check RemainingDevicePath\r
       //\r
-      if (!IsDevicePathEnd (Node)) {\r
+      if (RemainingDevicePath != NULL) {\r
+        Node = (EFI_DEV_PATH *) RemainingDevicePath;\r
         //\r
-        // If RemainingDevicePath isn't the End of Device Path Node,\r
-        // check its validation\r
+        // Check if RemainingDevicePath is the End of Device Path Node,\r
+        // if yes, return EFI_SUCCESS\r
         //\r
-        if (Node->DevPath.Type != ACPI_DEVICE_PATH ||\r
-            Node->DevPath.SubType != ACPI_ADR_DP ||\r
-            DevicePathNodeLength(&Node->DevPath) < sizeof(ACPI_ADR_DEVICE_PATH)) {\r
-          Status = EFI_UNSUPPORTED;\r
+        if (!IsDevicePathEnd (Node)) {\r
+          //\r
+          // Verify RemainingDevicePath\r
+          //\r
+          if (Node->DevPath.Type != ACPI_DEVICE_PATH ||\r
+              Node->DevPath.SubType != ACPI_ADR_DP ||\r
+              DevicePathNodeLength(&Node->DevPath) < sizeof(ACPI_ADR_DEVICE_PATH)) {\r
+            Status = EFI_UNSUPPORTED;\r
+          }\r
         }\r
       }\r
     }\r
@@ -154,11 +173,11 @@ FbGopDriverBindingStart (
 {\r
   EFI_STATUS                Status;\r
   EFI_DEVICE_PATH_PROTOCOL  *ParentDevicePath;\r
-  EFI_PCI_IO_PROTOCOL       *PciIo;  \r
+  EFI_PCI_IO_PROTOCOL       *PciIo;\r
   UINT64                    Supports;\r
 \r
-  DEBUG ((EFI_D_INFO, "GOP START\n"));\r
-  \r
+  DEBUG ((DEBUG_INFO, "GOP START\n"));\r
+\r
   //\r
   // Initialize local variables\r
   //\r
@@ -202,7 +221,7 @@ FbGopDriverBindingStart (
                       0,\r
                       &mOriginalPciAttributes\r
                       );\r
-    \r
+\r
     if (EFI_ERROR (Status)) {\r
       goto Done;\r
     }\r
@@ -226,8 +245,8 @@ FbGopDriverBindingStart (
   if (Supports == 0 || Supports == (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) {\r
     Status = EFI_UNSUPPORTED;\r
     goto Done;\r
-  }  \r
-  \r
+  }\r
+\r
   REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
     EFI_PROGRESS_CODE,\r
     EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_ENABLE,\r
@@ -260,7 +279,7 @@ FbGopDriverBindingStart (
       goto Done;\r
     }\r
   }\r
-  \r
+\r
   //\r
   // Create child handle and install GraphicsOutputProtocol on it\r
   //\r
@@ -272,10 +291,10 @@ FbGopDriverBindingStart (
              ParentDevicePath,\r
              RemainingDevicePath\r
              );\r
-  \r
+\r
 Done:\r
   if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {\r
-          \r
+\r
     REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
       EFI_PROGRESS_CODE,\r
       EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_DISABLE,\r
@@ -358,7 +377,7 @@ FbGopDriverBindingStop (
   }\r
 \r
   for (Index = 0; Index < NumberOfChildren; Index++) {\r
-        \r
+\r
     Status = EFI_SUCCESS;\r
 \r
     FbGopChildHandleUninstall (This, Controller, ChildHandleBuffer[Index]);\r
@@ -380,7 +399,7 @@ FbGopDriverBindingStop (
                       (VOID **) &PciIo\r
                       );\r
       ASSERT_EFI_ERROR (Status);\r
-      \r
+\r
       //\r
       // Restore original PCI attributes\r
       //\r
@@ -457,7 +476,7 @@ FbGopChildHandleInstall (
       );\r
     goto Done;\r
   }\r
-  \r
+\r
   //\r
   // Initialize the child private structure\r
   //\r
@@ -465,16 +484,16 @@ FbGopChildHandleInstall (
 \r
   //\r
   // Fill in Graphics Output specific mode structures\r
-  //  \r
+  //\r
   FbGopPrivate->ModeData              = NULL;\r
-    \r
+\r
   FbGopPrivate->VbeFrameBuffer        = NULL;\r
 \r
   FbGopPrivate->EdidDiscovered.SizeOfEdid  = 0;\r
   FbGopPrivate->EdidDiscovered.Edid        = NULL;\r
   FbGopPrivate->EdidActive.SizeOfEdid      = 0;\r
   FbGopPrivate->EdidActive.Edid            = NULL;\r
-  \r
+\r
   //\r
   // Fill in the Graphics Output Protocol\r
   //\r
@@ -511,7 +530,7 @@ FbGopChildHandleInstall (
       AcpiDeviceNode.Header.SubType = ACPI_ADR_DP;\r
       AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0);\r
       SetDevicePathNodeLength (&AcpiDeviceNode.Header, sizeof (ACPI_ADR_DEVICE_PATH));\r
-    \r
+\r
       FbGopPrivate->GopDevicePath = AppendDevicePathNode (\r
                                           ParentDevicePath,\r
                                           (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode\r
@@ -519,7 +538,7 @@ FbGopChildHandleInstall (
     } else {\r
       FbGopPrivate->GopDevicePath = AppendDevicePathNode (ParentDevicePath, RemainingDevicePath);\r
     }\r
-    \r
+\r
     //\r
     // Creat child handle and device path protocol firstly\r
     //\r
@@ -534,7 +553,7 @@ FbGopChildHandleInstall (
       goto Done;\r
     }\r
   }\r
-  \r
+\r
   //\r
   // When check for VBE, PCI I/O protocol is needed, so use parent's protocol interface temporally\r
   //\r
@@ -544,11 +563,11 @@ FbGopChildHandleInstall (
   // Check for VESA BIOS Extensions for modes that are compatible with Graphics Output\r
   //\r
   Status = FbGopCheckForVbe (FbGopPrivate);\r
-  DEBUG ((EFI_D_INFO, "FbGopCheckForVbe - %r\n", Status));\r
-  \r
+  DEBUG ((DEBUG_INFO, "FbGopCheckForVbe - %r\n", Status));\r
+\r
   if (EFI_ERROR (Status)) {\r
     Status = EFI_UNSUPPORTED;\r
-    //goto Done;    \r
+    //goto Done;\r
   }\r
 \r
   //\r
@@ -557,11 +576,11 @@ FbGopChildHandleInstall (
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &FbGopPrivate->Handle,\r
                   &gEfiGraphicsOutputProtocolGuid,\r
-                  &FbGopPrivate->GraphicsOutput,  \r
+                  &FbGopPrivate->GraphicsOutput,\r
                   &gEfiEdidDiscoveredProtocolGuid,\r
-                  &FbGopPrivate->EdidDiscovered,                                                    \r
+                  &FbGopPrivate->EdidDiscovered,\r
                   &gEfiEdidActiveProtocolGuid,\r
-                  &FbGopPrivate->EdidActive,                  \r
+                  &FbGopPrivate->EdidActive,\r
                   NULL\r
                   );\r
 \r
@@ -581,7 +600,7 @@ FbGopChildHandleInstall (
       goto Done;\r
     }\r
   }\r
-  \r
+\r
 Done:\r
   if (EFI_ERROR (Status)) {\r
     //\r
@@ -612,7 +631,7 @@ FbGopChildHandleUninstall (
   )\r
 {\r
   EFI_STATUS                    Status;\r
-  EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;  \r
+  EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
   FB_VIDEO_DEV                 *FbGopPrivate;\r
   EFI_PCI_IO_PROTOCOL          *PciIo;\r
 \r
@@ -632,7 +651,7 @@ FbGopChildHandleUninstall (
   if (!EFI_ERROR (Status)) {\r
       FbGopPrivate = FB_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput);\r
   }\r
-  \r
+\r
   if (FbGopPrivate == NULL) {\r
     return EFI_UNSUPPORTED;\r
   }\r
@@ -658,7 +677,7 @@ FbGopChildHandleUninstall (
                     &FbGopPrivate->GraphicsOutput,\r
                     NULL\r
                     );\r
\r
+\r
   if (EFI_ERROR (Status)) {\r
     gBS->OpenProtocol (\r
            Controller,\r
@@ -670,7 +689,7 @@ FbGopChildHandleUninstall (
            );\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Release all allocated resources\r
   //\r
@@ -698,20 +717,20 @@ FbGopDeviceReleaseResource (
   //\r
   // Release all the resources occupied by the FB_VIDEO_DEV\r
   //\r
-  \r
+\r
   //\r
   // Free VBE Frame Buffer\r
   //\r
   if (FbGopPrivate->VbeFrameBuffer != NULL) {\r
     FreePool (FbGopPrivate->VbeFrameBuffer);\r
   }\r
-  \r
+\r
   //\r
   // Free mode data\r
   //\r
   if (FbGopPrivate->ModeData != NULL) {\r
     FreePool (FbGopPrivate->ModeData);\r
-  }  \r
+  }\r
 \r
   //\r
   // Free graphics output protocol occupied resource\r
@@ -723,7 +742,7 @@ FbGopDeviceReleaseResource (
     }\r
     FreePool (FbGopPrivate->GraphicsOutput.Mode);\r
     FbGopPrivate->GraphicsOutput.Mode = NULL;\r
-  }  \r
+  }\r
 \r
   if (FbGopPrivate->GopDevicePath!= NULL) {\r
     FreePool (FbGopPrivate->GopDevicePath);\r
@@ -768,7 +787,7 @@ HasChildHandle (
       HasChild = TRUE;\r
     }\r
   }\r
-  \r
+\r
   return HasChild;\r
 }\r
 \r
@@ -785,38 +804,33 @@ FbGopCheckForVbe (
   IN OUT FB_VIDEO_DEV  *FbGopPrivate\r
   )\r
 {\r
-  EFI_STATUS                             Status;  \r
+  EFI_STATUS                             Status;\r
   FB_VIDEO_MODE_DATA                     *ModeBuffer;\r
-  FB_VIDEO_MODE_DATA                     *CurrentModeData;  \r
-  UINTN                                  ModeNumber;  \r
-  UINTN                                  BitsPerPixel; \r
+  FB_VIDEO_MODE_DATA                     *CurrentModeData;\r
+  UINTN                                  ModeNumber;\r
+  UINTN                                  BitsPerPixel;\r
   UINTN                                  BytesPerScanLine;\r
   UINT32                                 HorizontalResolution;\r
   UINT32                                 VerticalResolution;\r
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL          *VbeFrameBuffer;  \r
-  EFI_HOB_GUID_TYPE                      *GuidHob;\r
-  FRAME_BUFFER_INFO                      *pFbInfo;\r
-  \r
+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL          *VbeFrameBuffer;\r
+  FRAME_BUFFER_INFO                      *FbInfo;\r
+\r
   Status = EFI_SUCCESS;\r
-  //\r
-  // Find the frame buffer information guid hob\r
-  //\r
-  GuidHob = GetFirstGuidHob (&gUefiFrameBufferInfoGuid);\r
-  ASSERT (GuidHob != NULL);\r
-  pFbInfo = (FRAME_BUFFER_INFO *)GET_GUID_HOB_DATA (GuidHob);\r
-  \r
+\r
+  FbInfo = mFrameBufferInfo;\r
+\r
   //\r
   // Add mode to the list of available modes\r
   //\r
   VbeFrameBuffer = NULL;\r
   ModeBuffer     = NULL;\r
-  \r
-  ModeNumber           = 1;  \r
-  BitsPerPixel         = pFbInfo->BitsPerPixel;\r
-  HorizontalResolution = pFbInfo->HorizontalResolution;\r
-  VerticalResolution   = pFbInfo->VerticalResolution;\r
-  BytesPerScanLine     = pFbInfo->BytesPerScanLine;\r
-  \r
+\r
+  ModeNumber           = 1;\r
+  BitsPerPixel         = FbInfo->BitsPerPixel;\r
+  HorizontalResolution = FbInfo->HorizontalResolution;\r
+  VerticalResolution   = FbInfo->VerticalResolution;\r
+  BytesPerScanLine     = FbInfo->BytesPerScanLine;\r
+\r
   ModeBuffer = (FB_VIDEO_MODE_DATA *) AllocatePool (\r
                                                                                                                                                                                ModeNumber * sizeof (FB_VIDEO_MODE_DATA)\r
                                                                                                                                                        );\r
@@ -833,32 +847,32 @@ FbGopCheckForVbe (
          Status = EFI_OUT_OF_RESOURCES;\r
     goto Done;\r
   }\r
-       \r
+\r
   if (FbGopPrivate->ModeData != NULL) {\r
     FreePool (FbGopPrivate->ModeData);\r
   }\r
-    \r
+\r
   if (FbGopPrivate->VbeFrameBuffer != NULL) {\r
     FreePool (FbGopPrivate->VbeFrameBuffer);\r
-  }  \r
-  \r
+  }\r
+\r
   CurrentModeData = &ModeBuffer[ModeNumber - 1];\r
   CurrentModeData->BytesPerScanLine = (UINT16)BytesPerScanLine;\r
-  \r
-  CurrentModeData->Red      = *(FB_VIDEO_COLOR_PLACEMENT *)&(pFbInfo->Red);  \r
-  CurrentModeData->Blue     = *(FB_VIDEO_COLOR_PLACEMENT *)&(pFbInfo->Blue);    \r
-  CurrentModeData->Green    = *(FB_VIDEO_COLOR_PLACEMENT *)&(pFbInfo->Green);    \r
-  CurrentModeData->Reserved = *(FB_VIDEO_COLOR_PLACEMENT *)&(pFbInfo->Reserved);  \r
-  \r
+\r
+  CurrentModeData->Red      = *(FB_VIDEO_COLOR_PLACEMENT *)&(FbInfo->Red);\r
+  CurrentModeData->Blue     = *(FB_VIDEO_COLOR_PLACEMENT *)&(FbInfo->Blue);\r
+  CurrentModeData->Green    = *(FB_VIDEO_COLOR_PLACEMENT *)&(FbInfo->Green);\r
+  CurrentModeData->Reserved = *(FB_VIDEO_COLOR_PLACEMENT *)&(FbInfo->Reserved);\r
+\r
   CurrentModeData->BitsPerPixel    = (UINT32)BitsPerPixel;\r
   CurrentModeData->HorizontalResolution = HorizontalResolution;\r
-  CurrentModeData->VerticalResolution   = VerticalResolution;  \r
-  CurrentModeData->FrameBufferSize = CurrentModeData->BytesPerScanLine * CurrentModeData->VerticalResolution;    \r
-  CurrentModeData->LinearFrameBuffer = (VOID *) (UINTN) pFbInfo->LinearFrameBuffer;\r
+  CurrentModeData->VerticalResolution   = VerticalResolution;\r
+  CurrentModeData->FrameBufferSize = CurrentModeData->BytesPerScanLine * CurrentModeData->VerticalResolution;\r
+  CurrentModeData->LinearFrameBuffer = (VOID *) (UINTN) FbInfo->LinearFrameBuffer;\r
   CurrentModeData->VbeModeNumber        = 0;\r
   CurrentModeData->ColorDepth           = 32;\r
   CurrentModeData->RefreshRate          = 60;\r
-  \r
+\r
   CurrentModeData->PixelFormat = PixelBitMask;\r
   if ((CurrentModeData->BitsPerPixel == 32) &&\r
       (CurrentModeData->Red.Mask == 0xff) && (CurrentModeData->Green.Mask == 0xff) && (CurrentModeData->Blue.Mask == 0xff)) {\r
@@ -867,47 +881,47 @@ FbGopCheckForVbe (
     } else if ((CurrentModeData->Blue.Position == 0) && (CurrentModeData->Green.Position == 8) && (CurrentModeData->Red.Position == 16)) {\r
       CurrentModeData->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;\r
     }\r
-  }  \r
-  \r
-  CopyMem (&(CurrentModeData->PixelBitMask), &mPixelBitMask, sizeof (EFI_PIXEL_BITMASK));    \r
-          \r
+  }\r
+\r
+  CopyMem (&(CurrentModeData->PixelBitMask), &mPixelBitMask, sizeof (EFI_PIXEL_BITMASK));\r
+\r
   FbGopPrivate->ModeData       = ModeBuffer;\r
   FbGopPrivate->VbeFrameBuffer = VbeFrameBuffer;\r
-  \r
+\r
   //\r
   // Assign Gop's Blt function\r
   //\r
   FbGopPrivate->GraphicsOutput.Blt     = FbGopGraphicsOutputVbeBlt;\r
-  \r
+\r
   FbGopPrivate->GraphicsOutput.Mode->MaxMode = 1;\r
-  FbGopPrivate->GraphicsOutput.Mode->Mode    = 0;      \r
+  FbGopPrivate->GraphicsOutput.Mode->Mode    = 0;\r
   FbGopPrivate->GraphicsOutput.Mode->Info->Version = 0;\r
   FbGopPrivate->GraphicsOutput.Mode->Info->HorizontalResolution = HorizontalResolution;\r
-  FbGopPrivate->GraphicsOutput.Mode->Info->VerticalResolution   = VerticalResolution;   \r
+  FbGopPrivate->GraphicsOutput.Mode->Info->VerticalResolution   = VerticalResolution;\r
   FbGopPrivate->GraphicsOutput.Mode->Info->PixelFormat = CurrentModeData->PixelFormat;\r
-  CopyMem (&(FbGopPrivate->GraphicsOutput.Mode->Info->PixelInformation), &mPixelBitMask, sizeof (EFI_PIXEL_BITMASK));  \r
+  CopyMem (&(FbGopPrivate->GraphicsOutput.Mode->Info->PixelInformation), &mPixelBitMask, sizeof (EFI_PIXEL_BITMASK));\r
   FbGopPrivate->GraphicsOutput.Mode->Info->PixelsPerScanLine = (UINT32)(BytesPerScanLine * 8 / BitsPerPixel);\r
   FbGopPrivate->GraphicsOutput.Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
   FbGopPrivate->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) (UINTN) CurrentModeData->LinearFrameBuffer;\r
   FbGopPrivate->GraphicsOutput.Mode->FrameBufferSize =  CurrentModeData->FrameBufferSize;\r
-  \r
+\r
   //\r
   // Find the best mode to initialize\r
-  //  \r
+  //\r
 \r
 Done:\r
   //\r
   // If there was an error, then free the mode structure\r
   //\r
   if (EFI_ERROR (Status)) {\r
-      \r
+\r
     if (VbeFrameBuffer != NULL) {\r
       FreePool (VbeFrameBuffer);\r
-    }    \r
-    \r
+    }\r
+\r
     if (ModeBuffer != NULL) {\r
       FreePool (ModeBuffer);\r
-    }    \r
+    }\r
   }\r
 \r
   return Status;\r
@@ -992,7 +1006,7 @@ FbGopGraphicsOutputSetMode (
   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL * This,\r
   IN  UINT32                       ModeNumber\r
   )\r
-{  \r
+{\r
   FB_VIDEO_DEV          *FbGopPrivate;\r
   FB_VIDEO_MODE_DATA    *ModeData;\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;\r
@@ -1008,11 +1022,11 @@ FbGopGraphicsOutputSetMode (
   if (ModeNumber >= This->Mode->MaxMode) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  \r
+\r
   if (ModeNumber == This->Mode->Mode) {\r
     //\r
     // Clear screen to black\r
-    //    \r
+    //\r
     ZeroMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
     FbGopGraphicsOutputVbeBlt (\r
                         This,\r
@@ -1030,7 +1044,7 @@ FbGopGraphicsOutputSetMode (
   } else {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  \r
+\r
 }\r
 \r
 /**\r
@@ -1493,12 +1507,14 @@ FbGopEntryPoint(
 {\r
   EFI_STATUS  Status;\r
   EFI_HOB_GUID_TYPE  *GuidHob;\r
-  \r
+\r
   //\r
   // Find the frame buffer information guid hob\r
   //\r
   GuidHob = GetFirstGuidHob (&gUefiFrameBufferInfoGuid);\r
-  if (GuidHob != NULL) {   \r
+  if (GuidHob != NULL) {\r
+    mFrameBufferInfo = (FRAME_BUFFER_INFO *)GET_GUID_HOB_DATA (GuidHob);\r
+\r
     //\r
     // Install driver model protocol(s).\r
     //\r
@@ -1512,9 +1528,9 @@ FbGopEntryPoint(
                );\r
     ASSERT_EFI_ERROR (Status);\r
   } else {\r
-    DEBUG ((EFI_D_ERROR, "No FrameBuffer information from coreboot.  NO GOP driver !!!\n"));\r
+    DEBUG ((DEBUG_ERROR, "No FrameBuffer information from coreboot.  NO GOP driver !!!\n"));\r
     Status = EFI_ABORTED;\r
   }\r
-  return Status;  \r
+  return Status;\r
 }\r
 \r