From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web12.4752.1659072533710983954 for ; Thu, 28 Jul 2022 22:28:53 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Qw3LHl8x; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1659072533; x=1690608533; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=1rZQyyuGl/XIur6+d2WsleRZHEdRXjTKRVJ4yzkcuj4=; b=Qw3LHl8xi/tBPANB/J5j5UP0LBorXszpMbdpfglHd3jVCVt+XE8wo7uJ Vnv1IJtMRZmMvPjdUYmK6/MpQU901dePIx4Vjdyy1V4sY6rePrmWaV7zG MaLL4N2iPclwDxkSvE/Osfyp1EA3FsDN6Ii5IZSGfIqtX+2LmU16KAyhq OhYJ4SJlYZ1Ijrmhs+LkgWblQCNrI3QUz+cyvr2fN1dAdGl83+aqw19s0 1WdubkC7XB9LsQJnqVIJ0xwMzSZt8JVfSmjFi4ojSrM7xgXhBtuBTZKmX jNLX6zPiTLm2KftoOE3qqCCgF+h79Tj7VJ4Ld4yQP9XHDWDtgcAtIob01 A==; X-IronPort-AV: E=McAfee;i="6400,9594,10422"; a="374996888" X-IronPort-AV: E=Sophos;i="5.93,200,1654585200"; d="scan'208";a="374996888" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2022 22:28:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,200,1654585200"; d="scan'208";a="629238839" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga008.jf.intel.com with ESMTP; 28 Jul 2022 22:28:51 -0700 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Thu, 28 Jul 2022 22:28:51 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28 via Frontend Transport; Thu, 28 Jul 2022 22:28:51 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.28; Thu, 28 Jul 2022 22:28:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qrg+GZ8GtzCJRBSc3zC85vgSg3RqtXlb9PIgau9FJexMpy7XRplhlDN27nzf/WrcukYIp3fEVamYJBKyT0I4gebAnGYTK1IDmGwqOk5ckjoRKZLIzvjtsTieI+XxZtb6LvyJWH7ZwJC3Mhjbh+PMaIuVBIY6hA2TzDWbfliNM9ZSeOUeiZ0Y3LdrIdmNWSmbIpxl9kPK4TtwgodN21jUr3QzIe81tfFf3W1N6mLc47C2dlwnQC0IECTH9jGzWpgVbGF3WHWGnDj6cNIzZIR7yP1cQ+xYlIeaFKibxAf64HpP0s6uyIguS73Q0WmMW18WZgT1ny98FtTQX7pMB/b8Bg== 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=5OvxCVdh0u72gUIwhLZSKVdOKp4kdi+Tnvgv5oy5CSE=; b=frq1RmiO3GsHjJA+FfnVB2zhLiFGIegPciRYISGOhaWgZ1H9hNqLBDQL4wlNYhdISXwXpM/Xm+/SxFpYRJn3+6JXou/SJLYZMP6F3CtCRMCPHyL40sc6a+zrgnFtHfBlZYAV+UJAR+G8gvP08IHur5SEf+Bqf/Bnymc5mFmI/SzRvdIc4KxB2l7xmPsVKKj5oerXSSOu8qOg+QiUf7YA74hppV7ptEfqi3uZxAvkoByqCDSuXDsFB7kwpIvFGLApSjIlP594oUU+r2speR6YxXuIePwWSu4hGk31fsYxtdrQcnHs5+opvLgWH0rdkN7WBwgxpfw6bR3BBc4IA+qyaw== 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 Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by DM5PR1101MB2297.namprd11.prod.outlook.com (2603:10b6:4:54::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.6; Fri, 29 Jul 2022 05:28:47 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::fd61:b244:d8fb:ab1d]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::fd61:b244:d8fb:ab1d%5]) with mapi id 15.20.5482.011; Fri, 29 Jul 2022 05:28:47 +0000 From: "Yao, Jiewen" To: "Zhang, Qi1" , "devel@edk2.groups.io" CC: "Wang, Jian J" , "Patil, Swapnil" Subject: Re: [PATCH v4] SecurityPkg: Add retry mechanism for tpm command Thread-Topic: [PATCH v4] SecurityPkg: Add retry mechanism for tpm command Thread-Index: AQHYovKdQlOs2I/HC0Gg5ZwtN0XCY62U0jNQ Date: Fri, 29 Jul 2022 05:28:47 +0000 Message-ID: References: <20220729022620.1786-1-qi1.zhang@intel.com> In-Reply-To: <20220729022620.1786-1-qi1.zhang@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.500.17 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: c54ac07f-860b-4470-b2a2-08da71233606 x-ms-traffictypediagnostic: DM5PR1101MB2297:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: t9O7stXmDoK9WVJf5TE1Gf2pEuLzQiNRhJpO4E8a6VuzJdorFcrESImgwlvIs7SM0pApDT00ac44pIkfXcm63wQLyayUj9M5wlZl/6ZePozTZuq3DY0ll0v1EPD6EMjnYTEXI8v/Nv+yVjMdMrudaFMfLZjLib8pHqxNnPBnJLVE0walwK7Q5LGGZ69i4auZ2Mq9CwcNHDONfba9jlm7JbhKFNm3s7ydQZ9g8IdQ0Jn+pz/QlBcvrWb5V/yt70ey9fscIAcKQx4cd3bHN6YaQz/K5gjqDrpZnsHpxGYmBqe6e1zx+dApYFhoKTmLqxnP/EVxoGSi5Ff9Ss9pd6F5adt42vbSigQ305RSCaOu1HU5OF89DFQ7NVLk7cxfuFpXHisndvuieuj6Zb7MxxfK5amnO7u2KB86aLUltVcAicok0SNm/OqKH/CN9BWWUKNGV/QK8LKqP03czgpOhjGG3NUOsn3MRSgwn7S/1PSUBU11QGEvYH562aF5S6X972nb44WVJIGvUqr5nu6fYtjb4duCY6Ltho9LTHh6jhXbnJU0yGLSfPUrS+1z81YVXQj14iG9wIfryEyG7uVJT0YOIKEgZ2WsXrxzC0kMzWudCRNruTY6B9RjauBkFW06/XiffbdCm+Ux4DN+FbAyMGg9Q5uuhC+tKKq7AIlPub0cOda1114eonJQ6Hhd7fY/nibXPBphg1xFo3iPUNRtg+oGHv7D+G2gYZqDCYKKYx8KOjI3lcXC8/8q3eJeboY5NKio5ZMFYdm5LHp5O3tG2N3joLjGpPt8lbJ7BfPvqaQoUE2jlVuUMR7HCXxUQo7wkoZCCIvDffF5nWVii83w1nxcoSXUOsMGkleiBaEMj7kFVJZmGzLkCYDb4roq/6Ly/zIZ 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:(13230016)(396003)(136003)(39860400002)(346002)(366004)(376002)(53546011)(122000001)(38100700002)(83380400001)(5660300002)(41300700001)(38070700005)(52536014)(8936002)(966005)(66946007)(71200400001)(66476007)(478600001)(316002)(4326008)(66446008)(66556008)(64756008)(82960400001)(8676002)(76116006)(19627235002)(6506007)(110136005)(54906003)(7696005)(186003)(86362001)(26005)(2906002)(55016003)(9686003)(15650500001)(33656002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?8B2m0qlhCdutTm0f0BvPckSiP/zwvFZ9w/4w6KtL/jiU6ORbFf9o/M+cjEPe?= =?us-ascii?Q?/uPLd7LEIE9+D+jfHcLZw2UdMFixEdy9PQIRe+jteNZuUenPfXTiZgz2Aruk?= =?us-ascii?Q?8TEo8zrMhtAqHHwm1nXGPP8ZzX1qRHLZkr0l/IPr9JzF8ohqwMV6y9b4Nx5g?= =?us-ascii?Q?bZx04cjkLS8cfj/fFFDXyAOK2I7GM4ffzuxFKd4gQ/zhOLoUK5CqDgVTYsvZ?= =?us-ascii?Q?D0SKyEZjpHHoQQzYLXHEq8AUQywhN5p1sxul5oI3qOXmuMMJGStpFUphFS51?= =?us-ascii?Q?BtYCTGGfQlYNoY5VWObfyBAegghVjbryY9uZ+XkBrfIThcFg7eEKyJv1rSPi?= =?us-ascii?Q?Wkuqb+eGEVOKK4VhQAmEL17owYGYDaEuadxKzTffDHg/7y3sP9fCuMJ3B2ag?= =?us-ascii?Q?AYcIuWwUwbFKgiJFLT0E7XrvE7RDASJVqAKSL1vS3+JjutbTYngD2glpSBUL?= =?us-ascii?Q?LTMx+7vA8ntKn321Q8dS/k5quTSvfa7EMMTizQBqjjFPv8tv9r9RbV4gHxGT?= =?us-ascii?Q?TdAJ/CKk39G0YskcksIxSd1kLEy/JponYWl/r+Zf9Tk14Ofu/JRwZN/KtJr4?= =?us-ascii?Q?aDmMAlUOpaPnBSmM1LI5MYKDFJxAcDl3kVcrEFlM9mGkJX5zWQpTmn7VjMRZ?= =?us-ascii?Q?DUHwTg61KMrMcfjI+UkO0go8owhQi5QPITXpCyKXM+/scZyd8ejGolHMQU6D?= =?us-ascii?Q?gxOam6LL7zGJuWjr3edin2z4tia6sHD7ptfp/s4OZ8oHZD7S4YlDIYViVpL9?= =?us-ascii?Q?zfgsE0PMc7l/xYBucHGSsE2gk9gqW7Dq9zd9nRBji9xglvnQ8yxLFNDrLr6T?= =?us-ascii?Q?5WBCl69Xw1K4ubx70gxYTXAnUTklSBqbmKvnDfyQI+ZdNk71VlkhjAQKJrcq?= =?us-ascii?Q?GsIlDOvmxu4PSIuBYM3gWVT9S3UFpJLi39KZyPNmcAjfubasNtxpMex7yy/K?= =?us-ascii?Q?oGIRwsxb9hTmVuDRC1fxCszUu+6vPsOyox+LPu+rBSPe1UYqeAkgKy+Q12km?= =?us-ascii?Q?u+6Z+jOuolVeRFvD0HGoXDznVLnS+hutEccD6DV1FNECftI1m7OpZ8jp1fpF?= =?us-ascii?Q?qEvZKxR5esdrhTiG5Ik1he9HAWRxCsWi39EXlmNfcXBPuLu3MV9s3CZOg3dY?= =?us-ascii?Q?3EkLkizMGzqBsAYRwhxoNRqbT8O1Z01LBM8zhQKU4SMI0hhwH9BaElVyt/4f?= =?us-ascii?Q?C+1B6J+33B+jueEF2fEZjWF2vvVMtgywZ+KvgRtaAR8iKUyQFY7MgTmw/x26?= =?us-ascii?Q?OiOlnmIF5GYk/pkXnq4lcjej7ECYN7mN07o7pmP2S+48AiyAx8BLt1P9hL7a?= =?us-ascii?Q?Fi7ztLg1PrRv6Ylg6OiB225Z0zXJ0n2bL3f2yGWPcViXq9nOmDxhxw9Ngb/4?= =?us-ascii?Q?ewsiFBfU1KHeEEOCOrgA1S+yIfUvuoJrcExqEeqwdKOjuN43rJRlQoKS6t1u?= =?us-ascii?Q?ywAQm5frlXGqEDe7hOiXKI+BL51TYWVrmiP97Z42uioM1RSqOYXMZtvH3zpV?= =?us-ascii?Q?dsjRW2bpqbqhOFZ/lX9/HM9tOzmWsYZjxWk+QVGGxP6ke+TAHJW5pOQrjKQU?= =?us-ascii?Q?kK6yenHAVN2oyNjccgwSQDaASaaB+LgZuSjMC/6n?= 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: c54ac07f-860b-4470-b2a2-08da71233606 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jul 2022 05:28:47.0236 (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: 4gOXbE/GAv0Mf4ryJiRHEim2F3OHxx3lEMukgiqjproX457jYIpUm8NMECkY0tGiAzlMmWQ2cMbyQqDzfaKMJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1101MB2297 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 Reviewed-by: Jiewen Yao > -----Original Message----- > From: Zhang, Qi1 > Sent: Friday, July 29, 2022 10:26 AM > To: devel@edk2.groups.io > Cc: Zhang, Qi1 ; Yao, Jiewen ; > Wang, Jian J ; Patil, Swapnil > > Subject: [PATCH v4] SecurityPkg: Add retry mechanism for tpm command >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3980 >=20 > As per TCG PC Client Device Driver Design Principle document, > if tpm commands fails due to timeout condition, then it should > have retry mechanism (3 retry attempts). > Existing implementation of PtpCrbTpmCommand does not have retry > mechanism if it fails with EFI_TIMEOUT. >=20 > See TCG PC Client Device Driver Design Principles for TPM 2.0 > https://trustedcomputinggroup.org/wp- > content/uploads/TCG_PCClient_Device_Driver_Design_Principles_TPM2p0_v1p1 > _r4_211104_final.pdf > Vision 1.1, Revision 0.04 > Section 7.2.1 >=20 > Signed-off-by: Qi Zhang > Cc: Jiewen Yao > Cc: Jian J Wang > Reviewed-by: Jiewen Yao > Tested-by: Swapnil Patil > --- > .../Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c | 108 +++++++++++------- > 1 file changed, 69 insertions(+), 39 deletions(-) >=20 > diff --git a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > index 1d99beaa10..840265292a 100644 > --- a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > +++ b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > @@ -33,6 +33,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > // >=20 > #define TPMCMDBUFLENGTH 0x500 >=20 >=20 >=20 > +// >=20 > +// Max retry count according to Spec TCG PC Client Device Driver Design > Principles >=20 > +// for TPM2.0, Version 1.1, Revision 0.04, Section 7.2.1 >=20 > +// >=20 > +#define RETRY_CNT_MAX 3 >=20 > + >=20 > /** >=20 > Check whether TPM PTP register exist. >=20 >=20 >=20 > @@ -153,6 +159,7 @@ PtpCrbTpmCommand ( > UINT32 TpmOutSize; >=20 > UINT16 Data16; >=20 > UINT32 Data32; >=20 > + UINT8 RetryCnt; >=20 >=20 >=20 > DEBUG_CODE_BEGIN (); >=20 > UINTN DebugSize; >=20 > @@ -179,53 +186,76 @@ PtpCrbTpmCommand ( > DEBUG_CODE_END (); >=20 > TpmOutSize =3D 0; >=20 >=20 >=20 > - // >=20 > - // STEP 0: >=20 > - // if CapCRbIdelByPass =3D=3D 0, enforce Idle state before sending com= mand >=20 > - // >=20 > - if ((GetCachedIdleByPass () =3D=3D 0) && ((MmioRead32 ((UINTN)&CrbReg- > >CrbControlStatus) & PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE) =3D=3D 0)) { >=20 > + RetryCnt =3D 0; >=20 > + while (TRUE) { >=20 > + // >=20 > + // STEP 0: >=20 > + // if CapCRbIdelByPass =3D=3D 0, enforce Idle state before sending c= ommand >=20 > + // >=20 > + if ((GetCachedIdleByPass () =3D=3D 0) && ((MmioRead32 ((UINTN)&CrbRe= g- > >CrbControlStatus) & PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE) =3D=3D 0)) { >=20 > + Status =3D PtpCrbWaitRegisterBits ( >=20 > + &CrbReg->CrbControlStatus, >=20 > + PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE, >=20 > + 0, >=20 > + PTP_TIMEOUT_C >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + RetryCnt++; >=20 > + if (RetryCnt < RETRY_CNT_MAX) { >=20 > + MmioWrite32 ((UINTN)&CrbReg->CrbControlRequest, > PTP_CRB_CONTROL_AREA_REQUEST_GO_IDLE); >=20 > + continue; >=20 > + } else { >=20 > + // >=20 > + // Try to goIdle to recover TPM >=20 > + // >=20 > + Status =3D EFI_DEVICE_ERROR; >=20 > + goto GoIdle_Exit; >=20 > + } >=20 > + } >=20 > + } >=20 > + >=20 > + // >=20 > + // STEP 1: >=20 > + // Ready is any time the TPM is ready to receive a command, followin= g a > write >=20 > + // of 1 by software to Request.cmdReady, as indicated by the Status = field >=20 > + // being cleared to 0. >=20 > + // >=20 > + MmioWrite32 ((UINTN)&CrbReg->CrbControlRequest, > PTP_CRB_CONTROL_AREA_REQUEST_COMMAND_READY); >=20 > Status =3D PtpCrbWaitRegisterBits ( >=20 > - &CrbReg->CrbControlStatus, >=20 > - PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE, >=20 > + &CrbReg->CrbControlRequest, >=20 > 0, >=20 > + PTP_CRB_CONTROL_AREA_REQUEST_COMMAND_READY, >=20 > PTP_TIMEOUT_C >=20 > ); >=20 > if (EFI_ERROR (Status)) { >=20 > - // >=20 > - // Try to goIdle to recover TPM >=20 > - // >=20 > - Status =3D EFI_DEVICE_ERROR; >=20 > - goto GoIdle_Exit; >=20 > + RetryCnt++; >=20 > + if (RetryCnt < RETRY_CNT_MAX) { >=20 > + MmioWrite32 ((UINTN)&CrbReg->CrbControlRequest, > PTP_CRB_CONTROL_AREA_REQUEST_GO_IDLE); >=20 > + continue; >=20 > + } else { >=20 > + Status =3D EFI_DEVICE_ERROR; >=20 > + goto GoIdle_Exit; >=20 > + } >=20 > } >=20 > - } >=20 >=20 >=20 > - // >=20 > - // STEP 1: >=20 > - // Ready is any time the TPM is ready to receive a command, following = a write >=20 > - // of 1 by software to Request.cmdReady, as indicated by the Status fi= eld >=20 > - // being cleared to 0. >=20 > - // >=20 > - MmioWrite32 ((UINTN)&CrbReg->CrbControlRequest, > PTP_CRB_CONTROL_AREA_REQUEST_COMMAND_READY); >=20 > - Status =3D PtpCrbWaitRegisterBits ( >=20 > - &CrbReg->CrbControlRequest, >=20 > - 0, >=20 > - PTP_CRB_CONTROL_AREA_REQUEST_COMMAND_READY, >=20 > - PTP_TIMEOUT_C >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - Status =3D EFI_DEVICE_ERROR; >=20 > - goto GoIdle_Exit; >=20 > - } >=20 > + Status =3D PtpCrbWaitRegisterBits ( >=20 > + &CrbReg->CrbControlStatus, >=20 > + 0, >=20 > + PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE, >=20 > + PTP_TIMEOUT_C >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + RetryCnt++; >=20 > + if (RetryCnt < RETRY_CNT_MAX) { >=20 > + MmioWrite32 ((UINTN)&CrbReg->CrbControlRequest, > PTP_CRB_CONTROL_AREA_REQUEST_GO_IDLE); >=20 > + continue; >=20 > + } else { >=20 > + Status =3D EFI_DEVICE_ERROR; >=20 > + goto GoIdle_Exit; >=20 > + } >=20 > + } >=20 >=20 >=20 > - Status =3D PtpCrbWaitRegisterBits ( >=20 > - &CrbReg->CrbControlStatus, >=20 > - 0, >=20 > - PTP_CRB_CONTROL_AREA_STATUS_TPM_IDLE, >=20 > - PTP_TIMEOUT_C >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - Status =3D EFI_DEVICE_ERROR; >=20 > - goto GoIdle_Exit; >=20 > + break; >=20 > } >=20 >=20 >=20 > // >=20 > -- > 2.26.2.windows.1