Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
[firefly-linux-kernel-4.4.55.git] / drivers / net / ethernet / chelsio / cxgb4 / cxgb4_main.c
index aeeb21ff0de2cb50fab523699ebc197ae8341b91..0d147610a06f13819bd1425984f6ec6b3c34e81a 100644 (file)
@@ -83,7 +83,7 @@ char cxgb4_driver_name[] = KBUILD_MODNAME;
 #endif
 #define DRV_VERSION "2.0.0-ko"
 const char cxgb4_driver_version[] = DRV_VERSION;
-#define DRV_DESC "Chelsio T4/T5 Network Driver"
+#define DRV_DESC "Chelsio T4/T5/T6 Network Driver"
 
 /* Host shadow copy of ingress filter entry.  This is in host native format
  * and doesn't match the ordering or bit order, etc. of the hardware of the
@@ -151,6 +151,7 @@ MODULE_VERSION(DRV_VERSION);
 MODULE_DEVICE_TABLE(pci, cxgb4_pci_tbl);
 MODULE_FIRMWARE(FW4_FNAME);
 MODULE_FIRMWARE(FW5_FNAME);
+MODULE_FIRMWARE(FW6_FNAME);
 
 /*
  * Normally we're willing to become the firmware's Master PF but will be happy
@@ -275,7 +276,7 @@ static void link_report(struct net_device *dev)
        else {
                static const char *fc[] = { "no", "Rx", "Tx", "Tx/Rx" };
 
-               const char *s = "10Mbps";
+               const char *s;
                const struct port_info *p = netdev_priv(dev);
 
                switch (p->link_cfg.speed) {
@@ -291,6 +292,10 @@ static void link_report(struct net_device *dev)
                case 40000:
                        s = "40Gbps";
                        break;
+               default:
+                       pr_info("%s: unsupported speed: %d\n",
+                               dev->name, p->link_cfg.speed);
+                       return;
                }
 
                netdev_info(dev, "link up, %s, full-duplex, %s PAUSE\n", s,
@@ -2981,6 +2986,30 @@ static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
                        ret = t4_mdio_wr(pi->adapter, mbox, prtad, devad,
                                         data->reg_num, data->val_in);
                break;
+       case SIOCGHWTSTAMP:
+               return copy_to_user(req->ifr_data, &pi->tstamp_config,
+                                   sizeof(pi->tstamp_config)) ?
+                       -EFAULT : 0;
+       case SIOCSHWTSTAMP:
+               if (copy_from_user(&pi->tstamp_config, req->ifr_data,
+                                  sizeof(pi->tstamp_config)))
+                       return -EFAULT;
+
+               switch (pi->tstamp_config.rx_filter) {
+               case HWTSTAMP_FILTER_NONE:
+                       pi->rxtstamp = false;
+                       break;
+               case HWTSTAMP_FILTER_ALL:
+                       pi->rxtstamp = true;
+                       break;
+               default:
+                       pi->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
+                       return -ERANGE;
+               }
+
+               return copy_to_user(req->ifr_data, &pi->tstamp_config,
+                                   sizeof(pi->tstamp_config)) ?
+                       -EFAULT : 0;
        default:
                return -EOPNOTSUPP;
        }
@@ -3692,7 +3721,7 @@ static int adap_init0(struct adapter *adap)
        t4_get_tp_version(adap, &adap->params.tp_vers);
        ret = t4_check_fw_version(adap);
        /* If firmware is too old (not supported by driver) force an update. */
-       if (ret == -EFAULT)
+       if (ret)
                state = DEV_STATE_UNINIT;
        if ((adap->flags & MASTER_PF) && state != DEV_STATE_INIT) {
                struct fw_info *fw_info;
@@ -4479,6 +4508,10 @@ static int enable_msix(struct adapter *adap)
        }
        for (i = 0; i < allocated; ++i)
                adap->msix_info[i].vec = entries[i].vector;
+       dev_info(adap->pdev_dev, "%d MSI-X vectors allocated, "
+                "nic %d iscsi %d rdma cpl %d rdma ciq %d\n",
+                allocated, s->max_ethqsets, s->ofldqsets, s->rdmaqs,
+                s->rdmaciqs);
 
        kfree(entries);
        return 0;