nvme/identify: print firmware slot information
Change-Id: I730fa785f91034e15881d4ca3b94a98e9381f89b Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/405825 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
5b550ae9d6
commit
f945642ac3
@ -59,6 +59,8 @@ static struct spdk_nvme_error_information_entry error_page[256];
|
|||||||
|
|
||||||
static struct spdk_nvme_health_information_page health_page;
|
static struct spdk_nvme_health_information_page health_page;
|
||||||
|
|
||||||
|
static struct spdk_nvme_firmware_page firmware_page;
|
||||||
|
|
||||||
static struct spdk_nvme_intel_smart_information_page intel_smart_page;
|
static struct spdk_nvme_intel_smart_information_page intel_smart_page;
|
||||||
|
|
||||||
static struct spdk_nvme_intel_temperature_page intel_temperature_page;
|
static struct spdk_nvme_intel_temperature_page intel_temperature_page;
|
||||||
@ -223,6 +225,18 @@ get_health_log_page(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_firmware_log_page(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
|
{
|
||||||
|
if (spdk_nvme_ctrlr_cmd_get_log_page(ctrlr, SPDK_NVME_LOG_FIRMWARE_SLOT,
|
||||||
|
SPDK_NVME_GLOBAL_NS_TAG, &firmware_page, sizeof(firmware_page), 0, get_log_page_completion, NULL)) {
|
||||||
|
printf("spdk_nvme_ctrlr_cmd_get_log_page() failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_intel_smart_log_page(struct spdk_nvme_ctrlr *ctrlr)
|
get_intel_smart_log_page(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
{
|
{
|
||||||
@ -371,6 +385,12 @@ get_log_pages(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
printf("Get Log Page (SMART/health) failed\n");
|
printf("Get Log Page (SMART/health) failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (get_firmware_log_page(ctrlr) == 0) {
|
||||||
|
outstanding_commands++;
|
||||||
|
} else {
|
||||||
|
printf("Get Log Page (Firmware Slot Information) failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (cdata->vid == SPDK_PCI_VID_INTEL) {
|
if (cdata->vid == SPDK_PCI_VID_INTEL) {
|
||||||
if (spdk_nvme_ctrlr_is_log_page_supported(ctrlr, SPDK_NVME_INTEL_LOG_SMART)) {
|
if (spdk_nvme_ctrlr_is_log_page_supported(ctrlr, SPDK_NVME_INTEL_LOG_SMART)) {
|
||||||
if (get_intel_smart_log_page(ctrlr) == 0) {
|
if (get_intel_smart_log_page(ctrlr) == 0) {
|
||||||
@ -452,6 +472,27 @@ print_uint_var_dec(uint8_t *array, unsigned int len)
|
|||||||
printf("%lu", result);
|
printf("%lu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print ASCII string as defined by the NVMe spec */
|
||||||
|
static void
|
||||||
|
print_ascii_string(const void *buf, size_t size)
|
||||||
|
{
|
||||||
|
const uint8_t *str = buf;
|
||||||
|
|
||||||
|
/* Trim trailing spaces */
|
||||||
|
while (size > 0 && str[size - 1] == ' ') {
|
||||||
|
size--;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (size--) {
|
||||||
|
if (*str >= 0x20 && *str <= 0x7E) {
|
||||||
|
printf("%c", *str);
|
||||||
|
} else {
|
||||||
|
printf(".");
|
||||||
|
}
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_namespace(struct spdk_nvme_ns *ns)
|
print_namespace(struct spdk_nvme_ns *ns)
|
||||||
{
|
{
|
||||||
@ -780,6 +821,25 @@ print_controller(struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_transport
|
|||||||
cdata->sgls.sgl_offset ? "Supported" : "Not Supported");
|
cdata->sgls.sgl_offset ? "Supported" : "Not Supported");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
printf("Firmware Slot Information\n");
|
||||||
|
printf("=========================\n");
|
||||||
|
if (g_hex_dump) {
|
||||||
|
hex_dump(&firmware_page, sizeof(firmware_page));
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
printf("Active slot: %u\n", firmware_page.afi.active_slot);
|
||||||
|
if (firmware_page.afi.next_reset_slot) {
|
||||||
|
printf("Next controller reset slot: %u\n", firmware_page.afi.next_reset_slot);
|
||||||
|
}
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
if (!spdk_mem_all_zero(firmware_page.revision[i], sizeof(firmware_page.revision[i]))) {
|
||||||
|
printf("Slot %u Firmware Revision: ", i + 1);
|
||||||
|
print_ascii_string(firmware_page.revision[i], sizeof(firmware_page.revision[i]));
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
printf("Error Log\n");
|
printf("Error Log\n");
|
||||||
printf("=========\n");
|
printf("=========\n");
|
||||||
for (i = 0; i <= cdata->elpe; i++) {
|
for (i = 0; i <= cdata->elpe; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user