From patchwork Mon Apr 9 04:48:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 37627 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 8D3211B795; Mon, 9 Apr 2018 06:49:40 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0051.outbound.protection.outlook.com [104.47.34.51]) by dpdk.org (Postfix) with ESMTP id 287101B71E for ; Mon, 9 Apr 2018 06:49:13 +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=UmuaeUsPIMg3koMsKIiRI6gDDLkRDEQBzz7lEK1PeF0=; b=NlhugjKVdDYH04TRWE9Mqcq6cMgrDiEZFC08aE1NTJ2zpD6BnN7xAjyGxJrgTjUcH5DQa7SXSN34GWkzhWK5xeoUHuW/VTHhVSrd50vzkp04ar8UKrwX875Ku0egI8JebvMQSvAglD70XHAe2Dw2dipAoX0z0GraFuzc3mty+dE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Mon, 9 Apr 2018 04:49:09 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sun, 8 Apr 2018 21:48:09 -0700 Message-Id: <1523249290-7444-14-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> References: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BYAPR03CA0036.namprd03.prod.outlook.com (2603:10b6:a02:a8::49) To MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 51f4eff9-1221-4943-33e5-08d59dd53b5a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:MWHPR0701MB3675; X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 3:MGKCFWkJoFihuou7ZW893MV+lvsoAF8Hfk4sp9ih3J6a3AZbPWgcYFQE7l2nFA6ICJy4Sm9arzAJiUU6oAoXYEkyIV0NMGIpUb4AZHZplHrH5877KWCjrN0C0FVmNwB3Jutem6UdkkLW8HCpy4S6wNaJF/NA+QxsMgVVV9l8BzNoycqmHY1fPpeBp0o9zK0VQq8gUifNOeoZTraSzGQ9GRHa8wKqO3f1Rvb7hZ9KIhCb6tW5ri4S2D0norKioP6H; 25:3CNU0aNN58qMWjd1i9mGKoZ5nKpJHY6rexMyJIPl1Sbb1NMH+O/lj1YfKG/8O32MAjdWxb65fSpO9QIlr0V/rzGdwr5GOjhmROCe1MyAajZK6Oz2CMxu1nH9dUluSvmzrEezONBRYkXU8ZdBdkuqq8W0aIZE67CuWalEbdptoEdbHQlEu7CfbM5sKzPEzDnwILopsiLfttccQ2+dPYXvloiuEu26eiWEhFJgXSB5/n+fntaLWyD4+xMdBE1+Imk7SG53If9fyATgItnCSf+DFG/nkXlunTV2P50IA89xyWrw8TwYR9sfF+mq7lAlkLV7k5AD6YDfVB0U0nUDDitSiA==; 31:xqFmkSFq6hpwL04E6reoNaVHm8ZjJMUGxAVwbhusJ6TVmDQIa6IMkj65eh61xSQKUqM38Pd2MGk46Zt1eI8K+T3JP6roFTtPbtCGZx38/qvrM+Ik0GIkmmeoJxqfVcIh/z8bBInal+aEhbqPdi5cdv7QRCCs9/w+T9Jljbjxe98Kd42H/YhIwsj+zrj6rIjwqvKvakel2DmeuS3ACr2SDWyMdcLg3G0hEvl8kc0RXtc= X-MS-TrafficTypeDiagnostic: MWHPR0701MB3675: X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 20:F8lH+73HPmhG1qPwNSrVvCQ/XR9XMvsC0iKuP1lyVffSgFZPc5vZwcfUwuuR4rM6+ifivj4yLlA5iuZnjQyYDiS0fZYQ4VA2CA6n5TMSskVgfMOMJy/vuEJrSuuOaDOXX1HiduHVEOvYhwPaItoStS6VucXNwhTZ8mlIMGc3rUVyu6bMhlQDzwI3+z5nvPZhwm9ZKB1w4YE4nv5z5LxUikJQYhYud0NKt0jaxfLIEMEjqsHyatKwU+BysguwjBT5W+p7xgTn30X4WIm+LA6ThwrEGaxsMmP7ghYL2KOCL7tByWZIJ00s+ucP69TOGS1c5hOLtokvuxiCJKWQcGZGAsLvSGkzjEn8x6vNuHXL+2RTm/f6QSNi43/6y7SKjhfHU+va/j/llP/zdWojEKh1mx0V9xkj1P7YC1B6A34hSoOjf5vYvcvbUfxhYwZNec+Q509Fv/VWMaqO19rnBEo8P0lEwiGx1fcGZdhgjkPJznTc0y1+A4jf3kBiioiID6bj; 4:ygA6z8HxJTeB2z7NR+imMgeSknIdGJz3J1VfzDAU/A3rjRQvHDatMc/A6qgAhSe+XxVoxatZqsEvoe0aRZmlBrth5PuS2ccTHnxHZ+LFzmvSGMF8dI0Y0x40mseMJilXUZdG8zEhelWwHgWs6xVA2yR117R93iRZ8ofUJ5t/58mWm1eTsmzeFM8tnH/SVIvYuK4GL8P4cnwbDsDGoeeV59v3y68Dg71GQrb3QDhtH0/fDwTzIzIqIjVeKbLrhIx4UbMB+iu2yfSBIDnvgKoBcA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(93001095)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:MWHPR0701MB3675; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3675; X-Forefront-PRVS: 0637FCE711 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(39380400002)(39850400004)(376002)(189003)(199004)(105586002)(8936002)(316002)(7736002)(2351001)(72206003)(305945005)(186003)(21086003)(16526019)(486006)(2906002)(59450400001)(2361001)(386003)(55016002)(86362001)(3846002)(478600001)(6116002)(76176011)(50226002)(51416003)(52116002)(7696005)(4326008)(50466002)(48376002)(53936002)(16586007)(81166006)(66066001)(476003)(68736007)(2616005)(11346002)(69596002)(47776003)(26005)(956004)(8676002)(97736004)(4720700003)(25786009)(107886003)(81156014)(36756003)(446003)(106356001)(5660300001)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3675; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR0701MB3675; 23:8vv8Khg+dbmJgRLOIo8GgWeCVAJxVapXkGElo7x?= l1MXlrfesm4q//hrzNsyplyvq/YXUOYIYMbZqEftLQb73J4PuO53ipYwH0qIvIWgJATC83o0c/HtCfMvK3/hAEuxj0P0dH+l3krVVY7rZbWMbQBn8i4it3pir5p6F5fQJneUEK7bNR1Xa60kSo9p04g+hSBr/XqgLDcNgQnHo6orNqgqQwx0f+oieeHo8xM+Nr/jQ9DKzqXIRXL63lt2fKmxUmwwAXIoX72sdmYrhLuFng24nB+ogEZ/vhMUpp+8LqYoHi93ste42X6g8u+KmS/lgkxOHnYWTqXHKu4eZbgyf5gFoKMv+gqIFAGycGr3qu/M6oZP6kPshkivumEM4RMd9MwieR5ZO1yIV+x0pnUowtdjJfb3C7msC7+laWI0bnydce+e/twm0SR0rYFwAij4wa6alKpnoZJ7legKC1S0+nDJhoTqtrfZeoVA+yr09fEMYb+ViqDGAky6HZDL/zI+J9GlCNFAgVd9zZbMZJv9r4S5ULTFvrg2fRJRCNCm0CqOz0VLp8ampm7y3Kqbla0jt6pnWdmmcUMp3evKfVHUhAnbIAqpmGLVtShkeZWTDKNtwU9PrNcjXXJmItZf5v5txqLhZ2PuT5OoVed0dp4AGtfSdu7leHyM0D+a3VKNGeCFkQBHZzUGhTbsn9VyRby3P/Yfw8qs74GdXJW73uc0N1VTnT1BCp46s+g2mBkkJy1wgELUkV3CNqH2Kuac05a22WJPSEyGcpZqj2wvxRd/YO+iZfG0234hq7Fi/NUEiCq2n20KpVSc6qwni+Vrq71k9KoNcUALDr7wYP4eSedqmD33Gvqno80uScUUZVVea9vNXokisjAOLwlP3wOyVPFy5bOA5GZVApiBOi1rmhPUUU6BrMnq2CZK50w67lDyCEJR9QX1ng65iFdhMsj2c4uJf25trBc5O8Th53Jmaiw/mZH0a9961jOwUpNWSd1SFsRTj8hBs3Gd2WUHOxMym7piMOTGNxawaJQ9+avtCRS5U+47qi6OThFvAMDac10sA5nRw7BtLfS9hjXwaX8j1SRZY2PlQnnL+y0RPNpasigLul07J7fzsN82wbP9bbKSxdyl2cBIV+7kE5Pn0VEqstww8AsZpWwMk5ALRwnm04DL7OeF3ZjGlI5tLYtVfsFnh7+xEkrXjx+3vdnEq1sdmRhu0fNqheYHXq/jemdLqvo5aISMQ+R0SlMO1B2rQTdcwY5VaQrFPPL1nSxZwkJ1vvjpy5YYRRI7Z+6FVY5bcjq4iwD7v3Ce1drHWxjDIZGa3If4= X-Microsoft-Antispam-Message-Info: NOCtske2G3WJNQ4fNHeJn/ObnCVOERArKbSsjzblv11+jI6KAZyvaIhyoS1jXUWACbHv5JHzqYpaAV5kPjSrcUoSNJeTPbw7upivRmK1gbpK7vq6DRl1boOQzoJgwbZVCeQzaWFGlwPt+ykOM+BxPOItC1Vvf93c778+W0ZuuFmW0+ZAeBiBGK8dq3wzOLGA X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 6:JuUzlL4B9Eb4TCy9ekQWWtiZS+emRNnM1pOce9LMXBCzKyQrHtrrPtlzKrtQdd33UnCmk4+8pE5yN+6GBFjw9MQ8NX4vUa6XL20rQ3nU91jOx6aORJ4IJFV0UgW7wPFGTwM94bXk2S19bYSEo10CXIcM/OWEuURHH4gGa/FTRVNZNXM0mNV0DEoUEjgWHT0Vely6ulHpsGSYSYd61u5+dTNBmAVuvzF075F00Mnyc33EYiJPkQS5AreRfJ0vEf7D/d0ftDQa2+WE086fTYWKc4YCMJOS+1yat98F4W8jWldqf28QXwT/YQY5EjgXaG8pK8SZwhX9ukF9umbfJj28b4SfgEcXxr4757PV/tq/ArauyO8/qCGN5vlVq3HlYrD/Uj/dU+VqLYkwUYSos2mM+6chZT1E79Rv8gQU4PqQpwdA6g4zoWAgdtmhgIFtQWbnenWc/R0yYqdTYM4edPhMyA==; 5:cQCYITf/gcc9CsBaJ/17XmQncWPOhn1YKNBZ+qlFzy1amrr8I0uXfYbm2koc7QRy3RnXpsT388EwGaCtiZZ0uA8nG3Q41jldPcM7LlLOWOkrKSRcfbwVTK2Him4lpKf1UV5UAWjbCWuK1z0+25aaEgyd+EOw56rCIOkQ8X5J0Cs=; 24:/7boy6KeaZldflN/l2vgYp2+g9MNpNrWklKcGCpQxDa8nyqr+s/4tuikzLyHkCHUGBLOmkFRgQEpRjyyCFNMz9+I7rFohRohaiFX7dIRC6g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 7:HvJ6aC0f4iSITPT9AUqVNNpgpPd5I7n8Cv9LtrqPQDwOGpJVx1+yo4TpQVOmpOJV/7Cbv0D4f3bdnwcND4WK6OS282F9dPqWs110ymntLtyGbIjYxWL6G6Vj6djpniJE74wy+g4Mz7sN9SuOnrwAo6v7BwOtMF08iU+MqE2/Qb5ciZdBV/ULEwtpiohBqOYkzascouAq3eqHSVCSaAw23livE2WiNUP0txSSQQXtC2iCawhZF9usEqPTUiBeWRIA X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2018 04:49:09.0124 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 51f4eff9-1221-4943-33e5-08d59dd53b5a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0701MB3675 Subject: [dpdk-dev] [PATCH v2 13/14] net/qede/base: add packet pacing support 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" Add packet pacing support for PFs. ecore client can request for enabling packet pacing at init time, if requested then ecore is going to skip MCoS and SRIOV configurations. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore.h | 16 ++++++++++- drivers/net/qede/base/ecore_dev.c | 47 ++++++++++++++++++++++++++++----- drivers/net/qede/base/ecore_dev_api.h | 3 +++ drivers/net/qede/base/ecore_l2.c | 36 ++++++++++++++++++++++--- drivers/net/qede/qede_main.c | 1 + 5 files changed, 91 insertions(+), 12 deletions(-) diff --git a/drivers/net/qede/base/ecore.h b/drivers/net/qede/base/ecore.h index c8e6311..b6541dc 100644 --- a/drivers/net/qede/base/ecore.h +++ b/drivers/net/qede/base/ecore.h @@ -41,6 +41,9 @@ ((FW_MAJOR_VERSION << 24) | (FW_MINOR_VERSION << 16) | \ (FW_REVISION_VERSION << 8) | FW_ENGINEERING_VERSION) +#define IS_ECORE_PACING(p_hwfn) \ + (!!(p_hwfn->b_en_pacing)) + #define MAX_HWFNS_PER_DEVICE 2 #define NAME_SIZE 128 /* @DPDK */ #define ECORE_WFQ_UNIT 100 @@ -680,6 +683,13 @@ struct ecore_hwfn { /* Mechanism for recovering from doorbell drop */ struct ecore_db_recovery_info db_recovery_info; + /* Enable/disable pacing, if request to enable then + * IOV and mcos configuration will be skipped. + * this actually reflects the value requested in + * struct ecore_hw_prepare_params by ecore client. + */ + bool b_en_pacing; + /* @DPDK */ struct ecore_ptt *p_arfs_ptt; }; @@ -932,12 +942,16 @@ void ecore_set_fw_mac_addr(__le16 *fw_msb, __le16 *fw_mid, __le16 *fw_lsb, #define PQ_FLAGS_ACK (1 << 4) #define PQ_FLAGS_OFLD (1 << 5) #define PQ_FLAGS_VFS (1 << 6) +#define PQ_FLAGS_LLT (1 << 7) /* physical queue index for cm context intialization */ u16 ecore_get_cm_pq_idx(struct ecore_hwfn *p_hwfn, u32 pq_flags); u16 ecore_get_cm_pq_idx_mcos(struct ecore_hwfn *p_hwfn, u8 tc); u16 ecore_get_cm_pq_idx_vf(struct ecore_hwfn *p_hwfn, u16 vf); -u16 ecore_get_cm_pq_idx_rl(struct ecore_hwfn *p_hwfn, u8 qpid); +u16 ecore_get_cm_pq_idx_rl(struct ecore_hwfn *p_hwfn, u16 rl); + +/* qm vport for rate limit configuration */ +u16 ecore_get_qm_vport_idx_rl(struct ecore_hwfn *p_hwfn, u16 rl); const char *ecore_hw_get_resc_name(enum ecore_resources res_id); diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index 112f854..b1e67e2 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -513,11 +513,14 @@ static u32 ecore_get_pq_flags(struct ecore_hwfn *p_hwfn) /* feature flags */ if (IS_ECORE_SRIOV(p_hwfn->p_dev)) flags |= PQ_FLAGS_VFS; + if (IS_ECORE_PACING(p_hwfn)) + flags |= PQ_FLAGS_RLS; /* protocol flags */ switch (p_hwfn->hw_info.personality) { case ECORE_PCI_ETH: - flags |= PQ_FLAGS_MCOS; + if (!IS_ECORE_PACING(p_hwfn)) + flags |= PQ_FLAGS_MCOS; break; case ECORE_PCI_FCOE: flags |= PQ_FLAGS_OFLD; @@ -526,11 +529,14 @@ static u32 ecore_get_pq_flags(struct ecore_hwfn *p_hwfn) flags |= PQ_FLAGS_ACK | PQ_FLAGS_OOO | PQ_FLAGS_OFLD; break; case ECORE_PCI_ETH_ROCE: - flags |= PQ_FLAGS_MCOS | PQ_FLAGS_OFLD; + flags |= PQ_FLAGS_OFLD | PQ_FLAGS_LLT; + if (!IS_ECORE_PACING(p_hwfn)) + flags |= PQ_FLAGS_MCOS; break; case ECORE_PCI_ETH_IWARP: - flags |= PQ_FLAGS_MCOS | PQ_FLAGS_ACK | PQ_FLAGS_OOO | - PQ_FLAGS_OFLD; + flags |= PQ_FLAGS_ACK | PQ_FLAGS_OOO | PQ_FLAGS_OFLD; + if (!IS_ECORE_PACING(p_hwfn)) + flags |= PQ_FLAGS_MCOS; break; default: DP_ERR(p_hwfn, "unknown personality %d\n", @@ -837,7 +843,7 @@ u16 ecore_get_cm_pq_idx_vf(struct ecore_hwfn *p_hwfn, u16 vf) return ecore_get_cm_pq_idx(p_hwfn, PQ_FLAGS_VFS) + vf; } -u16 ecore_get_cm_pq_idx_rl(struct ecore_hwfn *p_hwfn, u8 rl) +u16 ecore_get_cm_pq_idx_rl(struct ecore_hwfn *p_hwfn, u16 rl) { u16 max_rl = ecore_init_qm_get_num_pf_rls(p_hwfn); @@ -847,6 +853,23 @@ u16 ecore_get_cm_pq_idx_rl(struct ecore_hwfn *p_hwfn, u8 rl) return ecore_get_cm_pq_idx(p_hwfn, PQ_FLAGS_RLS) + rl; } +u16 ecore_get_qm_vport_idx_rl(struct ecore_hwfn *p_hwfn, u16 rl) +{ + u16 start_pq, pq, qm_pq_idx; + + pq = ecore_get_cm_pq_idx_rl(p_hwfn, rl); + start_pq = p_hwfn->qm_info.start_pq; + qm_pq_idx = pq - start_pq - CM_TX_PQ_BASE; + + if (qm_pq_idx > p_hwfn->qm_info.num_pqs) { + DP_ERR(p_hwfn, + "qm_pq_idx %d must be smaller than %d\n", + qm_pq_idx, p_hwfn->qm_info.num_pqs); + } + + return p_hwfn->qm_info.qm_pq_params[qm_pq_idx].vport_id; +} + /* Functions for creating specific types of pqs */ static void ecore_init_qm_lb_pq(struct ecore_hwfn *p_hwfn) { @@ -3878,8 +3901,13 @@ static void ecore_mcp_get_eee_caps(struct ecore_hwfn *p_hwfn, bool drv_resc_alloc = p_params->drv_resc_alloc; enum _ecore_status_t rc; + if (IS_ECORE_PACING(p_hwfn)) { + DP_VERBOSE(p_hwfn->p_dev, ECORE_MSG_IOV, + "Skipping IOV as packet pacing is requested\n"); + } + /* Since all information is common, only first hwfns should do this */ - if (IS_LEAD_HWFN(p_hwfn)) { + if (IS_LEAD_HWFN(p_hwfn) && !IS_ECORE_PACING(p_hwfn)) { rc = ecore_iov_hw_info(p_hwfn); if (rc != ECORE_SUCCESS) { if (p_params->b_relaxed_probe) @@ -3964,7 +3992,10 @@ static void ecore_mcp_get_eee_caps(struct ecore_hwfn *p_hwfn, * that can result in performance penalty in some cases. 4 * represents a good tradeoff between performance and flexibility. */ - p_hwfn->hw_info.num_hw_tc = NUM_PHYS_TCS_4PORT_K2; + if (IS_ECORE_PACING(p_hwfn)) + p_hwfn->hw_info.num_hw_tc = 1; + else + p_hwfn->hw_info.num_hw_tc = NUM_PHYS_TCS_4PORT_K2; /* start out with a single active tc. This can be increased either * by dcbx negotiation or by upper layer driver @@ -4251,6 +4282,7 @@ enum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev, p_dev->chk_reg_fifo = p_params->chk_reg_fifo; p_dev->allow_mdump = p_params->allow_mdump; + p_hwfn->b_en_pacing = p_params->b_en_pacing; if (p_params->b_relaxed_probe) p_params->p_relaxed_res = ECORE_HW_PREPARE_SUCCESS; @@ -4286,6 +4318,7 @@ enum _ecore_status_t ecore_hw_prepare(struct ecore_dev *p_dev, BAR_ID_1) / 2; p_doorbell = (void OSAL_IOMEM *)addr; + p_dev->hwfns[1].b_en_pacing = p_params->b_en_pacing; /* prepare second hw function */ rc = ecore_hw_prepare_single(&p_dev->hwfns[1], p_regview, p_doorbell, p_params); diff --git a/drivers/net/qede/base/ecore_dev_api.h b/drivers/net/qede/base/ecore_dev_api.h index f619683..29fb74b 100644 --- a/drivers/net/qede/base/ecore_dev_api.h +++ b/drivers/net/qede/base/ecore_dev_api.h @@ -270,6 +270,9 @@ struct ecore_hw_prepare_params { */ bool b_relaxed_probe; enum ecore_hw_prepare_result p_relaxed_res; + + /* Enable/disable request by ecore client for pacing */ + bool b_en_pacing; }; /** diff --git a/drivers/net/qede/base/ecore_l2.c b/drivers/net/qede/base/ecore_l2.c index 0883fd3..c897fa5 100644 --- a/drivers/net/qede/base/ecore_l2.c +++ b/drivers/net/qede/base/ecore_l2.c @@ -1188,11 +1188,20 @@ enum _ecore_status_t void OSAL_IOMEM * *pp_doorbell) { enum _ecore_status_t rc; + u16 pq_id; - /* TODO - set tc in the pq_params for multi-cos */ - rc = ecore_eth_txq_start_ramrod(p_hwfn, p_cid, - pbl_addr, pbl_size, - ecore_get_cm_pq_idx_mcos(p_hwfn, tc)); + /* TODO - set tc in the pq_params for multi-cos. + * If pacing is enabled then select queue according to + * rate limiter availability otherwise select queue based + * on multi cos. + */ + if (IS_ECORE_PACING(p_hwfn)) + pq_id = ecore_get_cm_pq_idx_rl(p_hwfn, p_cid->rel.queue_id); + else + pq_id = ecore_get_cm_pq_idx_mcos(p_hwfn, tc); + + rc = ecore_eth_txq_start_ramrod(p_hwfn, p_cid, pbl_addr, + pbl_size, pq_id); if (rc != ECORE_SUCCESS) return rc; @@ -2278,3 +2287,22 @@ enum _ecore_status_t return rc; } + +enum _ecore_status_t +ecore_eth_tx_queue_maxrate(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + struct ecore_queue_cid *p_cid, u32 rate) +{ + struct ecore_mcp_link_state *p_link; + u8 vport; + + vport = (u8)ecore_get_qm_vport_idx_rl(p_hwfn, p_cid->rel.queue_id); + p_link = &ECORE_LEADING_HWFN(p_hwfn->p_dev)->mcp_info->link_output; + + DP_VERBOSE(p_hwfn, ECORE_MSG_LINK, + "About to rate limit qm vport %d for queue %d with rate %d\n", + vport, p_cid->rel.queue_id, rate); + + return ecore_init_vport_rl(p_hwfn, p_ptt, vport, rate, + p_link->speed); +} diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c index 650f2cf..2333ca0 100644 --- a/drivers/net/qede/qede_main.c +++ b/drivers/net/qede/qede_main.c @@ -62,6 +62,7 @@ static void qed_init_pci(struct ecore_dev *edev, struct rte_pci_device *pci_dev) hw_prepare_params.chk_reg_fifo = false; hw_prepare_params.initiate_pf_flr = true; hw_prepare_params.allow_mdump = false; + hw_prepare_params.b_en_pacing = false; hw_prepare_params.epoch = (u32)time(NULL); rc = ecore_hw_prepare(edev, &hw_prepare_params); if (rc) {