From patchwork Thu Dec 7 08:03:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 845451 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="ZJLlnFZ/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ysp0J6tkrz9s84 for ; Thu, 7 Dec 2017 19:04:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752357AbdLGID7 (ORCPT ); Thu, 7 Dec 2017 03:03:59 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:37503 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752310AbdLGIDz (ORCPT ); Thu, 7 Dec 2017 03:03:55 -0500 Received: by mail-qt0-f195.google.com with SMTP id f2so15459844qtj.4 for ; Thu, 07 Dec 2017 00:03:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0DNVaGR00shzfdXftj9gMhRwA1LD36xjS1Su0EmaLpI=; b=ZJLlnFZ/eLa30BKPAaMw0D9BAbIQWDcd0A3mPEHWnhwbDbG+ab+f27sdSkvelm7iuL rNbBTvu/v+ckPW8wXbJP042V1OITC5pTQmmEHeuZn3HVOm42IRY5G7wpXvmh3JkcLRIT gLgFtCia/bY1nn6xAsLDdte4hsBEGdKrF9W6M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0DNVaGR00shzfdXftj9gMhRwA1LD36xjS1Su0EmaLpI=; b=ZmFZq9emlSYpAEuuONSRVX2vPwDjB2NGyNeKVKNvjCuXrzdrpr5NAHsthtP0mwSpWv ue5dJ36pffEQ5nisrKABBGW+VhCczpVQqaivu+OhELs+e/sGGx2WDk1UKDw469yKtdpl ivXg2iw6LhqJ7f1jDW14RMTOVNdTcN03AVV97xgOf8Atz0ZFFoyY7AQqwi74Eb7bYsX5 gCLF+Uf/O3YuWzSfLc+6V33MXQywn2kV90OoLB/olDTCjA10lUXmMcOtfPaK+66FI5kk XWD7yx4vWber64GWOqgxVvaB0QI3noWkk+2hL8jKucahd7q2GH3CUoC/MJ/tTgD2fv3A bUww== X-Gm-Message-State: AKGB3mKK5eIuVz2ZOPZh/dMwNiEEprq4ATjv35gR8UqyqSlLU7HJaimh A8ezgyYI01098hJBCP/TRGf+AQ== X-Google-Smtp-Source: AGs4zMY2bczAnkvl1Yo0L9O1Q0d2jMHuDVjIcUoy5sQjSJCgb4kME/92F5DUOBna86D/DQrPNXx0+g== X-Received: by 10.55.91.70 with SMTP id p67mr30250144qkb.74.1512633834906; Thu, 07 Dec 2017 00:03:54 -0800 (PST) Received: from localhost.dhcp.broadcom.net ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id n3sm2818192qte.14.2017.12.07.00.03.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Dec 2017 00:03:54 -0800 (PST) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, andrew.gospodarek@broadcom.com Subject: [PATCH net-next v2 3/5] bnxt_en: Use NETIF_F_GRO_HW. Date: Thu, 7 Dec 2017 03:03:33 -0500 Message-Id: <1512633815-25037-4-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1512633815-25037-1-git-send-email-michael.chan@broadcom.com> References: <1512633815-25037-1-git-send-email-michael.chan@broadcom.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Advertise NETIF_F_GRO_HW in hw_features if hardware GRO is supported. In bnxt_fix_features(), disable GRO_HW and LRO if current hardware configuration does not allow it. XDP setup will now rely on bnxt_fix_features() to turn off aggregation. During chip init, turn on or off hardware GRO based on NETIF_F_GRO_HW in features flag. Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 24fe676..8227fa0 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2751,7 +2751,7 @@ void bnxt_set_tpa_flags(struct bnxt *bp) return; if (bp->dev->features & NETIF_F_LRO) bp->flags |= BNXT_FLAG_LRO; - if (bp->dev->features & NETIF_F_GRO) + else if (bp->dev->features & NETIF_F_GRO_HW) bp->flags |= BNXT_FLAG_GRO; } @@ -2839,10 +2839,10 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode) min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU); bp->flags &= ~BNXT_FLAG_AGG_RINGS; bp->flags |= BNXT_FLAG_NO_AGG_RINGS | BNXT_FLAG_RX_PAGE_MODE; - bp->dev->hw_features &= ~NETIF_F_LRO; - bp->dev->features &= ~NETIF_F_LRO; bp->rx_dir = DMA_BIDIRECTIONAL; bp->rx_skb_func = bnxt_rx_page_skb; + /* Disable LRO or GRO_HW */ + netdev_update_features(bp->dev); } else { bp->dev->max_mtu = bp->max_mtu; bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE; @@ -6784,6 +6784,9 @@ static netdev_features_t bnxt_fix_features(struct net_device *dev, if ((features & NETIF_F_NTUPLE) && !bnxt_rfs_capable(bp)) features &= ~NETIF_F_NTUPLE; + if (bp->flags & BNXT_FLAG_NO_AGG_RINGS) + features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW); + /* Both CTAG and STAG VLAN accelaration on the RX side have to be * turned on or off together. */ @@ -6817,9 +6820,9 @@ static int bnxt_set_features(struct net_device *dev, netdev_features_t features) bool update_tpa = false; flags &= ~BNXT_FLAG_ALL_CONFIG_FEATS; - if ((features & NETIF_F_GRO) && !BNXT_CHIP_TYPE_NITRO_A0(bp)) + if (features & NETIF_F_GRO_HW) flags |= BNXT_FLAG_GRO; - if (features & NETIF_F_LRO) + else if (features & NETIF_F_LRO) flags |= BNXT_FLAG_LRO; if (bp->flags & BNXT_FLAG_NO_AGG_RINGS) @@ -7920,8 +7923,8 @@ static int bnxt_get_dflt_rings(struct bnxt *bp, int *max_rx, int *max_tx, if (rc) return rc; bp->flags |= BNXT_FLAG_NO_AGG_RINGS; - bp->dev->hw_features &= ~NETIF_F_LRO; - bp->dev->features &= ~NETIF_F_LRO; + bp->dev->hw_features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW); + bp->dev->features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW); bnxt_set_ring_params(bp); } @@ -8104,7 +8107,11 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) dev->vlan_features = dev->hw_features | NETIF_F_HIGHDMA; dev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_RX | NETIF_F_HW_VLAN_STAG_TX; + if (!BNXT_CHIP_TYPE_NITRO_A0(bp)) + dev->hw_features |= NETIF_F_GRO_HW; dev->features |= dev->hw_features | NETIF_F_HIGHDMA; + if (dev->features & NETIF_F_GRO_HW) + dev->features &= ~NETIF_F_LRO; dev->priv_flags |= IFF_UNICAST_FLT; #ifdef CONFIG_BNXT_SRIOV