NVMe: Move sysfs entries to the right place
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / block / nvme.c
index dc82177..744db38 100644 (file)
@@ -668,6 +668,7 @@ static int __devinit nvme_configure_admin_queue(struct nvme_dev *dev)
        dev->ctrl_config |= (PAGE_SHIFT - 12) << NVME_CC_MPS_SHIFT;
        dev->ctrl_config |= NVME_CC_ARB_RR | NVME_CC_SHN_NONE;
 
+       writel(0, &dev->bar->cc);
        writel(aqa, &dev->bar->aqa);
        writeq(nvmeq->sq_dma_addr, &dev->bar->asq);
        writeq(nvmeq->cq_dma_addr, &dev->bar->acq);
@@ -888,6 +889,7 @@ static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, int index,
        disk->fops = &nvme_fops;
        disk->private_data = ns;
        disk->queue = ns->queue;
+       disk->driverfs_dev = &dev->pci_dev->dev;
        sprintf(disk->disk_name, "nvme%dn%d", dev->instance, index);
        set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));
 
@@ -1088,7 +1090,7 @@ static void nvme_release_instance(struct nvme_dev *dev)
 static int __devinit nvme_probe(struct pci_dev *pdev,
                                                const struct pci_device_id *id)
 {
-       int result = -ENOMEM;
+       int bars, result = -ENOMEM;
        struct nvme_dev *dev;
 
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
@@ -1103,17 +1105,25 @@ static int __devinit nvme_probe(struct pci_dev *pdev,
        if (!dev->queues)
                goto free;
 
+       if (pci_enable_device_mem(pdev))
+               goto free;
+       pci_set_master(pdev);
+       bars = pci_select_bars(pdev, IORESOURCE_MEM);
+       if (pci_request_selected_regions(pdev, bars, "nvme"))
+               goto disable;
+
        INIT_LIST_HEAD(&dev->namespaces);
        dev->pci_dev = pdev;
        pci_set_drvdata(pdev, dev);
-       dma_set_mask(&dev->pci_dev->dev, DMA_BIT_MASK(64));
+       dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
+       dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
        nvme_set_instance(dev);
        dev->entry[0].vector = pdev->irq;
 
        dev->bar = ioremap(pci_resource_start(pdev, 0), 8192);
        if (!dev->bar) {
                result = -ENOMEM;
-               goto disable;
+               goto disable_msix;
        }
 
        result = nvme_configure_admin_queue(dev);
@@ -1130,9 +1140,12 @@ static int __devinit nvme_probe(struct pci_dev *pdev,
        nvme_free_queues(dev);
  unmap:
        iounmap(dev->bar);
- disable:
+ disable_msix:
        pci_disable_msix(pdev);
        nvme_release_instance(dev);
+ disable:
+       pci_disable_device(pdev);
+       pci_release_regions(pdev);
  free:
        kfree(dev->queues);
        kfree(dev->entry);
@@ -1147,6 +1160,8 @@ static void __devexit nvme_remove(struct pci_dev *pdev)
        pci_disable_msix(pdev);
        iounmap(dev->bar);
        nvme_release_instance(dev);
+       pci_disable_device(pdev);
+       pci_release_regions(pdev);
        kfree(dev->queues);
        kfree(dev->entry);
        kfree(dev);