From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 6F202AC094A for ; Tue, 26 Sep 2023 03:14:41 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=wr/sVjTKO+D6tMOAdjBSC3UM2yd+83JUnFgFH3kxr64=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1695698080; v=1; b=RObhy59PbsYYA+nQkIkgILQv7OtvoYK0DLhY1arK6fdu9LR1a2vD5zgMPs55qKOifBHHhdHg oRGwJzaq53bVlptZsRZ3eHgZ4PXO2StBsz3kaCT7Tv4zQ1d4bQZvlLZI8ACQ1ReKutODQbaUfSA VSPE5tZ2qc24PJ37v/esJ0uY= X-Received: by 127.0.0.2 with SMTP id y91pYY7687511xlmw1Jhm5GE; Mon, 25 Sep 2023 20:14:40 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web11.10853.1695698079345267687 for ; Mon, 25 Sep 2023 20:14:39 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10843"; a="381376042" X-IronPort-AV: E=Sophos;i="6.03,176,1694761200"; d="scan'208";a="381376042" X-Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Sep 2023 20:14:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10843"; a="783799877" X-IronPort-AV: E=Sophos;i="6.03,176,1694761200"; d="scan'208";a="783799877" X-Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga001.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 25 Sep 2023 20:14:38 -0700 X-Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Mon, 25 Sep 2023 20:14:37 -0700 X-Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Mon, 25 Sep 2023 20:14:37 -0700 X-Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.174) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Mon, 25 Sep 2023 20:14:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LVSYjf/aHJVcCc7J3fkzJel0DqWcd+TvT4416gtM1KEevaPumESAXV5z+34nfpQiQyF0kFrZGEB3AxYIMrn+HHwY/cVL9FnBZkh+T49kOAgice232UJ8AUKjuuUV/nPF7+v7t7E/U+8PZniEJhKgBOQdoPy+f1WjnLCvomfhqUEayE9jYcEnWp9nf+2jEQCNF3sR4W+YFgFMSZy3ms4DuKxXl2AWiNuPOlITIo9S8I2m0v7mX03U0DR9GDxCxldK83HUc4BHvEInhf3WC5b2p9OHOl+J71ZKsK0hDPCqg9muuCGi5W9NkFM4EOuLk0cB6PJR4FEsIXGdPh5z6Oy6QQ== 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=ggXGeDM9YED84F57k3PMfsSZh5vism4Sp/4drWSv0Ro=; b=gyHnyWfcwffhJ4dN8YFUx9lXv4NVgjIUa6USrevl+MGE4t6mZXBBldNCA/aeyfYYbuZtH87Xda0+Az39SAYqXdZewOK076Rr9BAhSmB4xyQPZJ3gaUadO1nYVE7XznCoAqhJ8VQKE7iM00GTnMkkDliyfBw9MeJ0yenitdd5x3n3h0Y0g+/jpzgf2KfVkOBfVNIPVazjwQCx21CXaJF5A8fCZKpGp5mPNfeMF2uspt3k8qgqmGTtZXzmBq3RQW96uJbUe5sC0z83sNWg6gq6urGRfIdiX1gchjZujcq6IbkOraRxwiMHlI825dUIqmnTZlx3azBRdKCuzcdSaL9bLQ== 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 X-Received: from DM6PR11MB4025.namprd11.prod.outlook.com (2603:10b6:5:197::31) by DS0PR11MB7261.namprd11.prod.outlook.com (2603:10b6:8:13d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.28; Tue, 26 Sep 2023 03:14:27 +0000 X-Received: from DM6PR11MB4025.namprd11.prod.outlook.com ([fe80::38c3:ed7c:3562:2e18]) by DM6PR11MB4025.namprd11.prod.outlook.com ([fe80::38c3:ed7c:3562:2e18%4]) with mapi id 15.20.6813.027; Tue, 26 Sep 2023 03:14:27 +0000 From: "Wu, Hao A" To: "Cheng, Gao" , "devel@edk2.groups.io" CC: "Ni, Ray" , "Wang, Jian J" , "Gao, Liming" Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/Xhci: Skip size round up for TRB during address translation Thread-Topic: [PATCH] MdeModulePkg/Xhci: Skip size round up for TRB during address translation Thread-Index: AQHZ8B+CExsf0JGIIEKJwOfTtyjlVrAsbgrg Date: Tue, 26 Sep 2023 03:14:26 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR11MB4025:EE_|DS0PR11MB7261:EE_ x-ms-office365-filtering-correlation-id: a55ac30c-d588-4da4-bbb0-08dbbe3eb0f9 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: QyzZhpZSLnkZDFDav3XLlA/b6zkky3yGGxNt1QHsEHscSI7Dw4rNN7+EhUGWmvD8wqsTVrCkq0CiAGWrclPZSLRkL6e3rZj9g5stW8RR5UcOJtOJ/9esyXCiMP80ICnwFB4Yt72URSXyS1Rc+BugOd4anV6FO6k6SiGYO8Po601JQmk7qJPXf+kqUh6y1mAvbgZzus2HSHzZ0G7rg9Pf/OLwUsHAmANlGFl5QgcOcrRTc4uXO2Ra1h1kyXhjhbCB8YlZDstqezi/zZ4DtMwD6GSPl+q7WwdVQkSyHNCpzEhn7BtZhjXwfUb/8HYfLE3z6byrtP5aO4Yl533vZvkMKR5X2GjsTBqZhcCaPbI+eQ3sNLRJuFx1UhDOH3lobqDTTtF15CyywHLxGoT4KBzSsPbqqcs4X/N+pofB5nq4STg4QJ5qmuVLaNDna8ukcsfep9ERLZn9VvzNoM8B+0ii6WHy7RnDlImOiMwmntxZ7+/cT8KU7NThHXwks/EBZYup0W3pKl9qO+PEUN2+KFJDLd+WEJurT/vB7L9LAiMw101YTYU7KIXfSd+bT2Zpdw/dBkoZQ484rr+ZToZnZp7DTOsXC+PpGNXgBaxYKhDHODF/AGPA7Upa5GRQoaLIukiZzCGaOe4DG9y2jA7vCGFthA== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?QsiYYrk12VkBV24Bm6PW0C4+Tbm7wdw8rBkwDkH1ce0Eq+9XgMvbo2GHxcQI?= =?us-ascii?Q?dLBkv/kViwSt9+gsqdZxo27R2zcSYCXqHzBu8jGMRW9psFTKMmu5ULH2QzU9?= =?us-ascii?Q?oV3UhKBdWskS7sxCbTAmA/2uxvwc8O3GaoT9LCamVKj71h65pri2HLXR3JCV?= =?us-ascii?Q?zUqDv2Tbs8Qn3/GjTD3TIUdfb2LUMKy/aZhCqgy12gYpm9ZmaYcYWKOprCUS?= =?us-ascii?Q?JPKbPJp0tp85MvUsMjdYDvANad9SVHANb2YGCIqo6+tGCF9vZ0HXdFWHS7um?= =?us-ascii?Q?AcavS2RhnWObsD/1u7fpfSUKztuE8clvT/R29i5HeYWL7UKjfrloi1/U1kz/?= =?us-ascii?Q?paszL2QSLFFyM3NpwEs8PymTc42Ol4WIFkO4gaw+iUl663BHwVEoiYvBHcQH?= =?us-ascii?Q?xwjTglBqeL/iOcJfyXgpk6qTQXNF5Yu6q/a/WCvsfecUxT3FRRJxBHs28U7b?= =?us-ascii?Q?ljrN6DsAIqxEv/KlX2aZRa3eydbctDFEj8Jds41nxP8O2AKEYCoVzcBig+WE?= =?us-ascii?Q?mtwXbsQJ6QNi2rK3GRYdwm8IShrqfoo0vIl6Wy87nszLIeO9B7JrDmFAd9f1?= =?us-ascii?Q?gZs6C0UVzMnwf8WUNAmshv+g4CsVSi71lWSPi7j6GpyoPzXqmbb73CxmTVRJ?= =?us-ascii?Q?o3f5LevHqoGepPbY7R1V6I9ccod2suT20mwFETvqb2aQUOa06HLVUevYgNDx?= =?us-ascii?Q?jsc4gUFhFykXUOTGuTAxeuloeE+KDQ1U+XMnGQeUy5T9AY7LMLa4vQ3cjaf4?= =?us-ascii?Q?ZVKLkfoC95g0VFxF4/ROgyhqJ1qVzE029WD8oIjRUJt+qi5gqq6OedW78AQw?= =?us-ascii?Q?VdD+CAtTAh40EXJ61KVRjkP5Upymlj4LaUKBz+ZJc3Ixal3Hu9ZjZ0V7o8kI?= =?us-ascii?Q?KOtuVkcmb2UeE5cRQTGbMlqJMmkR5BJUsB239kV8VRkAsWfNoYKd0WK4ll1V?= =?us-ascii?Q?mw6qjvoPCR75VVfSFvn98bNmOArAb4i2DG/vAgtAmMXM199x7/Lg85jRyPfS?= =?us-ascii?Q?amJ/2zVZ/J8jyT8sVH/1ZudlitWQu5JLy6JY2XyLVF4YzvkQ+ZbwQ0RzWl2E?= =?us-ascii?Q?25Kf1QcacyA0Xeolh08dAS1xNFzuEhifRMra1sybn3dS/C1WKh/Z0xCscMZl?= =?us-ascii?Q?h6fksliP5MiHEMaSlS2/JXVi/b8pZQPBqY86FBFVik1e1ncPOZg/DEmmIHmQ?= =?us-ascii?Q?1mRC8bfpVrlO5HbPLwRlLyToRSwTeuSkQzA8IyGpQVai3CkWpnpMxKLHwvfj?= =?us-ascii?Q?NW4wbUdGlk/WSfizQlC/YOo0MOCQoN5/2KajtEC4yIcmWjrg68mQD87LG46j?= =?us-ascii?Q?1RzLV5+h5+tE6f40imSud+evlrFE9D64353uwqUq/tWOQe6fj+pmtmyt2L9A?= =?us-ascii?Q?vOj2XzaJv61lXX5jSZzhJZTIRLtbAxV2VchGEC54gjjuORuqvnCvrqJYnmgY?= =?us-ascii?Q?6X+l3mFt7GuGeZzHFd8wqlPbSAPF/gPnAm+vCwxNo34MMMNPU0lTaKmK7GSH?= =?us-ascii?Q?NQc9KEXWcwsnrayx7P/snJGmWM4R/iDPie/O0id6ju8nzfFbLyneV9KM2qZ7?= =?us-ascii?Q?/o8wiNV1Swnitb8DtQKeQmZYvFWymttJps8R5BGZ?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4025.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a55ac30c-d588-4da4-bbb0-08dbbe3eb0f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Sep 2023 03:14:26.9332 (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: RN/TZFW8vZMHeEgHAFvL2fp5wmf/kDfCbyBp5Nkq7gsI0HA+EEkra2JmbE5ZyWrdaDGtbzarVS/f5A6YFG5mqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR11MB7261 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,hao.a.wu@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: UZa9ej3lBH2i5TkQB4XZC2ayx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=RObhy59P; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:dns request to arcselector9901._domainkey.microsoft.com failed: no records with this name}"); dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io The proposed patch failed some CI tests. Details can be referred at: https://github.com/tianocore/edk2/pull/4866. Co= uld you help to resolve them? Please help to follow the step 11 in page: https://github.com/tianocore/tia= nocore.github.io/wiki/EDK-II-Development-Process and check the CI test resu= lts for the upcoming patch? Best Regards, Hao Wu > -----Original Message----- > From: Cheng, Gao > Sent: Tuesday, September 26, 2023 10:12 AM > To: devel@edk2.groups.io > Cc: Cheng, Gao ; Wu, Hao A ; > Ni, Ray ; Wang, Jian J ; Gao, > Liming > Subject: [PATCH] MdeModulePkg/Xhci: Skip size round up for TRB during > address translation >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D4560 >=20 > TRB Template is 16 bytes. When boundary checking is 64 bytes for xHCI > device/host memory address, it may exceed xHCI host memory pool and > cause unwanted DXE_ASSERT. Introduce a new input parameter to indicate > whether to enforce 64byte size alignment and round up. For TRB case, > should set it to FALSE to skip the size round up. >=20 > Signed-off-by: Gao Cheng > Cc: Hao A Wu > Cc: Ray Ni > Cc: Jian J Wang > Cc: Liming Gao > --- > MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.c | 20 +++++++-- > MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.h | 8 +++- > MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c | 54 +++++++++++++----------- > MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.c | 20 +++++++-- > MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.h | 8 +++- > MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c | 48 +++++++++++---------- > 6 files changed, 99 insertions(+), 59 deletions(-) >=20 > diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.c > b/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.c > index d0ad1582e4..8fea441fbc 100644 > --- a/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.c > +++ b/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.c > @@ -226,6 +226,7 @@ UsbHcAllocMemFromBlock ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to host memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The pci memory address >=20 > @@ -234,7 +235,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetPciAddrForHostAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ) > { > USBHC_MEM_BLOCK *Head; > @@ -244,7 +246,11 @@ UsbHcGetPciAddrForHostAddr ( > UINTN Offset; >=20 > Head =3D Pool->Head; > - AllocSize =3D USBHC_MEM_ROUND (Size); > + if (Alignment) { > + AllocSize =3D USBHC_MEM_ROUND (Size); > + } else { > + AllocSize =3D Size; > + } >=20 > if (Mem =3D=3D NULL) { > return 0; > @@ -275,6 +281,7 @@ UsbHcGetPciAddrForHostAddr ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to pci memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The host memory address >=20 > @@ -283,7 +290,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetHostAddrForPciAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ) > { > USBHC_MEM_BLOCK *Head; > @@ -293,7 +301,11 @@ UsbHcGetHostAddrForPciAddr ( > UINTN Offset; >=20 > Head =3D Pool->Head; > - AllocSize =3D USBHC_MEM_ROUND (Size); > + if (Alignment) { > + AllocSize =3D USBHC_MEM_ROUND (Size); > + } else { > + AllocSize =3D Size; > + } >=20 > if (Mem =3D=3D NULL) { > return 0; > diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.h > b/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.h > index c85b0b919f..b21bf9da3e 100644 > --- a/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.h > +++ b/MdeModulePkg/Bus/Pci/XhciDxe/UsbHcMem.h > @@ -129,6 +129,7 @@ UsbHcFreeMem ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to host memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The pci memory address >=20 > @@ -137,7 +138,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetPciAddrForHostAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ); >=20 > /** > @@ -146,6 +148,7 @@ UsbHcGetPciAddrForHostAddr ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to pci memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The host memory address >=20 > @@ -154,7 +157,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetHostAddrForPciAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ); >=20 > /** > diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > index 53421e64a8..c2be171780 100644 > --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > @@ -588,7 +588,7 @@ XhcInitSched ( > // Some 3rd party XHCI external cards don't support single 64-bytes wi= dth > register access, > // So divide it to two 32-bytes width register access. > // > - DcbaaPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Dcbaa, Entries)= ; > + DcbaaPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Dcbaa, Entries, > TRUE); > XhcWriteOpReg (Xhc, XHC_DCBAAP_OFFSET, XHC_LOW_32BIT (DcbaaPhy)); > XhcWriteOpReg (Xhc, XHC_DCBAAP_OFFSET + 4, XHC_HIGH_32BIT > (DcbaaPhy)); >=20 > @@ -607,7 +607,7 @@ XhcInitSched ( > // So we set RCS as inverted PCS init value to let Command Ring empty > // > CmdRing =3D (UINT64)(UINTN)Xhc->CmdRing.RingSeg0; > - CmdRingPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, (VOID > *)(UINTN)CmdRing, sizeof (TRB_TEMPLATE) * CMD_RING_TRB_NUMBER); > + CmdRingPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, (VOID > *)(UINTN)CmdRing, sizeof (TRB_TEMPLATE) * CMD_RING_TRB_NUMBER, > TRUE); > ASSERT ((CmdRingPhy & 0x3F) =3D=3D 0); > CmdRingPhy |=3D XHC_CRCR_RCS; > // > @@ -809,7 +809,7 @@ CreateEventRing ( > EventRing->EventRingDequeue =3D (TRB_TEMPLATE *)EventRing- > >EventRingSeg0; > EventRing->EventRingEnqueue =3D (TRB_TEMPLATE *)EventRing- > >EventRingSeg0; >=20 > - DequeuePhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size); > + DequeuePhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size, > TRUE); >=20 > // > // Software maintains an Event Ring Consumer Cycle State (CCS) bit, > initializing it to '1' > @@ -829,7 +829,7 @@ CreateEventRing ( > ERSTBase->PtrHi =3D XHC_HIGH_32BIT (DequeuePhy); > ERSTBase->RingTrbSize =3D EVENT_RING_TRB_NUMBER; >=20 > - ERSTPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, ERSTBase, Size); > + ERSTPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, ERSTBase, Size, > TRUE); >=20 > // > // Program the Interrupter Event Ring Segment Table Size (ERSTSZ) regi= ster > (5.5.2.3.1) > @@ -913,7 +913,7 @@ CreateTransferRing ( > // > EndTrb =3D (LINK_TRB *)((UINTN)Buf + sizeof (TRB_TEMPLATE) * (T= rbNum > - 1)); > EndTrb->Type =3D TRB_TYPE_LINK; > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, sizeo= f > (TRB_TEMPLATE) * TrbNum); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, sizeo= f > (TRB_TEMPLATE) * TrbNum, TRUE); > EndTrb->PtrLo =3D XHC_LOW_32BIT (PhyAddr); > EndTrb->PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > // > @@ -1045,7 +1045,7 @@ IsTransferRingTrb ( > if (CheckedTrb->Type =3D=3D TRB_TYPE_LINK) { > LinkTrb =3D (LINK_TRB *)CheckedTrb; > PhyAddr =3D (EFI_PHYSICAL_ADDRESS)(LinkTrb->PtrLo | LShiftU64 > ((UINT64)LinkTrb->PtrHi, 32)); > - CheckedTrb =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr > (Xhc->MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE)); > + CheckedTrb =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr > (Xhc->MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE), FALSE); > ASSERT (CheckedTrb =3D=3D Urb->Ring->RingSeg0); > } > } > @@ -1154,7 +1154,7 @@ XhcCheckUrbResult ( > // Need convert pci device address to host address > // > PhyAddr =3D (EFI_PHYSICAL_ADDRESS)(EvtTrb->TRBPtrLo | LShiftU64 > ((UINT64)EvtTrb->TRBPtrHi, 32)); > - TRBPtr =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr (Xhc- > >MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE)); > + TRBPtr =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr (Xhc- > >MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE), FALSE); >=20 > // > // Update the status of URB including the pending URB, the URB that = is > currently checked, > @@ -1259,7 +1259,7 @@ EXIT: > High =3D XhcReadRuntimeReg (Xhc, XHC_ERDP_OFFSET + 4); > XhcDequeue =3D (UINT64)(LShiftU64 ((UINT64)High, 32) | Low); >=20 > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >EventRing.EventRingDequeue, sizeof (TRB_TEMPLATE)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >EventRing.EventRingDequeue, sizeof (TRB_TEMPLATE), FALSE); >=20 > if ((XhcDequeue & (~0x0F)) !=3D (PhyAddr & (~0x0F))) { > // > @@ -2280,7 +2280,8 @@ XhcInitializeDeviceSlot ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[0])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > InputContext->EP[0].PtrLo =3D XHC_LOW_32BIT (PhyAddr) | BIT0; > InputContext->EP[0].PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > @@ -2298,7 +2299,7 @@ XhcInitializeDeviceSlot ( > // 7) Load the appropriate (Device Slot ID) entry in the Device Contex= t Base > Address Array (5.4.6) with > // a pointer to the Output Device Context data structure (6.2.1). > // > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT), TRUE); > // > // Fill DCBAA with PCI device address > // > @@ -2313,7 +2314,7 @@ XhcInitializeDeviceSlot ( > // > gBS->Stall (XHC_RESET_RECOVERY_DELAY); > ZeroMem (&CmdTrbAddr, sizeof (CmdTrbAddr)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbAddr.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbAddr.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbAddr.CycleBit =3D 1; > @@ -2496,7 +2497,8 @@ XhcInitializeDeviceSlot64 ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[0])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > InputContext->EP[0].PtrLo =3D XHC_LOW_32BIT (PhyAddr) | BIT0; > InputContext->EP[0].PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > @@ -2514,7 +2516,7 @@ XhcInitializeDeviceSlot64 ( > // 7) Load the appropriate (Device Slot ID) entry in the Device Contex= t Base > Address Array (5.4.6) with > // a pointer to the Output Device Context data structure (6.2.1). > // > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT_64), TRUE); > // > // Fill DCBAA with PCI device address > // > @@ -2529,7 +2531,7 @@ XhcInitializeDeviceSlot64 ( > // > gBS->Stall (XHC_RESET_RECOVERY_DELAY); > ZeroMem (&CmdTrbAddr, sizeof (CmdTrbAddr)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbAddr.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbAddr.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbAddr.CycleBit =3D 1; > @@ -2964,7 +2966,8 @@ XhcInitializeEndpointContext ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[Dci-1])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > PhyAddr &=3D ~((EFI_PHYSICAL_ADDRESS)0x0F); > PhyAddr |=3D (EFI_PHYSICAL_ADDRESS)((TRANSFER_R= ING > *)(UINTN)Xhc->UsbDevContext[SlotId].EndpointTransferRing[Dci-1])- > >RingPCS; > @@ -3166,7 +3169,8 @@ XhcInitializeEndpointContext64 ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[Dci-1])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > PhyAddr &=3D ~((EFI_PHYSICAL_ADDRESS)0x0F); > PhyAddr |=3D (EFI_PHYSICAL_ADDRESS)((TRANSFER_R= ING > *)(UINTN)Xhc->UsbDevContext[SlotId].EndpointTransferRing[Dci-1])- > >RingPCS; > @@ -3248,7 +3252,7 @@ XhcSetConfigCmd ( > // configure endpoint > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -3339,7 +3343,7 @@ XhcSetConfigCmd64 ( > // configure endpoint > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -3513,7 +3517,7 @@ XhcSetTrDequeuePointer ( > // Send stop endpoint command to transit Endpoint from running to stop > state > // > ZeroMem (&CmdSetTRDeq, sizeof (CmdSetTRDeq)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Urb= - > >Ring->RingEnqueue, sizeof (CMD_SET_TR_DEQ_POINTER)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Urb= - > >Ring->RingEnqueue, sizeof (CMD_SET_TR_DEQ_POINTER), TRUE); > CmdSetTRDeq.PtrLo =3D XHC_LOW_32BIT (PhyAddr) | Urb->Ring->RingPCS; > CmdSetTRDeq.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdSetTRDeq.CycleBit =3D 1; > @@ -3713,7 +3717,7 @@ XhcSetInterface ( > // 5) Issue and successfully complete a Configure Endpoint Command. > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -3919,7 +3923,7 @@ XhcSetInterface64 ( > // 5) Issue and successfully complete a Configure Endpoint Command. > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -3986,7 +3990,7 @@ XhcEvaluateContext ( > InputContext->EP[0].EPState =3D 0; >=20 > ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbEvalu.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbEvalu.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbEvalu.CycleBit =3D 1; > @@ -4047,7 +4051,7 @@ XhcEvaluateContext64 ( > InputContext->EP[0].EPState =3D 0; >=20 > ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbEvalu.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbEvalu.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbEvalu.CycleBit =3D 1; > @@ -4116,7 +4120,7 @@ XhcConfigHubContext ( > InputContext->Slot.MTT =3D MTT; >=20 > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -4185,7 +4189,7 @@ XhcConfigHubContext64 ( > InputContext->Slot.MTT =3D MTT; >=20 > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > diff --git a/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.c > b/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.c > index e779a31138..e9cf53b122 100644 > --- a/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.c > +++ b/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.c > @@ -190,6 +190,7 @@ UsbHcAllocMemFromBlock ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to host memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The pci memory address >=20 > @@ -198,7 +199,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetPciAddrForHostAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ) > { > USBHC_MEM_BLOCK *Head; > @@ -208,7 +210,11 @@ UsbHcGetPciAddrForHostAddr ( > UINTN Offset; >=20 > Head =3D Pool->Head; > - AllocSize =3D USBHC_MEM_ROUND (Size); > + if (Alignment) { > + AllocSize =3D USBHC_MEM_ROUND (Size); > + } else { > + AllocSize =3D Size; > + } >=20 > if (Mem =3D=3D NULL) { > return 0; > @@ -239,6 +245,7 @@ UsbHcGetPciAddrForHostAddr ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to pci memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The host memory address >=20 > @@ -247,7 +254,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetHostAddrForPciAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ) > { > USBHC_MEM_BLOCK *Head; > @@ -257,7 +265,11 @@ UsbHcGetHostAddrForPciAddr ( > UINTN Offset; >=20 > Head =3D Pool->Head; > - AllocSize =3D USBHC_MEM_ROUND (Size); > + if (Alignment) { > + AllocSize =3D USBHC_MEM_ROUND (Size); > + } else { > + AllocSize =3D Size; > + } >=20 > if (Mem =3D=3D NULL) { > return 0; > diff --git a/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.h > b/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.h > index 2b4c8b19fc..8f760e084e 100644 > --- a/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.h > +++ b/MdeModulePkg/Bus/Pci/XhciPei/UsbHcMem.h > @@ -68,6 +68,7 @@ typedef struct _USBHC_MEM_POOL { > @param Pool The memory pool of the host controller. > @param Mem The pointer to host memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The pci memory address >=20 > @@ -76,7 +77,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetPciAddrForHostAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ); >=20 > /** > @@ -85,6 +87,7 @@ UsbHcGetPciAddrForHostAddr ( > @param Pool The memory pool of the host controller. > @param Mem The pointer to pci memory. > @param Size The size of the memory region. > + @param Alignment Alignment the size to USBHC_MEM_UNIT bytes. >=20 > @return The host memory address >=20 > @@ -93,7 +96,8 @@ EFI_PHYSICAL_ADDRESS > UsbHcGetHostAddrForPciAddr ( > IN USBHC_MEM_POOL *Pool, > IN VOID *Mem, > - IN UINTN Size > + IN UINTN Size, > + IN BOOLEAN Alignment > ); >=20 > /** > diff --git a/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c > b/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c > index 8400c90f7a..53272f62dd 100644 > --- a/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c > +++ b/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c > @@ -675,7 +675,7 @@ XhcPeiCheckUrbResult ( > // Need convert pci device address to host address > // > PhyAddr =3D (EFI_PHYSICAL_ADDRESS)(EvtTrb->TRBPtrLo | LShiftU64 > ((UINT64)EvtTrb->TRBPtrHi, 32)); > - TRBPtr =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr (Xhc- > >MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE)); > + TRBPtr =3D (TRB_TEMPLATE *)(UINTN)UsbHcGetHostAddrForPciAddr (Xhc- > >MemPool, (VOID *)(UINTN)PhyAddr, sizeof (TRB_TEMPLATE), FALSE); >=20 > // > // Update the status of Urb according to the finished event regardle= ss of > whether > @@ -766,7 +766,7 @@ EXIT: > High =3D XhcPeiReadRuntimeReg (Xhc, XHC_ERDP_OFFSET + 4); > XhcDequeue =3D (UINT64)(LShiftU64 ((UINT64)High, 32) | Low); >=20 > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >EventRing.EventRingDequeue, sizeof (TRB_TEMPLATE)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >EventRing.EventRingDequeue, sizeof (TRB_TEMPLATE), FALSE); >=20 > if ((XhcDequeue & (~0x0F)) !=3D (PhyAddr & (~0x0F))) { > // > @@ -1213,7 +1213,8 @@ XhcPeiInitializeDeviceSlot ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[0])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > InputContext->EP[0].PtrLo =3D XHC_LOW_32BIT (PhyAddr) | BIT0; > InputContext->EP[0].PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > @@ -1231,7 +1232,7 @@ XhcPeiInitializeDeviceSlot ( > // 7) Load the appropriate (Device Slot ID) entry in the Device Contex= t Base > Address Array (5.4.6) with > // a pointer to the Output Device Context data structure (6.2.1). > // > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT), TRUE); > // > // Fill DCBAA with PCI device address > // > @@ -1246,7 +1247,7 @@ XhcPeiInitializeDeviceSlot ( > // > MicroSecondDelay (XHC_RESET_RECOVERY_DELAY); > ZeroMem (&CmdTrbAddr, sizeof (CmdTrbAddr)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbAddr.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbAddr.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbAddr.CycleBit =3D 1; > @@ -1427,7 +1428,8 @@ XhcPeiInitializeDeviceSlot64 ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[0])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > InputContext->EP[0].PtrLo =3D XHC_LOW_32BIT (PhyAddr) | BIT0; > InputContext->EP[0].PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > @@ -1445,7 +1447,7 @@ XhcPeiInitializeDeviceSlot64 ( > // 7) Load the appropriate (Device Slot ID) entry in the Device Contex= t Base > Address Array (5.4.6) with > // a pointer to the Output Device Context data structure (6.2.1). > // > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, OutputContext, > sizeof (DEVICE_CONTEXT_64), TRUE); > // > // Fill DCBAA with PCI device address > // > @@ -1460,7 +1462,7 @@ XhcPeiInitializeDeviceSlot64 ( > // > MicroSecondDelay (XHC_RESET_RECOVERY_DELAY); > ZeroMem (&CmdTrbAddr, sizeof (CmdTrbAddr)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >UsbDevContext[SlotId].InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbAddr.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbAddr.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbAddr.CycleBit =3D 1; > @@ -1882,7 +1884,8 @@ XhcPeiSetConfigCmd ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[Dci-1])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); > PhyAddr &=3D ~((EFI_PHYSICAL_ADDRESS)0x0F); > PhyAddr |=3D (EFI_PHYSICAL_ADDRESS)((TRANSFER= _RING > *)(UINTN)Xhc->UsbDevContext[SlotId].EndpointTransferRing[Dci-1])- > >RingPCS; > @@ -1901,7 +1904,7 @@ XhcPeiSetConfigCmd ( > // configure endpoint > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -2108,7 +2111,8 @@ XhcPeiSetConfigCmd64 ( > PhyAddr =3D UsbHcGetPciAddrForHostAddr ( > Xhc->MemPool, > ((TRANSFER_RING *)(UINTN)Xhc- > >UsbDevContext[SlotId].EndpointTransferRing[Dci-1])->RingSeg0, > - sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER > + sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER, > + TRUE > ); >=20 > PhyAddr &=3D ~((EFI_PHYSICAL_ADDRESS)0x0F); > @@ -2129,7 +2133,7 @@ XhcPeiSetConfigCmd64 ( > // configure endpoint > // > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -2184,7 +2188,7 @@ XhcPeiEvaluateContext ( > InputContext->EP[0].MaxPacketSize =3D MaxPacketSize; >=20 > ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbEvalu.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbEvalu.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbEvalu.CycleBit =3D 1; > @@ -2239,7 +2243,7 @@ XhcPeiEvaluateContext64 ( > InputContext->EP[0].MaxPacketSize =3D MaxPacketSize; >=20 > ZeroMem (&CmdTrbEvalu, sizeof (CmdTrbEvalu)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbEvalu.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbEvalu.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbEvalu.CycleBit =3D 1; > @@ -2308,7 +2312,7 @@ XhcPeiConfigHubContext ( > InputContext->Slot.MTT =3D MTT; >=20 > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -2377,7 +2381,7 @@ XhcPeiConfigHubContext64 ( > InputContext->Slot.MTT =3D MTT; >=20 > ZeroMem (&CmdTrbCfgEP, sizeof (CmdTrbCfgEP)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, > InputContext, sizeof (INPUT_CONTEXT_64), TRUE); > CmdTrbCfgEP.PtrLo =3D XHC_LOW_32BIT (PhyAddr); > CmdTrbCfgEP.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdTrbCfgEP.CycleBit =3D 1; > @@ -2522,7 +2526,7 @@ XhcPeiSetTrDequeuePointer ( > // Send stop endpoint command to transit Endpoint from running to stop > state > // > ZeroMem (&CmdSetTRDeq, sizeof (CmdSetTRDeq)); > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Urb= - > >Ring->RingEnqueue, sizeof (CMD_SET_TR_DEQ_POINTER)); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Urb= - > >Ring->RingEnqueue, sizeof (CMD_SET_TR_DEQ_POINTER), TRUE); > CmdSetTRDeq.PtrLo =3D XHC_LOW_32BIT (PhyAddr) | Urb->Ring->RingPCS; > CmdSetTRDeq.PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > CmdSetTRDeq.CycleBit =3D 1; > @@ -2682,7 +2686,7 @@ XhcPeiCreateEventRing ( > ASSERT (((UINTN)Buf & 0x3F) =3D=3D 0); > ZeroMem (Buf, Size); >=20 > - DequeuePhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size); > + DequeuePhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size, > TRUE); >=20 > EventRing->EventRingSeg0 =3D Buf; > EventRing->TrbNumber =3D EVENT_RING_TRB_NUMBER; > @@ -2707,7 +2711,7 @@ XhcPeiCreateEventRing ( > ERSTBase->PtrHi =3D XHC_HIGH_32BIT (DequeuePhy); > ERSTBase->RingTrbSize =3D EVENT_RING_TRB_NUMBER; >=20 > - ERSTPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size); > + ERSTPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, Size, TRUE)= ; >=20 > // > // Program the Interrupter Event Ring Segment Table Size (ERSTSZ) regi= ster > (5.5.2.3.1) > @@ -2855,7 +2859,7 @@ XhcPeiCreateTransferRing ( > // > EndTrb =3D (LINK_TRB *)((UINTN)Buf + sizeof (TRB_TEMPLATE) * (T= rbNum > - 1)); > EndTrb->Type =3D TRB_TYPE_LINK; > - PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, sizeo= f > (TRB_TEMPLATE) * TrbNum); > + PhyAddr =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Buf, sizeo= f > (TRB_TEMPLATE) * TrbNum, TRUE); > EndTrb->PtrLo =3D XHC_LOW_32BIT (PhyAddr); > EndTrb->PtrHi =3D XHC_HIGH_32BIT (PhyAddr); > // > @@ -2988,7 +2992,7 @@ XhcPeiInitSched ( > // Some 3rd party XHCI external cards don't support single 64-bytes wi= dth > register access, > // So divide it to two 32-bytes width register access. > // > - DcbaaPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Dcbaa, Size); > + DcbaaPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Dcbaa, Size, > TRUE); > XhcPeiWriteOpReg (Xhc, XHC_DCBAAP_OFFSET, XHC_LOW_32BIT > (DcbaaPhy)); > XhcPeiWriteOpReg (Xhc, XHC_DCBAAP_OFFSET + 4, XHC_HIGH_32BIT > (DcbaaPhy)); >=20 > @@ -3006,7 +3010,7 @@ XhcPeiInitSched ( > // Transfer Ring it checks for a Cycle bit transition. If a transition= detected, > the ring is empty. > // So we set RCS as inverted PCS init value to let Command Ring empty > // > - CmdRingPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >CmdRing.RingSeg0, sizeof (TRB_TEMPLATE) * CMD_RING_TRB_NUMBER); > + CmdRingPhy =3D UsbHcGetPciAddrForHostAddr (Xhc->MemPool, Xhc- > >CmdRing.RingSeg0, sizeof (TRB_TEMPLATE) * CMD_RING_TRB_NUMBER, > TRUE); > ASSERT ((CmdRingPhy & 0x3F) =3D=3D 0); > CmdRingPhy |=3D XHC_CRCR_RCS; > // > -- > 2.42.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109058): https://edk2.groups.io/g/devel/message/109058 Mute This Topic: https://groups.io/mt/101588610/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-