Fix detection of framebuffer BAR

This commit is contained in:
Jeremy Soller
2020-08-24 08:29:56 -06:00
committed by Tim Crawford
parent 2dc1e51593
commit 8c80e407f5

View File

@@ -320,14 +320,14 @@ GraphicsOutputDriverBindingStart (
VOID *HobStart; VOID *HobStart;
EFI_PEI_GRAPHICS_INFO_HOB *GraphicsInfo; EFI_PEI_GRAPHICS_INFO_HOB *GraphicsInfo;
EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *DeviceInfo; EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *DeviceInfo;
EFI_PHYSICAL_ADDRESS FrameBufferBase;
FrameBufferBase = 0;
HobStart = GetFirstGuidHob (&gEfiGraphicsInfoHobGuid); HobStart = GetFirstGuidHob (&gEfiGraphicsInfoHobGuid);
ASSERT ((HobStart != NULL) && (GET_GUID_HOB_DATA_SIZE (HobStart) == sizeof (EFI_PEI_GRAPHICS_INFO_HOB))); ASSERT ((HobStart != NULL) && (GET_GUID_HOB_DATA_SIZE (HobStart) == sizeof (EFI_PEI_GRAPHICS_INFO_HOB)));
GraphicsInfo = (EFI_PEI_GRAPHICS_INFO_HOB *)(GET_GUID_HOB_DATA (HobStart)); GraphicsInfo = (EFI_PEI_GRAPHICS_INFO_HOB *)(GET_GUID_HOB_DATA (HobStart));
DEBUG ((DEBUG_INFO, "[%a]: GraphicsInfo HOB: FrameBufferBase = %lx, FrameBufferSize = %lx\n",
gEfiCallerBaseName, GraphicsInfo->FrameBufferBase, GraphicsInfo->FrameBufferSize));
HobStart = GetFirstGuidHob (&gEfiGraphicsDeviceInfoHobGuid); HobStart = GetFirstGuidHob (&gEfiGraphicsDeviceInfoHobGuid);
if ((HobStart == NULL) || (GET_GUID_HOB_DATA_SIZE (HobStart) < sizeof (*DeviceInfo))) { if ((HobStart == NULL) || (GET_GUID_HOB_DATA_SIZE (HobStart) < sizeof (*DeviceInfo))) {
// //
@@ -424,24 +424,9 @@ GraphicsOutputDriverBindingStart (
Resources->AddrRangeMin, Resources->AddrRangeMin,
Resources->AddrLen Resources->AddrLen
)); ));
if ((Resources->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) && if (Resources->AddrRangeMin <= GraphicsInfo->FrameBufferBase &&
(Resources->Len == (UINT16)(sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3)) && (Resources->AddrRangeMin + Resources->AddrLen) >= (GraphicsInfo->FrameBufferBase + GraphicsInfo->FrameBufferSize)) {
(Resources->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) && break;
(Resources->AddrLen >= GraphicsInfo->FrameBufferSize)
)
{
if (FrameBufferBase == 0) {
FrameBufferBase = Resources->AddrRangeMin;
}
if (DeviceInfo->BarIndex == MAX_UINT8) {
if (Resources->AddrRangeMin == GraphicsInfo->FrameBufferBase) {
FrameBufferBase = Resources->AddrRangeMin;
break;
}
} else {
break;
}
} }
} }
} }
@@ -468,7 +453,7 @@ GraphicsOutputDriverBindingStart (
goto CloseProtocols; goto CloseProtocols;
} }
Private->GraphicsOutputMode.FrameBufferBase = FrameBufferBase; Private->GraphicsOutputMode.FrameBufferBase = GraphicsInfo->FrameBufferBase;
Private->GraphicsOutputMode.FrameBufferSize = GraphicsInfo->FrameBufferSize; Private->GraphicsOutputMode.FrameBufferSize = GraphicsInfo->FrameBufferSize;
Private->GraphicsOutputMode.Info = &GraphicsInfo->GraphicsMode; Private->GraphicsOutputMode.Info = &GraphicsInfo->GraphicsMode;