Can we define PAM register for CloudHv as well - DRAMC_REGISTER_Q35 (MCH_PAM0)?
@@ -77,6 +77,8 @@ STATIC PAM_REGISTER_VALUE mRegisterValuesQ35[] = { {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20} }; +STATIC PAM_REGISTER_VALUE mRegisterValuesCloudHv[] = mRegisterValuesQ35; > -----Original Message----- > From: Boeuf, Sebastien <sebastien.bo...@intel.com> > Sent: Monday, December 6, 2021 6:12 PM > To: devel@edk2.groups.io > Cc: Yao, Jiewen <jiewen....@intel.com>; Justen, Jordan L > <jordan.l.jus...@intel.com>; kra...@redhat.com; Boeuf, Sebastien > <sebastien.bo...@intel.com> > Subject: [PATCH v3 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge > > From: Sebastien Boeuf <sebastien.bo...@intel.com> > > Handle things differently when the detected host bridge matches the > Cloud Hypervisor PCI host bridge identifier. > > Signed-off-by: Rob Bradford <robert.bradf...@intel.com> > Signed-off-by: Sebastien Boeuf <sebastien.bo...@intel.com> > --- > OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c | 3 ++ > OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h | 5 +-- > OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c | 5 +++ > OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h | 1 + > OvmfPkg/Include/IndustryStandard/CloudHv.h | 35 +++++++++++++++++++ > OvmfPkg/Include/OvmfPlatforms.h | 1 + > .../Library/AcpiTimerLib/BaseAcpiTimerLib.c | 3 ++ > .../AcpiTimerLib/BaseRomAcpiTimerLib.c | 4 +++ > .../Library/AcpiTimerLib/DxeAcpiTimerLib.c | 3 ++ > .../PlatformBootManagerLib/BdsPlatform.c | 1 + > .../ResetSystemLib/BaseResetShutdown.c | 3 ++ > .../Library/ResetSystemLib/DxeResetShutdown.c | 12 +++++-- > OvmfPkg/PlatformPei/MemDetect.c | 9 ++++- > OvmfPkg/PlatformPei/Platform.c | 6 ++++ > 14 files changed, 86 insertions(+), 5 deletions(-) > create mode 100644 OvmfPkg/Include/IndustryStandard/CloudHv.h > > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > index 97ca21945f..a5680beed0 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > @@ -191,6 +191,9 @@ LegacyInterruptInstall ( > case INTEL_Q35_MCH_DEVICE_ID: > > mLegacyInterruptDevice = LEGACY_INT_DEV_Q35; > > break; > > + case CLOUDHV_DEVICE_ID: > > + mLegacyInterruptDevice = LEGACY_INT_DEV_CLOUDHV; > > + break; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h > b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h > index 1e37a41a57..3c3c635d2d 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h > @@ -22,8 +22,9 @@ > > > > > #define LEGACY_INT_BUS 0 > > -#define LEGACY_INT_DEV_PIIX4 0x01 > > -#define LEGACY_INT_DEV_Q35 0x1f > > +#define LEGACY_INT_DEV_PIIX4 0x01 > > +#define LEGACY_INT_DEV_Q35 0x1f > > +#define LEGACY_INT_DEV_CLOUDHV 0x1f > > #define LEGACY_INT_FUNC 0 > > > > #define PIRQN 0x00 // PIRQ Null > > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > index fe9ae27c9d..dd68812a9d 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > @@ -77,6 +77,8 @@ STATIC PAM_REGISTER_VALUE mRegisterValuesQ35[] = { > {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20} > > }; > > > > +STATIC PAM_REGISTER_VALUE mRegisterValuesCloudHv[] = > mRegisterValuesQ35; > > + > > STATIC PAM_REGISTER_VALUE *mRegisterValues; > > > > // > > @@ -476,6 +478,9 @@ LegacyRegionInit ( > case INTEL_Q35_MCH_DEVICE_ID: > > mRegisterValues = mRegisterValuesQ35; > > break; > > + case CLOUDHV_DEVICE_ID: > > + mRegisterValues = mRegisterValuesCloudHv; > > + break; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h > b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h > index e18cb97949..71df8f5fb2 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h > @@ -17,6 +17,7 @@ > #include <IndustryStandard/Pci.h> > > #include <IndustryStandard/Q35MchIch9.h> > > #include <IndustryStandard/I440FxPiix4.h> > > +#include <IndustryStandard/CloudHv.h> > > > > #include <Library/PciLib.h> > > #include <Library/PcdLib.h> > > diff --git a/OvmfPkg/Include/IndustryStandard/CloudHv.h > b/OvmfPkg/Include/IndustryStandard/CloudHv.h > new file mode 100644 > index 0000000000..6ab18ad50d > --- /dev/null > +++ b/OvmfPkg/Include/IndustryStandard/CloudHv.h > @@ -0,0 +1,35 @@ > +/** @file > > + Various defines related to Cloud Hypervisor > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#ifndef __CLOUDHV_H__ > > +#define __CLOUDHV_H__ > > + > > +// > > +// Host Bridge Device ID > > +// > > +#define CLOUDHV_DEVICE_ID 0x0d57 > > + > > +// > > +// ACPI timer address > > +// > > +#define CLOUDHV_ACPI_TIMER_IO_ADDRESS 0xb008 > > + > > +// > > +// ACPI shutdown device address > > +// > > +#define CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS 0x03c0 > > + > > +// > > +// 32-bit MMIO memory hole base address > > +// > > +#define CLOUDHV_MMIO_HOLE_ADDRESS 0xc0000000 > > + > > +// > > +// 32-bit MMIO memory hole size > > +// > > +#define CLOUDHV_MMIO_HOLE_SIZE 0x38000000 > > + > > +#endif // __CLOUDHV_H__ > > diff --git a/OvmfPkg/Include/OvmfPlatforms.h > b/OvmfPkg/Include/OvmfPlatforms.h > index 3b85593b70..ad0b0d2803 100644 > --- a/OvmfPkg/Include/OvmfPlatforms.h > +++ b/OvmfPkg/Include/OvmfPlatforms.h > @@ -16,6 +16,7 @@ > #include <IndustryStandard/I440FxPiix4.h> > > #include <IndustryStandard/Bhyve.h> > > #include <IndustryStandard/Microvm.h> > > +#include <IndustryStandard/CloudHv.h> > > > > // > > // OVMF Host Bridge DID Address > > diff --git a/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c > b/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c > index 7c593e8be1..e182ac2b7d 100644 > --- a/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c > +++ b/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c > @@ -55,6 +55,9 @@ AcpiTimerLibConstructor ( > AcpiCtlReg = POWER_MGMT_REGISTER_Q35 (ICH9_ACPI_CNTL); > > AcpiEnBit = ICH9_ACPI_CNTL_ACPI_EN; > > break; > > + case CLOUDHV_DEVICE_ID: > > + mAcpiTimerIoAddr = CLOUDHV_ACPI_TIMER_IO_ADDRESS; > > + return RETURN_SUCCESS; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > diff --git a/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c > b/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c > index 52f3ea2dbf..a223153b2b 100644 > --- a/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c > +++ b/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c > @@ -53,6 +53,8 @@ AcpiTimerLibConstructor ( > AcpiCtlReg = POWER_MGMT_REGISTER_Q35 (ICH9_ACPI_CNTL); > > AcpiEnBit = ICH9_ACPI_CNTL_ACPI_EN; > > break; > > + case CLOUDHV_DEVICE_ID: > > + return RETURN_SUCCESS; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > @@ -107,6 +109,8 @@ InternalAcpiGetTimerTick ( > case INTEL_Q35_MCH_DEVICE_ID: > > Pmba = POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); > > break; > > + case CLOUDHV_DEVICE_ID: > > + return IoRead32 (CLOUDHV_ACPI_TIMER_IO_ADDRESS); > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > diff --git a/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c > b/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c > index 09076c0ade..3c9efb926f 100644 > --- a/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c > +++ b/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c > @@ -50,6 +50,9 @@ AcpiTimerLibConstructor ( > case INTEL_Q35_MCH_DEVICE_ID: > > Pmba = POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); > > break; > > + case CLOUDHV_DEVICE_ID: > > + mAcpiTimerIoAddr = CLOUDHV_ACPI_TIMER_IO_ADDRESS; > > + return RETURN_SUCCESS; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, HostBridgeDevId)); > > diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c > b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c > index 186401296a..50bfb45351 100644 > --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c > +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c > @@ -1282,6 +1282,7 @@ PciAcpiInitialization ( > PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), PciHostIrqs[3]); // H > > break; > > case MICROVM_PSEUDO_DEVICE_ID: > > + case CLOUDHV_DEVICE_ID: > > return; > > default: > > if (XenDetected ()) { > > diff --git a/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c > b/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c > index 21c80e4323..ba92299a3c 100644 > --- a/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c > +++ b/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c > @@ -40,6 +40,9 @@ ResetShutdown ( > case INTEL_Q35_MCH_DEVICE_ID: > > AcpiPmBaseAddress = ICH9_PMBASE_VALUE; > > break; > > + case CLOUDHV_DEVICE_ID: > > + IoWrite8 (CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS, 5 << 2 | 1 << 5); > > + CpuDeadLoop (); > > default: > > ASSERT (FALSE); > > CpuDeadLoop (); > > diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > index 5a75c32df3..9a7f68c504 100644 > --- a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > @@ -16,6 +16,7 @@ > #include <OvmfPlatforms.h> // PIIX4_PMBA_VALUE > > > > STATIC UINT16 mAcpiPmBaseAddress; > > +STATIC UINT16 mAcpiHwReducedSleepCtl; > > > > EFI_STATUS > > EFIAPI > > @@ -34,6 +35,9 @@ DxeResetInit ( > case INTEL_Q35_MCH_DEVICE_ID: > > mAcpiPmBaseAddress = ICH9_PMBASE_VALUE; > > break; > > + case CLOUDHV_DEVICE_ID: > > + mAcpiHwReducedSleepCtl = CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS; > > + break; > > default: > > ASSERT (FALSE); > > CpuDeadLoop (); > > @@ -56,7 +60,11 @@ ResetShutdown ( > VOID > > ) > > { > > - IoBitFieldWrite16 (mAcpiPmBaseAddress + 4, 10, 13, 0); > > - IoOr16 (mAcpiPmBaseAddress + 4, BIT13); > > + if (mAcpiHwReducedSleepCtl) { > > + IoWrite8 (mAcpiHwReducedSleepCtl, 5 << 2 | 1 << 5); > > + } else { > > + IoBitFieldWrite16 (mAcpiPmBaseAddress + 4, 10, 13, 0); > > + IoOr16 (mAcpiPmBaseAddress + 4, BIT13); > > + } > > CpuDeadLoop (); > > } > > diff --git a/OvmfPkg/PlatformPei/MemDetect.c > b/OvmfPkg/PlatformPei/MemDetect.c > index d736b85e0d..38f8141a2c 100644 > --- a/OvmfPkg/PlatformPei/MemDetect.c > +++ b/OvmfPkg/PlatformPei/MemDetect.c > @@ -16,6 +16,7 @@ Module Name: > #include <IndustryStandard/E820.h> > > #include <IndustryStandard/I440FxPiix4.h> > > #include <IndustryStandard/Q35MchIch9.h> > > +#include <IndustryStandard/CloudHv.h> > > #include <PiPei.h> > > #include <Register/Intel/SmramSaveStateMap.h> > > > > @@ -152,6 +153,12 @@ QemuUc32BaseInitialization ( > return; > > } > > > > + if (mHostBridgeDevId == CLOUDHV_DEVICE_ID) { > > + Uc32Size = CLOUDHV_MMIO_HOLE_SIZE; > > + mQemuUc32Base = CLOUDHV_MMIO_HOLE_ADDRESS; > > + return; > > + } > > + > > ASSERT (mHostBridgeDevId == INTEL_82441_DEVICE_ID); > > // > > // On i440fx, start with the [LowerMemorySize, 4GB) range. Make sure one > > @@ -775,7 +782,7 @@ QemuInitializeRam ( > // practically any alignment, and we may not have enough variable MTRRs to > > // cover it exactly. > > // > > - if (IsMtrrSupported ()) { > > + if (IsMtrrSupported () && mHostBridgeDevId != CLOUDHV_DEVICE_ID) { > > MtrrGetAllMtrrs (&MtrrSettings); > > > > // > > diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c > index df2d9ad015..272cab7bcc 100644 > --- a/OvmfPkg/PlatformPei/Platform.c > +++ b/OvmfPkg/PlatformPei/Platform.c > @@ -372,6 +372,12 @@ MiscInitialization ( > MICROVM_PSEUDO_DEVICE_ID); > > ASSERT_RETURN_ERROR (PcdStatus); > > return; > > + case CLOUDHV_DEVICE_ID: > > + DEBUG ((DEBUG_INFO, "%a: Cloud Hypervisor host bridge\n", > __FUNCTION__)); > > + PcdStatus = PcdSet16S (PcdOvmfHostBridgePciDevId, > > + CLOUDHV_DEVICE_ID); > > + ASSERT_RETURN_ERROR (PcdStatus); > > + return; > > default: > > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > __FUNCTION__, mHostBridgeDevId)); > > -- > 2.30.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#84400): https://edk2.groups.io/g/devel/message/84400 Mute This Topic: https://groups.io/mt/87537174/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-