From patchwork Tue Sep 19 01:30:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 28897 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 77B261B232; Tue, 19 Sep 2017 03:31:42 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0055.outbound.protection.outlook.com [104.47.37.55]) by dpdk.org (Postfix) with ESMTP id BEBD01B1AB for ; Tue, 19 Sep 2017 03:31:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nruvumArRUNQuhtN/pLHwf5IEr75U/MANMhN/I7+f9c=; b=IxyYA4h9ZSL1RF7Ltmy3cLiJVrz/MCUyf5k34oOg6797NlIUBVDyNeAqX+T0UeILsEOD/spzNsOKM8QBaPxvz9whMOEJioxPdQjKFOn/qzJ7NGMtO1cD3zKQ8GhFl2mR80yFtztMglW3nplnwP4Pl9oprP6jksVlLtlRbQMtI3Y= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by SN4PR0701MB3838.namprd07.prod.outlook.com (2603:10b6:803:4f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11; Tue, 19 Sep 2017 01:31:22 +0000 From: Rasesh Mody To: dev@dpdk.org, ferruh.yigit@intel.com Cc: Rasesh Mody , Dept-EngDPDKDev@cavium.com Date: Mon, 18 Sep 2017 18:30:03 -0700 Message-Id: <1505784633-1171-24-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1505784633-1171-1-git-send-email-rasesh.mody@cavium.com> References: <1505784633-1171-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: SN4PR0501CA0015.namprd05.prod.outlook.com (2603:10b6:803:40::28) To SN4PR0701MB3838.namprd07.prod.outlook.com (2603:10b6:803:4f::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e01edcb1-b127-47c8-f787-08d4fefe22b7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:SN4PR0701MB3838; X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 3:FfZk2fJJheyGIA8oiqn2IJUU/xz85R7lQccAi5ioTXAfG/hIUFA9dHukZ5TEOAyAZlawdZYAJm0EQCqjsO+eLvOkDEiHuqzg4L5pbIVLSd3k6p3lRDeAdh95qGWLnnaZbckxoG/1ex+c5xjjAYzctSHBdpm8rzvx5o9WRmBoWheee2FSIOqFZFalSmpZ+uZfqvoZJDtT/AumnrIVttyYwtbNcA15yp5kpMQ4r8YFhtn6lKv3j/jInmVinfZRriS9; 25:VCduMli4MB+9LKBztEmAMM6S5IM5bLgDU3CiuEYf6qzSxsZs+yji348j9ojkI4/hjMal6vioI/YyFa2x4BTceP2R6iwQxe4IDK5cmISAAxhRzz89VDFVFzLXyUJix7TclEPUm5pCnrhoXqnfLc7l+R6JiBjs0qNjcEWsS7jU9QtRQdBag4IZLWdHNxyzmxNxh/AnZ2w/XtJ58v9Wlxz2fdvQ9nBormqpDaOGly86s9VcFkVzYiylAxSQPcsFCc+CWnQ2GE/ec0i0g1PfF9e+AjEuwmyZW3giGZRq6+WBx10DcFqjUtdbOJkgtxHIXWDVLRaIsLS/IeTepXw7caAAnA==; 31:uWSrkYjaTqpxDdwedKhKMWfGI60JeL976F8Pn7zviUTdPiJXVjOSV95mU+/8vJ0eqVU3+bFSXr9TOVDKdIarUYOql8u/nZXyTvazm1GlRPE6854bhXN8/w62NVuJDb2fzs4ADktVz/9LPZMO9to0+uaiA9ex8UJDVfd8Mvn9DcvIBhTMY2gfGe9KzBezKSrTz5qpYPPSrsjYcFV+Weyp725AHLAkU4sOdt9aPfMla3Y= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3838: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 20:xOITG/pbR30VO7MK5zfrNO4oH/f3JGy0MP77hfqwv2ik8auXoy7R5hqk21csqLOLGWZinnAnPQldfF8PEaFei6Zz9RMxi0V3/l4WiU3YSJXl1ssfaBsgbzobJLcxGMMTmvXTDT9M04m1C9435MNitsScRO3Hg+h3F1h/8HOz9GhuwBEDRBws+Px9fm6H6wDPkfDFbytQN6EelnF+OQXrKCc5dcx/5hDPB/IZekRwDx1tDy2nIqDhqxRu5XxuWE/w1BrBjwoN6G0Z0l1IFv7F3r+83mX9P0+BtFDMHKigHsGP9DrfbW1C4Lo9PDGOQ6UJZnBl1wMGkRYnsX8zMy//Ytm7P+rfPO8NQrf7I/7IzSO7fGCkGYE745/aVOEYtO4724teQJjU2sHw9uSoQwXADNiKJzGWZoxR4IMEsOSrkddB+Cc7QCBY85AmrIC47TFXyG/2SsPKGzufgMv37Gfx6L/eaIYaJ4RZpGDNj9E8zjyq9OpKWFk6Nx/0OHCz4Wod; 4:9QEiBqbC+kYkSSFdB51NrHoHUUXytexBovLzSP641lB/O/SZIcxlE+0zPLEVcGN0p/Y0NBKqZO7mVKkoTDXpv2ruyxvz9gzK542+5hJrb8mi8lx++0e+jtfbEzYQTwWxptUWIWMVIJ+yABoUDbTEgcuMSYMnhJpIGFSMosHSnw09vBDS+R+k1BmVoit9U0V9EMesFyS7wKw0LP0X20FCAOx1qSUih4kKr2Q+JA59t+upjKS8JW7lpClgO17kb7rF X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123555025)(20161123562025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN4PR0701MB3838; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN4PR0701MB3838; X-Forefront-PRVS: 04359FAD81 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(199003)(189002)(48376002)(33646002)(68736007)(316002)(21086003)(16526017)(16586007)(72206003)(36756003)(478600001)(97736004)(86362001)(66066001)(25786009)(69596002)(47776003)(50986999)(81166006)(8936002)(50226002)(8676002)(5660300001)(7736002)(53936002)(305945005)(81156014)(55016002)(50466002)(76176999)(551934003)(6116002)(3846002)(2950100002)(101416001)(4326008)(4720700003)(2906002)(107886003)(6666003)(189998001)(106356001)(5003940100001)(105586002)(21314002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3838; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN4PR0701MB3838; 23:+Tkk4de7ancTr59Jh66X3xi8Gbfdhh8rA1DKmXF?= w1pZ+mxt3/AUcnjdRWojXRHsebCWH+CL9/AdNz3CPQ+avgmFHft1DrYJlImoAtBFgmqsu+NlSfd2U0Nf6vWXGzG0moqXVszAEHqm70S5/BtEI9kiFV7Bqgmddzw3lGYvi68LC6OKOd46Ux7N5+LuMEKpy1BiKMZgI4HMFF0/ZhrGGDG61BVnV2DjJjwEWiFBUg3Rffi192qe2wdkajw6LCuMgDy/rilrJEULdWZ8z558LIm4CiiJde0xzY6DFt6LpJiyRD7xQ57ar2kbyFwnhGEyYk7ZFYSQH51P+8U9Zm+xDqI8UoOdNiNMYaJ3sByJa5LpKKyUJQWbceDs+GCw4Ms1kPsJ72JjO86ZE0ibdBI4SPSWejW44xi+Cp7z+HE4Nm2ycYFOsgnGJbbF8PklcNShV9Tg3h6j3b+jvKD016WtizYh3IpKmnx+Lnqm7m9GmPfr/uFJaM4hT859XCODR3ubzAa2tUOt8H6/rWWkSQ03u/hChTY3DbJgpI4bHSWZjNT5OZHrku22ZZH4PndEfT8wi2EuzpJcRmdmCJe2ZL/NvWaBLOh14FU/y/AmT6M1X19xSdxXZ8lKa0i2/NrmYx7+aszlE+SKD4RGyqEVl7JtPxUT57ED8vlW2x1U0mkbNisFG6iOyfIQRJr4OJRpGaF/Zar+BJrq1+8Y4npIjxkTaW6Mb3wsWo5YyLr6UKR4A1I7tdSHqVuWGUHorFy5lp7koBuO5ARuL1pwDocW0dPsILdc/vjqyH+iSDEgka2JuoAGmAQecRvYbd2ER58BpjLLC1XkJPW++sYt4ysnH0FL3MSh8p7CYJsLg8U6LZmIHI32SiRnq1RZv3ukv9yJJ2toLSbVnBJ02IjWyehxkAhMExGMbnCjMVCEpMnzxfQmmmAUeA0ZRNa6GyP6BO+cmHFnG0EV+JxrAd0TZYh27qhXewLgvKxzrJv0T0nzQGj74f0pXQyWuDDUcQA6CohGjhpUJFGk2A14XC0Vuu9lvKTz30PcSWimuaFVzC0etujuAOyM1p0fu2sXBhzoe3wNE2YUR5bkZI5AZwebF7gd6MdqQEPAjwazW/UvBdT8ESMxnUo8eXy8IxJenMwXCLhEtjDPOHcPul8I4EJHjPetwMELerA== X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 6:7KwNuoPXWbZJgVEZOVeDSmCm4/4rY+xOBozuVBg7TP/EEgh7b9VYHFqAf2YF3b4bdyA+OMV1jiWJ8vkQS2n70AeLZXAwjT3v0H2OGfCsN+OqwdvhPuPOUhHVfxr0wy5AUGTc4eLsnBObki2XOWyfzBNiHXAn8IhLXztyfsfj6gVOqBp3XVwI/JzA1nDgjOTXG2xSvI1r3UZhPs/ygIoOVgMhLdsVxcsuAWErzuEHigH6XLd1brlALWlGAKhgpeZ/MJLmSyYmk7C1WkfzDMSUbDdKfoX8h3K4I8Xv7hJ0HfIZTa0cNuHnsIb+I5/IfoxQ5NoK61u9gQq/CSUa0Yno0A==; 5:vm3dQhDmh17X5Nvu68amRaKidKvPk+Sz780LUXUBRgkVH2On0ISwbCzqNgM6c0HN59xGRtjNoBL2F+8r44W8BZJrm285Hd8zm5IcGgnEQgJmue6eoobnaG8gmKejIyVcAKQw9f3wnw+4eqYMk+XX4w==; 24:BouCQ2gojNDFPYi3einQBUZnGHNy1+GK7C7ehEcsU6TXcgXMhhDYx7rpW8JYo1Xk6YpFblRAW0anWJO6zhDZxo38hHfaFcvKjRKcNufd4Es=; 7:q2J+aBzvVUb4lxDe91T3TE9aYCg3/p2rydQocXyihgbT+dvue7umMHngURbrOhvAverfFy6Jg0GZ5nF2mTrQxuXktCd5g6hQe9ahlOD/UPrGOEWJFN5TQ0A34l4uncjFasCcoJp42j42UyZUTlojCRDgpAb1bOPtNBvfH3UBMLkTvVxcbx1R+qYnQGusPINR8kIx7PoQSwQCoefEhp8Mz1eW6TsDyPtt00qUMUdKWjI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 01:31:22.1056 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR0701MB3838 Subject: [dpdk-dev] [PATCH 23/53] net/qede/base: allow clients to override VF MSI-X table size 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" For chip variant CHIP_NUM_AH_xxx, MSI-x configuration for VFs is controlled per-PF [for all of its child VFs] instead of on a per-VF basis. A flag called "dont_override_vf_msix" is added that allows the caller/client to specify the mode they want to operate. If dont_override_vf_msix is false as in the case of VF of CHIP_NUM_AH_xxx, first a check is made as to what is currently configured number. Management FW will be asked to configure the requested number only if its bigger than the currently configured value. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore.h | 1 + drivers/net/qede/base/ecore_mcp.c | 40 +++++++++++++++++++++++++++++--- drivers/net/qede/base/ecore_sriov.c | 43 +++++++++++++++++++++++++++++++---- drivers/net/qede/base/mcp_public.h | 10 +++++++- 4 files changed, 86 insertions(+), 8 deletions(-) diff --git a/drivers/net/qede/base/ecore.h b/drivers/net/qede/base/ecore.h index 71f27da..2d2f6f3 100644 --- a/drivers/net/qede/base/ecore.h +++ b/drivers/net/qede/base/ecore.h @@ -754,6 +754,7 @@ struct ecore_dev { #define IS_ECORE_SRIOV(p_dev) (!!(p_dev)->p_iov_info) struct ecore_tunnel_info tunnel; bool b_is_vf; + bool b_dont_override_vf_msix; u32 drv_type; diff --git a/drivers/net/qede/base/ecore_mcp.c b/drivers/net/qede/base/ecore_mcp.c index 0f96c91..733852c 100644 --- a/drivers/net/qede/base/ecore_mcp.c +++ b/drivers/net/qede/base/ecore_mcp.c @@ -2248,9 +2248,10 @@ enum _ecore_status_t ecore_start_recovery_process(struct ecore_hwfn *p_hwfn, return ECORE_SUCCESS; } -enum _ecore_status_t ecore_mcp_config_vf_msix(struct ecore_hwfn *p_hwfn, - struct ecore_ptt *p_ptt, - u8 vf_id, u8 num) +static enum _ecore_status_t +ecore_mcp_config_vf_msix_bb(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + u8 vf_id, u8 num) { u32 resp = 0, param = 0, rc_param = 0; enum _ecore_status_t rc; @@ -2282,6 +2283,39 @@ enum _ecore_status_t ecore_mcp_config_vf_msix(struct ecore_hwfn *p_hwfn, return rc; } +static enum _ecore_status_t +ecore_mcp_config_vf_msix_ah(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + u8 num) +{ + u32 resp = 0, param = num, rc_param = 0; + enum _ecore_status_t rc; + + rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_CFG_PF_VFS_MSIX, + param, &resp, &rc_param); + + if (resp != FW_MSG_CODE_DRV_CFG_PF_VFS_MSIX_DONE) { + DP_NOTICE(p_hwfn, true, "MFW failed to set MSI-X for VFs\n"); + rc = ECORE_INVAL; + } else { + DP_VERBOSE(p_hwfn, ECORE_MSG_IOV, + "Requested 0x%02x MSI-x interrupts for VFs\n", + num); + } + + return rc; +} + +enum _ecore_status_t ecore_mcp_config_vf_msix(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + u8 vf_id, u8 num) +{ + if (ECORE_IS_BB(p_hwfn->p_dev)) + return ecore_mcp_config_vf_msix_bb(p_hwfn, p_ptt, vf_id, num); + else + return ecore_mcp_config_vf_msix_ah(p_hwfn, p_ptt, num); +} + enum _ecore_status_t ecore_mcp_send_drv_version(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, struct ecore_mcp_drv_version *p_ver) diff --git a/drivers/net/qede/base/ecore_sriov.c b/drivers/net/qede/base/ecore_sriov.c index 7ac533e..a70ca30 100644 --- a/drivers/net/qede/base/ecore_sriov.c +++ b/drivers/net/qede/base/ecore_sriov.c @@ -819,11 +819,47 @@ static void ecore_iov_vf_igu_set_int(struct ecore_hwfn *p_hwfn, } static enum _ecore_status_t +ecore_iov_enable_vf_access_msix(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + u8 abs_vf_id, + u8 num_sbs) +{ + u8 current_max = 0; + int i; + + /* If client overrides this, don't do anything */ + if (p_hwfn->p_dev->b_dont_override_vf_msix) + return ECORE_SUCCESS; + + /* For AH onward, configuration is per-PF. Find maximum of all + * the currently enabled child VFs, and set the number to be that. + */ + if (!ECORE_IS_BB(p_hwfn->p_dev)) { + ecore_for_each_vf(p_hwfn, i) { + struct ecore_vf_info *p_vf; + + p_vf = ecore_iov_get_vf_info(p_hwfn, (u16)i, true); + if (!p_vf) + continue; + + current_max = OSAL_MAX_T(u8, current_max, + p_vf->num_sbs); + } + } + + if (num_sbs > current_max) + return ecore_mcp_config_vf_msix(p_hwfn, p_ptt, + abs_vf_id, num_sbs); + + return ECORE_SUCCESS; +} + +static enum _ecore_status_t ecore_iov_enable_vf_access(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, struct ecore_vf_info *vf) { u32 igu_vf_conf = IGU_VF_CONF_FUNC_EN; - enum _ecore_status_t rc; + enum _ecore_status_t rc = ECORE_SUCCESS; if (vf->to_disable) return ECORE_SUCCESS; @@ -839,9 +875,8 @@ static void ecore_iov_vf_igu_set_int(struct ecore_hwfn *p_hwfn, /* It's possible VF was previously considered malicious */ vf->b_malicious = false; - - rc = ecore_mcp_config_vf_msix(p_hwfn, p_ptt, - vf->abs_vf_id, vf->num_sbs); + rc = ecore_iov_enable_vf_access_msix(p_hwfn, p_ptt, + vf->abs_vf_id, vf->num_sbs); if (rc != ECORE_SUCCESS) return rc; diff --git a/drivers/net/qede/base/mcp_public.h b/drivers/net/qede/base/mcp_public.h index ff9ce9e..7ac2820 100644 --- a/drivers/net/qede/base/mcp_public.h +++ b/drivers/net/qede/base/mcp_public.h @@ -1192,6 +1192,7 @@ struct public_drv_mb { #define DRV_MSG_CODE_INITIATE_PF_FLR 0x02010000 #define DRV_MSG_CODE_VF_DISABLED_DONE 0xc0000000 #define DRV_MSG_CODE_CFG_VF_MSIX 0xc0010000 +#define DRV_MSG_CODE_CFG_PF_VFS_MSIX 0xc0020000 /* Param is either DRV_MB_PARAM_NVM_PUT_FILE_BEGIN_MFW/IMAGE */ #define DRV_MSG_CODE_NVM_PUT_FILE_BEGIN 0x00010000 /* Param should be set to the transaction size (up to 64 bytes) */ @@ -1434,11 +1435,14 @@ struct public_drv_mb { #define DRV_MB_PARAM_PHYMOD_LANE_MASK 0x000000FF #define DRV_MB_PARAM_PHYMOD_SIZE_OFFSET 8 #define DRV_MB_PARAM_PHYMOD_SIZE_MASK 0x000FFF00 - /* configure vf MSIX params*/ + /* configure vf MSIX params BB */ #define DRV_MB_PARAM_CFG_VF_MSIX_VF_ID_OFFSET 0 #define DRV_MB_PARAM_CFG_VF_MSIX_VF_ID_MASK 0x000000FF #define DRV_MB_PARAM_CFG_VF_MSIX_SB_NUM_OFFSET 8 #define DRV_MB_PARAM_CFG_VF_MSIX_SB_NUM_MASK 0x0000FF00 + /* configure vf MSIX for PF params AH*/ +#define DRV_MB_PARAM_CFG_PF_VFS_MSIX_SB_NUM_OFFSET 0 +#define DRV_MB_PARAM_CFG_PF_VFS_MSIX_SB_NUM_MASK 0x000000FF /* OneView configuration parametres */ #define DRV_MB_PARAM_OV_CURR_CFG_OFFSET 0 @@ -1648,6 +1652,10 @@ struct public_drv_mb { #define FW_MSG_CODE_MDUMP_IN_PROGRESS 0x00040000 #define FW_MSG_CODE_MDUMP_WRITE_FAILED 0x00050000 + +#define FW_MSG_CODE_DRV_CFG_PF_VFS_MSIX_DONE 0x00870000 +#define FW_MSG_CODE_DRV_CFG_PF_VFS_MSIX_BAD_ASIC 0x00880000 + #define FW_MSG_SEQ_NUMBER_MASK 0x0000ffff