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 B7CB5A0577; Tue, 14 Apr 2020 10:16:42 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 11CB91C237; Tue, 14 Apr 2020 10:14:22 +0200 (CEST) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by dpdk.org (Postfix) with ESMTP id 63AF11C23B for ; Tue, 14 Apr 2020 10:14:20 +0200 (CEST) Received: by mail-pf1-f194.google.com with SMTP id v23so5756119pfm.1 for ; Tue, 14 Apr 2020 01:14:20 -0700 (PDT) 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=tgxxYMDem7sth51ch3/XYkbBQOgSVvzVDRt93XblHmk=; b=Tg1NC4UCwZhdy5W9JwccpbbYhScaovctrVioN/iO80bxYNwp/3hQTw6JrNWsnNHyEf Zw1ZRfBQ7Et65Je3TuyA3YMq0+idbCLMx5970SDn+avCLnK96uyu7efXJuA/GJFmBc6Y 3tTZ9UfWGWvhvSTKFoVn8OwVmDVgxto5X2/Fs= 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=tgxxYMDem7sth51ch3/XYkbBQOgSVvzVDRt93XblHmk=; b=NAmOPaXmomVqqF3CjFQegXfyYnshW6awX6165wGLUJOO2vgkH6Xc2ngHgGwC1aklf6 fnWN4l6xX4KSESoC4dk6p8Snv2ztaQYjnXbcGLpFCY/+DuW2cqG0IxbSsJDtCuec9p43 BTHHAHhqvAqevv0Xtc8GQFggkM7q0ggLGSUkdhZ4hdxqB6IWHknzX5I2JkDjFopMicTP IZ0lDBwV6qz16Jp6T5kGfoxUtBf0+6FPI+mLuIr352ZrpouqqpbXqSGWczouMns2pN3Q kW0J3olFX6xgxw5LdbkH+dEm0WFNeUGgoSo43R9L0rAl2MaGA9U4F0PYf+NtK5my1FzA T2tA== X-Gm-Message-State: AGi0PubgDFi0ktu8BbHfctzjajKwajbL+kPKpHDmAGNKGMWjtKXYJOC2 C1Umm/cRRUQzPh2MGRG/Oh7D9GWbatkTJLLFE0MEmVl+DJc6C23e6VrJae6i764gIKwQiS74Tsu Sa588+g80vx358OGr8ZitB4qILrb5hEhvQ8t+5J2mcx2VaLIR+SFgOXL4jJO+eowpJTZx X-Google-Smtp-Source: APiQypIbDcjAKDNtb1Yl2TJ458pu9OU7FTPORlxzZwvc84W6Au4fMUwMhBaQCsmUjstrWg/4MoGTqw== X-Received: by 2002:aa7:9509:: with SMTP id b9mr13170556pfp.296.1586852059011; Tue, 14 Apr 2020 01:14:19 -0700 (PDT) Received: from S60.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id e196sm671176pfh.43.2020.04.14.01.14.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Apr 2020 01:14:18 -0700 (PDT) From: Venkat Duvvuru To: dev@dpdk.org Cc: Venkat Duvvuru Date: Tue, 14 Apr 2020 13:43:10 +0530 Message-Id: <1586852011-37536-14-git-send-email-venkatkumar.duvvuru@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1586852011-37536-1-git-send-email-venkatkumar.duvvuru@broadcom.com> References: <1586806811-21736-1-git-send-email-venkatkumar.duvvuru@broadcom.com> <1586852011-37536-1-git-send-email-venkatkumar.duvvuru@broadcom.com> Subject: [dpdk-dev] [PATCH v3 13/34] net/bnxt: fetch SVIF information from the firmware X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SVIF (source virtual interface) is used to represent a physical port, physical function, or a virtual function. SVIF is compared during L2 context and exact match lookups in TX direction. SVIF is masked for port information during L2 context and exact match lookup in RX direction. Hence, driver needs this SVIF information to program L2 context and Exact match tables. Signed-off-by: Venkat Duvvuru Reviewed-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde --- drivers/net/bnxt/bnxt.h | 6 ++++++ drivers/net/bnxt/bnxt_ethdev.c | 14 ++++++++++++++ drivers/net/bnxt/bnxt_hwrm.c | 34 ++++++++++++++++++++++++++++++++++ drivers/net/bnxt/bnxt_hwrm.h | 1 + 4 files changed, 55 insertions(+) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index a8e57ca..2ed56f4 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -682,6 +682,9 @@ struct bnxt { #define BNXT_FLOW_ID_MASK 0x0000ffff struct bnxt_mark_info *mark_table; +#define BNXT_SVIF_INVALID 0xFFFF + uint16_t func_svif; + uint16_t port_svif; struct tf tfp; }; @@ -723,4 +726,7 @@ extern int bnxt_logtype_driver; #define PMD_DRV_LOG(level, fmt, args...) \ PMD_DRV_LOG_RAW(level, fmt, ## args) + +uint16_t bnxt_get_svif(uint16_t port_id, bool func_svif); + #endif diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 93d0062..f3cc745 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -4696,6 +4696,18 @@ static void bnxt_config_vf_req_fwd(struct bnxt *bp) ALLOW_FUNC(HWRM_VNIC_TPA_CFG); } +uint16_t +bnxt_get_svif(uint16_t port_id, bool func_svif) +{ + struct rte_eth_dev *eth_dev; + struct bnxt *bp; + + eth_dev = &rte_eth_devices[port_id]; + bp = eth_dev->data->dev_private; + + return func_svif ? bp->func_svif : bp->port_svif; +} + static int bnxt_init_fw(struct bnxt *bp) { uint16_t mtu; @@ -4731,6 +4743,8 @@ static int bnxt_init_fw(struct bnxt *bp) if (rc) return rc; + bnxt_hwrm_port_mac_qcfg(bp); + rc = bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(bp); if (rc) return rc; diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 443553b..0eaf917 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -3010,6 +3010,8 @@ int bnxt_hwrm_func_qcfg(struct bnxt *bp, uint16_t *mtu) struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr; uint16_t flags; int rc = 0; + bp->func_svif = BNXT_SVIF_INVALID; + uint16_t svif_info; HWRM_PREP(&req, HWRM_FUNC_QCFG, BNXT_USE_CHIMP_MB); req.fid = rte_cpu_to_le_16(0xffff); @@ -3020,6 +3022,12 @@ int bnxt_hwrm_func_qcfg(struct bnxt *bp, uint16_t *mtu) /* Hard Coded.. 0xfff VLAN ID mask */ bp->vlan = rte_le_to_cpu_16(resp->vlan) & 0xfff; + + svif_info = rte_le_to_cpu_16(resp->svif_info); + if (svif_info & HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_VALID) + bp->func_svif = svif_info & + HWRM_FUNC_QCFG_OUTPUT_SVIF_INFO_SVIF_MASK; + flags = rte_le_to_cpu_16(resp->flags); if (BNXT_PF(bp) && (flags & HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST)) bp->flags |= BNXT_FLAG_MULTI_HOST; @@ -3056,6 +3064,32 @@ int bnxt_hwrm_func_qcfg(struct bnxt *bp, uint16_t *mtu) return rc; } +int bnxt_hwrm_port_mac_qcfg(struct bnxt *bp) +{ + struct hwrm_port_mac_qcfg_input req = {0}; + struct hwrm_port_mac_qcfg_output *resp = bp->hwrm_cmd_resp_addr; + uint16_t port_svif_info; + int rc; + + bp->port_svif = BNXT_SVIF_INVALID; + + HWRM_PREP(&req, HWRM_PORT_MAC_QCFG, BNXT_USE_CHIMP_MB); + + rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB); + + HWRM_CHECK_RESULT(); + + port_svif_info = rte_le_to_cpu_16(resp->port_svif_info); + if (port_svif_info & + HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_VALID) + bp->port_svif = port_svif_info & + HWRM_PORT_MAC_QCFG_OUTPUT_PORT_SVIF_INFO_PORT_SVIF_MASK; + + HWRM_UNLOCK(); + + return 0; +} + static void copy_func_cfg_to_qcaps(struct hwrm_func_cfg_input *fcfg, struct hwrm_func_qcaps_output *qcaps) { diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h index df7aa74..0079d8a 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -193,6 +193,7 @@ int bnxt_hwrm_port_qstats(struct bnxt *bp); int bnxt_hwrm_port_clr_stats(struct bnxt *bp); int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on); int bnxt_hwrm_port_led_qcaps(struct bnxt *bp); +int bnxt_hwrm_port_mac_qcfg(struct bnxt *bp); int bnxt_hwrm_func_cfg_vf_set_flags(struct bnxt *bp, uint16_t vf, uint32_t flags); void vf_vnic_set_rxmask_cb(struct bnxt_vnic_info *vnic, void *flagp); -- 2.7.4