Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions plugins/sandisk/sandisk-nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ static int sndk_capabilities(int argc, char **argv,
capabilities & SNDK_DRIVE_CAP_CLEAR_PCIE_MASK ? "Supported" : "Not Supported");
printf("get-drive-status : %s\n",
capabilities & SNDK_DRIVE_CAP_DRIVE_STATUS ? "Supported" : "Not Supported");
printf("clear-assert-dump : %s\n",
capabilities & SNDK_DRIVE_CAP_CLEAR_ASSERT ? "Supported" : "Not Supported");
printf("drive-resize : %s\n",
capabilities & SNDK_DRIVE_CAP_RESIZE ? "Supported" : "Not Supported");
printf("vs-fw-activate-history : %s\n",
Expand Down
272 changes: 4 additions & 268 deletions plugins/sandisk/sandisk-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)

int ret;
uint32_t read_device_id = -1, read_vendor_id = -1;
__u32 cust_id;

ret = sndk_get_pci_ids(r, dev, &read_device_id, &read_vendor_id);
if (ret < 0) {
Expand All @@ -158,201 +157,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
switch (read_vendor_id) {
case SNDK_NVME_WDC_VID:
switch (read_device_id) {
case SNDK_NVME_SN630_DEV_ID:
case SNDK_NVME_SN630_DEV_ID_1:
capabilities = (SNDK_DRIVE_CAP_INTERNAL_LOG |
SNDK_DRIVE_CAP_DRIVE_STATUS |
SNDK_DRIVE_CAP_CLEAR_ASSERT |
SNDK_DRIVE_CAP_RESIZE |
SNDK_DRIVE_CAP_CLEAR_PCIE);
/* verify the 0xCA log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;

/* verify the 0xD0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_VU_SMART_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;
break;

case SNDK_NVME_SN640_DEV_ID:
case SNDK_NVME_SN640_DEV_ID_1:
case SNDK_NVME_SN640_DEV_ID_2:
case SNDK_NVME_SN640_DEV_ID_3:
/* verify the 0xC0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;

capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
SNDK_DRIVE_CAP_DRIVE_STATUS |
SNDK_DRIVE_CAP_CLEAR_ASSERT |
SNDK_DRIVE_CAP_RESIZE |
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
SNDK_DRIVE_CAP_REASON_ID |
SNDK_DRIVE_CAP_LOG_PAGE_DIR);

/* verify the 0xC1 (OCP Error Recovery) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_ERROR_REC_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE;

/* verify the 0xC3 (OCP Latency Monitor) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_LATENCY_MON_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE;

/* verify the 0xC4 (OCP Device Capabilities) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_DEV_CAP_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE;

/* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_UNSUPPORTED_REQS_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE;

/* verify the 0xCA log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;

/* verify the 0xD0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_VU_SMART_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;

cust_id = run_wdc_get_fw_cust_id(r, dev);
if (cust_id == SNDK_INVALID_CUSTOMER_ID) {
fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__);
return -1;
}

if ((cust_id == SNDK_CUSTOMER_ID_0x1004) ||
(cust_id == SNDK_CUSTOMER_ID_0x1008) ||
(cust_id == SNDK_CUSTOMER_ID_0x1005) ||
(cust_id == SNDK_CUSTOMER_ID_0x1304))
capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION);
else
capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_CLEAR_PCIE);

break;

case SNDK_NVME_SN840_DEV_ID:
case SNDK_NVME_SN840_DEV_ID_1:
/* verify the 0xC0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_EOL_STATUS_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;

capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
SNDK_DRIVE_CAP_DRIVE_STATUS |
SNDK_DRIVE_CAP_CLEAR_ASSERT |
SNDK_DRIVE_CAP_RESIZE |
SNDK_DRIVE_CAP_CLEAR_PCIE |
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
SNDK_DRIVE_CAP_REASON_ID |
SNDK_DRIVE_CAP_LOG_PAGE_DIR);

/* verify the 0xCA log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_DEVICE_INFO_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE;

/* verify the 0xD0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_VU_SMART_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE;
break;

case SNDK_NVME_SN650_DEV_ID:
case SNDK_NVME_SN650_DEV_ID_1:
case SNDK_NVME_SN650_DEV_ID_2:
case SNDK_NVME_SN650_DEV_ID_3:
case SNDK_NVME_SN650_DEV_ID_4:
case SNDK_NVME_SN655_DEV_ID:
case SNDK_NVME_SN655_DEV_ID_1:
/* verify the 0xC0 log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE;

/* verify the 0xC1 (OCP Error Recovery) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_ERROR_REC_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE;

/* verify the 0xC3 (OCP Latency Monitor) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_LATENCY_MON_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE;

/* verify the 0xC4 (OCP Device Capabilities) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_DEV_CAP_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE;

/* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */
if (run_wdc_nvme_check_supported_log_page(r, dev,
SNDK_UNSUPPORTED_REQS_LOG_ID))
capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE;

capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG |
SNDK_DRIVE_CAP_DRIVE_STATUS |
SNDK_DRIVE_CAP_CLEAR_ASSERT |
SNDK_DRIVE_CAP_RESIZE |
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY |
SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG |
SNDK_DRIVE_CAP_REASON_ID |
SNDK_DRIVE_CAP_LOG_PAGE_DIR);

cust_id = run_wdc_get_fw_cust_id(r, dev);
if (cust_id == SNDK_INVALID_CUSTOMER_ID) {
fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__);
return -1;
}

if ((cust_id == SNDK_CUSTOMER_ID_0x1004) ||
(cust_id == SNDK_CUSTOMER_ID_0x1008) ||
(cust_id == SNDK_CUSTOMER_ID_0x1005) ||
(cust_id == SNDK_CUSTOMER_ID_0x1304))
capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION);
else
capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_CLEAR_PCIE);

