Skip to content

Commit a1f729d

Browse files
plugins/wdc: Add Debug Log Collection Support for Additional Drives
Signed-off-by: jeff-lien-wdc <jeff.lien@wdc.com>
1 parent 64de246 commit a1f729d

File tree

2 files changed

+107
-27
lines changed

2 files changed

+107
-27
lines changed

plugins/wdc/wdc-nvme.c

+106-26
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,40 @@
9494
#define WDC_NVME_SN520_DEV_ID 0x5003
9595
#define WDC_NVME_SN520_DEV_ID_1 0x5004
9696
#define WDC_NVME_SN520_DEV_ID_2 0x5005
97-
#define WDC_NVME_SN530_DEV_ID 0x5009
98-
#define WDC_NVME_SN530_DEV_ID_1 0x501d
97+
98+
#define WDC_NVME_SN530_DEV_ID_1 0x5007
99+
#define WDC_NVME_SN530_DEV_ID_2 0x5008
100+
#define WDC_NVME_SN530_DEV_ID_3 0x5009
101+
#define WDC_NVME_SN530_DEV_ID_4 0x500b
102+
#define WDC_NVME_SN530_DEV_ID_5 0x501d
103+
104+
#define WDC_NVME_SN350_DEV_ID 0x5019
105+
106+
#define WDC_NVME_SN570_DEV_ID 0x501A
107+
108+
#define WDC_NVME_SN850X_DEV_ID 0x5030
109+
110+
#define WDC_NVME_SN5000_DEV_ID_1 0x5034
111+
#define WDC_NVME_SN5000_DEV_ID_2 0x5035
112+
#define WDC_NVME_SN5000_DEV_ID_3 0x5036
113+
#define WDC_NVME_SN5000_DEV_ID_4 0x504A
114+
115+
#define WDC_NVME_SN7000S_DEV_ID_1 0x5039
116+
117+
#define WDC_NVME_SN7150_DEV_ID_1 0x503b
118+
#define WDC_NVME_SN7150_DEV_ID_2 0x503c
119+
#define WDC_NVME_SN7150_DEV_ID_3 0x503d
120+
#define WDC_NVME_SN7150_DEV_ID_4 0x503e
121+
#define WDC_NVME_SN7150_DEV_ID_5 0x503f
122+
123+
#define WDC_NVME_SN7100_DEV_ID_1 0x5043
124+
#define WDC_NVME_SN7100_DEV_ID_2 0x5044
125+
#define WDC_NVME_SN7100_DEV_ID_3 0x5045
126+
127+
#define WDC_NVME_SN8000S_DEV_ID 0x5049
128+
99129
#define WDC_NVME_SN720_DEV_ID 0x5002
100-
#define WDC_NVME_SN730A_DEV_ID 0x5006
130+
#define WDC_NVME_SN730_DEV_ID 0x5006
101131
#define WDC_NVME_SN740_DEV_ID 0x5015
102132
#define WDC_NVME_SN740_DEV_ID_1 0x5016
103133
#define WDC_NVME_SN740_DEV_ID_2 0x5017
@@ -989,7 +1019,7 @@ struct wdc_e6_log_hdr {
9891019
/* DUI log header */
9901020
struct wdc_dui_log_section {
9911021
__le16 section_type;
992-
__le16 data_area_id;
1022+
__le16 reserved;
9931023
__le32 section_size;
9941024
};
9951025

@@ -1671,6 +1701,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
16711701
WDC_DRIVE_CAP_DRIVE_LOG | WDC_DRIVE_CAP_CRASH_DUMP | WDC_DRIVE_CAP_PFAIL_DUMP |
16721702
WDC_DRIVE_CAP_PURGE);
16731703
break;
1704+
16741705
case WDC_NVME_SN200_DEV_ID:
16751706
capabilities = (WDC_DRIVE_CAP_CAP_DIAG | WDC_DRIVE_CAP_INTERNAL_LOG | WDC_DRIVE_CAP_CLEAR_PCIE |
16761707
WDC_DRIVE_CAP_DRIVE_LOG | WDC_DRIVE_CAP_CRASH_DUMP | WDC_DRIVE_CAP_PFAIL_DUMP |
@@ -1686,10 +1717,12 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
16861717
WDC_NVME_ADD_LOG_OPCODE))
16871718
capabilities |= WDC_DRIVE_CAP_C1_LOG_PAGE;
16881719
break;
1720+
16891721
default:
16901722
capabilities = 0;
16911723
}
16921724
break;
1725+
16931726
case WDC_NVME_VID_2:
16941727
switch (read_device_id) {
16951728
case WDC_NVME_SN630_DEV_ID:
@@ -1708,6 +1741,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
17081741
WDC_NVME_GET_VU_SMART_LOG_OPCODE))
17091742
capabilities |= WDC_DRIVE_CAP_D0_LOG_PAGE;
17101743
break;
1744+
17111745
case WDC_NVME_SN640_DEV_ID:
17121746
fallthrough;
17131747
case WDC_NVME_SN640_DEV_ID_1:
@@ -1780,6 +1814,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
17801814
capabilities |= (WDC_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | WDC_DRIVE_CAP_CLEAR_PCIE);
17811815

