git: 6af6a52ee47b - main - nvme: Save cap_lo and cap_hi

From: Warner Losh <imp_at_FreeBSD.org>
Date: Fri, 01 Apr 2022 03:17:58 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=6af6a52ee47bbe1b6148006bd33377f419f9643a

commit 6af6a52ee47bbe1b6148006bd33377f419f9643a
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2022-03-29 22:59:05 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2022-04-01 03:12:38 +0000

    nvme: Save cap_lo and cap_hi
    
    Save the capabilities for the drive.
    
    Sponsored by:           Netflix
---
 sys/dev/nvme/nvme_ctrlr.c   | 4 ++--
 sys/dev/nvme/nvme_private.h | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index a632d7fb68e9..95a2b5c4285d 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -1388,7 +1388,7 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev)
 	if (bus_get_domain(dev, &ctrlr->domain) != 0)
 		ctrlr->domain = 0;
 
-	cap_lo = nvme_mmio_read_4(ctrlr, cap_lo);
+	ctrlr->cap_lo = cap_lo = nvme_mmio_read_4(ctrlr, cap_lo);
 	if (bootverbose) {
 		device_printf(dev, "CapLo: 0x%08x: MQES %u%s%s%s%s, TO %u\n",
 		    cap_lo, NVME_CAP_LO_MQES(cap_lo),
@@ -1398,7 +1398,7 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev)
 		    (NVME_CAP_LO_AMS(cap_lo) & 0x2) ? " VS" : "",
 		    NVME_CAP_LO_TO(cap_lo));
 	}
-	cap_hi = nvme_mmio_read_4(ctrlr, cap_hi);
+	ctrlr->cap_hi = cap_hi = nvme_mmio_read_4(ctrlr, cap_hi);
 	if (bootverbose) {
 		device_printf(dev, "CapHi: 0x%08x: DSTRD %u%s, CSS %x%s, "
 		    "MPSMIN %u, MPSMAX %u%s%s\n", cap_hi,
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index 977cc2c8d30d..eaf0468096c4 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -284,6 +284,10 @@ struct nvme_controller {
 	/** maximum i/o size in bytes */
 	uint32_t		max_xfer_size;
 
+	/** LO and HI capacity mask */
+	uint32_t		cap_lo;
+	uint32_t		cap_hi;
+
 	/** minimum page size supported by this controller in bytes */
 	uint32_t		min_page_size;