Skip to content

Commit cb70bd3

Browse files
brandon-paupore-sndkigaw
authored andcommitted
sndk: rework shared capabilities with wdc plugin
When we split things off for the SanDisk plugin there were a few capability flags left off, which cause mismatches between the versions maintained for the WDC plugin. For now, this updates the flags to use shared values between the plugins, allowing for proper determination of support using the various run_wdc functions. This also adds one missing capabilities check for a command still supported in the new plugin. Reviewed-by: Jeffrey Lien <[email protected]> Signed-off-by: Brandon Paupore <[email protected]>
1 parent 22ad43b commit cb70bd3

5 files changed

Lines changed: 59 additions & 305 deletions

File tree

plugins/sandisk/sandisk-nvme.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ static int sndk_capabilities(int argc, char **argv,
172172
capabilities & SNDK_DRIVE_CAP_CLEAR_PCIE_MASK ? "Supported" : "Not Supported");
173173
printf("get-drive-status : %s\n",
174174
capabilities & SNDK_DRIVE_CAP_DRIVE_STATUS ? "Supported" : "Not Supported");
175+
printf("clear-assert-dump : %s\n",
176+
capabilities & SNDK_DRIVE_CAP_CLEAR_ASSERT ? "Supported" : "Not Supported");
175177
printf("drive-resize : %s\n",
176178
capabilities & SNDK_DRIVE_CAP_RESIZE ? "Supported" : "Not Supported");
177179
printf("vs-fw-activate-history : %s\n",

plugins/sandisk/sandisk-utils.c

Lines changed: 4 additions & 268 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
137137

138138
int ret;
139139
uint32_t read_device_id = -1, read_vendor_id = -1;
140-
__u32 cust_id;
141140

142141
ret = sndk_get_pci_ids(r, dev, &read_device_id, &read_vendor_id);
143142
if (ret < 0) {
@@ -158,201 +157,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
158157
switch (read_vendor_id) {
159158
case SNDK_NVME_WDC_VID:
160159
switch (read_device_id) {
161-
case SNDK_NVME_SN630_DEV_ID:
162-
case SNDK_NVME_SN630_DEV_ID_1:
163-
capabilities = (SNDK_DRIVE_CAP_INTERNAL_LOG |
164-
SNDK_DRIVE_CAP_DRIVE_STATUS |
165-
SNDK_DRIVE_CAP_CLEAR_ASSERT |
166-
SNDK_DRIVE_CAP_RESIZE |
167-
SNDK_DRIVE_CAP_CLEAR_PCIE);
168-
/* verify the 0xCA log page is supported */
169-
if (run_wdc_nvme_check_supported_log_page(r, dev,
170-
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
171-
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;
172-
173-
/* verify the 0xD0 log page is supported */
174-
if (run_wdc_nvme_check_supported_log_page(r, dev,
175-
SNDK_NVME_GET_VU_SMART_LOG_ID))
176-
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;
177-
break;
178-
179-
case SNDK_NVME_SN640_DEV_ID:
180-
case SNDK_NVME_SN640_DEV_ID_1:
181-
case SNDK_NVME_SN640_DEV_ID_2:
182-
case SNDK_NVME_SN640_DEV_ID_3:
183-
/* verify the 0xC0 log page is supported */
184-
if (run_wdc_nvme_check_supported_log_page(r, dev,
185-
SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID))
186-
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;
187-
188-
capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
189-
SNDK_DRIVE_CAP_DRIVE_STATUS |
190-
SNDK_DRIVE_CAP_CLEAR_ASSERT |
191-
SNDK_DRIVE_CAP_RESIZE |
192-
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
193-
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
194-
SNDK_DRIVE_CAP_REASON_ID |
195-
SNDK_DRIVE_CAP_LOG_PAGE_DIR);
196-
197-
/* verify the 0xC1 (OCP Error Recovery) log page is supported */
198-
if (run_wdc_nvme_check_supported_log_page(r, dev,
199-
SNDK_ERROR_REC_LOG_ID))
200-
capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE;
201-
202-
/* verify the 0xC3 (OCP Latency Monitor) log page is supported */
203-
if (run_wdc_nvme_check_supported_log_page(r, dev,
204-
SNDK_LATENCY_MON_LOG_ID))
205-
capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE;
206-
207-
/* verify the 0xC4 (OCP Device Capabilities) log page is supported */
208-
if (run_wdc_nvme_check_supported_log_page(r, dev,
209-
SNDK_DEV_CAP_LOG_ID))
210-
capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE;
211-
212-
/* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */
213-
if (run_wdc_nvme_check_supported_log_page(r, dev,
214-
SNDK_UNSUPPORTED_REQS_LOG_ID))
215-
capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE;
216-
217-
/* verify the 0xCA log page is supported */
218-
if (run_wdc_nvme_check_supported_log_page(r, dev,
219-
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
220-
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;
221-
222-
/* verify the 0xD0 log page is supported */
223-
if (run_wdc_nvme_check_supported_log_page(r, dev,
224-
SNDK_NVME_GET_VU_SMART_LOG_ID))
225-
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;
226-
227-
cust_id = run_wdc_get_fw_cust_id(r, dev);
228-
if (cust_id == SNDK_INVALID_CUSTOMER_ID) {
229-
fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__);
230-
return -1;
231-
}
232-
233-
if ((cust_id == SNDK_CUSTOMER_ID_0x1004) ||
234-
(cust_id == SNDK_CUSTOMER_ID_0x1008) ||
235-
(cust_id == SNDK_CUSTOMER_ID_0x1005) ||
236-
(cust_id == SNDK_CUSTOMER_ID_0x1304))
237-
capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
238-
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
239-
SNDK_DRIVE_CAP_INFO |
240-
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION);
241-
else
242-
capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
243-
SNDK_DRIVE_CAP_CLEAR_PCIE);
244-
245-
break;
246-
247-
case SNDK_NVME_SN840_DEV_ID:
248-
case SNDK_NVME_SN840_DEV_ID_1:
249-
/* verify the 0xC0 log page is supported */
250-
if (run_wdc_nvme_check_supported_log_page(r, dev,
251-
SNDK_NVME_GET_EOL_STATUS_LOG_ID))
252-
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;
253-
254-
capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
255-
SNDK_DRIVE_CAP_DRIVE_STATUS |
256-
SNDK_DRIVE_CAP_CLEAR_ASSERT |
257-
SNDK_DRIVE_CAP_RESIZE |
258-
SNDK_DRIVE_CAP_CLEAR_PCIE |
259-
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
260-
SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
261-
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
262-
SNDK_DRIVE_CAP_REASON_ID |
263-
SNDK_DRIVE_CAP_LOG_PAGE_DIR);
264-
265-
/* verify the 0xCA log page is supported */
266-
if (run_wdc_nvme_check_supported_log_page(r, dev,
267-
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
268-
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;
269-
270-
/* verify the 0xD0 log page is supported */
271-
if (run_wdc_nvme_check_supported_log_page(r, dev,
272-
SNDK_NVME_GET_VU_SMART_LOG_ID))
273-
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;
274-
break;
275-
276-
case SNDK_NVME_SN650_DEV_ID:
277-
case SNDK_NVME_SN650_DEV_ID_1:
278-
case SNDK_NVME_SN650_DEV_ID_2:
279-
case SNDK_NVME_SN650_DEV_ID_3:
280-
case SNDK_NVME_SN650_DEV_ID_4:
281-
case SNDK_NVME_SN655_DEV_ID:
282-
case SNDK_NVME_SN655_DEV_ID_1:
283-
/* verify the 0xC0 log page is supported */
284-
if (run_wdc_nvme_check_supported_log_page(r, dev,
285-
SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID))
286-
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;
287-
288-
/* verify the 0xC1 (OCP Error Recovery) log page is supported */
289-
if (run_wdc_nvme_check_supported_log_page(r, dev,
290-
SNDK_ERROR_REC_LOG_ID))
291-
capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE;
292-
293-
/* verify the 0xC3 (OCP Latency Monitor) log page is supported */
294-
if (run_wdc_nvme_check_supported_log_page(r, dev,
295-
SNDK_LATENCY_MON_LOG_ID))
296-
capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE;
297-
298-
/* verify the 0xC4 (OCP Device Capabilities) log page is supported */
299-
if (run_wdc_nvme_check_supported_log_page(r, dev,
300-
SNDK_DEV_CAP_LOG_ID))
301-
capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE;
302-
303-
/* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */
304-
if (run_wdc_nvme_check_supported_log_page(r, dev,
305-
SNDK_UNSUPPORTED_REQS_LOG_ID))
306-
capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE;
307-
308-
capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
309-
SNDK_DRIVE_CAP_DRIVE_STATUS |
310-
SNDK_DRIVE_CAP_CLEAR_ASSERT |
311-
SNDK_DRIVE_CAP_RESIZE |
312-
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
313-
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
314-
SNDK_DRIVE_CAP_REASON_ID |
315-
SNDK_DRIVE_CAP_LOG_PAGE_DIR);
316-
317-
cust_id = run_wdc_get_fw_cust_id(r, dev);
318-
if (cust_id == SNDK_INVALID_CUSTOMER_ID) {
319-
fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__);
320-
return -1;
321-
}
322-
323-
if ((cust_id == SNDK_CUSTOMER_ID_0x1004) ||
324-
(cust_id == SNDK_CUSTOMER_ID_0x1008) ||
325-
(cust_id == SNDK_CUSTOMER_ID_0x1005) ||
326-
(cust_id == SNDK_CUSTOMER_ID_0x1304))
327-
capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
328-
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
329-
SNDK_DRIVE_CAP_INFO |
330-
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION);
331-
else
332-
capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
333-
SNDK_DRIVE_CAP_CLEAR_PCIE);
334-
335-
break;
336-
337-
case SNDK_NVME_SN861_DEV_ID:
338-
case SNDK_NVME_SN861_DEV_ID_1:
339-
case SNDK_NVME_SN861_DEV_ID_2:
340-
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
341-
SNDK_DRIVE_CAP_C3_LOG_PAGE |
342-
SNDK_DRIVE_CAP_CA_LOG_PAGE |
343-
SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE |
344-
SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE |
345-
SNDK_DRIVE_CAP_INTERNAL_LOG |
346-
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
347-
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
348-
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
349-
SNDK_DRIVE_CAP_INFO |
350-
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
351-
SNDK_DRIVE_CAP_LOG_PAGE_DIR |
352-
SNDK_DRIVE_CAP_DRIVE_STATUS |
353-
SNDK_DRIVE_CAP_SET_LATENCY_MONITOR);
354-
break;
355-
356160
case SNDK_NVME_SNTMP_DEV_ID:
357161
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
358162
SNDK_DRIVE_CAP_C3_LOG_PAGE |
@@ -377,86 +181,14 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
377181

