{"id":2175610,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175610/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20251218-dma_prep_config-v2-1-c07079836128@nxp.com>","date":"2025-12-18T15:56:21","name":"[v2,1/8] dmaengine: Add API to combine configuration and preparation (sg and single)","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"4acb9269cb793012d1a4752d28120079d72a2a1f","submitter":{"id":68011,"url":"http://patchwork.ozlabs.org/api/1.0/people/68011/?format=json","name":"Frank Li","email":"Frank.Li@nxp.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20251218-dma_prep_config-v2-1-c07079836128@nxp.com/mbox/","series":[{"id":485872,"url":"http://patchwork.ozlabs.org/api/1.0/series/485872/?format=json","date":"2025-12-18T15:56:20","name":"dmaengine: Add new API to combine onfiguration and descriptor preparation","version":2,"mbox":"http://patchwork.ozlabs.org/series/485872/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2175610/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-43311-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=Q9OqZuSG;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-43311-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"Q9OqZuSG\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.66.11","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dXFhb0JX4z1y2F\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 19 Dec 2025 02:58:55 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 4AD67306F4A0\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 15:56:47 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id A857035CBA0;\n\tThu, 18 Dec 2025 15:56:46 +0000 (UTC)","from DUZPR83CU001.outbound.protection.outlook.com\n (mail-northeuropeazon11012011.outbound.protection.outlook.com [52.101.66.11])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 2AAA535CBA9;\n\tThu, 18 Dec 2025 15:56:43 +0000 (UTC)","from DU2PR04MB8951.eurprd04.prod.outlook.com (2603:10a6:10:2e2::22)\n by VI1PR04MB7037.eurprd04.prod.outlook.com (2603:10a6:800:125::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.7; Thu, 18 Dec\n 2025 15:56:41 +0000","from DU2PR04MB8951.eurprd04.prod.outlook.com\n ([fe80::753c:468d:266:196]) by DU2PR04MB8951.eurprd04.prod.outlook.com\n ([fe80::753c:468d:266:196%4]) with mapi id 15.20.9434.001; Thu, 18 Dec 2025\n 15:56:41 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1766073406; cv=fail;\n b=E0QR02kOrqpM2zsY8rmtGE8EZTS4Fcqn3BWK8HhXA6PKAARlFGWQqtUILPOQlBZH67ACeNsg73HhfeBwdrYZve9CQpX+B553qpVoOByx8ZbHk4ZeolvzLzL3Mrt1VaOLf2YN+7K9zG56wulEq51dafkux8Q7JtaOHVvWnqlL4Ho=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=AkSQcrrcm02MQsp2PWymGgwnaIeIjsa3vT97BW48CmoDqkyQTtqp8WJGyA7q6itRgQxQBiWb6WNtDwgCBAKnyPySLUe2yJLABztq+69kB3mJxBvPMfZeQrbNnERueg10nLLR2oVXN/qVY+PLbINaU+EUgQPN+cFoKj78lCl02W2KIwCnDT7OwSW9u9FXAz3ltRP1yLn9LNTCJPGG6cWHv8w+e60QFVWCmuV+ZrQh1l8ggnJH3RGvgVre4ARmFNOW2wkjaZzM3F0M71SK0OQqWIZRTrnSYF9KV8BovY2FVJmTZKphEAEvGCkZ366N920ihWvmUOF9d9srzhcdi7aLbA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1766073406; c=relaxed/simple;\n\tbh=HZA1aF7jqQNTRddoCdlzxCx0gUTRMagLnXlyZCQsCG0=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=DdvSle49sPU+NFW7KsrBLwWsMQU7UKEFqw/2fSB7eWkWdPIHtEyo5eoRn2+x9X0/kPsyn3jJQQHcn3z8RAf3LP7g9Cqx/B+n+VvZZ4styTaF9jY4IzSy0T2bxDB19zKSiHUpBRv944MDjNRBI5LF5ny6Z2KAAlsgcDhdFjIh8fA=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=esaztu5m9dArql79lY5xPsmQMDaBHjlrOrmSZIYmRfE=;\n b=gXGZ8awI32WpcU1H+ZzA6NLeZvrkvZ08EQkpO21lY9Y2KKs7S/1r9wPFl5MQ/atycLWA/lbjmlEMeRJeWu4UPvuJKfNMQF/CXgyB38pnSidAA+Ow5G7UnB8W4PgSEdBHo7mdicaBIMkPUVqBw5c6yp8SQ1FfFFju5DEbpHufMgBaXXhFt0FAwqYQ45iGY20YkvJLz6jJs9UBU0uj/QYwZwKsxdG8yyC50+KEHvdHi3h4juxFn4Sqb+NVVcO3KsqDZd8Cx2I47KO/C0acY79B1f+d5bnpBKRx2kgJJpFIsL1WMArcr0RIAtyDxSE9MWjJVK5rCTbhbpd2QSDanjisSA=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=Q9OqZuSG; arc=fail smtp.client-ip=52.101.66.11","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=esaztu5m9dArql79lY5xPsmQMDaBHjlrOrmSZIYmRfE=;\n b=Q9OqZuSG4wdXj42LmRuSRZZFtHguY2/qMBf+ie6KDObF/70wD9F5ZxcOoGQA4AZU6sKvEiJDywBN3CycEZD5NX4U2MLH6wBvdsqIov8oE0up6A9Sbsa2Tc48OI6iwwr2++Adw3tpPqe73AjbIVa6aq0fsVKy2n/iWuQ6SsQDrUyBBq5sugviE3xnxTkgVwBBGCYWvmG2BYNILmBdMJEDeUs1ey9UaP3+LocBTkqy+UQNdxZzLXAA37dBRcOVUIXqdtCNVs3Ap3lRYq5CQCxqH2Dd4AdBiWWHhBsiLi4n0igFNjYRfRxmnal3OXZp69wOsCTKVLcEq5WZ/DTvnUOoPw==","From":"Frank Li <Frank.Li@nxp.com>","Date":"Thu, 18 Dec 2025 10:56:21 -0500","Subject":"[PATCH v2 1/8] dmaengine: Add API to combine configuration and\n preparation (sg and single)","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20251218-dma_prep_config-v2-1-c07079836128@nxp.com>","References":"<20251218-dma_prep_config-v2-0-c07079836128@nxp.com>","In-Reply-To":"<20251218-dma_prep_config-v2-0-c07079836128@nxp.com>","To":"Vinod Koul <vkoul@kernel.org>, Manivannan Sadhasivam <mani@kernel.org>,\n\t=?utf-8?q?Krzysztof_Wilczy=C5=84ski?= <kwilczynski@kernel.org>,\n  Kishon Vijay Abraham I <kishon@kernel.org>,\n  Bjorn Helgaas <bhelgaas@google.com>, Christoph Hellwig <hch@lst.de>,\n  Sagi Grimberg <sagi@grimberg.me>, Chaitanya Kulkarni <kch@nvidia.com>,\n  Herbert Xu <herbert@gondor.apana.org.au>,\n  \"David S. Miller\" <davem@davemloft.net>,\n  Nicolas Ferre <nicolas.ferre@microchip.com>,\n  Alexandre Belloni <alexandre.belloni@bootlin.com>,\n  Claudiu Beznea <claudiu.beznea@tuxon.dev>, Koichiro Den <den@valinux.co.jp>,\n  Niklas Cassel <cassel@kernel.org>","Cc":"dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org,\n mhi@lists.linux.dev, linux-arm-msm@vger.kernel.org,\n linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org,\n imx@lists.linux.dev, Frank Li <Frank.Li@nxp.com>","X-Mailer":"b4 0.14.2","X-Developer-Signature":"v=1; a=ed25519-sha256; t=1766073392; l=8714;\n i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id;\n bh=HZA1aF7jqQNTRddoCdlzxCx0gUTRMagLnXlyZCQsCG0=;\n b=MboqvRaFNRDNEZSMLvQH8AXt4tJC5JH58G3am++CmJqqSEhaObax6IW0+wcGNMeXqbkhNMJ+Q\n RSe2h8xS2pxBfl9vqzue8muehvbjIhERZoR+2NSyS2S09Tt7TcRIoEL","X-Developer-Key":"i=Frank.Li@nxp.com; a=ed25519;\n pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q=","X-ClientProxiedBy":"PH8PR07CA0047.namprd07.prod.outlook.com\n (2603:10b6:510:2cf::10) To DU2PR04MB8951.eurprd04.prod.outlook.com\n (2603:10a6:10:2e2::22)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"DU2PR04MB8951:EE_|VI1PR04MB7037:EE_","X-MS-Office365-Filtering-Correlation-Id":"6a67d886-5388-46ae-e050-08de3e4e090c","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|19092799006|1800799024|366016|376014|7416014|52116014|38350700014|921020;","X-Microsoft-Antispam-Message-Info":"=?utf-8?q?G3VK+XneRjHwRbGex15+XpdRdSNDZiV?=\n\t=?utf-8?q?vZHrJSIOGZTCQHkpwfOUiB54tajt+jPkAQkludfhayGoHnYhtwQmevGJaBBhJ2XUG?=\n\t=?utf-8?q?U443eKnOoQajvV6xtBbr8dpt5pRYAE4ATUnjPdFhbBuZfTU0t4y6GoVnCAI1RmDFD?=\n\t=?utf-8?q?zcd3QRoPFN2D8dNx5ftb1Bj4O0KPySxhOyD0u0/WqIBZE9ISFB9eXx5qvYWugUKN0?=\n\t=?utf-8?q?bIB29U01QedCgOrENnCxkGGGmOjPtzTX9eAvF66PNntNJZ3l5VCByvFuXhHTsof0F?=\n\t=?utf-8?q?vmk8Vd15rhzcPp6/ItWDx/zrWaadeoJAF9qt+OtPyxjBHUSYbmMKUZ0XPLdPN/Izu?=\n\t=?utf-8?q?YuBWF2384k82FYeF9nUwO+eAjWQP9DrojELh14OH0vWe9B7KYPckohELQqPgSp4hm?=\n\t=?utf-8?q?wAJUpXGq/wGy6pSrH/SKNOPbhJDKAFVQ85yxQQz9CWSKZ8E3MkfCuR5l888Ad1rUI?=\n\t=?utf-8?q?OHUSjWvXwoFU9VIOnX7cytGTp3sqI6lzjKfyu4OkuGDaWPKrhrxMnRyj3B36dD9yM?=\n\t=?utf-8?q?QrrWIQyZNh+kQlA92kgFboP3tnSSMWEMRbmkT7KV9Wh5aKL9mWtt0m644gk+ni203?=\n\t=?utf-8?q?NrRCy0/2l1CCyCs385xIEnevEw16aACKphj6EbaeZ4a8P5QONpTG8ynViHEe2NMDZ?=\n\t=?utf-8?q?y4dK2W5N2t3i7ZEVon1dOGGD735+HgbMxFr0WhgMaYPnAolq1sl4VLwtf+SPXBUZy?=\n\t=?utf-8?q?OOv8zU3KeI0oxYsdV7Px5Sjsa9JVLlIkT2zFqWYaPWxCVbpvXS22smxGj84pAF1pE?=\n\t=?utf-8?q?qfH849UBqJ6S9Pa5SeiD7yvdWG5rpHUO2eZ9OZwlUhNXMh1nngQMWVXaHniinfWmA?=\n\t=?utf-8?q?IHwKHBE++NuvOZZM4sfecG0ZxgdRJpa8xnLDYnM/4m2SclO7G8L4nmJR4rII6v0pW?=\n\t=?utf-8?q?7QO6da1/p5zTpBa4Dr037+5QgWwZlwsyXL7ZXGgl9mxTtlrBlRThhGF4UizJB71Bd?=\n\t=?utf-8?q?Lfkx8smmb7mU8iFFpDPEv7uQGgKACqEmbjt2LJgwQb70iKuTLyaxK+HucGEUBw8GA?=\n\t=?utf-8?q?Ho5IW+S8qO8BwdfOLrXKajDN1IvDwM9iaX34RoTrWjUbZFFmKMGpQBlw4gaC+hq6x?=\n\t=?utf-8?q?geBEGCUVu/ScHUH81WhSDfEqUvj6zmBKVwU1x7CcQxrd6X1P630WyTw55/lKSqIvG?=\n\t=?utf-8?q?/QhcsJmmuJv/0a9IBFhvbvN6oRgJdjtCtxt/7Qc7rvP2Bia5A2haYw20KSQARET6E?=\n\t=?utf-8?q?niNUANAxQ0/wtLlfTMwAGET/qpytwa6l/b8MuQus5Tc+8Zvej6MxkaKrk0hFx6Kvj?=\n\t=?utf-8?q?lAZNfacw2K5IKDB6RJxec6G//GnHifO6vCcmCrX2kaAKXw91f0mpwYdTvAaAhoqhG?=\n\t=?utf-8?q?WZIcBPsfUL30l6jO2jHwcsr/J/wbV0IUz3cVEu8H6yB2Ct+5vqQtIhPoG7L8oo7j+?=\n\t=?utf-8?q?hW5+mf3loa2gSgqJ5VBDDUWOTS6TZ4NGXM/zpg6N1efISJLifrYWcv94HncAo02M4?=\n\t=?utf-8?q?MP6xmGkhM4WpQ5Oq0Em6NjwXpT4r8yrQ=3D=3D?=","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8951.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(1800799024)(366016)(376014)(7416014)(52116014)(38350700014)(921020);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?gc6evGiUCr63N21xDPTDadpyahHz?=\n\t=?utf-8?q?34ixtBRpIqJIPHBZZtimmIloLAq+wLzMCLjOPR1Z+UBC2KIOm/LSxcxsmYvgqrzuQ?=\n\t=?utf-8?q?Sk1CG7JDVOS/iaHtvpZHw7t9yNZ4CqgNgKOlM4BWo4vBUrRU2gcGAGHn87LykCmx9?=\n\t=?utf-8?q?Tgp1fgx105CpRcMRoQLVHrJ50L0M8QaUxnfg32703LbZm0+OJNhd9eRK/wmTEtbzb?=\n\t=?utf-8?q?YcLP2YxW9vcOnetu5OcTGixoNL6fuug+VOVx69aon1dJkLbjHfgTIom3agsy1S9rt?=\n\t=?utf-8?q?7zGYi4EbAhGiWbrhiWk7K036JGhg/Aehu/f0VWQaYqYQYzItWT44ZiPrT0rR9tcOL?=\n\t=?utf-8?q?EDFDhvdSBRLm2xxcmoyecxkB8vFtx1/yUjdwRc8qXONhegd4YnZu7YEKDmSzEI2QM?=\n\t=?utf-8?q?sl/7dBRTj+B5amQokr1EnPVSHhvnkOudCIPTsR+XMEt+a4oy9N919RomTEHyVTmh9?=\n\t=?utf-8?q?+gBvtRwHqU8k9MlgAI4+GrqmEGnwZFI6Bipw8S2BDvFWQ4T6oV0KA82hm4G9SvDrT?=\n\t=?utf-8?q?0iBvHjJEbBZGRFC09LBN/draycXcNrsNhm33/KRH1N9l9cnTsoDw1nGlf8hf8GD/8?=\n\t=?utf-8?q?Ksx6L8+bLb+XVA89uyAHE8DA6IdIRUr4VzODIkMT4PGEtqLVBU7gmL5LHgw68h2zP?=\n\t=?utf-8?q?yms6DAMW4rRkfDaVW/KqKkxHwDKTWJI+JodgZlnG0n9RQyRNYHlesCHImYuKZExqR?=\n\t=?utf-8?q?cPPohhKnJ+pRQoUoKH6c8VRFJ2VZaBVjqJIgVW2ZLAaScFflvGWc7YLwIY3nKlBak?=\n\t=?utf-8?q?Jswf1wZPT03Lm0V2ty1aXuEZcS9ZEiNy8i3+KyKX323oMkXbkH4cRHA5tG9Zjq2jk?=\n\t=?utf-8?q?+cMeyGd68UDXQ1Imr/dORntmPyDYxKdZjVrzhdf6dxVdJfMlMRXabH/JYWo1i3o0G?=\n\t=?utf-8?q?bQaBZHvNaMbV+pTuI6+GQ85MK/0/DvYzzasC8rXKGuGkHQB7zB0smM80CWQAksTXc?=\n\t=?utf-8?q?l6S1dfP9FUn3eYJKGG28E+SqP1xHjIkn0nGMRbL2lcdNh4EDT2YBudDfYulrOJ0DJ?=\n\t=?utf-8?q?sIVgFlkPsoOvjgfbTWnpShV8AM4JbqltcKday14J4pil0sdfwAm2SzMswA8JB9Eoh?=\n\t=?utf-8?q?EisC3eb8HeZUMcg+OTvHOMDrl3Ccx6qU+BSUVXgyFkyfs+YgFF3b14u+lXdyA7Ged?=\n\t=?utf-8?q?GE0+xIZNwNcfXSfeWswhPr03bl1eie1avykyWgi37+gYfoC6CYWxrFEmykWPKy2et?=\n\t=?utf-8?q?wTgQbKqPkLCJPBZGkq+4k0xUqBA35AodR+KXQqh+lXT4a/Fa2iwEoIB4irXqjugNn?=\n\t=?utf-8?q?idk/qnnb8Yy03Qbcoq6vEfryB3ekFUdxkJ12ZcgA6uZfqJkJfcAvKvXuXZk9ULz2x?=\n\t=?utf-8?q?0pn0iTL7OxJF4z5pDq1yg6gsn+Rw46YDCaYKFjUEGBiwPHLpr7rzUCEgf+fyxycgL?=\n\t=?utf-8?q?vcDfTjSPaJ2EE4oWipSGWhLxKZYE4S57jdvZqMySW97QYrkaKFfz52UJXrlHS5EZi?=\n\t=?utf-8?q?TAV/YJFI5UymqTxA1Yc8l0X3r8h1WhJ1GIcvNE/HsclcDvTsMydi68IfhkGOJqJ4V?=\n\t=?utf-8?q?HF+G5Xau6035?=","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 6a67d886-5388-46ae-e050-08de3e4e090c","X-MS-Exchange-CrossTenant-AuthSource":"DU2PR04MB8951.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"18 Dec 2025 15:56:41.4309\n (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":"\n 8M96Kql5sCvXmE7fo3t/jOEsj18gzHdxxw6WbGVkMKIawHCk3crOlXyWu8VnERpKIzuLPzr8P1IrJ1W6jg8Zsg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"VI1PR04MB7037"},"content":"Previously, configuration and preparation required two separate calls. This\nworks well when configuration is done only once during initialization.\n\nHowever, in cases where the burst length or source/destination address must\nbe adjusted for each transfer, calling two functions is verbose and\nrequires additional locking to ensure both steps complete atomically.\n\nAdd a new API dmaengine_prep_config_single() and dmaengine_prep_config_sg()\nand callback device_prep_config_sg() that combines configuration and\npreparation into a single operation. If the configuration argument is\npassed as NULL, fall back to the existing implementation.\n\nAdd a new API dmaengine_prep_config_single_safe() and\ndmaengine_prep_config_sg_safe() for re-entrancy, which require driver\nimplement callback device_prep_config_sg().\n\nTested-by: Niklas Cassel <cassel@kernel.org>\nSigned-off-by: Frank Li <Frank.Li@nxp.com>\n---\nchange in v2\n- add () for function\n- use short name device_prep_sg(), remove \"slave\" and \"config\". the 'slave'\nis reduntant. after remove slave, the function name is difference existed\none, so remove _config suffix.\n---\n Documentation/driver-api/dmaengine/client.rst |   9 +++\n include/linux/dmaengine.h                     | 103 ++++++++++++++++++++++++--\n 2 files changed, 105 insertions(+), 7 deletions(-)","diff":"diff --git a/Documentation/driver-api/dmaengine/client.rst b/Documentation/driver-api/dmaengine/client.rst\nindex d491e385d61a98b8a804cd823caf254a2dc62cf4..02c45b7d7a779421411eb9c68325cdedafcfe3b1 100644\n--- a/Documentation/driver-api/dmaengine/client.rst\n+++ b/Documentation/driver-api/dmaengine/client.rst\n@@ -80,6 +80,10 @@ The details of these operations are:\n \n   - slave_sg: DMA a list of scatter gather buffers from/to a peripheral\n \n+  - config_sg: Similar with slave_sg, just pass down dma_slave_config\n+    struct to avoid call dmaengine_slave_config() every time if need\n+    adjust burst length or FIFO address.\n+\n   - peripheral_dma_vec: DMA an array of scatter gather buffers from/to a\n     peripheral. Similar to slave_sg, but uses an array of dma_vec\n     structures instead of a scatterlist.\n@@ -106,6 +110,11 @@ The details of these operations are:\n \t\tunsigned int sg_len, enum dma_data_direction direction,\n \t\tunsigned long flags);\n \n+     struct dma_async_tx_descriptor *dmaengine_prep_config_sg(\n+\t\tstruct dma_chan *chan, struct scatterlist *sgl,\n+\t\tunsigned int sg_len, enum dma_transfer_direction dir,\n+\t\tunsigned long flags, struct dma_slave_config *config);\n+\n      struct dma_async_tx_descriptor *dmaengine_prep_peripheral_dma_vec(\n \t\tstruct dma_chan *chan, const struct dma_vec *vecs,\n \t\tsize_t nents, enum dma_data_direction direction,\ndiff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h\nindex 99efe2b9b4ea9844ca6161208362ef18ef111d96..276dca760f95e1131f5ff5bf69752c4c9cb1bcad 100644\n--- a/include/linux/dmaengine.h\n+++ b/include/linux/dmaengine.h\n@@ -835,6 +835,8 @@ struct dma_filter {\n  *\twhere the address and size of each segment is located in one entry of\n  *\tthe dma_vec array.\n  * @device_prep_slave_sg: prepares a slave dma operation\n+ *\t(Deprecated, use @device_prep_config_sg)\n+ * @device_prep_config_sg: prepares a slave DMA operation with dma_slave_config\n  * @device_prep_dma_cyclic: prepare a cyclic dma operation suitable for audio.\n  *\tThe function takes a buffer of size buf_len. The callback function will\n  *\tbe called after period_len bytes have been transferred.\n@@ -934,6 +936,11 @@ struct dma_device {\n \t\tstruct dma_chan *chan, struct scatterlist *sgl,\n \t\tunsigned int sg_len, enum dma_transfer_direction direction,\n \t\tunsigned long flags, void *context);\n+\tstruct dma_async_tx_descriptor *(*device_prep_config_sg)(\n+\t\tstruct dma_chan *chan, struct scatterlist *sgl,\n+\t\tunsigned int sg_len, enum dma_transfer_direction direction,\n+\t\tunsigned long flags, struct dma_slave_config *config,\n+\t\tvoid *context);\n \tstruct dma_async_tx_descriptor *(*device_prep_dma_cyclic)(\n \t\tstruct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,\n \t\tsize_t period_len, enum dma_transfer_direction direction,\n@@ -974,22 +981,85 @@ static inline bool is_slave_direction(enum dma_transfer_direction direction)\n \t       (direction == DMA_DEV_TO_DEV);\n }\n \n-static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single(\n-\tstruct dma_chan *chan, dma_addr_t buf, size_t len,\n-\tenum dma_transfer_direction dir, unsigned long flags)\n+/*\n+ * Re-entrancy and locking considerations for callers:\n+ *\n+ * dmaengine_prep_config_single(sg)_safe() is re-entrant and requires the\n+ * DMA engine driver to implement device_prep_config_sg(). It returns NULL\n+ * if device_prep_config_sg() is not implemented.\n+ *\n+ * The unsafe variant (without the _safe suffix) falls back to calling\n+ * dmaengine_slave_config() and dmaengine_prep_slave_sg() separately.\n+ * In this case, additional locking may be required, depending on the\n+ * DMA consumer's usage.\n+ */\n+static inline struct dma_async_tx_descriptor *\n+dmaengine_prep_config_sg_safe(struct dma_chan *chan, struct scatterlist *sgl,\n+\tunsigned int sg_len, enum dma_transfer_direction dir,\n+\tunsigned long flags, struct dma_slave_config *config)\n+{\n+\tif (!chan || !chan->device || !chan->device->device_prep_config_sg)\n+\t\treturn NULL;\n+\n+\treturn chan->device->device_prep_config_sg(chan, sgl, sg_len,\n+\t\t\t\t\t\t   dir, flags, config, NULL);\n+}\n+\n+static inline struct dma_async_tx_descriptor *\n+dmaengine_prep_config_single_safe(struct dma_chan *chan, dma_addr_t buf,\n+\tsize_t len, enum dma_transfer_direction dir, unsigned long flags,\n+\tstruct dma_slave_config *config)\n {\n \tstruct scatterlist sg;\n+\n \tsg_init_table(&sg, 1);\n \tsg_dma_address(&sg) = buf;\n \tsg_dma_len(&sg) = len;\n \n-\tif (!chan || !chan->device || !chan->device->device_prep_slave_sg)\n+\tif (!chan || !chan->device || !chan->device->device_prep_config_sg)\n+\t\treturn NULL;\n+\n+\treturn chan->device->device_prep_config_sg(chan, &sg, 1, dir,\n+\t\t\t\t\t\t   flags, config, NULL);\n+}\n+\n+static inline struct dma_async_tx_descriptor *\n+dmaengine_prep_config_single(struct dma_chan *chan, dma_addr_t buf, size_t len,\n+\tenum dma_transfer_direction dir, unsigned long flags,\n+\tstruct dma_slave_config *config)\n+{\n+\tstruct scatterlist sg;\n+\n+\tsg_init_table(&sg, 1);\n+\tsg_dma_address(&sg) = buf;\n+\tsg_dma_len(&sg) = len;\n+\n+\tif (!chan || !chan->device)\n+\t\treturn NULL;\n+\n+\tif (chan->device->device_prep_config_sg)\n+\t\treturn dmaengine_prep_config_sg_safe(chan, &sg, 1, dir,\n+\t\t\t\t\t\t     flags, config);\n+\n+\tif (config)\n+\t\tif (dmaengine_slave_config(chan, config))\n+\t\t\treturn NULL;\n+\n+\tif (!chan->device->device_prep_slave_sg)\n \t\treturn NULL;\n \n \treturn chan->device->device_prep_slave_sg(chan, &sg, 1,\n \t\t\t\t\t\t  dir, flags, NULL);\n }\n \n+static inline struct dma_async_tx_descriptor *\n+dmaengine_prep_slave_single(struct dma_chan *chan, dma_addr_t buf, size_t len,\n+\t\t\t    enum dma_transfer_direction dir,\n+\t\t\t    unsigned long flags)\n+{\n+\treturn dmaengine_prep_config_single(chan, buf, len, dir, flags, NULL);\n+}\n+\n /**\n  * dmaengine_prep_peripheral_dma_vec() - Prepare a DMA scatter-gather descriptor\n  * @chan: The channel to be used for this descriptor\n@@ -1009,17 +1079,36 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_peripheral_dma_vec(\n \t\t\t\t\t\t\t    dir, flags);\n }\n \n-static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(\n+static inline struct dma_async_tx_descriptor *dmaengine_prep_config_sg(\n \tstruct dma_chan *chan, struct scatterlist *sgl,\tunsigned int sg_len,\n-\tenum dma_transfer_direction dir, unsigned long flags)\n+\tenum dma_transfer_direction dir, unsigned long flags,\n+\tstruct dma_slave_config *config)\n {\n-\tif (!chan || !chan->device || !chan->device->device_prep_slave_sg)\n+\tif (!chan || !chan->device)\n+\t\treturn NULL;\n+\n+\tif (chan->device->device_prep_config_sg)\n+\t\treturn dmaengine_prep_config_sg_safe(chan, sgl, sg_len,\n+\t\t\t\t\tdir, flags, config);\n+\n+\tif (config)\n+\t\tif (dmaengine_slave_config(chan, config))\n+\t\t\treturn NULL;\n+\n+\tif (!chan->device->device_prep_slave_sg)\n \t\treturn NULL;\n \n \treturn chan->device->device_prep_slave_sg(chan, sgl, sg_len,\n \t\t\t\t\t\t  dir, flags, NULL);\n }\n \n+static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(\n+\tstruct dma_chan *chan, struct scatterlist *sgl, unsigned int sg_len,\n+\tenum dma_transfer_direction dir, unsigned long flags)\n+{\n+\treturn dmaengine_prep_config_sg(chan, sgl, sg_len, dir, flags, NULL);\n+}\n+\n #ifdef CONFIG_RAPIDIO_DMA_ENGINE\n struct rio_dma_ext;\n static inline struct dma_async_tx_descriptor *dmaengine_prep_rio_sg(\n","prefixes":["v2","1/8"]}