Skip to content

Commit 8a07488

Browse files
jeff-lien-sndkigaw
authored andcommitted
sndk: Fix SN861 drive-resize capability
The drive-resize command capability was not correctly set in the nvme over fabric attached case. This change will resolve that by using the form factor value to determine which drives support this command. Signed-off-by: jeff-lien-sndk <[email protected]>
1 parent aec61a0 commit 8a07488

File tree

3 files changed

+60
-11
lines changed

3 files changed

+60
-11
lines changed

plugins/sandisk/sandisk-nvme.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -552,9 +552,7 @@ static int sndk_drive_resize(int argc, char **argv,
552552
capabilities = sndk_get_drive_capabilities(r, dev);
553553
ret = sndk_get_pci_ids(r, dev, &device_id, &vendor_id);
554554

555-
if (((capabilities & SNDK_DRIVE_CAP_RESIZE) == SNDK_DRIVE_CAP_RESIZE) &&
556-
((device_id == SNDK_NVME_SN861_DEV_ID_U2) ||
557-
(device_id == SNDK_NVME_SN861_DEV_ID_E3S))) {
555+
if ((capabilities & SNDK_DRIVE_CAP_RESIZE_SN861) == SNDK_DRIVE_CAP_RESIZE_SN861) {
558556
ret = sndk_do_sn861_drive_resize(dev, cfg.size, &result);
559557

560558
if (!ret) {
@@ -1054,7 +1052,7 @@ static int sndk_capabilities(int argc, char **argv,
10541052
printf("clear-assert-dump : %s\n",
10551053
capabilities & SNDK_DRIVE_CAP_CLEAR_ASSERT ? "Supported" : "Not Supported");
10561054
printf("drive-resize : %s\n",
1057-
capabilities & SNDK_DRIVE_CAP_RESIZE ? "Supported" : "Not Supported");
1055+
capabilities & SNDK_DRIVE_CAP_RESIZE_MASK ? "Supported" : "Not Supported");
10581056
printf("vs-fw-activate-history : %s\n",
10591057
capabilities & SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_MASK ? "Supported" :
10601058
"Not Supported");

plugins/sandisk/sandisk-utils.c

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,22 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
569569
break;
570570

571571
case SNDK_NVME_SN861_DEV_ID_E1S:
572+
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
573+
SNDK_DRIVE_CAP_C3_LOG_PAGE |
574+
SNDK_DRIVE_CAP_CA_LOG_PAGE |
575+
SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE |
576+
SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE |
577+
SNDK_DRIVE_CAP_INTERNAL_LOG |
578+
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
579+
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
580+
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
581+
SNDK_DRIVE_CAP_INFO |
582+
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
583+
SNDK_DRIVE_CAP_LOG_PAGE_DIR |
584+
SNDK_DRIVE_CAP_DRIVE_STATUS |
585+
SNDK_DRIVE_CAP_SET_LATENCY_MONITOR);
586+
break;
587+
572588
case SNDK_NVME_SN861_DEV_ID_U2:
573589
case SNDK_NVME_SN861_DEV_ID_E3S:
574590
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
@@ -584,7 +600,7 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
584600
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
585601
SNDK_DRIVE_CAP_LOG_PAGE_DIR |
586602
SNDK_DRIVE_CAP_DRIVE_STATUS |
587-
SNDK_DRIVE_CAP_RESIZE |
603+
SNDK_DRIVE_CAP_RESIZE_SN861 |
588604
SNDK_DRIVE_CAP_SET_LATENCY_MONITOR);
589605
break;
590606

@@ -624,7 +640,8 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
624640
int ret;
625641
uint32_t read_vendor_id;
626642
__u64 capabilities = 0;
627-
__u32 cust_id, market_name_len;
643+
__u32 cust_id, market_name_len,
644+
drive_form_factor = 0;
628645
char marketing_name[64];
629646
void *dev_mng_log = NULL;
630647
int uuid_index = 0;
@@ -683,12 +700,20 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
683700
(void *)&cust_id))
684701
fprintf(stderr, "ERROR: SNDK: Get Customer FW ID Failed\n");
685702

703+
/* Get the marketing name */
686704
if (!sndk_nvme_parse_dev_status_log_str(dev_mng_log,
687705
SNDK_C2_MARKETING_NAME_ID,
688706
(char *)marketing_name,
689707
&market_name_len))
690708
fprintf(stderr, "ERROR: SNDK: Get Marketing Name Failed\n");
691709

