NVMe: Change nvme_enable_ctrl to set EN and manage CC thru ctrl_config.
Subsystems (2)
PATCH 1/1 NVMe: Change nvme_enable_ctrl to set EN and manage CC thru ctrl_config.
Change the behavior of nvme_enable_ctrl to set EN. Clear CC.SH for both nvme_enable_ctrl and nvme_disable_ctrl. Remove reading of the CC register and manage the state in dev->ctrl_config.
Signed-off-by Dan McLeran <daniel.mcleran at intel.com>
--- drivers/block/nvme-core.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
drivers/block/nvme-core.c +12 -7
@@ -1408,25 +1408,30 @@ static int nvme_wait_ready(struct nvme_dev *dev, u64 cap, bool enabled)*/ static int nvme_disable_ctrl (struct nvme_dev *dev,u64 cap) { -u32 cc =readl (&dev->bar->cc); + dev->ctrl_config &= ~NVME_CC_SHN_MASK ; + dev->ctrl_config &= ~NVME_CC_ENABLE ; +writel (dev->ctrl_config, &dev->bar->cc); -if (cc &NVME_CC_ENABLE ) -writel (cc & ~NVME_CC_ENABLE , &dev->bar->cc);return nvme_wait_ready (dev, cap, false); }static int nvme_enable_ctrl (struct nvme_dev *dev,u64 cap) { + dev->ctrl_config &= ~NVME_CC_SHN_MASK ; + dev->ctrl_config |=NVME_CC_ENABLE ; +writel (dev->ctrl_config, &dev->bar->cc); +return nvme_wait_ready (dev, cap, true); }static int nvme_shutdown_ctrl (struct nvme_dev *dev) {unsigned long timeout; -u32 cc; - cc = (readl (&dev->bar->cc) & ~NVME_CC_SHN_MASK ) |NVME_CC_SHN_NORMAL ; -writel (cc, &dev->bar->cc); + dev->ctrl_config &= ~NVME_CC_SHN_MASK ; + dev->ctrl_config |=NVME_CC_SHN_NORMAL ; + +writel (dev->ctrl_config, &dev->bar->cc); timeout =2 *HZ + jiffies; while ((readl(&dev->bar->csts) & NVME_CSTS_SHST_MASK) !=
@@ -1465,7 +1470,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev) aqa = nvmeq->q_depth -1 ; aqa |= aqa <<16 ; - dev->ctrl_config =NVME_CC_ENABLE |NVME_CC_CSS_NVM ; + dev->ctrl_config =NVME_CC_CSS_NVM ; dev->ctrl_config |= (PAGE_SHIFT -12 ) <<NVME_CC_MPS_SHIFT ; dev->ctrl_config |=NVME_CC_ARB_RR |NVME_CC_SHN_NONE ; dev->ctrl_config |=NVME_CC_IOSQES |NVME_CC_IOCQES ;
Signature · 1 line
1.7.10.4
PATCH 1/1 NVMe: Change nvme_enable_ctrl to set EN and manage CC thru ctrl_config.
drivers/block/nvme-core.c static int nvme_configure_admin_queue(struct nvme_dev *dev) · line 1476
Quoted 9 lines · Dan McLeran
drivers/block/nvme-core.c +1
-1@@ -1465,7 +1470,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev) aqa = nvmeq->q_depth -1 ; aqa |= aqa <<16 ; - dev->ctrl_config =NVME_CC_ENABLE |NVME_CC_CSS_NVM ; + dev->ctrl_config =NVME_CC_CSS_NVM ; dev->ctrl_config |= (PAGE_SHIFT -12 ) <<NVME_CC_MPS_SHIFT ; dev->ctrl_config |=NVME_CC_ARB_RR |NVME_CC_SHN_NONE ; dev->ctrl_config |=NVME_CC_IOSQES |NVME_CC_IOCQES ;
We also want this, right?
@@ -1512,7 +1512,6 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev
writel(aqa, &dev->bar->aqa);
writeq(nvmeq->sq_dma_addr, &dev->bar->asq);
writeq(nvmeq->cq_dma_addr, &dev->bar->acq);- writel(dev->ctrl_config, &dev->bar->cc);
result = nvme_enable_ctrl(dev, cap);
if (result)