From patchwork Fri Nov 23 16:56:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Radulescu X-Patchwork-Id: 1002481 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="X+qX23ur"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 431jCG3TY6z9s1c for ; Sat, 24 Nov 2018 03:56:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633160AbeKXDl7 (ORCPT ); Fri, 23 Nov 2018 22:41:59 -0500 Received: from mail-eopbgr140051.outbound.protection.outlook.com ([40.107.14.51]:16356 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2633153AbeKXDl6 (ORCPT ); Fri, 23 Nov 2018 22:41:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bo1MXBoee6C4RpnDJ8SqO2NUIyK+5Xk+QgwfwVa2Uws=; b=X+qX23ur5mPnLmIO/oKj/4LJyIHjqmz29F8TW4Kyd/qFk3M3GaVWHZG8bgtn2mxh3UIS0Ua9nrGpSSJDdpScNnpAHvN5I2G3pcCdBdzwwWrqoeaOlWUpjwIX8TXTcfzkukWmbwh9Gcg/MYLF2/+VKkV+LHqHMhtQm3kdX/jz2iU= Received: from AM0PR04MB4994.eurprd04.prod.outlook.com (20.177.40.15) by AM0PR04MB5379.eurprd04.prod.outlook.com (20.178.115.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1339.28; Fri, 23 Nov 2018 16:56:35 +0000 Received: from AM0PR04MB4994.eurprd04.prod.outlook.com ([fe80::c426:6b56:b6d2:c8f2]) by AM0PR04MB4994.eurprd04.prod.outlook.com ([fe80::c426:6b56:b6d2:c8f2%3]) with mapi id 15.20.1339.030; Fri, 23 Nov 2018 16:56:35 +0000 From: Ioana Ciocoi Radulescu To: "netdev@vger.kernel.org" , "davem@davemloft.net" CC: Ioana Ciornei Subject: [PATCH net-next 6/8] dpaa2-eth: Add support for XDP_TX Thread-Topic: [PATCH net-next 6/8] dpaa2-eth: Add support for XDP_TX Thread-Index: AQHUg01+QWuYFsCETECk+AY3pSJ++A== Date: Fri, 23 Nov 2018 16:56:35 +0000 Message-ID: <1542992186-26028-7-git-send-email-ruxandra.radulescu@nxp.com> References: <1542992186-26028-1-git-send-email-ruxandra.radulescu@nxp.com> In-Reply-To: <1542992186-26028-1-git-send-email-ruxandra.radulescu@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR0802CA0024.eurprd08.prod.outlook.com (2603:10a6:800:aa::34) To AM0PR04MB4994.eurprd04.prod.outlook.com (2603:10a6:208:c7::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ruxandra.radulescu@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [86.34.165.90] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR04MB5379; 6:pieL45HtlMx0hkdD7+Y1OoSA3kXjPqqiwbtAw4ukvhPdX06wC5DYE7McLo4ypvZM79WOIWX8xHm2UKkRtMvrt1/r7dVXP9J7Da+2TlxJk45P5dYpaEFtviLsWps+hKhGCp5YtfY9cpZH1RPbu7FjiD3ZTtdWmchMhKkXdAO5+t+qTzQVsSGIarQsOBCIcXBeLhzPmNMaDN32bvdcCu+81oy47QDbuyhDBNP5m/ww0dmMtj2lJJX4YaeIzczskq+PUPvySLTim3weBdQ1n0W4GQ8VcmachnJxQGST87xubxeoYcvHGUWB1IqCRuc7tOa/4wsvU57PaV7rvHRKnXZg59Rk36Q/a1x4g+PYbCl4QKIAB9B3iMB5rvuBg9yfWiiY5xnH0uWM/sECV6p8b13YEZewtpNrXz+MaDmbaN1+tp+RpA3IiNOSgCbAvz/MeTaBnDGA1/d6mOUGTawM1VeW8g==; 5:mgrJqI07NYX2i//ebOROnPkEL5ayY/x3B1RU0JIeDr7QR4a+1HEJd0WXbKMVK3WD/600UPoxcCNASYQCzKZM4tZRkOfMfOFveeOuiMQuYkAgmJNjN68Z8OUT/KVPVflf8XpQ3+BOqY1yI47/wa5ZOng/bMNGfTcAEsiCno/P/Hs=; 7:tBcmliFnY23rjv0x3WOhuqjRNQ9l2PL6cIzSMlGUtV3cT0DX4LBmqt4/INMSvEcZAdPwaqaXPPQ6HLmaF7CaW7ntKAVGxc3zskvqYqE9nVoyjR+b8MsUagvq1aQOqHc54tMSU+qDf5pn1BbAAZGVeg== x-ms-office365-filtering-correlation-id: 7c19026f-cd66-4c48-e8c6-08d65164a09a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM0PR04MB5379; x-ms-traffictypediagnostic: AM0PR04MB5379: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231442)(944501410)(52105112)(3002001)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:AM0PR04MB5379; BCL:0; PCL:0; RULEID:; SRVR:AM0PR04MB5379; x-forefront-prvs: 086597191B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(376002)(366004)(346002)(136003)(39860400002)(189003)(199004)(6512007)(53936002)(5660300001)(2501003)(6436002)(575784001)(86362001)(7736002)(305945005)(8676002)(106356001)(8936002)(81156014)(81166006)(105586002)(36756003)(66066001)(26005)(6486002)(71190400001)(99286004)(25786009)(110136005)(2900100001)(97736004)(478600001)(486006)(4326008)(3846002)(6116002)(186003)(316002)(6506007)(446003)(68736007)(2906002)(2616005)(476003)(102836004)(11346002)(256004)(386003)(14454004)(76176011)(14444005)(52116002)(71200400001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR04MB5379; H:AM0PR04MB4994.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: FQ2XpR/AUMYfiZr1PItYUinqGtrxcfFjQesXOXxYSWpjF1+7/a8Af7KKJs8NkEA/ZUczy9py7yL6p+R9YQL8EqIWTap9IBbtd/7dua/4PNVS751QMFi7cYy6stxnAF4g4qDPuI23wwfDvaxNWwoQfEa+BMBw4CWXGztlkJjTp+pAFw082Noleis5vR9Xdq8QUEN9m69FWZUStnYEMsQ67DrrOJROQJtoSwnHL+nSCFGKuViyJw6OavRWYWjSfhPAs5mw5j3n3icbuO9lVLdLRP7xrBk6Gq0agDdo/6z4CSUrktpMBfBl3IVgEb4WtkNQpw7S04Xok/ZW5O9Szht719UVuhgbziZOncpkmjQ9X0A= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c19026f-cd66-4c48-e8c6-08d65164a09a X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2018 16:56:35.4621 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5379 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Send frames back on the same port for XDP_TX action. Since the frame buffers have been allocated by us, we can recycle them directly into the Rx buffer pool instead of requesting a confirmation frame upon transmission complete. Signed-off-by: Ioana Radulescu --- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 43 +++++++++++++++++++++++- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 ++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 1bdcd71..3dabee0 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -240,14 +240,50 @@ static void xdp_release_buf(struct dpaa2_eth_priv *priv, ch->xdp.drop_cnt = 0; } +static int xdp_enqueue(struct dpaa2_eth_priv *priv, struct dpaa2_fd *fd, + void *buf_start, u16 queue_id) +{ + struct dpaa2_eth_fq *fq; + struct dpaa2_faead *faead; + u32 ctrl, frc; + int i, err; + + /* Mark the egress frame hardware annotation area as valid */ + frc = dpaa2_fd_get_frc(fd); + dpaa2_fd_set_frc(fd, frc | DPAA2_FD_FRC_FAEADV); + dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_ASAL); + + /* Instruct hardware to release the FD buffer directly into + * the buffer pool once transmission is completed, instead of + * sending a Tx confirmation frame to us + */ + ctrl = DPAA2_FAEAD_A4V | DPAA2_FAEAD_A2V | DPAA2_FAEAD_EBDDV; + faead = dpaa2_get_faead(buf_start, false); + faead->ctrl = cpu_to_le32(ctrl); + faead->conf_fqid = 0; + + fq = &priv->fq[queue_id]; + for (i = 0; i < DPAA2_ETH_ENQUEUE_RETRIES; i++) { + err = dpaa2_io_service_enqueue_qd(fq->channel->dpio, + priv->tx_qdid, 0, + fq->tx_qdbin, fd); + if (err != -EBUSY) + break; + } + + return err; +} + static u32 run_xdp(struct dpaa2_eth_priv *priv, struct dpaa2_eth_channel *ch, + struct dpaa2_eth_fq *rx_fq, struct dpaa2_fd *fd, void *vaddr) { dma_addr_t addr = dpaa2_fd_get_addr(fd); struct bpf_prog *xdp_prog; struct xdp_buff xdp; u32 xdp_act = XDP_PASS; + int err; rcu_read_lock(); @@ -269,6 +305,11 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, switch (xdp_act) { case XDP_PASS: break; + case XDP_TX: + err = xdp_enqueue(priv, fd, vaddr, rx_fq->flowid); + if (err) + xdp_release_buf(priv, ch, addr); + break; default: bpf_warn_invalid_xdp_action(xdp_act); case XDP_ABORTED: @@ -317,7 +358,7 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv, percpu_extras = this_cpu_ptr(priv->percpu_extras); if (fd_format == dpaa2_fd_single) { - xdp_act = run_xdp(priv, ch, (struct dpaa2_fd *)fd, vaddr); + xdp_act = run_xdp(priv, ch, fq, (struct dpaa2_fd *)fd, vaddr); if (xdp_act != XDP_PASS) return; diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index 23cf9d9..5530a0e 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -139,7 +139,9 @@ struct dpaa2_faead { }; #define DPAA2_FAEAD_A2V 0x20000000 +#define DPAA2_FAEAD_A4V 0x08000000 #define DPAA2_FAEAD_UPDV 0x00001000 +#define DPAA2_FAEAD_EBDDV 0x00002000 #define DPAA2_FAEAD_UPD 0x00000010 /* Accessors for the hardware annotation fields that we use */