Page MenuHomeFreeBSD

D59628.id186579.diff
No OneTemporary

D59628.id186579.diff

diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -103,6 +103,11 @@
#define NVME_CAP_HI_REG_CSS_MASK (0xff)
#define NVME_CAP_HI_REG_CSS_NVM_SHIFT (5)
#define NVME_CAP_HI_REG_CSS_NVM_MASK (0x1)
+
+/* CAP.CSS command set support flags */
+#define NVME_CAP_CSS_NVM (0x01)
+#define NVME_CAP_CSS_IOCSS (0x40)
+#define NVME_CAP_CSS_NOIOCSS (0x80)
#define NVME_CAP_HI_REG_BPS_SHIFT (13)
#define NVME_CAP_HI_REG_BPS_MASK (0x1)
#define NVME_CAP_HI_REG_CPS_SHIFT (14)
@@ -152,6 +157,10 @@
#define NVME_CC_REG_EN_MASK (0x1)
#define NVME_CC_REG_CSS_SHIFT (4)
#define NVME_CC_REG_CSS_MASK (0x7)
+/* CC.CSS values */
+#define NVME_CC_CSS_NVM (0x0)
+#define NVME_CC_CSS_IOCSS (0x6)
+#define NVME_CC_CSS_ADMIN (0x7)
#define NVME_CC_REG_MPS_SHIFT (7)
#define NVME_CC_REG_MPS_MASK (0xF)
#define NVME_CC_REG_AMS_SHIFT (11)
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -363,7 +363,7 @@
uint32_t csts;
uint32_t aqa;
uint32_t qsize;
- uint8_t en, rdy;
+ uint8_t css, en, rdy;
int err;
cc = nvme_mmio_read_4(ctrlr, cc);
@@ -400,7 +400,16 @@
/* Initialization values for CC */
cc = 0;
cc |= NVMEF(NVME_CC_REG_EN, 1);
- cc |= NVMEF(NVME_CC_REG_CSS, 0);
+ /* No CSI support; prefer the NVM command set when present. */
+ css = NVME_CAP_HI_CSS(ctrlr->cap_hi);
+ if (css & NVME_CAP_CSS_NVM)
+ cc |= NVMEF(NVME_CC_REG_CSS, NVME_CC_CSS_NVM);
+ else if (css & NVME_CAP_CSS_NOIOCSS)
+ cc |= NVMEF(NVME_CC_REG_CSS, NVME_CC_CSS_ADMIN);
+ else if (css & NVME_CAP_CSS_IOCSS)
+ cc |= NVMEF(NVME_CC_REG_CSS, NVME_CC_CSS_IOCSS);
+ else
+ cc |= NVMEF(NVME_CC_REG_CSS, NVME_CC_CSS_NVM);
cc |= NVMEF(NVME_CC_REG_AMS, 0);
cc |= NVMEF(NVME_CC_REG_SHN, 0);
cc |= NVMEF(NVME_CC_REG_IOSQES, ctrlr->io_sqes);

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 14, 11:51 AM (15 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38905305
Default Alt Text
D59628.id186579.diff (1 KB)

Event Timeline