710+
/* Get the drive form factor */
711+
if (!sndk_nvme_parse_dev_status_log_entry(dev_mng_log,
712+
SNDK_C2_FORM_FACTOR,
713+
(void *)&drive_form_factor))
714+
fprintf(stderr, "ERROR: SNDK: Getting Form Factor Failed\n");
715+
716+
692717
/* verify the 0xC3 log page is supported */
693718
if (run_wdc_nvme_check_supported_log_page(r, dev,
694719
SNDK_LATENCY_MON_LOG_ID, 0))
@@ -712,14 +737,24 @@ __u64 sndk_get_enc_drive_capabilities(nvme_root_t r,
712737
if ((cust_id == SNDK_CUSTOMER_ID_0x1004) ||
713738
(cust_id == SNDK_CUSTOMER_ID_0x1008) ||
714739
(cust_id == SNDK_CUSTOMER_ID_0x1005) ||
715-
(cust_id == SNDK_CUSTOMER_ID_0x1304) ||
716-
(!strncmp(marketing_name, SNDK_SN861_MARKETING_NAME_1, market_name_len)) ||
717-
(!strncmp(marketing_name, SNDK_SN861_MARKETING_NAME_2, market_name_len)))
740+
(cust_id == SNDK_CUSTOMER_ID_0x1304))
718741
/* Set capabilities for OCP compliant drives */
719742
capabilities |= (SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
720743
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
721744
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE);
722-
else {
745+
else if ((!strncmp(marketing_name, SNDK_SN861_MARKETING_NAME_1, market_name_len)) ||
746+
(!strncmp(marketing_name, SNDK_SN861_MARKETING_NAME_2, market_name_len))) {
747+
/* Set capabilities for OCP compliant drives */
748+
capabilities |= (SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
749+
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
750+
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE);
751+
752+
if ((drive_form_factor == SNDK_C2_FORM_FACTOR_SFF_U2) ||
753+
(drive_form_factor == SNDK_C2_FORM_FACTOR_EDSFF_E3S))
754+
capabilities |= SNDK_DRIVE_CAP_RESIZE_SN861;
755+
else
756+
capabilities &= ~SNDK_DRIVE_CAP_RESIZE;
757+
} else {
723758
capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
724759
SNDK_DRIVE_CAP_CLEAR_PCIE);
725760

plugins/sandisk/sandisk-utils.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
#define SNDK_DRIVE_CAP_CLEAR_PCIE 0x0000000000000080
109109
#define SNDK_DRIVE_CAP_RESIZE 0x0000000000000100
110110
#define SNDK_DRIVE_CAP_NAND_STATS 0x0000000000000200
111-
#define SNDK_DRIVE_CAP_RESERVED2 0x0000000000000400
111+
#define SNDK_DRIVE_CAP_RESIZE_SN861 0x0000000000000400
112112
#define SNDK_DRIVE_CAP_RESERVED3 0x0000000000000800
113113
#define SNDK_DRIVE_CAP_RESERVED4 0x0000000000001000
114114
#define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY 0x0000000000002000
@@ -141,6 +141,7 @@
141141
#define SNDK_DRIVE_CAP_DEVICE_WAF 0x0000010000000000
142142
#define SNDK_DRIVE_CAP_SET_LATENCY_MONITOR 0x0000020000000000
143143
#define SNDK_DRIVE_CAP_UDUI 0x0000040000000000
144+
144145
/* Any new capability flags should be added to the WDC plugin */
145146

146147
#define SNDK_DRIVE_CAP_SMART_LOG_MASK (SNDK_DRIVE_CAP_C0_LOG_PAGE | \
@@ -159,6 +160,8 @@
159160
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2)
160161
#define SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY_MASK (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | \
161162
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY)
163+
#define SNDK_DRIVE_CAP_RESIZE_MASK (SNDK_DRIVE_CAP_RESIZE | \
164+
SNDK_DRIVE_CAP_RESIZE_SN861)
162165

163166
/* Vendor defined Log Page IDs */
164167
#define SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID 0xC0
@@ -178,11 +181,24 @@
178181

179182
#define SNDK_C2_MARKETING_NAME_ID 0x07
180183
#define SNDK_C2_LOG_PAGES_SUPPORTED_ID 0x08
184+
#define SNDK_C2_FORM_FACTOR 0x0A
181185
#define SNDK_C2_CUSTOMER_ID_ID 0x15
182186

183187
#define SNDK_SN861_MARKETING_NAME_1 "Ultrastar DC SN861"
184188
#define SNDK_SN861_MARKETING_NAME_2 "ULTRASTAR DC SN861"
185189

190+
#define SNDK_C2_FORM_FACTOR_UNKNOWN 0x00000000
191+
#define SNDK_C2_FORM_FACTOR_SFF_U2 0x00000001
192+
#define SNDK_C2_FORM_FACTOR_HHHL 0x00000002
193+
#define SNDK_C2_FORM_FACTOR_MEZZANINE 0x00000003
194+
#define SNDK_C2_FORM_FACTOR_M2 0x00000004
195+
#define SNDK_C2_FORM_FACTOR_EDSFF_E1L 0x00000005
196+
#define SNDK_C2_FORM_FACTOR_EDSFF_E1S 0x00000006
197+
#define SNDK_C2_FORM_FACTOR_SFF_U3 0x00000007
198+
#define SNDK_C2_FORM_FACTOR_EDSFF_E3L 0x00000008
199+
#define SNDK_C2_FORM_FACTOR_EDSFF_E3S 0x00000009
200+
#define SNDK_C2_FORM_FACTOR_EDSFF_E2 0x0000000A
201+
186202
/* Vendor defined Feature IDs */
187203
#define SNDK_NVME_CLEAR_FW_ACT_HIST_VU_FID 0xC1
188204
#define SNDK_VU_DISABLE_CNTLR_TELEMETRY_OPTION_FEATURE_ID 0xD2

0 commit comments

Comments
 (0)