From 5ec76efb2e332bdb55d8f6f53e2b4701f236c089 Mon Sep 17 00:00:00 2001 From: Tokunori Ikegami Date: Sat, 23 Mar 2024 11:18:56 +0900 Subject: [PATCH] nvme-print: Refactor CMBLOC and PMRSTS registers function Move the mmio_read up the call chain. Signed-off-by: Tokunori Ikegami --- nvme-print-json.c | 36 +++++++++++++++++++++--------------- nvme-print-stdout.c | 5 +++-- nvme-print.c | 9 +++++++++ nvme-print.h | 2 ++ 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/nvme-print-json.c b/nvme-print-json.c index 870c98b4..ed8f3232 100644 --- a/nvme-print-json.c +++ b/nvme-print-json.c @@ -1049,13 +1049,11 @@ static void json_registers_acq(uint64_t acq, struct json_object *r) obj_add_prix64(r, "Admin Completion Queue Base (ACQB)", acq); } -static void json_registers_cmbloc(uint32_t cmbloc, void *bar, struct json_object *r) +static void json_registers_cmbloc(uint32_t cmbloc, bool support, struct json_object *r) { - uint32_t cmbsz = mmio_read32(bar + NVME_REG_CMBSZ); - obj_add_uint_x(r, "cmbloc", cmbloc); - if (!cmbsz) { + if (!support) { obj_add_result(r, "Controller Memory Buffer feature is not supported"); return; } @@ -1184,17 +1182,15 @@ static void json_registers_pmrctl(uint32_t pmrctl, struct json_object *r) obj_add_str(r, "Enable (EN)", pmrctl & 1 ? "Ready" : "Disabled"); } -static void json_registers_pmrsts(uint32_t pmrsts, void *bar, struct json_object *r) +static void json_registers_pmrsts(uint32_t pmrsts, bool ready, struct json_object *r) { - uint32_t pmrctl = mmio_read32(bar + NVME_REG_PMRCTL); - obj_add_uint_x(r, "pmrsts", pmrsts); obj_add_uint_x(r, "Controller Base Address Invalid (CBAI)", (pmrsts & 0x1000) >> 12); obj_add_str(r, "Health Status (HSTS)", - nvme_register_pmr_hsts_to_string((pmrsts & 0xe00) >> 9)); + nvme_register_pmr_hsts_to_string((pmrsts & 0xe00) >> 9)); obj_add_str(r, "Not Ready (NRDY)", - !(pmrsts & 0x100) && (pmrctl & 1) ? "Ready" : "Not ready"); + !(pmrsts & 0x100) && ready ? "Ready" : "Not ready"); obj_add_uint_x(r, "Error (ERR)", pmrsts & 0xff); } @@ -2543,11 +2539,16 @@ static void json_ctrl_registers_acq(void *bar, struct json_object *r) static void json_ctrl_registers_cmbloc(void *bar, struct json_object *r) { uint32_t cmbloc = mmio_read32(bar + NVME_REG_CMBLOC); + uint32_t cmbsz; + bool support; - if (human()) - json_registers_cmbloc(cmbloc, bar, obj_create_array_obj(r, "cmbloc")); - else + if (human()) { + cmbsz = mmio_read32(bar + NVME_REG_CMBSZ); + support = nvme_registers_cmbloc_support(cmbsz); + json_registers_cmbloc(cmbloc, support, obj_create_array_obj(r, "cmbloc")); + } else { obj_add_int(r, "cmbloc", cmbloc); + } } static void json_ctrl_registers_cmbsz(void *bar, struct json_object *r) @@ -2633,11 +2634,16 @@ static void json_ctrl_registers_pmrctl(void *bar, struct json_object *r) static void json_ctrl_registers_pmrsts(void *bar, struct json_object *r) { uint32_t pmrsts = mmio_read32(bar + NVME_REG_PMRSTS); + uint32_t pmrctl; + bool ready; - if (human()) - json_registers_pmrsts(pmrsts, bar, obj_create_array_obj(r, "pmrsts")); - else + if (human()) { + pmrctl = mmio_read32(bar + NVME_REG_PMRCTL); + ready = nvme_registers_pmrctl_ready(pmrctl); + json_registers_pmrsts(pmrsts, ready, obj_create_array_obj(r, "pmrsts")); + } else { obj_add_int(r, "pmrsts", pmrsts); + } } static void json_ctrl_registers_pmrebs(void *bar, struct json_object *r) diff --git a/nvme-print-stdout.c b/nvme-print-stdout.c index 0b745619..d2b36df1 100644 --- a/nvme-print-stdout.c +++ b/nvme-print-stdout.c @@ -1225,14 +1225,15 @@ static void stdout_registers_aqa(__u32 aqa) printf("\tAdmin Submission Queue Size (ASQS): %u\n\n", NVME_AQA_ASQS(aqa) + 1); } -static void stdout_registers_cmbloc(__u32 cmbloc, __u32 cmbsz) +static void stdout_registers_cmbloc(__u32 cmbloc, bool support) { static const char * const enforced[] = { "Enforced", "Not Enforced" }; - if (cmbsz == 0) { + if (!support) { printf("\tController Memory Buffer feature is not supported\n\n"); return; } + printf("\tOffset (OFST): "); printf("%#x (See cmbsz.szu for granularity)\n", (cmbloc & 0xfffff000) >> 12); diff --git a/nvme-print.c b/nvme-print.c index 0a8deb2a..ed58032f 100644 --- a/nvme-print.c +++ b/nvme-print.c @@ -362,6 +362,15 @@ const char *nvme_register_pmr_pmrszu_to_string(__u8 pmrszu) } } +bool nvme_registers_cmbloc_support(__u32 cmbsz) +{ + return !!cmbsz; +} + +bool nvme_registers_pmrctl_ready(__u32 pmrctl) +{ + return NVME_PMRCTL_EN(pmrctl); +} void nvme_show_ctrl_registers(void *bar, bool fabrics, enum nvme_print_flags flags) { nvme_print(ctrl_registers, flags, bar, fabrics); diff --git a/nvme-print.h b/nvme-print.h index d2a32f5a..fcca8e93 100644 --- a/nvme-print.h +++ b/nvme-print.h @@ -312,4 +312,6 @@ void nvme_show_perror(const char *msg); void nvme_show_error_status(int status, const char *msg, ...); void nvme_show_init(void); void nvme_show_finish(void); +bool nvme_registers_cmbloc_support(__u32 cmbsz); +bool nvme_registers_pmrctl_ready(__u32 pmrctl); #endif /* NVME_PRINT_H */ -- 2.50.1