From patchwork Sun Apr 1 05:47:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 36829 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 12D77A48B; Sun, 1 Apr 2018 07:48:10 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0048.outbound.protection.outlook.com [104.47.41.48]) by dpdk.org (Postfix) with ESMTP id C38D96CA3 for ; Sun, 1 Apr 2018 07:48:00 +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=ciUTWzyt3a0PDyK9TMqNTSUfRB+Y2M7dIJr69rxdUwdHlCySFZ2NfYA0Te1jbGr3U/4D6rEjbsv/OuKCWwmrOWnj1jTUe6DHcYlPOvXJWChPgc6SqvEEQHTJsjtUBOGNsVoYEquN3M5XlrCh7VSviMi49Tr4DRNYcC/er71hcYM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3670.namprd07.prod.outlook.com (2603:10b6:4:7e::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.631.10; Sun, 1 Apr 2018 05:47:59 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sat, 31 Mar 2018 22:47:03 -0700 Message-Id: <1522561624-15817-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: BN6PR11CA0017.namprd11.prod.outlook.com (2603:10b6:405:2::27) To DM5PR0701MB3670.namprd07.prod.outlook.com (2603:10b6:4:7e::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff643ff4-d22e-4118-77b0-08d597942061 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM5PR0701MB3670; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 3:enpGmCiHEzu4Upr4HbSJMWdW8HR8fzCJugiY34prOqPxosDdh8u2Dmy9XKgR8iiPwM26zRPcYUbIx+2DmcWqlTePdku61+ljTp84DeGUo9gm2ehXULyDl/t9Sv6SQN/CpsOVqqTLpGG6bOSMeSkG0g+kT/wt6FGazHpLxGpi90KuNjKJMGPv2OKoLbyoKj/8RC8fImjMCkbJ3g6gF6Tvd7xd8V9y2Zm7qCg0VYj0s8hgFAesm14fGHtvMK2QGpyY; 25:1y7T9GrTJNjnlsyDknpH8t5tFQFCbg8CTbTaFRLx/NnuTRi6MFaFZ1n5IJrydm1BtkU1hYd9hbh8V0Y7qkJnK5ESAvN8jlFu9dThYwurpnWr6u5SuYz5Gkl8ha8RZ/XloIJqLpx+UuQpM9gQG7/2Z6YNMehIvCFUwTBVXKXGk0vb9K09H95ix/s+BxlinblHLJoQkjmgj7gf8HP3agY7NgaT9vMp37ERlyW7VqQ8pC2BZeWLj4hX6HK8I8KiTPRpNAZO7LjnWm3LvcN0A3W+qoOyyfK1XC8qY0Ud0ond/XQ9/adJGUmePWSnNC7OJJU3nHQ1Qv6cK+d4BP5RmvlYMQ==; 31:Q8V3lfgn6AchAH7d7h3hPxbx0C/aQ8m/TNp+QOnQS445PDwol3VWxvJF1jV1cwyAtOAuasFN9F9J8GZo2dX2GMTcZ+43z/7mppzhAvPFj/D1Ir5PgzAF3fBQyyicIhkcKj60WJWBym7FKNXCP5ju4p8tqR1HGdNL4iUGuSith0C55xnmLrJbsbiEMtyV3361s3m9GFJwsUwlq3f/EcDFSGcGIp7EmvJOFaSgFjWbgag= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3670: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 20:kwqi8ISVUkyrMbQRcxvxxTmCRTbKQzqMK7HKhmV2uFXxLpiAS/3KoxE/4UbCESgQQFfZGqyBREeyBm+GpMDRCx1dF/svBqq6QlEif8dpCu67YDa64IQn+STBF0mK1tAkCRwZyFXiRjfBlv1lPIxPX5/wz1Hba71Wupo8RIVqMhsAg6o2rmLIO/m3TLFqj2ijr5TB98DzPJJUE6LEnrRfkAIfR8LzjkF6eB3MwfaiBhN7qaLb4YjOBSwGcTTby/Q19mJY/CiXMrPjYnXfpTdeDd6qpMfmqGgI/Wq5dU0pFTf5JlcoGc54b1af2shlU2R6UyzqG9+O3blFNEA6Cy6E+H35II729jvJmjBeCcTyD2PDe1UZZv8B0vMM4/SuYXve4LL1Ge6UJl+/4/pMrEbBh9goReAqzaOIYR7HYi2IZAw9vEicmLQZIUpCI7vWynH/j/8eG03XPP1tR58PA+B7EAWeQdMuqYp45HsZeV7lri0CIUJJ/9MDrHm4qkELxAaB; 4:jxGzk1QB5RcboiGUJuZvPfwgrrIWtv08APKcGrJLKM95UahQn/P2+B/pILVX4SecrjOzj/1AJVD5E/grKb485jC5vFXUu5+7UEkN8FSZ2JImyQ6BMwdWCPhfGJUxir2YqmqpdGw69ritJvAtobYfYhY/N6kvF9fkJvaceyCxBcoiPEQ44pbn+epPMzcJwICiWlLKp40sGU3vFVsfW4D3beTybWAPxbvyWBgIUCqc3jx9AqTCK4oYfm1Xbc6oy/Eg+p6DT6JJAXgyNG6q0+x9hQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM5PR0701MB3670; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3670; X-Forefront-PRVS: 06290ECA9D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39850400004)(376002)(346002)(366004)(396003)(39380400002)(189003)(199004)(25786009)(16526019)(52116002)(81166006)(81156014)(76176011)(8676002)(7696005)(478600001)(72206003)(51416003)(305945005)(26005)(386003)(7736002)(186003)(2361001)(59450400001)(86362001)(47776003)(69596002)(2906002)(66066001)(4326008)(68736007)(2351001)(55016002)(97736004)(21086003)(50226002)(6666003)(107886003)(4720700003)(36756003)(8936002)(16586007)(316002)(52396003)(6116002)(106356001)(11346002)(53936002)(105586002)(5660300001)(6916009)(3846002)(486005)(446003)(476003)(48376002)(50466002)(486005)(956004)(2616005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3670; 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; DM5PR0701MB3670; 23:I7wbDHDhPUD5QSp7Bp/M/SZgmhRTG1/3ZTuf9hZ?= qknVrcIK4oyX2guei5qFakP83MYfCqMbaDYERtqqZypnMH9C6gn7EkoJ1v+3ja3tZHPGODgBPsM18OAV9ff6K6Y/2vkUWx/hrmgoZiVD8pupfCJKKvOsOx+eUJER5fHI/2QAE+lQZ3hjQN+eAT+N0oyaW9ggHyw5TRmKZq8vavS/507XkgjkJqMzvrGJpViIMktzrSmQUvVM0XOEdpyELAT8nQ1xxJiIA5Nx5gqXdgM7GXbbmPXzQOecyOhMwwmOAmt6/gL2sYafB29qoTTjjF6XV28GUDN5DNygaF23YYc2LvU5F8g3Crd8N7cXbwUbw1YXJjw9NZltMt6BgclDfXYelJS3Y5sWlCEAgJymKePMzIo3YeKNmV45O/zIU2f5l6ADxmRCcF53YWa7LU7GPI6IKJSF6/Mc8EMG1hgVgrJwmaWR8fNSklnoDV5LOaWX+aFXUom6/SqcvSpfjnfwJgueBPPQVIzPrdNYQAVQoNOelX88CmmY8uDh+hiVdhZWas2lsekr2dEYU3RI+Vjo6wO1hEllGA1GkqaV3514zPHVVcSo3lTjSb9a1143ItJpDun9XRBpjJPaMPPC4hnROLjn1QLaCgh8Cxecc4K/XTzscflpQPeJaSXr4xVt2XrtsGnOuXgW0bPRiABNuOLgNz5939doIcXdeoUmsXGU4pfYdwrZ3blYSbEsmEMreL6BdWJ0kKHwa1qvf6MNtRQ0kdEWkwbSXTz/zlPsR6rihj1tq31bAhIjGaTv4ZOL/7ftN0ozyakceFRN1xyi7i9s0GqZHdGLWyD2uffL3yI8MRrv0LV1Tv3NublVAQkdhFkJqTH/GvbE1Uc9lz4YVPX0sPpVjaMUqck47yqP35WNKv9WfaLDvBOBPp8FrKJ+ptkwnRVa5Z2umd52gBgwfOogxtmAJmu+lZ28nUVYgQN2WSlMEClejH6+bTMpgmyZExz8V9gppWL8/74O+kcSzPEl/VG/HrtDnhXPy4eOOLQlH3qeacalMcGLxxDXknJ2KqyRBroUeLtOssAnfSCEFyeL2/MioVVHI5tQiL+vpNWbtFp/KQBdJcVoDjClssqLcinLVadx0vl+c6iHqjcCcKn2vQs95ZjWPxQbPE9zA1sB254fGMuECY05uF2PwhNtapnb3ua/fb556PoeGZH7DMcs39MM4H+7N3M69rKbMLb8lvk3k5J+awFVGNI41t/OQJL5BdFs918cmzeraBtEsxbhnV7GTJHwdqDxUXsEtHUnbZXvsw5xAst80Z07O4i+ZK8NdoMKej6ILswpow2TkUI6wjfOON3lOtVYfXWobwU84M3OT+cOK8sF5/ac1WoFY9c2L9K8= X-Microsoft-Antispam-Message-Info: T+Dy6REquYuNa80YCZeLS9CYsc/SwuPk7fr+VzHnNylEebXU4c/iU0TMRB6g/EPDAH1hRJDr5OZWC2dm1AI7HCxTwiCNmmw2aFQVlAKi4pPpvMEdNNQHjG4eXynHQFqwlRP/5QhrqHYrkWtZaYAN5IFWg+loCC/PJMAe+LUBCaggXmfUjtrtV9g411V52tls X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 6:w53HegH10HBjCv4i5S+1DVdBdvy5KPtWC4sKyMRL4qK04P5Ikub7IHhEPCGzEWLyHhM/gzvjZp9hy2lixvKO8xg1xCb83woGnBFxu8J0UQk4kKp21dx81wMRKK7MQmb92k8QwaYlS8vQDULIUh6wyBIJB15UYDwa7QUj+naKe0ZpFytsJslC7cdWRhnbCalXdOblO9I4gK0rV5pRiL0RarwZ8Pr1fwcufjlH1Aj+2h4pqNatZxP+jHSZmSSoSwjzZHgQkXzUnwKAcdSWFxfhoRgIh0skhTQE42ZrjQS+PiFTO+hS3ky9SUsGDKvAs1k+V7+tIAIJNk4YkPAN7WLxZzAMq6KJRMp5wUUDCpiadIaaKumZ+ZSZcUtE9rhrGoP/bKsn0oCjJW/5ViyZgzUewfKJ03SP7DUFKZS96r1MDNtJx2rd7pEwt1PLkbVW/LR7eSSmqXRijR6ha/iDxFIkhg==; 5:GweUvZlcoS8SnX7HuhjBVlBDXIOe6KuEFC88WXoGTNfZgu0LX0JI9NUg/nq2wO75AkRu4J7BuCUAqF4nEKgHSKvTfT75O/YVPTfwMUOoYXlZLbT8Ew1v8ODkWCUiYBH8iTaGJLcJ5MSc4daWpJrRmNYOZfferMJbqoUNU5gTla8=; 24:BuwbPHrQKO4L96U45qHnjEvU4sfwWLUHUofUbnOlStQA/ce6ham4wlai2myXTCQkO7eKHvjXHGTy1UkWvPUt5De/IjKQEBkULKxAT6FJeJU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 7:XhR91UX+89wiOUA3RTzpjn9AlBqO7uyJsaUpDR+Se7Jg5MvBuRpQo9o83LCOkk3wwOcx87Cj7cn8CxMZ0NFcYDRwvAGZ/iQY1tKxP3TIHCO8OhY3u++q6rZBXiF+gcpePm6lOUWwKZcl/ncFOlvb2HhJTd/IaUoUQzQp25IscqixpvApTV7r+KvC1shd+PuBovELiXxBdXBRNns6zkWL3lHRTJgIPMVtETxBytBiLg9f6o7GC9zEjInKBH2lhahn X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2018 05:47:59.0755 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ff643ff4-d22e-4118-77b0-08d597942061 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3670 Subject: [dpdk-dev] [PATCH 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) {