block/nvme: Trace NVMe spec version supported by the controller
NVMe controllers implement different versions of the spec, and different features of it. It is useful to gather this information when debugging. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20210127212137.3482291-3-philmd@redhat.com> Reviewed-by: Klaus Jensen <k.jensen@samsung.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
97b709f32e
commit
fcc8672aca
@ -708,6 +708,7 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
|
||||
AioContext *aio_context = bdrv_get_aio_context(bs);
|
||||
int ret;
|
||||
uint64_t cap;
|
||||
uint32_t ver;
|
||||
uint64_t timeout_ms;
|
||||
uint64_t deadline, now;
|
||||
volatile NvmeBar *regs = NULL;
|
||||
@ -764,6 +765,11 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
|
||||
bs->bl.request_alignment = s->page_size;
|
||||
timeout_ms = MIN(500 * NVME_CAP_TO(cap), 30000);
|
||||
|
||||
ver = le32_to_cpu(regs->vs);
|
||||
trace_nvme_controller_spec_version(extract32(ver, 16, 16),
|
||||
extract32(ver, 8, 8),
|
||||
extract32(ver, 0, 8));
|
||||
|
||||
/* Reset device to get a clean state. */
|
||||
regs->cc = cpu_to_le32(le32_to_cpu(regs->cc) & 0xFE);
|
||||
/* Wait for CSTS.RDY = 0. */
|
||||
|
@ -136,6 +136,7 @@ qed_aio_write_main(void *s, void *acb, int ret, uint64_t offset, size_t len) "s
|
||||
# nvme.c
|
||||
nvme_controller_capability_raw(uint64_t value) "0x%08"PRIx64
|
||||
nvme_controller_capability(const char *desc, uint64_t value) "%s: %"PRIu64
|
||||
nvme_controller_spec_version(uint32_t mjr, uint32_t mnr, uint32_t ter) "Specification supported: %u.%u.%u"
|
||||
nvme_kick(void *s, unsigned q_index) "s %p q #%u"
|
||||
nvme_dma_flush_queue_wait(void *s) "s %p"
|
||||
nvme_error(int cmd_specific, int sq_head, int sqid, int cid, int status) "cmd_specific %d sq_head %d sqid %d cid %d status 0x%x"
|
||||
|
Loading…
Reference in New Issue
Block a user