17821816
break;
1817+
17831818
case WDC_NVME_SN840_DEV_ID:
17841819
fallthrough;
17851820
case WDC_NVME_SN840_DEV_ID_1:
@@ -1810,6 +1845,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
18101845
WDC_NVME_GET_VU_SMART_LOG_OPCODE))
18111846
capabilities |= WDC_DRIVE_CAP_D0_LOG_PAGE;
18121847
break;
1848+
18131849
case WDC_NVME_SN650_DEV_ID:
18141850
fallthrough;
18151851
case WDC_NVME_SN650_DEV_ID_1:
@@ -1869,6 +1905,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
18691905
WDC_DRIVE_CAP_CLEAR_PCIE);
18701906

18711907
break;
1908+
18721909
case WDC_NVME_SN861_DEV_ID:
18731910
fallthrough;
18741911
case WDC_NVME_SN861_DEV_ID_1:
@@ -1886,28 +1923,28 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
18861923
WDC_DRIVE_CAP_LOG_PAGE_DIR |
18871924
WDC_DRIVE_CAP_SET_LATENCY_MONITOR);
18881925
break;
1926+
18891927
default:
18901928
capabilities = 0;
18911929
}
18921930
break;
1931+
18931932
case WDC_NVME_SNDK_VID:
18941933
switch (read_device_id) {
18951934
case WDC_NVME_SXSLCL_DEV_ID:
18961935
capabilities = WDC_DRIVE_CAP_DRIVE_ESSENTIALS;
18971936
break;
1937+
18981938
case WDC_NVME_SN520_DEV_ID:
18991939
fallthrough;
19001940
case WDC_NVME_SN520_DEV_ID_1:
19011941
fallthrough;
19021942
case WDC_NVME_SN520_DEV_ID_2:
19031943
fallthrough;
1904-
case WDC_NVME_SN530_DEV_ID:
1905-
fallthrough;
1906-
case WDC_NVME_SN530_DEV_ID_1:
1907-
fallthrough;
19081944
case WDC_NVME_SN810_DEV_ID:
19091945
capabilities = WDC_DRIVE_CAP_DUI_DATA;
19101946
break;
1947+
19111948
case WDC_NVME_SN820CL_DEV_ID:
19121949
capabilities = WDC_DRIVE_CAP_DUI_DATA |
19131950
WDC_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION |
@@ -1916,15 +1953,62 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
19161953
WDC_DRIVE_CAP_VU_FID_CLEAR_PCIE | WDC_DRIVE_CAP_NAND_STATS |
19171954
WDC_DRIVE_CAP_DEVICE_WAF | WDC_DRIVE_CAP_TEMP_STATS;
19181955
break;
1956+
19191957
case WDC_NVME_SN720_DEV_ID:
19201958
capabilities = WDC_DRIVE_CAP_DUI_DATA | WDC_DRIVE_CAP_NAND_STATS |
19211959
WDC_DRIVE_CAP_NS_RESIZE;
19221960
break;
1923-
case WDC_NVME_SN730A_DEV_ID:
1961+
1962+
case WDC_NVME_SN730_DEV_ID:
19241963
capabilities = WDC_DRIVE_CAP_DUI | WDC_DRIVE_CAP_NAND_STATS |
19251964
WDC_DRIVE_CAP_INFO | WDC_DRIVE_CAP_TEMP_STATS |
19261965
WDC_DRIVE_CAP_VUC_CLEAR_PCIE | WDC_DRIVE_CAP_PCIE_STATS;
19271966
break;
1967+
1968+
case WDC_NVME_SN530_DEV_ID_1:
1969+
fallthrough;
1970+
case WDC_NVME_SN530_DEV_ID_2:
1971+
fallthrough;
1972+
case WDC_NVME_SN530_DEV_ID_3:
1973+
fallthrough;
1974+
case WDC_NVME_SN530_DEV_ID_4:
1975+
fallthrough;
1976+
case WDC_NVME_SN530_DEV_ID_5:
1977+
fallthrough;
1978+
case WDC_NVME_SN350_DEV_ID:
1979+
fallthrough;
1980+
case WDC_NVME_SN570_DEV_ID:
1981+
fallthrough;
1982+
case WDC_NVME_SN850X_DEV_ID:
1983+
fallthrough;
1984+
case WDC_NVME_SN5000_DEV_ID_1:
1985+
fallthrough;
1986+
case WDC_NVME_SN5000_DEV_ID_2:
1987+
fallthrough;
1988+
case WDC_NVME_SN5000_DEV_ID_3:
1989+
fallthrough;
1990+
case WDC_NVME_SN5000_DEV_ID_4:
1991+
fallthrough;
1992+
case WDC_NVME_SN7000S_DEV_ID_1:
1993+
fallthrough;
1994+
case WDC_NVME_SN7150_DEV_ID_1:
1995+
fallthrough;
1996+
case WDC_NVME_SN7150_DEV_ID_2:
1997+
fallthrough;
1998+
case WDC_NVME_SN7150_DEV_ID_3:
1999+
fallthrough;
2000+
case WDC_NVME_SN7150_DEV_ID_4:
2001+
fallthrough;
2002+
case WDC_NVME_SN7150_DEV_ID_5:
2003+
fallthrough;
2004+
case WDC_NVME_SN7100_DEV_ID_1:
2005+
fallthrough;
2006+
case WDC_NVME_SN7100_DEV_ID_2:
2007+
fallthrough;
2008+
case WDC_NVME_SN7100_DEV_ID_3:
2009+
fallthrough;
2010+
case WDC_NVME_SN8000S_DEV_ID:
2011+
fallthrough;
19282012
case WDC_NVME_SN740_DEV_ID:
19292013
fallthrough;
19302014
case WDC_NVME_SN740_DEV_ID_1:
@@ -1936,6 +2020,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
19362020
case WDC_NVME_SN340_DEV_ID:
19372021
capabilities = WDC_DRIVE_CAP_DUI;
19382022
break;
2023+
19392024
case WDC_NVME_ZN350_DEV_ID:
19402025
fallthrough;
19412026
case WDC_NVME_ZN350_DEV_ID_1:
@@ -1945,6 +2030,7 @@ static __u64 wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev)
19452030
WDC_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 | WDC_DRIVE_CAP_INFO |
19462031
WDC_DRIVE_CAP_CLOUD_SSD_VERSION | WDC_DRIVE_CAP_LOG_PAGE_DIR;
19472032
break;
2033+
19482034
default:
19492035
capabilities = 0;
19502036
}
@@ -2901,6 +2987,8 @@ static int wdc_do_cap_dui_v1(int fd, char *file, __u32 xfer_size, int data_area,
29012987
fprintf(stderr, "INFO: WDC: Capture V1 Device Unit Info log, data area = %d\n",
29022988
data_area);
29032989
fprintf(stderr, "INFO: WDC: DUI Header Version = 0x%x\n", log_hdr->hdr_version);
2990+
fprintf(stderr, "INFO: WDC: DUI section count = 0x%x\n", log_hdr->section_count);
2991+
fprintf(stderr, "INFO: WDC: DUI log size = 0x%x\n", log_hdr->log_size);
29042992
}
29052993

