From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 88041A0554 for ; Tue, 18 Feb 2020 04:42:57 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 32D4D1D527; Tue, 18 Feb 2020 04:42:57 +0100 (CET) Received: from relay.smtp.broadcom.com (relay.smtp.broadcom.com [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 7D68A1D527 for ; Tue, 18 Feb 2020 04:42:55 +0100 (CET) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 66B431BF411; Mon, 17 Feb 2020 19:42:53 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 66B431BF411 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1581997374; bh=t8QsRAIazP+v0odnwpyYfpvQHMriRrIsLn6m6Jnd2P8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DVd5uCEhZwtou3qtNz/v9S22AUy9OM6/Wma+ZpkjjSwr6IUdawkvk4C7SAzaV7MdP UaxKcjSNsFQ8nSPKbAnfCzs6xgWGNElwtaFeoOyXqRYpxEwhGQDIacaJbL5ZKAvspY Daf8FhzrtOs1nKEj1lIXDuzd98ARgCawqM2ZV4Pw= From: Kalesh A P To: stable@dpdk.org Cc: luca.boccassi@gmail.com, ajit.khaparde@broadcom.com Date: Tue, 18 Feb 2020 09:29:38 +0530 Message-Id: <20200218035940.8629-2-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200218035940.8629-1-kalesh-anakkur.purayil@broadcom.com> References: <20200218035940.8629-1-kalesh-anakkur.purayil@broadcom.com> Subject: [dpdk-stable] [19.11] [PATCH 1/3] net/bnxt: restore MAC filters during reset recovery X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Kalesh AP [ upstream commit b02f1573cd0774940f063dade7d5d8606af1d948 ] Older Firmware could have state information such as MAC Filters, VLAN settings etc configured by user. But new Firmware is unaware of this state information and as a result driver should restore these settings during reset recovery. This patch restores the user configured mac addresses prior to hot FW upgrade or FW error. Signed-off-by: Kalesh AP Reviewed-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_ethdev.c | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index cfe3ac2..62cfa1c 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -3807,6 +3807,48 @@ static void bnxt_dev_cleanup(struct bnxt *bp) bnxt_uninit_resources(bp, true); } +static int bnxt_restore_mac_filters(struct bnxt *bp) +{ + struct rte_eth_dev *dev = bp->eth_dev; + struct rte_eth_dev_info dev_info; + struct rte_ether_addr *addr; + uint64_t pool_mask; + uint32_t pool = 0; + uint16_t i; + int rc; + + if (BNXT_VF(bp) & !BNXT_VF_IS_TRUSTED(bp)) + return 0; + + rc = bnxt_dev_info_get_op(dev, &dev_info); + if (rc) + return rc; + + /* replay MAC address configuration */ + for (i = 1; i < dev_info.max_mac_addrs; i++) { + addr = &dev->data->mac_addrs[i]; + + /* skip zero address */ + if (rte_is_zero_ether_addr(addr)) + continue; + + pool = 0; + pool_mask = dev->data->mac_pool_sel[i]; + + do { + if (pool_mask & 1ULL) { + rc = bnxt_mac_addr_add_op(dev, addr, i, pool); + if (rc) + return rc; + } + pool_mask >>= 1; + pool++; + } while (pool_mask); + } + + return 0; +} + static int bnxt_restore_filters(struct bnxt *bp) { struct rte_eth_dev *dev = bp->eth_dev; @@ -3817,6 +3859,7 @@ static int bnxt_restore_filters(struct bnxt *bp) if (dev->data->promiscuous) ret = bnxt_promiscuous_enable_op(dev); + ret = bnxt_restore_mac_filters(bp); /* TODO restore other filters as well */ return ret; } -- 2.10.1