Fix detection of framebuffer BAR
This commit is contained in:
committed by
Tim Crawford
parent
2dc1e51593
commit
8c80e407f5
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user