|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [edk2-devel] [PATCH v2 14/31] OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist
On 04/11/19 14:23, Laszlo Ersek wrote:
> On 04/11/19 14:20, Laszlo Ersek wrote:
>> On 04/09/19 13:08, Anthony PERARD wrote:
>>> If the firmware have been started via the PVH entry point, a RSDP
>>> pointer would have been provided. Use it.
>>>
>>> Also, use XenDetect() from the new XenPlatformLib.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.1
>>> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>>> ---
>>> OvmfPkg/OvmfPkgIa32.dsc | 1 +
>>> OvmfPkg/OvmfPkgIa32X64.dsc | 1 +
>>> OvmfPkg/OvmfPkgX64.dsc | 1 +
>>> OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf | 2 +-
>>> OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h | 6 +--
>>> OvmfPkg/AcpiPlatformDxe/Xen.c | 41 ++++++++------------
>>> 6 files changed, 22 insertions(+), 30 deletions(-)
>>>
>>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
>>> index f55ab5a3d2..cab9764cab 100644
>>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>>> @@ -205,6 +205,7 @@ [LibraryClasses]
>>> SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>> XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> + XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>
>>> !if $(TPM2_ENABLE) == TRUE
>>> Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
>>> index 5c9bdf034e..a156358690 100644
>>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>>> @@ -210,6 +210,7 @@ [LibraryClasses]
>>> SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>> XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> + XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>
>>> !if $(TPM2_ENABLE) == TRUE
>>> Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
>>> index 2943e9e8af..9d8dc442b4 100644
>>> --- a/OvmfPkg/OvmfPkgX64.dsc
>>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>>> @@ -210,6 +210,7 @@ [LibraryClasses]
>>> SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>> XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> + XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>
>>> !if $(TPM2_ENABLE) == TRUE
>>> Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> index 8440e7b343..ca54a3bd9e 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> @@ -51,13 +51,13 @@ [LibraryClasses]
>>> DebugLib
>>> UefiBootServicesTableLib
>>> UefiDriverEntryPoint
>>> - HobLib
>>> QemuFwCfgLib
>>> QemuFwCfgS3Lib
>>> MemoryAllocationLib
>>> BaseLib
>>> DxeServicesTableLib
>>> OrderedCollectionLib
>>> + XenPlatformLib
>>>
>>> [Protocols]
>>> gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> index 83b981ee00..85f37128dd 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> @@ -25,6 +25,7 @@
>>> #include <Library/UefiBootServicesTableLib.h>
>>> #include <Library/DebugLib.h>
>>> #include <Library/PcdLib.h>
>>> +#include <Library/XenPlatformLib.h>
>>>
>>> #include <IndustryStandard/Acpi.h>
>>>
>>> @@ -58,11 +59,6 @@ QemuInstallAcpiTable (
>>> OUT UINTN *TableKey
>>> );
>>>
>>> -BOOLEAN
>>> -XenDetected (
>>> - VOID
>>> - );
>>> -
>>> EFI_STATUS
>>> EFIAPI
>>> InstallXenTables (
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/Xen.c b/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> index 618ac58b42..7e9a7797d7 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> +++ b/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> @@ -15,8 +15,6 @@
>>> **/
>>>
>>> #include "AcpiPlatform.h"
>>> -#include <Library/HobLib.h>
>>> -#include <Guid/XenInfo.h>
>>> #include <Library/BaseLib.h>
>>>
>>> #define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020
>>> @@ -24,28 +22,6 @@
>>>
>>> EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr =
>>> NULL;
>>>
>>> -/**
>>> - This function detects if OVMF is running on Xen.
>>> -
>>> -**/
>>> -BOOLEAN
>>> -XenDetected (
>>> - VOID
>>> - )
>>> -{
>>> - EFI_HOB_GUID_TYPE *GuidHob;
>>> -
>>> - //
>>> - // See if a XenInfo HOB is available
>>> - //
>>> - GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
>>> - if (GuidHob == NULL) {
>>> - return FALSE;
>>> - }
>>> -
>>> - return TRUE;
>>> -}
>>> -
>>> /**
>>> Get the address of Xen ACPI Root System Description Pointer (RSDP)
>>> structure.
>>> @@ -66,10 +42,27 @@ GetXenAcpiRsdp (
>>> EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr;
>>> UINT8 *XenAcpiPtr;
>>> UINT8 Sum;
>>> + EFI_XEN_INFO *XenInfo;
>>>
>>> //
>>> // Detect the RSDP structure
>>> //
>>> +
>>> + //
>>> + // First look for PVH one
>>> + //
>>> + XenInfo = XenGetInfoHOB ();
>>> + ASSERT (XenInfo != NULL);
>>> + if (XenInfo->RsdpPvh != NULL) {
>>> + DEBUG ((DEBUG_INFO, "AcpiPlatformDxe: Use ACPI RSDP table at 0x%08x\n",
>>> + XenInfo->RsdpPvh));
>
> (4) sorry, missed this one: please
>
> - either print pointers with %p,
>
> - or convert them with
>
> (UINT64)(UINTN)XenInfo->RsdpPvh
>
> and log them with "0x%016Lx".
Sigh, I clearly need to cease reviewing this series for today. Here's
another remark:
(5) if you want to print the name of the module (such as
"AcpiPlatformDxe") in a log message, please use the "%a" format
specifier (for "ASCII string"), and use the following auto-generated
variable:
gEfiCallerBaseName
It will contain the BASE_NAME string from the module INF file.
This variable is particularly useful in files that are built into
multiple modules:
- for example, a module directory may contain two INF files, with
different BASE_NAMEs, and include a common .c file. If that .c file
produces log messages, gEfiCallerBaseName is helpful.
- the same applies even more to log messages generated from libraries --
you'll want to see the name of the driver or application that the
library is linked into. In that case, gEfiCallerBaseName refers to the
BASE_NAME of the driver/app INF file, and not the lib instance INF
file.
Thanks
Laszlo
>>> + *RsdpPtr = XenInfo->RsdpPvh;
>>> + return EFI_SUCCESS;
>>> + }
>>> +
>>> + //
>>> + // Otherwise, look for the HVM one
>>> + //
>>> for (XenAcpiPtr = (UINT8*)(UINTN) XEN_ACPI_PHYSICAL_ADDRESS;
>>> XenAcpiPtr < (UINT8*)(UINTN) XEN_BIOS_PHYSICAL_END;
>>> XenAcpiPtr += 0x10) {
>>>
>>
>> Can you please split this patch in two:
>>
>> (1) the first patch should only rebase AcpiPlatformDxe to the new
>> library, without functional changes.
>>
>> (2) the second patch should add the new feature, of looking for the PVH
>> RSDP.
>>
>> (3) In the 2nd patch, pls mention Xen in the subject line, such as:
>>
>> OvmfPkg/AcpiPlatformDxe: Use Xen PVH RSDP if it exist
>>
>> Thanks!
>> Laszlo
>>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |