Skip to content

Commit d4b5f77

Browse files
hmi-jeonsc108-lee
authored andcommitted
ocp-nvme: Update ocp v2.6 Smart Information Extended
Log Identifier C0h. Spec Documents: https://www.opencompute.org/documents/datacenter-nvme-ssd-specification-v2-6-2-pdf Signed-off-by: Minsik Jeon <[email protected]> Co-authored-by: Steven Seungcheol Lee <[email protected]>
1 parent fa0c0d7 commit d4b5f77

File tree

3 files changed

+231
-45
lines changed

3 files changed

+231
-45
lines changed

plugins/ocp/ocp-print-json.c

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ static void json_smart_extended_log_v1(struct ocp_smart_extended_log *log)
145145
struct json_object *pmur;
146146
uint16_t smart_log_ver = 0;
147147
uint16_t dssd_version = 0;
148+
int i = 0;
148149
char guid[40];
150+
char ascii_arr[65];
151+
char *ascii = ascii_arr;
149152

150153
root = json_create_object();
151154
pmuw = json_create_object();
@@ -228,6 +231,49 @@ static void json_smart_extended_log_v1(struct ocp_smart_extended_log *log)
228231
log->nvme_cmdset_errata_version);
229232
json_object_add_value_uint(root, "Lowest Permitted Firmware Revision",
230233
le64_to_cpu(log->lowest_permitted_fw_rev));
234+
json_object_add_value_uint(root, "NVMe Over Pcie Errata Version",
235+
log->nvme_over_pcie_errate_version);
236+
json_object_add_value_uint(root, "NVMe Mi Errata Version",
237+
log->nvme_mi_errata_version);
238+
json_object_add_value_uint(root, "Total media dies",
239+
le16_to_cpu(log->total_media_dies));
240+
json_object_add_value_uint(root, "Total die failure tolerance",
241+
le16_to_cpu(log->total_die_failure_tolerance));
242+
json_object_add_value_uint(root, "Max temperature recorded",
243+
le16_to_cpu(log->max_temperature_recorded));
244+
json_object_add_value_uint64(root, "Nand avg erase count",
245+
le64_to_cpu(log->nand_avg_erase_count));
246+
json_object_add_value_uint(root, "Command timeouts",
247+
le32_to_cpu(log->command_timeouts));
248+
json_object_add_value_uint(root, "Sys area program fail count raw",
249+
le32_to_cpu(log->sys_area_program_fail_count_raw));
250+
json_object_add_value_uint(root, "Sys area program fail count noralized",
251+
log->sys_area_program_fail_count_normalized);
252+
json_object_add_value_uint(root, "Sys area uncorrectable read count raw",
253+
le32_to_cpu(log->sys_area_uncorr_read_count_raw));
254+
json_object_add_value_uint(root, "Sys area uncorrectable read count noralized",
255+
log->sys_area_uncorr_read_count_normalized);
256+
json_object_add_value_uint(root, "Sys area erase fail count raw",
257+
le32_to_cpu(log->sys_area_erase_fail_count_raw));
258+
json_object_add_value_uint(root, "Sys area erase fail count noralized",
259+
log->sys_area_erase_fail_count_normalized);
260+
json_object_add_value_uint(root, "Max peak power capability",
261+
le16_to_cpu(log->max_peak_power_capability));
262+
json_object_add_value_uint(root, "Current max avg power",
263+
le16_to_cpu(log->current_max_avg_power));
264+
json_object_add_value_uint64(root, "Lifetime power consumed",
265+
int48_to_long(log->lifetime_power_consumed));
266+
memset((void *)ascii, 0, 65);
267+
for (i = 0; i < 8; i++)
268+
ascii += sprintf(ascii, "%c", log->dssd_firmware_revision[i]);
269+
json_object_add_value_string(root, "Dssd firmware revision", ascii_arr);
270+
json_object_add_value_string(root, "Dssd firmware build UUID",
271+
util_uuid_to_string(log->dssd_firmware_build_uuid));
272+
ascii = ascii_arr;
273+
memset((void *)ascii, 0, 65);
274+
for (i = 0; i < 64; i++)
275+
ascii += sprintf(ascii, "%c", log->dssd_firmware_build_label[i]);
276+
json_object_add_value_string(root, "Dssd firmware build label", ascii_arr);
231277
fallthrough;
232278
case 2 ... 3:
233279
json_object_add_value_uint(root, "Errata Version Field",
@@ -257,9 +303,12 @@ static void json_smart_extended_log_v2(struct ocp_smart_extended_log *log)
257303
struct json_object *root;
258304
struct json_object *pmuw;
259305
struct json_object *pmur;
306+
int i = 0;
260307
uint16_t smart_log_ver = 0;
261308
uint16_t dssd_version = 0;
262309
char guid[40];
310+
char ascii_arr[65];
311+
char *ascii = ascii_arr;
263312

264313
root = json_create_object();
265314
pmuw = json_create_object();
@@ -342,6 +391,49 @@ static void json_smart_extended_log_v2(struct ocp_smart_extended_log *log)
342391
log->nvme_cmdset_errata_version);
343392
json_object_add_value_uint(root, "lowest_permitted_firmware_revision",
344393
le64_to_cpu(log->lowest_permitted_fw_rev));
394+
json_object_add_value_uint(root, "nvme_over_pcie_errata_version",
395+
log->nvme_over_pcie_errate_version);
396+
json_object_add_value_uint(root, "nvme_mi_errata_version",
397+
log->nvme_mi_errata_version);
398+
json_object_add_value_uint(root, "total_media_dies",
399+
le16_to_cpu(log->total_media_dies));
400+
json_object_add_value_uint(root, "total_die_failure_tolerance",
401+
le16_to_cpu(log->total_die_failure_tolerance));
402+
json_object_add_value_uint(root, "max_temperature_recorded",
403+
le16_to_cpu(log->max_temperature_recorded));
404+
json_object_add_value_uint64(root, "nand_avg_erase_count",
405+
le64_to_cpu(log->nand_avg_erase_count));
406+
json_object_add_value_uint(root, "command_timeouts",
407+
le32_to_cpu(log->command_timeouts));
408+
json_object_add_value_uint(root, "sys_area_program_fail_count_raw",
409+
le32_to_cpu(log->sys_area_program_fail_count_raw));
410+
json_object_add_value_uint(root, "sys_area_program_fail_count_noralized",
411+
log->sys_area_program_fail_count_normalized);
412+
json_object_add_value_uint(root, "sys_area_uncorrectable_read_count_raw",
413+
le32_to_cpu(log->sys_area_uncorr_read_count_raw));
414+
json_object_add_value_uint(root, "sys_area_uncorrectable_read_count_noralized",
415+
log->sys_area_uncorr_read_count_normalized);
416+
json_object_add_value_uint(root, "sys_area_erase_fail_count_raw",
417+
le32_to_cpu(log->sys_area_erase_fail_count_raw));
418+
json_object_add_value_uint(root, "sys_area_erase_fail_count_noralized",
419+
log->sys_area_erase_fail_count_normalized);
420+
json_object_add_value_uint(root, "max_peak_power_capability",
421+
le16_to_cpu(log->max_peak_power_capability));
422+
json_object_add_value_uint(root, "current_max_avg_power",
423+
le16_to_cpu(log->current_max_avg_power));
424+
json_object_add_value_uint64(root, "lifetime_power_consumed",
425+
int48_to_long(log->lifetime_power_consumed));
426+
memset((void *)ascii, 0, 65);
427+
for (i = 0; i < 8; i++)
428+
ascii += sprintf(ascii, "%c", log->dssd_firmware_revision[i]);
429+
json_object_add_value_string(root, "dssd_firmware_revision", ascii_arr);
430+
json_object_add_value_string(root, "dssd_firmware_build_uuid",
431+
util_uuid_to_string(log->dssd_firmware_build_uuid));
432+
ascii = ascii_arr;
433+
memset((void *)ascii, 0, 65);
434+
for (i = 0; i < 64; i++)
435+
ascii += sprintf(ascii, "%c", log->dssd_firmware_build_label[i]);
436+
json_object_add_value_string(root, "dssd_firmware_build_label", ascii_arr);
345437
fallthrough;
346438
case 2 ... 3:
347439
json_object_add_value_uint(root, "errata_version_field",

plugins/ocp/ocp-print-stdout.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ static void stdout_smart_extended_log(struct ocp_smart_extended_log *log, unsign
101101
{
102102
uint16_t smart_log_ver = 0;
103103
uint16_t dssd_version = 0;
104+
int i = 0;
104105

105106
printf("SMART Cloud Attributes :-\n");
106107

@@ -172,6 +173,50 @@ static void stdout_smart_extended_log(struct ocp_smart_extended_log *log, unsign
172173
log->nvme_cmdset_errata_version);
173174
printf(" Lowest Permitted Firmware Revision %"PRIu64"\n",
174175
le64_to_cpu(log->lowest_permitted_fw_rev));
176+
printf(" NVMe Over Pcie Errata Version %d\n",
177+
log->nvme_over_pcie_errate_version);
178+
printf(" NVMe Mi Errata Version %d\n",
179+
log->nvme_mi_errata_version);
180+
printf(" Total media dies %"PRIu16"\n",
181+
le16_to_cpu(log->total_media_dies));
182+
printf(" Total die failure tolerance %"PRIu16"\n",
183+
le16_to_cpu(log->total_die_failure_tolerance));
184+
printf(" Media dies offline %"PRIu16"\n",
185+
le16_to_cpu(log->media_dies_offline));
186+
printf(" Max temperature recorded %d\n",
187+
le16_to_cpu(log->max_temperature_recorded));
188+
printf(" Nand avg erase count %"PRIu64"\n",
189+
le64_to_cpu(log->nand_avg_erase_count));
190+
printf(" Command timeouts %"PRIu32"\n",
191+
le32_to_cpu(log->command_timeouts));
192+
printf(" Sys area program fail count raw %"PRIu32"\n",
193+
le32_to_cpu(log->sys_area_program_fail_count_raw));
194+
printf(" Sys area program fail count noralized %d\n",
195+
le32_to_cpu(log->sys_area_program_fail_count_normalized));
196+
printf(" Sys area uncorrectable read count raw %"PRIu32"\n",
197+
le32_to_cpu(log->sys_area_uncorr_read_count_raw));
198+
printf(" Sys area uncorrectable read count noralized %d\n",
199+
le32_to_cpu(log->sys_area_uncorr_read_count_normalized));
200+
printf(" Sys area erase fail count raw %"PRIu32"\n",
201+
le32_to_cpu(log->sys_area_erase_fail_count_raw));
202+
printf(" Sys area erase fail count noralized %d\n",
203+
le32_to_cpu(log->sys_area_erase_fail_count_normalized));
204+
printf(" Max peak power capability %"PRIu16"\n",
205+
le16_to_cpu(log->max_peak_power_capability));
206+
printf(" Current max avg power %"PRIu16"\n",
207+
le16_to_cpu(log->current_max_avg_power));
208+
printf(" Lifetime power consumed %"PRIu64"\n",
209+
int48_to_long(log->lifetime_power_consumed));
210+
printf(" Dssd firmware revision ");
211+
for (i = 0; i < sizeof(log->dssd_firmware_revision); i++)
212+
printf("%c", log->dssd_firmware_revision[i]);
213+
printf("\n");
214+
printf(" Dssd firmware build UUID %s\n",
215+
util_uuid_to_string(log->dssd_firmware_build_uuid));
216+
printf(" Dssd firmware build label ");
217+
for (i = 0; i < sizeof(log->dssd_firmware_build_label); i++)
218+
printf("%c", log->dssd_firmware_build_label[i]);
219+
printf("\n");
175220
fallthrough;
176221
case 2 ... 3:
177222
printf(" Errata Version Field %d\n",

plugins/ocp/ocp-smart-extended-log.h

Lines changed: 94 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,72 @@ struct command;
1616
struct plugin;
1717

1818
/**
19-
* struct ocp_smart_extended_log - SMART / Health Information Extended
20-
* @physical_media_units_written: Physical Media Units Written
21-
* @physical_media_units_read: Physical Media Units Read
22-
* @bad_user_nand_blocks_raw: Bad User NAND Blocks raw
23-
* @bad_user_nand_blocks_normalized: Bad User NAND Blocks normalized
24-
* @bad_system_nand_blocks_raw: Bad System NAND Blocks raw
25-
* @bad_system_nand_blocks_normalized: Bad System NAND Blocks normalized
26-
* @xor_recovery_count: XOR Recovery Count
27-
* @uncorrectable_read_err_count: Uncorrectable Read Error Count
28-
* @soft_ecc_err_count: Soft ECC Error Count
29-
* @end_to_end_detected_err: End to End detected errors
30-
* @end_to_end_corrected_err: End to End corrected errors
31-
* @system_data_used_percent: System data percent used
32-
* @refresh_counts: Refresh Counts
33-
* @user_data_erase_count_max: Max User data erase counts
34-
* @user_data_erase_count_min: Min User data erase counts
35-
* @thermal_throttling_event_count: Number of Thermal throttling events
36-
* @dssd_errata_version: DSSD Errata Version
37-
* @dssd_point_version: DSSD Point Version
38-
* @dssd_minor_version: DSSD Minor Version
39-
* @dssd_major_version: DSSD Major Version
40-
* @pcie_correctable_err_count: PCIe Correctable Error Count
41-
* @incomplete_shoutdowns: Incomplete Shutdowns
42-
* @rsvd116: Reserved
43-
* @percent_free_blocks: Percent free blocks
44-
* @rsvd121: Reserved
45-
* @capacitor_health: Capacitor health
46-
* @nvme_base_errata_version: NVM Express Base Errata Version
47-
* @nvme_cmdset_errata_version: NVMe Command Set Errata Version
48-
* @rsvd132: Reserved
49-
* @unaligned_io: Unaligned I/O
50-
* @security_version: Security Version Number
51-
* @total_nuse: Total NUSE - Namespace utilization
52-
* @plp_start_count: PLP start count
53-
* @endurance_estimate: Endurance Estimate
54-
* @pcie_link_retaining_count: PCIe Link Retraining Count
55-
* @power_state_change_count: Power State Change Count
56-
* @lowest_permitted_fw_rev: Lowest Permitted Firmware Revision -------------
57-
* @rsvd216: Reserved
58-
* @log_page_version: Log page version
59-
* @log_page_guid: Log page GUID
19+
* struct ocp_smart_extended_log - SMART / Health Information Extended
20+
* @physical_media_units_written: Physical Media Units Written
21+
* @physical_media_units_read: Physical Media Units Read
22+
* @bad_user_nand_blocks_raw: Bad User NAND Blocks raw
23+
* @bad_user_nand_blocks_normalized: Bad User NAND Blocks normalized
24+
* @bad_system_nand_blocks_raw: Bad System NAND Blocks raw
25+
* @bad_system_nand_blocks_normalized: Bad System NAND Blocks normalized
26+
* @xor_recovery_count: XOR Recovery Count
27+
* @uncorrectable_read_err_count: Uncorrectable Read Error Count
28+
* @soft_ecc_err_count: Soft ECC Error Count
29+
* @end_to_end_detected_err: End to End detected errors
30+
* @end_to_end_corrected_err: End to End corrected errors
31+
* @system_data_used_percent: System data percent used
32+
* @refresh_counts: Refresh Counts
33+
* @user_data_erase_count_max: Max User data erase counts
34+
* @user_data_erase_count_min: Min User data erase counts
35+
* @thermal_throttling_event_count: Number of Thermal throttling events
36+
* @dssd_errata_version: DSSD Errata Version
37+
* @dssd_point_version: DSSD Point Version
38+
* @dssd_minor_version: DSSD Minor Version
39+
* @dssd_major_version: DSSD Major Version
40+
* @pcie_correctable_err_count: PCIe Correctable Error Count
41+
* @incomplete_shoutdowns: Incomplete Shutdowns
42+
* @rsvd116: Reserved
43+
* @percent_free_blocks: Percent free blocks
44+
* @rsvd121: Reserved
45+
* @capacitor_health: Capacitor health
46+
* @nvme_base_errata_version: NVM Express Base Errata Version
47+
* @nvme_cmdset_errata_version: NVMe Command Set Errata Version
48+
* @rsvd132: Reserved
49+
* @nvme_over_pcie_errate_version: NVMe Over Pcie Errata Version
50+
* @nvme_mi_errata_version: NVMe MI Errata Version
51+
* @unaligned_io: Unaligned I/O
52+
* @security_version: Security Version Number
53+
* @total_nuse: Total NUSE - Namespace utilization
54+
* @plp_start_count: PLP start count
55+
* @endurance_estimate: Endurance Estimate
56+
* @pcie_link_retaining_count: PCIe Link Retraining Count
57+
* @power_state_change_count: Power State Change Count
58+
* @lowest_permitted_fw_rev: Lowest Permitted Firmware Revision -------------
59+
* @rsvd216: Reserved
60+
* @total_media_dies: Total media dies
61+
* @total_die_failure_tolerance: Total die failure tolerance
62+
* @media_dies_offline: Media dies offline
63+
* @max_temperature_recorded: Max temperature recorded
64+
* @rsvd223: Reserved
65+
* @nand_avg_erase_count: Nand avg erase count
66+
* @command_timeouts: Command timeouts
67+
* @sys_area_program_fail_count_raw: Sys area program fail count raw
68+
* @sys_area_program_fail_count_normalized: Sys area program fail count noralized
69+
* @revd241: Reserved
70+
* @sys_area_uncorr_read_count_raw: Sys area uncorrectable read count raw
71+
* @sys_area_uncorr_read_count_normalized: Sys area uncorrectable read count noralized
72+
* @revd249: Reserved
73+
* @sys_area_erase_fail_count_raw: Sys area erase fail count raw
74+
* @sys_area_erase_fail_count_normalized: Sys area erase fail count noralized
75+
* @revd257: Reserved
76+
* @max_peak_power_capability: Max peak power capability
77+
* @current_max_avg_power: Current max avg power
78+
* @lifetime_power_consumed: Lifetime power consumed
79+
* @dssd_firmware_revision: Dssd firmware revision
80+
* @dssd_firmware_build_uuid: Dssd firmware build UUID
81+
* @dssd_firmware_build_label: Dssd firmware build label
82+
* @revd358: Reserved
83+
* @log_page_version: Log page version
84+
* @log_page_guid: Log page GUID
6085
*/
6186
struct ocp_smart_extended_log {
6287
__u8 physical_media_units_written[16]; /* [15:0] */
@@ -88,7 +113,9 @@ struct ocp_smart_extended_log {
88113
__le16 capacitor_health; /* [129:128] */
89114
__u8 nvme_base_errata_version; /* [130] */
90115
__u8 nvme_cmdset_errata_version; /* [131] */
91-
__u8 rsvd132[4]; /* [135:132] */
116+
__u8 nvme_over_pcie_errate_version; /* [132] */
117+
__u8 nvme_mi_errata_version; /* [133] */
118+
__u8 rsvd134[2]; /* [135:134] */
92119
__le64 unaligned_io; /* [143:136] */
93120
__le64 security_version; /* [151:144] */
94121
__le64 total_nuse; /* [159:152] */
@@ -97,9 +124,31 @@ struct ocp_smart_extended_log {
97124
__le64 pcie_link_retaining_count; /* [199:192] */
98125
__le64 power_state_change_count; /* [207:200] */
99126
__le64 lowest_permitted_fw_rev; /* [215:208] */
100-
__u8 rsvd216[278]; /* [493:216] */
101-
__le16 log_page_version; /* [495:494] */
102-
__u8 log_page_guid[16]; /* [511:496] */
127+
__le16 total_media_dies; /* [217:216] */
128+
__le16 total_die_failure_tolerance; /* [219:218] */
129+
__le16 media_dies_offline; /* [221:220] */
130+
__u8 max_temperature_recorded; /* [222] */
131+
__u8 rsvd223; /* [223] */
132+
__le64 nand_avg_erase_count; /* [231:224] */
133+
__le32 command_timeouts; /* [235:232] */
134+
__le32 sys_area_program_fail_count_raw; /* [239:236] */
135+
__u8 sys_area_program_fail_count_normalized; /* [240] */
136+
__u8 rsvd241[3]; /* [243:241] */
137+
__le32 sys_area_uncorr_read_count_raw; /* [247:244] */
138+
__u8 sys_area_uncorr_read_count_normalized; /* [248] */
139+
__u8 rsvd249[3]; /* [251:249] */
140+
__le32 sys_area_erase_fail_count_raw; /* [255:252] */
141+
__u8 sys_area_erase_fail_count_normalized; /* [256] */
142+
__u8 rsvd257[3]; /* [259:257] */
143+
__le16 max_peak_power_capability; /* [261:260] */
144+
__le16 current_max_avg_power; /* [263:262] */
145+
__u8 lifetime_power_consumed[6]; /* [269:264] */
146+
__u8 dssd_firmware_revision[8]; /* [277:270] */
147+
__u8 dssd_firmware_build_uuid[16]; /* [293:278] */
148+
__u8 dssd_firmware_build_label[64]; /* [375:294] */
149+
__u8 rsvd358[136]; /* [493:358] */
150+
__le16 log_page_version; /* [495:494] */
151+
__u8 log_page_guid[16]; /* [511:496] */
103152
};
104153

105154
int ocp_smart_add_log(int argc, char **argv, struct command *cmd,

0 commit comments

Comments
 (0)