Merge tag 'ntb-5.4' of git://github.com/jonmason/ntb
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 27 Sep 2019 18:05:49 +0000 (11:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 27 Sep 2019 18:05:49 +0000 (11:05 -0700)
Pull NTB updates from Jon Mason:
 "A few bugfixes and support for new AMD NTB hardware"

* tag 'ntb-5.4' of git://github.com/jonmason/ntb:
  NTB: fix IDT Kconfig typos/spellos
  ntb_hw_amd: Add memory window support for new AMD hardware
  ntb_hw_amd: Add a new NTB PCI device ID
  NTB: ntb_transport: remove redundant assignment to rc
  ntb_hw_switchtec: make ntb_mw_set_trans() work when addr == 0
  ntb: point to right memory window index

drivers/ntb/hw/amd/ntb_hw_amd.c
drivers/ntb/hw/amd/ntb_hw_amd.h
drivers/ntb/hw/idt/Kconfig
drivers/ntb/hw/mscc/ntb_hw_switchtec.c
drivers/ntb/ntb_transport.c
drivers/ntb/test/ntb_perf.c

index 2859cc99b73e65beaecc45e620cbda7898fd0daa..156c2a18a239458d0f81f9eb82d9db367db2d52d 100644 (file)
@@ -78,7 +78,7 @@ static int ndev_mw_to_bar(struct amd_ntb_dev *ndev, int idx)
        if (idx < 0 || idx > ndev->mw_count)
                return -EINVAL;
 
-       return 1 << idx;
+       return ndev->dev_data->mw_idx << idx;
 }
 
 static int amd_ntb_mw_count(struct ntb_dev *ntb, int pidx)
@@ -909,7 +909,7 @@ static int amd_init_ntb(struct amd_ntb_dev *ndev)
 {
        void __iomem *mmio = ndev->self_mmio;
 
-       ndev->mw_count = AMD_MW_CNT;
+       ndev->mw_count = ndev->dev_data->mw_count;
        ndev->spad_count = AMD_SPADS_CNT;
        ndev->db_count = AMD_DB_CNT;
 
@@ -1069,6 +1069,8 @@ static int amd_ntb_pci_probe(struct pci_dev *pdev,
                goto err_ndev;
        }
 
+       ndev->dev_data = (struct ntb_dev_data *)id->driver_data;
+
        ndev_init_struct(ndev, pdev);
 
        rc = amd_ntb_init_pci(ndev, pdev);
@@ -1123,9 +1125,21 @@ static const struct file_operations amd_ntb_debugfs_info = {
        .read = ndev_debugfs_read,
 };
 
+static const struct ntb_dev_data dev_data[] = {
+       { /* for device 145b */
+               .mw_count = 3,
+               .mw_idx = 1,
+       },
+       { /* for device 148b */
+               .mw_count = 2,
+               .mw_idx = 2,
+       },
+};
+
 static const struct pci_device_id amd_ntb_pci_tbl[] = {
-       {PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_NTB)},
-       {0}
+       { PCI_VDEVICE(AMD, 0x145b), (kernel_ulong_t)&dev_data[0] },
+       { PCI_VDEVICE(AMD, 0x148b), (kernel_ulong_t)&dev_data[1] },
+       { 0, }
 };
 MODULE_DEVICE_TABLE(pci, amd_ntb_pci_tbl);
 
index 8f3617a46292dbc31e6d46e2adb8a3d34fb929b8..139a307147bc43523b2a83aedc51dd8e899668b1 100644 (file)
@@ -52,7 +52,6 @@
 #include <linux/ntb.h>
 #include <linux/pci.h>
 
-#define PCI_DEVICE_ID_AMD_NTB  0x145B
 #define AMD_LINK_HB_TIMEOUT    msecs_to_jiffies(1000)
 #define AMD_LINK_STATUS_OFFSET 0x68
 #define NTB_LIN_STA_ACTIVE_BIT 0x00000002
@@ -93,7 +92,6 @@ static inline void _write64(u64 val, void __iomem *mmio)
 
 enum {
        /* AMD NTB Capability */
-       AMD_MW_CNT              = 3,
        AMD_DB_CNT              = 16,
        AMD_MSIX_VECTOR_CNT     = 24,
        AMD_SPADS_CNT           = 16,
@@ -170,6 +168,11 @@ enum {
        AMD_PEER_OFFSET         = 0x400,
 };
 
+struct ntb_dev_data {
+       const unsigned char mw_count;
+       const unsigned int mw_idx;
+};
+
 struct amd_ntb_dev;
 
 struct amd_ntb_vec {
@@ -185,6 +188,7 @@ struct amd_ntb_dev {
        u32 cntl_sta;
        u32 peer_sta;
 
+       struct ntb_dev_data *dev_data;
        unsigned char mw_count;
        unsigned char spad_count;
        unsigned char db_count;
index bfc7cac94102ee4df4f97b4f68bdaa2640c099ce..c79b54c1747d4d16281cebd44542c3ec145e5c32 100644 (file)
@@ -4,11 +4,11 @@ config NTB_IDT
        depends on PCI
        select HWMON
        help
-        This driver supports NTB of cappable IDT PCIe-switches.
+        This driver supports NTB of capable IDT PCIe-switches.
 
         Some of the pre-initializations must be made before IDT PCIe-switch
-        exposes it NT-functions correctly. It should be done by either proper
-        initialisation of EEPROM connected to master smbus of the switch or
+        exposes its NT-functions correctly. It should be done by either proper
+        initialization of EEPROM connected to master SMbus of the switch or
         by BIOS using slave-SMBus interface changing corresponding registers
         value. Evidently it must be done before PCI bus enumeration is
         finished in Linux kernel.
index f4959458d90967621919b6274814ef3c1befc244..86ffa716eaf22893f0727f8c0883c34dc97600cb 100644 (file)
@@ -306,7 +306,7 @@ static int switchtec_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int widx,
        if (rc)
                return rc;
 
-       if (addr == 0 || size == 0) {
+       if (size == 0) {
                if (widx < nr_direct_mw)
                        switchtec_ntb_mw_clr_direct(sndev, widx);
                else
index 40c90ca10729675069c576a31f6a86a0f4e6b9ac..00a5d5764993c0339268ba98bf08a55bd4bc2ac1 100644 (file)
@@ -292,7 +292,7 @@ static int ntb_transport_bus_match(struct device *dev,
 static int ntb_transport_bus_probe(struct device *dev)
 {
        const struct ntb_transport_client *client;
-       int rc = -EINVAL;
+       int rc;
 
        get_device(dev);
 
index d028331558ea7ae49a79bc3c501e6af71f69996b..e9b7c2dfc730194bab081529569e07cf861734d1 100644 (file)
@@ -1378,7 +1378,7 @@ static int perf_setup_peer_mw(struct perf_peer *peer)
        int ret;
 
        /* Get outbound MW parameters and map it */
-       ret = ntb_peer_mw_get_addr(perf->ntb, peer->gidx, &phys_addr,
+       ret = ntb_peer_mw_get_addr(perf->ntb, perf->gidx, &phys_addr,
                                   &peer->outbuf_size);
        if (ret)
                return ret;