Ring3: Fixed bug in Uart initialization.

This commit is contained in:
Mikhail Krichanov 2025-01-30 14:06:15 +03:00
parent 36b11d3852
commit 7ecac413b2
2 changed files with 15 additions and 16 deletions

View File

@ -29,10 +29,11 @@ DebugLibFdtPL011UartUserConstructor (
for (Index = 0; Index < SystemTable->NumberOfTableEntries; ++Index) { for (Index = 0; Index < SystemTable->NumberOfTableEntries; ++Index) {
if (CompareGuid (&gEarlyPL011BaseAddressGuid, &(SystemTable->ConfigurationTable[Index].VendorGuid))) { if (CompareGuid (&gEarlyPL011BaseAddressGuid, &(SystemTable->ConfigurationTable[Index].VendorGuid))) {
mDebugLibFdtPL011UartAddress = (UINTN)SystemTable->ConfigurationTable[Index].VendorTable; mDebugLibFdtPL011UartAddress = (UINTN)SystemTable->ConfigurationTable[Index].VendorTable;
return EFI_SUCCESS;
} }
} }
return EFI_SUCCESS; return EFI_NOT_FOUND;
} }
/** /**

View File

@ -73,6 +73,15 @@ InitializeRing3 (
EFI_MEMORY_XP | EFI_MEMORY_USER EFI_MEMORY_XP | EFI_MEMORY_USER
); );
Status = InitializePlatform (&gRing3Data->SystemTable);
if (EFI_ERROR (Status)) {
CoreFreePages (
(EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data,
EFI_SIZE_TO_PAGES (sizeof (RING3_DATA))
);
return Status;
}
// //
// Initialize DxeRing3 with Supervisor privileges. // Initialize DxeRing3 with Supervisor privileges.
// //
@ -81,14 +90,16 @@ InitializeRing3 (
SetUefiImageProtectionAttributes (mDxeRing3, FALSE); SetUefiImageProtectionAttributes (mDxeRing3, FALSE);
AllowSupervisorAccessToUserMemory ();
Status = Image->EntryPoint (ImageHandle, (EFI_SYSTEM_TABLE *)gRing3Data); Status = Image->EntryPoint (ImageHandle, (EFI_SYSTEM_TABLE *)gRing3Data);
SetUefiImageProtectionAttributes (mDxeRing3, TRUE);
gRing3EntryPoint = gRing3Data->EntryPoint; gRing3EntryPoint = gRing3Data->EntryPoint;
gRing3Data->SystemTable.BootServices = gRing3Data->BootServices; gRing3Data->SystemTable.BootServices = gRing3Data->BootServices;
gRing3Data->SystemTable.RuntimeServices = gRing3Data->RuntimeServices; gRing3Data->SystemTable.RuntimeServices = gRing3Data->RuntimeServices;
ForbidSupervisorAccessToUserMemory ();
SetUefiImageProtectionAttributes (mDxeRing3, TRUE);
Status = CoreAllocatePages ( Status = CoreAllocatePages (
AllocateAnyPages, AllocateAnyPages,
@ -112,19 +123,6 @@ InitializeRing3 (
EFI_MEMORY_XP | EFI_MEMORY_USER EFI_MEMORY_XP | EFI_MEMORY_USER
); );
Status = InitializePlatform (&gRing3Data->SystemTable);
if (EFI_ERROR (Status)) {
CoreFreePages (
(EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data,
EFI_SIZE_TO_PAGES (sizeof (RING3_DATA))
);
CoreFreePages (
(EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Interfaces,
RING3_INTERFACES_PAGES
);
return Status;
}
mExceptionAddresses = GetExceptionAddresses (); mExceptionAddresses = GetExceptionAddresses ();
PeiHob.Raw = GetHobList (); PeiHob.Raw = GetHobList ();