break;

case SNDK_NVME_SN861_DEV_ID:
case SNDK_NVME_SN861_DEV_ID_1:
case SNDK_NVME_SN861_DEV_ID_2:
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
SNDK_DRIVE_CAP_C3_LOG_PAGE |
SNDK_DRIVE_CAP_CA_LOG_PAGE |
SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE |
SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE |
SNDK_DRIVE_CAP_INTERNAL_LOG |
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
SNDK_DRIVE_CAP_LOG_PAGE_DIR |
SNDK_DRIVE_CAP_DRIVE_STATUS |
SNDK_DRIVE_CAP_SET_LATENCY_MONITOR);
break;

case SNDK_NVME_SNTMP_DEV_ID:
capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE |
SNDK_DRIVE_CAP_C3_LOG_PAGE |
Expand All @@ -377,86 +181,14 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)

case SNDK_NVME_SNDK_VID:
switch (read_device_id) {
case SNDK_NVME_SN520_DEV_ID:
case SNDK_NVME_SN520_DEV_ID_1:
case SNDK_NVME_SN520_DEV_ID_2:
case SNDK_NVME_SN810_DEV_ID:
capabilities = SNDK_DRIVE_CAP_DUI_DATA;
break;

case SNDK_NVME_SN820CL_DEV_ID:
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
SNDK_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION |
SNDK_DRIVE_CAP_CLOUD_LOG_PAGE |
SNDK_DRIVE_CAP_C0_LOG_PAGE |
SNDK_DRIVE_CAP_HW_REV_LOG_PAGE |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
SNDK_DRIVE_CAP_NAND_STATS |
SNDK_DRIVE_CAP_DEVICE_WAF |
SNDK_DRIVE_CAP_TEMP_STATS;
break;

case SNDK_NVME_SN720_DEV_ID:
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
SNDK_DRIVE_CAP_NAND_STATS |
SNDK_DRIVE_CAP_NS_RESIZE;
break;

case SNDK_NVME_SN730_DEV_ID:
capabilities = SNDK_DRIVE_CAP_DUI |
SNDK_DRIVE_CAP_NAND_STATS |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_TEMP_STATS |
SNDK_DRIVE_CAP_VUC_CLEAR_PCIE |
SNDK_DRIVE_CAP_PCIE_STATS;
break;

case SNDK_NVME_SN530_DEV_ID_1:
case SNDK_NVME_SN530_DEV_ID_2:
case SNDK_NVME_SN530_DEV_ID_3:
case SNDK_NVME_SN530_DEV_ID_4:
case SNDK_NVME_SN530_DEV_ID_5:
case SNDK_NVME_SN350_DEV_ID:
case SNDK_NVME_SN570_DEV_ID:
case SNDK_NVME_SN850X_DEV_ID:
case SNDK_NVME_SN5000_DEV_ID_1:
case SNDK_NVME_SN5000_DEV_ID_2:
case SNDK_NVME_SN5000_DEV_ID_3:
case SNDK_NVME_SN5000_DEV_ID_4:
case SNDK_NVME_SN7000S_DEV_ID_1:
case SNDK_NVME_SN7150_DEV_ID_1:
case SNDK_NVME_SN7150_DEV_ID_2:
case SNDK_NVME_SN7150_DEV_ID_3:
case SNDK_NVME_SN7150_DEV_ID_4:
case SNDK_NVME_SN7150_DEV_ID_5:
case SNDK_NVME_SN7100_DEV_ID_1:
case SNDK_NVME_SN7100_DEV_ID_2:
case SNDK_NVME_SN7100_DEV_ID_3:
case SNDK_NVME_SN8000S_DEV_ID:
case SNDK_NVME_SN5100S_DEV_ID_1:
case SNDK_NVME_SN5100S_DEV_ID_2:
case SNDK_NVME_SN5100S_DEV_ID_3:
case SNDK_NVME_SN740_DEV_ID:
case SNDK_NVME_SN740_DEV_ID_1:
case SNDK_NVME_SN740_DEV_ID_2:
case SNDK_NVME_SN740_DEV_ID_3:
case SNDK_NVME_SN340_DEV_ID:
capabilities = SNDK_DRIVE_CAP_DUI;
break;

case SNDK_NVME_ZN350_DEV_ID:
case SNDK_NVME_ZN350_DEV_ID_1:
capabilities = SNDK_DRIVE_CAP_DUI_DATA |
SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE |
SNDK_DRIVE_CAP_C0_LOG_PAGE |
SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY |
SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 |
SNDK_DRIVE_CAP_INFO |
SNDK_DRIVE_CAP_CLOUD_SSD_VERSION |
SNDK_DRIVE_CAP_LOG_PAGE_DIR;
break;

default:
capabilities = 0;
}
Expand All @@ -465,6 +197,10 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
capabilities = 0;
}

/* Check for fallback WDC plugin support */
if (!capabilities)
capabilities = run_wdc_get_drive_capabilities(r, dev);

return capabilities;
}

Expand Down
Loading