From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web08.19058.1658923615892940459 for ; Wed, 27 Jul 2022 05:06:56 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=i9yBk9AE; spf=pass (domain: intel.com, ip: 134.134.136.20, 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=1658923615; x=1690459615; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=qrLt8skPuXp8At+wMooJmSo/P9HqIqZZzyI0WFlZ5tY=; b=i9yBk9AEHA04BWpfKZV96rSAhwJOJu/EKkTPr1EfmIvAtCw4HUn68hiI QCuz/BfVuIIkbYDL/wCSFUdXcJcmoikDf2MN3L0gkaIkUKHQB4xed5mTV bdGR7P1/4xYl2AGja4Uo5evnsguiXPHfyWDpvhE0wXxPZ0xcAzqDf2voU thepPlTks0OYIDHLNvWCiKYvXb6SV1wNljx+6ndu28qm0qtIY89Ky0s1H iGpB6+45ACnjM5vKDiPTKTHMbjlE1pFIb/nbX67J7dF3jQlm3ful9pIxo QyCDSF/trV74ersM0ctJR57nYcx/wwu+NVfHenUIDLsgz2vxhTfmP0VZO w==; X-IronPort-AV: E=McAfee;i="6400,9594,10420"; a="275091645" X-IronPort-AV: E=Sophos;i="5.93,195,1654585200"; d="scan'208";a="275091645" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jul 2022 05:06:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,195,1654585200"; d="scan'208";a="575957636" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by orsmga006.jf.intel.com with ESMTP; 27 Jul 2022 05:06:55 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Wed, 27 Jul 2022 05:06:54 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28 via Frontend Transport; Wed, 27 Jul 2022 05:06:54 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.102) 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; Wed, 27 Jul 2022 05:06:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=egudTsEu+klJuTJ+8pcz7viIfAjFTZ9cUzvjY0nz0b3DZ/C3inS6ATWtUMYdRICC9WiOTAkii/1LfphevEFxcoETy3011E9gk3aApY6yIy60/C06YmYWvf5HtDxH+OAqASJhPKzojVSjI3hUim4aia5TWZl/eKdbgmQiBrpSwaQ8A+JgXjs0LRYovShxtzKQGIyekXSCH2X6t/aA05mpyv45M16k/shxrQhgq5txBLG+Is94sAK8rKrZr5xye0QDYzIbsDOfOX50itltktXRC0PSoM86pgP2dTBxkbaLLs5KP6lt2qQkexkz7F869jDnwP0UFJRlO2SdV4kdCMU9xg== 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=QMMUX2PAYPocqs58dnFB5K1A/srh2IADTCnRHXJZ4rc=; b=Gu3J4HretT4+eB2KstC49sUXSh/6sB4jrqS22hxiNI8rexC9urjzxQLb7hnDllXxazUEzL85qx04M8oURkmIIoZQWMJUkCH3hlvVxgruva8O45vmHYiBwMCfwW61yCzOdA9VLFxfvWAWQ2eUoOCAhg8QSzlPBs9H35deo/rAfR0w8BqUJCymlsyrjcBRsDWudN/kVvJdI731E6EjW2Ony6mbBTMbpeHWO69N3tnN9Jevx5gCeA3cZjylenoVjPT9OiO/vULRN0N9xyaGRmNhVRrWpxF1OUzZOyUPFywEXf1kYq3FjoYuDu1r1ukkfygKHtK3i6lZhdoFTJNqkbfs/A== 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 BY5PR11MB4417.namprd11.prod.outlook.com (2603:10b6:a03:1c0::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.25; Wed, 27 Jul 2022 12:06:52 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::fd61:b244:d8fb:ab1d]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::fd61:b244:d8fb:ab1d%4]) with mapi id 15.20.5458.024; Wed, 27 Jul 2022 12:06:51 +0000 From: "Yao, Jiewen" To: "Zhang, Qi1" , "devel@edk2.groups.io" CC: "Wang, Jian J" Subject: Re: [PATCH] SecurityPkg: Add retry mechanism for tpm command Thread-Topic: [PATCH] SecurityPkg: Add retry mechanism for tpm command Thread-Index: AQHYoa0D7Uy/rWQI1U2QqoWsYJQCma2SHwMw Date: Wed, 27 Jul 2022 12:06:51 +0000 Message-ID: References: <20220727113532.843-1-qi1.zhang@intel.com> In-Reply-To: <20220727113532.843-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: 4177b5ec-cc17-4cb3-6de5-08da6fc87d83 x-ms-traffictypediagnostic: BY5PR11MB4417:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ykXaXLii8Br8OjJjrx7YxcdQU5qyNsyPEG9d/4ARIuMqE5snbcJAXRsVWIcQ/1RpbxTiqmZLGKXqW5NSkBdUMUq7QCclX0Ug07VMemidLYeEoe973HbfOBCktKswyEkjmsqc7xZEP64o4xzvHVOSQsKhhdtG/oHQZe0L0MU4KcvhWoYnRqHPV+xpZBM3sFpOeZNg0ac3TSFLIhDpRpHechXJYRskO2g1b/ynNr2lHGdKx7/AjIu91GKUZB50A9B3rfn6UYx1rgtxn0k1GyXcH/AiTq5lLjJyeiifHg3BnZRm/NjY4m32oVo6trD96jIcPnnSWJ2XRQPWeodzTsSK/FHV+ttZFtGl1qdAzSrjDlh9kJPfH9Q+6kllP+78MsSklM4IgZPjxebdeO85d+rgj6G06gFNFSHid9szzgoj6yUwR999s8lh4NX7FTgDDflvMd50crCVx4ZZbZBeNLG4l4ybRfpv4kzw/xvq1aIPIFT0pjD2fF+JIsScnUfv4K3+iBDEaRT2diZsG8p//gmZUlq4ohI0eZekQIbY5msCdlu/5i8N4fj7Hbf0j6CSDfw49yCwWsKLL7oZVxkMqDUbIfGO1xmPnMKkA+ADU9UbWKiBaUTa1lmY92CM2VcQH9QD/naPpmuCu294p5ya3RDb5SIbRH86jIlQMNEFJmuYn1YJ4MfoNAioc637X8qgdaK9IOItsvfTQISQZPQBgi9LHWP210I4br1EY67gLZSnIIGLzxY+eI57OMzGNVdLPpgxmW69h/639aQ4rBtWlEmXxmMzM/n17BrW95NjUPidE+fCRpG/jfaWlnDkB/E6jEmh 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)(39860400002)(376002)(396003)(366004)(346002)(136003)(33656002)(55016003)(8936002)(52536014)(15650500001)(5660300002)(66446008)(64756008)(4326008)(66946007)(8676002)(86362001)(76116006)(2906002)(66476007)(66556008)(38100700002)(316002)(19627235002)(110136005)(6506007)(122000001)(9686003)(26005)(478600001)(53546011)(41300700001)(7696005)(71200400001)(107886003)(186003)(82960400001)(83380400001)(38070700005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?DyeN9c8RqK3zxnM55lOLiQo0SAMD2XZzwpZOeT566lKc53mZwm1COmip/eRd?= =?us-ascii?Q?6/g0npzSuxWmCLBFkTkXV4IO6LRvNUvek8J5VKKMGUdTZeJ/t/N6uuMWGEKm?= =?us-ascii?Q?YGWXeu5fMtNZLmQhnQz+dWgycQgahZ7Kq6mI+jxTwpj1vt+zk9tN3RF97DcS?= =?us-ascii?Q?I5URP/kP/s+cOi7lCY6+pHKxKSm5OsDUC2x4jRkX9kp8+xa+y/tKGNBS4qOl?= =?us-ascii?Q?iKlbNwHX4nLpHaNEIA4B10jYTmoD/mY1Y/noonKNi+GFi+UgNQuMVBXsS3QK?= =?us-ascii?Q?qLmV933Qq/f56DZwCrmQwmRLyafJwcsZ4FyWMTtWrGnZW5/7/dfYDSNpsLto?= =?us-ascii?Q?8sccCfz05pBbX1AxEm7Q+kA1Ihel91G5J+aPelQjQcIuuzBeOyDTISp8fqZs?= =?us-ascii?Q?mPuce9MI/RxKH+UQyFH8sSJQc9alC0BXGWivMK/+WwQ3Iy4Pezs9OUEGvR6L?= =?us-ascii?Q?h9BAFzgu/haHZ3JSzHyXr2to/VpB/JpDr62422Xo3bSvXmr+fP6rmd5hJ45K?= =?us-ascii?Q?k2Pl7VOCK2FpbpA1QLswoblU1xYH38p8AMwQoMYdBAsoq5JTp0Aky7j5bVK0?= =?us-ascii?Q?GTcVjsB+DyM+5pZm1XgLb2zzuvES+2/44A3g+NDojCQgem9T4GNETlzr4zHU?= =?us-ascii?Q?IHLKxOqnpOE6tnsXwDUIcnl7hXrdjEocQGIEyouubi8caMMBjZjZxbOVkmlf?= =?us-ascii?Q?qNVMlosvZP7SuWjFBi6qZ7fHl/Bn83KZ/Fss/QRMRujjqpHLdOw8cmQkqxfq?= =?us-ascii?Q?49tZaci1hXNMGkwGe1Ed1eLBZy60pp2GXowiZI20JKIRh+vczUYV5VgyzOiv?= =?us-ascii?Q?n0eGXdjSjtZ3/yfjTB8bxvtarDXe7HEhuKszkJ2KusJ2Ix85rZ46V5jxQ8sk?= =?us-ascii?Q?U6g8qx4hNrCwAYXKOBSSd6Tfb0/MgEiRrJlwyOVzcz/+43j6MqbK7+qp1gFN?= =?us-ascii?Q?QKfBsZ7B3KLW74jmtiJuKF6Vz2rQ+o9D7isnZltfO8zl5Wn7Feq1W2GFXEzY?= =?us-ascii?Q?8tRpK9Muc0u64K6TUfWEamhELNbTP3HUPpjKy4/eg4zFpAcgFa51WyFwwxji?= =?us-ascii?Q?L+QK3+uRgSevvlCGLeAYMJA1idHhMejIwkjpYs7RI4oGP5KsDmqMmDzlhvpk?= =?us-ascii?Q?r3sPpOBdVXR5dKXNxswf38lakwE07hN3v38JDC8DU+g8nPdYdb+Ns+pDC3/u?= =?us-ascii?Q?vSbhIsQSXZ9GyAGRqGfB9lFsN7cfxPfPmsIhd5mXaUhWqd5C1aFtkphIXMKV?= =?us-ascii?Q?24Tmv355tp55gF0bs5u5qaA9XGid7SUGobIbnTNauq1J/3u20wHwZ6tvn/4j?= =?us-ascii?Q?qIo6axoQ3WsBt+8F3L5t9KfnZp7AYHZJy2cg2Rawpw7uZ6GkQOLdPwDQEGlf?= =?us-ascii?Q?bpTiwflhBDYm/ZUHe2jnV2ObZFdGXp9oivGs4/vPj37+EdygyVSLdAAKhe5J?= =?us-ascii?Q?dHDZcJZiNetqnpGz5mvLW47WMiEMVWt07WZx8yqj0eOOo05RQIPFM5xQRyvx?= =?us-ascii?Q?mkyn1yKC3s0b7/H+UEzQyVRVButzce+6l1eMuct8wJpDcZgk4/cUK0AnpzwM?= =?us-ascii?Q?y+v7fr9fwBACq/VsqdoI/sOUabUz+wI0DzjY3999?= 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: 4177b5ec-cc17-4cb3-6de5-08da6fc87d83 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jul 2022 12:06:51.5941 (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: YyLaUjtdTfzvmLGLo42PKzuz4t2kqDipWIfhFJIIKkAD7lonNd8c53CpEmO0g4YvsMkXmA4CVQuEYcphW0bmxA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR11MB4417 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 Thanks. Please add Bugzilla ID and add tested-by tag by the people who perf= ormed the test. For the code, reviewed-by: Jiewen Yao > -----Original Message----- > From: Zhang, Qi1 > Sent: Wednesday, July 27, 2022 7:36 PM > To: devel@edk2.groups.io > Cc: Zhang, Qi1 ; Yao, Jiewen ; > Wang, Jian J > Subject: [PATCH] SecurityPkg: Add retry mechanism for tpm command >=20 > Signed-off-by: Qi Zhang > Cc: Jiewen Yao > Cc: Jian J Wang > --- > .../Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c | 107 +++++++++++------- > 1 file changed, 68 insertions(+), 39 deletions(-) >=20 > diff --git a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > index 1d99beaa10..6b5994fde2 100644 > --- a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > +++ b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c > @@ -33,6 +33,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > // >=20 > #define TPMCMDBUFLENGTH 0x500 >=20 >=20 >=20 > +// >=20 > +// Max retry count >=20 > +// >=20 > +#define RETRY_CNT_MAX 3 >=20 > + >=20 > /** >=20 > Check whether TPM PTP register exist. >=20 >=20 >=20 > @@ -153,6 +158,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 +185,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