From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web12.33296.1638671071888914753 for ; Sat, 04 Dec 2021 18:24:32 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=ROTW5zn+; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: jiewen.yao@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10188"; a="237097895" X-IronPort-AV: E=Sophos;i="5.87,288,1631602800"; d="scan'208";a="237097895" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2021 18:24:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,288,1631602800"; d="scan'208";a="578882947" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga004.fm.intel.com with ESMTP; 04 Dec 2021 18:24:30 -0800 Received: from orsmsx606.amr.corp.intel.com (10.22.229.19) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sat, 4 Dec 2021 18:24:30 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Sat, 4 Dec 2021 18:24:30 -0800 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.42) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Sat, 4 Dec 2021 18:24:29 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iZ2Mv8aQOxOcAT/53tI58XZJaGaJHUfjsuh63HC/CLidretZdci1oJ5ksW9ssw/9W2RhRs7T49v39hF6u1Po1EnUL/7jak0igrkRKNs1CBNzkHooi8T82WxBG2t6j+rFe0puKVV+XD+5uiJf0Ex21++BS7cDqPOAbOHko0SHlUkO/3biXUbbeY+vGHggVTYv5S9uNB4AgofZkz3koutvcF9HQdA25gAkpsjeXQ0wiueek/KJHzFyTnnKxAgN10xSF8aIVfOr5FsFNC8hLFy1EtqTrw8RmBzGAmICpkuDBfQT/Y3/o1hrHhwhocssSbe5Qg8O8XprEBzTj5xQfi/wPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kqOaiYP+T6HibCQgLZGFkq6VDWwP5oIyM5bOKE9A9Uw=; b=Bc+dvDCB1F6y/TxWUi6suh26Fwp6/vzoq7CQsWYVRBqjZ/c+50hMvEeyU/n0Z8PuQsWKf+sWX7QSyZBtM2lT3NlMRc6Sf3DpaYExyZQPji2B4UiRY816xgVYOWIbGoaMSAgKHD1yR9kSqSifhKqYWHVqEv7z0GhCAFPIezwgJBxLSlT6BKIEt1qdd/6Rm1Yo3kHuWq2gsLViFAuJNMgpFxa/Krn9DYHFGnIjdCHVoEAH6gTzfHw3nN9OMMkSDJ1bYJ4OAWpfpi5y3THDZerq8apPkDLwY4XBgcbB/npj2Uito3nFbLxFEZ5ttwErEEZJuXV77WYQ3BJfihdVpC0aCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kqOaiYP+T6HibCQgLZGFkq6VDWwP5oIyM5bOKE9A9Uw=; b=ROTW5zn+c652uHa0GdTspCOewl9cPvPGLQ8lGEyzY4h1Gac60XC3usGJRdcXZ7r2DRrAZxMhAh8s+j3d6kqSZMYnEYhmDIZ4KvHsYXbY5GEEfy6+B7rPUsqQzlNmOmqSQfFqp1jHHMIcYD7DBamXx/RyhCnec+G8xMdTGy0D9Eg= Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by MWHPR11MB1615.namprd11.prod.outlook.com (2603:10b6:301:c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Sun, 5 Dec 2021 02:24:27 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::1d07:d296:b2c7:7114]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::1d07:d296:b2c7:7114%6]) with mapi id 15.20.4755.019; Sun, 5 Dec 2021 02:24:27 +0000 From: "Yao, Jiewen" To: "Boeuf, Sebastien" , "devel@edk2.groups.io" CC: "Justen, Jordan L" , "kraxel@redhat.com" Subject: Re: [PATCH v2 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge Thread-Topic: [PATCH v2 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge Thread-Index: AQHX6WGhzjMxMj3yDUqi/JYDlueyhawjKEtA Date: Sun, 5 Dec 2021 02:24:27 +0000 Message-ID: References: <2368c18ff5330c5ebab8ff0857823749299d8211.1638658097.git.sebastien.boeuf@intel.com> In-Reply-To: <2368c18ff5330c5ebab8ff0857823749299d8211.1638658097.git.sebastien.boeuf@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.200.16 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e805fc7e-e257-4fcf-7125-08d9b7965cb7 x-ms-traffictypediagnostic: MWHPR11MB1615: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cfVCKvJoH8fctK4VQqFYKvCsdaNMdi2bMYJsenpPA65eFhIRzxdzcpDmyIoTDnElftPttfHhAraLXTQ17DJUsRlsDyoctp6tWXu/e5Yej0SYnPWlpHWEhb2HHQOBnVtxkcucuiT6XaaQw32s593o2ugdM9wCaSy8a0rUdHtHLBJDG7sOaTmvLmFL0Cbq85n/IaOw85dOAXu2G/qSzOSX2sZzOTkw73yp+Adgg0119RfqKWNdhRV7i0U/ES8Od7Pixgn1QXIU9CWkngSGZjh0Cauz0h4Km/6ILIPpIUmlouuW7/5nSRZn/7jixB+3/N5ky5Z+9S/fBJDd1vKaaDksE+q+lD6THk8iXBUZSxDOsAmu43vzFXuYLEqySMT4MSBf63oTQRZbBsEK+dvqnZsPiqC41f+GbwI0zdezyBPNBXG3Gf85fAlwWcmUSvnCsEXkv8xCLnZpNu+4H/M5bCrA12Zbxu5PDTVlWfZsp5rZeI7bwyC4u5Iox4S4MSxsIkQx88PJ/J3JMwmAbUO2nkVNY/ES8mHbPBBPPUfraWNMXA9/H9RWRApRjePpt2ldFCcTPwQv++aYDL+uKjWene2Z/DAdZa1zOauZu98xI4A8HpOzyFHXtoCr6HJYT5p2b7//OUtTXO5/GHMMPAr7w58rs296fLma9vtM0iEBmPC7x6rM8BpEhFGQ9xEF5O/tPfaWSdtbZHIm8RUQT2c6e2uhrw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(33656002)(86362001)(5660300002)(66556008)(66946007)(9686003)(64756008)(4326008)(26005)(110136005)(122000001)(30864003)(66446008)(6506007)(19627235002)(38100700002)(38070700005)(53546011)(52536014)(82960400001)(8936002)(508600001)(7696005)(8676002)(66476007)(54906003)(55016003)(186003)(2906002)(71200400001)(83380400001)(76116006);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?3T/fEcpuRO/kLwAwrE2k7Juj9OCvbWH511Iipe9uPDaJjva5Ny62RS6OffUF?= =?us-ascii?Q?f+61j9rHRFNy5s5fx4laUGsL7SBXZXNBL2tn28fPs0uvZvSPo/LCLOsKZKqe?= =?us-ascii?Q?yR3FdqCzdafQ+kSEDP6I01YboXgoM291jftyjPqWYnSUxUWFDGgUeq4N8vbw?= =?us-ascii?Q?0PcvEPJlvPVt/MPIIKjj9JqQ64SP/bmSkofat4qfIMqAieXIphcSx5SZBB/s?= =?us-ascii?Q?lLJqO8hcdY1VBTU6+Q5dgm24fQEJKh749syR+jLyyUqaT2PbtPFeAqhifnbn?= =?us-ascii?Q?zUDCsMXVksJCIk/xRofY437YtKFuqleCRT/RfvzemxG7fVvq0MhgkYFvB5Em?= =?us-ascii?Q?8pCk60mkQPTuVPSff+ZWa5zJMQK3LorOkHIOh14Cg8KYiXQTfKhAhg6N+kAC?= =?us-ascii?Q?JPLTV14/pvWflZ1f2hNUMrbiUTEyHINe19aUyVg8Pt1UqVEjoSeFoGqRByEv?= =?us-ascii?Q?+Ye0MRUaqTFDvhbUZ/yRh6BrsSer4pMqF9wA0AqXNh/Ys0kVLV0M9nyflyF1?= =?us-ascii?Q?9zVUPVP/N7DUwUeXdr8WqINvZ5kRkhsnQVXyh6kPaBeSCsv+FvT/m9tx0kf4?= =?us-ascii?Q?LoXWP8V/WAg4N1OVDbLKSB1WKV9EGwkL7/RiH30+2CBFm8OwjyDGR2QIAeH5?= =?us-ascii?Q?GYYUsZXlzWee7IfLmULwJPgTd5LtDpa7WnOFeDbs97c20750sCPv4rn6SpJq?= =?us-ascii?Q?/MAcRjMUp7nrb8TMxyE9se2KDrv24TN0elYe5XvTMp7c/Hx6dYZ6N6qxNJ06?= =?us-ascii?Q?7azRDnoRWpHZ5YmTbrfLTRvveUm2M227dtZ8n5JGM4Y3uMiCQe8U1rBeOxID?= =?us-ascii?Q?UkTMXORY04MnawzkjxP/MC+gQQPy0JLmhY3rt3U4WhSowC9/YoTE5xiyeuii?= =?us-ascii?Q?Pse9Z/RyrGaw8qjwUEPyN4ku1T43L/CA6F/wMmsTnbDji5crsR7c2oAjHCWC?= =?us-ascii?Q?EBwKliZA+FZmms15YG4gxSfUT6uM7tyA9vbP1XApzE/nupCThqVfnV0N/XU0?= =?us-ascii?Q?wHLyASr5E54T9jRHEWh2LQPfU/b6qN4QKrJa38jxrugTmPQG8mSAX52cU3wk?= =?us-ascii?Q?kOoOnuQxGfsvGPBhojnXsMCGOAWuFmmNxoqgKidB0wWa5yziL04Dt35HKef8?= =?us-ascii?Q?K+FDtsh7kqvMPiPvIngbM8wl6IGAqTtcQMekVQSUNcQFkx+5HguTwTV8J5Ap?= =?us-ascii?Q?PXU0yHbJWfGFQxyLKW8iOjTacE9cNIPD/JUF8hSQONw9+CdAbzY+F7fE7/Tn?= =?us-ascii?Q?DNKfSgnYLZPpI6nWBcWwJfsRknNAI5qMh+uLOfMkMtes2FzAUfUF5yeF5Okn?= =?us-ascii?Q?JHL6p4oc1x2MxZMaPxXLfd/OPxt6k7glcFRi6C3G1KwoVS7nGKdmF9L0MUUS?= =?us-ascii?Q?z0tSe3CR+6sxA5OLL3CoJXrLJaFCFP5V7qYTRIRHL3+4hz2/mjnLd82MDI0e?= =?us-ascii?Q?4gBTN3flSP8ef3PAI0KVJ3AzQcQKqrVdgSB89PoImI8gn9+oXOts5WGvKSlA?= =?us-ascii?Q?0CYY7Ayd+XZu95wzghSc2bf0nuiMelma05YAeFit5aGOLdA989TcLv4LkmH3?= =?us-ascii?Q?ObCbMNBQ41nN6ccULtBusrAsVVRv2gAK3Nw9EGgcKXZg6gr4owbdOW7XNfSE?= =?us-ascii?Q?idvaTf7rnifb4zRGfANugzw=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e805fc7e-e257-4fcf-7125-08d9b7965cb7 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2021 02:24:27.7482 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tstXwVe7IBgKiUKJmWfU3Ld7kZMn09bW1TKmChHuZU8ga+/Yp28WUB/zdjOa3y2MhGRgiwHjqoL0w6za+uKHYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1615 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Is below code right? + case CLOUDHV_DEVICE_ID: mRegisterValues =3D mRegisterValuesQ35; + case CLOUDHV_DEVICE_ID: mLegacyInterruptDevice =3D LEGACY_INT_DEV_Q35; I am not sure if it is the best pattern to describe which register is reuse= d from Q35, and which one is CV specific. Maybe just redefine all set of registers, even the value is same ? Thank you Yao Jiewen > -----Original Message----- > From: Boeuf, Sebastien > Sent: Sunday, December 5, 2021 6:52 AM > To: devel@edk2.groups.io > Cc: Yao, Jiewen ; Justen, Jordan L > ; kraxel@redhat.com; Boeuf, Sebastien > > Subject: [PATCH v2 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge >=20 > From: Sebastien Boeuf >=20 > Handle things differently when the detected host bridge matches the > Cloud Hypervisor PCI host bridge identifier. >=20 > Signed-off-by: Rob Bradford > Signed-off-by: Sebastien Boeuf > --- > OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c | 1 + > OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c | 1 + > 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 | 13 +++++-- > OvmfPkg/PlatformPei/MemDetect.c | 9 ++++- > OvmfPkg/PlatformPei/Platform.c | 6 ++++ > 13 files changed, 78 insertions(+), 3 deletions(-) > create mode 100644 OvmfPkg/Include/IndustryStandard/CloudHv.h >=20 > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > index 97ca21945f..0cd4f903cf 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c > @@ -189,6 +189,7 @@ LegacyInterruptInstall ( > mLegacyInterruptDevice =3D LEGACY_INT_DEV_PIIX4; >=20 > break; >=20 > case INTEL_Q35_MCH_DEVICE_ID: >=20 > + case CLOUDHV_DEVICE_ID: >=20 > mLegacyInterruptDevice =3D LEGACY_INT_DEV_Q35; >=20 > break; >=20 > default: >=20 > diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > index fe9ae27c9d..ce6134cfad 100644 > --- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c > @@ -474,6 +474,7 @@ LegacyRegionInit ( > mRegisterValues =3D mRegisterValues440; >=20 > break; >=20 > case INTEL_Q35_MCH_DEVICE_ID: >=20 > + case CLOUDHV_DEVICE_ID: >=20 > mRegisterValues =3D mRegisterValuesQ35; >=20 > break; >=20 > default: >=20 > 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 >=20 > #include >=20 > #include >=20 > +#include >=20 >=20 >=20 > #include >=20 > #include >=20 > 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 >=20 > + Various defines related to Cloud Hypervisor >=20 > + >=20 > + SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > + >=20 > +**/ >=20 > +#ifndef __CLOUDHV_H__ >=20 > +#define __CLOUDHV_H__ >=20 > + >=20 > +// >=20 > +// Host Bridge Device ID >=20 > +// >=20 > +#define CLOUDHV_DEVICE_ID 0x0d57 >=20 > + >=20 > +// >=20 > +// ACPI timer address >=20 > +// >=20 > +#define CLOUDHV_ACPI_TIMER_IO_ADDRESS 0xb008 >=20 > + >=20 > +// >=20 > +// ACPI shutdown device address >=20 > +// >=20 > +#define CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS 0x03c0 >=20 > + >=20 > +// >=20 > +// 32-bit MMIO memory hole base address >=20 > +// >=20 > +#define CLOUDHV_MMIO_HOLE_ADDRESS 0xc0000000 >=20 > + >=20 > +// >=20 > +// 32-bit MMIO memory hole size >=20 > +// >=20 > +#define CLOUDHV_MMIO_HOLE_SIZE 0x38000000 >=20 > + >=20 > +#endif // __CLOUDHV_H__ >=20 > 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 >=20 > #include >=20 > #include >=20 > +#include >=20 >=20 >=20 > // >=20 > // OVMF Host Bridge DID Address >=20 > 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 =3D POWER_MGMT_REGISTER_Q35 (ICH9_ACPI_CNTL); >=20 > AcpiEnBit =3D ICH9_ACPI_CNTL_ACPI_EN; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + mAcpiTimerIoAddr =3D CLOUDHV_ACPI_TIMER_IO_ADDRESS; >=20 > + return RETURN_SUCCESS; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, HostBridgeDevId)); >=20 > 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 =3D POWER_MGMT_REGISTER_Q35 (ICH9_ACPI_CNTL); >=20 > AcpiEnBit =3D ICH9_ACPI_CNTL_ACPI_EN; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + return RETURN_SUCCESS; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, HostBridgeDevId)); >=20 > @@ -107,6 +109,8 @@ InternalAcpiGetTimerTick ( > case INTEL_Q35_MCH_DEVICE_ID: >=20 > Pmba =3D POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + return IoRead32 (CLOUDHV_ACPI_TIMER_IO_ADDRESS); >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, HostBridgeDevId)); >=20 > 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: >=20 > Pmba =3D POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + mAcpiTimerIoAddr =3D CLOUDHV_ACPI_TIMER_IO_ADDRESS; >=20 > + return RETURN_SUCCESS; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, HostBridgeDevId)); >=20 > 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 >=20 > break; >=20 > case MICROVM_PSEUDO_DEVICE_ID: >=20 > + case CLOUDHV_DEVICE_ID: >=20 > return; >=20 > default: >=20 > if (XenDetected ()) { >=20 > 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: >=20 > AcpiPmBaseAddress =3D ICH9_PMBASE_VALUE; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + IoWrite8 (CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS, 5 << 2 | 1 << 5); >=20 > + CpuDeadLoop (); >=20 > default: >=20 > ASSERT (FALSE); >=20 > CpuDeadLoop (); >=20 > diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > index 5a75c32df3..8df52dbc21 100644 > --- a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c > @@ -16,6 +16,7 @@ > #include // PIIX4_PMBA_VALUE >=20 >=20 >=20 > STATIC UINT16 mAcpiPmBaseAddress; >=20 > +STATIC UINT16 mAcpiHwReducedSleepCtl; >=20 >=20 >=20 > EFI_STATUS >=20 > EFIAPI >=20 > @@ -26,6 +27,7 @@ DxeResetInit ( > { >=20 > UINT16 HostBridgeDevId; >=20 >=20 >=20 > + mAcpiPmBaseAddress =3D 0; >=20 > HostBridgeDevId =3D PcdGet16 (PcdOvmfHostBridgePciDevId); >=20 > switch (HostBridgeDevId) { >=20 > case INTEL_82441_DEVICE_ID: >=20 > @@ -34,6 +36,9 @@ DxeResetInit ( > case INTEL_Q35_MCH_DEVICE_ID: >=20 > mAcpiPmBaseAddress =3D ICH9_PMBASE_VALUE; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + mAcpiHwReducedSleepCtl =3D CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS; >=20 > + break; >=20 > default: >=20 > ASSERT (FALSE); >=20 > CpuDeadLoop (); >=20 > @@ -56,7 +61,11 @@ ResetShutdown ( > VOID >=20 > ) >=20 > { >=20 > - IoBitFieldWrite16 (mAcpiPmBaseAddress + 4, 10, 13, 0); >=20 > - IoOr16 (mAcpiPmBaseAddress + 4, BIT13); >=20 > + if (mAcpiPmBaseAddress =3D=3D 0) { >=20 > + IoWrite8 (mAcpiHwReducedSleepCtl, 5 << 2 | 1 << 5); >=20 > + } else { >=20 > + IoBitFieldWrite16 (mAcpiPmBaseAddress + 4, 10, 13, 0); >=20 > + IoOr16 (mAcpiPmBaseAddress + 4, BIT13); >=20 > + } >=20 > CpuDeadLoop (); >=20 > } >=20 > 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 >=20 > #include >=20 > #include >=20 > +#include >=20 > #include >=20 > #include >=20 >=20 >=20 > @@ -152,6 +153,12 @@ QemuUc32BaseInitialization ( > return; >=20 > } >=20 >=20 >=20 > + if (mHostBridgeDevId =3D=3D CLOUDHV_DEVICE_ID) { >=20 > + Uc32Size =3D CLOUDHV_MMIO_HOLE_SIZE; >=20 > + mQemuUc32Base =3D CLOUDHV_MMIO_HOLE_ADDRESS; >=20 > + return; >=20 > + } >=20 > + >=20 > ASSERT (mHostBridgeDevId =3D=3D INTEL_82441_DEVICE_ID); >=20 > // >=20 > // On i440fx, start with the [LowerMemorySize, 4GB) range. Make sure o= ne >=20 > @@ -775,7 +782,7 @@ QemuInitializeRam ( > // practically any alignment, and we may not have enough variable MTRR= s to >=20 > // cover it exactly. >=20 > // >=20 > - if (IsMtrrSupported ()) { >=20 > + if (IsMtrrSupported () && mHostBridgeDevId !=3D CLOUDHV_DEVICE_ID) { >=20 > MtrrGetAllMtrrs (&MtrrSettings); >=20 >=20 >=20 > // >=20 > diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platfor= m.c > index df2d9ad015..272cab7bcc 100644 > --- a/OvmfPkg/PlatformPei/Platform.c > +++ b/OvmfPkg/PlatformPei/Platform.c > @@ -372,6 +372,12 @@ MiscInitialization ( > MICROVM_PSEUDO_DEVICE_ID); >=20 > ASSERT_RETURN_ERROR (PcdStatus); >=20 > return; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + DEBUG ((DEBUG_INFO, "%a: Cloud Hypervisor host bridge\n", > __FUNCTION__)); >=20 > + PcdStatus =3D PcdSet16S (PcdOvmfHostBridgePciDevId, >=20 > + CLOUDHV_DEVICE_ID); >=20 > + ASSERT_RETURN_ERROR (PcdStatus); >=20 > + return; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, mHostBridgeDevId)); >=20 > -- > 2.30.2