378182
case SNDK_NVME_SNDK_VID:
379183
switch (read_device_id) {
380-
case SNDK_NVME_SN520_DEV_ID:
381-
case SNDK_NVME_SN520_DEV_ID_1:
382-
case SNDK_NVME_SN520_DEV_ID_2:
383-
case SNDK_NVME_SN810_DEV_ID:
384-
capabilities = SNDK_DRIVE_CAP_DUI_DATA;
385-
break;
386-
387-
case SNDK_NVME_SN820CL_DEV_ID:
388-
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
389-
SNDK_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION |
390-
SNDK_DRIVE_CAP_CLOUD_LOG_PAGE |
391-
SNDK_DRIVE_CAP_C0_LOG_PAGE |
392-
SNDK_DRIVE_CAP_HW_REV_LOG_PAGE |
393-
SNDK_DRIVE_CAP_INFO |
394-
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
395-
SNDK_DRIVE_CAP_NAND_STATS |
396-
SNDK_DRIVE_CAP_DEVICE_WAF |
397-
SNDK_DRIVE_CAP_TEMP_STATS;
398-
break;
399-
400-
case SNDK_NVME_SN720_DEV_ID:
401-
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
402-
SNDK_DRIVE_CAP_NAND_STATS |
403-
SNDK_DRIVE_CAP_NS_RESIZE;
404-
break;
405-
406-
case SNDK_NVME_SN730_DEV_ID:
407-
capabilities = SNDK_DRIVE_CAP_DUI |
408-
SNDK_DRIVE_CAP_NAND_STATS |
409-
SNDK_DRIVE_CAP_INFO |
410-
SNDK_DRIVE_CAP_TEMP_STATS |
411-
SNDK_DRIVE_CAP_VUC_CLEAR_PCIE |
412-
SNDK_DRIVE_CAP_PCIE_STATS;
413-
break;
414-
415-
case SNDK_NVME_SN530_DEV_ID_1:
416-
case SNDK_NVME_SN530_DEV_ID_2:
417-
case SNDK_NVME_SN530_DEV_ID_3:
418-
case SNDK_NVME_SN530_DEV_ID_4:
419-
case SNDK_NVME_SN530_DEV_ID_5:
420-
case SNDK_NVME_SN350_DEV_ID:
421-
case SNDK_NVME_SN570_DEV_ID:
422-
case SNDK_NVME_SN850X_DEV_ID:
423-
case SNDK_NVME_SN5000_DEV_ID_1:
424-
case SNDK_NVME_SN5000_DEV_ID_2:
425-
case SNDK_NVME_SN5000_DEV_ID_3:
426-
case SNDK_NVME_SN5000_DEV_ID_4:
427-
case SNDK_NVME_SN7000S_DEV_ID_1:
428184
case SNDK_NVME_SN7150_DEV_ID_1:
429185
case SNDK_NVME_SN7150_DEV_ID_2:
430186
case SNDK_NVME_SN7150_DEV_ID_3:
431187
case SNDK_NVME_SN7150_DEV_ID_4:
432188
case SNDK_NVME_SN7150_DEV_ID_5:
433-
case SNDK_NVME_SN7100_DEV_ID_1:
434-
case SNDK_NVME_SN7100_DEV_ID_2:
435-
case SNDK_NVME_SN7100_DEV_ID_3:
436-
case SNDK_NVME_SN8000S_DEV_ID:
437-
case SNDK_NVME_SN5100S_DEV_ID_1:
438-
case SNDK_NVME_SN5100S_DEV_ID_2:
439-
case SNDK_NVME_SN5100S_DEV_ID_3:
440-
case SNDK_NVME_SN740_DEV_ID:
441-
case SNDK_NVME_SN740_DEV_ID_1:
442-
case SNDK_NVME_SN740_DEV_ID_2:
443-
case SNDK_NVME_SN740_DEV_ID_3:
444-
case SNDK_NVME_SN340_DEV_ID:
445189
capabilities = SNDK_DRIVE_CAP_DUI;
446190
break;
447191

448-
case SNDK_NVME_ZN350_DEV_ID:
449-
case SNDK_NVME_ZN350_DEV_ID_1:
450-
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
451-
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
452-
SNDK_DRIVE_CAP_C0_LOG_PAGE |
453-
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
454-
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
455-
SNDK_DRIVE_CAP_INFO |
456-
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
457-
SNDK_DRIVE_CAP_LOG_PAGE_DIR;
458-
break;
459-
460192
default:
461193
capabilities = 0;
462194
}
@@ -465,6 +197,10 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
465197
capabilities = 0;
466198
}
467199

200+
/* Check for fallback WDC plugin support */
201+
if (!capabilities)
202+
capabilities = run_wdc_get_drive_capabilities(r, dev);
203+
468204
return capabilities;
469205
}
470206

0 commit comments

Comments
 (0)