]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
nvme: Cache controller's capabilities
authorBin Meng <bmeng.cn@gmail.com>
Tue, 22 Aug 2017 15:15:10 +0000 (08:15 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 28 Aug 2017 11:17:11 +0000 (07:17 -0400)
Capabilities register is RO and accessed at various places in the
driver. Let's cache it in the controller driver's priv struct.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
drivers/nvme/nvme.c
drivers/nvme/nvme.h

index 2ae947c6725557c62d05cb4c27d0a3566d895949..d92273e67f7ba61f61b12675d06cc72a393a9a97 100644 (file)
@@ -318,7 +318,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
 {
        int result;
        u32 aqa;
-       u64 cap = nvme_readq(&dev->bar->cap);
+       u64 cap = dev->cap;
        struct nvme_queue *nvmeq;
        /* most architectures use 4KB as the page size */
        unsigned page_shift = 12;
@@ -549,7 +549,7 @@ static int nvme_get_info_from_identify(struct nvme_dev *dev)
 {
        struct nvme_id_ctrl buf, *ctrl = &buf;
        int ret;
-       int shift = NVME_CAP_MPSMIN(nvme_readq(&dev->bar->cap)) + 12;
+       int shift = NVME_CAP_MPSMIN(dev->cap) + 12;
 
        ret = nvme_identify(dev, 0, 1, (dma_addr_t)ctrl);
        if (ret)
@@ -772,7 +772,6 @@ static int nvme_probe(struct udevice *udev)
 {
        int ret;
        struct nvme_dev *ndev = dev_get_priv(udev);
-       u64 cap;
 
        ndev->instance = trailing_strtol(udev->name);
 
@@ -801,9 +800,9 @@ static int nvme_probe(struct udevice *udev)
        }
        ndev->prp_entry_num = MAX_PRP_POOL >> 3;
 
-       cap = nvme_readq(&ndev->bar->cap);
-       ndev->q_depth = min_t(int, NVME_CAP_MQES(cap) + 1, NVME_Q_DEPTH);
-       ndev->db_stride = 1 << NVME_CAP_STRIDE(cap);
+       ndev->cap = nvme_readq(&ndev->bar->cap);
+       ndev->q_depth = min_t(int, NVME_CAP_MQES(ndev->cap) + 1, NVME_Q_DEPTH);
+       ndev->db_stride = 1 << NVME_CAP_STRIDE(ndev->cap);
        ndev->dbs = ((void __iomem *)ndev->bar) + 4096;
 
        ret = nvme_configure_admin_queue(ndev);
index cd411be83d550287dbdcfb25eba931f81d7b413a..f0fa6399bf7cf16c11af5a8fbf3c0d12cc8d19be 100644 (file)
@@ -621,6 +621,7 @@ struct nvme_dev {
        char model[40];
        char firmware_rev[8];
        u32 max_transfer_shift;
+       u64 cap;
        u32 stripe_size;
        u32 page_size;
        u8 vwc;