public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] MdePkg: Add registers of boot partition feature
@ 2021-12-08  7:17 Maggie Chu
  2021-12-15  4:32 ` Zhiguang Liu
  0 siblings, 1 reply; 6+ messages in thread
From: Maggie Chu @ 2021-12-08  7:17 UTC (permalink / raw)
  To: devel; +Cc: Liming Gao, Michael D Kinney, Zhiguang Liu

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757

Add registers of boot partition feature which defined in NVM Express 1.4 Spec

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Maggie Chu <maggie.chu@intel.com>
---
 MdePkg/Include/IndustryStandard/Nvme.h | 113 ++++++++++++++++++++-----
 1 file changed, 92 insertions(+), 21 deletions(-)

diff --git a/MdePkg/Include/IndustryStandard/Nvme.h b/MdePkg/Include/IndustryStandard/Nvme.h
index 7d4aee9dc8..8387183e4f 100644
--- a/MdePkg/Include/IndustryStandard/Nvme.h
+++ b/MdePkg/Include/IndustryStandard/Nvme.h
@@ -2,11 +2,12 @@
   Definitions based on NVMe spec. version 1.1.
 
   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
   @par Specification Reference:
   NVMe Specification 1.1
+  NVMe Specification 1.4
 
 **/
 
@@ -18,18 +19,21 @@
 //
 // controller register offsets
 //
-#define NVME_CAP_OFFSET    0x0000        // Controller Capabilities
-#define NVME_VER_OFFSET    0x0008        // Version
-#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set
-#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear
-#define NVME_CC_OFFSET     0x0014        // Controller Configuration
-#define NVME_CSTS_OFFSET   0x001c        // Controller Status
-#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem Reset
-#define NVME_AQA_OFFSET    0x0024        // Admin Queue Attributes
-#define NVME_ASQ_OFFSET    0x0028        // Admin Submission Queue Base Address
-#define NVME_ACQ_OFFSET    0x0030        // Admin Completion Queue Base Address
-#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0 (admin) Tail Doorbell
-#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0 (admin) Head Doorbell
+#define NVME_CAP_OFFSET     0x0000        // Controller Capabilities
+#define NVME_VER_OFFSET     0x0008        // Version
+#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set
+#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask Clear
+#define NVME_CC_OFFSET      0x0014        // Controller Configuration
+#define NVME_CSTS_OFFSET    0x001c        // Controller Status
+#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem Reset
+#define NVME_AQA_OFFSET     0x0024        // Admin Queue Attributes
+#define NVME_ASQ_OFFSET     0x0028        // Admin Submission Queue Base Address
+#define NVME_ACQ_OFFSET     0x0030        // Admin Completion Queue Base Address
+#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition Information
+#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read Select
+#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition Memory Buffer Location
+#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0 (admin) Tail Doorbell
+#define NVME_CQ0_OFFSET     0x1004        // Completion Queue 0 (admin) Head Doorbell
 
 //
 // These register offsets are defined as 0x1000 + (N * (4 << CAP.DSTRD))
@@ -51,11 +55,14 @@ typedef struct {
   UINT8     To;     // Timeout
   UINT16    Dstrd  : 4;
   UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS
-  UINT16    Css    : 4; // Command Sets Supported - Bit 37
-  UINT16    Rsvd3  : 7;
-  UINT8     Mpsmin : 4;
-  UINT8     Mpsmax : 4;
-  UINT8     Rsvd4;
+  UINT16    Css:8;     // Command Sets Supported - Bit 37
+  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4
+  UINT16    Rsvd3:2;
+  UINT8     Mpsmin:4;
+  UINT8     Mpsmax:4;
+  UINT8     Pmrs:1;
+  UINT8     Cmbs:1;
+  UINT8     Rsvd4:6;
 } NVME_CAP;
 
 //
@@ -115,7 +122,36 @@ typedef struct {
 #define NVME_ACQ  UINT64
 
 //
-// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell
+// 3.1.13 Offset 40h: BPINFO - Boot Partition Information
+//
+typedef struct {
+  UINT32  Bpsz:15;    // Boot Partition Size
+  UINT32  Rsvd1:9;
+  UINT32  Brs:2;      // Boot Read Status
+  UINT32  Rsvd2:5;
+  UINT32  Abpid:1;    // Active Boot Partition ID
+} NVME_BPINFO;
+
+//
+// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select
+//
+typedef struct {
+  UINT32  Bprsz:10;    // Boot Partition Read Size
+  UINT32  Bprof:20;    // Boot Partition Read Offset
+  UINT32  Rsvd1:1;
+  UINT32  Bpid:1;      // Boot Partition Identifier
+} NVME_BPRSEL;
+
+//
+// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location (Optional)
+//
+typedef struct {
+  UINT64  Rsvd1:12;
+  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base Address
+} NVME_BPMBL;
+
+//
+// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell
 //
 typedef struct {
   UINT16    Sqt;
@@ -353,7 +389,7 @@ typedef struct {
   UINT8                Avscc; /* Admin Vendor Specific Command Configuration */
   UINT8                Apsta; /* Autonomous Power State Transition Attributes */
   //
-  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec
+  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec
   //
   UINT16               Wctemp;      /* Warning Composite Temperature Threshold */
   UINT16               Cctemp;      /* Critical Composite Temperature Threshold */
@@ -361,7 +397,12 @@ typedef struct {
   UINT32               Hmpre;       /* Host Memory Buffer Preferred Size */
   UINT32               Hmmin;       /* Host Memory Buffer Minimum Size */
   UINT8                Tnvmcap[16]; /* Total NVM Capacity */
-  UINT8                Rsvd2[216];  /* Reserved as of NVM Express */
+  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity */
+  UINT32               Rpmbs;       /* Replay Protected Memory Block Support */
+  UINT16               Edstt;       /* Extended Device Self-test Time */
+  UINT8                Dsto;        /* Device Self-test Options  */
+  UINT8                Fwug;        /* Firmware Update Granularity */
+  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express 1.4 Spec */
   //
   // NVM Command Set Attributes
   //
@@ -433,6 +474,35 @@ typedef struct {
   UINT8             VendorData[3712]; /* Vendor specific data */
 } NVME_ADMIN_NAMESPACE_DATA;
 
+//
+// RPMB Device Configuration Block Data Structure as of Nvm Express 1.4 Spec
+//
+typedef struct {
+  UINT8  Bppe;                /* Boot Partition Protection Enable */
+  UINT8  Bpl;                 /* Boot Partition Lock */
+  UINT8  Nwpac;               /* Namespace Write Protection Authentication Control */
+
+  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4 Spec */
+} NVME_RPMB_CONFIGURATION_DATA;
+
+#define RPMB_FRAME_STUFF_BYTES  223
+
+//
+// RPMB Data Frame as of Nvm Express 1.4 Spec
+//
+typedef struct {
+  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /* [222-N:00] Stuff Bytes */
+                                                 /* [222:222-(N-1)] Authentication Key or Message Authentication Code (MAC) */
+  UINT8   Rpmbt;                                 /* RPMB Target */
+  UINT64  Nonce[2];
+  UINT32  Wcounter;                              /* Write Counter */
+  UINT32  Address;                               /* Starting address of data to be programmed to or read from the RPMB. */
+  UINT32  Scount;                                /* Sector Count */
+  UINT16  Result;
+  UINT16  Rpmessage;                             /* Request/Response Message */
+//  UINT8  *Data;                                /* Data to be written or read by signed access where M = 512 * Sector Count. */
+} NVME_RPMB_DATA_FRAME;
+
 //
 // NvmExpress Admin Identify Cmd
 //
@@ -564,6 +634,7 @@ typedef struct {
   #define LID_ERROR_INFO    0x1
   #define LID_SMART_INFO    0x2
   #define LID_FW_SLOT_INFO  0x3
+  #define LID_BP_INFO       0x15
   UINT32    Rsvd1 : 8;
   UINT32    Numd  : 12;       /* Number of Dwords */
   UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1 Spec */
-- 
2.26.2.windows.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] MdePkg: Add registers of boot partition feature
  2021-12-08  7:17 [PATCH] MdePkg: Add registers of boot partition feature Maggie Chu
@ 2021-12-15  4:32 ` Zhiguang Liu
  2021-12-15  5:41   ` 回复: [edk2-devel] " gaoliming
  0 siblings, 1 reply; 6+ messages in thread
From: Zhiguang Liu @ 2021-12-15  4:32 UTC (permalink / raw)
  To: Chu, Maggie, devel@edk2.groups.io; +Cc: Gao, Liming, Kinney, Michael D

I have checked that the change follows NVM Express 1.4 Spec 
Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>

-----Original Message-----
From: Chu, Maggie <maggie.chu@intel.com> 
Sent: Wednesday, December 8, 2021 3:18 PM
To: devel@edk2.groups.io
Cc: Liming Gao <gaoliming@byosoft.com.cn>; Kinney, Michael D <michael.d.kinney@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
Subject: [PATCH] MdePkg: Add registers of boot partition feature

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757

Add registers of boot partition feature which defined in NVM Express 1.4 Spec

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Maggie Chu <maggie.chu@intel.com>
---
 MdePkg/Include/IndustryStandard/Nvme.h | 113 ++++++++++++++++++++-----
 1 file changed, 92 insertions(+), 21 deletions(-)

diff --git a/MdePkg/Include/IndustryStandard/Nvme.h b/MdePkg/Include/IndustryStandard/Nvme.h
index 7d4aee9dc8..8387183e4f 100644
--- a/MdePkg/Include/IndustryStandard/Nvme.h
+++ b/MdePkg/Include/IndustryStandard/Nvme.h
@@ -2,11 +2,12 @@
   Definitions based on NVMe spec. version 1.1.

 

   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>

-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>

+  Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>

   SPDX-License-Identifier: BSD-2-Clause-Patent

 

   @par Specification Reference:

   NVMe Specification 1.1

+  NVMe Specification 1.4

 

 **/

 

@@ -18,18 +19,21 @@
 //

 // controller register offsets

 //

-#define NVME_CAP_OFFSET    0x0000        // Controller Capabilities

-#define NVME_VER_OFFSET    0x0008        // Version

-#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set

-#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear

-#define NVME_CC_OFFSET     0x0014        // Controller Configuration

-#define NVME_CSTS_OFFSET   0x001c        // Controller Status

-#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem Reset

-#define NVME_AQA_OFFSET    0x0024        // Admin Queue Attributes

-#define NVME_ASQ_OFFSET    0x0028        // Admin Submission Queue Base Address

-#define NVME_ACQ_OFFSET    0x0030        // Admin Completion Queue Base Address

-#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0 (admin) Tail Doorbell

-#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0 (admin) Head Doorbell

+#define NVME_CAP_OFFSET     0x0000        // Controller Capabilities

+#define NVME_VER_OFFSET     0x0008        // Version

+#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set

+#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask Clear

+#define NVME_CC_OFFSET      0x0014        // Controller Configuration

+#define NVME_CSTS_OFFSET    0x001c        // Controller Status

+#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem Reset

+#define NVME_AQA_OFFSET     0x0024        // Admin Queue Attributes

+#define NVME_ASQ_OFFSET     0x0028        // Admin Submission Queue Base Address

+#define NVME_ACQ_OFFSET     0x0030        // Admin Completion Queue Base Address

+#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition Information

+#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read Select

+#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition Memory Buffer Location

+#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0 (admin) Tail Doorbell

+#define NVME_CQ0_OFFSET     0x1004        // Completion Queue 0 (admin) Head Doorbell

 

 //

 // These register offsets are defined as 0x1000 + (N * (4 << CAP.DSTRD))

@@ -51,11 +55,14 @@ typedef struct {
   UINT8     To;     // Timeout

   UINT16    Dstrd  : 4;

   UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS

-  UINT16    Css    : 4; // Command Sets Supported - Bit 37

-  UINT16    Rsvd3  : 7;

-  UINT8     Mpsmin : 4;

-  UINT8     Mpsmax : 4;

-  UINT8     Rsvd4;

+  UINT16    Css:8;     // Command Sets Supported - Bit 37

+  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4

+  UINT16    Rsvd3:2;

+  UINT8     Mpsmin:4;

+  UINT8     Mpsmax:4;

+  UINT8     Pmrs:1;

+  UINT8     Cmbs:1;

+  UINT8     Rsvd4:6;

 } NVME_CAP;

 

 //

@@ -115,7 +122,36 @@ typedef struct {
 #define NVME_ACQ  UINT64

 

 //

-// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell

+// 3.1.13 Offset 40h: BPINFO - Boot Partition Information

+//

+typedef struct {

+  UINT32  Bpsz:15;    // Boot Partition Size

+  UINT32  Rsvd1:9;

+  UINT32  Brs:2;      // Boot Read Status

+  UINT32  Rsvd2:5;

+  UINT32  Abpid:1;    // Active Boot Partition ID

+} NVME_BPINFO;

+

+//

+// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select

+//

+typedef struct {

+  UINT32  Bprsz:10;    // Boot Partition Read Size

+  UINT32  Bprof:20;    // Boot Partition Read Offset

+  UINT32  Rsvd1:1;

+  UINT32  Bpid:1;      // Boot Partition Identifier

+} NVME_BPRSEL;

+

+//

+// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location (Optional)

+//

+typedef struct {

+  UINT64  Rsvd1:12;

+  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base Address

+} NVME_BPMBL;

+

+//

+// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell

 //

 typedef struct {

   UINT16    Sqt;

@@ -353,7 +389,7 @@ typedef struct {
   UINT8                Avscc; /* Admin Vendor Specific Command Configuration */

   UINT8                Apsta; /* Autonomous Power State Transition Attributes */

   //

-  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec

+  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec

   //

   UINT16               Wctemp;      /* Warning Composite Temperature Threshold */

   UINT16               Cctemp;      /* Critical Composite Temperature Threshold */

@@ -361,7 +397,12 @@ typedef struct {
   UINT32               Hmpre;       /* Host Memory Buffer Preferred Size */

   UINT32               Hmmin;       /* Host Memory Buffer Minimum Size */

   UINT8                Tnvmcap[16]; /* Total NVM Capacity */

-  UINT8                Rsvd2[216];  /* Reserved as of NVM Express */

+  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity */

+  UINT32               Rpmbs;       /* Replay Protected Memory Block Support */

+  UINT16               Edstt;       /* Extended Device Self-test Time */

+  UINT8                Dsto;        /* Device Self-test Options  */

+  UINT8                Fwug;        /* Firmware Update Granularity */

+  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express 1.4 Spec */

   //

   // NVM Command Set Attributes

   //

@@ -433,6 +474,35 @@ typedef struct {
   UINT8             VendorData[3712]; /* Vendor specific data */

 } NVME_ADMIN_NAMESPACE_DATA;

 

+//

+// RPMB Device Configuration Block Data Structure as of Nvm Express 1.4 Spec

+//

+typedef struct {

+  UINT8  Bppe;                /* Boot Partition Protection Enable */

+  UINT8  Bpl;                 /* Boot Partition Lock */

+  UINT8  Nwpac;               /* Namespace Write Protection Authentication Control */

+

+  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4 Spec */

+} NVME_RPMB_CONFIGURATION_DATA;

+

+#define RPMB_FRAME_STUFF_BYTES  223

+

+//

+// RPMB Data Frame as of Nvm Express 1.4 Spec

+//

+typedef struct {

+  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /* [222-N:00] Stuff Bytes */

+                                                 /* [222:222-(N-1)] Authentication Key or Message Authentication Code (MAC) */

+  UINT8   Rpmbt;                                 /* RPMB Target */

+  UINT64  Nonce[2];

+  UINT32  Wcounter;                              /* Write Counter */

+  UINT32  Address;                               /* Starting address of data to be programmed to or read from the RPMB. */

+  UINT32  Scount;                                /* Sector Count */

+  UINT16  Result;

+  UINT16  Rpmessage;                             /* Request/Response Message */

+//  UINT8  *Data;                                /* Data to be written or read by signed access where M = 512 * Sector Count. */

+} NVME_RPMB_DATA_FRAME;

+

 //

 // NvmExpress Admin Identify Cmd

 //

@@ -564,6 +634,7 @@ typedef struct {
   #define LID_ERROR_INFO    0x1

   #define LID_SMART_INFO    0x2

   #define LID_FW_SLOT_INFO  0x3

+  #define LID_BP_INFO       0x15

   UINT32    Rsvd1 : 8;

   UINT32    Numd  : 12;       /* Number of Dwords */

   UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1 Spec */

-- 
2.26.2.windows.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition feature
  2021-12-15  4:32 ` Zhiguang Liu
