[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/17] block/nvme: Use register definitions from 'block/nvme.h'
From: |
Stefan Hajnoczi |
Subject: |
[PULL 05/17] block/nvme: Use register definitions from 'block/nvme.h' |
Date: |
Wed, 30 Sep 2020 11:12:53 +0100 |
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Use the NVMe register definitions from "block/nvme.h" which
ease a bit reviewing the code while matching the datasheet.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20200922083821.578519-6-philmd@redhat.com>
---
block/nvme.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/block/nvme.c b/block/nvme.c
index bd82990b66..959569d262 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -718,22 +718,22 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
* Initialization". */
cap = le64_to_cpu(regs->cap);
- if (!(cap & (1ULL << 37))) {
+ if (!NVME_CAP_CSS(cap)) {
error_setg(errp, "Device doesn't support NVMe command set");
ret = -EINVAL;
goto out;
}
- s->page_size = MAX(4096, 1 << (12 + ((cap >> 48) & 0xF)));
- s->doorbell_scale = (4 << (((cap >> 32) & 0xF))) / sizeof(uint32_t);
+ s->page_size = MAX(4096, 1 << NVME_CAP_MPSMIN(cap));
+ s->doorbell_scale = (4 << NVME_CAP_DSTRD(cap)) / sizeof(uint32_t);
bs->bl.opt_mem_alignment = s->page_size;
- timeout_ms = MIN(500 * ((cap >> 24) & 0xFF), 30000);
+ timeout_ms = MIN(500 * NVME_CAP_TO(cap), 30000);
/* Reset device to get a clean state. */
regs->cc = cpu_to_le32(le32_to_cpu(regs->cc) & 0xFE);
/* Wait for CSTS.RDY = 0. */
deadline = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + timeout_ms * SCALE_MS;
- while (le32_to_cpu(regs->csts) & 0x1) {
+ while (NVME_CSTS_RDY(le32_to_cpu(regs->csts))) {
if (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) > deadline) {
error_setg(errp, "Timeout while waiting for device to reset (%"
PRId64 " ms)",
@@ -761,18 +761,19 @@ static int nvme_init(BlockDriverState *bs, const char
*device, int namespace,
}
s->nr_queues = 1;
QEMU_BUILD_BUG_ON(NVME_QUEUE_SIZE & 0xF000);
- regs->aqa = cpu_to_le32((NVME_QUEUE_SIZE << 16) | NVME_QUEUE_SIZE);
+ regs->aqa = cpu_to_le32((NVME_QUEUE_SIZE << AQA_ACQS_SHIFT) |
+ (NVME_QUEUE_SIZE << AQA_ASQS_SHIFT));
regs->asq = cpu_to_le64(s->queues[INDEX_ADMIN]->sq.iova);
regs->acq = cpu_to_le64(s->queues[INDEX_ADMIN]->cq.iova);
/* After setting up all control registers we can enable device now. */
- regs->cc = cpu_to_le32((ctz32(NVME_CQ_ENTRY_BYTES) << 20) |
- (ctz32(NVME_SQ_ENTRY_BYTES) << 16) |
- 0x1);
+ regs->cc = cpu_to_le32((ctz32(NVME_CQ_ENTRY_BYTES) << CC_IOCQES_SHIFT) |
+ (ctz32(NVME_SQ_ENTRY_BYTES) << CC_IOSQES_SHIFT) |
+ CC_EN_MASK);
/* Wait for CSTS.RDY = 1. */
now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
deadline = now + timeout_ms * 1000000;
- while (!(le32_to_cpu(regs->csts) & 0x1)) {
+ while (!NVME_CSTS_RDY(le32_to_cpu(regs->csts))) {
if (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) > deadline) {
error_setg(errp, "Timeout while waiting for device to start (%"
PRId64 " ms)",
--
2.26.2
- [PULL 00/17] Block patches, Stefan Hajnoczi, 2020/09/30
- [PULL 01/17] util/vfio-helpers: Pass page protections to qemu_vfio_pci_map_bar(), Stefan Hajnoczi, 2020/09/30
- [PULL 02/17] block/nvme: Map doorbells pages write-only, Stefan Hajnoczi, 2020/09/30
- [PULL 04/17] block/nvme: Drop NVMeRegs structure, directly use NvmeBar, Stefan Hajnoczi, 2020/09/30
- [PULL 05/17] block/nvme: Use register definitions from 'block/nvme.h',
Stefan Hajnoczi <=
- [PULL 03/17] block/nvme: Reduce I/O registers scope, Stefan Hajnoczi, 2020/09/30
- [PULL 06/17] block/nvme: Replace magic value by SCALE_MS definition, Stefan Hajnoczi, 2020/09/30
- [PULL 08/17] block/io: refactor coroutine wrappers, Stefan Hajnoczi, 2020/09/30
- [PULL 09/17] block: declare some coroutine functions in block/coroutines.h, Stefan Hajnoczi, 2020/09/30
- [PULL 10/17] scripts: add block-coroutine-wrapper.py, Stefan Hajnoczi, 2020/09/30
- [PULL 11/17] block: generate coroutine-wrapper code, Stefan Hajnoczi, 2020/09/30
- [PULL 13/17] block/io: refactor save/load vmstate, Stefan Hajnoczi, 2020/09/30
- [PULL 14/17] include/block/block.h: drop non-ascii quotation mark, Stefan Hajnoczi, 2020/09/30
- [PULL 12/17] block: drop bdrv_prwv, Stefan Hajnoczi, 2020/09/30
- [PULL 15/17] docs: add 'io_uring' option to 'aio' param in qemu-options.hx, Stefan Hajnoczi, 2020/09/30