From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web12.50621.1638792624712448139 for ; Mon, 06 Dec 2021 04:10:25 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=nGd4NLaT; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: jiewen.yao@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10189"; a="236038795" X-IronPort-AV: E=Sophos;i="5.87,291,1631602800"; d="scan'208";a="236038795" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Dec 2021 04:10:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,291,1631602800"; d="scan'208";a="562742061" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga008.fm.intel.com with ESMTP; 06 Dec 2021 04:10:23 -0800 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) 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; Mon, 6 Dec 2021 04:10:23 -0800 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 6 Dec 2021 04:10:22 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Mon, 6 Dec 2021 04:10:22 -0800 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.46) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Mon, 6 Dec 2021 04:10:22 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YaFFWca1bNWD0lasAX1tkM5rD5tmFNdXP0kv0GXd2VhEGO0jRPXbtcdRplFeUaJdPNadT3v0tMW/7HKjGVIXoi97ue6BUE5tQsbYLAc+tX2fqeZcIOxhefrD7rM1j2a9JgxdBUbzGsLaUASP4YaD6wZCiH9SWBLy/h0wIGwJ24BzFDeAa8qdyho1jnkfElwc9QZ/NeNfuhBU6vlaK1O4jYA+8IHzhaB1QyLvql05Ow60/tbgpu2C+4vJO8Gg7HvDqNlluvfdpfipG9VTyyL/hlphVmSXcVTV5Z8eRyetZApCIWgCiat5nH9qI7GIYwpBVFz8bzS3Vm6algNf/ybqUQ== 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=zzHBJ2CTFNgHU56axyz+4zHFh7u2HPHWaL9QdIKrC/I=; b=QyGss2ewi/l7OpqkcTCibDXsY7GO1xtmX1Nnqa/sFXC0dWrirf6ZqWfrdo2yK8XXY7mqMq+wjZtgqSQs+1Gz1pjDIdr5vVsSmt09H1UcrEBBfBVIVy/b6BHDgkQVTKaFEjV+6tfB7I6UGvqmbFaeV8fwyTGfUT27PrdeOuOX8z8PtGbgcgbm9Yc/DLdFJl3VjXMCv3hHmQ5Nrz+ofwT3lMkJi0EVM7UrcgAyT00mwky9oyu0Mwy54FCZgDPfMeoRj+gOi35vLJh69DRvBefMR7g/wpv2e7P1ISp4rRzzM8QfcUsaD3hv+bQ2N+ZevX74A6bSvXQOHYpjCO6dbHamXg== 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=zzHBJ2CTFNgHU56axyz+4zHFh7u2HPHWaL9QdIKrC/I=; b=nGd4NLaTRvC4bDkMTovu6aPW/e3+Qf63zWd3ivpoVi9OtvL8wEKIE/xm4Vgdj3StMhTfAW0qtJCFMLRpj2+EBBMPms0o2zckfDvcW3MB/KhPDAqPqntqP6PVajvoC+cbsrXX551oY/kvRMOyyt1fUrPEuivI3DMV7tg8g7Ie2Sk= Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by CO1PR11MB5156.namprd11.prod.outlook.com (2603:10b6:303:95::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Mon, 6 Dec 2021 12:10:20 +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; Mon, 6 Dec 2021 12:10:20 +0000 From: "Yao, Jiewen" To: "Boeuf, Sebastien" , "devel@edk2.groups.io" CC: "Justen, Jordan L" , "kraxel@redhat.com" Subject: Re: [PATCH v3 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge Thread-Topic: [PATCH v3 1/5] OvmfPkg: Handle Cloud Hypervisor host bridge Thread-Index: AQHX6onYV2KHcrHTZU6jlD+OmJsSdKwlXzUQ Date: Mon, 6 Dec 2021 12:10:20 +0000 Message-ID: References: In-Reply-To: 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: 733e0369-c7fd-499a-73df-08d9b8b15fce x-ms-traffictypediagnostic: CO1PR11MB5156:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: QPLNzdOGBPe2OWL16zh8xyElSyqvPkCsWaaLw3W3j7UmAWdT2w3MBgxnediHCOlB/1WnFbt4GWoTd1JkFNeUE3MzWMEWEVuT/jXeSN4acNAt4qXp/wYoEOUmKd3puWswCkvkKQ6RtFnmuq4Lug6ST2nmVku/+tvw00zjNN6nQpVBsyZoZQtvGEvgO9Z3XYuOSoC5bSWKtOYGoxi/WidhnpjGO5aaTsl5M4/+MmjnFu7qFUAnEmc9a42By19naMa/71XSJT+a7eq69Q/zAGu5gcNCwngmc4/0WMq1VBhEWXIAZ8rlZVxe3dj1qujYlr3Bd+lXDaHYSZ2TaDSWhqiNSPxHiVR53jvA5vFLfh+ZxovAfBP+tTFsvaZQeZ+1OfhcpKOzAMV1nS3CPFM6VHoBC0jCTKP1M4Jgk0OAJ0BWNncuvlXYaCvN2z+5AkJa5fzByNk1o/aWq9xuYHI3n6g+C8WoCbs5Uk2foROeaylFto/JMPJlR4ENLZW97z+sRug9lpWLZoWE/XjNESdQEQmqu45dKVsf974zFahpps021mA5mVK/tq+huZCDY2ouscmQ5SCsU1Hy9OKXYCk6AY2ptzSknuVgAlEx9+Rt7m6NockCPnJD7BmZUZyv/L4qthz9RrzxAuSGf9Mff9ytmD/xpaxWelXIvmmJlCml4Jkz1+oICEwWFXjjXqqvC8tivRnWnMU4OR8kfw373V2/j5XvMA== 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)(52536014)(82960400001)(19627235002)(55016003)(5660300002)(30864003)(9686003)(2906002)(186003)(508600001)(110136005)(7696005)(53546011)(6506007)(66556008)(64756008)(66476007)(66446008)(316002)(8676002)(122000001)(26005)(8936002)(76116006)(66946007)(83380400001)(4326008)(71200400001)(54906003)(33656002)(38070700005)(86362001)(38100700002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?VBuYIfCPPflB0u87L/sr6K45vZ9vR9MLDCu9c9NxdXcgAATShwdbv817wWaR?= =?us-ascii?Q?GTWOv+J8+HtsVBFTA5ll4GgyzbRgczX+PI1qxyETalMcekGw4G5iJtNcUOvk?= =?us-ascii?Q?kTHUW1PjId6EptUpRngMBAT8mPwSy+dCrepgWwKkBdEbP+pAHL/AhWQWRqi6?= =?us-ascii?Q?rp7x6UYiZUYzhzS15l09cenyDPGOMx6Bqux5GTbI6YBpkrsrHuYA3TsPMRO4?= =?us-ascii?Q?fHUUfHhILj/ucP2u8RzkKwoeo+22LAa/Vn6oChzjYRch2Z+hocj+S0Zbj0RF?= =?us-ascii?Q?T0lmIaIIche4T75yAvmSV/3sIip32m43m6pFdNc9zyBmHtSyq5l+iC4R++Fg?= =?us-ascii?Q?OmOFNLGT1JQv91DCc4gw9X8/bwKa4CgqCkFi7M01bfrwCP/Rbbn5M72jtEaE?= =?us-ascii?Q?TT2HAqhd4EVhFc4THocNJXuq7maStoCbK+39tA5D0ABir3VGaLdauGToHzA0?= =?us-ascii?Q?iAD65sVNF5l8ouhAskSl10hcCfoT6P/Tyj/5ASahR1GUlUDU/Tf+l/NKxQCu?= =?us-ascii?Q?fVtBEaEQa/O9UObisAAV8oehGumwI5eR8iZ0LB/6YdAgUdAOsWjzomb9zId9?= =?us-ascii?Q?7bP3+rHu64HjYeXcQIT1tZzIxP8XP66cVuAfEaTkyCrTkgEKhsyX2rWIeMJD?= =?us-ascii?Q?Yqbmqk9Tn4CJVCHfXeQ5wrV8k80ZPFdhpCYj0KDhc8fbySOFYWdGyU/MPLYJ?= =?us-ascii?Q?lSs2aHFIfPkUaVpeFjbDh9QsQiQ4jcfTbIodvGxd1rFgZQ+GX3490wUUms5g?= =?us-ascii?Q?fs90hMXsOSWerxx0cmwyRgjP6D86VlF6uBf6rMO8ReK6c+qt8hsJGy0vfAq3?= =?us-ascii?Q?0DSNhPGDjBuU46lyAvU7BxMNT1UNEI8UaOXyQXGnXyDkVxeAuUiU2ynswqDB?= =?us-ascii?Q?T913DPXi2uJHxawbENDgY90aK8jzyC7IgwzZkE+5ABxiMifnRn/Ve+3E/IT8?= =?us-ascii?Q?BmvBHqmEsUXT8ClTS788/vqaRmD8fTCWM86GnONXLff5NOlQ2zBqI7aKxJNt?= =?us-ascii?Q?nrBq/I58+VgPaAbmHYMEuFWo3r3QXA1uepq61thzfMKDiCOcOUnA/ZAR3lB1?= =?us-ascii?Q?ecWDnHi4r+5Wqzl009mOgyYYxBBWCbGCCiqlD0OPt1TiMtBo37sj9QOqUOsY?= =?us-ascii?Q?k9a9uD/a6Ua90cHaLcKRqOvtCy0gNyaP2VS6Zj9GJ5rIMhhmtvdeJCHzbh9t?= =?us-ascii?Q?BmRXlcEv5PILNaXJXt9znJ9/g360b3rQ9r7hSC0VrJbeCM0Lmx04C2tz2M9X?= =?us-ascii?Q?Ago0PGO6MahDRFWHcMlKRqEHHSS6jsU1iu4ZqeL/jAluRLeOG4Qr+OsDNzgM?= =?us-ascii?Q?G+XVVnspPkL4Zp7kOSZ2DTcdP6yUk+ZYfyW9Ua34T9hAFzEWRJKtTDX/Yp9X?= =?us-ascii?Q?VFS0hIfR7unEJEzNe0g88VPpwrcplHWZAed+KADknWpHm02ZiXSkTHkNAWPq?= =?us-ascii?Q?4HQ6DkGLiLv5IcCDAFyVugd3XsWmnwVlXInXsS2spnqzsyVxzQCxgEnUbP3D?= =?us-ascii?Q?OOtX3vQEJyVO0WLd8DIy9Ac0Ra2khnClnM7v+cYAA3+RuTuRFANiEQSBgqwA?= =?us-ascii?Q?u4pwSStkvZs7vfDzdXEf3Rul7Jjwjt7byMDflU72WtiFpkO/dNDXHFfpIUND?= =?us-ascii?Q?Qr8ww2j2YjIRvQ+zaAdClcw=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: 733e0369-c7fd-499a-73df-08d9b8b15fce X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Dec 2021 12:10:20.5096 (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: fexBLjpl9iOdw56CZXil98/RPKtGTiCOSN/MWnP0S6pX8kHd4KI1zR1BR2RCBs/guO2s9d0HdjJRoE7NMXBa4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB5156 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 Can we define PAM register for CloudHv as well - DRAMC_REGISTER_Q35 (MCH_PA= M0)? @@ -77,6 +77,8 @@ STATIC PAM_REGISTER_VALUE mRegisterValuesQ35[] =3D { {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20} }; +STATIC PAM_REGISTER_VALUE mRegisterValuesCloudHv[] =3D mRegisterValuesQ35= ; > -----Original Message----- > From: Boeuf, Sebastien > Sent: Monday, December 6, 2021 6:12 PM > To: devel@edk2.groups.io > Cc: Yao, Jiewen ; Justen, Jordan L > ; kraxel@redhat.com; Boeuf, Sebastien > > Subject: [PATCH v3 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 | 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 >=20 > 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: >=20 > mLegacyInterruptDevice =3D LEGACY_INT_DEV_Q35; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + mLegacyInterruptDevice =3D LEGACY_INT_DEV_CLOUDHV; >=20 > + break; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n"= , >=20 > __FUNCTION__, HostBridgeDevId)); >=20 > 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 @@ >=20 >=20 >=20 >=20 > #define LEGACY_INT_BUS 0 >=20 > -#define LEGACY_INT_DEV_PIIX4 0x01 >=20 > -#define LEGACY_INT_DEV_Q35 0x1f >=20 > +#define LEGACY_INT_DEV_PIIX4 0x01 >=20 > +#define LEGACY_INT_DEV_Q35 0x1f >=20 > +#define LEGACY_INT_DEV_CLOUDHV 0x1f >=20 > #define LEGACY_INT_FUNC 0 >=20 >=20 >=20 > #define PIRQN 0x00 // PIRQ Null >=20 > 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[] =3D { > {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20} >=20 > }; >=20 >=20 >=20 > +STATIC PAM_REGISTER_VALUE mRegisterValuesCloudHv[] =3D > mRegisterValuesQ35; >=20 > + >=20 > STATIC PAM_REGISTER_VALUE *mRegisterValues; >=20 >=20 >=20 > // >=20 > @@ -476,6 +478,9 @@ LegacyRegionInit ( > case INTEL_Q35_MCH_DEVICE_ID: >=20 > mRegisterValues =3D mRegisterValuesQ35; >=20 > break; >=20 > + case CLOUDHV_DEVICE_ID: >=20 > + mRegisterValues =3D mRegisterValuesCloudHv; >=20 > + break; >=20 > default: >=20 > DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", >=20 > __FUNCTION__, HostBridgeDevId)); >=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..9a7f68c504 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 > @@ -34,6 +35,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 +60,11 @@ ResetShutdown ( > VOID >=20 > ) >=20 > { >=20 > - IoBitFieldWrite16 (mAcpiPmBaseAddress + 4, 10, 13, 0); >=20 > - IoOr16 (mAcpiPmBaseAddress + 4, BIT13); >=20 > + if (mAcpiHwReducedSleepCtl) { >=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