]> git.openfabrics.org - compat-rdma/compat-rdma.git/commitdiff
bnxt_re: Backport for bnxt_re and bnxt_en
authorSelvin Xavier <selvin.xavier@broadcom.com>
Fri, 6 Jul 2018 07:38:05 +0000 (00:38 -0700)
committerSelvin Xavier <selvin.xavier@broadcom.com>
Fri, 6 Jul 2018 07:38:05 +0000 (00:38 -0700)
Includs makefile change for bnxt_re and backport changes
for bnxt_en

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
patches/0004-BACKPORT-bnxt_en-bnxt_re.patch [new file with mode: 0644]

diff --git a/patches/0004-BACKPORT-bnxt_en-bnxt_re.patch b/patches/0004-BACKPORT-bnxt_en-bnxt_re.patch
new file mode 100644 (file)
index 0000000..79fab54
--- /dev/null
@@ -0,0 +1,486 @@
+From eb87234d5e8608a46c21b56f437047809d4dacf4 Mon Sep 17 00:00:00 2001
+From: Somnath Kotur <somnath.kotur@broadcom.com>
+Date: Thu, 5 Jul 2018 23:18:37 -0700
+Subject: [PATCH] BACKPORT: bnxt_en and bnxt_re backport for RH 7.5 
+
+Added include path for bnxt_en in bnxt_re Makefile
+Changes to compile bnxt_en driver.
+
+Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
+---
+ drivers/infiniband/hw/bnxt_re/Makefile        |   2 +-
+ drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 195 +++++++-------------------
+ drivers/net/ethernet/broadcom/bnxt/bnxt.h     |  44 ++++++
+ drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c |  14 +-
+ drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c |   2 +
+ 5 files changed, 111 insertions(+), 146 deletions(-)
+
+diff --git a/drivers/infiniband/hw/bnxt_re/Makefile b/drivers/infiniband/hw/bnxt_re/Makefile
+index 6e3bc25..7a72bd6 100644
+--- a/drivers/infiniband/hw/bnxt_re/Makefile
++++ b/drivers/infiniband/hw/bnxt_re/Makefile
+@@ -1,6 +1,6 @@
+ # SPDX-License-Identifier: GPL-2.0
+-ccflags-y := -Idrivers/net/ethernet/broadcom/bnxt
++ccflags-y := -I$(CWD)/drivers/net/ethernet/broadcom/bnxt
+ obj-$(CONFIG_INFINIBAND_BNXT_RE) += bnxt_re.o
+ bnxt_re-y := main.o ib_verbs.o \
+            qplib_res.o qplib_rcfw.o   \
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+index f83769d..3f5dcd7 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+@@ -2264,10 +2264,10 @@ static void bnxt_free_rx_rings(struct bnxt *bp)
+               if (rxr->xdp_prog)
+                       bpf_prog_put(rxr->xdp_prog);
+-
++#ifdef HAVE_XDP_RXQ_INFO
+               if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
+                       xdp_rxq_info_unreg(&rxr->xdp_rxq);
+-
++#endif
+               kfree(rxr->rx_tpa);
+               rxr->rx_tpa = NULL;
+@@ -2300,11 +2300,11 @@ static int bnxt_alloc_rx_rings(struct bnxt *bp)
+               struct bnxt_ring_struct *ring;
+               ring = &rxr->rx_ring_struct;
+-
++#ifdef HAVE_XDP_RXQ_INFO
+               rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
+               if (rc < 0)
+                       return rc;
+-
++#endif
+               rc = bnxt_alloc_ring(bp, ring);
+               if (rc)
+                       return rc;
+@@ -2791,8 +2791,13 @@ void bnxt_set_tpa_flags(struct bnxt *bp)
+               return;
+       if (bp->dev->features & NETIF_F_LRO)
+               bp->flags |= BNXT_FLAG_LRO;
+-      else if (bp->dev->features & NETIF_F_GRO_HW)
++#ifdef HAVE_NETIF_F_GRO_HW
++        else if (bp->dev->features & NETIF_F_GRO_HW)
++#else
++        if (bp->dev->features & NETIF_F_GRO)
++#endif
+               bp->flags |= BNXT_FLAG_GRO;
++
+ }
+ /* bp->rx_ring_size, bp->tx_ring_size, dev->mtu, BNXT_FLAG_{G|L}RO flags must
+@@ -2878,8 +2883,10 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
+       if (page_mode) {
+               if (bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU)
+                       return -EOPNOTSUPP;
++#ifdef HAVE_NET_DEVICE_MAX_MTU
+               bp->dev->max_mtu =
+                       min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
++#endif
+               bp->flags &= ~BNXT_FLAG_AGG_RINGS;
+               bp->flags |= BNXT_FLAG_NO_AGG_RINGS | BNXT_FLAG_RX_PAGE_MODE;
+               bp->rx_dir = DMA_BIDIRECTIONAL;
+@@ -2887,7 +2894,9 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
+               /* Disable LRO or GRO_HW */
+               netdev_update_features(bp->dev);
+       } else {
++#ifdef HAVE_NET_DEVICE_MAX_MTU
+               bp->dev->max_mtu = bp->max_mtu;
++#endif
+               bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
+               bp->rx_dir = DMA_FROM_DEVICE;
+               bp->rx_skb_func = bnxt_rx_skb;
+@@ -5373,13 +5382,21 @@ hwrm_ver_get_exit:
+ int bnxt_hwrm_fw_set_time(struct bnxt *bp)
+ {
+       struct hwrm_fw_set_time_input req = {0};
++#ifdef HAVE_TIME64_TO_TM
+       struct tm tm;
+       time64_t now = ktime_get_real_seconds();
+-
++#else
++      struct rtc_time tm;
++        struct timeval tv;
++#endif
+       if (bp->hwrm_spec_code < 0x10400)
+               return -EOPNOTSUPP;
+-
++#ifdef HAVE_TIME64_TO_TM
+       time64_to_tm(now, 0, &tm);
++#else
++      do_gettimeofday(&tv);
++        rtc_time_to_tm(tv.tv_sec, &tm);
++#endif
+       bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_SET_TIME, -1, -1);
+       req.year = cpu_to_le16(1900 + tm.tm_year);
+       req.month = 1 + tm.tm_mon;
+@@ -7526,9 +7543,15 @@ static void bnxt_poll_controller(struct net_device *dev)
+ }
+ #endif
++#ifdef HAVE_TIMER_SETUP
+ static void bnxt_timer(struct timer_list *t)
+ {
+-      struct bnxt *bp = from_timer(bp, t, timer);
++        struct bnxt *bp = from_timer(bp, t, timer);
++#else
++static void bnxt_timer(unsigned long data)
++{
++        struct bnxt *bp = (struct bnxt *)data;
++#endif
+       struct net_device *dev = bp->dev;
+       if (!netif_running(dev))
+@@ -7812,8 +7835,11 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
+       bp->tx_ring_size = BNXT_DEFAULT_TX_RING_SIZE;
+       bnxt_init_dflt_coal(bp);
+-
+-      timer_setup(&bp->timer, bnxt_timer, 0);
++#ifdef HAVE_TIMER_SETUP
++        timer_setup(&bp->timer, bnxt_timer, 0);
++#else
++        setup_timer(&bp->timer, bnxt_timer, (unsigned long)bp);
++#endif
+       bp->current_interval = BNXT_TIMER_INTERVAL;
+       clear_bit(BNXT_STATE_OPEN, &bp->state);
+@@ -7856,23 +7882,6 @@ static int bnxt_change_mac_addr(struct net_device *dev, void *p)
+       return rc;
+ }
+-/* rtnl_lock held */
+-static int bnxt_change_mtu(struct net_device *dev, int new_mtu)
+-{
+-      struct bnxt *bp = netdev_priv(dev);
+-
+-      if (netif_running(dev))
+-              bnxt_close_nic(bp, false, false);
+-
+-      dev->mtu = new_mtu;
+-      bnxt_set_ring_params(bp);
+-
+-      if (netif_running(dev))
+-              return bnxt_open_nic(bp, false, false);
+-
+-      return 0;
+-}
+-
+ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
+ {
+       struct bnxt *bp = netdev_priv(dev);
+@@ -7918,6 +7927,8 @@ int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
+       return 0;
+ }
++#ifdef CONFIG_BNXT_FLOWER_OFFLOAD
++#ifdef HAVE_TC_SETUP_BLOCK
+ static int bnxt_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
+                                 void *cb_priv)
+ {
+@@ -7955,23 +7966,20 @@ static int bnxt_setup_tc_block(struct net_device *dev,
+       }
+ }
+-static int bnxt_setup_tc(struct net_device *dev, enum tc_setup_type type,
+-                       void *type_data)
+-{
+-      switch (type) {
+-      case TC_SETUP_BLOCK:
+-              return bnxt_setup_tc_block(dev, type_data);
+-      case TC_SETUP_QDISC_MQPRIO: {
+-              struct tc_mqprio_qopt *mqprio = type_data;
++#else
+-              mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
++static int bnxt_setup_flower(struct net_device *dev,
++                           struct tc_cls_flower_offload *cls_flower)
++{
++      struct bnxt *bp = netdev_priv(dev);
+-              return bnxt_setup_mq_tc(dev, mqprio->num_tc);
+-      }
+-      default:
++      if (!bnxt_tc_flower_enabled(bp))
+               return -EOPNOTSUPP;
+-      }
++
++        return bnxt_tc_setup_flower(bp, bp->pf.fw_fid, cls_flower);
+ }
++#endif
++#endif
+ #ifdef CONFIG_RFS_ACCEL
+ static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,
+@@ -8143,85 +8151,6 @@ static void bnxt_cfg_ntp_filters(struct bnxt *bp)
+ #endif /* CONFIG_RFS_ACCEL */
+-static void bnxt_udp_tunnel_add(struct net_device *dev,
+-                              struct udp_tunnel_info *ti)
+-{
+-      struct bnxt *bp = netdev_priv(dev);
+-
+-      if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET)
+-              return;
+-
+-      if (!netif_running(dev))
+-              return;
+-
+-      switch (ti->type) {
+-      case UDP_TUNNEL_TYPE_VXLAN:
+-              if (bp->vxlan_port_cnt && bp->vxlan_port != ti->port)
+-                      return;
+-
+-              bp->vxlan_port_cnt++;
+-              if (bp->vxlan_port_cnt == 1) {
+-                      bp->vxlan_port = ti->port;
+-                      set_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event);
+-                      bnxt_queue_sp_work(bp);
+-              }
+-              break;
+-      case UDP_TUNNEL_TYPE_GENEVE:
+-              if (bp->nge_port_cnt && bp->nge_port != ti->port)
+-                      return;
+-
+-              bp->nge_port_cnt++;
+-              if (bp->nge_port_cnt == 1) {
+-                      bp->nge_port = ti->port;
+-                      set_bit(BNXT_GENEVE_ADD_PORT_SP_EVENT, &bp->sp_event);
+-              }
+-              break;
+-      default:
+-              return;
+-      }
+-
+-      bnxt_queue_sp_work(bp);
+-}
+-
+-static void bnxt_udp_tunnel_del(struct net_device *dev,
+-                              struct udp_tunnel_info *ti)
+-{
+-      struct bnxt *bp = netdev_priv(dev);
+-
+-      if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET)
+-              return;
+-
+-      if (!netif_running(dev))
+-              return;
+-
+-      switch (ti->type) {
+-      case UDP_TUNNEL_TYPE_VXLAN:
+-              if (!bp->vxlan_port_cnt || bp->vxlan_port != ti->port)
+-                      return;
+-              bp->vxlan_port_cnt--;
+-
+-              if (bp->vxlan_port_cnt != 0)
+-                      return;
+-
+-              set_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event);
+-              break;
+-      case UDP_TUNNEL_TYPE_GENEVE:
+-              if (!bp->nge_port_cnt || bp->nge_port != ti->port)
+-                      return;
+-              bp->nge_port_cnt--;
+-
+-              if (bp->nge_port_cnt != 0)
+-                      return;
+-
+-              set_bit(BNXT_GENEVE_DEL_PORT_SP_EVENT, &bp->sp_event);
+-              break;
+-      default:
+-              return;
+-      }
+-
+-      bnxt_queue_sp_work(bp);
+-}
+-
+ static int bnxt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+                              struct net_device *dev, u32 filter_mask,
+                              int nlflags)
+@@ -8267,23 +8196,6 @@ static int bnxt_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
+       return rc;
+ }
+-static int bnxt_get_phys_port_name(struct net_device *dev, char *buf,
+-                                 size_t len)
+-{
+-      struct bnxt *bp = netdev_priv(dev);
+-      int rc;
+-
+-      /* The PF and it's VF-reps only support the switchdev framework */
+-      if (!BNXT_PF(bp))
+-              return -EOPNOTSUPP;
+-
+-      rc = snprintf(buf, len, "p%d", bp->pf.port_id);
+-
+-      if (rc >= len)
+-              return -EOPNOTSUPP;
+-      return 0;
+-}
+-
+ int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr)
+ {
+       if (bp->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV)
+@@ -8323,7 +8235,9 @@ static const struct net_device_ops bnxt_netdev_ops = {
+       .ndo_do_ioctl           = bnxt_ioctl,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_set_mac_address    = bnxt_change_mac_addr,
++#ifdef HAVE_NDO_CHANGE_MTU
+       .ndo_change_mtu         = bnxt_change_mtu,
++#endif
+       .ndo_fix_features       = bnxt_fix_features,
+       .ndo_set_features       = bnxt_set_features,
+       .ndo_tx_timeout         = bnxt_tx_timeout,
+@@ -8339,16 +8253,14 @@ static const struct net_device_ops bnxt_netdev_ops = {
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+       .ndo_poll_controller    = bnxt_poll_controller,
+ #endif
++#ifdef HAVE_NDO_SETUP_TC
+       .ndo_setup_tc           = bnxt_setup_tc,
++#endif
+ #ifdef CONFIG_RFS_ACCEL
+       .ndo_rx_flow_steer      = bnxt_rx_flow_steer,
+ #endif
+-      .ndo_udp_tunnel_add     = bnxt_udp_tunnel_add,
+-      .ndo_udp_tunnel_del     = bnxt_udp_tunnel_del,
+-      .ndo_bpf                = bnxt_xdp,
+       .ndo_bridge_getlink     = bnxt_bridge_getlink,
+       .ndo_bridge_setlink     = bnxt_bridge_setlink,
+-      .ndo_get_phys_port_name = bnxt_get_phys_port_name
+ };
+ static void bnxt_remove_one(struct pci_dev *pdev)
+@@ -8770,10 +8682,11 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
+       bnxt_ethtool_init(bp);
+       bnxt_dcb_init(bp);
++#ifdef HAVE_NET_DEVICE_MAX_MTU
+       /* MTU range: 60 - FW defined max */
+       dev->min_mtu = ETH_ZLEN;
+       dev->max_mtu = bp->max_mtu;
+-
++#endif
+       rc = bnxt_probe_phy(bp);
+       if (rc)
+               goto init_err_pci_clean;
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+index 3d55d3b..7379ec6 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+@@ -23,8 +23,50 @@
+ #include <net/devlink.h>
+ #include <net/dst_metadata.h>
+ #include <net/switchdev.h>
++#ifdef HAVE_NET_XDP_H
+ #include <net/xdp.h>
++#endif
++#ifdef HAVE_NET_DIM_H
+ #include <linux/net_dim.h>
++#else
++#include "bnxt_dim.h"
++#endif
++
++#ifdef HAVE_STRUCT_DMA_ATTRS
++#define dma_map_single_attrs(dev, cpu_addr, size, dir, attrs) \
++        dma_map_single_attrs(dev, cpu_addr, size, dir, NULL)
++
++#define dma_unmap_single_attrs(dev, dma_addr, size, dir, attrs) \
++        dma_unmap_single_attrs(dev, dma_addr, size, dir, NULL)
++
++#define dma_map_page_attrs(dev, page, offset, size, dir, attrs) \
++        dma_map_page_attrs(dev, page, offset, size, dir, NULL)
++
++#define dma_unmap_page_attrs(dev, dma_addr, size, dir, attrs) \
++        dma_unmap_page_attrs(dev, dma_addr, size, dir, NULL)
++#endif
++
++#ifndef HAVE_XDP_SET_DATA_META_INVALID
++#define xdp_set_data_meta_invalid(xdp)
++#endif
++
++#ifdef NETIF_F_GRO_HW
++#define HAVE_NETIF_F_GRO_HW     1
++#else
++#define NETIF_F_GRO_HW          0
++#endif
++
++#ifndef NETIF_F_GSO_IPIP
++#define NETIF_F_GSO_IPIP        0
++#endif
++
++#ifndef NETIF_F_GSO_SIT
++#define NETIF_F_GSO_SIT         0
++#endif
++
++#ifndef NETIF_F_GSO_IPXIP4
++#define NETIF_F_GSO_IPXIP4      (NETIF_F_GSO_IPIP | NETIF_F_GSO_SIT)
++#endif
+ struct tx_bd {
+       __le32 tx_bd_len_flags_type;
+@@ -682,7 +724,9 @@ struct bnxt_rx_ring_info {
+       struct bnxt_ring_struct rx_ring_struct;
+       struct bnxt_ring_struct rx_agg_ring_struct;
++#ifdef HAVE_XDP_RXQ_INFO
+       struct xdp_rxq_info     xdp_rxq;
++#endif
+ };
+ struct bnxt_cp_ring_info {
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c
+index 408dd19..cabf39a 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c
+@@ -7,7 +7,13 @@
+  * the Free Software Foundation.
+  */
++#include <linux/pci.h>
++#include <linux/netdevice.h>
++#ifdef HAVE_NET_DIM
+ #include <linux/net_dim.h>
++#else
++#include "bnxt_dim.h"
++#endif
+ #include "bnxt_hsi.h"
+ #include "bnxt.h"
+@@ -21,11 +27,11 @@ void bnxt_dim_work(struct work_struct *work)
+       struct bnxt_napi *bnapi = container_of(cpr,
+                                              struct bnxt_napi,
+                                              cp_ring);
+-      struct net_dim_cq_moder cur_profile = net_dim_get_profile(dim->mode,
+-                                                                dim->profile_ix);
++      struct net_dim_cq_moder cur_moder =
++              net_dim_get_rx_moderation(dim->mode, dim->profile_ix);
+-      cpr->rx_ring_coal.coal_ticks = cur_profile.usec;
+-      cpr->rx_ring_coal.coal_bufs = cur_profile.pkts;
++      cpr->rx_ring_coal.coal_ticks = cur_moder.usec;
++      cpr->rx_ring_coal.coal_bufs = cur_moder.pkts;
+       bnxt_hwrm_set_ring_coal(bnapi->bp, bnapi);
+       dim->state = NET_DIM_START_MEASURE;
+diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
+index 1389ab5..ee2a0c9 100644
+--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
++++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
+@@ -96,7 +96,9 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
+       xdp.data = *data_ptr;
+       xdp_set_data_meta_invalid(&xdp);
+       xdp.data_end = *data_ptr + *len;
++#ifdef HAVE_XDP_RXQ_INFO
+       xdp.rxq = &rxr->xdp_rxq;
++#endif
+       orig_data = xdp.data;
+       mapping = rx_buf->mapping - bp->rx_dma_offset;
+-- 
+1.8.3.1
+