Skip to content

Commit 0a2df76

Browse files
hmi-jeonsc108-lee
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 13890ab commit 0a2df76

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
@@ -144,7 +144,10 @@ static void json_smart_extended_log_v1(struct ocp_smart_extended_log *log)
144144
struct json_object *pmuw;
145145
struct json_object *pmur;
146146
uint16_t smart_log_ver = 0;
147+
int i = 0;
147148
char guid[40];
149+
char ascii_arr[65];
150+
char *ascii = ascii_arr;
148151

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

260309
root = json_create_object();
261310
pmuw = json_create_object();
@@ -338,6 +387,49 @@ static void json_smart_extended_log_v2(struct ocp_smart_extended_log *log)
338387
log->nvme_cmdset_errata_version);
339388
json_object_add_value_uint(root, "lowest_permitted_firmware_revision",
340389
le64_to_cpu(log->lowest_permitted_fw_rev));
390+
json_object_add_value_uint(root, "nvme_over_pcie_errata_version",
391+
log->nvme_over_pcie_errate_version);
392+
json_object_add_value_uint(root, "nvme_mi_errata_version",
393+
log->nvme_mi_errata_version);
394+
json_object_add_value_uint(root, "total_media_dies",
395+
le16_to_cpu(log->total_media_dies));
396+
json_object_add_value_uint(root, "total_die_failure_tolerance",
397+
le16_to_cpu(log->total_die_failure_tolerance));
398+
json_object_add_value_uint(root, "max_temperature_recorded",
399+
le16_to_cpu(log->max_temperature_recorded));
400+
json_object_add_value_uint64(root, "nand_avg_erase_count",
401+
le64_to_cpu(log->nand_avg_erase_count));
402+
json_object_add_value_uint(root, "command_timeouts",
403+
le32_to_cpu(log->command_timeouts));
404+
json_object_add_value_uint(root, "sys_area_program_fail_count_raw",
405+
le32_to_cpu(log->sys_area_program_fail_count_raw));
406+
json_object_add_value_uint(root, "sys_area_program_fail_count_noralized",
407+
log->sys_area_program_fail_count_normalized);
408+
json_object_add_value_uint(root, "sys_area_uncorrectable_read_count_raw",
409+
le32_to_cpu(log->sys_area_uncorr_read_count_raw));
410+
json_object_add_value_uint(root, "sys_area_uncorrectable_read_count_noralized",
411+
log->sys_area_uncorr_read_count_normalized);
412+
json_object_add_value_uint(root, "sys_area_erase_fail_count_raw",
413+
le32_to_cpu(log->sys_area_erase_fail_count_raw));
414+
json_object_add_value_uint(root, "sys_area_erase_fail_count_noralized",
415+
log->sys_area_erase_fail_count_normalized);
416+
json_object_add_value_uint(root, "max_peak_power_capability",
417+
le16_to_cpu(log->max_peak_power_capability));
418+
json_object_add_value_uint(root, "current_max_avg_power",
419+
le16_to_cpu(log->current_max_avg_power));
420+
json_object_add_value_uint64(root, "lifetime_power_consumed",
421+
int48_to_long(log->lifetime_power_consumed));
422+
memset((void *)ascii, 0, 65);
423+
for (i = 0; i < 8; i++)
424+
ascii += sprintf(ascii, "%c", log->dssd_firmware_revision[i]);
425+
json_object_add_value_string(root, "dssd_firmware_revision", ascii_arr);
426+
json_object_add_value_string(root, "dssd_firmware_build_uuid",
427+
util_uuid_to_string(log->dssd_firmware_build_uuid));
428+
ascii = ascii_arr;
429+
memset((void *)ascii, 0, 65);
430+
for (i = 0; i < 64; i++)
431+
ascii += sprintf(ascii, "%c", log->dssd_firmware_build_label[i]);
432+
json_object_add_value_string(root, "dssd_firmware_build_label", ascii_arr);
341433
fallthrough;
342434
case 2 ... 3:
343435
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
@@ -100,6 +100,7 @@ static void stdout_fw_activation_history(const struct fw_activation_history *fw_
100100
static void stdout_smart_extended_log(struct ocp_smart_extended_log *log, unsigned int version)
101101
{
102102
uint16_t smart_log_ver = 0;
103+
int i = 0;
103104

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

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