Re: [PATCH 08/10] OvmfPkg: Update Sec to support Tdvf Config-B
On January 3, 2022 4:02 PM, Gerd Hoffmann wrote:
After carefully study the PlatformPei code and a quick PoC (PlatformInitLib which wraps the basic functions in PlatformPei), I found it's not a easy task for such a lib which can be used in both PlatformPei and Pei-less boot.PCDs cannot be set in SEC phase, so the values should be saved in aYes, I think we need a PlatformLib for the platform initialization code. With
1. PlatformInitLib should work both in SEC and PEI. So it cannot use global variables between different functions. mHostBridgeDevId and mPhysMemAddressWidth are the examples. So these variables must be provided by the caller thru the input function parameters.
2. PlatformInitLib cannot set PCDs in the code. So a Guid hob should be created to store the PCDs and pass them to DXE phase. Then these PCDs will be set at the very beginning of DXE phase.
3. The pointer to the HobList should be saved somewhere so that HobLib functions can be called in SEC phase. In my PoC it is saved in OVMF_WORK_AREA.
4. In PlatformPei there are many if-else to check if it is SMM/S3/Microvm/Cloud-Hypervisor/SEV/TDX. There are also Bhyve and Xen PlatformPei variants. In the current PlatformPei those if-else check depends on the PCDs and global variables. Because of (1) it needs input parameters for all these if-else check. Maybe a big environment variable data structure is needed.
But anyway a complete functional PlatformInitLib is a big task. My suggestion is that in TDVF-Config-B we first propose a basic functional PlatformInitLib. This lib can boot up Tdx guest and legacy OVMF guest in TDVF-Config-B. OvmfPkg/PlatformPei is not refactored by this basic PlatformInitLib this time. This is because PlatformPei serves SMM/S3/Microvm/Cloud-Hypervisor/SEV/TDX. It is a big risk for such refactor. We can revisit PlatformPei in the future.
Yes, agree.PEI-less booting up legacy guest doesn't support TPM.then jump to DxeCore.
As I explained above, a basic PlatformInitLib is the first stage and some reorganization is needed.2. PlatformPeiLib:Yes. Move code from PlatformPei to PlatformLib. Might also need some
TdxDxe.inf can set the PCDs.3. OvmfLegacyDxeWell, in Tdx mode you have to set some PCDs too ...
Do you mean "OvmfPkg/PlatformDxe/Platform.inf"? I am afraid PlatformDxe cannot do this task.
It is not in APRIORI DXE list so it cannot be guaranteed to be loaded at the very beginning of DXE phase. While some PCDs are required in the very early stage of DXE phase.
As I explained above, a basic PlatformInitLib is the first stage. There will be an advanced PlatformInitLib in the future which implements more complicated functions.I know there are many discussions in above options. Can we follow belowroad map so that we can discuss 3 (How to achieve ONE Binary) in more
Agree. We will add a CI boot test (in non-tdx mode).AmdSevX64.dsc has build-test coverage. There is no qemu boot test... and given that TDX-capableI am thinking if SEV features are covered in CI?