OK. Let me describe what I think. PCI Express BAR need to be initialized by someone in the platform. This initialization may require CFG8. That is understandable.
A good design is that: After the PCIE BAR is initialized, it can be accessed. Requires additional step (such as clear C-bit) means the PCIE BAR is not fully initialized originally. I don't think it is a good idea. So far, the problem is TdxDxe, but what if a PEI driver also wants to use access PCIE space? It may run into same problem. I think the best way is to clear C-bit in PciExBarInitialization(), as SEV specific step to finish initialization. https://github.com/tianocore/edk2/blob/master/OvmfPkg/Library/PlatformInitLib/Platform.c#L261 As such, no matter how many drivers want to use PCIE, they can. Splitting PCIE bar programming and C bit clearing is a big problem. In this window, no one can actually touch the PCIE bar, although it seems being initialized... Thank you Yao Jiewen > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Yao, Jiewen > Sent: Tuesday, April 19, 2022 12:47 PM > To: Xu, Min M <min.m...@intel.com>; devel@edk2.groups.io > Cc: Brijesh Singh <brijesh.si...@amd.com>; Aktas, Erdem > <erdemak...@google.com>; James Bottomley <j...@linux.ibm.com>; Tom > Lendacky <thomas.lenda...@amd.com> > Subject: Re: [edk2-devel] [PATCH] OvmfPkg: Set PciLib for TdxDxe driver > > Can SEV clear the C-bit in SEC phase? > > I think that is right way to ensure PCI Express can always be accessed by > anyone. > > > > -----Original Message----- > > From: Xu, Min M <min.m...@intel.com> > > Sent: Tuesday, April 19, 2022 12:39 PM > > To: Yao, Jiewen <jiewen....@intel.com>; devel@edk2.groups.io > > Cc: Brijesh Singh <brijesh.si...@amd.com>; Aktas, Erdem > > <erdemak...@google.com>; James Bottomley <j...@linux.ibm.com>; Tom > > Lendacky <thomas.lenda...@amd.com> > > Subject: RE: [edk2-devel] [PATCH] OvmfPkg: Set PciLib for TdxDxe driver > > > > In AmdSevDxe's entry point it clears the C-bit from PcdPciExpressBaseAddress > > and other memory spaces if needed. Please see > > > https://github.com/tianocore/edk2/blob/master/OvmfPkg/AmdSevDxe/AmdSev > > Dxe.c#L81-L95. After that OVMF can use PCI express. > > > > This broken is caused by the call sequence of TdxDxe driver and AmdSevDxe > > driver. Currently TdxDxe driver is loaded before AmdSevDxe, so in SEV-ES > > guest > > the C-bit of PcdPciExpressBaseAddress hasn't been cleared. In this situation > the > > access to PciExpressBaseAddress trigger exceptions (lib constructor in > > TdxDxe). > > > > There are 2 options to fix this issue. > > 1. Adjust the load sequence of AmdSevDxe and TdxDxe (Load AmdSevDxe > before > > TdxDxe) > > 2. Make TdxDxe to import BasePciLibCf8.inf instead of DxePciLibI440FxQ35.inf > > (just like AmdSevDxe) > > > > Tom and I tested above 2 options in SEV and TDX and all work. > > > > > -----Original Message----- > > > From: Yao, Jiewen <jiewen....@intel.com> > > > Sent: Tuesday, April 19, 2022 12:16 PM > > > To: Xu, Min M <min.m...@intel.com>; devel@edk2.groups.io > > > Cc: Brijesh Singh <brijesh.si...@amd.com>; Aktas, Erdem > > > <erdemak...@google.com>; James Bottomley <j...@linux.ibm.com>; Tom > > > Lendacky <thomas.lenda...@amd.com> > > > Subject: RE: [edk2-devel] [PATCH] OvmfPkg: Set PciLib for TdxDxe driver > > > > > > Do you mean, with SEV introduced, OVMF cannot use PCI express any more? > > > > > > Thank you > > > Yao Jiewen > > > > > > > > > > -----Original Message----- > > > > From: Xu, Min M <min.m...@intel.com> > > > > Sent: Tuesday, April 19, 2022 11:05 AM > > > > To: Yao, Jiewen <jiewen....@intel.com>; devel@edk2.groups.io > > > > Cc: Brijesh Singh <brijesh.si...@amd.com>; Aktas, Erdem > > > > <erdemak...@google.com>; James Bottomley <j...@linux.ibm.com>; > Tom > > > > Lendacky <thomas.lenda...@amd.com> > > > > Subject: RE: [edk2-devel] [PATCH] OvmfPkg: Set PciLib for TdxDxe > > > > driver > > > > > > > > On April 19, 2022 10:54 AM, Yao Jiewen wrote: > > > > > > > > > > Why does TdxDxe call TdxMailbox in an SEV platform? > > > > > Or why does TdxMailbox call SynchronizationLib in an SEV platform? > > > > > > > > > TdxDxe will not call TdxMailbox/SynchronizationLib in SEV platform. > > > > The problem is in the lib constructor. When TdxDxe driver is loaded, > > > > before its entry point is called, the lib constructors will be called > > > > even in a > > > SEV platform. > > > > > > > > > > There are many places we can do CcProbe to stop action. Why we need > > > > > do it in DSC? > > > > So we cannot stop the lib constructor with CcProbe in this case. > > > > > > > > Thanks > > > > Min > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#89053): https://edk2.groups.io/g/devel/message/89053 Mute This Topic: https://groups.io/mt/90554139/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-