@ 2021-12-15  5:41   ` gaoliming
  2021-12-22  8:35     ` Maggie Chu
  0 siblings, 1 reply; 6+ messages in thread
From: gaoliming @ 2021-12-15  5:41 UTC (permalink / raw)
  To: devel, zhiguang.liu, 'Chu, Maggie'; +Cc: 'Kinney, Michael D'

Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>

> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Zhiguang Liu
> 发送时间: 2021年12月15日 12:32
> 收件人: Chu, Maggie <maggie.chu@intel.com>; devel@edk2.groups.io
> 抄送: Gao, Liming <gaoliming@byosoft.com.cn>; Kinney, Michael D
> <michael.d.kinney@intel.com>
> 主题: Re: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> feature
> 
> I have checked that the change follows NVM Express 1.4 Spec
> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
> 
> -----Original Message-----
> From: Chu, Maggie <maggie.chu@intel.com>
> Sent: Wednesday, December 8, 2021 3:18 PM
> To: devel@edk2.groups.io
> Cc: Liming Gao <gaoliming@byosoft.com.cn>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
> Subject: [PATCH] MdePkg: Add registers of boot partition feature
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757
> 
> Add registers of boot partition feature which defined in NVM Express 1.4
Spec
> 
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Signed-off-by: Maggie Chu <maggie.chu@intel.com>
> ---
>  MdePkg/Include/IndustryStandard/Nvme.h | 113
> ++++++++++++++++++++-----
>  1 file changed, 92 insertions(+), 21 deletions(-)
> 
> diff --git a/MdePkg/Include/IndustryStandard/Nvme.h
> b/MdePkg/Include/IndustryStandard/Nvme.h
> index 7d4aee9dc8..8387183e4f 100644
> --- a/MdePkg/Include/IndustryStandard/Nvme.h
> +++ b/MdePkg/Include/IndustryStandard/Nvme.h
> @@ -2,11 +2,12 @@
>    Definitions based on NVMe spec. version 1.1.
> 
> 
> 
>    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> 
> -  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>    @par Specification Reference:
> 
>    NVMe Specification 1.1
> 
> +  NVMe Specification 1.4
> 
> 
> 
>  **/
> 
> 
> 
> @@ -18,18 +19,21 @@
>  //
> 
>  // controller register offsets
> 
>  //
> 
> -#define NVME_CAP_OFFSET    0x0000        // Controller Capabilities
> 
> -#define NVME_VER_OFFSET    0x0008        // Version
> 
> -#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set
> 
> -#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear
> 
> -#define NVME_CC_OFFSET     0x0014        // Controller
> Configuration
> 
> -#define NVME_CSTS_OFFSET   0x001c        // Controller Status
> 
> -#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem Reset
> 
> -#define NVME_AQA_OFFSET    0x0024        // Admin Queue
> Attributes
> 
> -#define NVME_ASQ_OFFSET    0x0028        // Admin Submission
> Queue Base Address
> 
> -#define NVME_ACQ_OFFSET    0x0030        // Admin Completion
> Queue Base Address
> 
> -#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0
> (admin) Tail Doorbell
> 
> -#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0
> (admin) Head Doorbell
> 
> +#define NVME_CAP_OFFSET     0x0000        // Controller
> Capabilities
> 
> +#define NVME_VER_OFFSET     0x0008        // Version
> 
> +#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set
> 
> +#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask Clear
> 
> +#define NVME_CC_OFFSET      0x0014        // Controller
> Configuration
> 
> +#define NVME_CSTS_OFFSET    0x001c        // Controller Status
> 
> +#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem
> Reset
> 
> +#define NVME_AQA_OFFSET     0x0024        // Admin Queue
> Attributes
> 
> +#define NVME_ASQ_OFFSET     0x0028        // Admin Submission
> Queue Base Address
> 
> +#define NVME_ACQ_OFFSET     0x0030        // Admin Completion
> Queue Base Address
> 
> +#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition
> Information
> 
> +#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read
> Select
> 
> +#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition
> Memory Buffer Location
> 
> +#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0
> (admin) Tail Doorbell
> 
> +#define NVME_CQ0_OFFSET     0x1004        // Completion Queue 0
> (admin) Head Doorbell
> 
> 
> 
>  //
> 
>  // These register offsets are defined as 0x1000 + (N * (4 << CAP.DSTRD))
> 
> @@ -51,11 +55,14 @@ typedef struct {
>    UINT8     To;     // Timeout
> 
>    UINT16    Dstrd  : 4;
> 
>    UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS
> 
> -  UINT16    Css    : 4; // Command Sets Supported - Bit 37
> 
> -  UINT16    Rsvd3  : 7;
> 
> -  UINT8     Mpsmin : 4;
> 
> -  UINT8     Mpsmax : 4;
> 
> -  UINT8     Rsvd4;
> 
> +  UINT16    Css:8;     // Command Sets Supported - Bit 37
> 
> +  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4
> 
> +  UINT16    Rsvd3:2;
> 
> +  UINT8     Mpsmin:4;
> 
> +  UINT8     Mpsmax:4;
> 
> +  UINT8     Pmrs:1;
> 
> +  UINT8     Cmbs:1;
> 
> +  UINT8     Rsvd4:6;
> 
>  } NVME_CAP;
> 
> 
> 
>  //
> 
> @@ -115,7 +122,36 @@ typedef struct {
>  #define NVME_ACQ  UINT64
> 
> 
> 
>  //
> 
> -// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
Submission
> Queue y Tail Doorbell
> 
> +// 3.1.13 Offset 40h: BPINFO - Boot Partition Information
> 
> +//
> 
> +typedef struct {
> 
> +  UINT32  Bpsz:15;    // Boot Partition Size
> 
> +  UINT32  Rsvd1:9;
> 
> +  UINT32  Brs:2;      // Boot Read Status
> 
> +  UINT32  Rsvd2:5;
> 
> +  UINT32  Abpid:1;    // Active Boot Partition ID
> 
> +} NVME_BPINFO;
> 
> +
> 
> +//
> 
> +// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select
> 
> +//
> 
> +typedef struct {
> 
> +  UINT32  Bprsz:10;    // Boot Partition Read Size
> 
> +  UINT32  Bprof:20;    // Boot Partition Read Offset
> 
> +  UINT32  Rsvd1:1;
> 
> +  UINT32  Bpid:1;      // Boot Partition Identifier
> 
> +} NVME_BPRSEL;
> 
> +
> 
> +//
> 
> +// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location
> (Optional)
> 
> +//
> 
> +typedef struct {
> 
> +  UINT64  Rsvd1:12;
> 
> +  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base Address
> 
> +} NVME_BPMBL;
> 
> +
> 
> +//
> 
> +// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
Submission
> Queue y Tail Doorbell
> 
>  //
> 
>  typedef struct {
> 
>    UINT16    Sqt;
> 
> @@ -353,7 +389,7 @@ typedef struct {
>    UINT8                Avscc; /* Admin Vendor Specific Command
> Configuration */
> 
>    UINT8                Apsta; /* Autonomous Power State Transition
> Attributes */
> 
>    //
> 
> -  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec
> 
> +  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec
> 
>    //
> 
>    UINT16               Wctemp;      /* Warning Composite
> Temperature Threshold */
> 
>    UINT16               Cctemp;      /* Critical Composite
> Temperature Threshold */
> 
> @@ -361,7 +397,12 @@ typedef struct {
>    UINT32               Hmpre;       /* Host Memory Buffer
> Preferred Size */
> 
>    UINT32               Hmmin;       /* Host Memory Buffer
> Minimum Size */
> 
>    UINT8                Tnvmcap[16]; /* Total NVM Capacity */
> 
> -  UINT8                Rsvd2[216];  /* Reserved as of NVM Express
> */
> 
> +  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity */
> 
> +  UINT32               Rpmbs;       /* Replay Protected Memory
> Block Support */
> 
> +  UINT16               Edstt;       /* Extended Device Self-test
> Time */
> 
> +  UINT8                Dsto;        /* Device Self-test Options  */
> 
> +  UINT8                Fwug;        /* Firmware Update
> Granularity */
> 
> +  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express
> 1.4 Spec */
> 
>    //
> 
>    // NVM Command Set Attributes
> 
>    //
> 
> @@ -433,6 +474,35 @@ typedef struct {
>    UINT8             VendorData[3712]; /* Vendor specific data */
> 
>  } NVME_ADMIN_NAMESPACE_DATA;
> 
> 
> 
> +//
> 
> +// RPMB Device Configuration Block Data Structure as of Nvm Express 1.4
> Spec
> 
> +//
> 
> +typedef struct {
> 
> +  UINT8  Bppe;                /* Boot Partition Protection Enable */
> 
> +  UINT8  Bpl;                 /* Boot Partition Lock */
> 
> +  UINT8  Nwpac;               /* Namespace Write Protection
> Authentication Control */
> 
> +
> 
> +  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4 Spec
> */
> 
> +} NVME_RPMB_CONFIGURATION_DATA;
> 
> +
> 
> +#define RPMB_FRAME_STUFF_BYTES  223
> 
> +
> 
> +//
> 
> +// RPMB Data Frame as of Nvm Express 1.4 Spec
> 
> +//
> 
> +typedef struct {
> 
> +  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /* [222-N:00]
> Stuff Bytes */
> 
> +                                                 /*
> [222:222-(N-1)] Authentication Key or Message Authentication Code (MAC) */
> 
> +  UINT8   Rpmbt;                                 /* RPMB
> Target */
> 
> +  UINT64  Nonce[2];
> 
> +  UINT32  Wcounter;                              /* Write
> Counter */
> 
> +  UINT32  Address;                               /* Starting
> address of data to be programmed to or read from the RPMB. */
> 
> +  UINT32  Scount;                                /* Sector Count
> */
> 
> +  UINT16  Result;
> 
> +  UINT16  Rpmessage;                             /*
> Request/Response Message */
> 
> +//  UINT8  *Data;                                /* Data to be
> written or read by signed access where M = 512 * Sector Count. */
> 
> +} NVME_RPMB_DATA_FRAME;
> 
> +
> 
>  //
> 
>  // NvmExpress Admin Identify Cmd
> 
>  //
> 
> @@ -564,6 +634,7 @@ typedef struct {
>    #define LID_ERROR_INFO    0x1
> 
>    #define LID_SMART_INFO    0x2
> 
>    #define LID_FW_SLOT_INFO  0x3
> 
> +  #define LID_BP_INFO       0x15
> 
>    UINT32    Rsvd1 : 8;
> 
>    UINT32    Numd  : 12;       /* Number of Dwords */
> 
>    UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1 Spec
> */
> 
> --
> 2.26.2.windows.1
> 
> 
> 
> 
> 




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition feature
  2021-12-15  5:41   ` 回复: [edk2-devel] " gaoliming
@ 2021-12-22  8:35     ` Maggie Chu
  2021-12-23  1:33       ` 回复: " gaoliming
       [not found]       ` <16C33E508337ACD4.22520@groups.io>
  0 siblings, 2 replies; 6+ messages in thread
From: Maggie Chu @ 2021-12-22  8:35 UTC (permalink / raw)
  To: devel@edk2.groups.io, Gao, Liming, Liu, Zhiguang; +Cc: Kinney, Michael D

Hi Liming, Hi Michael, 

May I know when will the review process finished and code will be merged ? 

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of gaoliming
Sent: Wednesday, December 15, 2021 1:41 PM
To: devel@edk2.groups.io; Liu, Zhiguang <zhiguang.liu@intel.com>; Chu, Maggie <maggie.chu@intel.com>
Cc: Kinney, Michael D <michael.d.kinney@intel.com>
Subject: 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition feature

Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>

> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Zhiguang Liu
> 发送时间: 2021年12月15日 12:32
> 收件人: Chu, Maggie <maggie.chu@intel.com>; devel@edk2.groups.io
> 抄送: Gao, Liming <gaoliming@byosoft.com.cn>; Kinney, Michael D 
> <michael.d.kinney@intel.com>
> 主题: Re: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition 
> feature
> 
> I have checked that the change follows NVM Express 1.4 Spec
> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
> 
> -----Original Message-----
> From: Chu, Maggie <maggie.chu@intel.com>
> Sent: Wednesday, December 8, 2021 3:18 PM
> To: devel@edk2.groups.io
> Cc: Liming Gao <gaoliming@byosoft.com.cn>; Kinney, Michael D 
> <michael.d.kinney@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
> Subject: [PATCH] MdePkg: Add registers of boot partition feature
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757
> 
> Add registers of boot partition feature which defined in NVM Express 
> 1.4
Spec
> 
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Signed-off-by: Maggie Chu <maggie.chu@intel.com>
> ---
>  MdePkg/Include/IndustryStandard/Nvme.h | 113
> ++++++++++++++++++++-----
>  1 file changed, 92 insertions(+), 21 deletions(-)
> 
> diff --git a/MdePkg/Include/IndustryStandard/Nvme.h
> b/MdePkg/Include/IndustryStandard/Nvme.h
> index 7d4aee9dc8..8387183e4f 100644
> --- a/MdePkg/Include/IndustryStandard/Nvme.h
> +++ b/MdePkg/Include/IndustryStandard/Nvme.h
> @@ -2,11 +2,12 @@
>    Definitions based on NVMe spec. version 1.1.
> 
> 
> 
>    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> 
> -  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2017 - 2021, Intel Corporation. All rights 
> + reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>    @par Specification Reference:
> 
>    NVMe Specification 1.1
> 
> +  NVMe Specification 1.4
> 
> 
> 
>  **/
> 
> 
> 
> @@ -18,18 +19,21 @@
>  //
> 
>  // controller register offsets
> 
>  //
> 
> -#define NVME_CAP_OFFSET    0x0000        // Controller Capabilities
> 
> -#define NVME_VER_OFFSET    0x0008        // Version
> 
> -#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set
> 
> -#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear
> 
> -#define NVME_CC_OFFSET     0x0014        // Controller
> Configuration
> 
> -#define NVME_CSTS_OFFSET   0x001c        // Controller Status
> 
> -#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem Reset
> 
> -#define NVME_AQA_OFFSET    0x0024        // Admin Queue
> Attributes
> 
> -#define NVME_ASQ_OFFSET    0x0028        // Admin Submission
> Queue Base Address
> 
> -#define NVME_ACQ_OFFSET    0x0030        // Admin Completion
> Queue Base Address
> 
> -#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0
> (admin) Tail Doorbell
> 
> -#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0
> (admin) Head Doorbell
> 
> +#define NVME_CAP_OFFSET     0x0000        // Controller
> Capabilities
> 
> +#define NVME_VER_OFFSET     0x0008        // Version
> 
> +#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set
> 
> +#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask Clear
> 
> +#define NVME_CC_OFFSET      0x0014        // Controller
> Configuration
> 
> +#define NVME_CSTS_OFFSET    0x001c        // Controller Status
> 
> +#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem
> Reset
> 
> +#define NVME_AQA_OFFSET     0x0024        // Admin Queue
> Attributes
> 
> +#define NVME_ASQ_OFFSET     0x0028        // Admin Submission
> Queue Base Address
> 
> +#define NVME_ACQ_OFFSET     0x0030        // Admin Completion
> Queue Base Address
> 
> +#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition
> Information
> 
> +#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read
> Select
> 
> +#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition
> Memory Buffer Location
> 
> +#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0
> (admin) Tail Doorbell
> 
> +#define NVME_CQ0_OFFSET     0x1004        // Completion Queue 0
> (admin) Head Doorbell
> 
> 
> 
>  //
> 
>  // These register offsets are defined as 0x1000 + (N * (4 << 
> CAP.DSTRD))
> 
> @@ -51,11 +55,14 @@ typedef struct {
>    UINT8     To;     // Timeout
> 
>    UINT16    Dstrd  : 4;
> 
>    UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS
> 
> -  UINT16    Css    : 4; // Command Sets Supported - Bit 37
> 
> -  UINT16    Rsvd3  : 7;
> 
> -  UINT8     Mpsmin : 4;
> 
> -  UINT8     Mpsmax : 4;
> 
> -  UINT8     Rsvd4;
> 
> +  UINT16    Css:8;     // Command Sets Supported - Bit 37
> 
> +  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4
> 
> +  UINT16    Rsvd3:2;
> 
> +  UINT8     Mpsmin:4;
> 
> +  UINT8     Mpsmax:4;
> 
> +  UINT8     Pmrs:1;
> 
> +  UINT8     Cmbs:1;
> 
> +  UINT8     Rsvd4:6;
> 
>  } NVME_CAP;
> 
> 
> 
>  //
> 
> @@ -115,7 +122,36 @@ typedef struct {
>  #define NVME_ACQ  UINT64
> 
> 
> 
>  //
> 
> -// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
Submission
> Queue y Tail Doorbell
> 
> +// 3.1.13 Offset 40h: BPINFO - Boot Partition Information
> 
> +//
> 
> +typedef struct {
> 
> +  UINT32  Bpsz:15;    // Boot Partition Size
> 
> +  UINT32  Rsvd1:9;
> 
> +  UINT32  Brs:2;      // Boot Read Status
> 
> +  UINT32  Rsvd2:5;
> 
> +  UINT32  Abpid:1;    // Active Boot Partition ID
> 
> +} NVME_BPINFO;
> 
> +
> 
> +//
> 
> +// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select
> 
> +//
> 
> +typedef struct {
> 
> +  UINT32  Bprsz:10;    // Boot Partition Read Size
> 
> +  UINT32  Bprof:20;    // Boot Partition Read Offset
> 
> +  UINT32  Rsvd1:1;
> 
> +  UINT32  Bpid:1;      // Boot Partition Identifier
> 
> +} NVME_BPRSEL;
> 
> +
> 
> +//
> 
> +// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location
> (Optional)
> 
> +//
> 
> +typedef struct {
> 
> +  UINT64  Rsvd1:12;
> 
> +  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base Address
> 
> +} NVME_BPMBL;
> 
> +
> 
> +//
> 
> +// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
Submission
> Queue y Tail Doorbell
> 
>  //
> 
>  typedef struct {
> 
>    UINT16    Sqt;
> 
> @@ -353,7 +389,7 @@ typedef struct {
>    UINT8                Avscc; /* Admin Vendor Specific Command
> Configuration */
> 
>    UINT8                Apsta; /* Autonomous Power State Transition
> Attributes */
> 
>    //
> 
> -  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec
> 
> +  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec
> 
>    //
> 
>    UINT16               Wctemp;      /* Warning Composite
> Temperature Threshold */
> 
>    UINT16               Cctemp;      /* Critical Composite
> Temperature Threshold */
> 
> @@ -361,7 +397,12 @@ typedef struct {
>    UINT32               Hmpre;       /* Host Memory Buffer
> Preferred Size */
> 
>    UINT32               Hmmin;       /* Host Memory Buffer
> Minimum Size */
> 
>    UINT8                Tnvmcap[16]; /* Total NVM Capacity */
> 
> -  UINT8                Rsvd2[216];  /* Reserved as of NVM Express
> */
> 
> +  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity */
> 
> +  UINT32               Rpmbs;       /* Replay Protected Memory
> Block Support */
> 
> +  UINT16               Edstt;       /* Extended Device Self-test
> Time */
> 
> +  UINT8                Dsto;        /* Device Self-test Options  */
> 
> +  UINT8                Fwug;        /* Firmware Update
> Granularity */
> 
> +  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express
> 1.4 Spec */
> 
>    //
> 
>    // NVM Command Set Attributes
> 
>    //
> 
> @@ -433,6 +474,35 @@ typedef struct {
>    UINT8             VendorData[3712]; /* Vendor specific data */
> 
>  } NVME_ADMIN_NAMESPACE_DATA;
> 
> 
> 
> +//
> 
> +// RPMB Device Configuration Block Data Structure as of Nvm Express 
> +1.4
> Spec
> 
> +//
> 
> +typedef struct {
> 
> +  UINT8  Bppe;                /* Boot Partition Protection Enable */
> 
> +  UINT8  Bpl;                 /* Boot Partition Lock */
> 
> +  UINT8  Nwpac;               /* Namespace Write Protection
> Authentication Control */
> 
> +
> 
> +  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4 Spec
> */
> 
> +} NVME_RPMB_CONFIGURATION_DATA;
> 
> +
> 
> +#define RPMB_FRAME_STUFF_BYTES  223
> 
> +
> 
> +//
> 
> +// RPMB Data Frame as of Nvm Express 1.4 Spec
> 
> +//
> 
> +typedef struct {
> 
> +  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /* [222-N:00]
> Stuff Bytes */
> 
> +                                                 /*
> [222:222-(N-1)] Authentication Key or Message Authentication Code 
> (MAC) */
> 
> +  UINT8   Rpmbt;                                 /* RPMB
> Target */
> 
> +  UINT64  Nonce[2];
> 
> +  UINT32  Wcounter;                              /* Write
> Counter */
> 
> +  UINT32  Address;                               /* Starting
> address of data to be programmed to or read from the RPMB. */
> 
> +  UINT32  Scount;                                /* Sector Count
> */
> 
> +  UINT16  Result;
> 
> +  UINT16  Rpmessage;                             /*
> Request/Response Message */
> 
> +//  UINT8  *Data;                                /* Data to be
> written or read by signed access where M = 512 * Sector Count. */
> 
> +} NVME_RPMB_DATA_FRAME;
> 
> +
> 
>  //
> 
>  // NvmExpress Admin Identify Cmd
> 
>  //
> 
> @@ -564,6 +634,7 @@ typedef struct {
>    #define LID_ERROR_INFO    0x1
> 
>    #define LID_SMART_INFO    0x2
> 
>    #define LID_FW_SLOT_INFO  0x3
> 
> +  #define LID_BP_INFO       0x15
> 
>    UINT32    Rsvd1 : 8;
> 
>    UINT32    Numd  : 12;       /* Number of Dwords */
> 
>    UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1 Spec
> */
> 
> --
> 2.26.2.windows.1
> 
> 
> 
> 
> 









^ permalink raw reply	[flat|nested] 6+ messages in thread

* 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition feature
  2021-12-22  8:35     ` Maggie Chu
@ 2021-12-23  1:33       ` gaoliming
       [not found]       ` <16C33E508337ACD4.22520@groups.io>
  1 sibling, 0 replies; 6+ messages in thread
From: gaoliming @ 2021-12-23  1:33 UTC (permalink / raw)
  To: 'Chu, Maggie', devel, 'Liu, Zhiguang'
  Cc: 'Kinney, Michael D'

Create PR https://github.com/tianocore/edk2/pull/2348 for this patch. 

Thanks
Liming
> -----邮件原件-----
> 发件人: Chu, Maggie <maggie.chu@intel.com>
> 发送时间: 2021年12月22日 16:35
> 收件人: devel@edk2.groups.io; Gao, Liming <gaoliming@byosoft.com.cn>;
> Liu, Zhiguang <zhiguang.liu@intel.com>
> 抄送: Kinney, Michael D <michael.d.kinney@intel.com>
> 主题: RE: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> feature
> 
> Hi Liming, Hi Michael,
> 
> May I know when will the review process finished and code will be merged ?
> 
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of gaoliming
> Sent: Wednesday, December 15, 2021 1:41 PM
> To: devel@edk2.groups.io; Liu, Zhiguang <zhiguang.liu@intel.com>; Chu,
> Maggie <maggie.chu@intel.com>
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>
> Subject: 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> feature
> 
> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
> 
> > -----邮件原件-----
> > 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Zhiguang
> Liu
> > 发送时间: 2021年12月15日 12:32
> > 收件人: Chu, Maggie <maggie.chu@intel.com>; devel@edk2.groups.io
> > 抄送: Gao, Liming <gaoliming@byosoft.com.cn>; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > 主题: Re: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> > feature
> >
> > I have checked that the change follows NVM Express 1.4 Spec
> > Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
> >
> > -----Original Message-----
> > From: Chu, Maggie <maggie.chu@intel.com>
> > Sent: Wednesday, December 8, 2021 3:18 PM
> > To: devel@edk2.groups.io
> > Cc: Liming Gao <gaoliming@byosoft.com.cn>; Kinney, Michael D
> > <michael.d.kinney@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
> > Subject: [PATCH] MdePkg: Add registers of boot partition feature
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757
> >
> > Add registers of boot partition feature which defined in NVM Express
> > 1.4
> Spec
> >
> > Cc: Liming Gao <gaoliming@byosoft.com.cn>
> > Cc: Michael D Kinney <michael.d.kinney@intel.com>
> > Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> > Signed-off-by: Maggie Chu <maggie.chu@intel.com>
> > ---
> >  MdePkg/Include/IndustryStandard/Nvme.h | 113
> > ++++++++++++++++++++-----
> >  1 file changed, 92 insertions(+), 21 deletions(-)
> >
> > diff --git a/MdePkg/Include/IndustryStandard/Nvme.h
> > b/MdePkg/Include/IndustryStandard/Nvme.h
> > index 7d4aee9dc8..8387183e4f 100644
> > --- a/MdePkg/Include/IndustryStandard/Nvme.h
> > +++ b/MdePkg/Include/IndustryStandard/Nvme.h
> > @@ -2,11 +2,12 @@
> >    Definitions based on NVMe spec. version 1.1.
> >
> >
> >
> >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> >
> > -  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> >
> > +  Copyright (c) 2017 - 2021, Intel Corporation. All rights
> > + reserved.<BR>
> >
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> >    @par Specification Reference:
> >
> >    NVMe Specification 1.1
> >
> > +  NVMe Specification 1.4
> >
> >
> >
> >  **/
> >
> >
> >
> > @@ -18,18 +19,21 @@
> >  //
> >
> >  // controller register offsets
> >
> >  //
> >
> > -#define NVME_CAP_OFFSET    0x0000        // Controller
> Capabilities
> >
> > -#define NVME_VER_OFFSET    0x0008        // Version
> >
> > -#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set
> >
> > -#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear
> >
> > -#define NVME_CC_OFFSET     0x0014        // Controller
> > Configuration
> >
> > -#define NVME_CSTS_OFFSET   0x001c        // Controller Status
> >
> > -#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem
> Reset
> >
> > -#define NVME_AQA_OFFSET    0x0024        // Admin Queue
> > Attributes
> >
> > -#define NVME_ASQ_OFFSET    0x0028        // Admin Submission
> > Queue Base Address
> >
> > -#define NVME_ACQ_OFFSET    0x0030        // Admin Completion
> > Queue Base Address
> >
> > -#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0
> > (admin) Tail Doorbell
> >
> > -#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0
> > (admin) Head Doorbell
> >
> > +#define NVME_CAP_OFFSET     0x0000        // Controller
> > Capabilities
> >
> > +#define NVME_VER_OFFSET     0x0008        // Version
> >
> > +#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set
> >
> > +#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask
> Clear
> >
> > +#define NVME_CC_OFFSET      0x0014        // Controller
> > Configuration
> >
> > +#define NVME_CSTS_OFFSET    0x001c        // Controller Status
> >
> > +#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem
> > Reset
> >
> > +#define NVME_AQA_OFFSET     0x0024        // Admin Queue
> > Attributes
> >
> > +#define NVME_ASQ_OFFSET     0x0028        // Admin Submission
> > Queue Base Address
> >
> > +#define NVME_ACQ_OFFSET     0x0030        // Admin Completion
> > Queue Base Address
> >
> > +#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition
> > Information
> >
> > +#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read
> > Select
> >
> > +#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition
> > Memory Buffer Location
> >
> > +#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0
> > (admin) Tail Doorbell
> >
> > +#define NVME_CQ0_OFFSET     0x1004        // Completion Queue
> 0
> > (admin) Head Doorbell
> >
> >
> >
> >  //
> >
> >  // These register offsets are defined as 0x1000 + (N * (4 <<
> > CAP.DSTRD))
> >
> > @@ -51,11 +55,14 @@ typedef struct {
> >    UINT8     To;     // Timeout
> >
> >    UINT16    Dstrd  : 4;
> >
> >    UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS
> >
> > -  UINT16    Css    : 4; // Command Sets Supported - Bit 37
> >
> > -  UINT16    Rsvd3  : 7;
> >
> > -  UINT8     Mpsmin : 4;
> >
> > -  UINT8     Mpsmax : 4;
> >
> > -  UINT8     Rsvd4;
> >
> > +  UINT16    Css:8;     // Command Sets Supported - Bit 37
> >
> > +  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4
> >
> > +  UINT16    Rsvd3:2;
> >
> > +  UINT8     Mpsmin:4;
> >
> > +  UINT8     Mpsmax:4;
> >
> > +  UINT8     Pmrs:1;
> >
> > +  UINT8     Cmbs:1;
> >
> > +  UINT8     Rsvd4:6;
> >
> >  } NVME_CAP;
> >
> >
> >
> >  //
> >
> > @@ -115,7 +122,36 @@ typedef struct {
> >  #define NVME_ACQ  UINT64
> >
> >
> >
> >  //
> >
> > -// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
> Submission
> > Queue y Tail Doorbell
> >
> > +// 3.1.13 Offset 40h: BPINFO - Boot Partition Information
> >
> > +//
> >
> > +typedef struct {
> >
> > +  UINT32  Bpsz:15;    // Boot Partition Size
> >
> > +  UINT32  Rsvd1:9;
> >
> > +  UINT32  Brs:2;      // Boot Read Status
> >
> > +  UINT32  Rsvd2:5;
> >
> > +  UINT32  Abpid:1;    // Active Boot Partition ID
> >
> > +} NVME_BPINFO;
> >
> > +
> >
> > +//
> >
> > +// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select
> >
> > +//
> >
> > +typedef struct {
> >
> > +  UINT32  Bprsz:10;    // Boot Partition Read Size
> >
> > +  UINT32  Bprof:20;    // Boot Partition Read Offset
> >
> > +  UINT32  Rsvd1:1;
> >
> > +  UINT32  Bpid:1;      // Boot Partition Identifier
> >
> > +} NVME_BPRSEL;
> >
> > +
> >
> > +//
> >
> > +// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location
> > (Optional)
> >
> > +//
> >
> > +typedef struct {
> >
> > +  UINT64  Rsvd1:12;
> >
> > +  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base Address
> >
> > +} NVME_BPMBL;
> >
> > +
> >
> > +//
> >
> > +// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
> Submission
> > Queue y Tail Doorbell
> >
> >  //
> >
> >  typedef struct {
> >
> >    UINT16    Sqt;
> >
> > @@ -353,7 +389,7 @@ typedef struct {
> >    UINT8                Avscc; /* Admin Vendor Specific Command
> > Configuration */
> >
> >    UINT8                Apsta; /* Autonomous Power State
> Transition
> > Attributes */
> >
> >    //
> >
> > -  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec
> >
> > +  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec
> >
> >    //
> >
> >    UINT16               Wctemp;      /* Warning Composite
> > Temperature Threshold */
> >
> >    UINT16               Cctemp;      /* Critical Composite
> > Temperature Threshold */
> >
> > @@ -361,7 +397,12 @@ typedef struct {
> >    UINT32               Hmpre;       /* Host Memory Buffer
> > Preferred Size */
> >
> >    UINT32               Hmmin;       /* Host Memory Buffer
> > Minimum Size */
> >
> >    UINT8                Tnvmcap[16]; /* Total NVM Capacity */
> >
> > -  UINT8                Rsvd2[216];  /* Reserved as of NVM Express
> > */
> >
> > +  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity
> */
> >
> > +  UINT32               Rpmbs;       /* Replay Protected Memory
> > Block Support */
> >
> > +  UINT16               Edstt;       /* Extended Device Self-test
> > Time */
> >
> > +  UINT8                Dsto;        /* Device Self-test Options
> */
> >
> > +  UINT8                Fwug;        /* Firmware Update
> > Granularity */
> >
> > +  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express
> > 1.4 Spec */
> >
> >    //
> >
> >    // NVM Command Set Attributes
> >
> >    //
> >
> > @@ -433,6 +474,35 @@ typedef struct {
> >    UINT8             VendorData[3712]; /* Vendor specific data */
> >
> >  } NVME_ADMIN_NAMESPACE_DATA;
> >
> >
> >
> > +//
> >
> > +// RPMB Device Configuration Block Data Structure as of Nvm Express
> > +1.4
> > Spec
> >
> > +//
> >
> > +typedef struct {
> >
> > +  UINT8  Bppe;                /* Boot Partition Protection Enable
> */
> >
> > +  UINT8  Bpl;                 /* Boot Partition Lock */
> >
> > +  UINT8  Nwpac;               /* Namespace Write Protection
> > Authentication Control */
> >
> > +
> >
> > +  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4
> Spec
> > */
> >
> > +} NVME_RPMB_CONFIGURATION_DATA;
> >
> > +
> >
> > +#define RPMB_FRAME_STUFF_BYTES  223
> >
> > +
> >
> > +//
> >
> > +// RPMB Data Frame as of Nvm Express 1.4 Spec
> >
> > +//
> >
> > +typedef struct {
> >
> > +  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /*
> [222-N:00]
> > Stuff Bytes */
> >
> > +                                                 /*
> > [222:222-(N-1)] Authentication Key or Message Authentication Code
> > (MAC) */
> >
> > +  UINT8   Rpmbt;                                 /* RPMB
> > Target */
> >
> > +  UINT64  Nonce[2];
> >
> > +  UINT32  Wcounter;                              /* Write
> > Counter */
> >
> > +  UINT32  Address;                               /* Starting
> > address of data to be programmed to or read from the RPMB. */
> >
> > +  UINT32  Scount;                                /* Sector
> Count
> > */
> >
> > +  UINT16  Result;
> >
> > +  UINT16  Rpmessage;                             /*
> > Request/Response Message */
> >
> > +//  UINT8  *Data;                                /* Data to be
> > written or read by signed access where M = 512 * Sector Count. */
> >
> > +} NVME_RPMB_DATA_FRAME;
> >
> > +
> >
> >  //
> >
> >  // NvmExpress Admin Identify Cmd
> >
> >  //
> >
> > @@ -564,6 +634,7 @@ typedef struct {
> >    #define LID_ERROR_INFO    0x1
> >
> >    #define LID_SMART_INFO    0x2
> >
> >    #define LID_FW_SLOT_INFO  0x3
> >
> > +  #define LID_BP_INFO       0x15
> >
> >    UINT32    Rsvd1 : 8;
> >
> >    UINT32    Numd  : 12;       /* Number of Dwords */
> >
> >    UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1
> Spec
> > */
> >
> > --
> > 2.26.2.windows.1
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 
> 
> 




^ permalink raw reply	[flat|nested] 6+ messages in thread

* 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition feature
       [not found]       ` <16C33E508337ACD4.22520@groups.io>
@ 2021-12-24  2:45         ` gaoliming
  0 siblings, 0 replies; 6+ messages in thread
From: gaoliming @ 2021-12-24  2:45 UTC (permalink / raw)
  To: devel, gaoliming, 'Chu, Maggie', 'Liu, Zhiguang'
  Cc: 'Kinney, Michael D'

Maggie:
  PR reports the Uncrustify issue for this patch. Can you help check this issue?

ERROR - /home/vsts/work/1/s/MdePkg/Include/IndustryStandard/Nvme.h
ERROR - --->Test Failed: Uncrustify Coding Standard Test NO-TARGET returned 1

Thanks
Liming
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 gaoliming
> 发送时间: 2021年12月23日 9:33
> 收件人: 'Chu, Maggie' <maggie.chu@intel.com>; devel@edk2.groups.io; 'Liu,
> Zhiguang' <zhiguang.liu@intel.com>
> 抄送: 'Kinney, Michael D' <michael.d.kinney@intel.com>
> 主题: 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> feature
> 
> Create PR https://github.com/tianocore/edk2/pull/2348 for this patch.
> 
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: Chu, Maggie <maggie.chu@intel.com>
> > 发送时间: 2021年12月22日 16:35
> > 收件人: devel@edk2.groups.io; Gao, Liming <gaoliming@byosoft.com.cn>;
> > Liu, Zhiguang <zhiguang.liu@intel.com>
> > 抄送: Kinney, Michael D <michael.d.kinney@intel.com>
> > 主题: RE: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> > feature
> >
> > Hi Liming, Hi Michael,
> >
> > May I know when will the review process finished and code will be merged ?
> >
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> gaoliming
> > Sent: Wednesday, December 15, 2021 1:41 PM
> > To: devel@edk2.groups.io; Liu, Zhiguang <zhiguang.liu@intel.com>; Chu,
> > Maggie <maggie.chu@intel.com>
> > Cc: Kinney, Michael D <michael.d.kinney@intel.com>
> > Subject: 回复: [edk2-devel] [PATCH] MdePkg: Add registers of boot
> partition
> > feature
> >
> > Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
> >
> > > -----邮件原件-----
> > > 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Zhiguang
> > Liu
> > > 发送时间: 2021年12月15日 12:32
> > > 收件人: Chu, Maggie <maggie.chu@intel.com>; devel@edk2.groups.io
> > > 抄送: Gao, Liming <gaoliming@byosoft.com.cn>; Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > 主题: Re: [edk2-devel] [PATCH] MdePkg: Add registers of boot partition
> > > feature
> > >
> > > I have checked that the change follows NVM Express 1.4 Spec
> > > Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
> > >
> > > -----Original Message-----
> > > From: Chu, Maggie <maggie.chu@intel.com>
> > > Sent: Wednesday, December 8, 2021 3:18 PM
> > > To: devel@edk2.groups.io
> > > Cc: Liming Gao <gaoliming@byosoft.com.cn>; Kinney, Michael D
> > > <michael.d.kinney@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
> > > Subject: [PATCH] MdePkg: Add registers of boot partition feature
> > >
> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3757
> > >
> > > Add registers of boot partition feature which defined in NVM Express
> > > 1.4
> > Spec
> > >
> > > Cc: Liming Gao <gaoliming@byosoft.com.cn>
> > > Cc: Michael D Kinney <michael.d.kinney@intel.com>
> > > Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> > > Signed-off-by: Maggie Chu <maggie.chu@intel.com>
> > > ---
> > >  MdePkg/Include/IndustryStandard/Nvme.h | 113
> > > ++++++++++++++++++++-----
> > >  1 file changed, 92 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/MdePkg/Include/IndustryStandard/Nvme.h
> > > b/MdePkg/Include/IndustryStandard/Nvme.h
> > > index 7d4aee9dc8..8387183e4f 100644
> > > --- a/MdePkg/Include/IndustryStandard/Nvme.h
> > > +++ b/MdePkg/Include/IndustryStandard/Nvme.h
> > > @@ -2,11 +2,12 @@
> > >    Definitions based on NVMe spec. version 1.1.
> > >
> > >
> > >
> > >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> > >
> > > -  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> > >
> > > +  Copyright (c) 2017 - 2021, Intel Corporation. All rights
> > > + reserved.<BR>
> > >
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >
> > >
> > >    @par Specification Reference:
> > >
> > >    NVMe Specification 1.1
> > >
> > > +  NVMe Specification 1.4
> > >
> > >
> > >
> > >  **/
> > >
> > >
> > >
> > > @@ -18,18 +19,21 @@
> > >  //
> > >
> > >  // controller register offsets
> > >
> > >  //
> > >
> > > -#define NVME_CAP_OFFSET    0x0000        // Controller
> > Capabilities
> > >
> > > -#define NVME_VER_OFFSET    0x0008        // Version
> > >
> > > -#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set
> > >
> > > -#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask
> Clear
> > >
> > > -#define NVME_CC_OFFSET     0x0014        // Controller
> > > Configuration
> > >
> > > -#define NVME_CSTS_OFFSET   0x001c        // Controller Status
> > >
> > > -#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem
> > Reset
> > >
> > > -#define NVME_AQA_OFFSET    0x0024        // Admin Queue
> > > Attributes
> > >
> > > -#define NVME_ASQ_OFFSET    0x0028        // Admin Submission
> > > Queue Base Address
> > >
> > > -#define NVME_ACQ_OFFSET    0x0030        // Admin Completion
> > > Queue Base Address
> > >
> > > -#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0
> > > (admin) Tail Doorbell
> > >
> > > -#define NVME_CQ0_OFFSET    0x1004        // Completion Queue
> 0
> > > (admin) Head Doorbell
> > >
> > > +#define NVME_CAP_OFFSET     0x0000        // Controller
> > > Capabilities
> > >
> > > +#define NVME_VER_OFFSET     0x0008        // Version
> > >
> > > +#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask
> Set
> > >
> > > +#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask
> > Clear
> > >
> > > +#define NVME_CC_OFFSET      0x0014        // Controller
> > > Configuration
> > >
> > > +#define NVME_CSTS_OFFSET    0x001c        // Controller Status
> > >
> > > +#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem
> > > Reset
> > >
> > > +#define NVME_AQA_OFFSET     0x0024        // Admin Queue
> > > Attributes
> > >
> > > +#define NVME_ASQ_OFFSET     0x0028        // Admin Submission
> > > Queue Base Address
> > >
> > > +#define NVME_ACQ_OFFSET     0x0030        // Admin
> Completion
> > > Queue Base Address
> > >
> > > +#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition
> > > Information
> > >
> > > +#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition
> Read
> > > Select
> > >
> > > +#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition
> > > Memory Buffer Location
> > >
> > > +#define NVME_SQ0_OFFSET     0x1000        // Submission Queue
> 0
> > > (admin) Tail Doorbell
> > >
> > > +#define NVME_CQ0_OFFSET     0x1004        // Completion
> Queue
> > 0
> > > (admin) Head Doorbell
> > >
> > >
> > >
> > >  //
> > >
> > >  // These register offsets are defined as 0x1000 + (N * (4 <<
> > > CAP.DSTRD))
> > >
> > > @@ -51,11 +55,14 @@ typedef struct {
> > >    UINT8     To;     // Timeout
> > >
> > >    UINT16    Dstrd  : 4;
> > >
> > >    UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS
> > >
> > > -  UINT16    Css    : 4; // Command Sets Supported - Bit 37
> > >
> > > -  UINT16    Rsvd3  : 7;
> > >
> > > -  UINT8     Mpsmin : 4;
> > >
> > > -  UINT8     Mpsmax : 4;
> > >
> > > -  UINT8     Rsvd4;
> > >
> > > +  UINT16    Css:8;     // Command Sets Supported - Bit 37
> > >
> > > +  UINT16    Bps:1;     // Boot Partition Support - Bit 45 in NVMe1.4
> > >
> > > +  UINT16    Rsvd3:2;
> > >
> > > +  UINT8     Mpsmin:4;
> > >
> > > +  UINT8     Mpsmax:4;
> > >
> > > +  UINT8     Pmrs:1;
> > >
> > > +  UINT8     Cmbs:1;
> > >
> > > +  UINT8     Rsvd4:6;
> > >
> > >  } NVME_CAP;
> > >
> > >
> > >
> > >  //
> > >
> > > @@ -115,7 +122,36 @@ typedef struct {
> > >  #define NVME_ACQ  UINT64
> > >
> > >
> > >
> > >  //
> > >
> > > -// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
> > Submission
> > > Queue y Tail Doorbell
> > >
> > > +// 3.1.13 Offset 40h: BPINFO - Boot Partition Information
> > >
> > > +//
> > >
> > > +typedef struct {
> > >
> > > +  UINT32  Bpsz:15;    // Boot Partition Size
> > >
> > > +  UINT32  Rsvd1:9;
> > >
> > > +  UINT32  Brs:2;      // Boot Read Status
> > >
> > > +  UINT32  Rsvd2:5;
> > >
> > > +  UINT32  Abpid:1;    // Active Boot Partition ID
> > >
> > > +} NVME_BPINFO;
> > >
> > > +
> > >
> > > +//
> > >
> > > +// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select
> > >
> > > +//
> > >
> > > +typedef struct {
> > >
> > > +  UINT32  Bprsz:10;    // Boot Partition Read Size
> > >
> > > +  UINT32  Bprof:20;    // Boot Partition Read Offset
> > >
> > > +  UINT32  Rsvd1:1;
> > >
> > > +  UINT32  Bpid:1;      // Boot Partition Identifier
> > >
> > > +} NVME_BPRSEL;
> > >
> > > +
> > >
> > > +//
> > >
> > > +// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location
> > > (Optional)
> > >
> > > +//
> > >
> > > +typedef struct {
> > >
> > > +  UINT64  Rsvd1:12;
> > >
> > > +  UINT64  Bmbba:52;    // Boot Partition Memory Buffer Base
> Address
> > >
> > > +} NVME_BPMBL;
> > >
> > > +
> > >
> > > +//
> > >
> > > +// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL -
> > Submission
> > > Queue y Tail Doorbell
> > >
> > >  //
> > >
> > >  typedef struct {
> > >
> > >    UINT16    Sqt;
> > >
> > > @@ -353,7 +389,7 @@ typedef struct {
> > >    UINT8                Avscc; /* Admin Vendor Specific Command
> > > Configuration */
> > >
> > >    UINT8                Apsta; /* Autonomous Power State
> > Transition
> > > Attributes */
> > >
> > >    //
> > >
> > > -  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec
> > >
> > > +  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec
> > >
> > >    //
> > >
> > >    UINT16               Wctemp;      /* Warning Composite
> > > Temperature Threshold */
> > >
> > >    UINT16               Cctemp;      /* Critical Composite
> > > Temperature Threshold */
> > >
> > > @@ -361,7 +397,12 @@ typedef struct {
> > >    UINT32               Hmpre;       /* Host Memory Buffer
> > > Preferred Size */
> > >
> > >    UINT32               Hmmin;       /* Host Memory Buffer
> > > Minimum Size */
> > >
> > >    UINT8                Tnvmcap[16]; /* Total NVM Capacity */
> > >
> > > -  UINT8                Rsvd2[216];  /* Reserved as of NVM
> Express
> > > */
> > >
> > > +  UINT8                Unvmcap[16]; /* Unallocated NVM
> Capacity
> > */
> > >
> > > +  UINT32               Rpmbs;       /* Replay Protected
> Memory
> > > Block Support */
> > >
> > > +  UINT16               Edstt;       /* Extended Device Self-test
> > > Time */
> > >
> > > +  UINT8                Dsto;        /* Device Self-test Options
> > */
> > >
> > > +  UINT8                Fwug;        /* Firmware Update
> > > Granularity */
> > >
> > > +  UINT8                Rsvd2[192];  /* Reserved as of Nvm
> Express
> > > 1.4 Spec */
> > >
> > >    //
> > >
> > >    // NVM Command Set Attributes
> > >
> > >    //
> > >
> > > @@ -433,6 +474,35 @@ typedef struct {
> > >    UINT8             VendorData[3712]; /* Vendor specific data */
> > >
> > >  } NVME_ADMIN_NAMESPACE_DATA;
> > >
> > >
> > >
> > > +//
> > >
> > > +// RPMB Device Configuration Block Data Structure as of Nvm Express
> > > +1.4
> > > Spec
> > >
> > > +//
> > >
> > > +typedef struct {
> > >
> > > +  UINT8  Bppe;                /* Boot Partition Protection Enable
> > */
> > >
> > > +  UINT8  Bpl;                 /* Boot Partition Lock */
> > >
> > > +  UINT8  Nwpac;               /* Namespace Write Protection
> > > Authentication Control */
> > >
> > > +
> > >
> > > +  UINT8  Rsvd1[509];          /* Reserved as of Nvm Express 1.4
> > Spec
> > > */
> > >
> > > +} NVME_RPMB_CONFIGURATION_DATA;
> > >
> > > +
> > >
> > > +#define RPMB_FRAME_STUFF_BYTES  223
> > >
> > > +
> > >
> > > +//
> > >
> > > +// RPMB Data Frame as of Nvm Express 1.4 Spec
> > >
> > > +//
> > >
> > > +typedef struct {
> > >
> > > +  UINT8   Sbakamc[RPMB_FRAME_STUFF_BYTES];       /*
> > [222-N:00]
> > > Stuff Bytes */
> > >
> > > +                                                 /*
> > > [222:222-(N-1)] Authentication Key or Message Authentication Code
> > > (MAC) */
> > >
> > > +  UINT8   Rpmbt;                                 /* RPMB
> > > Target */
> > >
> > > +  UINT64  Nonce[2];
> > >
> > > +  UINT32  Wcounter;                              /* Write
> > > Counter */
> > >
> > > +  UINT32  Address;                               /* Starting
> > > address of data to be programmed to or read from the RPMB. */
> > >
> > > +  UINT32  Scount;                                /* Sector
> > Count
> > > */
> > >
> > > +  UINT16  Result;
> > >
> > > +  UINT16  Rpmessage;                             /*
> > > Request/Response Message */
> > >
> > > +//  UINT8  *Data;                                /* Data to
> be
> > > written or read by signed access where M = 512 * Sector Count. */
> > >
> > > +} NVME_RPMB_DATA_FRAME;
> > >
> > > +
> > >
> > >  //
> > >
> > >  // NvmExpress Admin Identify Cmd
> > >
> > >  //
> > >
> > > @@ -564,6 +634,7 @@ typedef struct {
> > >    #define LID_ERROR_INFO    0x1
> > >
> > >    #define LID_SMART_INFO    0x2
> > >
> > >    #define LID_FW_SLOT_INFO  0x3
> > >
> > > +  #define LID_BP_INFO       0x15
> > >
> > >    UINT32    Rsvd1 : 8;
> > >
> > >    UINT32    Numd  : 12;       /* Number of Dwords */
> > >
> > >    UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1
> > Spec
> > > */
> > >
> > > --
> > > 2.26.2.windows.1
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 
> 
> 




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-12-24  2:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-08  7:17 [PATCH] MdePkg: Add registers of boot partition feature Maggie Chu
2021-12-15  4:32 ` Zhiguang Liu
2021-12-15  5:41   ` 回复: [edk2-devel] " gaoliming
2021-12-22  8:35     ` Maggie Chu
2021-12-23  1:33       ` 回复: " gaoliming
     [not found]       ` <16C33E508337ACD4.22520@groups.io>
2021-12-24  2:45         ` gaoliming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox