public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "gaoliming" <gaoliming@byosoft.com.cn>
To: "'Maggie Chu'" <maggie.chu@intel.com>, <devel@edk2.groups.io>
Cc: "'Michael D Kinney'" <michael.d.kinney@intel.com>,
	"'Zhiguang Liu'" <zhiguang.liu@intel.com>
Subject: 回复: [PATCH v2] MdePkg: Add registers of boot partition feature
Date: Tue, 4 Jan 2022 11:29:53 +0800	[thread overview]
Message-ID: <012b01d8011b$569d6510$03d82f30$@byosoft.com.cn> (raw)
In-Reply-To: <20211226155440.1726-1-maggie.chu@intel.com>

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

> -----邮件原件-----
> 发件人: Maggie Chu <maggie.chu@intel.com>
> 发送时间: 2021年12月26日 23:55
> 收件人: devel@edk2.groups.io
> 抄送: Liming Gao <gaoliming@byosoft.com.cn>; Michael D Kinney
> <michael.d.kinney@intel.com>; Zhiguang Liu <zhiguang.liu@intel.com>
> 主题: [PATCH v2] 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 | 108
> ++++++++++++++++++++-----
>  1 file changed, 89 insertions(+), 19 deletions(-)
> 
> diff --git a/MdePkg/Include/IndustryStandard/Nvme.h
> b/MdePkg/Include/IndustryStandard/Nvme.h
> index 7d4aee9dc8..8a2c747a85 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;
> 
> +  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     Rsvd4;
> 
> +  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,34 @@ 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 +633,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




      reply	other threads:[~2022-01-04  3:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-26 15:54 [PATCH v2] MdePkg: Add registers of boot partition feature Maggie Chu
2022-01-04  3:29 ` gaoliming [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='012b01d8011b$569d6510$03d82f30$@byosoft.com.cn' \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox