From patchwork Wed Feb 9 05:49:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Po Liu X-Patchwork-Id: 12739641 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45123C433EF for ; Wed, 9 Feb 2022 05:55:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231534AbiBIFzC (ORCPT ); Wed, 9 Feb 2022 00:55:02 -0500 Received: from gmail-smtp-in.l.google.com ([23.128.96.19]:56820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233103AbiBIFv7 (ORCPT ); Wed, 9 Feb 2022 00:51:59 -0500 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40055.outbound.protection.outlook.com [40.107.4.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C296FC0A8845; Tue, 8 Feb 2022 21:52:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sd6AyO7piBhp0/rpnw44asCEwQNzk0dl32iGtrkVM4LWUMY7TxNIP7n5ggMFBlahJE/SpecJx9noduy9qwCWplN2avjuGngvEZeij2MuxO0WsRWSP6gSeleIh2jl0Kdzl1C5toeyyxygoGU7ywxOE+JHkV6QRGtAv9PeAaNyE6ZHNT/RgM7DAN1hW6Tlr67k9BrAhiuQVQdSz4OKSJ7fCZAM0SGQ400lcy7w6+aA0eX1HHpJFV0RGeQ+tB6pHMEkVDF+dmSw9Zd+m0jC3/ZG0BUA7lngrOxo7lhycZRQUlAFPPpNMXdvV4CBEMWexjDjG+1QUTbzzvmpJyi0wZsHQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=PS2wYtU4KWqu5L1tmZcEyJTpBNImlXTaxR1TH15rUvI=; b=iJqTA1r9lecSmQTzN0oAUwyF8Cs22kbXTimuwmLCj49iAG/qGPkOYgsejt5LD5EUBFsPbv6Igw+CypmJCUjU10fZwuZGVyFhqg/p98eW+qBb4N3jRwfgvIkClL7erRcW0h1Riw+UQ3vQN2eKMEghyVQEiw086rk8bZ7zhHVlV7fmZTx813/Cr16mJ90I0L81qzoTwGsOIpjAfUwkQX9ytSqnLNHrUs9zaacIL5tLfi8F96sp7Lp3mFRtxVQFnHhDFnnL7y0c6YSKEzLd7eVLjxeRnS84RC0q5WLaevXT0aVZq7JWkmdXM7s6Ejfs9A1rs19f1LT48mW5FEVC68DLeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PS2wYtU4KWqu5L1tmZcEyJTpBNImlXTaxR1TH15rUvI=; b=gnrdGeqWzK+uSNia7xAM2MZw5DH8Ag/S5DQhe1wh0/k64pKQnrsVjQP0MaHNEHFSylfnf3Tk54BADxYrogdI0fvMKnEheHu59FtTg0UELIdK3iW9zmZzr0qGxkna+j6fq1bzNJa6WZNhNTWKU/cGJcGAHB+qm2wG70HAOKUr0vc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) by DB7PR04MB5002.eurprd04.prod.outlook.com (2603:10a6:10:19::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.19; Wed, 9 Feb 2022 05:50:26 +0000 Received: from PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5]) by PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5%5]) with mapi id 15.20.4951.018; Wed, 9 Feb 2022 05:50:26 +0000 From: Po Liu To: davem@davemloft.net, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, tim.gardner@canonical.com, kuba@kernel.org, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com Cc: xiaoliang.yang_1@nxp.com, Po Liu Subject: [v1,net-next 1/3] net:enetc: allocate CBD ring data memory using DMA coherent methods Date: Wed, 9 Feb 2022 13:49:27 +0800 Message-Id: <20220209054929.10266-1-po.liu@nxp.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: SI2P153CA0023.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::6) To PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 49d71912-8d88-40c8-8ba5-08d9eb9011f3 X-MS-TrafficTypeDiagnostic: DB7PR04MB5002:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3044; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f+c6vb+2VfWdN53jChpi8p0T1h81ypyNUd6CJprdesBwJ/D756R2ETKuT946WSqFJMTamjuyXQshomrOlEkBqXwF6A6QoxVSxE1KF+39gw6aiyRuS/K1V5AT1MwFXcLzPYt59V4vvocJgNkP1wzirp4Pp6MT7khWpy/Q5G2+DbaVdeDm/bqP5iTh/nGxL3slgbaS28+NYe2wnqUIchW9WZA3zYj5Wb6L8mtrDdzuMJvQCKMR9dNMmfDndsLjIbhdGWR7iKR73UuSpeZC7bYlIriYHOwcQe/tMR/B7WBFCxMFGtwbst62+eAJdXEdIqkJMfWByjp8Q5kc/iJXRtCyGK1JXpjxzSy22iIORxTigjqCOmuiWN+7LOxlcXrzUx//vPQ20bjNZTFGPY3nDpISVwdGlGpiUMCnNpgNdv7OK4/kjWZCCTDNgah9WovijRCzOFN+21h1cgwiubwKZNJ3XV/iEyIlNc591C+JKj0aX0Y9eqPFC35U1cg73csD4EkBvW94iajbnCvHOm0CFMlJuVVv+1L+FF6c+QCE8jDrBg2s6t62Ts+VluehFlxWo/moUqcp++ijIohF+D7gfGDA0OA2PsIdLK0ywE1iabYYdMzLh3iiYKfqIZnJNFk5bhdo6SBKR9inz0I8qc6e0pJT8h4pc2awYgCyMLpeHhKOyTCy6woXnptNyrmpiNvzWFFNdyEpgbulzDnAH1a/FXP5iujx7TqkfGzAy2kndy2Om8dtIvqhcsywPsoV19m22EcjTI5ZUHoCqYBcZtQPPhSqQ2TXISKpbhBd4jdoMPliclo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB7823.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(83380400001)(45080400002)(4326008)(44832011)(316002)(6636002)(5660300002)(6512007)(26005)(6486002)(966005)(86362001)(6506007)(2906002)(2616005)(186003)(1076003)(66476007)(8936002)(66556008)(508600001)(66946007)(38100700002)(38350700002)(8676002)(36756003)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7UsUyiK6XdOjyU7APAkgHCDfqMdai+upwfp8v/4kFD5bNoyaGiuZ16MWsDGO7heKj7Ft5WwyyyuUh2z4i+Qo4g9bkjdD05TzDvpH7I6DYj/coMgs2BCD6rt+w281eENCQbPGRM5QGgPxQenab7xYWMSJ9vdUItjbUslO3y7qZ50HFDqdqOP815aUAOXduRPwAsguG4R62LDGF6NJkO3SIbYZOpWbQpcP2TJHfS1bJmjcUht0bsoZWaZg2qJabyb83eGJGJ8CuU2L7NUFa6w+1L/jt80Xd4jXqB1727hbxeV4KDZwzL3aSTQXvUnjlyCG0e1xScM+3B+k6fIYlwLVZ8clc2/1AWIMpjR4n4tb8RvcJSg9fmRWlTFqkRX0GmrCRozkHIDS576cC1KI1PXQj4QsxHhOr7oBsyCnIkefqKnwyV1o+37Yo1n61+pVRDskJBsMKuDLLidxB/ec8WCvqACI9dHceHDXqKGRqcpuaDbsm0xB/fTqvHFXugkXizk/ST48n+lNX5aS0qwzuAmD2AdZJYMvu8iWCrq/Ea4Nu8/awothLsK/mnI/YplXClZ99DfC6H6FbjeykOVsPcEBT74lv+StTnV5XvE5Kc+s4azDNmXvfSlLfTuah86ExZvBG3g0ioDss6Gfmvg8Tbmlj4u1O53hv+G7AI0MlJXzR85IUHi1eHBxDZhsryyqWzWm2kuQsrNw2+F7EmxoVmedxoZqwth1biOzDz7SynaIjEQfG6Oei4bBhW3IETjlIipsbVbmThQt3nrXunaLqMTLpDs8YkBdOi4Iwx0ryi5luPZtaqz42KSk/p8QzUiPnQw2a/A3ZOzDpn/i9am1NB/1HcSihdiA0r6Wq9yzNqho1CekU+P/yOE9usXPtKklQoSFBmJFbKUTnc8xxazTkyzgf5cJQil//5Y0KeIwF6WMaHPRzqf95EiBaZxUaSSDD1MekCfuXTGIfq/LJzDiZDILAm0Qo2TpK4Fw1Gw8SyQqDM/p5LOuzl6z0Xd1LiKewp6G96E2p467/4MPa4BOpHryUkoH7MxZLUU9fz47jFZCZHYx6MMIs/5ayIz1X1rvnaoXlpmbWLg5I5RLoL17Vy4rwj34e8BBwR2acenlgjm3Z8ukY5haiXV49PqAh8rKpIItDhwZY+xDtbvELf9nxpgs/7F8R5tFqT4LXJdA2kOJ2Iv2YwjlSG/2VwaKKdgAldLJXSweQT3Sl/qRhQ0w9R7Ed6BUjDxiIE+U0T8tWzUHwPcVznYFgbHDtYlHD8GiYx9t/lJwCHfn2YVXukC217irQ45gscFiH7JgLamesCMKUNsmLSrgGs8Cur3vh+VNuRin2JWzHp8UV9GZRmHGRlUpdwIaQ5zvbZitKe9sRWY6aY1M0v3hWS46dOc5SuVnP3T3kJT058lr7q77oYg02q9hGeYeT5jj+aA6GosjLAztmxoVdhgu0zKLK4pt2fqkCVVMlVlZAf6qfdfYTDf2KmPYGDXi70RYFppk3dcS/OO1PK5ekgpiYF73kSjfrvZcmKQwQWjfMMHnX3/EZ3U+O8M8dLC5VYZncnsz1kxwmkNIuoY= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49d71912-8d88-40c8-8ba5-08d9eb9011f3 X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB7823.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2022 05:50:26.2220 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6J+MQjw9w/2VusAt/GfZ01bnQ2HBf18AB9W9QFGgl1vZ1ziYx24GharLacImHKq6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5002 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org To replace the dma_map_single() stream DMA mapping with DMA coherent method dma_alloc_coherent() which is more simple. dma_map_single() found by Tim Gardner not proper. Suggested by Claudiu Manoil and Jakub Kicinski to use dma_alloc_coherent(). Discussion at: https://lore.kernel.org/netdev/AM9PR04MB8397F300DECD3C44D2EBD07796BD9@AM9PR04MB8397.eurprd04.prod.outlook.com/t/ Fixes: 888ae5a3952ba ("net: enetc: add tc flower psfp offload driver") cc: Claudiu Manoil Reported-by: Tim Gardner Signed-off-by: Po Liu Reviewed-by: Claudiu Manoil --- .../net/ethernet/freescale/enetc/enetc_qos.c | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c index 3555c12edb45..d3d7172e0fcc 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c @@ -45,6 +45,7 @@ void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed) | pspeed); } +#define ENETC_QOS_ALIGN 64 static int enetc_setup_taprio(struct net_device *ndev, struct tc_taprio_qopt_offload *admin_conf) { @@ -52,10 +53,11 @@ static int enetc_setup_taprio(struct net_device *ndev, struct enetc_cbd cbd = {.cmd = 0}; struct tgs_gcl_conf *gcl_config; struct tgs_gcl_data *gcl_data; + dma_addr_t dma, dma_align; struct gce *gce; - dma_addr_t dma; u16 data_size; u16 gcl_len; + void *tmp; u32 tge; int err; int i; @@ -82,9 +84,16 @@ static int enetc_setup_taprio(struct net_device *ndev, gcl_config = &cbd.gcl_conf; data_size = struct_size(gcl_data, entry, gcl_len); - gcl_data = kzalloc(data_size, __GFP_DMA | GFP_KERNEL); - if (!gcl_data) + tmp = dma_alloc_coherent(&priv->si->pdev->dev, + data_size + ENETC_QOS_ALIGN, + &dma, GFP_KERNEL); + if (!tmp) { + dev_err(&priv->si->pdev->dev, + "DMA mapping of taprio gate list failed!\n"); return -ENOMEM; + } + dma_align = ALIGN(dma, ENETC_QOS_ALIGN); + gcl_data = (struct tgs_gcl_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); gce = (struct gce *)(gcl_data + 1); @@ -110,16 +119,8 @@ static int enetc_setup_taprio(struct net_device *ndev, cbd.length = cpu_to_le16(data_size); cbd.status_flags = 0; - dma = dma_map_single(&priv->si->pdev->dev, gcl_data, - data_size, DMA_TO_DEVICE); - if (dma_mapping_error(&priv->si->pdev->dev, dma)) { - netdev_err(priv->si->ndev, "DMA mapping failed!\n"); - kfree(gcl_data); - return -ENOMEM; - } - - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma)); + cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); cbd.cls = BDCR_CMD_PORT_GCL; cbd.status_flags = 0; @@ -132,8 +133,8 @@ static int enetc_setup_taprio(struct net_device *ndev, ENETC_QBV_PTGCR_OFFSET, tge & (~ENETC_QBV_TGE)); - dma_unmap_single(&priv->si->pdev->dev, dma, data_size, DMA_TO_DEVICE); - kfree(gcl_data); + dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, + tmp, dma); return err; } @@ -463,8 +464,9 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, struct enetc_cbd cbd = {.cmd = 0}; struct streamid_data *si_data; struct streamid_conf *si_conf; + dma_addr_t dma, dma_align; u16 data_size; - dma_addr_t dma; + void *tmp; int port; int err; @@ -485,21 +487,20 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, cbd.status_flags = 0; data_size = sizeof(struct streamid_data); - si_data = kzalloc(data_size, __GFP_DMA | GFP_KERNEL); - if (!si_data) + tmp = dma_alloc_coherent(&priv->si->pdev->dev, + data_size + ENETC_QOS_ALIGN, + &dma, GFP_KERNEL); + if (!tmp) { + dev_err(&priv->si->pdev->dev, + "DMA mapping of stream identify failed!\n"); return -ENOMEM; - cbd.length = cpu_to_le16(data_size); - - dma = dma_map_single(&priv->si->pdev->dev, si_data, - data_size, DMA_FROM_DEVICE); - if (dma_mapping_error(&priv->si->pdev->dev, dma)) { - netdev_err(priv->si->ndev, "DMA mapping failed!\n"); - err = -ENOMEM; - goto out; } + dma_align = ALIGN(dma, ENETC_QOS_ALIGN); + si_data = (struct streamid_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma)); + cbd.length = cpu_to_le16(data_size); + cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); eth_broadcast_addr(si_data->dmac); si_data->vid_vidm_tg = (ENETC_CBDR_SID_VID_MASK + ((0x3 << 14) | ENETC_CBDR_SID_VIDM)); @@ -539,8 +540,8 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, cbd.length = cpu_to_le16(data_size); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma)); + cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); /* VIDM default to be 1. * VID Match. If set (b1) then the VID must match, otherwise @@ -561,10 +562,8 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, err = enetc_send_cmd(priv->si, &cbd); out: - if (!dma_mapping_error(&priv->si->pdev->dev, dma)) - dma_unmap_single(&priv->si->pdev->dev, dma, data_size, DMA_FROM_DEVICE); - - kfree(si_data); + dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, + tmp, dma); return err; } @@ -633,8 +632,9 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, { struct enetc_cbd cbd = { .cmd = 2 }; struct sfi_counter_data *data_buf; - dma_addr_t dma; + dma_addr_t dma, dma_align; u16 data_size; + void *tmp; int err; cbd.index = cpu_to_le16((u16)index); @@ -643,19 +643,19 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, cbd.status_flags = 0; data_size = sizeof(struct sfi_counter_data); - data_buf = kzalloc(data_size, __GFP_DMA | GFP_KERNEL); - if (!data_buf) + tmp = dma_alloc_coherent(&priv->si->pdev->dev, + data_size + ENETC_QOS_ALIGN, + &dma, GFP_KERNEL); + if (!tmp) { + dev_err(&priv->si->pdev->dev, + "DMA mapping of stream counter failed!\n"); return -ENOMEM; - - dma = dma_map_single(&priv->si->pdev->dev, data_buf, - data_size, DMA_FROM_DEVICE); - if (dma_mapping_error(&priv->si->pdev->dev, dma)) { - netdev_err(priv->si->ndev, "DMA mapping failed!\n"); - err = -ENOMEM; - goto exit; } - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma)); + dma_align = ALIGN(dma, ENETC_QOS_ALIGN); + data_buf = (struct sfi_counter_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); + + cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); cbd.length = cpu_to_le16(data_size); @@ -684,7 +684,9 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, data_buf->flow_meter_dropl; exit: - kfree(data_buf); + dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, + tmp, dma); + return err; } @@ -723,9 +725,10 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, struct sgcl_conf *sgcl_config; struct sgcl_data *sgcl_data; struct sgce *sgce; - dma_addr_t dma; + dma_addr_t dma, dma_align; u16 data_size; int err, i; + void *tmp; u64 now; cbd.index = cpu_to_le16(sgi->index); @@ -772,24 +775,20 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, sgcl_config->acl_len = (sgi->num_entries - 1) & 0x3; data_size = struct_size(sgcl_data, sgcl, sgi->num_entries); - - sgcl_data = kzalloc(data_size, __GFP_DMA | GFP_KERNEL); - if (!sgcl_data) - return -ENOMEM; - - cbd.length = cpu_to_le16(data_size); - - dma = dma_map_single(&priv->si->pdev->dev, - sgcl_data, data_size, - DMA_FROM_DEVICE); - if (dma_mapping_error(&priv->si->pdev->dev, dma)) { - netdev_err(priv->si->ndev, "DMA mapping failed!\n"); - kfree(sgcl_data); + tmp = dma_alloc_coherent(&priv->si->pdev->dev, + data_size + ENETC_QOS_ALIGN, + &dma, GFP_KERNEL); + if (!tmp) { + dev_err(&priv->si->pdev->dev, + "DMA mapping of stream counter failed!\n"); return -ENOMEM; } + dma_align = ALIGN(dma, ENETC_QOS_ALIGN); + sgcl_data = (struct sgcl_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma)); + cbd.length = cpu_to_le16(data_size); + cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); sgce = &sgcl_data->sgcl[0]; @@ -844,7 +843,8 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, err = enetc_send_cmd(priv->si, &cbd); exit: - kfree(sgcl_data); + dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, + tmp, dma); return err; } From patchwork Wed Feb 9 05:49:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Po Liu X-Patchwork-Id: 12739640 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F03AC433F5 for ; Wed, 9 Feb 2022 05:55:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230500AbiBIFzA (ORCPT ); Wed, 9 Feb 2022 00:55:00 -0500 Received: from gmail-smtp-in.l.google.com ([23.128.96.19]:57216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234006AbiBIFwJ (ORCPT ); Wed, 9 Feb 2022 00:52:09 -0500 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2079.outbound.protection.outlook.com [40.107.21.79]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 894D9C0DE7DD; Tue, 8 Feb 2022 21:52:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S3VlJRZpItdnLjRB0fDNyvMkR59NXSifn+rfNeVgZJ9H1oUVOfPNmO4mQCOnAo13zjSXqYUcLKczzpedKUXXm2qHhu0oW2t7aTw1NaUaZVBEqk/H9DcuTCZw5yOmj94uI6SBdSm53v8h3i7um9mw76BfiOmlrBGnioIzCE2kAUuQ8fo0PjU9N/G/cCYuKLxV/ORmQ+VLIqMZGS2kshBtCDxH09W/Ax2vF/MsvXr3QvUhiYN3LlPGxyYukIWFYlD+mAdkn7/zL0SmfHay0fAu017uIYf9HoDTh14K4NbFekn2wj3QlQdHtJnKaCt474rbt5BAYbR7GItnf4+m7oAE7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=M/42pygzw0MFmsY+dzOSKXxb2KF6S1/2jIhVpfijcaw=; b=gT29pNhxqt2/h1Kvxthqnt+HGC8Nep1gZWCQ+8P7hX+m7CTJiO9lFXeP42E9NISsiQbdbjQKOUAqLhBbJpMkm9lP3dIHdajqKuxfoBuQhLpuIptpxMRvguBoJ4FCM+K+EHdExNPDJywyMdUu2M096DJTl53zihOPIngyaqhsi/E0PVyEp47suawktrRte0eVuuXElA+j5mcT0mY1IPANDRBmG/saFsEyXYh9mwFb+VsYWMG1ZoasmWKsZwzQWHVfLcrcxnS+K06bqa9bLyk/RpYfhCFzdiRTnlww6nSvgs7d6E5WIm/9GTLXP8o+CqqBsLojggAB8mKraMnQDtng5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M/42pygzw0MFmsY+dzOSKXxb2KF6S1/2jIhVpfijcaw=; b=M3mhl7HeQaLuDViEouCBVtpQNxiJEF5tUYWnwXDC1Bxo9RRfIZDZUoauAc/Q5NCevFYSWL4fp/YJtIlD1ondLiLRaruwGY+/USWRxqTxkMIvXK5SxudiDPMXUB20rL6zDsa5c4Pwfmho5KtSc77zJ2kMfY2LjGnXR+M6qFoKRHs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) by DB7PR04MB5002.eurprd04.prod.outlook.com (2603:10a6:10:19::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.19; Wed, 9 Feb 2022 05:50:29 +0000 Received: from PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5]) by PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5%5]) with mapi id 15.20.4951.018; Wed, 9 Feb 2022 05:50:29 +0000 From: Po Liu To: davem@davemloft.net, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, tim.gardner@canonical.com, kuba@kernel.org, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com Cc: xiaoliang.yang_1@nxp.com, Po Liu Subject: [v1,net-next 2/3] net:enetc: command BD ring data memory alloc as one function alone Date: Wed, 9 Feb 2022 13:49:28 +0800 Message-Id: <20220209054929.10266-2-po.liu@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220209054929.10266-1-po.liu@nxp.com> References: <20220209054929.10266-1-po.liu@nxp.com> X-ClientProxiedBy: SI2P153CA0023.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::6) To PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 09da3e5b-9813-48e4-40b6-08d9eb9013f4 X-MS-TrafficTypeDiagnostic: DB7PR04MB5002:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oXc+bJG1DmOTU/BnBmVm3N/IuLhaKu3QZ9RMpae9WSvRBhq6TF3mJ/98dSYgoUPyWgoRl3AP9yrp9xobIcGph9b3W9FmKIACQj3slX7VvFl1M9X/4hGqJg02eq5F9IP/hwcG5giQ4fQBYmyqZtxN/RpXDdzLvO6Cmz5zxNhFDey2vhkXzq3mRroDLKBWHcc6i99K6XRsnEkvcdr2q3fW+WiZmDSSXvSU+EH2XgDb+9o2KyQTU5Q9BROyDlYuevLjMzskhohqA54hNYtZ4BHPVPg04D+3sIEe34Jrg7RVOcLzP+sj1Qbb5fx5W9liIIaNtkPqnoqxVmBaMvosohwEIALCsXPhDQW76akyP9sS150iUNBHWpVgz9fNlhbZCs32kqrkxLQh41qvBqID2RclAv+Gsn73jnnPNgDSfvaAkH1OkL9Pvoq5Gm3/3u/vJn7zmU1JQzGrAYJnNMxROvtEQnHfXWRZ/Tlx4yDN19Re0iddEamKGn6SwemcMZOUvRkazpD6lG8T91gnkGLHDcugcI9ODgbqZSBkRni9JitqZ1VyA/NjDxs7lYpxe6Vz2wkmyxofdYmWW+fG7jEU4LeIeAgut2olB034VlptV/PC0Zw83ZzYd6ZKfRmlm/qfTs5hM4FDkuca9IKTsdhEhQPKaEAKTIJFX4YVaFlLkx9BpTCaYdWOPw0iNCcvz3eICIn3aM5gZ0syXIIT+4cXrc3LHg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB7823.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(83380400001)(4326008)(44832011)(316002)(6636002)(5660300002)(6512007)(26005)(6486002)(86362001)(6506007)(2906002)(2616005)(186003)(1076003)(66476007)(8936002)(66556008)(508600001)(66946007)(38100700002)(38350700002)(8676002)(36756003)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5nSih9x/Y+KLjrt2ExPb6l8TnMT9uBId9aqSWcJoBYPAT/v78KwDV4NRCcj6l4X2thv2MVlRSfIrRDR0ciJCUSUVD8Tj5/jxgKpXP98jomXkXTvkfXcMGjQzFJm9gf/Mooj8H2W6T4wDLzI0MuYgDhCxSSL75VOUV69nnsCn1k3gKJ2SPUkVbzlS/5QGfIigrrE1KqAvv36rr631xryMVcHADnjFOlzl6RQGLmDgGrbZVffA33o9NEA6UiHveqRLD0wCkgdLthynpv9MD3wjpCh0pW/LKHMjtGroPhILT8cPP822G+llQlpItqIWalblQCJIcsgIIz9o5aMrp12OF/TMCuzJ78uwYXJ2m1UZL3zHWfowYxDa07dbyYVbwRhZl3qBQgd58x3Swy8xdGZoJmGoRdUFK6jNq4ftIfjtIZ29RjrIUryDp8q5YzDcDnLc4OuIrUxk/FoSEWGc2LOLviM/maYfE1fdFLiUR5iDq31vAcG9/Of5CE3UgoCdvra/DVtUjDQUN4DAcjwwEngY6E8+r4PjCQd487Eed0zy6f0ESLbqvT03MdAuX2bezRqYMDEt2Uo6IGMlphemT20hxafO2y6pG7hutyQIFM+e4s8HYhb1dwNlMtW3etzPWUtram8DDjCnphsgnB2IjCGdzCiElKMTeGRLCA/+YoOX7SBG/MLR+lV4QTxc9nC6kim+fEjnB3AKA4/gtYfRFjtJmPPgpvXY60uKjwdGHy8oxKo0jVtmVLBHb17qazu8cRrQNIy4JSMY/uQxsi87jEodb2AII7lFVJhrXmDLJ+thz0e5KgKcgVk3TOTApQe0hddViW4Sz02jTm6oOy9c6dGzX+nOL9IVtBJWd9I3WW3csi94Q35nDa58ZAy82c2VKXMGL+6CyVzLk8wG1GRiEilqGsuje12VBt4KAxlrHkVKdLjNrL6U3rprzTFojeDoq7AArgoQME9OdKT9FiMGJq/mAMMgzI6ArbPssKoulzSVBlsBwga/tGP8DCDk5H5mRrCowQZo2q/dYEm0tbdPQlV6ZYKPsRJBqx4GxexcULhtuN4mUFmsQMS4WJJagTNfGKkYwFgP7wuPXuqlyxV4S/MPbjgn0yDSIs3UVtHeWIx8oGFhKkdrRvRimkHgFKy/+xq5fZtKyjioodH/m3HY7H1Ib15VODcLYrzLtasptfyYcPhTTKn8BFpkdcFlkLybNQNRPP9Z8DQnxNCMSF9RvRwyUCzm+/JSgpg4fnF/J2Q26g157LSVpZuWFmY/ikaOPB3af0X2m3rnbnIUInv33icsIKRIy2e07vmPDh+l5FEQS8gC4xwFud6DT3zmJqEKZcsBLS9lGsuOwDYU9FWhDOuGyvdCnXURePIGqVO15we/11KWmaF6ROf72nmP9RX0YyguG/DvWhd+NbdrS9x2P5uIX2jdFo0+UZXtTQOj/2vP50xc8mPnma856kfSlAUYgIESg6asJADQtItW6SUjmGOTx2kysSSQz9lqmVRVdajifxnZ537cfrTkRhrqiVhqTkKG4MNC/4/mRD438nQp75i5wnYvXDN1oSMkZXP9IuwFAdQ= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09da3e5b-9813-48e4-40b6-08d9eb9013f4 X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB7823.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2022 05:50:29.4259 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: k8ST0t4TQnP0Cboya7VZS+6tZZH5hHgsShjnCKtNRJ4YHsEtgkH7IbVqnm9UTW/p X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5002 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Separate the CBDR data memory alloc standalone. It is convenient for other part loading, for example the ENETC QOS part. Reported-and-suggested-by: Vladimir Oltean Signed-off-by: Po Liu Reviewed-by: Claudiu Manoil --- drivers/net/ethernet/freescale/enetc/enetc.h | 38 +++++++++++++++++ .../net/ethernet/freescale/enetc/enetc_cbdr.c | 41 +++++-------------- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index fb39e406b7fc..68d806dc3701 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -18,6 +18,8 @@ #define ENETC_MAX_MTU (ENETC_MAC_MAXFRM_SIZE - \ (ETH_FCS_LEN + ETH_HLEN + VLAN_HLEN)) +#define ENETC_CBD_DATA_MEM_ALIGN 64 + struct enetc_tx_swbd { union { struct sk_buff *skb; @@ -415,6 +417,42 @@ int enetc_get_rss_table(struct enetc_si *si, u32 *table, int count); int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count); int enetc_send_cmd(struct enetc_si *si, struct enetc_cbd *cbd); +static inline void *enetc_cbd_alloc_data_mem(struct enetc_si *si, + struct enetc_cbd *cbd, + int size, dma_addr_t *dma, + void **data_align) +{ + struct enetc_cbdr *ring = &si->cbd_ring; + dma_addr_t dma_align; + void *data; + + data = dma_alloc_coherent(ring->dma_dev, + size + ENETC_CBD_DATA_MEM_ALIGN, + dma, GFP_KERNEL); + if (!data) { + dev_err(ring->dma_dev, "CBD alloc data memory failed!\n"); + return NULL; + } + + dma_align = ALIGN(*dma, ENETC_CBD_DATA_MEM_ALIGN); + *data_align = PTR_ALIGN(data, ENETC_CBD_DATA_MEM_ALIGN); + + cbd->addr[0] = cpu_to_le32(lower_32_bits(dma_align)); + cbd->addr[1] = cpu_to_le32(upper_32_bits(dma_align)); + cbd->length = cpu_to_le16(size); + + return data; +} + +static inline void enetc_cbd_free_data_mem(struct enetc_si *si, int size, + void *data, dma_addr_t *dma) +{ + struct enetc_cbdr *ring = &si->cbd_ring; + + dma_free_coherent(ring->dma_dev, size + ENETC_CBD_DATA_MEM_ALIGN, + data, *dma); +} + #ifdef CONFIG_FSL_ENETC_QOS int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data); void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c index 073e56dcca4e..af68dc46a795 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c @@ -166,70 +166,55 @@ int enetc_set_mac_flt_entry(struct enetc_si *si, int index, return enetc_send_cmd(si, &cbd); } -#define RFSE_ALIGN 64 /* Set entry in RFS table */ int enetc_set_fs_entry(struct enetc_si *si, struct enetc_cmd_rfse *rfse, int index) { struct enetc_cbdr *ring = &si->cbd_ring; struct enetc_cbd cbd = {.cmd = 0}; - dma_addr_t dma, dma_align; void *tmp, *tmp_align; + dma_addr_t dma; int err; /* fill up the "set" descriptor */ cbd.cmd = 0; cbd.cls = 4; cbd.index = cpu_to_le16(index); - cbd.length = cpu_to_le16(sizeof(*rfse)); cbd.opt[3] = cpu_to_le32(0); /* SI */ - tmp = dma_alloc_coherent(ring->dma_dev, sizeof(*rfse) + RFSE_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(ring->dma_dev, "DMA mapping of RFS entry failed!\n"); + tmp = enetc_cbd_alloc_data_mem(si, &cbd, sizeof(*rfse), + &dma, &tmp_align); + if (!tmp) return -ENOMEM; - } - dma_align = ALIGN(dma, RFSE_ALIGN); - tmp_align = PTR_ALIGN(tmp, RFSE_ALIGN); memcpy(tmp_align, rfse, sizeof(*rfse)); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); - err = enetc_send_cmd(si, &cbd); if (err) dev_err(ring->dma_dev, "FS entry add failed (%d)!", err); - dma_free_coherent(ring->dma_dev, sizeof(*rfse) + RFSE_ALIGN, - tmp, dma); + enetc_cbd_free_data_mem(si, sizeof(*rfse), tmp, &dma); return err; } -#define RSSE_ALIGN 64 static int enetc_cmd_rss_table(struct enetc_si *si, u32 *table, int count, bool read) { struct enetc_cbdr *ring = &si->cbd_ring; struct enetc_cbd cbd = {.cmd = 0}; - dma_addr_t dma, dma_align; u8 *tmp, *tmp_align; + dma_addr_t dma; int err, i; - if (count < RSSE_ALIGN) + if (count < ENETC_CBD_DATA_MEM_ALIGN) /* HW only takes in a full 64 entry table */ return -EINVAL; - tmp = dma_alloc_coherent(ring->dma_dev, count + RSSE_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(ring->dma_dev, "DMA mapping of RSS table failed!\n"); + tmp = enetc_cbd_alloc_data_mem(si, &cbd, count, + &dma, (void *)&tmp_align); + if (!tmp) return -ENOMEM; - } - dma_align = ALIGN(dma, RSSE_ALIGN); - tmp_align = PTR_ALIGN(tmp, RSSE_ALIGN); if (!read) for (i = 0; i < count; i++) @@ -238,10 +223,6 @@ static int enetc_cmd_rss_table(struct enetc_si *si, u32 *table, int count, /* fill up the descriptor */ cbd.cmd = read ? 2 : 1; cbd.cls = 3; - cbd.length = cpu_to_le16(count); - - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); err = enetc_send_cmd(si, &cbd); if (err) @@ -251,7 +232,7 @@ static int enetc_cmd_rss_table(struct enetc_si *si, u32 *table, int count, for (i = 0; i < count; i++) table[i] = tmp_align[i]; - dma_free_coherent(ring->dma_dev, count + RSSE_ALIGN, tmp, dma); + enetc_cbd_free_data_mem(si, count, tmp, &dma); return err; } From patchwork Wed Feb 9 05:49:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Po Liu X-Patchwork-Id: 12739642 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C50BC433EF for ; Wed, 9 Feb 2022 05:55:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231946AbiBIFyq (ORCPT ); Wed, 9 Feb 2022 00:54:46 -0500 Received: from gmail-smtp-in.l.google.com ([23.128.96.19]:57318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234279AbiBIFwM (ORCPT ); Wed, 9 Feb 2022 00:52:12 -0500 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60056.outbound.protection.outlook.com [40.107.6.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B626C0DE7DA; Tue, 8 Feb 2022 21:52:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hbTgMHfFGvSIbYcPEt2neJac69elVRYNXt4yn70GPlG7c5Oy4LJTX5EHXnl+7urEaOfbgEFoFtGJvdlU2upCNI4tEKnorSTPZlVhiU6cNjhYiFSb/BunK9ODVKYTgCRr7b6y7WjzJyCUlC+Upj3TbC/l+ww1XfDnvXObWjwX7zaxZrykIzY7LXPtq10y+wRpd4U+WLvNFhZ4q8C0xm8Rrj2QVklQY+GAkhtCJApuZ6uEsbQWX68lgFQNn/lZ/ahPNwDEqMayh+YJ1aaW8Oy1ElY8XRUn9JchUfZnCVqlpTMmPUQPEE/2F57ucrgMuS+i+xXmq/DNCoEgj+NpEEjSMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=88F9u7kzdYGAVeqXRt4Y3yUCU9dzJ8EmNJtpZpJ2uDI=; b=A1SirIQ8J6DRtEOUb9n3yJqlaucta+D1d6agN1mdHcpYJNc8jTWwA4RTuS+DceNHgeViOGEKSceQ2kZSa2pSGHXlyTaFjp2LdpZ3uqT/Od2ZK8Hnz6xiPnCYPab421iEpLJPO0dye+Sxeb+ybHTbKIM/OVGFxQZVi6R2Ex4fjqKUT9rCPdgoNBlKT8St7vAe0bQfZPJUVzJ7TaI7rJ1ix/nwmTb4X1vVHOkuSuQXs5CUywK8OQOaZSoVZ8VLknxvVRLPmfKaAxs7y7yt2D6BxaXmr1ZbJ+30CXtpaw3zp9ndVMAksM2v3rhDJjx+tjXpUXV5JEmBu8k1vO3Ru8FxvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=88F9u7kzdYGAVeqXRt4Y3yUCU9dzJ8EmNJtpZpJ2uDI=; b=lbFmRV7xgqH1aeM/Li3shC+agpFq3hLr3TC0iPLu+jY+jPzD7rU3TC5ITyu5oVU5iqyV1VSNgLCi+mEsBduW/G359kwFyduteJGEvP+ty91OH7KWbkg2BzHvJl2sMLd6q9z5zxZo6x5j3DRMn/r41b8CM+jZx6gNls0P7XhC1vM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) by DB7PR04MB5002.eurprd04.prod.outlook.com (2603:10a6:10:19::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.19; Wed, 9 Feb 2022 05:50:32 +0000 Received: from PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5]) by PA4PR04MB7823.eurprd04.prod.outlook.com ([fe80::653b:a7f3:f5c9:b7a5%5]) with mapi id 15.20.4951.018; Wed, 9 Feb 2022 05:50:32 +0000 From: Po Liu To: davem@davemloft.net, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, tim.gardner@canonical.com, kuba@kernel.org, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com Cc: xiaoliang.yang_1@nxp.com, Po Liu Subject: [v1,net-next 3/3] net:enetc: enetc qos using the CBDR dma alloc function Date: Wed, 9 Feb 2022 13:49:29 +0800 Message-Id: <20220209054929.10266-3-po.liu@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220209054929.10266-1-po.liu@nxp.com> References: <20220209054929.10266-1-po.liu@nxp.com> X-ClientProxiedBy: SI2P153CA0023.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::6) To PA4PR04MB7823.eurprd04.prod.outlook.com (2603:10a6:102:c1::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a4fdcca1-942c-40d2-450e-08d9eb9015dd X-MS-TrafficTypeDiagnostic: DB7PR04MB5002:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2803; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wzCYO7Eo9XiJpl9hZGBDU0gch1J6QowJz/Xd/d0C2Mv/ZVKyeKu/SwaLIBzIkPb3C5U1zBh9JqO1Z6raIsfFjxJZsBVHUB98ATQrw76dxPty/h2Kdp23uM5wP62ElZbgzRfXBiVHnRCPRD3Yz9gaxudpLescQYQJ1RHqgHtE3iPsZt3/hRo7+s79rTlpFf9kY6ixF4pU0ntiDsIqQbCGlgTPgeEPjCqmHFE/LzUi8ciBRuWxyvZcWbHXzB6JzxFqrQBVM9koKr0nh5ixAozU85IDLI+f2H5J/cTYxCqb6KxKBzPH9Rvu/rITo1JVQcZVPNrCMtSZRdJmThx1CWWmJwV9I36wDexM2VfVcu6h+5LfU3NNKD5uAPt0+jLhCd0NRelWp4paNRUkSDW9bno+es2RR3g+wZ+8nfXrPGR1G0bZFViMisPjWOz98uHKpt/5D21N0nijptWXyRvY9h4fnbMhLQLPLuUTH+5QQi//zGZTQmMlTfHNQ6wplKWr3+P2tXm/estHEePO1s1nvV6ZTmj3Od4TV+5AM1naAlqCVXbTotTFhvMqims9FdKNu2w5Dxt2FPZRLeom+3qcBwAcGhdIGDuW8Qrl1X7qnaENUw3o7Byrxe/SSZnmME672HewahAwiJw7+usOx2gtEjCpHVhqTy9zwu8AUf9lTXJnnjVbkmAczITM4UjrYU13416neXkfiMMso17nxSh8Ea8bgA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB7823.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(83380400001)(4326008)(44832011)(316002)(6636002)(5660300002)(6512007)(26005)(6486002)(6666004)(86362001)(6506007)(2906002)(2616005)(186003)(1076003)(66476007)(8936002)(66556008)(508600001)(66946007)(38100700002)(38350700002)(8676002)(36756003)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NMGOjCkCHieJ2nLah1e/0s2dl/Kb6dvdkP6vn9yKT3gCgG1/tZTlBuFFElkQNOLwFhzcEz/w/wHIFFBbjK83TC7B9lOwGq4uxQR9pP6FiAjRh/JlJvt0IMy7maYGmePzOfjsRK7eO+Fs5hAD7TXKiI5AhzXIi9SRzUi2Bl0XOLMs5126V3I6E/NX6LIhkn5dbAGZntv2+5fZQSLrZN0T2fJbpqaYD3WG0uEn0CMTjt8rVPuPOuXNwysR/AoWt3uiAtKIyzwcj4P/8IP3wFPNjZi6aSY/9gjbeI09+lUbblI7ruzeufCNiRUGfx+ZehcY9qb7IAu2wCeEOW6+BEzVgR0FMGgRU96LY1ASrw1+JmcptiYnslQyAB+N1JqeLc5G8xBMWjE4ZDJhRT2QhHVfQvt+MJ9CjGMnvPPVGmzVuUZzBBB7yehyQDHXQW6WHqUoqe3bkX/e6gEO4DiRQTW1dsFGk8l0rT8vDhxeN2GWe8pelq5Dq4hemr+p1bZYhLA3JO64dISyH4AOnkAn++wIRO7kXuSl/vhQxrEb1GdN1V7LoxCCzb3hv/HRP1S/pQ2YTyEVAO1iX0wd9vYmEaPLUJ9OTevnKswDKn+waMOhveev9SwbB60g9x8Ck0a7eOyoVnOK4UzTWHJ2DYnRFqNlr++tekvbGVWbcD3d2FY45HmxwBQf8EjRHXX3QyNFx0Tut+8k6DRAOyCB9b9p53uOd9h5KqQyiYl+ybkdhoZ62PROeuuHRJF6hoyCe8g4h9AJSJLya8B/Aom/YZv2iAc7K+6iAUXirDPUBzHItHpR2mPfT73hTc6palKY7ilzYTOM9cK8aztvw7aMjOebFlfqp0FQPGb8zzMFaGj6g0N1thJeMMnJ/QgDgNJydE+jiOJu4GyGPCAFHt1TcginMHLFHAa1C8xw6+BUeZT/VSTjqXxxS1IU9ibn5nJnTaZgrBKxhYIHpCq8zyJZkh1prZ/Ft+mgAIcjY3C14NJPyMnjFI4k7lTD0Zt6Hrw/J/jFjNwuQgHF54E4nMcke3BFE69xJpnUTHbzQYd71IQmVqGIu/btvkB+qB3Ip6aegNB3c6B3H0d5pp6CAg62LFDCye0aP/O7MP0SJUqYR6uTuxWihp2f9PXfQ6ywuKi5dQQ/D+GayjOnadAErXErU7iVqnif49iWbCvQeD2yw8IcCzsDtCBcAK3dMo0ezHAkfqWZF2V70X2R06zwIA8dEg1JjGq3+1bsh9CD9czNVe4sZf6MWTBwGqPtATBnFIIdRtqiSyhb5RCaey3oY/FKnc9I2IkIja69A3N14rN2sydJeRaiph7w95Ccdckvf+LHPZooKM3XKoLDyFapoNlpstvdMhuM3W5nNW9vLnrpPchIv5pq8SqWrg6dQ4ohmS3v+f8Q6I4l/67r5tcu6dyWKDP95rQz5QRMgdymuLpnfgNfIuELsc0Cie9FTbvGz8Y4r2/9y0G5eyQYIVsTQ4ysdg7edYgUHlCKQlR3catORwE7VcrY3yv1jrtd3w4ns1uySZAwZoWkWjwXCMAdg0rCJ9behCzlGJ12pC2D3FSJvrtxAsUgX2I= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4fdcca1-942c-40d2-450e-08d9eb9015dd X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB7823.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2022 05:50:32.6307 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UGHPI5WdpkJSOIPfWW37Xjtw6fuv1I7DhnKtbDKrHTb4K0t1848NoaeBIVW0RS9I X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5002 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Now we can use the enetc_cbd_alloc_data_mem() to replace complicated DMA data alloc method and CBDR memory basic seting. Signed-off-by: Po Liu Reviewed-by: Claudiu Manoil --- .../net/ethernet/freescale/enetc/enetc_qos.c | 91 +++++-------------- 1 file changed, 21 insertions(+), 70 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c index d3d7172e0fcc..147c2457292f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c @@ -45,7 +45,6 @@ void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed) | pspeed); } -#define ENETC_QOS_ALIGN 64 static int enetc_setup_taprio(struct net_device *ndev, struct tc_taprio_qopt_offload *admin_conf) { @@ -53,7 +52,7 @@ static int enetc_setup_taprio(struct net_device *ndev, struct enetc_cbd cbd = {.cmd = 0}; struct tgs_gcl_conf *gcl_config; struct tgs_gcl_data *gcl_data; - dma_addr_t dma, dma_align; + dma_addr_t dma; struct gce *gce; u16 data_size; u16 gcl_len; @@ -84,16 +83,10 @@ static int enetc_setup_taprio(struct net_device *ndev, gcl_config = &cbd.gcl_conf; data_size = struct_size(gcl_data, entry, gcl_len); - tmp = dma_alloc_coherent(&priv->si->pdev->dev, - data_size + ENETC_QOS_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(&priv->si->pdev->dev, - "DMA mapping of taprio gate list failed!\n"); + tmp = enetc_cbd_alloc_data_mem(priv->si, &cbd, data_size, + &dma, (void *)&gcl_data); + if (!tmp) return -ENOMEM; - } - dma_align = ALIGN(dma, ENETC_QOS_ALIGN); - gcl_data = (struct tgs_gcl_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); gce = (struct gce *)(gcl_data + 1); @@ -116,11 +109,8 @@ static int enetc_setup_taprio(struct net_device *ndev, temp_gce->period = cpu_to_le32(temp_entry->interval); } - cbd.length = cpu_to_le16(data_size); cbd.status_flags = 0; - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); cbd.cls = BDCR_CMD_PORT_GCL; cbd.status_flags = 0; @@ -133,8 +123,7 @@ static int enetc_setup_taprio(struct net_device *ndev, ENETC_QBV_PTGCR_OFFSET, tge & (~ENETC_QBV_TGE)); - dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, - tmp, dma); + enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma); return err; } @@ -464,7 +453,7 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, struct enetc_cbd cbd = {.cmd = 0}; struct streamid_data *si_data; struct streamid_conf *si_conf; - dma_addr_t dma, dma_align; + dma_addr_t dma; u16 data_size; void *tmp; int port; @@ -487,20 +476,11 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, cbd.status_flags = 0; data_size = sizeof(struct streamid_data); - tmp = dma_alloc_coherent(&priv->si->pdev->dev, - data_size + ENETC_QOS_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(&priv->si->pdev->dev, - "DMA mapping of stream identify failed!\n"); + tmp = enetc_cbd_alloc_data_mem(priv->si, &cbd, data_size, + &dma, (void *)&si_data); + if (!tmp) return -ENOMEM; - } - dma_align = ALIGN(dma, ENETC_QOS_ALIGN); - si_data = (struct streamid_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); - cbd.length = cpu_to_le16(data_size); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); eth_broadcast_addr(si_data->dmac); si_data->vid_vidm_tg = (ENETC_CBDR_SID_VID_MASK + ((0x3 << 14) | ENETC_CBDR_SID_VIDM)); @@ -538,11 +518,6 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, memset(si_data, 0, data_size); - cbd.length = cpu_to_le16(data_size); - - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); - /* VIDM default to be 1. * VID Match. If set (b1) then the VID must match, otherwise * any VID is considered a match. VIDM setting is only used @@ -562,8 +537,7 @@ static int enetc_streamid_hw_set(struct enetc_ndev_priv *priv, err = enetc_send_cmd(priv->si, &cbd); out: - dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, - tmp, dma); + enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma); return err; } @@ -632,7 +606,7 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, { struct enetc_cbd cbd = { .cmd = 2 }; struct sfi_counter_data *data_buf; - dma_addr_t dma, dma_align; + dma_addr_t dma; u16 data_size; void *tmp; int err; @@ -643,21 +617,11 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, cbd.status_flags = 0; data_size = sizeof(struct sfi_counter_data); - tmp = dma_alloc_coherent(&priv->si->pdev->dev, - data_size + ENETC_QOS_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(&priv->si->pdev->dev, - "DMA mapping of stream counter failed!\n"); - return -ENOMEM; - } - dma_align = ALIGN(dma, ENETC_QOS_ALIGN); - data_buf = (struct sfi_counter_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); - - cbd.length = cpu_to_le16(data_size); + tmp = enetc_cbd_alloc_data_mem(priv->si, &cbd, data_size, + &dma, (void *)&data_buf); + if (!tmp) + return -ENOMEM; err = enetc_send_cmd(priv->si, &cbd); if (err) @@ -684,8 +648,7 @@ static int enetc_streamcounter_hw_get(struct enetc_ndev_priv *priv, data_buf->flow_meter_dropl; exit: - dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, - tmp, dma); + enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma); return err; } @@ -725,7 +688,7 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, struct sgcl_conf *sgcl_config; struct sgcl_data *sgcl_data; struct sgce *sgce; - dma_addr_t dma, dma_align; + dma_addr_t dma; u16 data_size; int err, i; void *tmp; @@ -775,20 +738,10 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, sgcl_config->acl_len = (sgi->num_entries - 1) & 0x3; data_size = struct_size(sgcl_data, sgcl, sgi->num_entries); - tmp = dma_alloc_coherent(&priv->si->pdev->dev, - data_size + ENETC_QOS_ALIGN, - &dma, GFP_KERNEL); - if (!tmp) { - dev_err(&priv->si->pdev->dev, - "DMA mapping of stream counter failed!\n"); + tmp = enetc_cbd_alloc_data_mem(priv->si, &cbd, data_size, + &dma, (void *)&sgcl_data); + if (!tmp) return -ENOMEM; - } - dma_align = ALIGN(dma, ENETC_QOS_ALIGN); - sgcl_data = (struct sgcl_data *)PTR_ALIGN(tmp, ENETC_QOS_ALIGN); - - cbd.length = cpu_to_le16(data_size); - cbd.addr[0] = cpu_to_le32(lower_32_bits(dma_align)); - cbd.addr[1] = cpu_to_le32(upper_32_bits(dma_align)); sgce = &sgcl_data->sgcl[0]; @@ -843,9 +796,7 @@ static int enetc_streamgate_hw_set(struct enetc_ndev_priv *priv, err = enetc_send_cmd(priv->si, &cbd); exit: - dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN, - tmp, dma); - + enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma); return err; }