From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Content-Type: text/plain 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?= =?us-ascii?Q?qknVrcIK4oyX2guei5qFakP83MYfCqMbaDYERtqqZypnMH9C6gn7EkoJ1v+3?= =?us-ascii?Q?ja3tZHPGODgBPsM18OAV9ff6K6Y/2vkUWx/hrmgoZiVD8pupfCJKKvOsOx+e?= =?us-ascii?Q?UJER5fHI/2QAE+lQZ3hjQN+eAT+N0oyaW9ggHyw5TRmKZq8vavS/507Xkgjk?= =?us-ascii?Q?JqMzvrGJpViIMktzrSmQUvVM0XOEdpyELAT8nQ1xxJiIA5Nx5gqXdgM7GXbb?= =?us-ascii?Q?mPXzQOecyOhMwwmOAmt6/gL2sYafB29qoTTjjF6XV28GUDN5DNygaF23YYc2?= =?us-ascii?Q?LvU5F8g3Crd8N7cXbwUbw1YXJjw9NZltMt6BgclDfXYelJS3Y5sWlCEAgJym?= =?us-ascii?Q?KePMzIo3YeKNmV45O/zIU2f5l6ADxmRCcF53YWa7LU7GPI6IKJSF6/Mc8EMG?= =?us-ascii?Q?1hgVgrJwmaWR8fNSklnoDV5LOaWX+aFXUom6/SqcvSpfjnfwJgueBPPQVIzP?= =?us-ascii?Q?rdNYQAVQoNOelX88CmmY8uDh+hiVdhZWas2lsekr2dEYU3RI+Vjo6wO1hEll?= =?us-ascii?Q?GA1GkqaV3514zPHVVcSo3lTjSb9a1143ItJpDun9XRBpjJPaMPPC4hnROLjn?= =?us-ascii?Q?1QLaCgh8Cxecc4K/XTzscflpQPeJaSXr4xVt2XrtsGnOuXgW0bPRiABNuOLg?= =?us-ascii?Q?Nz5939doIcXdeoUmsXGU4pfYdwrZ3blYSbEsmEMreL6BdWJ0kKHwa1qvf6MN?= =?us-ascii?Q?tRQ0kdEWkwbSXTz/zlPsR6rihj1tq31bAhIjGaTv4ZOL/7ftN0ozyakceFRN?= =?us-ascii?Q?1xyi7i9s0GqZHdGLWyD2uffL3yI8MRrv0LV1Tv3NublVAQkdhFkJqTH/GvbE?= =?us-ascii?Q?1Uc9lz4YVPX0sPpVjaMUqck47yqP35WNKv9WfaLDvBOBPp8FrKJ+ptkwnRVa?= =?us-ascii?Q?5Z2umd52gBgwfOogxtmAJmu+lZ28nUVYgQN2WSlMEClejH6+bTMpgmyZExz8?= =?us-ascii?Q?V9gppWL8/74O+kcSzPEl/VG/HrtDnhXPy4eOOLQlH3qeacalMcGLxxDXknJ2?= =?us-ascii?Q?KqyRBroUeLtOssAnfSCEFyeL2/MioVVHI5tQiL+vpNWbtFp/KQBdJcVoDjCl?= =?us-ascii?Q?ssqLcinLVadx0vl+c6iHqjcCcKn2vQs95ZjWPxQbPE9zA1sB254fGMuECY05?= =?us-ascii?Q?uF2PwhNtapnb3ua/fb556PoeGZH7DMcs39MM4H+7N3M69rKbMLb8lvk3k5J+?= =?us-ascii?Q?awFVGNI41t/OQJL5BdFs918cmzeraBtEsxbhnV7GTJHwdqDxUXsEtHUnbZXv?= =?us-ascii?Q?sw5xAst80Z07O4i+ZK8NdoMKej6ILswpow2TkUI6wjfOON3lOtVYfXWobwU8?= =?us-ascii?Q?4M3OT+cOK8sF5/ac1WoFY9c2L9K8=3D?= 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: , X-List-Received-Date: Sun, 01 Apr 2018 05:48:01 -0000 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) { -- 1.7.10.3