29062994
if (!cap_dui_length) {
@@ -2910,23 +2998,15 @@ static int wdc_do_cap_dui_v1(int fd, char *file, __u32 xfer_size, int data_area,
29102998

29112999
/* parse log header for all sections up to specified data area inclusively */
29123000
if (data_area != WDC_NVME_DUI_MAX_DATA_AREA) {
2913-
for (j = 0; j < WDC_NVME_DUI_MAX_SECTION; j++) {
2914-
if (log_hdr->log_section[j].data_area_id <= data_area &&
2915-
log_hdr->log_section[j].data_area_id) {
2916-
log_size += log_hdr->log_section[j].section_size;
2917-
if (verbose)
2918-
fprintf(stderr,
2919-
"%s: Data area ID %d : section size 0x%x, total size = 0x%x\n",
2920-
__func__, log_hdr->log_section[j].data_area_id,
2921-
(unsigned int)log_hdr->log_section[j].section_size,
2922-
(unsigned int)log_size);
3001+
for (j = 0; j < log_hdr->section_count; j++) {
3002+
log_size += log_hdr->log_section[j].section_size;
3003+
if (verbose)
3004+
fprintf(stderr,
3005+
"%s: section size 0x%x, total size = 0x%x\n",
3006+
__func__,
3007+
(unsigned int)log_hdr->log_section[j].section_size,
3008+
(unsigned int)log_size);
29233009

2924-
} else {
2925-
if (verbose)
2926-
fprintf(stderr, "%s: break, total size = 0x%x\n", __func__,
2927-
(unsigned int)log_size);
2928-
break;
2929-
}
29303010
}
29313011
} else {
29323012
log_size = cap_dui_length;
@@ -11507,7 +11587,7 @@ static int wdc_vs_drive_info(int argc, char **argv,
1150711587
}
1150811588
}
1150911589
break;
11510-
case WDC_NVME_SN730A_DEV_ID:
11590+
case WDC_NVME_SN730_DEV_ID:
1151111591
memcpy(vsData, &ctrl.vs[0], 32);
1151211592

1151311593
major_rev = ctrl.sn[12];

plugins/wdc/wdc-nvme.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#if !defined(WDC_NVME) || defined(CMD_HEADER_MULTI_READ)
66
#define WDC_NVME
77

8-
#define WDC_PLUGIN_VERSION "2.3.6"
8+
#define WDC_PLUGIN_VERSION "2.7.0"
99
#include "cmd.h"
1010

1111
PLUGIN(NAME("wdc", "Western Digital vendor specific extensions", WDC_PLUGIN_VERSION),

0 commit comments

Comments
 (0)