Merge tag 'v3.10.75' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / ntb / ntb_hw.c
index 2dacd19e1b8a15c5a7c8d66db2eb7cb2793a58ed..b9bf8b551e3c61b2e7189608c731509a1c6f10c4 100644 (file)
@@ -78,6 +78,8 @@ enum {
        BWD_HW,
 };
 
+static struct dentry *debugfs_dir;
+
 /* Translate memory window 0,1 to BAR 2,4 */
 #define MW_TO_BAR(mw)  (mw * 2 + 2)
 
@@ -531,9 +533,9 @@ static int ntb_xeon_setup(struct ntb_device *ndev)
        }
 
        if (val & SNB_PPD_DEV_TYPE)
-               ndev->dev_type = NTB_DEV_DSD;
-       else
                ndev->dev_type = NTB_DEV_USD;
+       else
+               ndev->dev_type = NTB_DEV_DSD;
 
        ndev->reg_ofs.pdb = ndev->reg_base + SNB_PDOORBELL_OFFSET;
        ndev->reg_ofs.pdb_mask = ndev->reg_base + SNB_PDBMSK_OFFSET;
@@ -547,7 +549,7 @@ static int ntb_xeon_setup(struct ntb_device *ndev)
        if (ndev->conn_type == NTB_CONN_B2B) {
                ndev->reg_ofs.sdb = ndev->reg_base + SNB_B2B_DOORBELL_OFFSET;
                ndev->reg_ofs.spad_write = ndev->reg_base + SNB_B2B_SPAD_OFFSET;
-               ndev->limits.max_spads = SNB_MAX_SPADS;
+               ndev->limits.max_spads = SNB_MAX_B2B_SPADS;
        } else {
                ndev->reg_ofs.sdb = ndev->reg_base + SNB_SDOORBELL_OFFSET;
                ndev->reg_ofs.spad_write = ndev->reg_base + SNB_SPAD_OFFSET;
@@ -644,10 +646,16 @@ static int ntb_device_setup(struct ntb_device *ndev)
                rc = -ENODEV;
        }
 
+       if (rc)
+               return rc;
+
+       dev_info(&ndev->pdev->dev, "Device Type = %s\n",
+                ndev->dev_type == NTB_DEV_USD ? "USD/DSP" : "DSD/USP");
+
        /* Enable Bus Master and Memory Space on the secondary side */
        writew(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER, ndev->reg_ofs.spci_cmd);
 
-       return rc;
+       return 0;
 }
 
 static void ntb_device_free(struct ntb_device *ndev)
@@ -992,6 +1000,28 @@ static void ntb_free_callbacks(struct ntb_device *ndev)
        kfree(ndev->db_cb);
 }
 
+static void ntb_setup_debugfs(struct ntb_device *ndev)
+{
+       if (!debugfs_initialized())
+               return;
+
+       if (!debugfs_dir)
+               debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
+
+       ndev->debugfs_dir = debugfs_create_dir(pci_name(ndev->pdev),
+                                              debugfs_dir);
+}
+
+static void ntb_free_debugfs(struct ntb_device *ndev)
+{
+       debugfs_remove_recursive(ndev->debugfs_dir);
+
+       if (debugfs_dir && simple_empty(debugfs_dir)) {
+               debugfs_remove_recursive(debugfs_dir);
+               debugfs_dir = NULL;
+       }
+}
+
 static int ntb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
        struct ntb_device *ndev;
@@ -1004,6 +1034,7 @@ static int ntb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        ndev->pdev = pdev;
        ndev->link_status = NTB_LINK_DOWN;
        pci_set_drvdata(pdev, ndev);
+       ntb_setup_debugfs(ndev);
 
        rc = pci_enable_device(pdev);
        if (rc)
@@ -1100,6 +1131,7 @@ err2:
 err1:
        pci_disable_device(pdev);
 err:
+       ntb_free_debugfs(ndev);
        kfree(ndev);
 
        dev_err(&pdev->dev, "Error loading %s module\n", KBUILD_MODNAME);
@@ -1129,6 +1161,7 @@ static void ntb_pci_remove(struct pci_dev *pdev)
        iounmap(ndev->reg_base);
        pci_release_selected_regions(pdev, NTB_BAR_MASK);
        pci_disable_device(pdev);
+       ntb_free_debugfs(ndev);
        kfree(ndev);
 }