From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010002.outbound.protection.outlook.com [52.101.229.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D233238E164; Wed, 17 Dec 2025 15:32:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765985543; cv=fail; b=OWgw1T8j5hLjyDgjDGT5tQRps5zHLVhGmIiuCxsp/f+ACCFK+tHJlPPphnac6xIgu+ggwDPz9QgQgnkEmHmjJ4XbuO+It9Q2OWU36RdMy9GV4mher5djO6ApCf+40k3Q3sRZiCHMWq0mYcKGDsRHajNPLRH/JMP4NrYlF64DqoM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765985543; c=relaxed/simple; bh=BvupNUTbsnnqQ2iQSCv4G38j+cojMx+Gkuivh3+BAwY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kAhYY3yTlrheYQDgPLLq49UUszESuYIZe29qMNHOSr81eTCjbBJnO8AJ/breLGwxIYdVn7ExnHXaVRTq7M8UqtyI0zRUj8VXhXUoLBc8bhvTrtzYJID6dXofSR/Uo4gCGS2UQzx+5//SJEC0CqHI6yTHl/nf5UrhnCA1hruBrrM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=GGJfGgtx; arc=fail smtp.client-ip=52.101.229.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="GGJfGgtx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qIedRf90351VZ/we5tuQSb7Q1Hfc7cUVWakfqagiQJmnGxkIzCTTJye8YmZr4jDcFRz+IE5Goi2f8RW6f3+M6y7XDPkzXQBVvGuJMeZ4kRhRbX5Uwc/9CwM8s5V9Khh4ANKGoGDycqd30QETDUO5PQMGXyB6qn6Lfy4y4LSOiMufoewi5VTOuc2MpRsVS1ePMw5oYg6BCJ9P+YdqSxCY4CVrbmTRQT/18AV5CUz/WmyWLFgSbh81momAOHUQHcTtCInh9Qs3Pq0coPC96AMmxbske91NRL5YKYj5ahBbHD55QHcFY4iZLAmqAxZtSbNX4672SW7NxVxREH1xUBpIag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=bi06V0x6tmNQAvQ9aQlAgF6/LuakztYZpjDQre4adTY=; b=i7EEjZRl1RieGAeGVdvHv7glgdfmgMqaNKnck5m8+OxI4bRDSDle5vTwKDg5FIc46iaP3PthklrXT+ap4E6qEG2CX1Um6ut55wHrh2kYMl072v81ZqIwmqezt7cQN6sP+odqWY5FmQ0wKVws8IIFHoW3eK1kmDs1ER8+GwQFW7TZuDk79VUXqOfrqIPhu+yFIdsDCxtMW+QsksyKuwhJcmIpao5f4DBi2mLUk8Jn7Bf6pW6WfWdWqvRcJsgSr5lZQA2FOWoXd+sOWju5WywbOE4JjT41wWYF8SstExBhuhzfH70Ot3LWlsZPxoKv9lZHLSgKoL+9uhVzw+ZJJebCNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bi06V0x6tmNQAvQ9aQlAgF6/LuakztYZpjDQre4adTY=; b=GGJfGgtxm/XMg/oy3toTu3SAQuNE9ege1UQceoAjFW7H7GLFQfN1YAmBjY66I1xSlDtNhXOpPv9ri8A5dFEBFQ5ju1eyY1Wkq5g2WX4w1l/K9FYVkkjegozBT5tGzpNi3U+QWqJyMaEMWq3EugqXK2OVTUHjPwi7KS03HX0FI8k= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:15 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:15 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 01/35] PCI: endpoint: pci-epf-vntb: Use array_index_nospec() on mws_size[] access Date: Thu, 18 Dec 2025 00:15:35 +0900 Message-ID: <20251217151609.3162665-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0025.jpnprd01.prod.outlook.com (2603:1096:400:aa::12) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: af1af3ef-3ee7-4224-f7c7-08de3d7f3800 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0mEH1/u9yQspFsxoSvG0ubg85PAP/BvpqZ1QdYKrHbysmsZ/sF708c0k6RPy?= =?us-ascii?Q?Okk2P4DOaiOCC5QjrHrv0C54bKtusNUCucis1rV2nTMh2EaCa/6AedCLwkEn?= =?us-ascii?Q?DgZ9R7OpDBT6LD8RC6isPMuTlm/nT04yC7ZlB6U7jMlZ/tD2NkpDhZoRx7ss?= =?us-ascii?Q?OFxuVWzY3o7LIjEAgwx+Juh8F6g8teBzsbtj/WbvwBSFMreSJxcuREvP8jbO?= =?us-ascii?Q?8UcJDIf+MTHWseWWw1lElj8wBdnsu3c5vwN88VzqdS2zXIF8xYfFlcxQPaIA?= =?us-ascii?Q?bV8thGE3tsIEkUmVQJ+5vkApQfivxAuD6ElfmjagpDnFsARgikvYpiBi9tXS?= =?us-ascii?Q?z+SRcJ4vvq/nUgxd2Hs+EoPI81mPkZjKwJq6n2vR7NAoX7YbtIF/MwUaVwFe?= =?us-ascii?Q?8mymmsg6/myAgod2OhzOxGoFVJV0EwLOdtaC8Mek1Fu3onWkOBHtafljrNdp?= =?us-ascii?Q?o1CyrN75ycJGxiTsjd5Dp6QqE1qicklNDICcQ11Bk5IVBu8OQJMGOekzvzXh?= =?us-ascii?Q?ZF2ovh2X6Qfc62U26m4qy6Q23XFZe0Ro/odsRJicS8lxdpqD5SDoiW6BJYCq?= =?us-ascii?Q?W015yvWKXBBEmDdl8iyZbsGEbcAgM5nP+I0QP697/gPkQyr8/nZJ0MfQS4pD?= =?us-ascii?Q?SIZtlma1B4DYX3isajWyM04xOimuJ0/oFvAsfnmfQr5d3VGIU8caChRvhJQq?= =?us-ascii?Q?dgU5crN+25hAOPMtMA0Y6skLjqldJb5oCLfqdyZe6bck/yLvR8FReyeUG5Hw?= =?us-ascii?Q?Wy9pGjHLahyX2fX8p2mwjQRuP7168djPbB8I0wBRWdl21X0CZg/ekfoYkRlw?= =?us-ascii?Q?pMxoiYYhvZDe/XqoPXDqbANmYk76m37v8tY9XeGTt5hAc1ymkYwixX1cQMdB?= =?us-ascii?Q?VCCEey7fXt/QPjQpFGdmvUzah0gDJ+Ci2m6D1grbMjkGatJcw8mBzaznoJxK?= =?us-ascii?Q?kg3lubbEJacJj/uA9L5ud2XBW6aq3vyOe6H+Ce556/K3BErwmv2o1xzEAqcw?= =?us-ascii?Q?X8zhitKcvO04sTuy2VTRZeQ9VsPTnZs5ogiUZFgRrUJx7VChWQh35VpaJbk8?= =?us-ascii?Q?QdNdVqJv8ZfNK3WZl39mQJoZr9EBpXXczBykPdNUPkmbdGL0wNrDkSOBnkoh?= =?us-ascii?Q?t417Ijr/ocJy5Ml0Ex85wDfA893/8onJwicgQ/NIQs1KQHboNAawyC6WuHLy?= =?us-ascii?Q?96MRrjslsN4Q3LPYx3F0ik0g/CkqXtrKJqdBtB3dZ6c6pfpyYnWcYFXYWteE?= =?us-ascii?Q?DUZrLWWpDxHfqMuajWfl9UdJsiAVuPYt/d5fJNCbrWSmfUHsIWJLKhDE1HBe?= =?us-ascii?Q?zzBx1NM3DYSm068Z6DYCPxORH/BQFTdkuai2hNsPfut3WxIDCz8GY4ZDr6gD?= =?us-ascii?Q?hMOEozpGRbjoH0COGm9w9u1rL95KjN5XNMq6zbjbjfXjyTvA8G/WNr9jWIia?= =?us-ascii?Q?7F/EwEd86GC87WAdnTDNvBYIsoF67yJn?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YvJoAQoclkYQ6XMoz/5ldm2A3QGUHM3HjnRJUTZI9mHNi9gYmFN83KB8LX2Y?= =?us-ascii?Q?0lQP+59OqqfHsrrnx1UUQeeR7hIGoMEtdRlIlBsPdzrho9+O9NwGfMXowDjY?= =?us-ascii?Q?PhwBSu/nqgqtb6anYG5jiuD20xTA/47QcfLSR2SVqMd+HqoDmqkrjccboBnl?= =?us-ascii?Q?MAAn+Awg0yw8rplQori1jEGjYOGVSrqSZ2YlxkcpsAx8XraEUJjc6rvr61+s?= =?us-ascii?Q?KBFvv61bb8sb/ECZjgnVsNOMK1CMLS2CmnaVtXlsUn6ecKBVYf3HNAXXFkI8?= =?us-ascii?Q?rFjH41hK8VOe2ARH8uNtvfFpAnaebgKULmZ3qvyhVZxh6n7hhIXQzfwF5jUu?= =?us-ascii?Q?YPy8iFxHSTDY3E/sNrSoV1IWAMsKcViAZoIO68SNPNlhaflBtNaoYj+DOQbs?= =?us-ascii?Q?PyMnHdYAFtZITO3jT1wh5qAyU+Z3PbErqLntbUVUTs5nuFxRzCUo2OsiYlxs?= =?us-ascii?Q?kpDFOFE7bA4JXTPNE6SUMxgGTTEo0E/m59HcAhb4OLqVMnZC1fjpjwYAMec3?= =?us-ascii?Q?mQp/40k8+CaNPKO7GmFa9OsFRK3Eul7nthD1geEXkGU2chsPX6n/cL/Pq5ll?= =?us-ascii?Q?rIDJXON2boFDAt43bwhAPFyJUu/IF/seVA09kQkD1STduL/McyY6eWyfcOef?= =?us-ascii?Q?I9MMdSQUByCiQlfrJpw4kJrv0E5cwlApdLiMOC9YYssbYdNyONx+o2yd2r1M?= =?us-ascii?Q?E70/Aw6WYZzXa2XMq3yglVQOVfcgEgocvRU6yGy+2Cj91OgF1V2YmEDPPmmc?= =?us-ascii?Q?cOHgZLA+/vmo7rJtCe+8/KAoAA/qkdxGlug9RM0DsRlpI4jqFhLRxEKkqAig?= =?us-ascii?Q?0dwrRJnD4NJCjyAqjY7wK9d8+8aUDpZhMXLaYqIynoGXmsejTHk0RgMlbRAP?= =?us-ascii?Q?gHvHXDo7C+Xec1+7zp6J3LMODHg2xJxnAxC2ssJUDuHWbWiYGWqhr5NuvGoV?= =?us-ascii?Q?ZsEx+HMbXBPtbyW9U8NIWWrz8LCrA1vEwrJ7Kc+K9Ai1CjkoRK3O+b5YqKex?= =?us-ascii?Q?vm4eRtbKACs44U9CSYblgCq3TNAcYxd3uivG93/p9xHJQanDfI8XHKskTxOM?= =?us-ascii?Q?qH9P+bGtODCNdr6S0pdLUb+LovangcRl9csGBpi/DnV1RisZ8WQ52xJeIsGP?= =?us-ascii?Q?3maKPZes+BSqWmWPVPpdG4NB/zloDjRn6A3lQK9BhgfBVk1TpURMegRWhLUf?= =?us-ascii?Q?L470D1aTzx3u9ufWWF4MBAQkPU/izwfnVsZ5TK2yabuSjb32hiMsD2eUyao3?= =?us-ascii?Q?1SKEQHEZNIfU/oW4B45oHsfYaDE5XudGebmjyQFdbWpaA8CSj0CYNYSJXHGk?= =?us-ascii?Q?z9qHqWMdUqx9wex+nj6m/cxICTAnpGCH3TWG6geVMLE9qFG+keQzDVjV1RHq?= =?us-ascii?Q?lIKri7Ce3FXLhBsfVnxwiQtnAv5yMrgGDGP1Wg1TIdU6ByW7j2ow1+nQGLh8?= =?us-ascii?Q?0nBNtNJLuviISJKD+69PV2PD4YRUhn0Lv/exsCkgaqDFzoa01Mht3WCuPE5L?= =?us-ascii?Q?OxxQEVBnFAfBj5Mmu9X6K8CBhrsylTZ3PoqSgVRAOQ3AGTUmcJ3QhCWuNc/c?= =?us-ascii?Q?40n2JK/pPtFP6QQMoCZ0sF4ywninxjvxgHQrJTJ1WxX85shRCdqvFCmPmtFg?= =?us-ascii?Q?3k5zuBuKkU6+TrcELeRkUN4=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: af1af3ef-3ee7-4224-f7c7-08de3d7f3800 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:14.3598 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U0F4BC1xbvNd/XZtFsOlTca6bB/g03hbKLnqCqm6HFC9yM9eYDE9l2e8eC5ByOCO3Z5WKdrkY/iTd+f2SwOCVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Follow common kernel idioms for indices derived from configfs attributes and suppress Smatch warnings: epf_ntb_mw1_show() warn: potential spectre issue 'ntb->mws_size' [r] epf_ntb_mw1_store() warn: potential spectre issue 'ntb->mws_size' [w] Also fix the error message for out-of-range MW indices and %lld format for unsigned values. Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- Note: I noticed [RFC PATCH v2 01/27] resurrected the Smatch warnings https://lore.kernel.org/all/20251129160405.2568284-2-den@valinux.co.jp/ This RFC v3 version therefore reverts to the RFC v1 style, with one additional fix to correct the sprintf format specifier (%lld->%llu). --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 3ecc5059f92b..56aab5d354d6 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -995,17 +995,19 @@ static ssize_t epf_ntb_##_name##_show(struct config_i= tem *item, \ struct config_group *group =3D to_config_group(item); \ struct epf_ntb *ntb =3D to_epf_ntb(group); \ struct device *dev =3D &ntb->epf->dev; \ - int win_no; \ + int win_no, idx; \ \ if (sscanf(#_name, "mw%d", &win_no) !=3D 1) \ return -EINVAL; \ \ - if (win_no <=3D 0 || win_no > ntb->num_mws) { \ - dev_err(dev, "Invalid num_nws: %d value\n", ntb->num_mws); \ + idx =3D win_no - 1; \ + if (idx < 0 || idx >=3D ntb->num_mws) { \ + dev_err(dev, "MW%d out of range (num_mws=3D%d)\n", \ + win_no, ntb->num_mws); \ return -EINVAL; \ } \ - \ - return sprintf(page, "%lld\n", ntb->mws_size[win_no - 1]); \ + idx =3D array_index_nospec(idx, ntb->num_mws); \ + return sprintf(page, "%llu\n", ntb->mws_size[idx]); \ } =20 #define EPF_NTB_MW_W(_name) \ @@ -1015,7 +1017,7 @@ static ssize_t epf_ntb_##_name##_store(struct config_= item *item, \ struct config_group *group =3D to_config_group(item); \ struct epf_ntb *ntb =3D to_epf_ntb(group); \ struct device *dev =3D &ntb->epf->dev; \ - int win_no; \ + int win_no, idx; \ u64 val; \ int ret; \ \ @@ -1026,12 +1028,14 @@ static ssize_t epf_ntb_##_name##_store(struct confi= g_item *item, \ if (sscanf(#_name, "mw%d", &win_no) !=3D 1) \ return -EINVAL; \ \ - if (win_no <=3D 0 || win_no > ntb->num_mws) { \ - dev_err(dev, "Invalid num_nws: %d value\n", ntb->num_mws); \ + idx =3D win_no - 1; \ + if (idx < 0 || idx >=3D ntb->num_mws) { \ + dev_err(dev, "MW%d out of range (num_mws=3D%d)\n", \ + win_no, ntb->num_mws); \ return -EINVAL; \ } \ - \ - ntb->mws_size[win_no - 1] =3D val; \ + idx =3D array_index_nospec(idx, ntb->num_mws); \ + ntb->mws_size[idx] =3D val; \ \ return len; \ } --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BB3C22FDEC; Wed, 17 Dec 2025 15:16:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984580; cv=fail; b=VJ4bkBHcmF2Y4obgETEyJaXwn7gF7cu1ed7pjhoMrgtGl3vVZe4hdbtOZwsUqrTTjpem2EY6vRkVXlvTr7sqRhcQQwQ7EYo+KzQbFXhvcfjj2x53aO1JtLla+9/oC3R2vcEZDhAeKZwCaRgUepZD7n9W/xKATjTN0QOLr+kbp6Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984580; c=relaxed/simple; bh=giXGEvXD2Ai+O5YhLmkxdNq8aD5ZZAyzGWCbggeYxOQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KbIqkyabP4URjQVQqIDzT9woTwG/sW63EFi3HSvUmo2S0w4ZLQZwvBaxMmNbHQXdIWFaCJpV0hIMuDhvfvKpj8eLEM5VavcCHVkLSJZGS+IgKhsPA6IQtH3FB0KkrXwyVY+jVFT8h4BJ4nfvboMUVkKIOOLoXREGqOVV3Dwrlz0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=cEHu0fo5; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="cEHu0fo5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VLYOJbcX5S7prkWdidI6qhIEDvBYlBNaxQqBVk0rsO6jbmdXH2yLeH4uEsqaeBv+nw2Kbhza80K6D7BJ2fxBG9QCatKhQAoRTXhVs4V8G6ql1s0tlV0UNf82Abvrua8KheD8rUTmOvpOCHLg8aVkncXxxZlC5l333gHmKtArrLKvo+093sRdzyPOaoBF82fMWj+kFIUP4X35avFWmARyB+mVjZBTU/7+rycM9bQaaX07hxGb3eqoP1ieHpek9jNQ68Tfn8rCZhzQO1cpKigsqKABnboZgDVSbDQyk8FYX7kB20Hz7VrL+zR1IEoM7Ev+dvhBTvngWJfnNQUu/UligQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=VD6NCTTJahO4Rf1Dji0OqiYFqVU8dPDbvWQgpvSQdFQ=; b=wmv2j7/BIFtQpB2Lmdld/wf5zll3nWfBAmEJKVvovSWOL8eIkvzeDRrLiAddVWo1a6nNJmT2sV57atJ5i45w9usFe6c1b1giEOB6I/rqYmSpa0wLJ08koLpBH68A0IEPKFX2jsKxPu/WeLab7m1NBjt0DMxUTwEJGrKLR4/U5i3vv4atGC7/w+7JzRIIDgw6FK33U2ygwpWyibNym9qgdqmp/OEXRlfvg0oHc97RLrT9bUThdnbSYYrXfIcw7dujjmkYjuTs+stfMtLYZdJ0w958qbVji/w7/wHbIZcpbSBqiYkAmYv+dYCjfLnHdr5jE+W7y8kPfsRNMhv04ruJRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VD6NCTTJahO4Rf1Dji0OqiYFqVU8dPDbvWQgpvSQdFQ=; b=cEHu0fo5SZttzWLNZ2M5LOJaHQGp0CAkGyy3rY5NGnRQ672VRa/i70JIZq8SSnZZ8wlhW2gcPypd5/XXa7kTNonRvtlz3B0SEC5CO824NTHql2AxTHJFF0dfxAiR6SWOH402/p+dvjH2BU4PThFyrtR37jeC83KNRFLimcquJ/w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:16 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:15 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 02/35] NTB: epf: Add mwN_offset support and config region versioning Date: Thu, 18 Dec 2025 00:15:36 +0900 Message-ID: <20251217151609.3162665-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0242.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::9) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: d65ab6f4-0778-4b29-fb53-08de3d7f3887 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dzw3konwxBm3fLxgM2I58wZW3SLkl1IQW9FAXFUZgRsoYiRmkSaqCBzk2ZEn?= =?us-ascii?Q?3uQojSpCH5QbkiQMSmhkSLuX5AH3kemfZ3jlFu9CB5BUXAV4iIvxo8Q9/+Ul?= =?us-ascii?Q?H7oQpBKVnxmLyDY11R7isS1jrydljFMGsE4Ss318r1p88ny5Pw+eHTGTAlRy?= =?us-ascii?Q?21Gj8ii2h5MTCu040b/NywjMS0ZuY+Yby8mtN/RFlHZ1knzucoOhhJvM3BnV?= =?us-ascii?Q?uO8bdz0fnHLo/Z2R7x3uyDPpAzGsrYVY2ycEWxeO2cEbHKB67x2FxHAGJau7?= =?us-ascii?Q?dUzAg2BbFQRbN6V6okgHqwrdObQGbjswT+TX7ftbTImT1OiBnyCqTndS/23/?= =?us-ascii?Q?FnhypMx9nx38vqkzYfwAymq+JwcKdDm/qhqrimBV3A0nDNw0yzJ+xd7Zf0ki?= =?us-ascii?Q?ia56CIXT3xvyc2uNZHnvkqCwDsbT0/lH/7EZJRZd3pr0FYn4PdYbVjEEruJM?= =?us-ascii?Q?IQ5qnN1r8yfkidFnzcuXQhskN6bxMAHcDggr9kdj5L4DHpL5o0htnAw9/7vE?= =?us-ascii?Q?yNI11vG4wucvHS921hv4wwMV4s1ZxaXCgCy0Gav1UA2l62EwnxQZDK25IvtU?= =?us-ascii?Q?62TjkOf2W7mseJJJXWNiiBl55X/PJps+NQq5olCgUz5ZZ1RSqZkBMINZupgQ?= =?us-ascii?Q?yTGPqMC93J34i42v3M3FdYH8iTxdlv1vFdceswxuqRbIIYz3amudMm9gzh3+?= =?us-ascii?Q?L7z7V69ilnOxR94eqSO+2r0zmn6Lza0XgtX0PxT6jblEz+0bWZnJuV7nrjWZ?= =?us-ascii?Q?THLREo9X5WBs4Q+RjjaPLMOuV3AIzYb1HLUoiVOshL5iB/Xc3vRjzb/egbT9?= =?us-ascii?Q?Rg6wd21g/ko+auyMFZeHmXmNdq+AJ5mlmt5are1c01kpxOnd1J7MmyOv6jMU?= =?us-ascii?Q?n8CsXu8maspGXG5czriw8Xr3WMjEs3y6DDUnLbazRPXpvSui6iTWQVWcJjys?= =?us-ascii?Q?PJ2kGbxp7FTDyTnrKIadDaodno75BG8Kjm51jApFuY1bv8CMNiNNm8jL0nmO?= =?us-ascii?Q?4DAt/HwNFOYFdHQP6offerwslcfMlrsM1D9WRfecv1NrS2d6rtPO2daEYyak?= =?us-ascii?Q?RPxX2Q3HnOy7J2jmabeBarGQtRtXKqUC8e3pvsg7HoP7Rb5nPwAGqljIDpDL?= =?us-ascii?Q?EEzrBXaWSZ/3eKsDscLwD/pu1BjLUKetv9uTDPjE13cjTjqVPEWkwkPitxJH?= =?us-ascii?Q?e1JLO51g8zGWJ8NkmNN8I+59du+ngyN1jaOiDkWnNUmhl6Agj7jGnOyCYF5r?= =?us-ascii?Q?fW/vZbJCJttB4SRcfSazE+QBVNlZllrEiK4MzzpgIiuvcfB0VdNVStPYiYx8?= =?us-ascii?Q?lHO5XipI6KTVyoGdncs1tN+K9z/Zzr8Wy2ilHm8xSvCm2P5er/p2VBiK0S9W?= =?us-ascii?Q?oes62iXUBrK1BlYWTf+QYdwDOcXGUu4lJvbmuIiHL3zkoA0+eUB7v9uoERC7?= =?us-ascii?Q?LlG8n8ChRcV5lIy+8BsSI5mWEuAcjrDg?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z1KHKf8tupxcm6iFB720xRivOmnD6mKBrDTiRX3e/j2TQK9toVuOVCjFlktP?= =?us-ascii?Q?7l+QlFIA5qH/LyKZqUCv8C3PeGVbWG3c+qzXGgT/+xXvg62+SnxeQkpMlM+o?= =?us-ascii?Q?Psf2wmQqj8Hz12DpcaIU3OwcyhKBS1Bf0bnbFvQ9RIKBZAzbODvLGv8CltND?= =?us-ascii?Q?47MKI44JKXFDbGeCIiMAH9h2dk2DS8Tu0MRck76URfZBn2qwCb/AeBXXGckq?= =?us-ascii?Q?sAID8KwLo6fblFIONe04zvSVE7RCT/gfukB22qjJbZaHSW9TGUeGMdMXgLoL?= =?us-ascii?Q?YsOkCqrxQhr+5P5/HTxh4taxwgX+bO9uXcOaGHBKwKGTlImI61uWVbsYH9m1?= =?us-ascii?Q?aJlh1doKUbbAhylwh8NBDmzdsf0XOV72Z6xm2IAHQTtsoU1WHQsxsqM+XBKC?= =?us-ascii?Q?gFy4SKgntogU6JL2FBlJJlDRGJni25tJ+2NZf/I81ZFkLSP/J7m0S3nlJ15F?= =?us-ascii?Q?UbAgfAXZqRluFTDNNwiAU0XEmI4bmF+MDNy+jPDpa5xutHBhJUk43qDMtAy+?= =?us-ascii?Q?gzRVVosNrQcBOXpA470bub3EWhbHNO2lGU4oJi7Zv/MP1n1uSVQ4HF8j/5IK?= =?us-ascii?Q?A77iRy/8XkhsW488FdVD06Q7vRnOo78YhBC6jNH0+CghX0uPVmbxe/aoMO6I?= =?us-ascii?Q?0v5XfcasumZCzvzTvTZJ4GkNIiZLT4x/OpBukW6jlR8tE5/cDs5ERdb88jQk?= =?us-ascii?Q?/q0Ulq0TYpdwMdszhuYibT6CZxh1Wpgt4UzbGNyq6UhBf5G6hcx+dkF+Sz9X?= =?us-ascii?Q?FTAFuLfW/9lN1erIJEVXgF/xlFbsEf+/1JctatR/KDs1KWcwW0FciNsmEMx2?= =?us-ascii?Q?Ez+WBFwlabIALwWy7SDTBsVVGYA8FeBpdWwzYbKUtVD2o9aOpRYeH6J6ooNC?= =?us-ascii?Q?sfmnzJR8GGz5U6irD1T15Vi90ruT6G0rFpGGyhc+QUInP6ps8oHeSKFd63r1?= =?us-ascii?Q?b0U0iUD8GsohT9LxnqooWCn0mjNrb37VIkDsXPgFX1xtCi17LtlJ8yuvArl9?= =?us-ascii?Q?8gy45HmpW7spW5UkgCqmiD8+Vj1JhrvDRgH2ZHuajt15gzTf9x93DnV0ZlOc?= =?us-ascii?Q?Gb1OHgvq/U8RhBHRDWOzasMAT1vOkWjtoHIs7Ctwvsp2qMA/gzZrcXpvvA8T?= =?us-ascii?Q?ur4uGNQIqu7P9xcDBSIhGCeIwF17Q5iEFILKMqkl9P7zJVoUY4d4ddb6dOMr?= =?us-ascii?Q?JW3BDQKdofNMDUG9yDECwDx2gQIINez6kRMz0jEupi8MXirGNzhiuh+E95Pa?= =?us-ascii?Q?l3VDY/RP2ptaq0G6Fbp/GpDgMHO4XaWjtuTnwD6r0M4j2L9n8mX3VA9mtWog?= =?us-ascii?Q?JWd5UuewRQJk6b/Bx1ExDIgAEx6K9BMzKOzkC0N1ON+VKrNHN+oTukWQqBXj?= =?us-ascii?Q?sQ56rKjQTPPqSQE4wM3PMko7W5pdEdvkyS10ZalQENkUZ0Mrg6HjAfM9H3wv?= =?us-ascii?Q?PzDefDKqjZBMod0Tsr4r9rOQN25R7Q86HYMh+FgHA/aUAENzwXAvhVJxKr2z?= =?us-ascii?Q?ugElCkn/kXH0Ik/QhYZjhTdnL/z37dhEOgH4TG3IHbsa84EAA6RMi5NynV/I?= =?us-ascii?Q?FZ4yocLBEeuoa5RoGwGY9JK96jDQI6NYh6SECOUDJHadyyAJTBmLGLGMNjok?= =?us-ascii?Q?wTWlTzAM/kQpt7ErKxfgEks=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d65ab6f4-0778-4b29-fb53-08de3d7f3887 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:15.2411 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: skeYbzjyWzARUN/MamArF/U6DWVowgswXkylL1C7egc6tYVKDZykfQDQr0bEWD7ZBn/6wg6wa6gMyagCgrpK4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Introduce new mwN_offset configfs attributes to specify memory window offsets. This enables mapping multiple windows into a single BAR at arbitrary offsets, improving layout flexibility. Extend the control register region and add a 32-bit config version field. Reuse NTB_EPF_TOPOLOGY (0x0C), which is currently unused, as the version register. The endpoint function driver writes 1 (NTB_EPF_CTRL_VERSION_V1), and ntb_hw_epf reads it at probe time and refuses to bind to unknown versions. Endpoint running with an older kernel that do not program NTB_EPF_CTRL_VERSION will be rejected early by host with newer kernel, instead of misbehaving at runtime. Signed-off-by: Koichiro Den --- drivers/ntb/hw/epf/ntb_hw_epf.c | 44 +++++- drivers/pci/endpoint/functions/pci-epf-vntb.c | 136 ++++++++++++++++-- 2 files changed, 160 insertions(+), 20 deletions(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index d3ecf25a5162..126ba38e32ea 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -30,18 +30,22 @@ #define NTB_EPF_LINK_STATUS 0x0A #define LINK_STATUS_UP BIT(0) =20 -#define NTB_EPF_TOPOLOGY 0x0C +/* 0x24 (32bit) is unused */ +#define NTB_EPF_CTRL_VERSION 0x0C #define NTB_EPF_LOWER_ADDR 0x10 #define NTB_EPF_UPPER_ADDR 0x14 #define NTB_EPF_LOWER_SIZE 0x18 #define NTB_EPF_UPPER_SIZE 0x1C #define NTB_EPF_MW_COUNT 0x20 -#define NTB_EPF_MW1_OFFSET 0x24 #define NTB_EPF_SPAD_OFFSET 0x28 #define NTB_EPF_SPAD_COUNT 0x2C #define NTB_EPF_DB_ENTRY_SIZE 0x30 #define NTB_EPF_DB_DATA(n) (0x34 + (n) * 4) #define NTB_EPF_DB_OFFSET(n) (0xB4 + (n) * 4) +#define NTB_EPF_MW_OFFSET(n) (0x134 + (n) * 4) +#define NTB_EPF_MW_SIZE(n) (0x144 + (n) * 4) + +#define NTB_EPF_CTRL_VERSION_V1 1 =20 #define NTB_EPF_MIN_DB_COUNT 3 #define NTB_EPF_MAX_DB_COUNT 31 @@ -451,11 +455,12 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *n= tb, int idx, phys_addr_t *base, resource_size_t *size) { struct ntb_epf_dev *ndev =3D ntb_ndev(ntb); - u32 offset =3D 0; + resource_size_t bar_sz; + u32 offset, sz; int bar; =20 - if (idx =3D=3D 0) - offset =3D readl(ndev->ctrl_reg + NTB_EPF_MW1_OFFSET); + offset =3D readl(ndev->ctrl_reg + NTB_EPF_MW_OFFSET(idx)); + sz =3D readl(ndev->ctrl_reg + NTB_EPF_MW_SIZE(idx)); =20 bar =3D ntb_epf_mw_to_bar(ndev, idx); if (bar < 0) @@ -464,8 +469,11 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *nt= b, int idx, if (base) *base =3D pci_resource_start(ndev->ntb.pdev, bar) + offset; =20 - if (size) - *size =3D pci_resource_len(ndev->ntb.pdev, bar) - offset; + if (size) { + bar_sz =3D pci_resource_len(ndev->ntb.pdev, bar); + *size =3D sz ? min_t(resource_size_t, sz, bar_sz - offset) + : (bar_sz > offset ? bar_sz - offset : 0); + } =20 return 0; } @@ -547,6 +555,24 @@ static inline void ntb_epf_init_struct(struct ntb_epf_= dev *ndev, ndev->ntb.ops =3D &ntb_epf_ops; } =20 +static int ntb_epf_check_version(struct ntb_epf_dev *ndev) +{ + struct device *dev =3D ndev->dev; + u32 ver; + + ver =3D readl(ndev->ctrl_reg + NTB_EPF_CTRL_VERSION); + + switch (ver) { + case NTB_EPF_CTRL_VERSION_V1: + break; + default: + dev_err(dev, "Unsupported NTB EPF version %u\n", ver); + return -EINVAL; + } + + return 0; +} + static int ntb_epf_init_dev(struct ntb_epf_dev *ndev) { struct device *dev =3D ndev->dev; @@ -695,6 +721,10 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev, return ret; } =20 + ret =3D ntb_epf_check_version(ndev); + if (ret) + return ret; + ret =3D ntb_epf_init_dev(ndev); if (ret) { dev_err(dev, "Failed to init device\n"); diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 56aab5d354d6..4dfb3e40dffa 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include =20 @@ -61,6 +62,7 @@ static struct workqueue_struct *kpcintb_workqueue; =20 #define LINK_STATUS_UP BIT(0) =20 +#define CTRL_VERSION 1 #define SPAD_COUNT 64 #define DB_COUNT 4 #define NTB_MW_OFFSET 2 @@ -107,7 +109,7 @@ struct epf_ntb_ctrl { u32 argument; u16 command_status; u16 link_status; - u32 topology; + u32 version; u64 addr; u64 size; u32 num_mws; @@ -117,6 +119,8 @@ struct epf_ntb_ctrl { u32 db_entry_size; u32 db_data[MAX_DB_COUNT]; u32 db_offset[MAX_DB_COUNT]; + u32 mw_offset[MAX_MW]; + u32 mw_size[MAX_MW]; } __packed; =20 struct epf_ntb { @@ -128,6 +132,7 @@ struct epf_ntb { u32 db_count; u32 spad_count; u64 mws_size[MAX_MW]; + u64 mws_offset[MAX_MW]; atomic64_t db; u32 vbus_number; u16 vntb_pid; @@ -454,10 +459,13 @@ static int epf_ntb_config_spad_bar_alloc(struct epf_n= tb *ntb) ntb->reg =3D base; =20 ctrl =3D ntb->reg; + ctrl->version =3D CTRL_VERSION; ctrl->spad_offset =3D ctrl_size; =20 ctrl->spad_count =3D spad_count; ctrl->num_mws =3D ntb->num_mws; + memset(ctrl->mw_offset, 0, sizeof(ctrl->mw_offset)); + memset(ctrl->mw_size, 0, sizeof(ctrl->mw_size)); ntb->spad_size =3D spad_size; =20 ctrl->db_entry_size =3D sizeof(u32); @@ -689,15 +697,31 @@ static void epf_ntb_db_bar_clear(struct epf_ntb *ntb) */ static int epf_ntb_mw_bar_init(struct epf_ntb *ntb) { + struct device *dev =3D &ntb->epf->dev; + u64 bar_ends[BAR_5 + 1] =3D { 0 }; + unsigned long bars_used =3D 0; + enum pci_barno barno; + u64 off, size, end; int ret =3D 0; int i; - u64 size; - enum pci_barno barno; - struct device *dev =3D &ntb->epf->dev; =20 for (i =3D 0; i < ntb->num_mws; i++) { - size =3D ntb->mws_size[i]; barno =3D ntb->epf_ntb_bar[BAR_MW1 + i]; + off =3D ntb->mws_offset[i]; + size =3D ntb->mws_size[i]; + end =3D off + size; + if (end > bar_ends[barno]) + bar_ends[barno] =3D end; + bars_used |=3D BIT(barno); + } + + for (barno =3D BAR_0; barno <=3D BAR_5; barno++) { + if (!(bars_used & BIT(barno))) + continue; + if (bar_ends[barno] < SZ_4K) + size =3D SZ_4K; + else + size =3D roundup_pow_of_two(bar_ends[barno]); =20 ntb->epf->bar[barno].barno =3D barno; ntb->epf->bar[barno].size =3D size; @@ -713,8 +737,12 @@ static int epf_ntb_mw_bar_init(struct epf_ntb *ntb) &ntb->epf->bar[barno]); if (ret) { dev_err(dev, "MW set failed\n"); - goto err_alloc_mem; + goto err_set_bar; } + } + + for (i =3D 0; i < ntb->num_mws; i++) { + size =3D ntb->mws_size[i]; =20 /* Allocate EPC outbound memory windows to vpci vntb device */ ntb->vpci_mw_addr[i] =3D pci_epc_mem_alloc_addr(ntb->epf->epc, @@ -723,19 +751,31 @@ static int epf_ntb_mw_bar_init(struct epf_ntb *ntb) if (!ntb->vpci_mw_addr[i]) { ret =3D -ENOMEM; dev_err(dev, "Failed to allocate source address\n"); - goto err_set_bar; + goto err_alloc_mem; } } =20 + for (i =3D 0; i < ntb->num_mws; i++) { + ntb->reg->mw_offset[i] =3D (u32)ntb->mws_offset[i]; + ntb->reg->mw_size[i] =3D (u32)ntb->mws_size[i]; + } + return ret; =20 -err_set_bar: - pci_epc_clear_bar(ntb->epf->epc, - ntb->epf->func_no, - ntb->epf->vfunc_no, - &ntb->epf->bar[barno]); err_alloc_mem: - epf_ntb_mw_bar_clear(ntb, i); + while (--i >=3D 0) + pci_epc_mem_free_addr(ntb->epf->epc, + ntb->vpci_mw_phy[i], + ntb->vpci_mw_addr[i], + ntb->mws_size[i]); +err_set_bar: + while (--barno >=3D BAR_0) + if (bars_used & BIT(barno)) + pci_epc_clear_bar(ntb->epf->epc, + ntb->epf->func_no, + ntb->epf->vfunc_no, + &ntb->epf->bar[barno]); + return ret; } =20 @@ -1040,6 +1080,60 @@ static ssize_t epf_ntb_##_name##_store(struct config= _item *item, \ return len; \ } =20 +#define EPF_NTB_MW_OFF_R(_name) \ +static ssize_t epf_ntb_##_name##_show(struct config_item *item, \ + char *page) \ +{ \ + struct config_group *group =3D to_config_group(item); \ + struct epf_ntb *ntb =3D to_epf_ntb(group); \ + struct device *dev =3D &ntb->epf->dev; \ + int win_no, idx; \ + \ + if (sscanf(#_name, "mw%d_offset", &win_no) !=3D 1) \ + return -EINVAL; \ + \ + idx =3D win_no - 1; \ + if (idx < 0 || idx >=3D ntb->num_mws) { \ + dev_err(dev, "MW%d out of range (num_mws=3D%d)\n", \ + win_no, ntb->num_mws); \ + return -EINVAL; \ + } \ + \ + idx =3D array_index_nospec(idx, ntb->num_mws); \ + return sprintf(page, "%llu\n", ntb->mws_offset[idx]); \ +} + +#define EPF_NTB_MW_OFF_W(_name) \ +static ssize_t epf_ntb_##_name##_store(struct config_item *item, \ + const char *page, size_t len) \ +{ \ + struct config_group *group =3D to_config_group(item); \ + struct epf_ntb *ntb =3D to_epf_ntb(group); \ + struct device *dev =3D &ntb->epf->dev; \ + int win_no, idx; \ + u64 val; \ + int ret; \ + \ + ret =3D kstrtou64(page, 0, &val); \ + if (ret) \ + return ret; \ + \ + if (sscanf(#_name, "mw%d_offset", &win_no) !=3D 1) \ + return -EINVAL; \ + \ + idx =3D win_no - 1; \ + if (idx < 0 || idx >=3D ntb->num_mws) { \ + dev_err(dev, "MW%d out of range (num_mws=3D%d)\n", \ + win_no, ntb->num_mws); \ + return -EINVAL; \ + } \ + \ + idx =3D array_index_nospec(idx, ntb->num_mws); \ + ntb->mws_offset[idx] =3D val; \ + \ + return len; \ +} + #define EPF_NTB_BAR_R(_name, _id) \ static ssize_t epf_ntb_##_name##_show(struct config_item *item, \ char *page) \ @@ -1110,6 +1204,14 @@ EPF_NTB_MW_R(mw3) EPF_NTB_MW_W(mw3) EPF_NTB_MW_R(mw4) EPF_NTB_MW_W(mw4) +EPF_NTB_MW_OFF_R(mw1_offset) +EPF_NTB_MW_OFF_W(mw1_offset) +EPF_NTB_MW_OFF_R(mw2_offset) +EPF_NTB_MW_OFF_W(mw2_offset) +EPF_NTB_MW_OFF_R(mw3_offset) +EPF_NTB_MW_OFF_W(mw3_offset) +EPF_NTB_MW_OFF_R(mw4_offset) +EPF_NTB_MW_OFF_W(mw4_offset) EPF_NTB_BAR_R(ctrl_bar, BAR_CONFIG) EPF_NTB_BAR_W(ctrl_bar, BAR_CONFIG) EPF_NTB_BAR_R(db_bar, BAR_DB) @@ -1130,6 +1232,10 @@ CONFIGFS_ATTR(epf_ntb_, mw1); CONFIGFS_ATTR(epf_ntb_, mw2); CONFIGFS_ATTR(epf_ntb_, mw3); CONFIGFS_ATTR(epf_ntb_, mw4); +CONFIGFS_ATTR(epf_ntb_, mw1_offset); +CONFIGFS_ATTR(epf_ntb_, mw2_offset); +CONFIGFS_ATTR(epf_ntb_, mw3_offset); +CONFIGFS_ATTR(epf_ntb_, mw4_offset); CONFIGFS_ATTR(epf_ntb_, vbus_number); CONFIGFS_ATTR(epf_ntb_, vntb_pid); CONFIGFS_ATTR(epf_ntb_, vntb_vid); @@ -1148,6 +1254,10 @@ static struct configfs_attribute *epf_ntb_attrs[] = =3D { &epf_ntb_attr_mw2, &epf_ntb_attr_mw3, &epf_ntb_attr_mw4, + &epf_ntb_attr_mw1_offset, + &epf_ntb_attr_mw2_offset, + &epf_ntb_attr_mw3_offset, + &epf_ntb_attr_mw4_offset, &epf_ntb_attr_vbus_number, &epf_ntb_attr_vntb_pid, &epf_ntb_attr_vntb_vid, --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CCB43358A4; Wed, 17 Dec 2025 15:16:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984585; cv=fail; b=mkctY0TZTT4SFKeD8ODYZ71SSo+ATLsXmjX6+9zXqoBowuo5Ji1FXinRICeOLOiKlBkJoSDVYw4yooCRy5eLo53zQWdHHAabpO8wpu08hmHxcaDWQjPfRoe1dT7KHXu50Wq3T6bWqBM+U+wXaNxw3imwG0JRnqFPxq31pxFSEJo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984585; c=relaxed/simple; bh=dinoBCJj2bnKJQv62Qeox+djGNA5UtuTaqJ4qztBoq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SdKmeoAQvmrMskQvxpNpDQQ2zCbFlAU6DfL+mT9ZLJ9VJs8zssSAb7BoPHtZYTI5Y21f8U8/c4o4nJlNFfSJXA5UyUI83Cq5oT31VXDW3B6dHEgMoAXuED2WdI5KiVM0M9GSzH0cgk2K/qXGcIqiLIvHcdPUDL4ZnnW/s3pHMaE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=hPgW/alq; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="hPgW/alq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZEYVSOlNPXkBt3A+fDO6AwBEtx2wTAcTve2SZfsMswLBcPWFWQhZBMJZ5/SvH22NHbyJM/t8L0XHf4vk0IdlvSayqtqiI3uOpPiysxx4VJtarNqGsPII9Sn4xuoQR9HBnqC9S5Oj1u+1i+m4N3bPUqSVJ7fS9Uf/WUJgfyvhepcTywb7l6S2LI9MXeMoqqY03lkhk6s5IXZl04fDW2ebCXozH4k4eS9yhbX7ztmHsQ/53wEfAJc2qO9clLcOLR6ODl1kJXAN180zUriQ1QSMmJngGqGu3NkhSQb3wjlSn9iitREI1xk0Fow8k/yGTYI5UPkEIyndVowczK5lvSo8QA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=TndGji5lg89cVye3iC5pe/TN/3ffkCrfIeu8yWxalNA=; b=RlqejTff++sxvm9HW9AjwOv2Vrw/F+ZhUOX+mA5F2JkGlnr0xCBJH3dH21VYZU2E8rvnq9dP8uh/iTlCNUx49CkTeyYeM+kb4gO66tKIe7FX94qoBQ4gfgKihiZalTT2WrB2MUtxcqCm6uoCaz9ffx9IJ+aOtXKzfUJCuMl+O3i2O35xSf86fVu7svRSDln6VccEfZGaOqw8t3QQ81+fplNLqgDgo5GKqsrcYssKD9vff/xEkESEk2yGtzzpZx4UsnX21q6qBJp+7m6CigIpFRzYBQNedoBQ82ZHV5tSHEO47m3pWB08E2pqQ76siBQVUopPKzw9gAG6LJmkVa4sXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TndGji5lg89cVye3iC5pe/TN/3ffkCrfIeu8yWxalNA=; b=hPgW/alqqa98WBiHqjMh8aDaTcCc+Y1Ziim0QRJdHjnvWyWIz1OoEQUlpdPO5LBbQumdrGFV+55P4n868OXMgL1yABhx2ZWNvbm6XH0viIpkebDjHyDfkspcycISpuDd+0dUlgG5gNM0fQXwXwzbo6EcVFxwtXAcp/9n30lPYCY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:16 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:16 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 03/35] PCI: dwc: ep: Support BAR subrange inbound mapping via address match iATU Date: Thu, 18 Dec 2025 00:15:37 +0900 Message-ID: <20251217151609.3162665-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0037.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::12) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 40879712-f8d8-4b53-ca2c-08de3d7f3907 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?uBoM97CjnEUMHFtSTBU4mXFVoRi3CO2qQ1IPmgM1Oa/TGaNvds+8EjVUruao?= =?us-ascii?Q?IwB0LBaS7q2KZGJh1/8FtnATbMQbhyBbcavKoQoohBMMijX2LIioixvhFk0s?= =?us-ascii?Q?KWiwTKRzQA8L6I7qMCJrkLhbeJLvxZh7MYMxwrmmcWi+0KrWiZbav8J3Fzkk?= =?us-ascii?Q?OdgbN0fML+bSQtUsTqsMPmva3KVBcgXpT9JDd/4W6gGVPTJwA4k/xr95pFPG?= =?us-ascii?Q?31PBOE9CSFQygxV3sAFCvp3XnDqPijDzLd2Tb0Rr71AtJ6H3sWfXvc7TVfDo?= =?us-ascii?Q?Dz/QVgVCw3YJWL7rrRcS2Fb6clA+Tzk9OaaaNeFsFUSjrjM7U2m4HNAYifs/?= =?us-ascii?Q?8MFfIlJLzWPm3yAu7uA4GxnP2/tpLB/MTrxbMqGgcLtJHuO76nVNnR4YdbmE?= =?us-ascii?Q?qQ32dCgboQmGWaTRKXLxBkYHlSUcxehZmr+C7FBlhCiJhHXa8cPw4mu9N5x8?= =?us-ascii?Q?UGPDOw+8MQdnWVJgp3G7kxzzg+m1pSOI3xIveNm9dece18zd5bBL6ML/HQiN?= =?us-ascii?Q?Cxbt2Wr3Qdd8CPAqpVsm/eCbjjjYiyRF5R4wr8aNPo5bPUD/B69+i5HcfDt2?= =?us-ascii?Q?94CtTmykhSiJmywjMLtol7qMn5n7bfKfsRvViKLPvCdv+K1sQ80qteavxnyj?= =?us-ascii?Q?S9hMysy2w9UhOgbs7SPrPeKStElD9OP6CEs2XkPDtWVoVk4WnWacOUqWONrs?= =?us-ascii?Q?drBhnFvxooxM5VJ2sCw2qAOzKTaJCU8TxBlfW90JtempzRy1jpC/Ugaa/8m3?= =?us-ascii?Q?yUh6cvObXTe/Wh6hJ3vOILxVUQtLjo84XExUuxNw9LAe+34hrbvmy9Cz6cuj?= =?us-ascii?Q?cOh1nEswG6BHlTG6QQASzRkpxOetBKP0M8xEXjpvkhMGPPsgBKq/eULjc8yY?= =?us-ascii?Q?g3V+9MtmY9+aXF+u94CfnA6H+O+cTjqQcMYOaM7oYLdlaHL8i8kIQJ2g0bXZ?= =?us-ascii?Q?wItgxygnwkrB7vM3lUGiyNkmsSZbpiWuuxFHz1T/7IBp+otEGobCXPlfbFkO?= =?us-ascii?Q?f3b0a5YBCfciItX9tdMF6jUnja6JZrm88OgDz/yXk31bf6T8/lOJ/CwCl243?= =?us-ascii?Q?hFbS6Bwgw1tPiyJsy7fl6ecWIB05vOfJ2Q7xKn2FM13sh7dZz7tvpS7SfKz1?= =?us-ascii?Q?WHjgs/d7lVKQweS67SsrqP/uQfTBx9PCYE+daVEjkJK/Qm8dVPBvnRtLzA0z?= =?us-ascii?Q?tDbAOSuqQYlFr7ckF7uWRPzzthhR84UiR7lNYJMr1paoXEgPUf+ZxeNpmgld?= =?us-ascii?Q?sJ2XOt7PsaD/r7HFldcaJW05wRH6DTH5Bedm3l2uLbtG9d6rZ24NAMalHsHX?= =?us-ascii?Q?g+EOgdKHily9h2+Ngh2oQfVdNSIkdfBGDbEIRlPvHhUPHRACyJGXWV5CPhFQ?= =?us-ascii?Q?qXL5EdaVFGwgvNGMYEtDNeyJ2vOLFEyHRFYX54MN1R6hyURpcxCApXafSQl0?= =?us-ascii?Q?HJOHBL2gqWWEd+bKZvBXEAEeEqUSYReb?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pi74Wjy4cO+fJjw8SZ8R+XjjQfmKdkYChZQ8u5xvqPREhP/hfoIBY+urDe1E?= =?us-ascii?Q?YAr9eo/zFYS3lu4jc8o2nOv5Dg5DrFct8OJftPu6g/tkQH7vOovkAvAcxqCW?= =?us-ascii?Q?tqwqamhqArvn1ub+VVnQhy+jSGcHlyQdSME3gRlsCT011/jCQhQcgH35b4wo?= =?us-ascii?Q?n8LhnGU9SBFanuM/Wc8d33C3SJA3jqPCXody9rMUmjXCz7ZxqNPnlPUU+xtu?= =?us-ascii?Q?PRbTgxXoesMky1kzIfhS0514qGRDfwRLK0DWTs4vHhoOC/x1fTnCZ7JG1ln1?= =?us-ascii?Q?Qd1NBvYkBQz6q/pCyywn6J4genCNztCori+ujXMv8Xl3QMPsYppIgOAtOgg6?= =?us-ascii?Q?OzOhJDs22XrbGKLYphzFol2kamkGKpXDhes5wiokd+DFybFY9yKPmhhOWgUz?= =?us-ascii?Q?n3wYyKA9nFV5kQ+vZQrW/2LHrGkfZbwoeIEb3r4o0OH3AyTiCXgq90/318Xe?= =?us-ascii?Q?nqbp3xAgbsuE2FuziaDP2GwlqaWWg85k/S5obiLkNKqz2z+QZGxgE48rqRXw?= =?us-ascii?Q?qCFHtiM4jG+rBbQXI1I55kEXSdLIP7ehX8jBQfAulEAzpFDLfhp6dxv/g8H1?= =?us-ascii?Q?5kJQVOUmWldqlIndBlcL9NEuO4ioF3d65PhpnSLqKKhUuwHrFZqbXpV9JUEm?= =?us-ascii?Q?xLH6maqC75W+YAyWBAzC2L7QAvKrJLAGXW0YZvjvnsJoNu6wyjUiVZz4IRW1?= =?us-ascii?Q?EGedBdvE5m+ZgmvFS2FZ+Jhv2scMKzeIgmDYXCB4k9KAaq1z8aeclsNpR0TP?= =?us-ascii?Q?/Nszft8IupKAxWHgEOeSHur7jLvbMoOE6NuZhuzHNh6rBHdMADNTWS2hzK1P?= =?us-ascii?Q?dFwfbItdhTRrTUUU5O7vw+uJvtoFJgOhB/po7HxdHMY1FO1kThQtouH2FD1/?= =?us-ascii?Q?FliVMSfLZauVZCBrk/hr2nZBjGpxQq0OUmibvfMTDJAHuyuNOtyhebragAeD?= =?us-ascii?Q?nidXKjSiuaKB6i4gPZXRFTdrXgApiwZK5nQ/5dY+ssS6ljpqrmqrAPRTNOqI?= =?us-ascii?Q?W8QwG/oSQS38/+nnQKYtB0/10oOLgyHdGck3mup1sbs+T0OGLngcylorCNNZ?= =?us-ascii?Q?cCfUl+XSyfL53A+I62L9h+drE1AUeJUiJLY4UIc6/6Dfw3BcGnPCAig2GNmP?= =?us-ascii?Q?WOll1OfXS87UCnEZ/SUbpJb9QGNF1SHloZciqL4oqYFh0uOveKcH52p/FI5J?= =?us-ascii?Q?hO8ykRIOUZlVfToGEyiv1gyJi0KMRt8jjTL+0j0+tCpwLJIIypq8RC6piNm3?= =?us-ascii?Q?LBj88OIosDVN5j481qWn2QsFoXRDjuaVaZQ8IFxZzX6Z9SXIZEIPi7zPsNfd?= =?us-ascii?Q?I3qZOq1H1QMd9Rq/bUQalIzwmXHKjJx2esn7p6gNwxoH6OjEESAE9/mcYTqv?= =?us-ascii?Q?BQe6yhhYV9EJupdn9xysBNlMpAQRpxQODsVCKuWBzd96Q3y3yG27ddKOwByR?= =?us-ascii?Q?XlcIlpb5/AuSeqkATS89jbMsPiyJWiKTMVkGXeOSKW4aC9L0zdKsYbCxW/7f?= =?us-ascii?Q?qS55/i4n2YqaGKmbHMq0a5TlCRroS4lyf8BruKSymO2i+9ZSXsjK0i3sz8QQ?= =?us-ascii?Q?2o1knVdsCn8DSw0+RTnUIp1+Ls4CGBA7O6poS3RDkBjcdY6fjSBfBCtaUPMA?= =?us-ascii?Q?pkWEKshy0YcBfA7Q2KimGzk=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 40879712-f8d8-4b53-ca2c-08de3d7f3907 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:16.0940 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sA0RavGibqa+QmsKCLSy1hoRre9sVmc2jYsvG/SppcedTBcnH6GTRSg90lJ8zmvzDGS4qvwoPU/B8gbfnZjCPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Extend dw_pcie_ep_set_bar() to support Address Match Mode IB iATU with the new 'submap' field in pci_epf_bar. The existing dw_pcie_ep_inbound_atu(), which is for BAR match mode, is renamed to dw_pcie_ep_ib_atu_bar() and the new dw_pcie_ep_ib_atu_addr() is introduced, which is for Address match mode. Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 197 ++++++++++++++++-- drivers/pci/controller/dwc/pcie-designware.h | 2 + drivers/pci/endpoint/pci-epc-core.c | 2 +- include/linux/pci-epf.h | 27 +++ 4 files changed, 215 insertions(+), 13 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index e94cde1a3506..9480aebaa32a 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -139,9 +139,10 @@ static int dw_pcie_ep_write_header(struct pci_epc *epc= , u8 func_no, u8 vfunc_no, return 0; } =20 -static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, u8 func_no, int t= ype, - dma_addr_t parent_bus_addr, enum pci_barno bar, - size_t size) +/* Bar match mode */ +static int dw_pcie_ep_ib_atu_bar(struct dw_pcie_ep *ep, u8 func_no, int ty= pe, + dma_addr_t parent_bus_addr, enum pci_barno bar, + size_t size) { int ret; u32 free_win; @@ -174,6 +175,151 @@ static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *= ep, u8 func_no, int type, return 0; } =20 +struct dw_pcie_ib_map { + struct list_head list; + enum pci_barno bar; + u64 pci_addr; + u64 parent_bus_addr; + u64 size; + u32 index; +}; + +static struct dw_pcie_ib_map * +dw_pcie_ep_find_ib_map(struct dw_pcie_ep *ep, enum pci_barno bar, u64 pci_= addr) +{ + struct dw_pcie_ib_map *m; + + list_for_each_entry(m, &ep->ib_map_list, list) { + if (m->bar =3D=3D bar && m->pci_addr =3D=3D pci_addr) + return m; + } + + return NULL; +} + +static u64 dw_pcie_ep_read_bar_assigned(struct dw_pcie_ep *ep, u8 func_no, + enum pci_barno bar, int flags) +{ + u32 reg =3D PCI_BASE_ADDRESS_0 + (4 * bar); + u32 lo, hi; + u64 addr; + + lo =3D dw_pcie_ep_readl_dbi(ep, func_no, reg); + + if (flags & PCI_BASE_ADDRESS_SPACE) + return lo & PCI_BASE_ADDRESS_IO_MASK; + + addr =3D lo & PCI_BASE_ADDRESS_MEM_MASK; + if (!(flags & PCI_BASE_ADDRESS_MEM_TYPE_64)) + return addr; + + hi =3D dw_pcie_ep_readl_dbi(ep, func_no, reg + 4); + return addr | ((u64)hi << 32); +} + +/* Address match mode */ +static int dw_pcie_ep_ib_atu_addr(struct dw_pcie_ep *ep, u8 func_no, int t= ype, + struct pci_epf_bar *epf_bar) +{ + struct pci_epf_bar_submap *submap =3D epf_bar->submap; + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + enum pci_barno bar =3D epf_bar->barno; + struct dw_pcie_ib_map *m, *new; + struct device *dev =3D pci->dev; + u64 pci_addr, parent_bus_addr; + u64 size, off, base; + unsigned long flags; + int free_win, ret; + u32 i; + + if (!epf_bar->num_submap) + return 0; + + if (!submap) + return -EINVAL; + + base =3D dw_pcie_ep_read_bar_assigned(ep, func_no, bar, epf_bar->flags); + if (!base) { + dev_err(dev, + "BAR%u not assigned, cannot set up sub-range mappings\n", + bar); + return -EINVAL; + } + + for (i =3D 0; i < epf_bar->num_submap; i++) { + off =3D submap[i].offset; + size =3D submap[i].size; + parent_bus_addr =3D submap[i].phys_addr; + + if (!size) + continue; + + if (off > (~0ULL) - base) + return -EINVAL; + + pci_addr =3D base + off; + + new =3D devm_kzalloc(dev, sizeof(*new), GFP_KERNEL); + if (!new) + return -ENOMEM; + + spin_lock_irqsave(&ep->ib_map_lock, flags); + m =3D dw_pcie_ep_find_ib_map(ep, bar, pci_addr); + if (m) { + if (m->parent_bus_addr =3D=3D parent_bus_addr && + m->size =3D=3D size) { + spin_unlock_irqrestore(&ep->ib_map_lock, flags); + devm_kfree(dev, new); + continue; + } + + ret =3D dw_pcie_prog_inbound_atu(pci, m->index, type, + parent_bus_addr, pci_addr, + size); + if (!ret) { + m->parent_bus_addr =3D parent_bus_addr; + m->size =3D size; + } + spin_unlock_irqrestore(&ep->ib_map_lock, flags); + devm_kfree(dev, new); + if (ret) + return ret; + continue; + } + + free_win =3D find_first_zero_bit(ep->ib_window_map, + pci->num_ib_windows); + if (free_win >=3D pci->num_ib_windows) { + spin_unlock_irqrestore(&ep->ib_map_lock, flags); + devm_kfree(dev, new); + return -ENOSPC; + } + set_bit(free_win, ep->ib_window_map); + + new->bar =3D bar; + new->index =3D free_win; + new->pci_addr =3D pci_addr; + new->parent_bus_addr =3D parent_bus_addr; + new->size =3D size; + list_add_tail(&new->list, &ep->ib_map_list); + + spin_unlock_irqrestore(&ep->ib_map_lock, flags); + + ret =3D dw_pcie_prog_inbound_atu(pci, free_win, type, + parent_bus_addr, pci_addr, size); + if (ret) { + spin_lock_irqsave(&ep->ib_map_lock, flags); + list_del(&new->list); + clear_bit(free_win, ep->ib_window_map); + spin_unlock_irqrestore(&ep->ib_map_lock, flags); + devm_kfree(dev, new); + return ret; + } + } + + return 0; +} + static int dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, struct dw_pcie_ob_atu_cfg *atu) { @@ -204,17 +350,34 @@ static void dw_pcie_ep_clear_bar(struct pci_epc *epc,= u8 func_no, u8 vfunc_no, struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); enum pci_barno bar =3D epf_bar->barno; - u32 atu_index =3D ep->bar_to_atu[bar] - 1; + struct dw_pcie_ib_map *m, *tmp; + u32 atu_index; =20 - if (!ep->bar_to_atu[bar]) + if (!ep->epf_bar[bar]) return; =20 __dw_pcie_ep_reset_bar(pci, func_no, bar, epf_bar->flags); =20 - dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, atu_index); - clear_bit(atu_index, ep->ib_window_map); + /* BAR match iATU */ + if (ep->bar_to_atu[bar]) { + atu_index =3D ep->bar_to_atu[bar] - 1; + dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, atu_index); + clear_bit(atu_index, ep->ib_window_map); + ep->bar_to_atu[bar] =3D 0; + } + + /* Address match iATU */ + guard(spinlock_irqsave)(&ep->ib_map_lock); + list_for_each_entry_safe(m, tmp, &ep->ib_map_list, list) { + if (m->bar !=3D bar) + continue; + dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, m->index); + clear_bit(m->index, ep->ib_window_map); + list_del(&m->list); + kfree(m); + } + ep->epf_bar[bar] =3D NULL; - ep->bar_to_atu[bar] =3D 0; } =20 static unsigned int dw_pcie_ep_get_rebar_offset(struct dw_pcie *pci, @@ -364,10 +527,14 @@ static int dw_pcie_ep_set_bar(struct pci_epc *epc, u8= func_no, u8 vfunc_no, /* * We can only dynamically change a BAR if the new BAR size and * BAR flags do not differ from the existing configuration. + * When 'use_submap' is true and the intention is to create + * sub-range mappings perhaps incrementally, epf_bar->size + * does not mean anything so no need to validate it. */ if (ep->epf_bar[bar]->barno !=3D bar || - ep->epf_bar[bar]->size !=3D size || - ep->epf_bar[bar]->flags !=3D flags) + ep->epf_bar[bar]->flags !=3D flags || + ep->epf_bar[bar]->use_submap !=3D epf_bar->use_submap || + (!epf_bar->use_submap && ep->epf_bar[bar]->size !=3D size)) return -EINVAL; =20 /* @@ -408,8 +575,12 @@ static int dw_pcie_ep_set_bar(struct pci_epc *epc, u8 = func_no, u8 vfunc_no, else type =3D PCIE_ATU_TYPE_IO; =20 - ret =3D dw_pcie_ep_inbound_atu(ep, func_no, type, epf_bar->phys_addr, bar, - size); + if (epf_bar->use_submap) + ret =3D dw_pcie_ep_ib_atu_addr(ep, func_no, type, epf_bar); + else + ret =3D dw_pcie_ep_ib_atu_bar(ep, func_no, type, + epf_bar->phys_addr, bar, size); + if (ret) return ret; =20 @@ -1120,6 +1291,8 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep) struct device *dev =3D pci->dev; =20 INIT_LIST_HEAD(&ep->func_list); + INIT_LIST_HEAD(&ep->ib_map_list); + spin_lock_init(&ep->ib_map_lock); ep->msi_iatu_mapped =3D false; ep->msi_msg_addr =3D 0; ep->msi_map_size =3D 0; diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index f555926a526e..1770a2318557 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -476,6 +476,8 @@ struct dw_pcie_ep { phys_addr_t *outbound_addr; unsigned long *ib_window_map; unsigned long *ob_window_map; + struct list_head ib_map_list; + spinlock_t ib_map_lock; void __iomem *msi_mem; phys_addr_t msi_mem_phys; struct pci_epf_bar *epf_bar[PCI_STD_NUM_BARS]; diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index ca7f19cc973a..2b95dbc7242a 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -604,7 +604,7 @@ int pci_epc_set_bar(struct pci_epc *epc, u8 func_no, u8= vfunc_no, (epc_features->bar[bar].fixed_size !=3D epf_bar->size)) return -EINVAL; =20 - if (!is_power_of_2(epf_bar->size)) + if (!epf_bar->num_submap && !is_power_of_2(epf_bar->size)) return -EINVAL; =20 if ((epf_bar->barno =3D=3D BAR_5 && flags & PCI_BASE_ADDRESS_MEM_TYPE_64)= || diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 48f68c4dcfa5..126647b9f01e 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -110,6 +110,25 @@ struct pci_epf_driver { =20 #define to_pci_epf_driver(drv) container_of_const((drv), struct pci_epf_dr= iver, driver) =20 +/** + * struct pci_epf_bar_submap - represents a BAR subrange for inbound mappi= ng + * @phys_addr: physical address that should be mapped to the BAR subrange + * @size: the size of the subrange to be mapped + * @offset: The byte offset from the BAR base + * @mapped: Set to true if already mapped + * + * When @use_submap is set in struct pci_epf_bar, an EPF driver may descri= be + * multiple independent mappings within a single BAR. An EPC driver can use + * these descriptors to set up the required address translation (e.g. mult= iple + * inbound iATU regions) without requiring the whole BAR to be mapped at o= nce. + */ +struct pci_epf_bar_submap { + dma_addr_t phys_addr; + size_t size; + size_t offset; + bool mapped; +}; + /** * struct pci_epf_bar - represents the BAR of EPF device * @phys_addr: physical address that should be mapped to the BAR @@ -119,6 +138,9 @@ struct pci_epf_driver { * requirement * @barno: BAR number * @flags: flags that are set for the BAR + * @use_submap: set true to request subrange mappings within this BAR + * @num_submap: number of entries in @submap + * @submap: array of subrange descriptors allocated by the caller */ struct pci_epf_bar { dma_addr_t phys_addr; @@ -127,6 +149,11 @@ struct pci_epf_bar { size_t mem_size; enum pci_barno barno; int flags; + + /* Optional sub-range mapping */ + bool use_submap; + int num_submap; + struct pci_epf_bar_submap *submap; }; =20 /** --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D572A327C16; Wed, 17 Dec 2025 15:16:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984588; cv=fail; b=JJTmVgRsGAlp0+Wj0gzOVUGq2W5aZDVtemfPlon/2KFm5+DoRwn4j7NO681VFwJbuHiHgtpwKf3k6aHDlqsQopyslH3RcK3ymX5pZbzPTaSOJ/SiFQCLQ0p6HWV7oRnlxPIbFDzKnv8sKB6vtuit/0ziWAwe3HjGEYi2JzfeG4c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984588; c=relaxed/simple; bh=2u3lyzFsEoriGSBKZFVhMcyrxqLnTLHLtKL/GpAejm0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Gw1rRwTXv9cQ22UQwwtYQuJlQ9flw8fEe/l0P66ZySDyEcHcimZ9397X4JS7CFlySPvpQoUcjGZ/wV7BVmKh+E+3Wgdddmv5BMnWvgn5MRF/mmIiKup6ueRB1ArWQeexLDTinVmyOwIYbBQ8dGo8uLAxm5yrk9+2ZqbEFkOMfcQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=gkDNkU88; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="gkDNkU88" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sUDuSmnp2c0WNPCXSYFkp/keXu+jZtOEutVeOnZJ3wH23WBgJDorVKxqwWTRNp324HwQ3s5Xc3RRuef8TcYHLyXiDYaJcUW8fRKkOdNkB3K+s7Bd/zMJ6z5t7Yh91KM+df/tvYbWIjHB6cb1Dfa7+cc23ItK15KJ4yP5cDGUpGpOw5gEPQ0vW5DEV7A2ClLVRdc5Hm6JdQFlm6Oz4sQV/vVI0xszeayiYgb2H2Ag7UBPiGzDb+RlmUpO/m3jh/JuD71c+TLOx35C/a87F9ahe0TBzLm684mzBean+YRyotvCO+LbklLVGPuGk5665Kml5xdOYrvRPpl6UVfZcUstXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=e0PeFBjEMLUdkexj1/MJOCFfd1OFOpcl4uLb7EqfGkg=; b=rv+aQTaWHVLQHAtqvhLJNFHrY0LTFscDkbrKBiWbE0kI86WdcorQzZw3Bgm9vyo4vXfpLGz+UivdMRbSV4Yl0+jcRqzGtgIoUzUNUKkblrg5OCQWbzRjuTeXPCfEczuln/9O7nlPYuSSWPvbUdU/gvhchFmnjtZAeKBNSJUcui5cQWxAP9Q9QRLukp3a8kJbeWCEqXGrFVmaTPz9/ISp2fP2s8j4K1G8srQlpcuoiT8AMPQ2AR590fg/UB5K+L7RDmXZ6XjqvMPJBfphgr6tTlSAa+Wz23Ev30Fv3vSe+Tiw5fGanbaXk8RdVCH1n3SJJ+ipbUoCX3wAMpMixXeOSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e0PeFBjEMLUdkexj1/MJOCFfd1OFOpcl4uLb7EqfGkg=; b=gkDNkU8860YgprETxvbd4qJXUnfzJxNUkvH/cVJOcPw7FULUFynfGRaUAC3eSSiACPIpgMto+veGSV0RxcLHuGINtl4f7eZvgSJiv7XyB6/QbNy18ieqLfokZfafX2XvChYJOGIUC9VD0h5SRWoD3NYFqY4DbZAhlWfwPdvUrcU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:17 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:17 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 04/35] NTB: Add offset parameter to MW translation APIs Date: Thu, 18 Dec 2025 00:15:38 +0900 Message-ID: <20251217151609.3162665-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0003.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:26d::13) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: f3ec2af5-4910-4272-2f3b-08de3d7f3990 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zQGnDVmMckRaUssL1uD9+uQ4TgsMfRmk1Q1HJCUvrJOwGY3C2OmVhNFZGEkP?= =?us-ascii?Q?kthNWG8YVfnvxtdXGkbSI57WzhBS3i8O7isRInBefVDlkDd6YMWKOWyr5Q6r?= =?us-ascii?Q?28hZuK0B9XCVsg/d44WySwcVkU/pDfAla0NJIgmdORXkXQ8yQu+S/cHQzzp3?= =?us-ascii?Q?06RL1ALxnkDLKf16VsIASilJu1xnucofNXfaY73zpzKbHr8XxENLe8uz5f/f?= =?us-ascii?Q?yjnczuXmezJct+TqChAo3C27wd+PcwLwK82NvtQjUh1HACG+4/AozgOVq+dX?= =?us-ascii?Q?LMbLbjzKUM5dXNCVsq6VPv4WaiHWacNEnKnJ+str7qyvO9KowfQ1q/AM2T1N?= =?us-ascii?Q?O+Qr3PVMek7TeMYaruC97LnESPOn5Ycr+fLt4ntACtXZ7L94SWZuZCs+naTz?= =?us-ascii?Q?6vwHW+TCOqIFIgXllp5LYnxDybqvh0j02vI04G4bxpTUcahcJ0UeDV/MtgNl?= =?us-ascii?Q?IyXdwppm+J6xr24F3OaiTpxRcaqs62XaJIuaTByXfkI1GyZHEEI5xGvj9OqH?= =?us-ascii?Q?cYQzSTE1HtUx0Oz4LKzfPXt5+m/wNXLjnoGHVJCLlpa/S64UuBc2YyyRmywp?= =?us-ascii?Q?YPI7ThktE14h8E8mQD/aDUdsKOkGx/wYLsCmVa5YzZwHn1CrdRt7I8pIUkBN?= =?us-ascii?Q?ScNNtSfGwxX1EhZGTCdNVvckDTiqVV4h8nmPKcNmH0tVE5IfEVLX/qBphLwu?= =?us-ascii?Q?M8VAtI4zdDoEv+Z8rA3++7LlGqbMO3I5bR6NIFfmYKGfPNT8bUx9Phvd5Dh7?= =?us-ascii?Q?04ZdldmDQAqqILWkZScv8pdsQeFXhEW6ax7QmHAzolMKuHAyK3sBG1dKxuWj?= =?us-ascii?Q?C/C1Yu7s+yIkmIzy6hrtibWU6j9TybXdr50yJlR+kVvaeumAaWLeBUsfnISm?= =?us-ascii?Q?3RxLNkvAQmQUt75AWhTurO7uoshSTOSZGM1jrZgQNTfOA6O/kX5zzUOl+6Jr?= =?us-ascii?Q?Kg+kKSLIaCyD2y/2qqcJwaGpGXKnbD9Vrpj4xSOCDfATb+fBHBsEdbcH0roN?= =?us-ascii?Q?aesCXKCw4NYqlbc9F35WN//ImS7eMgNEHv9se0zE799a4xx5sQ0p3e13Bagl?= =?us-ascii?Q?l4o1zFz6CRbMuleKg3bndXRkkQZqvv9IvvO/4schPB+4XFWLiL7opYh1O1m/?= =?us-ascii?Q?YdiMN/H5f63TtG3XbPJb6H7CDN7qOfcd6HQ92wfL0ckvL7qz3a9fR/NcSggt?= =?us-ascii?Q?VgV5JdZGy4ri3M0eFs/9nlxgoWIOfEMc3GZx4/kxilp5AbhVmwEsNusEgSTe?= =?us-ascii?Q?+rudUDjFWwo9PgLQjuOtbgP0QVYWyvoI4R3hJx40fhXf0c2EtDMTH9PauGBn?= =?us-ascii?Q?nl+BwuAsLQAUGI7X4brJ30uZhgUgr6jFg5IY2OX/jt67BZnXixn52OzDli45?= =?us-ascii?Q?WUhGmr/IPTlsEfDDAqMshB/Dmyw8U6La+uo8DlfgyyfFsHX01hGhlSQnCMuu?= =?us-ascii?Q?+d3ByPM8EchweTlnBT6JjVwCR1GpHk5C?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YU1tMIj+fo0qo2/9bNef4vIoQkV1pNoR4Dp01atiKxoMK9vqpTSNa993ctiy?= =?us-ascii?Q?g8D4rV8vOTC9SM+bzEAdLpXe6jwFI/qpUgkNgiD5xRgr+PSH+s7dk+69zNNu?= =?us-ascii?Q?d8eEElnvmTAKaLLENtTjMwkoq5Nbqo2sh60nxSaBgtGMqmwRW2suyG/G0CwY?= =?us-ascii?Q?d9GJTFsSjZLOZrhT7TH0WdT6DleWpJHDBcMVVk21pkHiQtk8Oe5x4qxCQzqL?= =?us-ascii?Q?rKD6uImA+1Y8bLtHEEB075mdeOWChp0WOF+wkG4umoWEuKZUs5sV1o9Lcu9E?= =?us-ascii?Q?2NiX2r0PUYRx+rk234r5w9//PgdQwEm/RZLVUSz9Zb/Znu0v8Vrm2rRNj4wz?= =?us-ascii?Q?Lxld47WKQO5eoKovc4DW+A9bYdt35ItoPfHX9hcN380t62lHYNArjGH0teij?= =?us-ascii?Q?gg7PPLcDZAy0ZUEyj2izh4aHickLRVP9xdXRJBZysAAykFyOpBgbgqRJAy5Q?= =?us-ascii?Q?xfRTLN0/x5bAO+ooW4LMt08dk6uWg+R5zXLAWLFI5Ga2jgak4ZV353sPxFbL?= =?us-ascii?Q?T+NQk9ycMN+u+upSEF3+TBEDyZG08O9FLurLZv76Ofg59KXMo5glco3cZqfr?= =?us-ascii?Q?StM1Qak5k1/UD3JAlEqdBZix4uWBjoP/iPvQHnWSHhFQK8WyNg/gw1FFFwoK?= =?us-ascii?Q?yA6GMpPhpZkv+5tu/RnK8ZM9LML48VYNZCvDHxtucsENdWmtzWMBpkKVZ+QM?= =?us-ascii?Q?44R81ib9o7jNrPHqFWLJhXnj2vgqCleJ3j+ZjYflCn+qDwqQ3r4YQQQjt1Iu?= =?us-ascii?Q?xPEJkGDKDycSU1YJNLqfSvadm41NGaubFCQw38pSB5kpbrZrERWI1Ju0Xxf4?= =?us-ascii?Q?JIxnoWCi8ArAD0937kI6hOQobvcR2b/tKaBGaTtlfQ8h9fTIKdLKrsvH3GDm?= =?us-ascii?Q?nVrcmrduiXV6Hh0XHp783OPjHPlE/DDmTjiItgMOJn0lEp8aRNFOQuI4tYg9?= =?us-ascii?Q?fPfJS3FKd7j1txAjuW0ZUTTvyHad1uOh82sy5+FqREOCSnlzfqJJg1Eo2RDt?= =?us-ascii?Q?koYks4pciSPFSxLxKwOB7JsHrnk6QpZ76tYP8rx1jmcvtZS0RxQQsgzS8hHe?= =?us-ascii?Q?LwKdfn0FyJvBpk6Afkucy0J58x6cndosFtwvwNkSKiHm3smRkn5DzdA4M4gZ?= =?us-ascii?Q?sDIlJZsC8YxB8gpqF3RWcGmrx5nfP3C1oaYjkDBwBM7JZfMPhn47hjAoeYEY?= =?us-ascii?Q?ZOTk67xin+WhBqJ6VMjJ6D77irfJXQigScmptq0NSwdKhKu10q8njupwZTh2?= =?us-ascii?Q?tYaj3QzgUlVfeO6tnLRVFWBhf0BMbHXK0dcPYB8MT/Yuuaat0OgEsODB0cg0?= =?us-ascii?Q?9H7A1Zb3ZE8+fZvXfjGR3Lkjq0R2tEU+MKsEa1Bq3IQwTdkWmV9lHG7xVEiI?= =?us-ascii?Q?xmkmTTwiOX2qfBezcIUF0cr+eSPY2Stk1Dm67DUtBo2OqfFQMAQGpaRCNgsC?= =?us-ascii?Q?EuG/B+/rJaRKJMvspash+FJ+YzIkjpSAD0Rxqmm1GqDpVZPlvyHNJbdHH8qi?= =?us-ascii?Q?5aiFFcSLDHr+rfMlidGDatj+MI09NJJM67mt4sihDzUA2ApA6wkCYV5y2t63?= =?us-ascii?Q?hoNvnu97RshbTqRq+vjcYJLfkvI6HgrisVv/t8s0RoDaMmw4HaZa0/7nvnUb?= =?us-ascii?Q?jVw20j2NfQpySgfqpJ2gMv0=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f3ec2af5-4910-4272-2f3b-08de3d7f3990 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:16.9787 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L5dAGYJD9XIeEwDXzDIutLNUxMMhcvCO4DGuNQngss/tPti/s8/Hs2u8nGNaApAMABWEuJr2QFBhOQd3TFz5vA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Extend ntb_mw_set_trans() and ntb_mw_get_align() with an offset argument. This supports subrange mapping inside a BAR for platforms that require offset-based translations. Signed-off-by: Koichiro Den --- drivers/ntb/hw/amd/ntb_hw_amd.c | 6 ++++-- drivers/ntb/hw/epf/ntb_hw_epf.c | 6 ++++-- drivers/ntb/hw/idt/ntb_hw_idt.c | 3 ++- drivers/ntb/hw/intel/ntb_hw_gen1.c | 6 ++++-- drivers/ntb/hw/intel/ntb_hw_gen1.h | 2 +- drivers/ntb/hw/intel/ntb_hw_gen3.c | 3 ++- drivers/ntb/hw/intel/ntb_hw_gen4.c | 6 ++++-- drivers/ntb/hw/mscc/ntb_hw_switchtec.c | 6 ++++-- drivers/ntb/msi.c | 6 +++--- drivers/ntb/ntb_transport.c | 4 ++-- drivers/ntb/test/ntb_perf.c | 4 ++-- drivers/ntb/test/ntb_tool.c | 6 +++--- drivers/pci/endpoint/functions/pci-epf-vntb.c | 5 +++-- include/linux/ntb.h | 18 +++++++++++------- 14 files changed, 49 insertions(+), 32 deletions(-) diff --git a/drivers/ntb/hw/amd/ntb_hw_amd.c b/drivers/ntb/hw/amd/ntb_hw_am= d.c index 1a163596ddf5..c0137df413c4 100644 --- a/drivers/ntb/hw/amd/ntb_hw_amd.c +++ b/drivers/ntb/hw/amd/ntb_hw_amd.c @@ -92,7 +92,8 @@ static int amd_ntb_mw_count(struct ntb_dev *ntb, int pidx) static int amd_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct amd_ntb_dev *ndev =3D ntb_ndev(ntb); int bar; @@ -117,7 +118,8 @@ static int amd_ntb_mw_get_align(struct ntb_dev *ntb, in= t pidx, int idx, } =20 static int amd_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct amd_ntb_dev *ndev =3D ntb_ndev(ntb); unsigned long xlat_reg, limit_reg =3D 0; diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index 126ba38e32ea..89a536562abf 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -167,7 +167,8 @@ static int ntb_epf_mw_count(struct ntb_dev *ntb, int pi= dx) static int ntb_epf_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct ntb_epf_dev *ndev =3D ntb_ndev(ntb); struct device *dev =3D ndev->dev; @@ -405,7 +406,8 @@ static int ntb_epf_db_set_mask(struct ntb_dev *ntb, u64= db_bits) } =20 static int ntb_epf_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct ntb_epf_dev *ndev =3D ntb_ndev(ntb); struct device *dev =3D ndev->dev; diff --git a/drivers/ntb/hw/idt/ntb_hw_idt.c b/drivers/ntb/hw/idt/ntb_hw_id= t.c index f27df8d7f3b9..8c2cf149b99b 100644 --- a/drivers/ntb/hw/idt/ntb_hw_idt.c +++ b/drivers/ntb/hw/idt/ntb_hw_idt.c @@ -1190,7 +1190,8 @@ static int idt_ntb_mw_count(struct ntb_dev *ntb, int = pidx) static int idt_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int widx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct idt_ntb_dev *ndev =3D to_ndev_ntb(ntb); struct idt_ntb_peer *peer; diff --git a/drivers/ntb/hw/intel/ntb_hw_gen1.c b/drivers/ntb/hw/intel/ntb_= hw_gen1.c index 079b8cd79785..6cbbd6cdf4c0 100644 --- a/drivers/ntb/hw/intel/ntb_hw_gen1.c +++ b/drivers/ntb/hw/intel/ntb_hw_gen1.c @@ -804,7 +804,8 @@ int intel_ntb_mw_count(struct ntb_dev *ntb, int pidx) int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct intel_ntb_dev *ndev =3D ntb_ndev(ntb); resource_size_t bar_size, mw_size; @@ -840,7 +841,8 @@ int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pid= x, int idx, } =20 static int intel_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct intel_ntb_dev *ndev =3D ntb_ndev(ntb); unsigned long base_reg, xlat_reg, limit_reg; diff --git a/drivers/ntb/hw/intel/ntb_hw_gen1.h b/drivers/ntb/hw/intel/ntb_= hw_gen1.h index 344249fc18d1..f9ebd2780b7f 100644 --- a/drivers/ntb/hw/intel/ntb_hw_gen1.h +++ b/drivers/ntb/hw/intel/ntb_hw_gen1.h @@ -159,7 +159,7 @@ int ndev_mw_to_bar(struct intel_ntb_dev *ndev, int idx); int intel_ntb_mw_count(struct ntb_dev *ntb, int pidx); int intel_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max); + resource_size_t *size_max, resource_size_t *offset); int intel_ntb_peer_mw_count(struct ntb_dev *ntb); int intel_ntb_peer_mw_get_addr(struct ntb_dev *ntb, int idx, phys_addr_t *base, resource_size_t *size); diff --git a/drivers/ntb/hw/intel/ntb_hw_gen3.c b/drivers/ntb/hw/intel/ntb_= hw_gen3.c index a5aa96a31f4a..98722032ca5d 100644 --- a/drivers/ntb/hw/intel/ntb_hw_gen3.c +++ b/drivers/ntb/hw/intel/ntb_hw_gen3.c @@ -444,7 +444,8 @@ int intel_ntb3_link_enable(struct ntb_dev *ntb, enum nt= b_speed max_speed, return 0; } static int intel_ntb3_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct intel_ntb_dev *ndev =3D ntb_ndev(ntb); unsigned long xlat_reg, limit_reg; diff --git a/drivers/ntb/hw/intel/ntb_hw_gen4.c b/drivers/ntb/hw/intel/ntb_= hw_gen4.c index 22cac7975b3c..8df90ea04c7c 100644 --- a/drivers/ntb/hw/intel/ntb_hw_gen4.c +++ b/drivers/ntb/hw/intel/ntb_hw_gen4.c @@ -335,7 +335,8 @@ ssize_t ndev_ntb4_debugfs_read(struct file *filp, char = __user *ubuf, } =20 static int intel_ntb4_mw_set_trans(struct ntb_dev *ntb, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct intel_ntb_dev *ndev =3D ntb_ndev(ntb); unsigned long xlat_reg, limit_reg, idx_reg; @@ -524,7 +525,8 @@ static int intel_ntb4_link_disable(struct ntb_dev *ntb) static int intel_ntb4_mw_get_align(struct ntb_dev *ntb, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct intel_ntb_dev *ndev =3D ntb_ndev(ntb); resource_size_t bar_size, mw_size; diff --git a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c b/drivers/ntb/hw/mscc/n= tb_hw_switchtec.c index e38540b92716..5d8bace78d4f 100644 --- a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c +++ b/drivers/ntb/hw/mscc/ntb_hw_switchtec.c @@ -191,7 +191,8 @@ static int peer_lut_index(struct switchtec_ntb *sndev, = int mw_idx) static int switchtec_ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int widx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct switchtec_ntb *sndev =3D ntb_sndev(ntb); int lut; @@ -268,7 +269,8 @@ static void switchtec_ntb_mw_set_lut(struct switchtec_n= tb *sndev, int idx, } =20 static int switchtec_ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int w= idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { struct switchtec_ntb *sndev =3D ntb_sndev(ntb); struct ntb_ctrl_regs __iomem *ctl =3D sndev->mmio_peer_ctrl; diff --git a/drivers/ntb/msi.c b/drivers/ntb/msi.c index 6817d504c12a..8875bcbf2ea4 100644 --- a/drivers/ntb/msi.c +++ b/drivers/ntb/msi.c @@ -117,7 +117,7 @@ int ntb_msi_setup_mws(struct ntb_dev *ntb) return peer_widx; =20 ret =3D ntb_mw_get_align(ntb, peer, peer_widx, &addr_align, - NULL, NULL); + NULL, NULL, NULL); if (ret) return ret; =20 @@ -132,7 +132,7 @@ int ntb_msi_setup_mws(struct ntb_dev *ntb) } =20 ret =3D ntb_mw_get_align(ntb, peer, peer_widx, NULL, - &size_align, &size_max); + &size_align, &size_max, NULL); if (ret) goto error_out; =20 @@ -142,7 +142,7 @@ int ntb_msi_setup_mws(struct ntb_dev *ntb) mw_min_size =3D mw_size; =20 ret =3D ntb_mw_set_trans(ntb, peer, peer_widx, - addr, mw_size); + addr, mw_size, 0); if (ret) goto error_out; } diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index d5a544bf8fd6..e16a8147ddc5 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -829,7 +829,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int= num_mw, return -EINVAL; =20 rc =3D ntb_mw_get_align(nt->ndev, PIDX, num_mw, &xlat_align, - &xlat_align_size, NULL); + &xlat_align_size, NULL, NULL); if (rc) return rc; =20 @@ -864,7 +864,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int= num_mw, =20 /* Notify HW the memory location of the receive buffer */ rc =3D ntb_mw_set_trans(nt->ndev, PIDX, num_mw, mw->dma_addr, - mw->xlat_size); + mw->xlat_size, 0); if (rc) { dev_err(&pdev->dev, "Unable to set mw%d translation", num_mw); ntb_free_mw(nt, num_mw); diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c index dfd175f79e8f..b842b69e4242 100644 --- a/drivers/ntb/test/ntb_perf.c +++ b/drivers/ntb/test/ntb_perf.c @@ -573,7 +573,7 @@ static int perf_setup_inbuf(struct perf_peer *peer) =20 /* Get inbound MW parameters */ ret =3D ntb_mw_get_align(perf->ntb, peer->pidx, perf->gidx, - &xlat_align, &size_align, &size_max); + &xlat_align, &size_align, &size_max, NULL); if (ret) { dev_err(&perf->ntb->dev, "Couldn't get inbuf restrictions\n"); return ret; @@ -604,7 +604,7 @@ static int perf_setup_inbuf(struct perf_peer *peer) } =20 ret =3D ntb_mw_set_trans(perf->ntb, peer->pidx, peer->gidx, - peer->inbuf_xlat, peer->inbuf_size); + peer->inbuf_xlat, peer->inbuf_size, 0); if (ret) { dev_err(&perf->ntb->dev, "Failed to set inbuf translation\n"); goto err_free_inbuf; diff --git a/drivers/ntb/test/ntb_tool.c b/drivers/ntb/test/ntb_tool.c index 641cb7e05a47..7a7ba486bba7 100644 --- a/drivers/ntb/test/ntb_tool.c +++ b/drivers/ntb/test/ntb_tool.c @@ -578,7 +578,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx,= int widx, return 0; =20 ret =3D ntb_mw_get_align(tc->ntb, pidx, widx, &addr_align, - &size_align, &size); + &size_align, &size, NULL); if (ret) return ret; =20 @@ -595,7 +595,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx,= int widx, goto err_free_dma; } =20 - ret =3D ntb_mw_set_trans(tc->ntb, pidx, widx, inmw->dma_base, inmw->size); + ret =3D ntb_mw_set_trans(tc->ntb, pidx, widx, inmw->dma_base, inmw->size,= 0); if (ret) goto err_free_dma; =20 @@ -652,7 +652,7 @@ static ssize_t tool_mw_trans_read(struct file *filep, c= har __user *ubuf, return -ENOMEM; =20 ret =3D ntb_mw_get_align(inmw->tc->ntb, inmw->pidx, inmw->widx, - &addr_align, &size_align, &size_max); + &addr_align, &size_align, &size_max, NULL); if (ret) goto err; =20 diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 4dfb3e40dffa..4db1fabfd8a4 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -1384,7 +1384,7 @@ static int vntb_epf_db_set_mask(struct ntb_dev *ntb, = u64 db_bits) } =20 static int vntb_epf_mw_set_trans(struct ntb_dev *ndev, int pidx, int idx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, resource_size_t offset) { struct epf_ntb *ntb =3D ntb_ndev(ndev); struct pci_epf_bar *epf_bar; @@ -1507,7 +1507,8 @@ static u64 vntb_epf_db_read(struct ntb_dev *ndev) static int vntb_epf_mw_get_align(struct ntb_dev *ndev, int pidx, int idx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { struct epf_ntb *ntb =3D ntb_ndev(ndev); =20 diff --git a/include/linux/ntb.h b/include/linux/ntb.h index 8ff9d663096b..d7ce5d2e60d0 100644 --- a/include/linux/ntb.h +++ b/include/linux/ntb.h @@ -273,9 +273,11 @@ struct ntb_dev_ops { int (*mw_get_align)(struct ntb_dev *ntb, int pidx, int widx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max); + resource_size_t *size_max, + resource_size_t *offset); int (*mw_set_trans)(struct ntb_dev *ntb, int pidx, int widx, - dma_addr_t addr, resource_size_t size); + dma_addr_t addr, resource_size_t size, + resource_size_t offset); int (*mw_clear_trans)(struct ntb_dev *ntb, int pidx, int widx); int (*peer_mw_count)(struct ntb_dev *ntb); int (*peer_mw_get_addr)(struct ntb_dev *ntb, int widx, @@ -823,13 +825,14 @@ static inline int ntb_mw_count(struct ntb_dev *ntb, i= nt pidx) static inline int ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int widx, resource_size_t *addr_align, resource_size_t *size_align, - resource_size_t *size_max) + resource_size_t *size_max, + resource_size_t *offset) { if (!(ntb_link_is_up(ntb, NULL, NULL) & BIT_ULL(pidx))) return -ENOTCONN; =20 return ntb->ops->mw_get_align(ntb, pidx, widx, addr_align, size_align, - size_max); + size_max, offset); } =20 /** @@ -852,12 +855,13 @@ static inline int ntb_mw_get_align(struct ntb_dev *nt= b, int pidx, int widx, * Return: Zero on success, otherwise an error number. */ static inline int ntb_mw_set_trans(struct ntb_dev *ntb, int pidx, int widx, - dma_addr_t addr, resource_size_t size) + dma_addr_t addr, resource_size_t size, + resource_size_t offset) { if (!ntb->ops->mw_set_trans) return 0; =20 - return ntb->ops->mw_set_trans(ntb, pidx, widx, addr, size); + return ntb->ops->mw_set_trans(ntb, pidx, widx, addr, size, offset); } =20 /** @@ -875,7 +879,7 @@ static inline int ntb_mw_set_trans(struct ntb_dev *ntb,= int pidx, int widx, static inline int ntb_mw_clear_trans(struct ntb_dev *ntb, int pidx, int wi= dx) { if (!ntb->ops->mw_clear_trans) - return ntb_mw_set_trans(ntb, pidx, widx, 0, 0); + return ntb_mw_set_trans(ntb, pidx, widx, 0, 0, 0); =20 return ntb->ops->mw_clear_trans(ntb, pidx, widx); } --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11011059.outbound.protection.outlook.com [52.101.125.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2014A34889A; Wed, 17 Dec 2025 16:50:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990226; cv=fail; b=hucYquDElPxdq/nLuGlCgyzMy6xPql7d2CLhUM4Hz1GIFqQcaLtQLfvzD/+J9MVwerUNg/l2V/NtQJlxKEcGv60+3KhcJzSLwrozS97lAzHU20tqAEL2NONrfIo0QSbcuKOn9DBYAdCPbS6km6Z8j0I/k8r+XmfcfY6IeVLT/h8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990226; c=relaxed/simple; bh=D3P+3vigCpubVyho2RrN9mwEodfy7YGO5ZpJeiXYFY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AJlnH3P63AhTxS4isyMSE6S7gnqzDILPfYLfLky4/q1Cu240YU6+RdvzbuHRRtOTE3xCWfE2mW2ogS7Vs6RGz7OE9fpOGUn9IEsWqxZBBJxOVqb9wmHNgkAtp0yzgZbii7o+lLnAq0Tdgx6xyGRLbP3keQH/UH7zA8xKHAdqfCM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Aotw2lC6; arc=fail smtp.client-ip=52.101.125.59 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Aotw2lC6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FWUT9bcPegmvVyYeRfUJJeFN4SmAwax/0y41DDX6KBvxCrxSuAjEuH7I8iJg/E6dGTSs0SfYhAUHGAAV8/j8b0JqN4XUVBvEq5gOEtnPDx60N6kVeh3szxqYDuPKka+8lh6oeUfuLzj1Rc6T3HT3il0J0ui+79vcahyz9cvU8Qaa3Msp6mHEdT3KTdRBqAPgYF9/IL4pse8H8vMCmeWFsjmnutZTO1Q6OsrUEqP8PyIDCUtYqeGz+SSFMe5RppBeWQ6y246IBIOLZPVDx8NRMHrmElGkSNBgNcXlsdeTaorEJHAOKeALkm8+EierGqR028Ww7fNgUJ19D4TI6MMuig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=cBjs62C63/zVf7xG4DFNs2yiZxHTrjLjAG7M3hlTTLc=; b=kV0gLTP/P7+s3bBuCkD21IeDeORgRWN+8ba0ysu2TkLz39Rnb4kh9ChNRsw8AhbweMBDg6lW9MFu7MwK6z5pL9dS5NjJFNpqwn+wPhS4nVs4hMeQ+uIpw8Rl5RQa4e/271muu3S+32sjeB/MEiXtVACTJoFuPHKEYy1C/Qswg46iBAo86KDPftphUcONybiQiUdqxDBdyI4mYG1u+DPOjkjVPD5cCnPu0PBEuzkJByDO/0pOge19ULMOkSn+y6yGqV2r8Cl4Ph3FXCmBN0VJLoBzHmHrHKgbdg01dQp1sIcYNXdP68QOwtGBbQBPVt8Q+5A/RQLQhc70nGA+msloSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cBjs62C63/zVf7xG4DFNs2yiZxHTrjLjAG7M3hlTTLc=; b=Aotw2lC6WsUEzi6bEMB14J/Jtcii3Qqjwvn9vJhEqkNHSNSr6On07hyVRaGcs2VSECZ1Y7ML5+xUkqqesTORKjKOUrvofoq9t85jSLCjUSW4d/A2Gek21rUaGLum4Nu+Df3jb9KveuL1eEiUh24bvsMMFjfQJo2pCgck6KTnie8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:17 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:17 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 05/35] PCI: endpoint: pci-epf-vntb: Propagate MW offset from configfs when present Date: Thu, 18 Dec 2025 00:15:39 +0900 Message-ID: <20251217151609.3162665-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0130.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:37f::8) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 65fe181c-7acd-4b78-48bc-08de3d7f3a11 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?aPe4SKHhAdv7KuIbQhPT3EauF9OqoPEl2Ykxv1SQZvJsohqIHS+jiWeR4XHJ?= =?us-ascii?Q?moT2l9f3gq93yEVIu4/FtGHVNmCyN+HBlfs+OOFNhNecU13/lQ1q1hbrHHbE?= =?us-ascii?Q?VY1tX3kNI8hzU3zEzZb73iCkI81sOqrUo9X6kwVOFPEMtJnbmy4c5McLJnen?= =?us-ascii?Q?6ojLkzrB9yZ1KcMp3lcRhIk4SORbfesTLN/CxZv1/1sZtjkSfiBB1R6BxZ91?= =?us-ascii?Q?3YnsEURBoFzp8gAf1Rd9GPx+mSJqRjnVc9mjFHXvE/twB+qRakjWMKG/0p9S?= =?us-ascii?Q?DMZxvo1NVXtcvEFQu+iyrdG7WBubP9bay+WDj7EpGW85TjU52y+vu96x3A/+?= =?us-ascii?Q?478pWclfAJ018gIYMXo2TDhQbrWx7euBTK7ftFcshQGIjW1WVgWssPHnAqea?= =?us-ascii?Q?lxcwxRxQcMEHHi99WrwqvTeJ7arWTPN2VyQC1EagJODG39ih19lVaw2nGD5I?= =?us-ascii?Q?mWbV8UTOYN6O1KRDkqzu5TrYN85fTbsOa9g4tlhOZiv3x/Mq3Ot0RCHDQA5D?= =?us-ascii?Q?V0B8XWVBPUudxS3moE495PBnt5nfa4t6JOV6fNaJUjk7LSjWpM7Npd+a9HfB?= =?us-ascii?Q?PVGQQWIezwM2A2vorAh6qjNr7y9maWxSS+67Bc6FGNnPdblxyPUuoV2lyJ0w?= =?us-ascii?Q?IZV8KZawW9GC4DsjEsW0Dr+7VbPMv9sJyzt8VuR5YoEpTjF1KoEoa14YHlsW?= =?us-ascii?Q?BrzriJWcw2Jl+zM/TV+4liS1Fo0AGe1tOGgbbSlL4t+hpgrtwSXSuKi9NhiH?= =?us-ascii?Q?YCUBvdguEDeZENvn6ekJWv8/IvSjrWgWjj8h9H5s3EoduJDl9LYIl/qWytiB?= =?us-ascii?Q?BHDrLVPLG9y+1qcnpgP+eF4Qzy4BHh7KogIUsVw31Y4OmhjmSg1zsDSDu77d?= =?us-ascii?Q?aq1D8o8esIaJ/QghE9622Ojz5CLOrJl+f2O7o8W4Zc48HNt9HqAb10wPMekq?= =?us-ascii?Q?CoCjofJUTHlRFt3wmWHoFuyTJ0avsjgZjuvlO+KiN5OIEwHfNBIlFoFaecPe?= =?us-ascii?Q?h+7x+oXpfchlofq95IL3uFSXJFQVj+xsL/I7GVIs9qCVRxEZZKhiqQ5GvZWe?= =?us-ascii?Q?NQOB5VCR/b1tmAB2V7wHGp6xrxDXXV4Q6IEgpxpPCfAiAJalDxCNcOjLQJoJ?= =?us-ascii?Q?rcsd2nxz2t3foqH0cCqATPtTMoHGyR3EYplb0WKLgqMGVATKpDrS8l2fKL/U?= =?us-ascii?Q?3fJNLo09hCT+GV1zPj5GMqm835+hbdVcMLcKpjlNiB0NFNftrl01oohbAGiP?= =?us-ascii?Q?2yjy7iaoTctK/S6kkwsVT58U60Y1+ikOgq0Ulaxj3T4/T5dqgLdCALcz6mLH?= =?us-ascii?Q?w2ICts1YYBmpknN4QAn0bDb+GQwqYVg421FW37zsDLoxEOqqkc8IWce4T6i6?= =?us-ascii?Q?TP2JflgwOpRiyZv/8HTaIPK3dmPbU5l/rDopJPEFPcc5e6R2CbI62U+okjdD?= =?us-ascii?Q?4APWszrEAg5S/WAK7Y91DAwW2mEqwWvq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tIQfgKMrUD8E5tggy+JT/YttTX1GGMpvo243wtBbNEt4tnuFHHz2frIATksY?= =?us-ascii?Q?VSWzhxUDtK5WQ5wgStLprUYs3nBLbIPiRRgsPyc6GIKmNP9Am6/ULSAWmd7K?= =?us-ascii?Q?Mbqo9G7jK/LBMHACLCYe2mCzc8S76Jk5pyJYKVWAS5Uf1dtXo1cD1gr9pNsJ?= =?us-ascii?Q?vOskw+5cLTR3SH+bUXEC8tcReR34pZhtItx4CZvby3Ox1U2CRCHT4SwMFAop?= =?us-ascii?Q?+SNmWo126arasJjwfCFT9wdSiMVkzXOVEVtltxakSGOO4AD+ygeaN3e+UJYm?= =?us-ascii?Q?4XgoR50NSd5yC/yiVD4KuREIE6/sGMvWm0KUDUCOtPmuW0poxtcZdpNaH+lD?= =?us-ascii?Q?JemkDf8pu68dQ90bmQ7q+GvYjsj8elHpKMYHyvfgoQVc+mqKDmZr418DnLk7?= =?us-ascii?Q?9r9ZVk8b7/e9JLBo6jKksytymmyC04sgCXK7vLKn8iN8+7cUee5GT7HL8jGn?= =?us-ascii?Q?MrETeXJx7ujK1NfYvcUpIOgZwadHM24FxhL78y9lgeXd5d9wsuiE5RcOZZRv?= =?us-ascii?Q?0ZtXyJzfykhRs9gFsBZ+x8FL9dUzW8a9KuNF6R2QNEkAd12iNG/PJKY76+3p?= =?us-ascii?Q?Fi+t5VuyYf3UDIUNqyx9H/v0RDZ/Vp5zSjVwvL/lA8FqEKDVsjvlTxuPT2xs?= =?us-ascii?Q?m5bJbJq5pFXSe/qMnjJIwqFRzUqPP/gnQn5SyavQo/Rh2s7EBdqzigMQI5lM?= =?us-ascii?Q?YxVQjfydzJ24r/1jUE/uh8WguK8wgmCqkg4SkFnBCquzl4FYc6lh9fDnJYAp?= =?us-ascii?Q?fXgCHXvbAgdUUn7SIJCSQfg5R26LTMgZBnki2+pJHRJkeBEIe6LVFCZwNX7t?= =?us-ascii?Q?lOfshlbSAzULE+wYkiZ+PWQMPaVz9jsxQqwnglbifFvRrJDGQ2jqW9Grv7Nn?= =?us-ascii?Q?L+YOvhCD/p8GInG/1V4NkLgJbIHWz1JEdfibnGTTjF6/3cOaJO1S89HGGVAp?= =?us-ascii?Q?0CcwT/vJlei4E7XLrpQplFsTFC+LvBfSv+icJqFekgc8Y2jqU6sxmLf2aSNh?= =?us-ascii?Q?UqHCYT4R7hYBZiPAs6jYNiQzWouH+WEyjnqvbnp5L8WHNu2PhcrCDGFg+CaY?= =?us-ascii?Q?7bfxTWqtpRvWv8lQr0bekmlCtvpnggMXe9D12EMbDZDg+7YuYse43vR5Exwh?= =?us-ascii?Q?dM+u41tWMrNi1rsplJgwIsk/Pwzp+v8cJ0Yvjxw4egR+Oh1kk8DS7SVsOMKl?= =?us-ascii?Q?wvI4tWtla7vt13OfiU8MnEz9sk8yimiMxYE4MS2vb6uf/3mLCTUz4kNkpR5u?= =?us-ascii?Q?2CmXQ396agdS7RhUUNvpi5T9+9UuJhpBOJ9d1qAwZZqOIHZYCU6aQ6lgsfOI?= =?us-ascii?Q?pt9VwQiuuEMQ6C+r53g7jW/LZ27knYMMHKxs7lC4wgVMb4R1g8Pqh00C8ofT?= =?us-ascii?Q?y3b6Pcrafb1FcD83IgPiFuxjVW/Cx1iRgcmVcrH25kgoQIdur3W6DwzvVu42?= =?us-ascii?Q?By06U/NcIJasY/0y14Lqawsu43fuI1BL8wXwZPkeVh9tUI35qeuj+mfnM9rr?= =?us-ascii?Q?Aj/HNRcKlDx8gsxXD22FwkOZlD/APIHMFhCIRotBNNb8xCW7YAsZ/G+XY4Kg?= =?us-ascii?Q?ZPHboTPE0ucrfJ+LVjv++OtbK6sXZcLJBeSW6uwd2s7eiQ7kv5cuxMPYULw4?= =?us-ascii?Q?/OQj0fvXr16S+yf4Odo2Ir8=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 65fe181c-7acd-4b78-48bc-08de3d7f3a11 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:17.8388 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Szeipwn7ViD+rORqRDQdlpxqRnsS39DcNEs0QJchBxrk2Oy37lVs7cUpn/fHSCVs7GkINYNpqPT6lCJCytIMVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" The NTB API functions ntb_mw_set_trans() and ntb_mw_get_align() now support non-zero MW offsets. Update pci-epf-vntb to populate mws_offset[idx] when the offset parameter is provided. Users can now retrieve the offset and pass it to ntb_mw_set_trans(). Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 4db1fabfd8a4..337995e2f3ce 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -1521,6 +1521,9 @@ static int vntb_epf_mw_get_align(struct ntb_dev *ndev= , int pidx, int idx, if (size_max) *size_max =3D ntb->mws_size[idx]; =20 + if (offset) + *offset =3D ntb->mws_offset[idx]; + return 0; } =20 --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B31E31A570; Wed, 17 Dec 2025 15:16:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984590; cv=fail; b=antGxER+B31420Uj/GlcOKv5FeflmD0bM9giSE2mw4KT0thNUR9nM1T1P8yb3E5LfUlztALERUOyp+5bNCwzV8E/OQk7hQ9y7vRnN40eYOFfhBeh3WEzMML0haTaWDjqc1PGXPNNscj0U/Q7Rh22+Gon0bBEf4j0dGymhrzj9b4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984590; c=relaxed/simple; bh=62fZs6md0GVg9qSTUtu4zM67YagAdoPN0Co4kyzuMH4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kRg0xYBerojpfdDPGnrGymF9v0bSC9rWDmWuJNOtMcTxrZpzlQn0ver/ssgObdjO5boSofV3eqPmATszR7FsrN7egjNCt+StHOwPUa94q7Y6ApBe1Ba9rvfUBHBGqpfiWlww7Ftq48C3CQnDzuHykdhpM2L4fse8tESaoUFAU/4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=L6Gyjd0r; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="L6Gyjd0r" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W5fnsjL409InZ9b+w9xMNHqkyFwAfFzwUI/eMDlf9FHoZBYeRHxgwJ289YvP1bF4EN4mVor9Pf4oWZGcCbIzuPkB+dQzZ/TQGPduwPz9GCcsmE/JsGNwHpWWGb79o+TV5GTQnUsDAdS8IUxP+Q02typIlEGkeWq8T05xFEOFL9qnKihgOHIsoncXi3jAWRmpWYVrfdvhiEYQIIZN19DcceqmJEjDKmot9qkm64rYgSxn3nKHuyV79Pi1X3O8foczC9O8DsNfrLhpqJyz2rFnWAHiVGQlVt4PQEW8Di1o8bbUOTLHr0h7fTbrHJcPa0GxK4ygBQKgBscQeokH/k197g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=IOhVH5WbbE7TOgwhUWG5IWDXoW2MiIJ5KWF0mB2sGN8=; b=oVCLMe5slr9og5DtXCDgfVQkGqOSsH0i+39J4wtK2obQxMLHaYmO2V6/VQaCgzdmTOVQY1LeY7Q08P5Pk4wM2CiaQMrQgF04a/khers3abfgw07VnjKIEcdX640rANXFgWgQZbX8/Npa3YynAFKcPfXSfFnxF3ifHBVc98nMQuvpmrkd0vrS9Z8HP4e+oug6/qjh4ndPYNcuhjmHglMu7WjQGS5sMNcU7oWtKbdCCspzl6dXymAaF5QBn1WcL7JANTPogkRSs82twI70lrjkr9+GkwW2dFRNbDGnsFE/Bgg5ijsq4FzJjlVYe2LjKnXcIPapW65NrS2/+JOTgT6MjA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IOhVH5WbbE7TOgwhUWG5IWDXoW2MiIJ5KWF0mB2sGN8=; b=L6Gyjd0rnIt6L25/zve9O8/ujQPkIFhOcuq4AMo0ZMpX7WTbws8yILAXIP4jvoVyiNQ0RS1AdEF3AS7+4rA4yKwIR35Ek9Ei7BTp7/ONDaNZQKLzmyIAaVG/ojQ6uN7m1QiFQ4zaHp3t6IwUzPOHvOp8e5+vRvSAYuLpnDQZkwo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:18 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:18 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 06/35] NTB: ntb_transport: Support partial memory windows with offsets Date: Thu, 18 Dec 2025 00:15:40 +0900 Message-ID: <20251217151609.3162665-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0033.jpnprd01.prod.outlook.com (2603:1096:400:aa::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: fb65cffe-70ab-44cf-694f-08de3d7f3a9b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8QAUiJzRhtTlEaEf+apec86lvh07hE74dYZ7sn2fVzvpBRMuXqGWKbANeZ6R?= =?us-ascii?Q?ylf3hwMt/GmcaYl2At3gZTo+9kW23lCSjnL9gj8W6SR8IYbgVNNp/NBSemqU?= =?us-ascii?Q?h+YXk40kXdBIGlBKmLxcITUwWBxCw9ZT7JXX82dRtZZOWLbfNnhMVn+tbzwi?= =?us-ascii?Q?0ySwIlo44p+DqI2cvayDU7Ees889ZYCJ5FhWRtgyaQclvp1odGVY+4jYaRZL?= =?us-ascii?Q?TaG0la/+xh/RlpK436D/UqQ2CJ+ilgCxBDlcclFA/4Ux9uWysfzBLDKiK/Ck?= =?us-ascii?Q?ssz2YBcs8b6PCWXaxX0kUaGy3KMZn4nUxT2ry1rNe6uXmfUMkpLuuPO6CW8R?= =?us-ascii?Q?DcimhUpTAsOYhaoJTnGBohVaGeKeNfT+h0tt11gfV8v+ALjBnTAfQ/rO61El?= =?us-ascii?Q?6atZLlC8vG+sMxVyOp4W2Zw4D6isxpRaAijLxG86RxfV0FUHFqk8eFeimVT4?= =?us-ascii?Q?v8RKMiqLRfvtIQMQ+ESmImLUdvs9CGbOZZRtw/Tp3N/EgCq6l3tUe3LyBXP8?= =?us-ascii?Q?6NeHqYEvRqbB5TjdH0zGvqikfhIlmFlorhhq6QamxgPGsk/Tz/YsVEL5ekiS?= =?us-ascii?Q?UpYvxBhB+kFm8jiCMuoi/QhpFlXmSJTU8aAFk5eYFPN6eMg1NzRh0KjRabaE?= =?us-ascii?Q?4ELUFLzOaQsa1NZerjVwnFJDHpdIREGT/Z25GVOf6qWOnBRQFChB2TZOrT4T?= =?us-ascii?Q?2HZRTuPOEKhzat717Z1jDJ4qF0cXME/3kxXTQv8kOmFxUYTL3NtO8Dk0LeRe?= =?us-ascii?Q?n8JaBr4bnXgunNrSY2+jVZlOnqlwDe/Wdt7S5gqc/xGhsSyHCAGY/FFDXtP0?= =?us-ascii?Q?aiihP909+4wmi9swILFXrpD2ETowpUYU47ZNTLGdX166qxbNxpI94Wkh1YwT?= =?us-ascii?Q?Cx0hVjExZMzMNrael6cRiNzaTZcIkZZ6S4qd6YblMUind8Zapvid6bcuivEc?= =?us-ascii?Q?Gxaib69pbsBJK0dBg9sJv4MBPiqwcoPQThgvWYEC0QFN//0sdEBm+SySQAMa?= =?us-ascii?Q?uow1xXnD8YXM+K5lQKqTioB0KIBorEClS2hS/1JdxHEOQh4RtbdBohExwyYc?= =?us-ascii?Q?e/vFhp3S0Gugu9wU/ugesOXWdgI4tWNmc1HzQKwwFEIKcG/mcVTZOngDGDrF?= =?us-ascii?Q?TxwvUNbVH5A2qtr7Cj55k/jjAj3Nd6XfuocO51Sl2D2OOReaMzrsDtqGqvML?= =?us-ascii?Q?CW6IrZ/kJX5XVYy9jqe9wluUxvSL5Yt7XtnwouofkNmoSvepo6j9t2weFbDr?= =?us-ascii?Q?2G1fd/2fFnUM4Uby6w1GAaF+3rT3o1nI8Ak5iLuOuw0In25uywLYe/xBv9/2?= =?us-ascii?Q?QwjYfT0b1Nlcko7YVCM/0QHuAx1qcv17JqcQ0i834NqKzh8w+gw35lDAuCQN?= =?us-ascii?Q?Y9JAgEVQlFscWNNwnWWCZXK4cwpIMw0ZXFRyLQ9BYnoh3P0wSjJM+s+ZctDm?= =?us-ascii?Q?bTGEG9/IO9Xo8k1Udyv2vHi1ZV36yewe?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dTOL7YAIRajiYIz/ouXcwPPA94jLYVxPNC0Xd36JJUdB9taYPhfMgj8jU/4p?= =?us-ascii?Q?Ns1hjI5+0EU4hOp98sFGOXqbxc8z8WJgYOx/bCMsfsMyArH4QGt1RNCAR7L7?= =?us-ascii?Q?lDrR4NIym87YSbvfL++8Pyx+MNkfTZTopcTeBVCpPebNW0uuIv2Qqr932218?= =?us-ascii?Q?pzVgRWVMkNMXgbsiOn07YO1JYOKrRTYgALQJviBMpXo3sExJlhqTx6TFooY5?= =?us-ascii?Q?BUm6c+3lzKSgbfpl6tLtNNbGXtGtCgNXIYxP6+Y5KwT9//PjuUgBHwgA+dVw?= =?us-ascii?Q?j2lSP4LcRNkBoWEv4U/IA4cCrwdplohgnGbtyEI+agRQBFWmD/qs53m1Ug7Q?= =?us-ascii?Q?MqAB7AvCylIDFu4LOdYSbOIXtvh7R2SLYZxIx5YaND7BPrOV/q2xMQKvTXkT?= =?us-ascii?Q?2QxRRmaTqJASDvf63mf6XRQo7ZwbHye8NvYb6cwzsJ0PQHguPHoiY2IMXBO/?= =?us-ascii?Q?sNqlrnpCUihOpRxjSAdk5UtE78JJdv4tO0r8LizkCnk6R61FX692VhlnMKyb?= =?us-ascii?Q?5UZGfyBmiwZzPVWtvQ1MuoVh8GEa8jpWKMHgYas0tayfNXz71BzLHNxO9CgL?= =?us-ascii?Q?U/hkqkXlgpruXlvdqpCqEfkUp+/MhX0MAz1DopHvLHFbmcjAWXkm3O7FjBrq?= =?us-ascii?Q?Qve0jhida32RJY7PxqTEkXLcksxL03XVbyH/NXWw4ErWWh98YA5CrMR9Nm3a?= =?us-ascii?Q?kWQv4Vh1bUJvmKozdnJNFfW09UrnezuZMFjA1pZY112xVjP0Zc3gj2fI7leg?= =?us-ascii?Q?kAdPHjVuEmtJxpjZXJQmb4v2K+gq0TZLf2f619383XW5sPLkjq5sZhxr8Cmu?= =?us-ascii?Q?nsOD2e0BurfWrVfU3NN2MN0A3qYo+MXmxXLP/4bv02/aUsHlClbrrJ/CE+00?= =?us-ascii?Q?hveDU52t4WffrfbpNqzoSpmTtsaDWHvc7teqFTb+3+UJdDuE+ZwUOUzftBYj?= =?us-ascii?Q?MWfI2/aTbeZLuKLbvUahi3XTRAak2ViXzW3PQ2pBJKMSFSo2XmX98ydvNeKq?= =?us-ascii?Q?kLvfVBCFReo9BIvW8UkH/1My8IMVzeqMt2cUluJqAOBFl59kZNCSqfv37HQ9?= =?us-ascii?Q?zv2LvJ0bR3c2lc/3WMvsTseCJxfgSinioNqECFsv/SnW7B8Hy7nCgH0V7tQO?= =?us-ascii?Q?yMfS4v0HU2dGjRv4mthWH7AGMIt+MqMB9L5ERqfheC5lsAGAALmXI7lLLsgC?= =?us-ascii?Q?jvXnp7KohgwBd8h4UNHMM+jg4Zx0S/8pGaAq3FGEUykykn7CfLnR766zP5il?= =?us-ascii?Q?ckoZc9ZhwQ/ywSHpOAr3jJQhhGfZFoPpNBTjfl/+oOl31JkuSF8d3YMEOtXJ?= =?us-ascii?Q?K3l+i9LA4gyQYMN8ONp2sEcuAhlYLcGa0nesTfIVhtA8e8P3WPvOEsXWKsrT?= =?us-ascii?Q?aNblice1qGbis640yAxvwgfGtAnmc4AYv4VkwpFCbvgxr7gXi73ZO6OvX5qd?= =?us-ascii?Q?7hTJAPZsFI9RxDhn+Oq/8hTSzAzwYAClCvoN4TXOTNAGsvPCTZL1OAsSbOx+?= =?us-ascii?Q?rn4swr/ORvWzrgkdi55hL9y2dP5nUcAUsdbj53cNQ9P4i2ZTgylS9PwWT1Gx?= =?us-ascii?Q?aKYZ5p8qu3mOW+pfyxrqfkOZB/UBP2djh5dhzqoCb6hEFebH5EMjAuA/gqJY?= =?us-ascii?Q?wKjVXTia//vd2qg0RZECT9g=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: fb65cffe-70ab-44cf-694f-08de3d7f3a9b X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:18.7573 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yqzCmVm0eMA58iFalQqTz8rrrqFkirZLEchQ7IY/lx3XgzQxwLBqNQbGs1m+iaILnWiRk3Lid7sJq7mbfDh3Cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" The NTB API functions ntb_mw_set_trans() and ntb_mw_get_align() now support non-zero MW offsets. Update ntb_transport to make use of this capability by propagating the offset when setting up MW translations. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index e16a8147ddc5..57b4c0511927 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -823,13 +823,14 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, i= nt num_mw, size_t xlat_size, buff_size; resource_size_t xlat_align; resource_size_t xlat_align_size; + resource_size_t offset; int rc; =20 if (!size) return -EINVAL; =20 rc =3D ntb_mw_get_align(nt->ndev, PIDX, num_mw, &xlat_align, - &xlat_align_size, NULL, NULL); + &xlat_align_size, NULL, &offset); if (rc) return rc; =20 @@ -864,7 +865,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int= num_mw, =20 /* Notify HW the memory location of the receive buffer */ rc =3D ntb_mw_set_trans(nt->ndev, PIDX, num_mw, mw->dma_addr, - mw->xlat_size, 0); + mw->xlat_size, offset); if (rc) { dev_err(&pdev->dev, "Unable to set mw%d translation", num_mw); ntb_free_mw(nt, num_mw); --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11011024.outbound.protection.outlook.com [52.101.125.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0681A26CE3F; Wed, 17 Dec 2025 19:13:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765998825; cv=fail; b=ZLgz3x+zZV1Sn5Fv0n8rvwbtHLZ5SDHqUqDcao0L1nTMaZLUXAAKXqabkDOZLpdQOR5kSKDue1SRU8umkNTy3owNMubphAMU8wwxs2WnLuTmaCTFKpL56WQs/WwveeJCm+Wwycl7tnsmayqqUbHn3wrLPtQMvH1wnyFLu2/4uPE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765998825; c=relaxed/simple; bh=zBYWYJYvS+Kv+kYvItQR+pQ2Nq8qm+CKr5UOtU5i9Pg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cvBDU2s4D1ptHBkWvq/6JaHdewBA7ymm8OzOEYdRBk88Sk336fpydKw/j01BJ1mahvQOeiFuesoTIvtLvvnExYOS+WL3ILrG3qzv3NUvRloHTES7dexhDClsAHDKs5AKkl+BX/EjYUCPKsyfMl6RCikajuAGPuxOJ5wBj38qJSE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=O3yGNi/V; arc=fail smtp.client-ip=52.101.125.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="O3yGNi/V" Received: from OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) by OS9P286MB4253.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2c5::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.7; Wed, 17 Dec 2025 18:58:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cNDVgkkTVXDcOdC81RwNJDyZV67sxc9f19Hl8lW7C84cO37K8uPclRbaADpQRNjbT3mJUldgScfOqL+pzOP26/YWnqUprXRFlSXXdQXOpeiASIJjLj+rCUPoEQsRZpS+aJmmqOPpqSIxSlB4FjnOX40Saxe3yf3MJay05x6xiMUtRLLRPxE6tXpTsphBLrLwhyIsLJ3+pCp6Ypk0steZE08qbAkr6R4rhIO0ps1PjH64dW5Lp4kBRNfM3M25j+3TE6tYuTeDj7YotQ7uLyyS2v5MSURvQ4XJ8PcJS9V2sfuYGfPYJdbQoj+NQEY4nm15X58L9u5oeDgIq/g0Mpr/zQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=tg0IjAjKuPqKUYfu402JjSwcRuXZ0WNpRg8vBf5Vtqc=; b=JBlyyir6HoNZNi81EP0gaK0FBmM8RW8qNcHxvEr6KySL/fCsv7ToZJwD0NQdDKTjeVGrdt3A8iTNUC2B6K4LAF8Ab0UMIJvyFG7VcTDmFhLVETtsuKTVO4uyCl6ExnTXyVCBcoMVe/xXBc+YD2g0zUhFbRgGyQP/Ts7EoxqGp2g9P6/ePtWmiZWcAodATS+0kFVb0c2zsp/ehfJDiVN3Ogi2vhhHrf7P2xgwf5BWqG6YpWDXsrcZiMoAycKMxzujgnQHuDljLiE0nkf5332c7EENdA7w4CpU5pHOGnMF+x8UqVfdmBTXF64EqFrsSzAzJBwh/3w/H71fXPC3CbvQ1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tg0IjAjKuPqKUYfu402JjSwcRuXZ0WNpRg8vBf5Vtqc=; b=O3yGNi/Vh/OMQe7e4/12CV1uWxEo50SMErkFc5YJ4lTYbnSzmDfFjv8WAa2vn3Bu7mAdF1UtF3Yz6F5muo8knNNaiNUVgmymHDk3lv3LJ7XIhv+aVaW5gMCoPNkSfrGqGnaGIXncV9l4/DKsxs92vB4EqWyWnarY0o8aZgbGMho= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:19 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:19 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 07/35] PCI: endpoint: pci-epf-vntb: Hint subrange mapping preference to EPC driver Date: Thu, 18 Dec 2025 00:15:41 +0900 Message-ID: <20251217151609.3162665-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0128.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:37f::17) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_|OS9P286MB4253:EE_ X-MS-Office365-Filtering-Correlation-Id: b7d0a198-4c89-47a4-182c-08de3d7f3b20 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?geLivJ1NKFKH9s083FKrp7Owcr+VHW9RSoKQaVP3qSXsxovutP3aECbhfQa+?= =?us-ascii?Q?e9NTq9kYTVhvPuQTctvWvXsyMaAaqna19kM6VRnTRU5eqGs7r+98mQS5P1Hn?= =?us-ascii?Q?ittaSqhTN/qT/1zDhsaUwSpzXKFPnQHUE+FvcwadYp9r0Za0fdLyaLFy+mjA?= =?us-ascii?Q?I9XVXAcEvHgY/Td6M/Yenryp9G3mOHL/rtHv1C2oy3omUWxJFJv1KE4pGGTq?= =?us-ascii?Q?3YE8CkA3ROkIjsvhEEkJEdC+8nemk8c5dPxXlRORT8NL9eEdmQiPboo792+s?= =?us-ascii?Q?2s+nmvTdrIzkxvQacrf4DZx1EpFlJFyr26p9hFCG1xMRXw0QohtrJllctW/c?= =?us-ascii?Q?ZNbNVhSP+VtAgfqAmcALw5fc7/QNjvA7ruqDkdUGWoxhT3+/Eiki9twHptsW?= =?us-ascii?Q?I3sDCpgx0ylLx0n27Ue6/8+0Z2D0dDV65c/qy4Yggqghnc7Wdc5Yh3kadFBu?= =?us-ascii?Q?8TAxTU7A89pdcnPoWshYGVG0WdJMNke2WgkfeIV2yy1TuzGxbSDJQBEfPk/Q?= =?us-ascii?Q?4a+E9LOUqiuJQDTQHRKVbCoGABNZ6xUEZlpyv17mBVSYbUrm4BNCoXXkUnEE?= =?us-ascii?Q?p3vqcLrzDCNbDf/LP1JYCbF2MWqNs9xU78UDVijstxDwnrcwyzC78jQ7O/1v?= =?us-ascii?Q?e1g++ydr9YuBBO1Hz0NtER+Wm4ORAhdofWFxMn91Ajdox0cAerijvRkLZe90?= =?us-ascii?Q?AGurwG463YE1vHKgjQoOx/aTVcIeOwTKOz0FwNv6QZZcbGcjCTgfT9fnzxVQ?= =?us-ascii?Q?qYCgFlLHNdXp5nblL+YXm+SuVHd4PI05RV1ur8YNWUM+muLAZWFT2FJAXYVJ?= =?us-ascii?Q?DHQjHFKu6QN9kuOnogKGZFnWj2SFvLQsWacDxiiW+biMbjOPbB4uzc32RIYk?= =?us-ascii?Q?epengJHxbT4Uz8Bw0Kjc6KIp/2X/kKggHJz/smrAZ5dr8bBtduhzgGxN6mhI?= =?us-ascii?Q?wd6dz0hQzSSaL73x5+oSUHgB7zlKqK0TvYGU2OeKKFWcsovOSFt989EMUZyQ?= =?us-ascii?Q?OcwbPTCJfkhd+MmQsp5MnzQ/IEuubjyZEcCJlSB5YTLUqdlBhE6j9thV7+fX?= =?us-ascii?Q?QSpdONdWO+lxgDOaXF1qkhLxkG1WNs+DRaC7bqhxZMt5yj21wVj/UHksXq+7?= =?us-ascii?Q?VAfpJ6mqKDjj3fZNfhN8FjT/MaPLNUHemPMeCBC+GmbmTSawdEwe98Ljx/uY?= =?us-ascii?Q?PGYAxJQmYaYrUM1SjQMzAT7LApizcJaezMckTu0PJ9e7t121/DL1u9+EsGes?= =?us-ascii?Q?5i+QIl5Mz53P1/QiSlbQibFxJemKvZ9mc3KgtDkzVDiDsx+zg+WxOzNpHviz?= =?us-ascii?Q?fI06Vb0hPW4aKQValpCDHcpkmp6ROvJamwCdHUgRxDBMx6a9uNRfAIw3Xx6G?= =?us-ascii?Q?5WFoSp12+cvXJJcslGQ0Sqn0ryABhNJsPkq8F/liPLiaH+2sNNFQA/3xyet0?= =?us-ascii?Q?4V15SWIozKD4MhNkqEednfoFWwlYrXiy?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YDDzvBVoE1S0krbiSxW4LJYAlpeMHUTnhnhitV6H1M7gM7zdbW5ajmFCosb/?= =?us-ascii?Q?RpjtcnmFdUJUNs0UmU6Hei3yl1sqdgkMALgLUBTIax5VHZN2sNZ/A/9t6vK+?= =?us-ascii?Q?GvY/JAelSq1DzogKOXTjnEKtjUjXrQtT4YNq8+wwDTouIZ6xPXAMx4lvs0hc?= =?us-ascii?Q?X3nagf9YHGPaow8tui5I8+xpisSmyj2qLaYLUWF8haLgT0NwA+NmRcwWO+uH?= =?us-ascii?Q?EvMpO7fnMem0ew6NmxbRKWoe+SLwrPN/h4hLKd6Vq4LQi5dRb9mlxmy7jmV2?= =?us-ascii?Q?oYox/5LD8Wl3zuttx3j8FApch/vdtqSYQ/BujVGFOBVhqEeWsg6fm+e3RtRI?= =?us-ascii?Q?t3KDB2qoQ9mtzFhY9iipoJaZAeMcU01Dv5LWHLPMjZ+oY5rhFPsT4l8GxegN?= =?us-ascii?Q?+7BCzs5Y88gptT2AWpYLV8hdSl4kE5abbR4Dhol146GcwYgdVSxFTJ9My6Ap?= =?us-ascii?Q?H0MLV8ABKBe9WH4ilxPsEu3VFTKsUyzuslWdmYPOjlSwx96Z4PZ3n6CXTEQy?= =?us-ascii?Q?Mi4FLatyp2HgI2OtCz3x8NiquZb9QDxtbIU/qxQOTkbcyyp8WHEZi8gTyN/J?= =?us-ascii?Q?dMOqimhj+TyaJbabX1rgKOQI9EDeZ9AsuT9Tr1mDti/JKmEN1EDlRrkzpmzq?= =?us-ascii?Q?86KIhVX7/g4lIRTLuBXMOm8h4r6L6z/EmUy4d82JA/MjssVp+qtj9NcyVsCM?= =?us-ascii?Q?Kytu0d5kgLDXJWRjmD9Tdh01stZZuE4LQakOzZtiWtrUBd4ev5KIY78jysea?= =?us-ascii?Q?i/n5HJT7x4AH8Flro34BdAa1TUhdb85AjioAXVCBQNGrPhI7HaAjCiWMXu3J?= =?us-ascii?Q?3xfmlF++VQzpRszrDsWd/E6T9T/mC1YFRBv6codSDe97rtUixkLlk3LBx3p8?= =?us-ascii?Q?55Madf9kVaguuSZgASpG8hUwSeDciXBg/sVpqoIQsz67TEp1Ci4+E+PCVddN?= =?us-ascii?Q?r6ITZum1aJs9KxsJGPJDIC2jkcwx7okn6lseWmoWAHMsdYDF5famXDO/rBah?= =?us-ascii?Q?mVf8/mGDvZuh3scllYiL1Lauk8OzPQOhZ/DdiOAVYfhiY+A+WOk5Q1l9/IeK?= =?us-ascii?Q?I0Qa2kU+mybG9ng7x+OEgzlFRfjz7nBQWqMykl0IHX33NotsuSRFw2VNSQVI?= =?us-ascii?Q?noqmlhhnHqM4E2uH8f3aU1GmWEWarM0773qOEqQ4AsOjKxfSk9sqfkcmHtNW?= =?us-ascii?Q?UJoakOP9f8dFygYC6UWFAWLtRrrOG/T0Eekc8qh1FkWW5xTIXEODAuF7ECnt?= =?us-ascii?Q?VdH5hkjtQzk/uDVJ5/45xh9HxWvG5jSrUj5Tb1Htf8GYC/0t9sNQP709AM8Z?= =?us-ascii?Q?oJuZgaOSO+YW71g2mYBv9aTfTE5SsjtYWCHdjw+Rt0IIcKTtwkqEcOgnRlyv?= =?us-ascii?Q?eMw2JquqIUv6fRIED5Hn9KHA6CZwixln1YMWewBdlBuGiJ4CPq/Z7bz2auMv?= =?us-ascii?Q?naNF6FrMtobOWfsWNT+kKj1c7k3PplIvtfonsTnsEFFSXg7bo4C/QCj0R14S?= =?us-ascii?Q?O/C5jVLRKjguR6dfiBuRUi6oului3tywzGv94gFg5SGkZGS5Bn+TQw0AzWTz?= =?us-ascii?Q?EQDIbjc7u4uk810M65LROtFJfLDrI6Tj2ypiL0cuVMRCRu8fGCXS7fAXNPNe?= =?us-ascii?Q?rRoJA0MmPH39ssW3qxlljrg=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: b7d0a198-4c89-47a4-182c-08de3d7f3b20 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:19.5985 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iPSysmBAgdngsRbMoQ4QKdFE4RonmWAMMt7n8Q3uGO4qTonnt4dFfXE4iUREzw2FvRddPTYGYwXb+DqypQkMdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 X-OriginatorOrg: valinux.co.jp Content-Type: text/plain; charset="utf-8" Now that pci_epc_set_bar supports subrange mapping, give a hint about that when calling pci_epc_set_bar(). For example, DW EPC chooses Address Match Mode IB iATU mapping when 'use_submap' is set to true. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 337995e2f3ce..23bbcfd20c3b 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -731,6 +731,12 @@ static int epf_ntb_mw_bar_init(struct epf_ntb *ntb) PCI_BASE_ADDRESS_MEM_TYPE_64 : PCI_BASE_ADDRESS_MEM_TYPE_32; =20 + /* express preference for subrange mapping */ + ntb->epf->bar[barno].use_submap =3D true; + ntb->epf->bar[barno].num_submap =3D 0; + if (WARN_ON(ntb->epf->bar[barno].submap)) + dev_warn(dev, "BAR%u submap is not NULL\n", barno); + ret =3D pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc_no, @@ -1391,6 +1397,7 @@ static int vntb_epf_mw_set_trans(struct ntb_dev *ndev= , int pidx, int idx, enum pci_barno barno; int ret; struct device *dev; + unsigned int sb; =20 dev =3D &ntb->ntb.dev; barno =3D ntb->epf_ntb_bar[BAR_MW1 + idx]; @@ -1399,7 +1406,28 @@ static int vntb_epf_mw_set_trans(struct ntb_dev *nde= v, int pidx, int idx, epf_bar->barno =3D barno; epf_bar->size =3D size; =20 - ret =3D pci_epc_set_bar(ntb->epf->epc, 0, 0, epf_bar); + /* express preference for subrange mapping */ + epf_bar->use_submap =3D true; + for (sb =3D 0; sb < epf_bar->num_submap; sb++) { + if (epf_bar->submap[sb].offset =3D=3D offset) { + dev_warn(dev, "offset 0x%llx is already mapped\n", + offset); + return -EBUSY; + } + } + epf_bar->num_submap++; + epf_bar->submap =3D devm_krealloc_array( + &ntb->epf->dev, epf_bar->submap, + epf_bar->num_submap, sizeof(*epf_bar->submap), + GFP_KERNEL); + if (!epf_bar->submap) + return -ENOMEM; + epf_bar->submap[sb].phys_addr =3D addr; + epf_bar->submap[sb].size =3D size; + epf_bar->submap[sb].offset =3D offset; + + ret =3D pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, + ntb->epf->vfunc_no, epf_bar); if (ret) { dev_err(dev, "failure set mw trans\n"); return ret; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DE1F34217C; Wed, 17 Dec 2025 15:16:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984592; cv=fail; b=WCXJMgBzyt591tygKaytkiXiVVdsW30RZwqbRO3a5qy1p/Mob/52cRNRnvlx3L/k/ZAhBqPh2IrXguyvTVf1RYG5Uf/NAZSv1IdIF1fvkjRmgaWiHfZG4B1kQnhTfc9Vlm1nAIgRLGlDNNyyXDe9ol/JJW7qldUzK+qeXCP0f+0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984592; c=relaxed/simple; bh=T5jp2zaMFoMP6W9EL8zFQ87tVN3MnldH4xZjzays6U0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ulo3d/LcWlsZPfptyet3GmpK1INEdvBmSJlb/yxVIF0u2tahji+wgthFEWu9jp/uVE0vhK0OvLWqm6l74BA2AoWxxOkp5MRpCL+vYKbKvIPNpSbyJ+z4fLUYhUHvARNtMFYakxr06nnO9ZjqOoDu6QwkmoxgACRi9K9HpGfqw40= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Fy5S4OBx; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Fy5S4OBx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tQSnL8nH6xU8hjAMYAk9vIcQeklxOo6SgQWIipoL0hcvt+6OPaglnvJRoEX85ksA5JSIVTVy4fZdz1CsE05facpMzIBf9x2oidIzwKCW0EaloQnDZbKYW/Je57ZlAMnMxBcjLkWRP/TKlVE0mSQWs8YGMxaFoSBZScxWkQcPPFphiMAdcjXsHvaObk73WxJVQNkswlsLAhYXWyaaK/tp481BDYRII1/dN9EdmhQMTZk+QdcXtyJpph/23b/5RNsAtfLfYgis1p2Z8le47jW8DrCvW2AwYv/q/RfB1fisy1x7VhlmDRtd7r5oDnLXbVrdvwzuEIguwUB02JqG0grnUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=FJNUYYkWVAavRFQ6IR47DRdNP1DobuH8bxwsyzuwkNo=; b=RU1ivh3/o4YFLX3ATJrPHeWw3ZCY7wl764Y0A6D8dXlKsIDo5pPBSaTw6g9F58NzV0BdHVrCyXrXlHjXr91QPg8xTu/ycRLIRcpG1DdGC6gMerAGkjHFlevC1IynjSidm1U6hfPG5EgS9S6oSYAHsRziJ2JAMR9yzzP9ZXzk7stW/j2P2a9StD+2jhik9iHbzZ8t+LFNMYI0+jeumQzG2wQ3D01U55idGp3Ayde/eDtV0xd4nWFyBympAJzo3OoNBXkLyx+vMcnTng5clmE7RAGgx4AQhFrhghdTl8ePjk9oM2V582ECJ6IXz7u5KX4AvEwKfmOMe1jlsO9qqm5w4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FJNUYYkWVAavRFQ6IR47DRdNP1DobuH8bxwsyzuwkNo=; b=Fy5S4OBx0uNdKzJdt0Cs597aDEmcxme1zsEYrzr0aqXfGKJmvOKbLNad8opRGo7sp44Jsjunbn4m/hxz1Po1k2W+jSXEmVvYcUWjFjUSqvfwHY6L1Nq5FPl6Ih06aqI884lfPCuytX1vB0WaBTYfPAyXoAMFFgTE0J4dLmKESOk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:20 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:20 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 08/35] NTB: core: Add .get_private_data() to ntb_dev_ops Date: Thu, 18 Dec 2025 00:15:42 +0900 Message-ID: <20251217151609.3162665-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0252.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::10) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 22a62180-2624-453a-a797-08de3d7f3b9c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Phc8SXXjQ4lS4MvD/X6PnGhGil39Bgg1dPLa3A81d/5iLFEDxNmxetkdN4Os?= =?us-ascii?Q?QOqL8hcim/Y8PoNrXqc+W//vV9qBV7MD404K0pzgbnRM0VgZR8oNM3NQXBNG?= =?us-ascii?Q?RA9lrO8fSDYPWb1fuBJxtyvvdjUc6CPDJ1qkHUylLdQR/O7bpVt2MWqZHTkR?= =?us-ascii?Q?0ETn6irtMsBOzdJCnHSZDTze+mu5bTg9itLDH0geiQeU/uG/z5UjdDzo/13Z?= =?us-ascii?Q?HeBvmE7dfrSrJfYa7UzUu1wQ7gelIdI3Kg9XG6Bk33g5NrO40BqpSE2+naGQ?= =?us-ascii?Q?YV5B+NRrWN/Pm78Hue3wDGno0O+ZPSqgIvBtyB4OGaWcIbw3i/wluxMhtt0F?= =?us-ascii?Q?AXo6RBDI/FkVg89GQiC193XG72RwMCcwF+ry8kiEQcSooxOqYaWq6mZIQyFW?= =?us-ascii?Q?NwkdfTb7LugudMENiB6x302PaYYxIVQRs87qewAq9pmrrbLfSQDTbkymdPAG?= =?us-ascii?Q?iuNuZdsoTgeybZYUdVL0ftD1sAjpFlxyKOlqStNWOcYGcAteLjz0Fjive61Z?= =?us-ascii?Q?dych+nWBwt2XVkul8HrsdvpSe8z9A9nZqK1X0PKq+198kpi3pLza4LL6z8B0?= =?us-ascii?Q?o08DBh6g15QOF7fzHz/jsDiD1Tlj6x5r0tQDBSmqePk+/OTWFm5tLR12gwyK?= =?us-ascii?Q?5S42oXYkHjp0RveAgFDpiBr1E4owcG+3eS/S+Gxs21pZOK3SJ3IQ1xXxDnpn?= =?us-ascii?Q?iOqEkoNfKl1/gwmSCRg0HmGpI/RCSBBL+QJzNDMDyqZfp/2RQwEIlQILVarD?= =?us-ascii?Q?7pimyXx/VYepJG2GC8sbccpsxnqfatf9aUMcWZSBCksl9Gcc29q69vipZcfJ?= =?us-ascii?Q?jG0mY8OEcUr8dBDsS9NeljLn49xgEE3BGhc6YK19vC/hofIEWoEptTWzaYmA?= =?us-ascii?Q?M7g7Af+cM8KKWhB58bs04uw5dgtNxMpeU4eYA+CRteIFMOpqHDw/crJQM0gu?= =?us-ascii?Q?AedYR2SHNEx1Klw+xxDVwkMu6qTWlXo2Xoh9kOMXhQy7eaOYsscXM/lXPrRi?= =?us-ascii?Q?+9wiDmiXCVof/+ncnZvZ18fz9m8T8V7+aORNY+y16MFQabEJZOGAdrgy75zD?= =?us-ascii?Q?dL9bhpLhF4Ui+eVD3btqacjz4HGPQFOCEQjL4/bLbmCWRSEMLMogrEOzs2Z5?= =?us-ascii?Q?jqfls1jD0wO+/5l9E5MnkZmguK2WiguUMaM0+gFwOKfs90vk2GZFNEBaSlgG?= =?us-ascii?Q?UO5CwAXLYfxxsrgFfKjqwnN6RFVjPzFhn+CrjAsNPJTcbXnqjojhE1vvDaX1?= =?us-ascii?Q?KpfumzQKkl5qq5QiUrhcBc7QHZNWQeT+k4YSPFXlp3iBdGkrVa5gxfig1LCc?= =?us-ascii?Q?P6aPsnxWX56rYpw6+GSEJa26pp+XeMGBIGLpgxMFuCMn6RburlwhmVadbKTT?= =?us-ascii?Q?N+5MWY49D9L89puoQlJxm+qlciVGMLb03XojkjBhu/hpCr+0CQedF3JM1sA4?= =?us-ascii?Q?3aTcnsH+Yyg2qI35ytaN0yt0Zc0N89wG?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YUwm6HckkKgYSy038p0ENaizXyLnTmWjjA+J18I4cg9kFqlXi/fCi6+XBJzl?= =?us-ascii?Q?HH7b2qOwULuvzIpLI4GtaPnuZCUzJkkrr6uG7izKQy4pe7CJtK9pQ3QHAtAM?= =?us-ascii?Q?JjLBtjRZKpf+PFlpHVRGUNEwN9qMtIq3XGIENMK1MgiFwHY7b+7MWnGgrGwq?= =?us-ascii?Q?nBVD5guL37b+GvuTRiX6jY+QX5rntL3BH0eINdezZA6wXogDLg+C+5WMHAr9?= =?us-ascii?Q?gNhouYXlpbIPczD0vJcvdx2Tmv7OKZ+6xdlHQcGdaxR4LsmfOJDkCkr6I26M?= =?us-ascii?Q?FMDkFqDVylQbhwzYru8ZVONpAWAvfdZXEPcs+hEQRN9MpwWExnpxPhuCn96G?= =?us-ascii?Q?4VoGcMp3NWTSJtANHLKurXZamXhOfCKsoRLOZuLeclah0TEZjBIjXdLp+ZB7?= =?us-ascii?Q?ouwi/VBt22ERp8dkTIoEU907MfHw9vrhsFPTqZvC6DmJlsWbuY+euW1vsiif?= =?us-ascii?Q?tvG+uGPxrBcJERRxzLm6MF2+pAiawBS7ohnr7SJ5gl1c8zbH/10gijr+RNQd?= =?us-ascii?Q?lRaRHuHWMLPsUQhlBQk/hiDvishPVR7Y9Tr4FLdlEIEJde8AdNQ8c5XPzwAE?= =?us-ascii?Q?ufMPrZsf4/m/5MW6Nyb5WwofECrjbwXk67R7Uvj5OJtoy1kwmpx4pbnUzWMQ?= =?us-ascii?Q?OOm5iu+p8cGYDc797OFYNwrt/Vs2/aYtOWha5HTzVCIlWS8CVdQ3fEoH8xzH?= =?us-ascii?Q?X+KNE3yp/wpgKzp0c9A9jvafliVprMfh6MKe2vKwLZnkPaRSbJmbs1lHeIth?= =?us-ascii?Q?sVzNz+k2vMW31CoUHF1VdsjXWVmn8n4u+pPmX7Y0ausnz4Hd8B447U6/xwxh?= =?us-ascii?Q?UkkUVvOQn4iVxKpaIz0wyfTzy6lLTgEz0/Lp5D2paTnauVCZ+saoSv5PEUA8?= =?us-ascii?Q?GR+8aXD0jCQg24uPkANUTmF0PFUj6h0p5h/vLFbxOLJYWngZ5Q7Sb2kdyaqV?= =?us-ascii?Q?oFbvyZlfk+EMCDgCG+qs/eKi5yAzdY2uWr8gZAx/iKfd/xYD0YRG3w9hiAQR?= =?us-ascii?Q?52X+BJv2Eqf0Bf6gjF7IkzZhNtlS4F9s0s2VZWs6uw6DYlwi25MJtHDttg5K?= =?us-ascii?Q?+G72rzxail+M5bl1TMQRTkKpd2Z8pq2JqiAbJsk2npr3sZTm63ULd1CouSu2?= =?us-ascii?Q?ZA1eRJt6KppwN519XCPBD+eRGTXwGcKGFFDYDy7OCypFaeEeBdjcGp0FKJYt?= =?us-ascii?Q?XhE/L8k7HGHcFnlf5ksw6q7vt3onw4C9aLYYsagREk9aTUGR7fTHyq9C0mFb?= =?us-ascii?Q?ZY2Ucxm2baqthL0bIuh/oB/2Pn5IaNFa92sJikshVbnwv7tPoJ1s3okYysy9?= =?us-ascii?Q?v88qn4iVznqWZws1/4SW457W4qW3zfOwf/z6AGYxhREAXUKIQkYVta3YG6nq?= =?us-ascii?Q?43aXlee2ZlJ3/zRTnZ0Clnb3z1VZ7jlFtxLDRgi42R+yOFh23B9UPbQc2sN6?= =?us-ascii?Q?C2wobNj2jK+gNDyx/pF0W9IE5VAbc5FK+jrm1qNPcruzQKCkM/Dit9rJ4gCX?= =?us-ascii?Q?pUrO7TAfbIjJsLzgarnTcIFDg0hFG7f9ZLywd3DHn8e1fTujwQkVJ+6S9Mgu?= =?us-ascii?Q?Od5EJzlCRSBhs9dMe7uuUoBn6uCaIJ1TQcldVXMkidvHSxIsBk9FJO3DKqC2?= =?us-ascii?Q?ZkGEs0NjT/wi/sYq7KVUmEE=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 22a62180-2624-453a-a797-08de3d7f3b9c X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:20.4162 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OrvG9RLaULOUFSGej2KBeu628cwFH6186NZxvbEdrdw7WXnXlCAiAEZ6A064QXoMKd62Nmzg0B0+dkCu+lq0Vw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Add an optional get_private_data() callback to retrieve a private data specific to the underlying hardware driver, e.g. pci_epc device associated with the NTB implementation. Signed-off-by: Koichiro Den --- include/linux/ntb.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/linux/ntb.h b/include/linux/ntb.h index d7ce5d2e60d0..0dcd9bb57f47 100644 --- a/include/linux/ntb.h +++ b/include/linux/ntb.h @@ -256,6 +256,7 @@ static inline int ntb_ctx_ops_is_valid(const struct ntb= _ctx_ops *ops) * @msg_clear_mask: See ntb_msg_clear_mask(). * @msg_read: See ntb_msg_read(). * @peer_msg_write: See ntb_peer_msg_write(). + * @get_private_data: See ntb_get_private_data(). */ struct ntb_dev_ops { int (*port_number)(struct ntb_dev *ntb); @@ -331,6 +332,7 @@ struct ntb_dev_ops { int (*msg_clear_mask)(struct ntb_dev *ntb, u64 mask_bits); u32 (*msg_read)(struct ntb_dev *ntb, int *pidx, int midx); int (*peer_msg_write)(struct ntb_dev *ntb, int pidx, int midx, u32 msg); + void *(*get_private_data)(struct ntb_dev *ntb); }; =20 static inline int ntb_dev_ops_is_valid(const struct ntb_dev_ops *ops) @@ -393,6 +395,9 @@ static inline int ntb_dev_ops_is_valid(const struct ntb= _dev_ops *ops) /* !ops->msg_clear_mask =3D=3D !ops->msg_count && */ !ops->msg_read =3D=3D !ops->msg_count && !ops->peer_msg_write =3D=3D !ops->msg_count && + + /* Miscellaneous optional callbacks */ + /* ops->get_private_data && */ 1; } =20 @@ -1567,6 +1572,21 @@ static inline int ntb_peer_msg_write(struct ntb_dev = *ntb, int pidx, int midx, return ntb->ops->peer_msg_write(ntb, pidx, midx, msg); } =20 +/** + * ntb_get_private_data() - get private data specific to the hardware driv= er + * @ntb: NTB device context. + * + * Retrieve private data specific to the hardware driver. + * + * Return: Pointer to the private data if available. or %NULL if not. + */ +static inline void __maybe_unused *ntb_get_private_data(struct ntb_dev *nt= b) +{ + if (!ntb->ops->get_private_data) + return NULL; + return ntb->ops->get_private_data(ntb); +} + /** * ntb_peer_resource_idx() - get a resource index for a given peer idx * @ntb: NTB device context. --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9362434C81B; Wed, 17 Dec 2025 15:16:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984599; cv=fail; b=br2mxB5WHRH89BifTgdQumwXn07NGNPeqNkSK8DIiGT32Rrra0Iwgx3M5Qov84W3+hjvPzRyKpRwtthivrq4BpF9NgoJpTayAF8inDKabgNmuU79XPX/ueyQYDULlTx8qYVZC4dWNQSwZvm4NNeKUUYMltlubWP65ZqSbrmfpSk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984599; c=relaxed/simple; bh=X1gyC75kPkBreSQ/PuHtjCb2BLVgrEyeeKKGwnkUegw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oCK+dDrjqzdbW4swF/MurYaCmzVGjvqM9DPWrkHVE31b6iEAKI4R3DVZ63GkJdbdp2y6W4O0ZHHT9enXcT9WEopNiRTlugZW471P5C+3IAXqOOiReeSrPfLBSaq+WWAuJJ4RWV9CX7A3fz9WPbXLP+hlUWcYN2TcNSCNqyLRj44= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=kewwEJUP; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="kewwEJUP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fdj5zkD6ZeInJJVOVo7kdyDGSiQLQACeQheChK0u9EaBfcLGID5WNph+0IYYzu4EWZ7Dg2by5GVDGaKIDegZuiq4Q/gLX0CFslS6b9JkFY+f7CJDdwyAA7bbVJBNTunSCzBnpnxxGcqL//CVRLDrngmPcrvlpiqAtNMjY2PmuAaxWIbocawnyWd42fv4yOxI/luxJYzvgh6Xgq/iJTk9nYiHudqfMKQq4713XkoSWwmHXTUSX0C0Mfbqh4uyAdJCkCIZ8K+dsMn1LWgjbrJ1NxYCagInr4jXKTwQwRVzXj0IxUwRIDBBRTmY97wyU0wm/qvVyqw98rfwf7njd7jJ4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=NTckdEK71i2FZ/shAyWfB9nnUIpC5pJr+kX4XYeqjzc=; b=YPbYnRDgVtOqDkzPddJoEq7kWIHUx13UvHfPI/UpzLEEB6CYGuOon9wSgEPopEX7OhbwaQM6FtBKF4g6w0dxPA02b11vspxFKgjtG8tItFKYfwRIS56cV+QtXtp62egz+21cs0UkiYTYZ61l3I4+ZfuuFO/ZLcHQDuxiRlfqcZ13Yyhzy24kRd2MWFzI9bAMZxpV+PiJY2s7Ev9v/9G1yWYLk1qXsVR+g7kxVerdnyG25KL0Ri2Nv9gDQ1DsddbWYJjHnpqDj5o9SH1wLSJsT8+yQdfdnGam+HyQ2WPvT0yCAOSAp7AoLfy/huAcvlUB0o7unDfz/5bf7dcdLb/bjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NTckdEK71i2FZ/shAyWfB9nnUIpC5pJr+kX4XYeqjzc=; b=kewwEJUP3Kfr2kJvoP/ZLbSrP+8q4mfaDUGVOhzoDXyzydnHWIbDtU/1A8tdFxjfp2b+sYa1tMJDiW/bcUQU6nVaKfQN7qYGAqzY5ySncvleR7+KPtkMJsHsEjzs9nQZLzWQBDd1x7MQQ/KKqajHAWj+zo+nNTHdylyeeo37EaY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:21 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:21 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 09/35] NTB: epf: vntb: Implement .get_private_data() callback Date: Thu, 18 Dec 2025 00:15:43 +0900 Message-ID: <20251217151609.3162665-10-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0031.jpnprd01.prod.outlook.com (2603:1096:400:aa::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: e5505afe-8728-4fa5-b010-08de3d7f3c21 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?b/J+3KHcygfi/mxJZgCctv39ukBPH6cbySCvpNGfuD/7y26g2TSOtysq3c2z?= =?us-ascii?Q?DpctGfjyk/Ic6v+Macs0mBKMPWMForl68D8C7b8PRbbcryk22tgsQCpLZRYO?= =?us-ascii?Q?0B8mVMaiDGH/YMCZ2DfNqR5+revlngBNukGf+4UOrcC6sdkxoTJCvguzJ7XY?= =?us-ascii?Q?ZwpbMzsIRPhaN8pSlIG/3wt4hMbfpPyyc2RACZFO9/cw7wFsuBaOY2uQ9gzQ?= =?us-ascii?Q?z3/ImPM/d7NQ4N4RCUwIiYj8i+aSJPjif+oVVncu2BRxbSuCyPC1U+Q+72wy?= =?us-ascii?Q?gR5TIpUge4o0vU8fjXDf+1KQtc2NPBWt7OPip4Oyxh3+yX6V5GTxadC7qSMk?= =?us-ascii?Q?T+8KKExWmql9P2ZqAiDfXkdAuWa9j+Qk9awI2y0o0niUJDlR2fo1jnFNVyAi?= =?us-ascii?Q?fgCBgEWfzLQ5SU2cyDaWFJubj/jAMujeeLkjpFIn8cukO9KEyjSgGFRqLFcT?= =?us-ascii?Q?MiAky79DD2BFBqYLuCLT9NAS7sEJKYtAiV26NHEiIviwoa3lb30z67eVDWkf?= =?us-ascii?Q?R8zA44Ys9vXUujpsXrKkTs8XfrdAN711q3FBdXfuEhtHNoPcZQS7ykhqPbR3?= =?us-ascii?Q?CV2HB9+VFSLJHLGI0ck9vn2pDXNDZwvvAdJG7kxJgOfT1ciMMQnNKrtUymVo?= =?us-ascii?Q?jQYL2I/YAEa4zHzRwHKiktBXiOIVj88SfQZVNd8LbbqYM7pp9S7TRszffwd/?= =?us-ascii?Q?xHV9Cz8fWuDON4j246aFrqH3APgvUApleaCuVeE6BhxQJhmjW6Upef1taaCz?= =?us-ascii?Q?nyQwlQ9I2KezoSUOir1jh/Kspql6k9cF0sBCKDpOu86LaxHxV/S2kCXmfb2r?= =?us-ascii?Q?6B2m7/QfygKn0gnWtQa8/p5VQRnUaeFQJHgCAY1JrCT+J87A0IGBn1fx25dT?= =?us-ascii?Q?ZfKXDEavpLySSIo+4itNBstbPwdhVjbvzErRP6bhGuC1I2WgXS5TYkBOoirj?= =?us-ascii?Q?rfylCLLhjLMIqb2bmHB5VKyAgk0le/nsN9N/GBhbh2b842vIJGR5UTE/UBlN?= =?us-ascii?Q?fFnckkFdOt4tf3JK2PPZcHLKWteLpj3BNT9VMPWyJcnEi8sEa3vhUhU9/3+0?= =?us-ascii?Q?QyZSi6uqaL3BjrpyVGXHUerd/x0CbK4hC9cwgN+ZNhP2b05S0zYyXzITIsZ1?= =?us-ascii?Q?V5XY6h2TqL9+DvOX2q3bcftQGsD57iJmlWlLB3sn/xn5BoT1pf4YePET2v6K?= =?us-ascii?Q?iiOC+NWyI5JVfv2E+ZYhxs21Uw2QO3R/D9A+Cak1Cw6wxpIZI+nF9DuEkVYJ?= =?us-ascii?Q?/HuhRvwMbs1yZyNjpt7J/mysMWsJieS6H9x8Hr2tMGkdWRQzguY9imX40ytX?= =?us-ascii?Q?k/d6/YD3oxF8Gdjz93kIn9Y3fnzBu696gYzfSw89Q+uu3LQ6gq8jyrLcsJl7?= =?us-ascii?Q?I8dywaNmtYzQGmkXG8OXlRRv0+cyqcxRVtI3AxsQvfj0EtZYm6sbQ3d37SzF?= =?us-ascii?Q?wxSBuOH4NPjdLMxgBSJqcu1oVP+5Z1YK?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dKW1Sb+gyUZ6NKPByFfdRyDh5moWczZvxKKq9IO5/uMUfRHog9KSqUU8saO4?= =?us-ascii?Q?KiYa8Uhj1PUB0A/9ZwpcqNR5iE0j1HTbShsjRMBjvusUjs23s9JEpxyQtE53?= =?us-ascii?Q?wer6ABIr4duVbt7BMtfE7REu8e8h5XkXhyXFCZKuKG6G8oJBi6YMiYUPrujz?= =?us-ascii?Q?hzYKZhpv5k5wtabgi0eqjiFDsQOiKt7kI0mj1VWfJz7Eb0YtOHhrfVAHmMiY?= =?us-ascii?Q?61Ne8+xosP4Cl3OsBKjN9gsQlmz1axarHWuWqhSmcPZbGwPbiCd/YO60yzqY?= =?us-ascii?Q?TLRZHqfcv6AzSxX8C26xCnYDGLI4amEKFpYL3hR6vZHdQApQVnr2nsNswgV6?= =?us-ascii?Q?AO1MC2VSKWn/+dn1pfa1VqWrY2saHIjROPH2beu08iBn837wbzAdR+ZAP+EZ?= =?us-ascii?Q?XrJWa5pWyesIqJm/zpMm0xwwv5uELFWjYcZK8b97IPtGn90ILJ72ZiQCxlFY?= =?us-ascii?Q?/IYFDIOa8QgUSowXeOeNse/ZS9ydZcNEi65J0+81C4FECevdeZAhW86n7mo+?= =?us-ascii?Q?3CuxbS6AJazlDTufYjvz7Ps9zE0s4Ed3mjg5pMiLAs9HYwiCEC1zj80a4QRc?= =?us-ascii?Q?jRWPHNfhBa6XhhJOQ4rcFZl09jCmaAVhmTl5PQzThSu+Yo4YCoeUyPSRh0hU?= =?us-ascii?Q?dFe9HaXLCr90zSHZXiv+zySEfPXTQZP+9tyIceT6Ve+4uLrHcOLBGLnflF5k?= =?us-ascii?Q?XoZLmE74XjOPCPechAwA3TK23BVFDQqYk16AZA7KIPQQkgv4XwmmrbjK6Mst?= =?us-ascii?Q?tP+wgdL41vW9EbHO3Hl5HY1LLdLTBXknewzLBCl7Zhc2EGAccctZ90TzhI2U?= =?us-ascii?Q?PEq0nbwZP4oYId0Di/xvC2MMsG/XB2PxTTEBQjb2aoCeyh65XjBY/tGA2uG7?= =?us-ascii?Q?/WhOqvT9rxyXgL9kpWi4YjV4f0ydFAkvVellkmIAx2tIBxwVo8BG36ysNa21?= =?us-ascii?Q?Ui/t+cR8DxEl9hxLjpPCcV70SqNfWvplwghph/PiSqvWbBvwIfl1mCky+I+z?= =?us-ascii?Q?5E/B5YEn8woPqrfqFsbEylVjqZHMzONEaY2SSdTb/t73/S2EkQ+46kZRcRXI?= =?us-ascii?Q?1e4JD7ETv3TZkFN3xakHHv7B0C+H4OJhVwyawnqov7QiRYrEnP74cTqwwLCn?= =?us-ascii?Q?XKF2bm9WxudUBVBkErVeHbJdZrYuBgQWed6w0WY2yx+4i5DrxiUPk6B/MjQG?= =?us-ascii?Q?dhkBBzYyqDOf8eGKTX3jE0/x5YeW9783Zahw7T+e475CyZ4fWTuaKu5Robho?= =?us-ascii?Q?zuLgQVofVyYT33ZsEqA7QNgOFRk4EAfzmkp/hoJBypetY5WXeN1PFYmALYRD?= =?us-ascii?Q?VdDEU/rAH/Vcko+03SWabmziKpbv6TjPuISIpy8oIHEA4iKzZN7kv/BpuYcP?= =?us-ascii?Q?23ZbSfOP1CL/6cJejwhQ++C5Ib8gKSXadeekbQmdjzuQUJRiCw8wN6FJnYmL?= =?us-ascii?Q?x/Ta18fYbmSiyddLR83mgo9sceMjOKp0Z4Vn4BEzYcVbaOYPdN+IdOKW7tjV?= =?us-ascii?Q?DGZNC+H7vet4wIDfP0Vmrs5IbYCj7pyvk7vZX8OTdbko82Rcu5TgxinssCb8?= =?us-ascii?Q?llwj/jxkJaQHX8Nychg66JLb1Y3w+/KPgCkR5GjjpCY/RpcRffDPiufFxgLi?= =?us-ascii?Q?FAshQXZp/Gkd3bf0uKXXV6U=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e5505afe-8728-4fa5-b010-08de3d7f3c21 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:21.2818 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vNEOS07uJQ0TVObqdoWxQKfgwHkPVi02EE3e69MW0KOymrCgBEH9PvFtaHtoILzPnKFbLX9Qsk+9Hex7oiNyBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Implement the new get_private_data() operation for the EPF vNTB driver to expose its associated EPC device to NTB subsystems. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 23bbcfd20c3b..c89f5b0775fa 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -1582,6 +1582,15 @@ static int vntb_epf_link_disable(struct ntb_dev *ntb) return 0; } =20 +static void *vntb_epf_get_private_data(struct ntb_dev *ntb) +{ + struct epf_ntb *ndev =3D ntb_ndev(ntb); + + if (!ndev || !ndev->epf) + return NULL; + return (void *)ndev->epf->epc; +} + static const struct ntb_dev_ops vntb_epf_ops =3D { .mw_count =3D vntb_epf_mw_count, .spad_count =3D vntb_epf_spad_count, @@ -1603,6 +1612,7 @@ static const struct ntb_dev_ops vntb_epf_ops =3D { .db_clear_mask =3D vntb_epf_db_clear_mask, .db_clear =3D vntb_epf_db_clear, .link_disable =3D vntb_epf_link_disable, + .get_private_data =3D vntb_epf_get_private_data, }; =20 static int pci_vntb_probe(struct pci_dev *pdev, const struct pci_device_id= *id) --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 831EA34D3A9; Wed, 17 Dec 2025 15:16:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984601; cv=fail; b=oCvSpTCRKofnDOfo0fwdW5YD7VrTZvPJIifxQw/E2SwqIL2GV5BWUbpZoxerUaKjCr37RirNHQ0Q/hLZsqpD7NnEGfVuAKIa5tMROLG3WACAUIwv8QbHDBW5rAU2GXjXuSOG7QZpdv0lHOORDTPWXdaVeex/p6kka5GZlNg5pa0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984601; c=relaxed/simple; bh=skyMRfeWpTo6BZzeY0XkFGD46Rk9WDSgpYO86pi8AjU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=klOUSicZrrkTezctCzYdBJdqfk1j0BA2zj2QVCyXUR0DMu9xxvx0UsGqgbBwjT4g5baNnqr4v8NssWNOTd7jHgkeM3za769UYgAwz8D2ZEvRNjXmvfRoIKIxh5vWYSgNDKyzfFBUeslQcTc+NPB628EO2OcU5hjKlqRd+tbQsd8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=A5B/rdQM; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="A5B/rdQM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tTBCPAUqqlRmVbWUPK9nAw+BJ0HlEQ6YojPTFXd+9Bvytw6z+M7VkMHqa0S3TqzbtUrBi85Y/ogMBlQEk6iMcaA8ZQWNZB7w7UTMV0vvj74o0KGIX2k4tHT10utLImS4jlgq6u1/aWZli4e9PYb2UHEkrMWFAU+DQ55CtJjfVetKQilGRr6x87P0lAZ99iDOLHVs3de719VTRMhkDUtmA4tGiSFWJgaYvlyK5v0t55rvVb3XiN6N7G1jcRSwIkcdqX4ukhRltWZMBZt045XwRZLVmpsszbIJvr2uIBSVfIwZPC0vFf8tzi+vuIfp3IcPVx5m61YIZxQT0rJ87i3naw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=jeZARrfypgx4Jd1FbPoPvm8MGHmkk8Jg//fU5qtO/II=; b=lOsoM3GjzuMlY90MnLAVA1tdUaJCNn3ozkKQwew1FByZWuvlIf+1zZYFcZMjXxG/bGob3hKtzOMPDiWZ7zS4w7o0od3SBXo7n64g502M1FvFh+27MP81iTCboSHa44Dx/n1zEoddy/ZDBeGKEUT9ydkg5Kxng20S8ciz/Ud5VQmaz2pTvfctsslvJpjgJvs+PtUYOv7bmgpv95GqRxXdyA8KdkY9lb382lTMAPr4YMoBxOzsNUtL7ZQmh/6IHYg27zxRMeOcRs9qHa7zPGtril6aWachYMtH1nGJ0NBv3Br46O45mWjiVzjEHCj6c6VEfp24El86/38db3MRJB3VrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jeZARrfypgx4Jd1FbPoPvm8MGHmkk8Jg//fU5qtO/II=; b=A5B/rdQMP7sjF0mPgaLXJOaWMoYaSoxoCqeX8qdz4wuxRb3wMkU3Q7oxbDSt/Kn1llM1+BL9iJ+0QFJye9S0/8H1u80j9Cpo6RKwrVkBJIt6cJ2rbUOjdJ9PvlOphsCgjX3jMLg0URU/Cqfo6CAS7O83UpMWUtaiqRtQmFqHkN8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:22 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:22 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 10/35] dmaengine: dw-edma: Fix MSI data values for multi-vector IMWr interrupts Date: Thu, 18 Dec 2025 00:15:44 +0900 Message-ID: <20251217151609.3162665-11-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0251.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: d1a6e9f2-f851-4e14-2211-08de3d7f3ca0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xpd1BkPF2m5gVpDfHUR3EbG9wtMtJ78pao3ehLp+h1IwvUFMKGcLGaW7n6py?= =?us-ascii?Q?0PSAS3zsAiMEA1uFKRpla3qFtclqotkm4PTV02JLjuyRUiNpqrb9wuZVD0DB?= =?us-ascii?Q?q0T5OGOjgjhYgbnGUhEhR0z8Q2wTLf3JXipAupRZHZjqmcMzzclLBTr/xMU4?= =?us-ascii?Q?ilN7tTAIdKuTU0hgNVkA7fWukGvMx7P5iy1feX749UQUoRLVq9GV80C7ZTQv?= =?us-ascii?Q?HKWcvRfHrE866UIhWDnbn4nVqeK0aza3p1v1bHc9SvQ4D+8/a+RNDQB2Vvs3?= =?us-ascii?Q?puTdmWH3xs4gSONu4V4rEgUSmMdKQDHaOuo3iDBNDuHjOq918tSx08iihkYe?= =?us-ascii?Q?k6UD+R3yOEZ3c+FgVKTrdPbJXVT5eXEORtuIEGelxMYH68LprMgP8qFw5DH0?= =?us-ascii?Q?RC7PNLp6WQZnztVlCmES071soagnH19B29fkNSpCa2+PS+lF06ATO0LImLP1?= =?us-ascii?Q?4LSiBWJZZ0GhcRgM09jqo3E3JML3YAiBkE+7a4O7Pbfr02YwGNz8FH+4tWgA?= =?us-ascii?Q?uIqxL0CNYgvJWQjCrvdhs9Rje+ciZanjLV1kMFNL9sVzY6ZkfdGpHBTMGk83?= =?us-ascii?Q?6vGbQch0Bd1t8hDgg2DrFA+oKhF+BBdM/kKQhnYvLENge252g6rkluAH5Anv?= =?us-ascii?Q?+/ld2IzXQLhUyRLhoOEyAPNFIApvYnhFDY2ZE+sqnW/pGdvjn1/9JLk5ilcU?= =?us-ascii?Q?uIQShu/Dxt/NtW2jJMgSbNR9f1F/lPOyIokGXXELRJe1oxZ7rjslmOViwUSj?= =?us-ascii?Q?URfpI9Rbj+3fgyUdZ2p061mkMWOjbUPIxVVzcxd17vIwi/bxHyYi1GERQ1Dc?= =?us-ascii?Q?LFWlNiv+IOlRVaQO3wGGcuLUmSEJnzlUmaqUcnWearNp7r/YsOQhEn/Zw5sZ?= =?us-ascii?Q?3UqrWTAzLhHqWPmoEH9GYo/RF43JkGMZmxcSDZFEMoSSvFcKk4Z9qUeVfxpi?= =?us-ascii?Q?j4SVo1ke8dxg3C/XbuuEj9TdG0T3YwKSP/PG9NZqqx/jrodWyySasMFvZqMr?= =?us-ascii?Q?s1098cSJiH+1KnN2wBxQxXcNh2qVyyIDZQXKnXqO8qbgLVnXXdJ7yMgTiW94?= =?us-ascii?Q?zTjxnDRK3CUup/LIQcwb27QsbiNjb8coWVdYXCMXOu5j3sAPqErXkmNuP/k2?= =?us-ascii?Q?+syoabH96b7GpTT9zDTQBdKu/F97dui1BUtLjDJHv8ZpJkZP3qCagoyEFK1c?= =?us-ascii?Q?BEeoUB7uFbVyP3jZyEL7786EdrgIpDFkV/E1D4GtHAg3Mdm5hDGrcuQCF3hS?= =?us-ascii?Q?ccEo4+AASbt/JSXUTE+AJ1aAOoX4+RtlBHQt/kdgdOGiAEkyDBRzJ47RjsLt?= =?us-ascii?Q?kzukxHXtA6Q8FaswDxgZaPG8RnavlvIBmsGmuuOf548GSJlToRHjHG8TTw4F?= =?us-ascii?Q?uU/lbVg0hDOrMxt3ci306ehMaS8FdHRL93YKXmKgiWvTsgBN837HrQov1QoY?= =?us-ascii?Q?Di9HuqtF9WM3zAKev5dePdtWr3rx0MH+?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kHtYGRrLsjiLr6jlrwfeaVJRM/dKfVQfX8hq4Mmj83rLuMJoVfMSa3hURlO0?= =?us-ascii?Q?jdqFvPlOjz/Q/+yr5VYwRkKvsnW8Nm2M9TLslg76ACCROdZYxauY9BHmwFfE?= =?us-ascii?Q?oQHJsSMd3RmOW55wIq7dqZzab9OaZgqKtxQPm3Hf42rTHsVUn5NPIxAep6lR?= =?us-ascii?Q?tptFOeFaH0mayiD+/PiOo0GeNLmpGecpL5NDrR1VKJt0X2WSp1+YvO+RRDi9?= =?us-ascii?Q?tMC7PP8Tx/0Ef67POo2FwcKX0tg9ciyu+99SXJbWWBQROh6+sQq2jxiq4bSf?= =?us-ascii?Q?VRpqsngT3rmKYfc87t76AcVq/s8Hkqm2a2HVNCuXNpYo4l2geU9V6u4wNIVw?= =?us-ascii?Q?dT2c79SrEUKdwQFtVqH3k8V4TR6cuttW0WywJYh/AklX4UIsimxrSqlmzXEp?= =?us-ascii?Q?PClU1Qu5VdOUuQmhHVxi0o2CfKwUNQmYNilGWrV8KWsyo3R52SXLzcaY0q9e?= =?us-ascii?Q?Jv0sFmcCUhZB8rq0gnRtM7nktyi0HMl2JBIV4LzzKCSrUP93TD5aoPTbLZZh?= =?us-ascii?Q?Z4fgXRmQNkjGD7jPHyfDXBpglLdjxCFxj/4rldkPnt49lSchNHqfqJhdKOL4?= =?us-ascii?Q?GR/bdRHBucdEdMGuVaAcvYwmS72lxvkhYJ6Hdf5djMNBgfhDijqsvU6AylpT?= =?us-ascii?Q?o0f4s7HrACMg5nGpWhXoBV8x5mme6TH3vCX46r7KNTA6MMIAcxRDF4u7e5xH?= =?us-ascii?Q?RyT+6CXKoQP2UlfvBOTnXXs8jXF70kSNeigYqenXuoSM2ElvShOWqQnm9V8z?= =?us-ascii?Q?2cwSTh+3pllhB7Xcp6YeP1GRls7NtHZPUZHm1hxw2Fjlvg5mnhQhQ+WTnCwv?= =?us-ascii?Q?fk47cYWG7SWdMWnSaq4T0TnDpO6afd1+O12dQ3kTs8JEr9xWh+GL53fmpW++?= =?us-ascii?Q?QPJbNwTi2Eeu7LP5ByV0UGS1JmhH+txFCrU8k+qVE2WqzAtlxtMh8Rzkhcg/?= =?us-ascii?Q?NdMDeLfKzG0QIXge6T8Ra52gtExHMWPdF3rEEfgNo0KodDjJHvqylDxxhiCl?= =?us-ascii?Q?JsXZEmUbj9xMqdhFFO5FXt3SfU0GuqWPxagqXUW0HGMhOnfFmUa2TW98tRvw?= =?us-ascii?Q?Mjxrx/PEfXyVWPRIdOyPyXb45TaHo/oBpeMkF/bUyP403l770YfI7i+CM4tq?= =?us-ascii?Q?eD9mrHErV6OUfkfMvTD/nnk0V14uRZEMwl3Pu8iWPGCNKZl++yaFsA9Sbljt?= =?us-ascii?Q?BWDM6of9GUfAbzdc0rVTLVvV2+haGLu9teZ+Qpmuk/IiGv8rSlQAbSsYlcWz?= =?us-ascii?Q?f8LSLYryKE9yUd9AhsqDxkiodCH5338aEOULn/fPMnI2CpNNL/57RYXKWsK4?= =?us-ascii?Q?zs26u30MuKRdq52tLwzF+i30Dq4PONYCQWbPMkoEPowMwSUpnL1mw6ToJ+zN?= =?us-ascii?Q?vc6Scx89yew+OYrZX9m2WLOm0+382MTjgsBCrMCF4uSdcpzxdxss2Er51i1i?= =?us-ascii?Q?MX/hMoazmJTzAWiF1xto88MNSwooQ/TyWBXqexzKe2sxMlWQ8G0h2FbPrwva?= =?us-ascii?Q?otu7wN/iDeyGmk1eWZ7TI6B82vQQLEHnDeYkKUJrAU7ge2jJ79tP1wOf7hYb?= =?us-ascii?Q?MblGks/JtkphTnpLj/LHbgt4W98bYY04VMQEazfXwdDcE9UzDWj7qJeVTVxq?= =?us-ascii?Q?qSZKmZTM6UoQ4+q3favry0Q=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d1a6e9f2-f851-4e14-2211-08de3d7f3ca0 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:22.1194 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9fx1PDO60d02lwUeeKRd+Q9AHLnZeRt5lkHcNkDiQIdqFTdrcoEJLjfHXU6fcoCWwv+LHc9kl+UFad2jHnhimg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" When multiple MSI vectors are allocated for the DesignWare eDMA, the driver currently records the same MSI message for all IRQs by calling get_cached_msi_msg() per vector. For multi-vector MSI (as opposed to MSI-X), the cached message corresponds to vector 0 and msg.data is supposed to be adjusted by the vector index. As a result, all eDMA interrupts share the same MSI data value and the interrupt controller cannot distinguish between them. Introduce dw_edma_compose_msi() to construct the correct MSI message for each vector. For MSI-X nothing changes. For multi-vector MSI, derive the base IRQ with msi_get_virq(dev, 0) and apply the per-vector offset to msg.data before storing it in dw->irq[i].msi. This makes each IMWr MSI vector use a unique MSI data value. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 744c60ec9641..1b935da65d05 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -855,6 +855,28 @@ static inline void dw_edma_add_irq_mask(u32 *mask, u32= alloc, u16 cnt) (*mask)++; } =20 +static void dw_edma_compose_msi(struct device *dev, int irq, struct msi_ms= g *out) +{ + struct msi_desc *desc =3D irq_get_msi_desc(irq); + struct msi_msg msg; + unsigned int base; + + if (!desc) + return; + + get_cached_msi_msg(irq, &msg); + if (!desc->pci.msi_attrib.is_msix) { + /* + * For multi-vector MSI, the cached message corresponds to + * vector 0. Adjust msg.data by the IRQ index so that each + * vector gets a unique MSI data value for IMWr Data Register. + */ + base =3D msi_get_virq(dev, 0); + msg.data |=3D (irq - base); + } + *out =3D msg; +} + static int dw_edma_irq_request(struct dw_edma *dw, u32 *wr_alloc, u32 *rd_alloc) { @@ -885,8 +907,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, return err; } =20 - if (irq_get_msi_desc(irq)) - get_cached_msi_msg(irq, &dw->irq[0].msi); + dw_edma_compose_msi(dev, irq, &dw->irq[0].msi); =20 dw->nr_irqs =3D 1; } else { @@ -912,8 +933,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, if (err) goto err_irq_free; =20 - if (irq_get_msi_desc(irq)) - get_cached_msi_msg(irq, &dw->irq[i].msi); + dw_edma_compose_msi(dev, irq, &dw->irq[i].msi); } =20 dw->nr_irqs =3D i; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3E56346A11; Wed, 17 Dec 2025 15:16:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984594; cv=fail; b=KamF04VrYDP26USh1nvTIBr/foOszqTo+iPe+GuNs9dibwxuodJiJQlhTIf1qfHfI1hdsvWxpHPZxXUTgdWc31QWjoapuP+i/DbmYF7ZMrnQxBL60djNBwxbATahHn2idTFiFKEzbZ9dd3elbaT/Ocg9hpKuG0byClCioooEfDU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984594; c=relaxed/simple; bh=QulA/l4jlXLSCdzEL01TZUBJhPE+Uy0xusRCEA2UqxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SQoCtBKu+n6GzGf9i6tTuDY2Tfu0kStlnkRwCUxD/V6FaoH82l/PpbKHppJxpfNabbLTwgf2QPHqj69TIDBAw9vw+EzMJ4AcVY4kHNI20UPjVbu15H2bSIbS33upQeAAhZBnRfEszlzyuyroPEwM3Y/6QmC/GD9QuGbMzIlnAL0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=pyIwc27d; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="pyIwc27d" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aLFbT9UAOj/XFFPWhR4e+9N7jorEAWRXMsONRrXC9Irmr9BipujG2oi9HvWRaD8yjfb3GbMGd3WjuOhYcNUoF0ido5PgkTWtaZUgSfIEto53hUKaT39aizVl1FHIE6e5rAIaT3+PRWjGhx7EKs3RwJCsWJaNvwLqmu2H+QH2sGKbRtRESXefYS2JPQQY6ZaPU0GHTguXoF65G5EuSDDODHqAywMyOH6K/sAOayb3AvJRLvzrq1PY6gZ0AFGPGhHVr8G50Cla7XhIyYE/NdF6jHqvXQoarnj9zHmw3Zn70t9g1as6/34vxyMapnFKWQXupJ+tsc1ItsebWcsUZY9LfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=WhYXTzIUkx70sdTDrWwodMO1dxR+UYO3uw1/O8oDCQ4=; b=WqjGm6HzCk9BmVmZllmi2IwO5g/bqvH3wdWue9kWnnfpQNOo62Vyy+LvGlXEBwrDtske2VNqYFuYFg68GqDwQJe58z0pF8oN11fiVgEwWwwaHXWV0ARi5K7eUivJJpWhbaAZWja/WL51W0TmHzv2G7+OPg6ELDsKilX5m0AG5KBY0noaYLvhFIjt7RV1fsY1LwuBt2biSeVPP/kbL4l7xEskMTCeJCJXHPi5pvEJKnh2uPP9zqcr81+Zd06kLgCxtR/jyKXjRGpRoKuChugUTfDHd7YlbXTtRZS/YyYVbYyBH7yM5Pi9OnutYThSV103KSHxfByKzuDrkZSAJPS4uA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WhYXTzIUkx70sdTDrWwodMO1dxR+UYO3uw1/O8oDCQ4=; b=pyIwc27df7uFkxg3oHyH0NnJAVivanX/R1UQsUKEfB0x1I300kYLbN3FlqZ7Z37wK5qcQ8sEFdqKHDNNQL2cZdkmdvDmk4YzlT8Snx3BflIeB37womuyHuJVOBmPNxOTbiRlG1DRSffXXWl6wg7Hf150FGbLrEAAmYhqr2wCTAI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:23 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:23 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 11/35] NTB: ntb_transport: Move TX memory window setup into setup_qp_mw() Date: Thu, 18 Dec 2025 00:15:45 +0900 Message-ID: <20251217151609.3162665-12-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0031.jpnprd01.prod.outlook.com (2603:1096:400:aa::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 25dcbf3b-eaa1-41bc-8016-08de3d7f3d28 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?oSF/SwuCPGrzBz+I8Mfnt9jH4AQi+w+HVgM9xAYk/Bdc02+YSSXld3p7zzq/?= =?us-ascii?Q?nnRRy7av4vLnPudY6cJTxGQPL6lANMU7n8FJewnIY2SDOB3/KA23Mu/Ig/hh?= =?us-ascii?Q?WyoD6/qabZikWvT8g9Z9vDhJoVM40stozX/MpiNKm15Lwpb/9ZJsDCytcFf7?= =?us-ascii?Q?M8TBVMjzqPFVh48+dGrgEeR/y0vPBLjSe4V9bDPjlFkbobbHMCON3HXeAR+k?= =?us-ascii?Q?iKVZ/QjrdAcUATwYTTM7n/OcwC3yLTQWQmK6MWfpRAvEVi6PQqwBa/VElUqY?= =?us-ascii?Q?oyf+Yjdsx/G4sQCa8Fq21qOxtNV/gbRxHJBa+7NUt2rdzB/Ik/O53xJ2FKwV?= =?us-ascii?Q?RDGZ6cmR3jhMYFPHbuCKzz4jjFuqS3IoEAxUQSHlc38nswMK618MM/ewsu1f?= =?us-ascii?Q?DvaE/+xlLQqr1KQQkbChSg7Uv4CAG/uHVWS8pJXszQc2+LqqMkwVu/A/EavH?= =?us-ascii?Q?fkVkJLpFA2ND4mXWRKDYlnYyidSTbaD9whLfSn3IYXzBgmZXtbQx0lTJCkpX?= =?us-ascii?Q?+5Ji8glIp+Is/7JAfPDijQDKv75nLBKNjSRnf/jF6ebsnVUiBasI2JBXS6gJ?= =?us-ascii?Q?FWzMATClKgk/Rvy1PLGssxXtwVKIhOB8FOq+LlgIusNqdJ6yD4/SwjyvdcS6?= =?us-ascii?Q?wIFMVxkbOv4ml5SxQ7cK/TC39/im4oLmnoeuTT3i3kSRK/R20Og1HFrl6iE2?= =?us-ascii?Q?bmemUry5hPobDkz1aGyoEttRXIdm9DLXU7ejlO5fla+79Wp0Fy8IeYehowrC?= =?us-ascii?Q?1XIN0aY+IvGg2sz5w+qsWzugFYBazfH1CYmMfaTOvQWLosYv4x7WcKnWCVNy?= =?us-ascii?Q?wkKWPHwhEp9iJdnYw8i+fgtKHFJoWB0mIVTgd/RY1YJgqeyJc7+aQ3GBCugV?= =?us-ascii?Q?aRUZj74k8nzKu+/zXZeE53SKNG+GwJRFN+kA9pqusgBzcYSxYEYMMxAXnTGi?= =?us-ascii?Q?FvBiQmrc9YgwAE8eE6n54XdkNW54FQNMjrPDaE5tXfVFdpPdD8kfUsTvEk8M?= =?us-ascii?Q?oNESfz+EQJMe9isWE03bj8fhXiwbtUCQv9ZgJGqOYmDrPvOlBFDOCd+vGQpV?= =?us-ascii?Q?psPIwqvkaK/DYVxCB/IuaFsXNED6j90k7U5yYtFCMklH7T1drdrwuBdMfttb?= =?us-ascii?Q?Y5aFlJ4VGWEValv/0ufM9np/pb8Ak17j1PY46lKajCcBWrSLjjDAoPIkNiuI?= =?us-ascii?Q?ehgf98JAnIYcIraGdxK5CFutU/Ghbobg2q2cgyTkpxpwyafYxpklVs8qTag/?= =?us-ascii?Q?L1zm6IfX50jFH0e66vIYvbOsmdEjKZrQQ+2MuDRDSSYb6oO4GA6CyGMpT3g4?= =?us-ascii?Q?6wp/CkeRLJ5lBvNw9QabR7Iaic+WcY572pxHmN17ihRVB0pa8wHlk6YHMWg0?= =?us-ascii?Q?GNoyjn8iBUy6razaVNvOQH9l1uOBZv49O+QbCa2PsUrXnhvCY2KfpiMVHQdS?= =?us-ascii?Q?C5C3hInyWjw/b5QcaOzuMEG7NKrg8mpB?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CaGtZsmqJ+UxxL1crOoR9iwNQXnYX9ue9N2JDO2Rz4/f4EomK/kJVzZ2AqTn?= =?us-ascii?Q?5T21t1c2n7EjgI5KVnic9PEr6c2lgxWux0bVSQweBgTVhcw5TlfwrIGNynv/?= =?us-ascii?Q?abJ65HUrxsMCtuEsw8bcsaCWG/mCxp/ZT4MYZ4ixUI9bhxuYg4PEkhX+22OO?= =?us-ascii?Q?ZsF0jvTgArYlf4hJ5sY32k9WNzFFgF0bybK7yIuKxra6plOt8noeC2ri2u4Q?= =?us-ascii?Q?Y/3+BFP0T45CvVAthC4lmFfkUDZGIvuMcQVSPmKGABN47Qvuvpn4bFfmuSOP?= =?us-ascii?Q?tKuAAJtBuqLGA7/lgOdX5bmZIwnMw9rAR1ZUBa3tdTsSkPToKgYIMcFHRQrC?= =?us-ascii?Q?JDTno/VuY9Vc4VH3ebdtuyxp3GQ8TOYXC2nPWzztjaPULhk8Tl8g59wpnhnt?= =?us-ascii?Q?CoZ06xzLewbtrqaoWTuJRelHLJlK/ZyT3882lyz3hv60hdVRElG0qkrWOLze?= =?us-ascii?Q?ucpyo1D0y9FvcPafDn5tFF2eGdlvcNCi8ULweUNk2L6WEJipnksTihr/n3tc?= =?us-ascii?Q?RbBfNRFHkV3iMyhs/BEu/Se+J60i8TSCIRNnwIxE1z5J2ghRJ7cSeu+a5NJQ?= =?us-ascii?Q?Ahcnhe8mMvuouHExVmABMzQr5FYc3xAjhXqBX5Wea8exxLw1I9WbvNj2altl?= =?us-ascii?Q?SJl7Fcm/r/pPeex8XlU0IKH5oPn7yDMYafprTVwk5yyjDiuksIee1EBhGesi?= =?us-ascii?Q?zV/Xz8DngWQwJO433qZAsgnsEm5wUx9ORcafzOEe/ywvWWAXC65rFw0th99G?= =?us-ascii?Q?hadoG/ccvnH58x9EaCsIxeIBOGIldSTR+qorl2F47qrWPMzGdhTdkqaolQoZ?= =?us-ascii?Q?ozujhcpV6lsZM3L8syKQup2a3TkpGcBzfSjv180rW57APDj1xXXc+7wjYCdG?= =?us-ascii?Q?nD2vrAv2Phe4wAEO1o2tsmAXztSyRFDAfZ6TWZVcGA3wizoK1dwCVhh+kRcM?= =?us-ascii?Q?GQ3MxeBgnGI2YJEQtv8WWjyuGmazxPsDQsj/YbS7ziHzcct3nJT6z+H6Mpb5?= =?us-ascii?Q?+Q1LzqGloNJKSx4B3ydeguIcBwbrl3qPXrhANUCAdEQ2SAqkJd/rFyTOvobN?= =?us-ascii?Q?RhdNVNRciMdMZwEKdF8/Q/IuB2FMpcJ9au9X6N9/T8qOQx2raqYfELaBj10h?= =?us-ascii?Q?8EsosFvQPJDMc+46hpvaSh1pa9WgGlF8mdoRY69U2NiLyqIAyaGF5WQ3H/Ct?= =?us-ascii?Q?GXGsnMXI5siAPpJINY3b6+2n5jLKZTxY+lf+BQpXd7xFeTNZa5o2mQOR6DoC?= =?us-ascii?Q?upYilDYcJvMgSIRLn+W4EAcwhzdEP9gVG/suG+OTasfFXWrQ9EmBYeWLOOE0?= =?us-ascii?Q?x/30IXBz8I7ket7XNgy8wFGoQ4wEZ3cHrbt3tj9rUt0UfBpR7rcT7sxsr5t7?= =?us-ascii?Q?1Fknp/AGlmBm3x6DyRsn9Za6XiY//P1dclZzr075O6XSvDXZEIhoAW3hQB6c?= =?us-ascii?Q?UylmhQhFmInYarwQyJj+XBYxsxJwA05xp5WhJjSb2H+Oznt7lmqc1mwHk1VZ?= =?us-ascii?Q?6jvNbpL+KMsAJDGme04Mr9vZ6p7RebhFhfUkyVZlZdA6p5oWWczR0tDAfDTx?= =?us-ascii?Q?SsR/qOI6XWAxhTVDnwMGOz/mv7CAeZIazEQbcQW25DXdLfsqA2/qg8gCwUId?= =?us-ascii?Q?LAVl3fNCl5c8LXx4K/xvZI0=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 25dcbf3b-eaa1-41bc-8016-08de3d7f3d28 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:23.0288 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7JPH+8J+sTAYOZrEj4y03oyEaVbi5qYutqIbh6/jBMv9RpIk4886HWr58jBLGI+Bj8O/0q4TIGJE0zg1cjkhKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" Historically both TX and RX have assumed the same per-QP MW slice (tx_max_entry =3D=3D remote rx_max_entry), while those are calculated separately in different places (pre and post the link-up negotiation point). This has been safe because nt->link_is_up is never set to true unless the pre-determined qp_count are the same among them, and qp_count is typically limited to nt->mw_count, which should be carefully configured by admin. However, setup_qp_mw can actually split mw and handle multi-qps in one MW properly, so qp_count needs not to be limited by nt->mw_count. Once we relaxing the limitation, pre-determined qp_count can differ among host side and endpoint, and link-up negotiation can easily fail. Move the TX MW configuration (per-QP offset and size) into ntb_transport_setup_qp_mw() so that both RX and TX layout decisions are centralized in a single helper. ntb_transport_init_queue() now deals only with per-QP software state, not with MW layout. This keeps the previous behaviour, while preparing for relaxing the qp_count limitation and improving readibility. No functional change is intended. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 76 ++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index 57b4c0511927..42abd1ce02d5 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -569,7 +569,10 @@ static int ntb_transport_setup_qp_mw(struct ntb_transp= ort_ctx *nt, struct ntb_transport_mw *mw; struct ntb_dev *ndev =3D nt->ndev; struct ntb_queue_entry *entry; - unsigned int rx_size, num_qps_mw; + phys_addr_t mw_base; + resource_size_t mw_size; + unsigned int rx_size, tx_size, num_qps_mw; + u64 qp_offset; unsigned int mw_num, mw_count, qp_count; unsigned int i; int node; @@ -588,13 +591,38 @@ static int ntb_transport_setup_qp_mw(struct ntb_trans= port_ctx *nt, else num_qps_mw =3D qp_count / mw_count; =20 - rx_size =3D (unsigned int)mw->xlat_size / num_qps_mw; - qp->rx_buff =3D mw->virt_addr + rx_size * (qp_num / mw_count); - rx_size -=3D sizeof(struct ntb_rx_info); + mw_base =3D nt->mw_vec[mw_num].phys_addr; + mw_size =3D nt->mw_vec[mw_num].phys_size; + + if (mw_size > mw->xlat_size) + mw_size =3D mw->xlat_size; + if (max_mw_size && mw_size > max_mw_size) + mw_size =3D max_mw_size; + + tx_size =3D (unsigned int)mw_size / num_qps_mw; + qp_offset =3D tx_size * (qp_num / mw_count); + + qp->rx_buff =3D mw->virt_addr + qp_offset; + + qp->tx_mw_size =3D tx_size; + qp->tx_mw =3D nt->mw_vec[mw_num].vbase + qp_offset; + if (!qp->tx_mw) + return -EINVAL; + + qp->tx_mw_phys =3D mw_base + qp_offset; + if (!qp->tx_mw_phys) + return -EINVAL; =20 + rx_size =3D tx_size; + rx_size -=3D sizeof(struct ntb_rx_info); qp->remote_rx_info =3D qp->rx_buff + rx_size; =20 + tx_size -=3D sizeof(struct ntb_rx_info); + qp->rx_info =3D qp->tx_mw + tx_size; + /* Due to housekeeping, there must be atleast 2 buffs */ + qp->tx_max_frame =3D min(transport_mtu, tx_size / 2); + qp->tx_max_entry =3D tx_size / qp->tx_max_frame; qp->rx_max_frame =3D min(transport_mtu, rx_size / 2); qp->rx_max_entry =3D rx_size / qp->rx_max_frame; qp->rx_index =3D 0; @@ -1133,16 +1161,6 @@ static int ntb_transport_init_queue(struct ntb_trans= port_ctx *nt, unsigned int qp_num) { struct ntb_transport_qp *qp; - phys_addr_t mw_base; - resource_size_t mw_size; - unsigned int num_qps_mw, tx_size; - unsigned int mw_num, mw_count, qp_count; - u64 qp_offset; - - mw_count =3D nt->mw_count; - qp_count =3D nt->qp_count; - - mw_num =3D QP_TO_MW(nt, qp_num); =20 qp =3D &nt->qp_vec[qp_num]; qp->qp_num =3D qp_num; @@ -1152,36 +1170,6 @@ static int ntb_transport_init_queue(struct ntb_trans= port_ctx *nt, qp->event_handler =3D NULL; ntb_qp_link_context_reset(qp); =20 - if (mw_num < qp_count % mw_count) - num_qps_mw =3D qp_count / mw_count + 1; - else - num_qps_mw =3D qp_count / mw_count; - - mw_base =3D nt->mw_vec[mw_num].phys_addr; - mw_size =3D nt->mw_vec[mw_num].phys_size; - - if (max_mw_size && mw_size > max_mw_size) - mw_size =3D max_mw_size; - - tx_size =3D (unsigned int)mw_size / num_qps_mw; - qp_offset =3D tx_size * (qp_num / mw_count); - - qp->tx_mw_size =3D tx_size; - qp->tx_mw =3D nt->mw_vec[mw_num].vbase + qp_offset; - if (!qp->tx_mw) - return -EINVAL; - - qp->tx_mw_phys =3D mw_base + qp_offset; - if (!qp->tx_mw_phys) - return -EINVAL; - - tx_size -=3D sizeof(struct ntb_rx_info); - qp->rx_info =3D qp->tx_mw + tx_size; - - /* Due to housekeeping, there must be atleast 2 buffs */ - qp->tx_max_frame =3D min(transport_mtu, tx_size / 2); - qp->tx_max_entry =3D tx_size / qp->tx_max_frame; - if (nt->debugfs_node_dir) { char debugfs_name[8]; =20 --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1107834A3D9; Wed, 17 Dec 2025 15:16:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984597; cv=fail; b=sxH0I0WL0v/lz4NKrOr+uQNU1yWYAGzi6sXkoqLVRPh2PALocf3vR7BLtQiKSPVE72FObqCC/XXw9/uecABWPVokWI9NnWMl7cjWzyEacvI25fzj3t0EeHV8CB54wHRxfuf+ThFoNwBGZyWF94kEahdRKKH5eNLAt9xzwQVB+tY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984597; c=relaxed/simple; bh=2unACm8YuH5rg3Kr8a77L0+4xpOwH6gDn2wu0QO0SEI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JcTDO4KMFel6inVn43BL19O/jyS9C+ZrgVwYvbWjshf4g6dnW8rEo+AZM9OgL4R1shY6OFRAgoLyV4meLzF6XQIkIW+C7qNsOdSM6vHJcZHUTVz0zTUBPyldolLVxKfFNnVGCwCXibhoNHAiYjhPdiDS/dJQQIrbxi6S2JEHdY8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=HiOSFIXd; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="HiOSFIXd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aAKop0ASn98KTR1l49xCFJRLJQYxuasxwtE1vdGFUhimujmFnqMwFkUgFg304V51C91d3I3w+jXYF//dE8b5XIwlq2OLywxE+BAtqe5t6eONQkqClkamtcQiLb+yADI3aEMAsDFhKPzy/0iNJvtF8AGoCQ9qCLcEr0PLX9iac5rg2NCryvOaq7/EwfZ5EtJ+DaBryFZ+z0Trsuu1zwcXucpyNYtlt27ZO1Vyc4wv+p2IEIfyaod0Q0VngVKLq18oh0ojnhDRJP/8BbSlg2lWzdRyXl9vCkM0q2sP4AL7SvcNCclpbhPjd6esHY2gtCF6IaT7gqTPDAyo7i3EssoLJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=xXTRUMQYNz+2O0wAqrZ4c8/uym3gFTXkl1J+RoIWNOA=; b=Oh7Cpxf0CQvKvPU8v6DKOh8WWhbfbhoLZReVjj3wwmfnDkT9sqh1arvGYcePMqeJRrV79DD74dTtR/fwbI8HMjqYy0bZvKqKWznAAwzbdgL9TszKIx+bDdSKmTZxKS9NqTw5sYkLWlKS4RRcl5fUrgUayPV8+wxR1nPZc4suYwPko0//OU89gbaHYViF71pP7SQ32CKGxvbsEHJ54tfhwTWjA9cyDPnjD4Tslv9sExcaRJ7hGKpy52FdGcruHm6Pu0v5IubnNgWtATU783uRp0pMgK2Y0+iD7s4DDQOCMuQzB+K0Yne3+WaBiyXtWsUxtRSjoWRe53XbPGgzqY8S+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xXTRUMQYNz+2O0wAqrZ4c8/uym3gFTXkl1J+RoIWNOA=; b=HiOSFIXdQKU1z8FfY2sMlBsppj+pgLJ4IIf83hWzn+BpRxCAMGt7vzx6qQ3bwimqVDMkdl2oFHis72qEEQIni1B86t7mEYKxiUTb0EEEDozczvf1lRARRyB8QVPHHrF+2Vi3HQ6nPlrzgXbLZMQicwgl1GCqCKtLzDRk1lPm5ng= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:24 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:23 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 12/35] NTB: ntb_transport: Dynamically determine qp count Date: Thu, 18 Dec 2025 00:15:46 +0900 Message-ID: <20251217151609.3162665-13-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0060.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:371::8) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 176a022d-266f-4e61-7bee-08de3d7f3dae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gwy32MFL3m0NECEQE3NVqJEp2zNSsccBSMuvKk7E4RZnp5uTWfwSnlboI2i9?= =?us-ascii?Q?JXULiawNx2BlHzI95WUOxr5kwjtkFc6/U0KwcEkXOeDJ5v5FEaGw5GjEWFB9?= =?us-ascii?Q?Qgvm2EnKO1+XdorSPnpkrvsOjH39YIDU+ogaFx6R1BtPPkWEzTgy3YGSvgOY?= =?us-ascii?Q?KAAdK4P62ZNRiRFPv0brG5WqXQBf+GXIzMQh0DTU7l33IfKuLuldc/jWflep?= =?us-ascii?Q?B/Ki9F7fBST9RHS5PgewIv34lgenDoMmUonsVym0HDHUfA++jwUxXkPDrn3p?= =?us-ascii?Q?pNM79qXlbi0EtkhF1/Lcp8pQasK2tDcZrYTBO7+Q2bOyU6osH+qeVbZpntIo?= =?us-ascii?Q?nm96jxOsmviL38W2havyGPhZpVHzKypGSCw7pJQ3sioqvE7nrOVBAzsw/5as?= =?us-ascii?Q?alzLMJHnAh7TkCtcdcigVdVocwWFZKfS5CLAR05DyO+rp96neuJLG4xaIuML?= =?us-ascii?Q?of6w1IauFEMFmGhbne5Jbk/dapUOx8ZNeFHc/4+2s+d+NlyU7kBSAMzaeIVr?= =?us-ascii?Q?cLxldBM3B+4d7A0Ma7QlGxWD0Ofw0XjCkamlvmrIPdQtbngUjN+jSskzy4Fy?= =?us-ascii?Q?Mzr1dbUpZkjhjW2ycXdcvxS5RGvc3lpYHi5KzFbsSNPjxV3PzQr7RITYcM5i?= =?us-ascii?Q?29OEYRUIn0SNJ3cbpxSbrH+jsqkpVXbmftYou5RsGK88PIwdKYXHlsc/LaCs?= =?us-ascii?Q?H+R85rUCGdmJdDDLEkR8vONCWC2LSwmJ5XkBKOzlClQOCfHrF1D/JgEWsPfF?= =?us-ascii?Q?NBQakLa6hWJZQWbujPbGJkmlGW5bqp36VF5ABSqessxYOkgdt/kK6g+fz3mr?= =?us-ascii?Q?LY3nfWdoxIVz4b9hzrf9UQMPXjyck4cearxQxGu5C9+eyEtnnYejo9h1BlEq?= =?us-ascii?Q?Nw3DLXmV9+xrgxlSlnnglXWkYy0vkVXV4SkVUdcwc3pu76X57cDZNrtqP87I?= =?us-ascii?Q?Zv9RqlhaFRHyt28+6w1aIEhOSu1mz1qyj/LCEcLJMC4YCTN0sgR3RLD2qysX?= =?us-ascii?Q?zrKZlF5rGgATy6/xGvGsYXJ/wbsnBJAQGUyaFp+epfLM/9zf7ovz+i74TVyw?= =?us-ascii?Q?64KzLQvc0bojtqNxOKCfC6vuFfQEQc2mKwddsF1mc+3UVf1qZ2lS67bJVkrE?= =?us-ascii?Q?BaohPHckwCesYGdE/Om80EQHh3ZRJgCybUGpbDNDA5+LGVojI1FAvgNN1N4N?= =?us-ascii?Q?J9TekNQodP2sjkQfEXNiz3N1OyBR94xjVkalbd5zdpsGEfUM55iRFZ47OQ7P?= =?us-ascii?Q?O9h56KzjTrok852HbGbd8oin3+WvQGE0rNVLuxUNXPRSVDG4zS8hFPDbJKwP?= =?us-ascii?Q?/nA0uiLrk5xihHvla4/vSj35EWdSIN5pHfr8+OfQvavNANawqbgzdJ5ojIyR?= =?us-ascii?Q?K4L/vkY6EUWf86zJRzBN5+w36XJ8zkOG+hmOh/CiW5lNGbOFe+tRjPCVhxwB?= =?us-ascii?Q?9koOvKCFWjHkIxkYjUfOlBvI+Atq3jl9?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?4rVe7t6siq6X9JYH2tB5Pqwtx5czrVFXToLiufLbiMrrc0AASFFkJ10y1sjU?= =?us-ascii?Q?guSuqlBsfRJ2k2Bv6QvzeSh9oQiToje08/Jdg0DNcHUu1ELEtQt/CKVE4jwb?= =?us-ascii?Q?A5GSwQ9csN01JWQCdNlHoISUW5vblMTdRRftgNCVsra4fU0JGqqDm+c5FThZ?= =?us-ascii?Q?kiXtnhvsfIYwdD14giz0qFmWJU1/0s20mYiXgSFrfrxXWl1B1DednidUh9ZN?= =?us-ascii?Q?J4x0pWYi0FalipulZlJZlQRXeRERTAot0psj+o6No1B0AWtbOBWXyI60tR5C?= =?us-ascii?Q?ULlPs8ul86oY7x6qRuQwIWSjTc5xGihyLes/mEO4Yqq/+14xjIBLJAzcjoo9?= =?us-ascii?Q?l1Y+v/ZI/JWGm5R8zVaQIc3wf42Rhp81KFyTd8lr1bVj7zv0s8Qin8k/U0wy?= =?us-ascii?Q?BZPIl1KFeFUjQkv46Trr5U7O2rOMHeTxwUBXCqb5GvJrS4kKj5+nobreSC1d?= =?us-ascii?Q?mCqAgg+ExlkjNRSZTabB/5/Nq3BH1rIpo8zo/kuGkaPiAjw7h0Md/9IRPSBp?= =?us-ascii?Q?in0Vd5uc99K8d1Ror23dChAAGgYyVMWAg4jfqL9Y3NOr+oHsnbDErAJSuoX1?= =?us-ascii?Q?nmEg4PWQ5qitMV8y6OBf3VbGIV0ooMifEF6DImJdvcbJatRZePdbv7WwwzrC?= =?us-ascii?Q?LPNeqbcmTDv4NBCHy6LKrJgpZOqjRZIW3NamACc2leRy/F0GJuAsxfh/s7JW?= =?us-ascii?Q?tO1yahoP4qLMGwbE5if/udeEd7EkLHqy6ou5FtlRPmw1UJoyLtKEmABkxFRA?= =?us-ascii?Q?iBxe6JnL2UIIMZWGj4isjzIk7+kpMC8C51MXQUc6V5nWLvMYOhZOxF6osneD?= =?us-ascii?Q?SS0uBJz1aibAv4D2VGGoMzE/iq67nemX416npyHLe3neV92Mm/IUtIt38vU9?= =?us-ascii?Q?xevAPv88s5DJKJIXl6L7vPG2GWFEE5HWlGZkJk5D8SGudse+sXs9QfqjQQlw?= =?us-ascii?Q?grSf2cDx5qr2cLtmu052xt+jS9KYVKSMoiMKNUoDp3lOViif3MhZ39h8BSy9?= =?us-ascii?Q?WKu/IYZxf1RIBHbMvSHlqFImhfzezXDL7XcVU2DZvs+KwKrirq3/XKlwkH+5?= =?us-ascii?Q?NdgYNKGySWcmghKOBPa0AVIUgqGQ9M3BWNWF6u/JtiwTMXJaBBUvBemYXR2b?= =?us-ascii?Q?QadlcsNSISGD2Ta5sXn11OzCLXJz7Eb0HeXmgB+SauRV2TwA5+GmJN4qQ/qZ?= =?us-ascii?Q?Pw4HUhhcVIBcxvrbjUD5gGsJCldj6WXwvIRFkPGCFGJlCYFxAqeaTsvVa28p?= =?us-ascii?Q?Tj/P1ZmWQSWPCYIn4yjDbwzOP66aIrE2lypRwGWnSYJ9PsTWi/gExL5e0vOG?= =?us-ascii?Q?+YxVPWY6Ff69sMd9us0/3KrEjcGFTmp3O6ojb44T0bk4NqP9wLghd2Duk9Y4?= =?us-ascii?Q?uG0K9cjPK135oWhcYE93jheKNIgnQGTmk2pgW/bBzywrx7pEklpCpuScmhf8?= =?us-ascii?Q?I8O/8xb6dzj5mdzEU1IBzjS+8L/MpthwyADj6zD/3z8Z/ZXUAYPqCdMR/D0B?= =?us-ascii?Q?XRMSV1rhLQPMOAsR4kEmQClC3BD7xU0M33OCf/C3fYJVvqurGvtTLiJabnNh?= =?us-ascii?Q?78dBAG55bFfGOHgH6rgcYSSP+9khVVmZEx2TRYEdtwxCth31V/3mU/f7Niy9?= =?us-ascii?Q?cErmPlwBqcG80OsYuQztQ6o=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 176a022d-266f-4e61-7bee-08de3d7f3dae X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:23.8878 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5Akg6Oy3McoeNhSUZZPoSh00F2ux/+oXV3ksMUREc35l+A+f6MDiRMaVbA+ASyVPhBojJm4TWu2XSotxuX/x3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" One MW can host multiple queue pairs, so stop limiting qp_count to the number of MWs. Now that both TX and RX MW sizing are done in the same place, the MW layout is derived from a single code path on both host and endpoint, so the layout cannot diverge between the two sides. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index 42abd1ce02d5..bac842177b55 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -1024,6 +1024,7 @@ static void ntb_transport_link_work(struct work_struc= t *work) struct ntb_dev *ndev =3D nt->ndev; struct pci_dev *pdev =3D ndev->pdev; resource_size_t size; + u64 qp_bitmap_free; u32 val; int rc =3D 0, i, spad; =20 @@ -1071,8 +1072,23 @@ static void ntb_transport_link_work(struct work_stru= ct *work) =20 val =3D ntb_spad_read(ndev, NUM_QPS); dev_dbg(&pdev->dev, "Remote max number of qps =3D %d\n", val); - if (val !=3D nt->qp_count) + if (val =3D=3D 0) goto out; + else if (val < nt->qp_count) { + /* + * Clamp local qp_count to peer-advertised NUM_QPS to avoid + * mismatched queues. + */ + qp_bitmap_free =3D nt->qp_bitmap_free; + for (i =3D val; i < nt->qp_count; i++) { + nt->qp_bitmap &=3D ~BIT_ULL(i); + nt->qp_bitmap_free &=3D ~BIT_ULL(i); + } + dev_warn(&pdev->dev, + "Local number of qps is reduced: %d->%d (qp_bitmap_free: 0x%llx->0x%ll= x)\n", + nt->qp_count, val, qp_bitmap_free, nt->qp_bitmap_free); + nt->qp_count =3D val; + } =20 val =3D ntb_spad_read(ndev, NUM_MWS); dev_dbg(&pdev->dev, "Remote number of mws =3D %d\n", val); @@ -1301,8 +1317,6 @@ static int ntb_transport_probe(struct ntb_client *sel= f, struct ntb_dev *ndev) =20 if (max_num_clients && max_num_clients < qp_count) qp_count =3D max_num_clients; - else if (nt->mw_count < qp_count) - qp_count =3D nt->mw_count; =20 qp_bitmap &=3D BIT_ULL(qp_count) - 1; =20 --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010002.outbound.protection.outlook.com [52.101.229.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D700C2E8DEB; Wed, 17 Dec 2025 15:32:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765985541; cv=fail; b=FbZg6JVJ9GEA+gjxrFrkbHQOKK7ej6zq2WLfm5FdY0VDNq+7j3TC0v+U7DElQzXyNDo6GoO+DNMUYWSuR1by9HlFZxVVcVF90XqcdZ3HlWNzWMtICkLy3ried1tMLEai9z8B/ljW0O+DZaXE7vXrSDmbrLctXxvyAZ9BjtTEfuw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765985541; c=relaxed/simple; bh=Z94kacvGVOkNr90TrKaU4Qw6wmAMooVjTDD1BRnhZw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=grMiIjiZth4os2M1TC4Scf62R35ZuP5A15DdiJgCmiBIn70LN7+cqt3W92kL+Xh06qSVspVWkWYd23WOPoqQgoqtpkPYMh3qaNM2fI/xc2oz9URvK4reG6EfFJWoc+/bi4UXFdzaEBD9sXytUKyiZMsKW6ome1YU18psdFNdsbQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=wmUVyP8/; arc=fail smtp.client-ip=52.101.229.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="wmUVyP8/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SwhU1zOSwK257Nt/yPZ0lHjHQJqbOjbs2D4PS4qG1TR6TZobgUY6Fhaewczg3gcbBHMfDpRqlyEP4Fk+jNc19VNLKeGZ1x0/CVPdKD644FL9V/SZSq04amKA/JZkxeTkjTTlL+uB3Qydbi1bLMT7dmWsT58AFwdBCfc8a7jRAC4ZsP4vaDg64lO3fTRcQ3TmIZ6DHygcDgSMSUD2Z8uBfg5SBwe+8z08WYzhkQKrphIxA85Ahdn4eg21fTLXRrhughAC7uIGnygrCErfV3aUwjyGTbVSZzrGdUau9NbTNnxzkJKZuzTJPfIqlK847iTbCsdLDP2jSYkMQ5zP6+iUoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=SeyvcBNQwhyXrcRh1XFkM7HJxYjuKadsY6Uw9FGvpZw=; b=n2SgWPfBzWx0XCOosTkyui04Rp2IGWlu/CN96kGx8IEaRjrDk1/IPLCpT99nfNvZXVyEjkpewdJy8usz8f4/wDkPGrETLLQxpWSlvqsSz21ilp7MQsJoKKaabH6rwHmAGBQiXPPKGHNtv7i79BIEe04y/KL2prNtNjq2iU+Sb5Sdi41UHiEljXDl25BD3/P99dzsMvInOG349IKmWHf4pVBq9ZPw3Ry6w4HYT0+8gUzaYfbPSmIdZDD4btvJ1dr+niXgRZ6Nevq1pk1v+kLlEYPMDXoI6n7U8OW7XezGerBVLwnRhnN5njlAjQA4b+B1ebhT6IQApL03xLFMRdAuww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SeyvcBNQwhyXrcRh1XFkM7HJxYjuKadsY6Uw9FGvpZw=; b=wmUVyP8/UQDmqij8rO8PC6UISNPevMaUTf7f3JKuC7QrYGexJoKsfl78ur2yFfOe5ZYtLBpo7s4RNRRh6n96fU8Q56+5z5nZjeZDx9H1QweUnc2v7LwgurpuBGLH/jpaSoyDFQWv4BE2UHcqBcSx4cTtrwO2x5Qnv1nVkN641Ls= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:25 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:25 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 13/35] NTB: ntb_transport: Introduce get_dma_dev() helper Date: Thu, 18 Dec 2025 00:15:47 +0900 Message-ID: <20251217151609.3162665-14-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0005.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:26c::9) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: a8519720-7ca6-4040-254b-08de3d7f3e59 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1kTJGk1HOvD4Y6oLB6NyOo5c7osvDCs9/S3ZaoX9RtqyZKVIVn8YbHZzMDqc?= =?us-ascii?Q?3Pks0pUB5p2MJWlaRK0NKTOTo2TRPWST5f3OTw7utLlmYNzPax53ujEXs00M?= =?us-ascii?Q?WYwOWeaDqTMl3zozqMZdcmsgz23K+rcMlxYfN1YwVum+GrBt5d/lperY6UTS?= =?us-ascii?Q?5WGcPJfrUZJZQfsVLbPrjB1r8j0UD1UdSSdTdx5Bx4PgczZjS3w9dkRzsqKv?= =?us-ascii?Q?p+MkKSoEThtHil35L8JzeG4b1RroWKEuzxTJDvj3iQR/YimeTUuNSSuw/Ko7?= =?us-ascii?Q?XWDtuTRY9mcd5xAB+GP0O4gbZxUPjti7bzPpGdMNteKRM++COfH4iLB+Y51b?= =?us-ascii?Q?Ri3DKbpn3DLnSxNvasljl8HYe1AIbWPAf/YPYDMZArxDhHI77jAnYQDA8mcz?= =?us-ascii?Q?53V55Eml2n01F4Xrq47kWrXbE2zZtEcHfmA0oUdpn8w+7cy5yJpRBunRbvpR?= =?us-ascii?Q?doI8DiPW1vCCBZqPmB2H3CLmje6AFRvAcw/Xxhl5r/u8yzWM1AK8310h91s2?= =?us-ascii?Q?ad6LmONOxHKIPo73NZpFV1QbXMYs798UtMIApgEOTxZ0sqh2RKn2b1UPGsHu?= =?us-ascii?Q?LrQGmiCeAo8apQwoXMOafXjQ1ZxhMeLuWJBLym20UOYXyEsIQdoldORAZI+W?= =?us-ascii?Q?WGuu6HYo0yjKpR9oHroHhxK/V/NtCmOdBnRIUWcYsHxpk/POfVhKs+nC9Waw?= =?us-ascii?Q?94nEPEvKzhisl2Wa+k1DCcNRSs0MeW/m6SCrg/4O/tHDINeAbofV62NMuiRT?= =?us-ascii?Q?hcfNZQ2ktNL+/nOXyPwFQhxJtNdXcXgykgKzD01ZA8Dgk5gw2emC3aOI33Ja?= =?us-ascii?Q?hpfmHTVBD/sq/eRnKDwGX7wrUN+UWczWvmpvTzABin/RJQUL7X5rxoMTVJDN?= =?us-ascii?Q?evSX5ls6QhzsPKaUKUJTLuDN/NtSXcGUNVBN2GMfaOUoieIon/LJcD8cftyq?= =?us-ascii?Q?UQpJLTi6k29XgBtajta7ct73SyWi78ZCU7JoljUdGBjjlCYCtTzV8ssKruRJ?= =?us-ascii?Q?wNCfeNL+rx9o5U5SaEhQnIqwBCSqBqrm/GRRAs5KEuuiFkQBRGnKoeDpog8M?= =?us-ascii?Q?kdUlaXlKc3XyAPq7yLw95ejiXnKgNFqVxSUwz556I2o5vWQGpdCE+gDpxVaz?= =?us-ascii?Q?OghkdguMYlP7vYWLNqld6mHW0NzvROXY5XuGc+flVTtoPqKCQVwv56tIfHyd?= =?us-ascii?Q?IQ3bUswOYxl50g+ue6ForJ/l0NEpkFC+xov7K2Z4nD0yMZPw+eNS9FGP48H0?= =?us-ascii?Q?yBxGaF5J1fhbCESE08iZCnKosS6Kw0S8yr96kUPfwbapUwV4xugeV2MYM1+L?= =?us-ascii?Q?Zkbpfyw6HqL63IBxtIt+GSlKNqEi3+0LyEsK32FA5pLOFWLcZ9qLVe4QCqVe?= =?us-ascii?Q?W7tuU9v9we5jw7iE+AUcC1AHjndfqdklC27sSVbktjTpbavZ3QhVXMg3x+7/?= =?us-ascii?Q?/AtMcLY9cMsWo2r+sQnGw1IvEOaPaQCB?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?y7kJ27VMKmVISnwYA27tOxpP+PFIbTZaVmZ8/kXs8BlXQvdOGeeohnVkmFiH?= =?us-ascii?Q?HWGkjXyxItvCk9X1NNu9fXtHR/P7bc9I+eFvvn4ODKDfjWbYb8SOeeOkBn0A?= =?us-ascii?Q?rV5m/i7lGEqylRSX8+w+bM2Fq/iSd61oc6rRwqtDZRGbiMwbgItj9h4CR4qg?= =?us-ascii?Q?7iG1Jl3d9rkrlzR8gUNE+buEnrkx4k81n90uPJVj5fmJyUm8NVoiPKcmJSDP?= =?us-ascii?Q?BgZR0b0Rjh7S8UnH7+qKtL2u/qio49+l4atc0S1HCQ//bPd87Op2Y5Ll9O5r?= =?us-ascii?Q?jPm9pmpYGbOTdka621MW2FLTXjli6xIMGczKvm+ByBsRUx+64S/1CYyVpMHh?= =?us-ascii?Q?o0HkngT+M+SErooTEWv3Xu4j1r1NCTX5IytubwbV8oaLEAfSkWSaVU1l/Qxo?= =?us-ascii?Q?aHKaPiJYACIXXzVI7SqFomZIedI7l4JQA5p+dGURHi0xQ/G7Z/pNNVAui14l?= =?us-ascii?Q?jTqDkrJJsk0ARezC0FUSdoCU+cqLRK2ld8Yvn899/I/cb1lVt9pAXIJVU8sM?= =?us-ascii?Q?Ad46Kf28goes/syySJCFcRnnQ8r0gB8YONFWmhzb5oqDiPN2L5FiMk5HmtHj?= =?us-ascii?Q?abvBkB1ad4k+3hA7TgAO/PSFbxhD3DIgszqibjaGNfTza4ewkwgS/pdtmTWb?= =?us-ascii?Q?UYISzK4DDPllsegM3p11h5xFMHqUtK2Eo0Ic/qxZDcNSWHFuppQunzDC4BsW?= =?us-ascii?Q?gNyuf3Q62usYl/j8sJ4JK74CNhYdktx3nUozSjR1yxt6+Fog0yklm9AC2G0F?= =?us-ascii?Q?bBok5ZrUSx2xvDzir6i7ld2mL/eSzdoYPKOS3xLkC7s6qdZluPtu9lxqF4Yz?= =?us-ascii?Q?DzfJcEsTzBApI0v7Jv+E93ThEolJNR+wJUGY1FARxbPvnp5HCCddLVmIropK?= =?us-ascii?Q?2ctsdmdC6IKbaNHo0xmFxdVHZS51z89L2YSi97rHx/Ujpw19I5uc8z5gXLQM?= =?us-ascii?Q?VaOCWukGz4TP+OyqXs0NhLziACQ/0yufFhOWpWCy7jCxx9yqVponcyYsRG93?= =?us-ascii?Q?gJdCzqLeAo0MrMa9SOWOtoSOSyTK3WUApjKi3xtlAggLNHdO0CpGDimmyjf2?= =?us-ascii?Q?Le7klhtxLw9pIDWsMX7onMSb4RhHXSMHByla2STkbbf1WMsTbJcRsloAixSG?= =?us-ascii?Q?03e95d2XR4+z/wCekl/u5IV+UbKdQLjS+UcrH3Hit/xxn9HAiesWZf7JPjAn?= =?us-ascii?Q?wpQ2p6Pft5+Vrim70eB8HIODb7JDep375O7tpmmB/7M1lemvOoZF/OO/gl5a?= =?us-ascii?Q?SHGfZyZfDsPjUEao+l2LHoQz8zdmoQLqUMr+4LdxK2wvzVImV01CjMU/WrVw?= =?us-ascii?Q?pMlknGc7RQZfaaYT9lzoOvOaIHSRxn8IOSY8GdIBtBVqFnoBBtO7jaEvVQaX?= =?us-ascii?Q?lu0K3H9AOgs5SVVrYrG3VHQpXHvtkkdJkASv/4eSvjanAIQWBYU0IfQ6SdtE?= =?us-ascii?Q?/ssn92/yJxhUgKkTAQGhfcEwgj+uKUvqG/PkhtDnhsXIhlkUxAXPM/6Y9gDL?= =?us-ascii?Q?o7Ifiq7+ZIy7cRvN76r1n1WB3j5qU5568y8ggql6elmFA8rKhxiZzsrx6EOG?= =?us-ascii?Q?jlTDVtaeYYeeEkzzeBdLR/LufcbLRqCALK4iOHMEVfbOOFzsRQOEsuFLeAvI?= =?us-ascii?Q?CSHWKp/DYnsDAS6i83BeHiA=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a8519720-7ca6-4040-254b-08de3d7f3e59 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:25.0097 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RkaOkSGD8V1l6bad+MJ7ysX/coaQV9V/QlrBIMtLDkramwJ77TFFP/KE6dqz9m40IbkkBScbbcuZQ0aIHt2saA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" When ntb_transport is used on top of an endpoint function (EPF) NTB implementation, DMA mappings should be associated with the underlying PCIe controller device rather than the virtual NTB PCI function. This matters for IOMMU configuration and DMA mask validation. Add a small helper, get_dma_dev(), that returns the appropriate struct device for DMA mapping, i.e. &pdev->dev for a regular NTB host bridge and the EPC parent device for EPF-based NTB endpoints. Use it in the places where we set up DMA mappings or log DMA-related errors. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index bac842177b55..78d0469edbcc 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -63,6 +63,7 @@ #include #include "linux/ntb.h" #include "linux/ntb_transport.h" +#include =20 #define NTB_TRANSPORT_VERSION 4 #define NTB_TRANSPORT_VER "4" @@ -259,6 +260,26 @@ struct ntb_payload_header { unsigned int flags; }; =20 +/* + * Return the device that should be used for DMA mapping. + * + * On RC, this is simply &pdev->dev. + * On EPF-backed NTB endpoints, use the EPC parent device so that + * DMA capabilities and IOMMU configuration are taken from the + * controller rather than the virtual NTB PCI function. + */ +static struct device *get_dma_dev(struct ntb_dev *ndev) +{ + struct device *dev =3D &ndev->pdev->dev; + struct pci_epc *epc; + + epc =3D (struct pci_epc *)ntb_get_private_data(ndev); + if (epc) + dev =3D epc->dev.parent; + + return dev; +} + enum { VERSION =3D 0, QP_LINKS, @@ -771,13 +792,13 @@ static void ntb_transport_msi_desc_changed(void *data) static void ntb_free_mw(struct ntb_transport_ctx *nt, int num_mw) { struct ntb_transport_mw *mw =3D &nt->mw_vec[num_mw]; - struct pci_dev *pdev =3D nt->ndev->pdev; + struct device *dev =3D get_dma_dev(nt->ndev); =20 if (!mw->virt_addr) return; =20 ntb_mw_clear_trans(nt->ndev, PIDX, num_mw); - dma_free_coherent(&pdev->dev, mw->alloc_size, + dma_free_coherent(dev, mw->alloc_size, mw->alloc_addr, mw->dma_addr); mw->xlat_size =3D 0; mw->buff_size =3D 0; @@ -847,7 +868,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int= num_mw, resource_size_t size) { struct ntb_transport_mw *mw =3D &nt->mw_vec[num_mw]; - struct pci_dev *pdev =3D nt->ndev->pdev; + struct device *dev =3D get_dma_dev(nt->ndev); size_t xlat_size, buff_size; resource_size_t xlat_align; resource_size_t xlat_align_size; @@ -877,12 +898,12 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, i= nt num_mw, mw->buff_size =3D buff_size; mw->alloc_size =3D buff_size; =20 - rc =3D ntb_alloc_mw_buffer(mw, &pdev->dev, xlat_align); + rc =3D ntb_alloc_mw_buffer(mw, dev, xlat_align); if (rc) { mw->alloc_size *=3D 2; - rc =3D ntb_alloc_mw_buffer(mw, &pdev->dev, xlat_align); + rc =3D ntb_alloc_mw_buffer(mw, dev, xlat_align); if (rc) { - dev_err(&pdev->dev, + dev_err(dev, "Unable to alloc aligned MW buff\n"); mw->xlat_size =3D 0; mw->buff_size =3D 0; @@ -895,7 +916,7 @@ static int ntb_set_mw(struct ntb_transport_ctx *nt, int= num_mw, rc =3D ntb_mw_set_trans(nt->ndev, PIDX, num_mw, mw->dma_addr, mw->xlat_size, offset); if (rc) { - dev_err(&pdev->dev, "Unable to set mw%d translation", num_mw); + dev_err(dev, "Unable to set mw%d translation", num_mw); ntb_free_mw(nt, num_mw); return -EIO; } --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D25834DCDD; Wed, 17 Dec 2025 15:16:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984603; cv=fail; b=pVDtT5IKJnwBGkbm0Dd2BiYWdg3EH+GAl44qTniHgpXY7O47TxpENn9n1KPyDwV/lnCVypW82eue8JcvTTneEy2Xo0j0VpvDs5+JLRc9C8hzvwnlH+uqCCSWRICtAHRJExZy60j8IR9YsHuHAyaC07sIINGu2AhfQ1fO7RnIHo4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984603; c=relaxed/simple; bh=ygpXfay9LIy31jIC4H8offCxBPpJRyPo1Rg9zTYMN2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UbUDnGOK2LDio+PWnomzSOrAg/Xd3xz2NMvSNoi5o7WUuapzkr/q4eIKeQ7FqmNYWEZqnaLZZ8qg6rwNfhKxEtFMQzImQO5Jq1aGMYylTsd6FnMPjuPEn69pOvPp8G86xM9A5TzTuAiKAOZiificb3/mw8z7oyfAAGE0tfDSvLM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=BnhLs34r; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="BnhLs34r" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LGvyTZIgL/GlLq7oNt2ox0Cmdh9Zut8rrJVwpAIz7Aww4G6Q9z+qkYIdUvvLZBTxdt2t0NY74i2MWEudtmb9YYeyHLcHB9rH/snkGT3/vou6ry23hSlbsFpoBbzopmL3pu6Kw8aAc3gtexQ6onVtFP13BmhOpHX8ItZbtDUDrtTUnFZBLntn0H+vtCtvSev59BcnZXdAC9l/l8DHlga5jvukmaTJd9WgTT2GRvIJAcuPqZ67HDfkQVgcbDaADvhtCo2YLLlS54AYZ7XGVU8semENzXf9mUKvDsARKwYbjdrz3JRVN2mpOsOcucOv3DmF1Md/3mYklBSbfctfbrl5OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=0IQBj+DlAfPQPSnkm2VfGWm6XCIbcSk2iHd9aLxOq/E=; b=LQN7QE1B65qrHSBu6H7ebgiKv4nCh94LOkQqDWHruiDINe3JR2BjCd23VZKezC5jCzmVRUVDFbay8SO8xHNawki6/MFc8c1UGiAC8mOfIrtr9mRae8ScnL5uqIfs/xOJpYohWjpTREb4ub64sQtsQOmA860QTh09b9cIWicChkjBPVr132pZvfkD1zeaUXUJ/4OpoOK85EX/A1shyY94J5+277MUMvZkKdVZihU/17CDysSD9tP13eKVpKVhQqssTAB1GEG5Medn4odTQ4LfR2ZVAhBL6wUzgwjEY62BklnfW101W+z4rNYGMUohReUTl/sScakPYdQWMl+N1A8Y0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0IQBj+DlAfPQPSnkm2VfGWm6XCIbcSk2iHd9aLxOq/E=; b=BnhLs34r2v7Q457r5rcIfXUorXbeX7/wdeYoFYry9W1I4bXhns4icv8iIS4dqBGe7hLCPOWHAFHJwVW1FR4EOhH8ol5GGYKsiIE/h3gQdsgFwfoaKau112t8j5dXClQ/h97p1IUr0zomc8uz9DavcusdSz2CW7CKXA033/f5Ke4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:26 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:25 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 14/35] NTB: epf: Reserve a subset of MSI vectors for non-NTB users Date: Thu, 18 Dec 2025 00:15:48 +0900 Message-ID: <20251217151609.3162665-15-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0113.jpnprd01.prod.outlook.com (2603:1096:405:4::29) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: 19cf958b-15e1-41d2-2aa8-08de3d7f3ed8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8GPmYHkreRpmA/VQRwr8Fxz/GgxS9VogGdqopfEEj31zs2SF+y8ZJtx0684t?= =?us-ascii?Q?cPjmjanoWXPUx7eE7Npx2MbBty5kjKWLTPKt0BPAS1/WTjXp/ad0tnlrl4C1?= =?us-ascii?Q?YG9E9TM98VQvHINQIXg0661sznO7d4J33JO1zWVIoxY39Psa38NC46I6i2uc?= =?us-ascii?Q?MsDh/E9pJAHfQjsiNWjyslOFPxPkEf0mMkbaamp4/l1uIezlj3CqmzzB8Uyt?= =?us-ascii?Q?TGUiUk6mUjEjjSrvlG6GCN91vmAo4aIip+IQb0O1zF+YEDPwO6BvAibhPxGx?= =?us-ascii?Q?Ei/JoX74KiIOSs7Fl57rB7sSMQlxarrIRWuszK8MCG8Os4iD0vsESV2X3dhu?= =?us-ascii?Q?DonYsh02Vj3dJwnVWTjU/1Oiu3Wz0JGXPApNC09YK+LKjUvMj1nqnxjFTtvG?= =?us-ascii?Q?EYwjXa+MPIvh53m+1ZvhiGdSpi5I2d2ioqjz+IiODvkVSYglLuDF/SOPQxMO?= =?us-ascii?Q?Kd4EJhtF5Eqj31AnF/KhDfvJx1xfE61VEYfE4HSUEaqjftYXU9g2rvI3n8P6?= =?us-ascii?Q?qCujtW6/xzEzUugH5typdZvjPqimmjE/EdAxE4ok19xoJNnajFSxwJ/DkFL1?= =?us-ascii?Q?Rinx+OMN8jWY9iNKYfOeVj/ezmYrMnrUbD82mjQl6xF6mCl1QOPywJDOsEYH?= =?us-ascii?Q?lRQlt2PpjgGlkGB6gjQrXPmdwP/tOovNW8Stz40rjBGMj+G++bxyN11Uce1w?= =?us-ascii?Q?oEmiXgzBuSR46Xr05RKIJ/Ud25ZCo0ILA6rUQPkoDA568+lbzZMWO0f8xM/D?= =?us-ascii?Q?X0v+R6ddTewf6ebSn8Dy/JsICr0wMCZiv9Jq41hnjii/Oz+Xk/o/xroYF9e8?= =?us-ascii?Q?pTqxShQIQkmE027zX9LqAdp4gsPg1aSqUcI502Dgx9oKhHs5Z/RkWjndhaWw?= =?us-ascii?Q?Uy9FnAeXsjSWVZzWQZRczF4EpVLEu1Md6Ht6COI3lOhDCng2GOSUSB41Bat+?= =?us-ascii?Q?gKH1xAUekDwn+Rgx5Y5UAHauW0ErFvz1SvEY4oA18S4I9vwlMHQOuWUnvlvU?= =?us-ascii?Q?0FbQ7+i5t8N0S6MCFg+ovZ1v8kUC1wIXbK2eeluQmDRAlrEB2l0AzWWMUGBG?= =?us-ascii?Q?8zvOl+XwNtuSOhiOWI6uqRiE5m47GpMX7YwcoETwYLe2G2+U1Ql0aqWnNmXZ?= =?us-ascii?Q?l5LzNXPde/lj9BDr1w9GuBD8w2jIM6w3gg9SLg8orT1RUHMUG5ImjAMDY3PF?= =?us-ascii?Q?v+rQ3sQM+OZkn7PBD3F/3WOyYVtN0rsAZMCF8pkXjsq+lVgRblXu9R3/WLrW?= =?us-ascii?Q?ZEtypIR1ThBZAQj5D6BOJC2GgACVnAfJ9JHxfumkupv5gilcMZi4qeBgy64J?= =?us-ascii?Q?1KadAFgxwRORIRfc19ZV1VBlLeXHkb7ToOVtdlKZHev+d+WA5PMmjOsTDLgz?= =?us-ascii?Q?9+suqlHO8MIoHg8j8ARotrRc+FaCebGbDJAkzKOZhMrjaRnKx1H9GBEgbtne?= =?us-ascii?Q?cHA4pO9CMHL1m+Ei8yI7ltB4F8w99iAy?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ykTbSwdZ6hfbVC09eFyJsPQORkPjsNfjeiMEdDaytNoPPCq6+3v6vSI9k8Pp?= =?us-ascii?Q?z1zw26dUOlT2AlvmjkpfpvcDxjRyQ2q/HrKGYg5naiwCTtNOubcMXn6HlcKY?= =?us-ascii?Q?N5KKOX+Poq1DEJEIRwcSPNeZhufFr6bZp9eyfLW9WX+SJulVF50s6scakq/0?= =?us-ascii?Q?F7tRS/bp8hm4OG4A24tV8ACpPmF+TB/N0iHtI7I63+4RDJi2krS85KBu9MZo?= =?us-ascii?Q?KtdKbuNL6nxySxJjqDkkh3OIpNx555WlFmEBeFjQNRirAgJYRtho8vfiqUZS?= =?us-ascii?Q?RPgwhQbXn3/IBSRLW/ng/VsbbUe6g1b3+mWkcVdCejbao9GEmfNOS6E5wPR/?= =?us-ascii?Q?mK54dlIDypn/WvccLnIqIff5f1AOuCqQFSmDM58qLDYc1f+NujDRaHkMv1bk?= =?us-ascii?Q?BQHfzbWCNkKOrY0q2PXZfH2iWNZTiV8oqSQBFxzP8vlqYFvur7dNDu6ri4o8?= =?us-ascii?Q?UBQA57hlEVUMBfy4G1givdxhl9ECedWY1umJkkrH7vkfJvEUjpkcaZcAxyoa?= =?us-ascii?Q?1WKDVEkpT9PLwOWdLvzalwJWL7BHj/umNfKcIp+TOaOZ5k4U5nGb+4tKlSih?= =?us-ascii?Q?I6LBrIGMT/DIhWeJeuevA3xUo2PZ0F8Zj9aZK6Yhfs4zM4k5/k6XOa0dZnNW?= =?us-ascii?Q?nRxSMohO+6VBfLGlntfEfklZ9ZJz/ORaKWqAaU/NuiUWuxqPCUdQvNVVcvdU?= =?us-ascii?Q?7h7Jx9auYSVSjxkJd4OqmdOSFwKlQcyRl9EWz4kyagcc7dAMwt7En0+rOcdm?= =?us-ascii?Q?HboQ6KG9Y3UqYcf3ojLYd1ZM23+IcUXIw522HY2zCUkkRvJ07XuwcDa33S3C?= =?us-ascii?Q?90Vm+1Wdt/tH+PlxnNksQdc6f+vt6ojrUkwVRHhtDUks0p3o+ZRPgyz8AkS4?= =?us-ascii?Q?sQKjgDofOZY390oO2elpX/c1ZSzGEkTFw1VwvG6gwcrqAgxn1heKx89+O5iw?= =?us-ascii?Q?6u5BtzVhPxV0BTh9ozRcmG0xnVTQWkjTrOb8mTUwNwIhSnTnoxB0Qp+ZDdAF?= =?us-ascii?Q?ECZ5HavU0s3PLAIymwhlgXSCeuREDq8NuxPn1XSS+Ms86S4hqSdXyEqp0Pkm?= =?us-ascii?Q?kCjYs2oNLh5f6oiQm9ynFoQWjhknzR+VL24Itmk/GT2aUyije8R7dTeBab6c?= =?us-ascii?Q?B3dKKmzLykND5SkU9v6zb0WNhmsK9sNfUsfiGpb0sxW8Z1kcDW5//tJ5hmyn?= =?us-ascii?Q?G+d/1mY5M076cCOH/SLDDxFWURVPWel9anGoogUjo7S49FVWGnVrnrj1+cAv?= =?us-ascii?Q?60mIQI/i1/VQhoH137QUZqxQG0td/jKaYiK1a7U5tTj5TewMqGUy2dL5N5eN?= =?us-ascii?Q?GLvbE/of0Hm0nr2FYwpmomSvxIQfJr/epM+UEsnXhNQoggCgmMVOJsyRBLTs?= =?us-ascii?Q?tz3+o367HwpF44mQ4Dcif8QmZAt8BnG3MYfvSdAG4pFmUFAbYLvppmIMvsu0?= =?us-ascii?Q?0mRu41KdwJyenp8ncl7Ti+wg6Ad4dINRuBqvkFP58IgS8tu8C8iX+lgDzqMJ?= =?us-ascii?Q?acHJdPjQkbtcrDWSCWRMz9h6G0zjK7WOBVmY/kqmBgTUeS6ixxxAcEryWY4B?= =?us-ascii?Q?bOhk6y3wVFWvqlqjL8kqEnjz0FdnvoBsrmgQurq7do8qY/EgoaJU/vq0asZZ?= =?us-ascii?Q?RDXGxGpW8yG6UhXI4OJnmp4=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 19cf958b-15e1-41d2-2aa8-08de3d7f3ed8 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:25.8360 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wQEUVIhL15dE024fG4SdAG4/rzuwdiBP4lem2LQQm9uQvRmUETKFdc+PfNuD1mf16NWZw6jT4MnRg/eEoyQyYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" The ntb_hw_epf driver currently uses all MSI/MSI-X vectors allocated for the endpoint as doorbell interrupts. On SoCs that also run other functions on the same PCIe controller (e.g. DesignWare eDMA), we need to reserve some vectors for those other consumers. Introduce NTB_EPF_IRQ_RESERVE and track the total number of allocated vectors in ntb_epf_dev's 'num_irqs' field. Use only (num_irqs - NTB_EPF_IRQ_RESERVE) vectors for NTB doorbells and free all num_irqs vectors in the teardown path, so that the remaining vectors can be used by other endpoint functions such as the integrated DesignWare eDMA. This makes it possible to share the PCIe controller MSI space between NTB and other on-chip IP blocks. Signed-off-by: Koichiro Den --- drivers/ntb/hw/epf/ntb_hw_epf.c | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index 89a536562abf..4ecc6b2177b4 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -49,6 +49,7 @@ =20 #define NTB_EPF_MIN_DB_COUNT 3 #define NTB_EPF_MAX_DB_COUNT 31 +#define NTB_EPF_IRQ_RESERVE 8 =20 #define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */ =20 @@ -87,6 +88,8 @@ struct ntb_epf_dev { unsigned int spad_count; unsigned int db_count; =20 + unsigned int num_irqs; + void __iomem *ctrl_reg; void __iomem *db_reg; void __iomem *peer_spad_reg; @@ -341,7 +344,7 @@ static int ntb_epf_init_isr(struct ntb_epf_dev *ndev, i= nt msi_min, int msi_max) u32 argument =3D MSIX_ENABLE; int irq; int ret; - int i; + int i =3D 0; =20 irq =3D pci_alloc_irq_vectors(pdev, msi_min, msi_max, PCI_IRQ_MSIX); if (irq < 0) { @@ -355,33 +358,39 @@ static int ntb_epf_init_isr(struct ntb_epf_dev *ndev,= int msi_min, int msi_max) argument &=3D ~MSIX_ENABLE; } =20 + ndev->num_irqs =3D irq; + irq -=3D NTB_EPF_IRQ_RESERVE; + if (irq <=3D 0) { + dev_err(dev, "Not enough irqs allocated\n"); + ret =3D -ENOSPC; + goto err_out; + } + for (i =3D 0; i < irq; i++) { ret =3D request_irq(pci_irq_vector(pdev, i), ntb_epf_vec_isr, 0, "ntb_epf", ndev); if (ret) { dev_err(dev, "Failed to request irq\n"); - goto err_request_irq; + goto err_out; } } =20 - ndev->db_count =3D irq - 1; + ndev->db_count =3D irq; =20 ret =3D ntb_epf_send_command(ndev, CMD_CONFIGURE_DOORBELL, argument | irq); if (ret) { dev_err(dev, "Failed to configure doorbell\n"); - goto err_configure_db; + goto err_out; } =20 return 0; =20 -err_configure_db: - for (i =3D 0; i < ndev->db_count + 1; i++) +err_out: + while (i-- > 0) free_irq(pci_irq_vector(pdev, i), ndev); =20 -err_request_irq: pci_free_irq_vectors(pdev); - return ret; } =20 @@ -489,7 +498,7 @@ static int ntb_epf_peer_db_set(struct ntb_dev *ntb, u64= db_bits) u32 db_offset; u32 db_data; =20 - if (interrupt_num > ndev->db_count) { + if (interrupt_num >=3D ndev->db_count) { dev_err(dev, "DB interrupt %d greater than Max Supported %d\n", interrupt_num, ndev->db_count); return -EINVAL; @@ -499,6 +508,7 @@ static int ntb_epf_peer_db_set(struct ntb_dev *ntb, u64= db_bits) =20 db_data =3D readl(ndev->ctrl_reg + NTB_EPF_DB_DATA(interrupt_num)); db_offset =3D readl(ndev->ctrl_reg + NTB_EPF_DB_OFFSET(interrupt_num)); + writel(db_data, ndev->db_reg + (db_entry_size * interrupt_num) + db_offset); =20 @@ -581,8 +591,8 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev) int ret; =20 /* One Link interrupt and rest doorbell interrupt */ - ret =3D ntb_epf_init_isr(ndev, NTB_EPF_MIN_DB_COUNT + 1, - NTB_EPF_MAX_DB_COUNT + 1); + ret =3D ntb_epf_init_isr(ndev, NTB_EPF_MIN_DB_COUNT + NTB_EPF_IRQ_RESERVE, + NTB_EPF_MAX_DB_COUNT + NTB_EPF_IRQ_RESERVE); if (ret) { dev_err(dev, "Failed to init ISR\n"); return ret; @@ -689,7 +699,7 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *nde= v) =20 ntb_epf_send_command(ndev, CMD_TEARDOWN_DOORBELL, ndev->db_count + 1); =20 - for (i =3D 0; i < ndev->db_count + 1; i++) + for (i =3D 0; i < ndev->num_irqs; i++) free_irq(pci_irq_vector(pdev, i), ndev); pci_free_irq_vectors(pdev); } --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B65AD337BB5; Wed, 17 Dec 2025 15:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984605; cv=fail; b=Z2IzcCa4QN0W4ImA3pUC+g9hmuXc13rHUHvBy513c8+MdM8NlRPqx9hCtNzRbsuE49ZSWp67FqqME+KuWVeiLL3KNPqtsqaK1Bq6digWSE/xnZCSohkJPnj8thG9nxM8XGMnOuU06SxTUjKqlTrOPL/wibNIZzHsxOIJzQf0cIA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984605; c=relaxed/simple; bh=XxV654qT010yfLqQ99uubGh0AZS0QtmDmNC1jlPsfts=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YHmg+p4HYAsSX7XqWpgp3SNhy4QOdg5NDHVvuTImp/kmDbV1kRmAidGUFsasjN9K7gVb+dpI11b+4xSzQIYvtUCjv/IlQOaylyrNhbRiSSQA/YpZImMxGFpV8HpcE01fNp64kWTWU1QwX8txPPcSITiLxZMCpL7ffZPcKuuwZZE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Ke3yNDkx; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Ke3yNDkx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VLxuutJ229zkLHJKcaUGfwww+oSIBSKl3dLaxFlOgVxTXDAtZ9nZ1LHr266D6WiNFWI+MzTuMMvcvG8QDo2YUh+vvI2Z9ea+H1zQdn79qHjP09OG5bD4AQSTZCNB8LiPQHspriUrvQA8WC+qSkF8yeZ9op+isHw6WIw0UU5KSEMt560whARTQt980wJodPFOdw1JfPNdhF7UIY3gDUwluK3lVH+mrSDJJr87iLKZ9dcXBwnMOcuFOx2rdblkOnkU0XL3amE6g6oP+/P4X2yvioU5ogiGenhjBOcDzVCiE2gkwGF3CGDXrsCee5oXRPBBV0ZvRoxZX2N/9wD+Adqk3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=VUuYeMpUK68Hba0iinbGxC+9YEVxmqsLgGgIWoMUNxA=; b=wCEnSw5hdeFPy9kWjvWTTYlGsLVuFtU7GnaQWT1wK4CIGsvPead+DJpFZpMWFXvbBHb+CvqcbLwz4HzbLcAgMehdWd8dxZNAS4V3Shjg3wgX/Ju2jsW7TddfhF940EhipI1PksXZq3MYDwRL4Mn8Y2d2YwKUNRDhemx14v1CfyrQzFxv4H+6BWiBuRXNOz63ta4lwvrAhyZTiYZZQMFHSYQaEhUyu7IHd9WsTZELRg1YBQ11nx8pGtu/Fw40BGD/FrJYv3g29fcbn1iPs3RDU1krAERgwH1vCdwGnYAzZHd62UqMxXqxKl6XUlhn/T9seIpqnIu31CLcu2cPrtZLug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VUuYeMpUK68Hba0iinbGxC+9YEVxmqsLgGgIWoMUNxA=; b=Ke3yNDkxqHb5w3X8UuborJdgiifu7QiS9sfAE07UplI+2Hdpc/zON3kImlF9EPtQcxFNPkEcgW62pVcQlbmx8BaossG0oSABuvpU1x7+Lj1/YuyQkAhMtSEcxNXVKeRLt3MIArOHI2Isrz47EVM4Q9s0FirHY/cSLkSmbqDJ4yQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by OS9P286MB4633.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:2fc::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:27 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:27 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 15/35] NTB: ntb_transport: Move internal types to ntb_transport_internal.h Date: Thu, 18 Dec 2025 00:15:49 +0900 Message-ID: <20251217151609.3162665-16-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0165.jpnprd01.prod.outlook.com (2603:1096:400:2b1::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|OS9P286MB4633:EE_ X-MS-Office365-Filtering-Correlation-Id: f6e9b233-bf32-446e-a025-08de3d7f3f8a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Cm37kvuiBxf0gVklDrYNYKz6BAi+pxlgoejZl4kpBVBGsdwHWjAjNgiYTc5k?= =?us-ascii?Q?DrQWSuo+kY+YaT/olAVoOHsBDH9j237gZjcbj8K+pyoxMHycqwQq9blYQnRc?= =?us-ascii?Q?3Wf0cGvBYOBHUBkArHeObiJiCTbiqG5mLu48A+P0EmFK0hChqU0duIyFhKId?= =?us-ascii?Q?bT2IHH3ZKiRRgq26Bomze2J/joOKVOZ6yAoIdZ+pBgCOJKjp6t6zPpdFyFQo?= =?us-ascii?Q?kXzBImi+jinfw8xHBvLI0EFiXo3rZTGysIh432Prv/BMUKHDdCu93iPODEM1?= =?us-ascii?Q?7EQDau7jLrteYu2YY2Q54dKCG9VwYPF4W6LQsgsbHfCPq646VYxFNP01AKk3?= =?us-ascii?Q?7xYzLrxYzayRkw3CiZDdWesH7e4RKFRKkYr8wW+OcimHwe98+wjBycSLt3JV?= =?us-ascii?Q?XEvGnCGkdfGqglNey370e4VXm2dk2j6m/AtjMOHhH/YRJfnbY+nhkapFpq9x?= =?us-ascii?Q?YKDmcsw94drbQim9G4TT5jr8/c5tItXoxW7UuN+kXj/I3X1YdTZ8CSOjc2oJ?= =?us-ascii?Q?eaSr+8LBkhMoMmUGeKp0JCUaAfjUtrRF/P8uMLkwEh/noouZKo679sXm5z2S?= =?us-ascii?Q?zTsxqGb9/g2TciLgc+Xe4gLvxsnj8UQgmLQ+Xu2PDoPqaRh/2nlBL0pWdplc?= =?us-ascii?Q?pCCt6ItmJbyMmrTtxV/d1ckuxlWxghR29ZsQhDQjWq1cVH1TjhzL+xgyDy0I?= =?us-ascii?Q?ODAAJiyHAqrVS9ajv47UKiWTn4pvdkD+zVzIODREyGm7yIfZPyHxumDjssie?= =?us-ascii?Q?YfD0gl7JEVfWZhIoTC6+zOEK75JjZvfEmYGkmqePCoHtZCUjcFM1gvZ40VLh?= =?us-ascii?Q?B41wuIVypoPUylr4f4VD0o1YSTZalr+S7kPRGgCsY4ejZevPruLNuKNBmtzb?= =?us-ascii?Q?8lOPvDMzsWcR+8ZAwuqmNDM2LJKVTiMWbtEkyH1gwzSFzBRDDlSixKYhqBhB?= =?us-ascii?Q?NTkk6IgCQHQlRse6TDah6IfxGpc38pF8ROUZmy4j9ExstWaYGYERggcPnFZy?= =?us-ascii?Q?IUoujDXlNcUHM5w2vWe0IPRQhKegxdxCbBYPfNKbPQ6V3tGzfCSENYAyIn58?= =?us-ascii?Q?OmEoBp8nOX/82OzwUgXREzshw8R/Am/jF1uNgI8hcLPRzoWEJNp4+n1Vch3Y?= =?us-ascii?Q?kGvOZ2mmnpEbZXHzql3T1sm8ni+mCjbwjvU+F0FYIaZkmrXkbmeCo9V5LaxO?= =?us-ascii?Q?+n7odTqpqPzJJ7xgKDfSQ6RtW6fsAZ4KX0rLcS9E9GnMTbiV6CmZ8Rf75l6C?= =?us-ascii?Q?hD5He1s0103C2dSRAnLn5TsOpJeOcDkbzcbnZD5OXSC5ay9u6KGowysKSymr?= =?us-ascii?Q?CBsZStaXNQ8XTzsBd9ijPBJ970njYyg9AaXibWgiZS7dmFJ4bfH+bjiCH+q4?= =?us-ascii?Q?eY16FdGr4FnT7tcFkBELPtnGn2L1NLWbS1VbsGconutk3OBX74yWvbjGGKGw?= =?us-ascii?Q?ds0NW11tLcutOTiPGvz71LlJFTu5RaCG?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5dUJaeI7ZkY6yaWvukIdpgVxdKzhsb7SdoziadpsFD82uDFN3bLn1Cqx02Kn?= =?us-ascii?Q?4Mur+B2SHO9euPfiZg3rYSMirvD/casEx7K3czcVdFa+HqAe4//VCh38zWqU?= =?us-ascii?Q?aDTsDU+aPuhNNDhD6q9U8a19Tw0nxCWrbAXrImQi3OAFhsjYFTEG7P8l/nwH?= =?us-ascii?Q?6YA0Dq6C5wxuWCu/3CtGfhLhYr40whjKiSziIw0+ncZsLY6rb9JcBzAfJCTw?= =?us-ascii?Q?tBOUFJ9x+y7M673U84bcsyeQvBX886Iy/gdyclixKp/ssrbRzF5BYkRsRAfS?= =?us-ascii?Q?DZF+RHo6zPECtaH9mT3yczyMmFjEW6mBKzq5BDg1vdWEwQMAtLDi71sSOXyX?= =?us-ascii?Q?hnlaugjeRI0KF8JOS/jijud8mhWGxHS8BuIhapwpob99wRm8PUHg0KjP7nzW?= =?us-ascii?Q?Xj3llWkYoyPTCnlxpmSgnaUACWl9Fmj9ShpPW4vBZ7m1T00JTRUCp28wet9d?= =?us-ascii?Q?E8QFVXM9ou18m95TGT06rfvQ2Pp4d7O+DhNF+QpTrtNSxPpK47JaLKSQMLOG?= =?us-ascii?Q?Hg6J+lrazCISqww5/7xwn4BaJI9ebel53bGT/P83ibdcNWps6tBEifdIPs0G?= =?us-ascii?Q?AwXJZK1CP/lTiBTZ1RqID1LaQQNiEmWSqk/XzfpgXQwbtbc/NVHuwzDFo3zC?= =?us-ascii?Q?0lwIzoPPvdOc2ShYOKXDfS9Spssbg4170cbLZlC+mbdIu1xdK1i4QZkC8wdi?= =?us-ascii?Q?8pIq1EbFUqGWr9aFf+PtBiJe/h8RfHQyQftjbNDGhvchWRk3PgnoLhZWJguo?= =?us-ascii?Q?cXw9mzN+Zma5hJ208bKZ8n9gfkLqc9sfZf9ssJ6TFPm03V7/xmPkHWN5kXPL?= =?us-ascii?Q?JrHrslxaGJOqVRVbhDoUPwi3OSzT+EPD/KXd1yU9L8r5JrXYmqSrcPoFD5Ak?= =?us-ascii?Q?/TG4aAcFwUmqcW3sz/tjd5vltF7LuEgWxTzUjkOv1Ae0Ul2ej5rXSG/U5Mx2?= =?us-ascii?Q?p6kE8FHAsJJaV24rkXRcu4nrbGc/N9tQoI+4NXMsRG7cfbvkyZR3/qmdCKe+?= =?us-ascii?Q?llwNgONSDO2Hc/MQMSDel9Bvz7JgcWDcaKnYfnlFP4s6tecaMKmr02VDia3c?= =?us-ascii?Q?/GvUiW3d40dgDDGI5GFl6AzT0hqJ1aq2vwnV4yyvVbx5kvVCZB7ZnYvfwrws?= =?us-ascii?Q?/PybkpuOf6N7mbpQeEJibfsL1y2LcKn9WMdel3Uqv880TiSgLqk2Is/6HhJv?= =?us-ascii?Q?kVUqprTxQPtYZDhmVoFB2JAmUJ3TvSh7kCzkzb+M7CuISnHDSqEhUXHrvUFO?= =?us-ascii?Q?FSpjoriELr6EqpwNsV5AiLHAQHmNVG+VNk1OwlKkjzbZatHIEfaGCreF8jvC?= =?us-ascii?Q?wu6mBcRv7NsK+wb8KLzcqp5wM7RrQ+JfTkNcekmEgxrnCIKa2lcYhlNKlh3o?= =?us-ascii?Q?Aiy+fauT1GECGShzL9xiLDQZaCnd1u/1BI/VEJ4BNYlG3lXY1bN/WK2l0vMN?= =?us-ascii?Q?sS8BQC+2c5TNaqYPY95BczfJ0yLxs522vMaZm0BZ9WiTzeTXYYQR+qPNZkr/?= =?us-ascii?Q?9g/o/H5FBmATRgq7W8dEUkHNSvIw+98pZRz2OEHRZua64g7qeS700+TtYhYU?= =?us-ascii?Q?CDfN/zuPZvs9uwHHak4wV2gvCdj1zYL9ulHYhm3IVoDa8yFkp50XXzNYamfj?= =?us-ascii?Q?B8GP7iX7JvEu8CUEXVwVtgk=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f6e9b233-bf32-446e-a025-08de3d7f3f8a X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:27.0034 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MPD2p9BXBuxg30LzoEVEZ1lQ7+3UJTgfgR+u+RUuUkL90kTUFMVAx3fQJ3NfjPQKnblYFT13Ib2Z1LRXQBp7Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB4633 Content-Type: text/plain; charset="utf-8" No functional changes intended. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 168 ++------------------------- drivers/ntb/ntb_transport_internal.h | 164 ++++++++++++++++++++++++++ include/linux/ntb_transport.h | 5 + 3 files changed, 181 insertions(+), 156 deletions(-) create mode 100644 drivers/ntb/ntb_transport_internal.h diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index 78d0469edbcc..3969fa29a5b9 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -65,6 +65,8 @@ #include "linux/ntb_transport.h" #include =20 +#include "ntb_transport_internal.h" + #define NTB_TRANSPORT_VERSION 4 #define NTB_TRANSPORT_VER "4" #define NTB_TRANSPORT_NAME "ntb_transport" @@ -76,11 +78,11 @@ MODULE_VERSION(NTB_TRANSPORT_VER); MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("Intel Corporation"); =20 -static unsigned long max_mw_size; +unsigned long max_mw_size; module_param(max_mw_size, ulong, 0644); MODULE_PARM_DESC(max_mw_size, "Limit size of large memory windows"); =20 -static unsigned int transport_mtu =3D 0x10000; +unsigned int transport_mtu =3D 0x10000; module_param(transport_mtu, uint, 0644); MODULE_PARM_DESC(transport_mtu, "Maximum size of NTB transport packets"); =20 @@ -96,7 +98,7 @@ static bool use_dma; module_param(use_dma, bool, 0644); MODULE_PARM_DESC(use_dma, "Use DMA engine to perform large data copy"); =20 -static bool use_msi; +bool use_msi; #ifdef CONFIG_NTB_MSI module_param(use_msi, bool, 0644); MODULE_PARM_DESC(use_msi, "Use MSI interrupts instead of doorbells"); @@ -107,153 +109,12 @@ static struct dentry *nt_debugfs_dir; /* Only two-ports NTB devices are supported */ #define PIDX NTB_DEF_PEER_IDX =20 -struct ntb_queue_entry { - /* ntb_queue list reference */ - struct list_head entry; - /* pointers to data to be transferred */ - void *cb_data; - void *buf; - unsigned int len; - unsigned int flags; - int retries; - int errors; - unsigned int tx_index; - unsigned int rx_index; - - struct ntb_transport_qp *qp; - union { - struct ntb_payload_header __iomem *tx_hdr; - struct ntb_payload_header *rx_hdr; - }; -}; - -struct ntb_rx_info { - unsigned int entry; -}; - -struct ntb_transport_qp { - struct ntb_transport_ctx *transport; - struct ntb_dev *ndev; - void *cb_data; - struct dma_chan *tx_dma_chan; - struct dma_chan *rx_dma_chan; - - bool client_ready; - bool link_is_up; - bool active; - - u8 qp_num; /* Only 64 QP's are allowed. 0-63 */ - u64 qp_bit; - - struct ntb_rx_info __iomem *rx_info; - struct ntb_rx_info *remote_rx_info; - - void (*tx_handler)(struct ntb_transport_qp *qp, void *qp_data, - void *data, int len); - struct list_head tx_free_q; - spinlock_t ntb_tx_free_q_lock; - void __iomem *tx_mw; - phys_addr_t tx_mw_phys; - size_t tx_mw_size; - dma_addr_t tx_mw_dma_addr; - unsigned int tx_index; - unsigned int tx_max_entry; - unsigned int tx_max_frame; - - void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data, - void *data, int len); - struct list_head rx_post_q; - struct list_head rx_pend_q; - struct list_head rx_free_q; - /* ntb_rx_q_lock: synchronize access to rx_XXXX_q */ - spinlock_t ntb_rx_q_lock; - void *rx_buff; - unsigned int rx_index; - unsigned int rx_max_entry; - unsigned int rx_max_frame; - unsigned int rx_alloc_entry; - dma_cookie_t last_cookie; - struct tasklet_struct rxc_db_work; - - void (*event_handler)(void *data, int status); - struct delayed_work link_work; - struct work_struct link_cleanup; - - struct dentry *debugfs_dir; - struct dentry *debugfs_stats; - - /* Stats */ - u64 rx_bytes; - u64 rx_pkts; - u64 rx_ring_empty; - u64 rx_err_no_buf; - u64 rx_err_oflow; - u64 rx_err_ver; - u64 rx_memcpy; - u64 rx_async; - u64 tx_bytes; - u64 tx_pkts; - u64 tx_ring_full; - u64 tx_err_no_buf; - u64 tx_memcpy; - u64 tx_async; - - bool use_msi; - int msi_irq; - struct ntb_msi_desc msi_desc; - struct ntb_msi_desc peer_msi_desc; -}; - -struct ntb_transport_mw { - phys_addr_t phys_addr; - resource_size_t phys_size; - void __iomem *vbase; - size_t xlat_size; - size_t buff_size; - size_t alloc_size; - void *alloc_addr; - void *virt_addr; - dma_addr_t dma_addr; -}; - struct ntb_transport_client_dev { struct list_head entry; struct ntb_transport_ctx *nt; struct device dev; }; =20 -struct ntb_transport_ctx { - struct list_head entry; - struct list_head client_devs; - - struct ntb_dev *ndev; - - struct ntb_transport_mw *mw_vec; - struct ntb_transport_qp *qp_vec; - unsigned int mw_count; - unsigned int qp_count; - u64 qp_bitmap; - u64 qp_bitmap_free; - - bool use_msi; - unsigned int msi_spad_offset; - u64 msi_db_mask; - - bool link_is_up; - struct delayed_work link_work; - struct work_struct link_cleanup; - - struct dentry *debugfs_node_dir; - - /* Make sure workq of link event be executed serially */ - struct mutex link_event_lock; -}; - -enum { - DESC_DONE_FLAG =3D BIT(0), - LINK_DOWN_FLAG =3D BIT(1), -}; - struct ntb_payload_header { unsigned int ver; unsigned int len; @@ -268,7 +129,7 @@ struct ntb_payload_header { * DMA capabilities and IOMMU configuration are taken from the * controller rather than the virtual NTB PCI function. */ -static struct device *get_dma_dev(struct ntb_dev *ndev) +struct device *get_dma_dev(struct ntb_dev *ndev) { struct device *dev =3D &ndev->pdev->dev; struct pci_epc *epc; @@ -295,7 +156,6 @@ enum { #define drv_client(__drv) \ container_of((__drv), struct ntb_transport_client, driver) =20 -#define QP_TO_MW(nt, qp) ((qp) % nt->mw_count) #define NTB_QP_DEF_NUM_ENTRIES 100 #define NTB_LINK_DOWN_TIMEOUT 10 =20 @@ -532,8 +392,7 @@ static int ntb_qp_debugfs_stats_show(struct seq_file *s= , void *v) } DEFINE_SHOW_ATTRIBUTE(ntb_qp_debugfs_stats); =20 -static void ntb_list_add(spinlock_t *lock, struct list_head *entry, - struct list_head *list) +void ntb_list_add(spinlock_t *lock, struct list_head *entry, struct list_h= ead *list) { unsigned long flags; =20 @@ -542,8 +401,7 @@ static void ntb_list_add(spinlock_t *lock, struct list_= head *entry, spin_unlock_irqrestore(lock, flags); } =20 -static struct ntb_queue_entry *ntb_list_rm(spinlock_t *lock, - struct list_head *list) +struct ntb_queue_entry *ntb_list_rm(spinlock_t *lock, struct list_head *li= st) { struct ntb_queue_entry *entry; unsigned long flags; @@ -562,9 +420,8 @@ static struct ntb_queue_entry *ntb_list_rm(spinlock_t *= lock, return entry; } =20 -static struct ntb_queue_entry *ntb_list_mv(spinlock_t *lock, - struct list_head *list, - struct list_head *to_list) +struct ntb_queue_entry *ntb_list_mv(spinlock_t *lock, struct list_head *li= st, + struct list_head *to_list) { struct ntb_queue_entry *entry; unsigned long flags; @@ -982,7 +839,7 @@ static void ntb_qp_link_cleanup_work(struct work_struct= *work) msecs_to_jiffies(NTB_LINK_DOWN_TIMEOUT)); } =20 -static void ntb_qp_link_down(struct ntb_transport_qp *qp) +void ntb_qp_link_down(struct ntb_transport_qp *qp) { schedule_work(&qp->link_cleanup); } @@ -1194,8 +1051,7 @@ static void ntb_qp_link_work(struct work_struct *work) msecs_to_jiffies(NTB_LINK_DOWN_TIMEOUT)); } =20 -static int ntb_transport_init_queue(struct ntb_transport_ctx *nt, - unsigned int qp_num) +int ntb_transport_init_queue(struct ntb_transport_ctx *nt, unsigned int qp= _num) { struct ntb_transport_qp *qp; =20 diff --git a/drivers/ntb/ntb_transport_internal.h b/drivers/ntb/ntb_transpo= rt_internal.h new file mode 100644 index 000000000000..79c7dbcf6f91 --- /dev/null +++ b/drivers/ntb/ntb_transport_internal.h @@ -0,0 +1,164 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef _NTB_TRANSPORT_INTERNAL_H_ +#define _NTB_TRANSPORT_INTERNAL_H_ + +#include + +extern unsigned long max_mw_size; +extern unsigned int transport_mtu; +extern bool use_msi; + +#define QP_TO_MW(nt, qp) ((qp) % nt->mw_count) + +struct ntb_queue_entry { + /* ntb_queue list reference */ + struct list_head entry; + /* pointers to data to be transferred */ + void *cb_data; + void *buf; + unsigned int len; + unsigned int flags; + int retries; + int errors; + unsigned int tx_index; + unsigned int rx_index; + + struct ntb_transport_qp *qp; + union { + struct ntb_payload_header __iomem *tx_hdr; + struct ntb_payload_header *rx_hdr; + }; +}; + +struct ntb_rx_info { + unsigned int entry; +}; + +struct ntb_transport_qp { + struct ntb_transport_ctx *transport; + struct ntb_dev *ndev; + void *cb_data; + struct dma_chan *tx_dma_chan; + struct dma_chan *rx_dma_chan; + + bool client_ready; + bool link_is_up; + bool active; + + u8 qp_num; /* Only 64 QP's are allowed. 0-63 */ + u64 qp_bit; + + struct ntb_rx_info __iomem *rx_info; + struct ntb_rx_info *remote_rx_info; + + void (*tx_handler)(struct ntb_transport_qp *qp, void *qp_data, + void *data, int len); + struct list_head tx_free_q; + spinlock_t ntb_tx_free_q_lock; + void __iomem *tx_mw; + phys_addr_t tx_mw_phys; + size_t tx_mw_size; + dma_addr_t tx_mw_dma_addr; + unsigned int tx_index; + unsigned int tx_max_entry; + unsigned int tx_max_frame; + + void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data, + void *data, int len); + struct list_head rx_post_q; + struct list_head rx_pend_q; + struct list_head rx_free_q; + /* ntb_rx_q_lock: synchronize access to rx_XXXX_q */ + spinlock_t ntb_rx_q_lock; + void *rx_buff; + unsigned int rx_index; + unsigned int rx_max_entry; + unsigned int rx_max_frame; + unsigned int rx_alloc_entry; + dma_cookie_t last_cookie; + struct tasklet_struct rxc_db_work; + + void (*event_handler)(void *data, int status); + struct delayed_work link_work; + struct work_struct link_cleanup; + + struct dentry *debugfs_dir; + struct dentry *debugfs_stats; + + /* Stats */ + u64 rx_bytes; + u64 rx_pkts; + u64 rx_ring_empty; + u64 rx_err_no_buf; + u64 rx_err_oflow; + u64 rx_err_ver; + u64 rx_memcpy; + u64 rx_async; + u64 tx_bytes; + u64 tx_pkts; + u64 tx_ring_full; + u64 tx_err_no_buf; + u64 tx_memcpy; + u64 tx_async; + + bool use_msi; + int msi_irq; + struct ntb_msi_desc msi_desc; + struct ntb_msi_desc peer_msi_desc; +}; + +struct ntb_transport_mw { + phys_addr_t phys_addr; + resource_size_t phys_size; + void __iomem *vbase; + size_t xlat_size; + size_t buff_size; + size_t alloc_size; + void *alloc_addr; + void *virt_addr; + dma_addr_t dma_addr; +}; + +struct ntb_transport_ctx { + struct list_head entry; + struct list_head client_devs; + + struct ntb_dev *ndev; + + struct ntb_transport_mw *mw_vec; + struct ntb_transport_qp *qp_vec; + unsigned int mw_count; + unsigned int qp_count; + u64 qp_bitmap; + u64 qp_bitmap_free; + + bool use_msi; + unsigned int msi_spad_offset; + u64 msi_db_mask; + + bool link_is_up; + struct delayed_work link_work; + struct work_struct link_cleanup; + + struct dentry *debugfs_node_dir; + + /* Make sure workq of link event be executed serially */ + struct mutex link_event_lock; +}; + +enum { + DESC_DONE_FLAG =3D BIT(0), + LINK_DOWN_FLAG =3D BIT(1), +}; + +void ntb_list_add(spinlock_t *lock, struct list_head *entry, struct list_h= ead *list); +struct ntb_queue_entry *ntb_list_rm(spinlock_t *lock, struct list_head *li= st); +struct ntb_queue_entry *ntb_list_mv(spinlock_t *lock, struct list_head *li= st, + struct list_head *to_list); +void ntb_qp_link_down(struct ntb_transport_qp *qp); +int ntb_transport_init_queue(struct ntb_transport_ctx *nt, + unsigned int qp_num); +struct device *get_dma_dev(struct ntb_dev *ndev); + +#endif /* _NTB_TRANSPORT_INTERNAL_H_ */ diff --git a/include/linux/ntb_transport.h b/include/linux/ntb_transport.h index 7243eb98a722..b128ced77b39 100644 --- a/include/linux/ntb_transport.h +++ b/include/linux/ntb_transport.h @@ -48,6 +48,9 @@ * Jon Mason */ =20 +#ifndef __LINUX_NTB_TRANSPORT_H +#define __LINUX_NTB_TRANSPORT_H + struct ntb_transport_qp; =20 struct ntb_transport_client { @@ -84,3 +87,5 @@ void ntb_transport_link_up(struct ntb_transport_qp *qp); void ntb_transport_link_down(struct ntb_transport_qp *qp); bool ntb_transport_link_query(struct ntb_transport_qp *qp); unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp); + +#endif /* __LINUX_NTB_TRANSPORT_H */ --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010024.outbound.protection.outlook.com [52.101.229.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4E6035CB73; Wed, 17 Dec 2025 17:49:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765993807; cv=fail; b=rZMy0nnsMZdEZsnwF/hCwdLYDAckRv4XsBB4eBdqg9+CM8EGr3/3QGvc1QrR/+6xDid9YdMjlVDoxq+h5QllxAq5yMubF1ni30jISpRt2015eY5v7kWdGnAEhS8yKCkiS3h3ygApM52FhW1HsILorghFl82u+elm6zyu+TIsqYw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765993807; c=relaxed/simple; bh=69e7PGsuDLmLY11yGAktC4/kimg8JqY4Dkne4IMfPXw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=njqIDYVxrzvoEl3qIXw6ptN42/gH8OVNTB52XHUh6T9Rkf1mSgpe5nk5pEbjEDDGkEs+DoE2xkdiqHi+3n1bWrd1zlU5TmExvUV26lzVfMDWoPyC2gN2YASuxCfEetrIxQMNre2itl4aHK83kmlGOI2vJnJm2i2HLwp7fj7dklY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Bqa/RWBZ; arc=fail smtp.client-ip=52.101.229.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Bqa/RWBZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=me7R1AhE39NAW78zNN+pdNQC5S3gXFD7qvmLtiEbIYBodlOOeQbd6j7M0eqZMRD/vjJCak7xCWDt1U5+DuvCh7nTyXVTG3diC8oxXRRct11nV41u0JerDhDvcFshOIyeJk0zo8ikpbXLYg61Rii7wYR7upCypIfKywLyPiaI1e9XOMeY87HXu4G0cW01F5ZYYcLfILXzO8VG7r4xdGpFdIFE1Mm2km5BrqPiwd7KihGEra6kyWri3uceOyOfVtEQ5TPLyPWrYzgSghgHTCPDzybO7qp6w+aFem5Wna0VKNPlhvi1gcgjeofUAW4OOmyMfMAqltzJsSO2EeK5pS0PlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=yHnzD/I+IlEwwC0eTS/j4JzomLQ1b9OSgzbpKWYcbp8=; b=csTl0HkHDvHFT9g9iG0ev+IAEcALPAhLXsbUH32asT1IouetLdSCNtr+SHWn2hSh7AjdhMdWIN3bitPMP8BHkbcJQ+F/wPAO6cHrk+l7FnuPP6JE2OElsuMqd07uCpn9VYqvK1n6Y/PajLRWqV4v3TcpxMAkjgy3ww4m58LzDLKZuPHHEv9cE/AhGdPTCGq1AZ/YhvAuKrKCF0KJEXAqWmBF2Kd6zWKH7EpE9BN+0+AqlBe2jqZjbwt5AkWliwbhV65JOTJ3oAhlfq74X6uLO3iEMruhm3wWkK5ZaTqitIyYW/L0EFpLY2SacHvaNXl9okFtC9ABQpR81W6X33VWfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yHnzD/I+IlEwwC0eTS/j4JzomLQ1b9OSgzbpKWYcbp8=; b=Bqa/RWBZVWjPL90XcpFk8j4dKnlhPVNw71h7eqHy9AEykLEIrN6bDrQ3FtqmMRvAE/RbRsFRQkhNspRdPqCGZK+/Ztlpy7t0XBu/wJJh8kIjHpPa3C/h7DCgKjjhS/DQjG5lMTdS1R39cb0QVL/lg3DcokyY2Qef4enrOqG399E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:28 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:27 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 16/35] NTB: ntb_transport: Introduce ntb_transport_backend_ops Date: Thu, 18 Dec 2025 00:15:50 +0900 Message-ID: <20251217151609.3162665-17-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0068.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:371::9) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 60ec74b6-f929-4c0b-b470-08de3d7f4006 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1JmMTZWJn8N3Ap2D1ywxPKvgzUGD4HqzucAu9FAfXAsQ55dqQ6n6HDQah+Rd?= =?us-ascii?Q?vmhPDb+CTxr8cBFv71Yjp/LoiJQkiTnotDrXP535xKdUDRqAk6eYU1yi6GOl?= =?us-ascii?Q?Nd82aaVBpXHYnqRJQZieqp9tTVBWW3MgFib5fqEJyh5hQoaVYb4wKtyk/lEf?= =?us-ascii?Q?cyLlTaf3xVxUNB0rjjaLx+ekuK2kIfSxKTt9wHrJew587iyz/jsN5HWpPyl3?= =?us-ascii?Q?/w8GUPkgAVOE0S2WrH6Yab5eCA5XhwuhCpScCoF8FqETQblPI8vaDh289MUn?= =?us-ascii?Q?0buHXFJ7HsCqKkFShYSKjGzhHNtPgkAB8YJOWbmNuYj0jpW8vf7SlB+6cbys?= =?us-ascii?Q?pYx7iFgKc0CRcyR06nr0gkE/qm4EzRTNwx97BNFikjlqJyM7uQ4qKGbmI9tQ?= =?us-ascii?Q?swjiS1CNIuyFl9r/nvMarZk8m3FtJXWT+bQ4+2amUlg0x/m2Dh4xYs7GMO6h?= =?us-ascii?Q?qv/rXl8wiWLtGdcoI/unjoYwLBfjb2WoVl+9p2b4A99BmdAovwbd4f2nGNzV?= =?us-ascii?Q?CaVx9oNV/IJhnCaruf4irUsPeSRtduN984hoK3YNsnzS8WqLNkT02Ff6MPgh?= =?us-ascii?Q?MFguvQtEM5HBWbnWKq9hiQNjliFMgikfEDzjVwdkdtYOFJneFYSLYpaoAg7v?= =?us-ascii?Q?CUB6YhxQj0f4mHaLt0fG4HLTN8PxvznbYTxxvyw1lo1xy+sW0mJLdfVq2UNm?= =?us-ascii?Q?qPvqgfArDGwnobu+OsY9jstFpbui4+NyOzmKih/mPs3tAs76fopIWDXCEz5J?= =?us-ascii?Q?X3pEKLZ9MlGJVEzjyRg0KweWC+pyYKHjedpktSZiDfsCS1zvrtR67Y4aAdh0?= =?us-ascii?Q?coLb7TafaMtQbb15MWp1bIUSsNZiOUrPi3ZZOk/Qm/R8oGVLcFHTp+7pldGf?= =?us-ascii?Q?HNZlXjsNIScYtXU5NymV74JRfPnXPeNMzfE8SWEJbn6Sxvd98ZzxbCe9CE90?= =?us-ascii?Q?lvH6zTj3GJqvJgSHR2uXxjyK5pU8Ehsalntefjy7QUtm4vvP5gRiQifE6yrH?= =?us-ascii?Q?JbTSWv3OVzQIWmU2ACQRPLEbi89zxm15HV5u9ToxsiSSccLgJQKXFpa/+5xD?= =?us-ascii?Q?XoxTKej1O5L2tSODx77INP9KgtMpL9OgeXK/DtOo6fuypJcZawuwfAeop+uM?= =?us-ascii?Q?LNBUPactUV2oSbQrF4SyRWNrIreZmmCeoj99H5USNj9B6G9mtHDw0K9gzlbH?= =?us-ascii?Q?vUHRNfOe6dM6U9naptBTgZ5lyy2T1lne2Eyo9LEyMVKNyvU3zWZm6dBxjz+3?= =?us-ascii?Q?R7mz079Y4sVFWEij6VjDa0NYI81JXxE6ns94UzblGrP7WR74wA+gTtMuBxak?= =?us-ascii?Q?5N8VNRzfF9D+J1ZkrtWeXL2G0QvjE2UiYdvZL9YJOOzY1j3ucdNLcalyQ7XJ?= =?us-ascii?Q?eW5znCqJSju8rSm78wyZ50J9/mBTWkdZsLliumqJE4jSIpz+WOFRS8R87TMJ?= =?us-ascii?Q?fHIT0a9lvOxrWMpLRsjPRirIoGvvaV8K?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jGo50AHuWssIImMF+YZUQj2cxCLWtTQ9TFabUBw92Vx/nufVl7wHPrgZqJqq?= =?us-ascii?Q?jxRdsruke5mZ62Be/5eh6iK9kEEISRDse2MS2Q8zNkNLyGE2hwESNQPP0p0g?= =?us-ascii?Q?lw7CGWOhTurseuV3ztzQdhSj4R7vIO6fK/818wCer1dZJcvQTzXNkMRmk73t?= =?us-ascii?Q?6kJK4xxg0fK9W3rMYKmYiy2TWev3YsnJk4W1BMZYc2TT1Rot+tEQlFGbUP3w?= =?us-ascii?Q?o/HJjIcj9WrWG/g0RSB0rLmmdxLu9nNsi31C1M0jUIrvL6VLn75jgtluhgFG?= =?us-ascii?Q?UkGtYbs3V+P1vSrmllKJLMyVY/7WUblAeIR72nnTfbIUmkKUHhq6ukErjv3+?= =?us-ascii?Q?+FxVJRqKWYWHxyDcXf/PynTk3h2S2i8/E9+8MLMNDkWRhO8Htgvbg0qRV1K/?= =?us-ascii?Q?tLnXnZ6A5Bhru0wEzjLggYAaZ6+V79W7zEafgQm2ugvbtu2GVetKdSRQ2BQT?= =?us-ascii?Q?4UwdI40ofwac6+V3uJ7UGwWX776vpu5Ps87Nd737s4SehnqTKxgBBrwncNih?= =?us-ascii?Q?krFiew3x+w4Hp1Tfwz07ymfVICLLmFLKAu5mzygfMv6644ZhZytTHvnwQtnR?= =?us-ascii?Q?LNVd2SWyvCzc4tT25z9QcDAFmItpfoTkqyVkAwc1kzgSBPAhjS/J/vXOSMPL?= =?us-ascii?Q?aIxglwhbmFT8RbbwhVLvzCsaq18EWRYyfxvGL2ASGLdJg4ZyWejkVTH+Fh+z?= =?us-ascii?Q?PllEQfB+EMxRsP5JbyYGaeIazykpbolSKW1et+L9pwQFEHk22hYFaaS4oIPG?= =?us-ascii?Q?w2F3o1dKQgmP9phxkF8WqHV7cwLLfi7nNPVkiWZ5ZF9/HBKN3XhiKnusvvDA?= =?us-ascii?Q?YftEZOdmtNvQoFc+Kj7BqxyncrGCAoEW3X4dvCpriCrhvHHLtVMVqff+2MaC?= =?us-ascii?Q?s3tnIB0zqU1yQjlgeF7wwq1cC3X5T1SVQmTZ1apayed2fZE9UIAwtVX2xfiy?= =?us-ascii?Q?aePBATskA/7gLacLXlUaEwtxJEhu+1NG9meNw8K4Vs8s5KVC1QHVqwLjv/0v?= =?us-ascii?Q?e0FGlWmfHmFCHjo039PcyPPnGgueONgFk0QrizM7sBKrpeD4GghkBN/Ze33m?= =?us-ascii?Q?5ZQ7mXvyN6aM5jKjkcUOb3I5nJKTNkv8zoVgmlJ4DLwLit5zYI+iME86jSwM?= =?us-ascii?Q?f+iQxsy2N7S8W7VQWrXmjXSPFgmzvaE/nQ2TwbbTSmoXMF4YU53kUjl+un+L?= =?us-ascii?Q?EcV2yGfw6fF5ZUcD0jgeCzKek9ueBvwbasdQpUwO/eYnp6nd8xS7PR6i5hsF?= =?us-ascii?Q?sD1vrjfBA8qZHQtBNy+AJGMaUkTVgh3KFdy0KoAeh15WzAl8LxTDeHQlnFG/?= =?us-ascii?Q?+9ktbWpjc2kRScfMXd0LrtC5A8uoBoIxjjGuRTaKEuudolPEoBs21JWe543k?= =?us-ascii?Q?6lFk4M5dDB/BRU/TR1urNTT91jewcbXDV4mmlv5vlzRBMnuwlY0ccVcrGpyG?= =?us-ascii?Q?rReCDIDcN5Zd7BwaOyFXXXA3yKgIgfybZOIHtwI15eOeb7lTEtDB0HkdQ+hH?= =?us-ascii?Q?A6TJPOFcYDsHR56FK0PhDExIgh5xobgvW7qN7SSdONCcxzJjS4x0wlu2eiU3?= =?us-ascii?Q?bOWDkmpe1zPeqFBWWPqEkshRlPCIBwLnZiLfhW9WlrNeWhjFm8lYjnUa/+w9?= =?us-ascii?Q?Q/bXMVm8fGHFPf/rZXbppUk=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 60ec74b6-f929-4c0b-b470-08de3d7f4006 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:27.8490 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rZCPwkVbfM01GNYgQgawYUpK3R9IPRl5wui5KarEH1NkUKQyW0Hz7Fnwx2aUfm+JJZcvJ4HfOImh77bco1DW2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Introduce struct ntb_transport_backend_ops to abstract queue setup and enqueue/poll operations. The existing implementation is moved behind this interface, and a later patch will introduce an alternative backend implementation. No functional changes. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport.c | 133 ++++++++++++++++++--------- drivers/ntb/ntb_transport_internal.h | 21 +++++ 2 files changed, 112 insertions(+), 42 deletions(-) diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c index 3969fa29a5b9..bff8b41a0d3e 100644 --- a/drivers/ntb/ntb_transport.c +++ b/drivers/ntb/ntb_transport.c @@ -348,15 +348,9 @@ void ntb_transport_unregister_client(struct ntb_transp= ort_client *drv) } EXPORT_SYMBOL_GPL(ntb_transport_unregister_client); =20 -static int ntb_qp_debugfs_stats_show(struct seq_file *s, void *v) +static void ntb_transport_default_debugfs_stats_show(struct seq_file *s, + struct ntb_transport_qp *qp) { - struct ntb_transport_qp *qp =3D s->private; - - if (!qp || !qp->link_is_up) - return 0; - - seq_puts(s, "\nNTB QP stats:\n\n"); - seq_printf(s, "rx_bytes - \t%llu\n", qp->rx_bytes); seq_printf(s, "rx_pkts - \t%llu\n", qp->rx_pkts); seq_printf(s, "rx_memcpy - \t%llu\n", qp->rx_memcpy); @@ -386,6 +380,17 @@ static int ntb_qp_debugfs_stats_show(struct seq_file *= s, void *v) seq_printf(s, "Using TX DMA - \t%s\n", qp->tx_dma_chan ? "Yes" : "No"); seq_printf(s, "Using RX DMA - \t%s\n", qp->rx_dma_chan ? "Yes" : "No"); seq_printf(s, "QP Link - \t%s\n", qp->link_is_up ? "Up" : "Down"); +} + +static int ntb_qp_debugfs_stats_show(struct seq_file *s, void *v) +{ + struct ntb_transport_qp *qp =3D s->private; + + if (!qp || !qp->link_is_up) + return 0; + + seq_puts(s, "\nNTB QP stats:\n\n"); + qp->transport->backend_ops.debugfs_stats_show(s, qp); seq_putc(s, '\n'); =20 return 0; @@ -440,8 +445,8 @@ struct ntb_queue_entry *ntb_list_mv(spinlock_t *lock, s= truct list_head *list, return entry; } =20 -static int ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt, - unsigned int qp_num) +static int ntb_transport_default_setup_qp_mw(struct ntb_transport_ctx *nt, + unsigned int qp_num) { struct ntb_transport_qp *qp =3D &nt->qp_vec[qp_num]; struct ntb_transport_mw *mw; @@ -994,7 +999,7 @@ static void ntb_transport_link_work(struct work_struct = *work) for (i =3D 0; i < nt->qp_count; i++) { struct ntb_transport_qp *qp =3D &nt->qp_vec[i]; =20 - ntb_transport_setup_qp_mw(nt, i); + nt->backend_ops.setup_qp_mw(nt, i); ntb_transport_setup_qp_peer_msi(nt, i); =20 if (qp->client_ready) @@ -1095,6 +1100,46 @@ int ntb_transport_init_queue(struct ntb_transport_ct= x *nt, unsigned int qp_num) return 0; } =20 +static unsigned int ntb_transport_default_tx_free_entry(struct ntb_transpo= rt_qp *qp) +{ + unsigned int head =3D qp->tx_index; + unsigned int tail =3D qp->remote_rx_info->entry; + + return tail >=3D head ? tail - head : qp->tx_max_entry + tail - head; +} + +static int ntb_transport_default_rx_enqueue(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry) +{ + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_pend_q); + + if (qp->active) + tasklet_schedule(&qp->rxc_db_work); + + return 0; +} + +static void ntb_transport_default_rx_poll(struct ntb_transport_qp *qp); +static int ntb_transport_default_tx_enqueue(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry, + void *cb, void *data, unsigned int len, + unsigned int flags); + +static const struct ntb_transport_backend_ops default_backend_ops =3D { + .setup_qp_mw =3D ntb_transport_default_setup_qp_mw, + .tx_free_entry =3D ntb_transport_default_tx_free_entry, + .tx_enqueue =3D ntb_transport_default_tx_enqueue, + .rx_enqueue =3D ntb_transport_default_rx_enqueue, + .rx_poll =3D ntb_transport_default_rx_poll, + .debugfs_stats_show =3D ntb_transport_default_debugfs_stats_show, +}; + +static int ntb_transport_default_init(struct ntb_transport_ctx *nt) +{ + nt->backend_ops =3D default_backend_ops; + return 0; +} + static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *nd= ev) { struct ntb_transport_ctx *nt; @@ -1129,6 +1174,10 @@ static int ntb_transport_probe(struct ntb_client *se= lf, struct ntb_dev *ndev) =20 nt->ndev =3D ndev; =20 + rc =3D ntb_transport_default_init(nt); + if (rc) + return rc; + /* * If we are using MSI, and have at least one extra memory window, * we will reserve the last MW for the MSI window. @@ -1538,14 +1587,10 @@ static int ntb_process_rxc(struct ntb_transport_qp = *qp) return 0; } =20 -static void ntb_transport_rxc_db(unsigned long data) +static void ntb_transport_default_rx_poll(struct ntb_transport_qp *qp) { - struct ntb_transport_qp *qp =3D (void *)data; int rc, i; =20 - dev_dbg(&qp->ndev->pdev->dev, "%s: doorbell %d received\n", - __func__, qp->qp_num); - /* Limit the number of packets processed in a single interrupt to * provide fairness to others */ @@ -1577,6 +1622,17 @@ static void ntb_transport_rxc_db(unsigned long data) } } =20 +static void ntb_transport_rxc_db(unsigned long data) +{ + struct ntb_transport_qp *qp =3D (void *)data; + struct ntb_transport_ctx *nt =3D qp->transport; + + dev_dbg(&qp->ndev->pdev->dev, "%s: doorbell %d received\n", + __func__, qp->qp_num); + + nt->backend_ops.rx_poll(qp); +} + static void ntb_tx_copy_callback(void *data, const struct dmaengine_result *res) { @@ -1746,9 +1802,18 @@ static void ntb_async_tx(struct ntb_transport_qp *qp, qp->tx_memcpy++; } =20 -static int ntb_process_tx(struct ntb_transport_qp *qp, - struct ntb_queue_entry *entry) +static int ntb_transport_default_tx_enqueue(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry, + void *cb, void *data, unsigned int len, + unsigned int flags) { + entry->cb_data =3D cb; + entry->buf =3D data; + entry->len =3D len; + entry->flags =3D flags; + entry->errors =3D 0; + entry->tx_index =3D 0; + if (!ntb_transport_tx_free_entry(qp)) { qp->tx_ring_full++; return -EAGAIN; @@ -1775,6 +1840,7 @@ static int ntb_process_tx(struct ntb_transport_qp *qp, =20 static void ntb_send_link_down(struct ntb_transport_qp *qp) { + struct ntb_transport_ctx *nt =3D qp->transport; struct pci_dev *pdev =3D qp->ndev->pdev; struct ntb_queue_entry *entry; int i, rc; @@ -1794,12 +1860,7 @@ static void ntb_send_link_down(struct ntb_transport_= qp *qp) if (!entry) return; =20 - entry->cb_data =3D NULL; - entry->buf =3D NULL; - entry->len =3D 0; - entry->flags =3D LINK_DOWN_FLAG; - - rc =3D ntb_process_tx(qp, entry); + rc =3D nt->backend_ops.tx_enqueue(qp, entry, NULL, NULL, 0, LINK_DOWN_FLA= G); if (rc) dev_err(&pdev->dev, "ntb: QP%d unable to send linkdown msg\n", qp->qp_num); @@ -2086,6 +2147,7 @@ EXPORT_SYMBOL_GPL(ntb_transport_rx_remove); int ntb_transport_rx_enqueue(struct ntb_transport_qp *qp, void *cb, void *= data, unsigned int len) { + struct ntb_transport_ctx *nt =3D qp->transport; struct ntb_queue_entry *entry; =20 if (!qp) @@ -2103,12 +2165,7 @@ int ntb_transport_rx_enqueue(struct ntb_transport_qp= *qp, void *cb, void *data, entry->errors =3D 0; entry->rx_index =3D 0; =20 - ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_pend_q); - - if (qp->active) - tasklet_schedule(&qp->rxc_db_work); - - return 0; + return nt->backend_ops.rx_enqueue(qp, entry); } EXPORT_SYMBOL_GPL(ntb_transport_rx_enqueue); =20 @@ -2128,6 +2185,7 @@ EXPORT_SYMBOL_GPL(ntb_transport_rx_enqueue); int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *= data, unsigned int len) { + struct ntb_transport_ctx *nt =3D qp->transport; struct ntb_queue_entry *entry; int rc; =20 @@ -2144,15 +2202,7 @@ int ntb_transport_tx_enqueue(struct ntb_transport_qp= *qp, void *cb, void *data, return -EBUSY; } =20 - entry->cb_data =3D cb; - entry->buf =3D data; - entry->len =3D len; - entry->flags =3D 0; - entry->errors =3D 0; - entry->retries =3D 0; - entry->tx_index =3D 0; - - rc =3D ntb_process_tx(qp, entry); + rc =3D nt->backend_ops.tx_enqueue(qp, entry, cb, data, len, 0); if (rc) ntb_list_add(&qp->ntb_tx_free_q_lock, &entry->entry, &qp->tx_free_q); @@ -2274,10 +2324,9 @@ EXPORT_SYMBOL_GPL(ntb_transport_max_size); =20 unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp) { - unsigned int head =3D qp->tx_index; - unsigned int tail =3D qp->remote_rx_info->entry; + struct ntb_transport_ctx *nt =3D qp->transport; =20 - return tail >=3D head ? tail - head : qp->tx_max_entry + tail - head; + return nt->backend_ops.tx_free_entry(qp); } EXPORT_SYMBOL_GPL(ntb_transport_tx_free_entry); =20 diff --git a/drivers/ntb/ntb_transport_internal.h b/drivers/ntb/ntb_transpo= rt_internal.h index 79c7dbcf6f91..33c06be36dfd 100644 --- a/drivers/ntb/ntb_transport_internal.h +++ b/drivers/ntb/ntb_transport_internal.h @@ -120,12 +120,33 @@ struct ntb_transport_mw { dma_addr_t dma_addr; }; =20 +/** + * struct ntb_transport_backend_ops - backend-specific transport hooks + * @setup_qp_mw: Set up memory windows for a given queue pair. + * @tx_free_entry: Return the number of free TX entries for the queue pai= r. + * @tx_enqueue: Backend-specific TX enqueue implementation. + * @rx_enqueue: Backend-specific RX enqueue implementation. + * @rx_poll: Poll for RX completions / push new RX buffers. + * @debugfs_stats_show: Dump backend-specific statistics, if any. + */ +struct ntb_transport_backend_ops { + int (*setup_qp_mw)(struct ntb_transport_ctx *nt, unsigned int qp_num); + unsigned int (*tx_free_entry)(struct ntb_transport_qp *qp); + int (*tx_enqueue)(struct ntb_transport_qp *qp, struct ntb_queue_entry *en= try, + void *cb, void *data, unsigned int len, unsigned int flags); + int (*rx_enqueue)(struct ntb_transport_qp *qp, struct ntb_queue_entry *en= try); + void (*rx_poll)(struct ntb_transport_qp *qp); + void (*debugfs_stats_show)(struct seq_file *s, struct ntb_transport_qp *q= p); +}; + struct ntb_transport_ctx { struct list_head entry; struct list_head client_devs; =20 struct ntb_dev *ndev; =20 + struct ntb_transport_backend_ops backend_ops; + struct ntb_transport_mw *mw_vec; struct ntb_transport_qp *qp_vec; unsigned int mw_count; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010043.outbound.protection.outlook.com [52.101.229.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 814CB358D21; Wed, 17 Dec 2025 17:48:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765993725; cv=fail; b=ISeHXDdUBMUd2Mh6a2X4cH1b1gtCzYoElq2Q3ce3ofQKcm8Z87QGZs5TzVgfug8fMXs5Vp/2/Htfl+s7bDwOFamGwuJqzFbXo3gdjKqeTIuGQFTidwqJimEaGqUbAufP8rOZZmD7Y2z4BTKO5t+T9M0MFc7awYH6oRxJ8er11xI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765993725; c=relaxed/simple; bh=IepXPJTSF+QW5csZtUTGUHvBPqsK14sVRrj2rDHhmng=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ffV794rudGk474cWtebacPWAkQFjN9lgt33HLTvLjUzyIpm+7e5tuiw3hFlDZzi2GcTK5SzmxoBxX0Yn221KoJKeVEFEKahde9aJNkJedAZReCF0walCpS1Vb/ElMZl0QfBNsCxZ/yNLwzkhNhTBCMPqowz8s2XmvSNso3PIBko= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=YGprAFTC; arc=fail smtp.client-ip=52.101.229.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="YGprAFTC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mvM7ImRwQSbw57luAMLcAvGWwsyMp3j8WeX6VgJG4DcSYVDNQnwQFy13FxYnlFXMTxLMWkKi5JFrJW9H0mXR7U+Y9+8H5fz8Ky+wg01wDjCNzShBA9/ej1M9h7Uneg7VM7A3GcSFNZTOvMJa7a1jwRqdFsyPeeojB+JzuPnZGjGfTaQ8Mkmgm/kn8g8EleJDA6N81mNqDKec5HIsUX1CWwHFzvA7Db4xvn8Z4tpq0iFs9gJecdz/Y6WwuYzx1D/DycW2AkjX9jfA2/kwRkjljLnc6NbDVivqaAqDvD7r6UHmOZWa6dSbWQPrSrrHLCs5EP4zYhR8HHqskXuYTzOxnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=5+HsGG0URLgiCz+kBgzM8N+sPJK7UtrCe3DgERbB/Pg=; b=EFahSa5t/dRo8fhMIDdeioQ7UoItiilIlgPZZ/u8mkAbus+sH9wvdhqyBaM3OyojsOanayr/HtnyG8FVvafvLpQmcPh1YNN5IOjJy8ZFpuF6+kXmpp3m3r3gpc6R+oIIg7P0hJkc3oLzTc83X0a+PsTYgNX3Zp3A73Mdbr3EgymKG7VNuRD03pDkP9L32VBp1EVCBDHsgK+QPNgr/A4Oz8Edov4XjqwUp6kKI6AzAFLQoOI3d7BvVTTaGHqfJGqu66OGjxrjnxnxZaVkBKuzw+Q6/v5A+Kw0tpkiD3AJ4IU37LDerI1brtHrs9qANYjyxjBWqX7UW0CxpwDGXFERJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5+HsGG0URLgiCz+kBgzM8N+sPJK7UtrCe3DgERbB/Pg=; b=YGprAFTCKpvpd/JNfYny0Ev/d6Z9FTyNnfPl5+uB3hK37sbFYGLN2RF7Z9zIKjA95nBpSPsybg+I6oEYJpH86pU4c5v3HPR9eb1Wvn1gXSlSoGf8L/Zvr64NYFQcvwOu+VUa91kmIdyEYRuzVdStljejp3FoW+O4x1NQXg5aYlQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:28 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:28 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 17/35] dmaengine: dw-edma: Add helper func to retrieve register base and size Date: Thu, 18 Dec 2025 00:15:51 +0900 Message-ID: <20251217151609.3162665-18-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0045.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::19) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: ef2448f9-ffd7-4a4a-56ba-08de3d7f4093 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gLB4+pYuU28kXW9NklnJydwDpPD6MepdywQVa7EeJj8XZK5yUzLi8kQ3JNuv?= =?us-ascii?Q?sieif8T2hhlbRg33U3nOu7K4rgcZcn8VpJ9vMfiCtrfpe5btQGBD8gNKveSZ?= =?us-ascii?Q?FSmazNZg+W55cVj4egiog4HPO32WSWh/ERmEI8fdvVVc/hZxxnboLM2BQImr?= =?us-ascii?Q?7hgM1WU13yYoRnpHy9zzbalvQyR3qVQQs9ZB+hryKfVLyo1MWkTdYIC6HQ+L?= =?us-ascii?Q?IzLz3r/hVe4dsRYdfRa7z7BcI3wqwksXXMU8Gi3CUOZ3sZLXWFhac+zHo0Qe?= =?us-ascii?Q?q/fQBtZLjCj/VxDiEatTijRKCNBg2DZ9ofuxKsgFWUPO/JBCRLGEUgLj47+m?= =?us-ascii?Q?Iuhs04o5JSM/Gxoj/C40VdMegVvG6jrG7NJUH7dATlLriQOkygfeHs0+qm6f?= =?us-ascii?Q?8zFgnUq+lQHZAFAEWZ4ppKVw/wSIFK3NTEgeACC4lHRuNd8p08aoM6lUfWg4?= =?us-ascii?Q?KodzHes7Z2rBj8VM/UhmLtVHOA7ne1+5zvXMQQ7voe4juo6iUOFTLvpn3pBB?= =?us-ascii?Q?i6Z8qJppcAeHZXrtFTfH72RkVEaRdVuPYSoBn5YeUdUNHFkP3w/Vl8i9IBbs?= =?us-ascii?Q?yrRd+sItNIOxt5ZtefXdzo+NISng5m8gTqYXJk9oMTn6EJiPN98rd1WyOEWS?= =?us-ascii?Q?SEkhEKfDLMejB4Bn7BKaL9QlRNnTcPYgvclu1LucKhLBPQiG+uCXZGJI9yB7?= =?us-ascii?Q?5poDrukl3lUvYrFVBix0Ex28/t00hZI014CVdNnBkzc2HIjbSXr0NdSXJ4zm?= =?us-ascii?Q?0dznI50I95jwW8PyYbyxJk8t7UGI9khu93wS3xaAKF1RBHusH1lHHryw/Tm8?= =?us-ascii?Q?u8k3hKE8bQDhlnD3pxb14+GKesBDz5Qzk27NBuHaFS7Nl0paKFhfJ6jUaXzC?= =?us-ascii?Q?UVnkY2xu2DBm4H5QfFcyE40KKMZsTAsbP1OSRgUBY1WARwSam57tnSmTjvxu?= =?us-ascii?Q?g+YcsKGiWKHzi3dX4PBPSAdoIOo45V4Q5YMr4Db20OXK1TSplky1NHi2yltq?= =?us-ascii?Q?wiGJ5VVPJXL94gODF4uT4NzAaU7IbJxhbQmHmBVSHXOE5Biepg8H3kGkMZpA?= =?us-ascii?Q?UDbo/9B7xQZkOY8kka64PCKtatevBhXsq8QD+8YASbJSoBtf+L0yWyWCvfzq?= =?us-ascii?Q?ahCgfPKBoGCi+r6lTKdfCqcyzE9CZQTI5U1aoHSyrB/QKJBm4oYh79ct9eOI?= =?us-ascii?Q?NsOGUI+t+AsUW7478lIQAxOKVVbVvjKu4TDq9OBPXYcZtBPNMNxA2MlmxLpV?= =?us-ascii?Q?C7Ze8a8OKDoQ4aq/w6f5fOFq4vFY/4jSKbL0+LOb8hcnCA31LtamPlVH7rBG?= =?us-ascii?Q?OFyM9c/KKT+iVnPCaBlvGLeoP4rhNyZVOGeXPxRBwozRErHXNmZP6IIwKN3f?= =?us-ascii?Q?xiVfY0vHh63uYc0F1o3oCIVFnjK2f67az4jyphwk9ujRs0kPFzNP78JFRYSD?= =?us-ascii?Q?RPj2v4Yog8DK0jf6BOXV5TDxCHW6sLIu?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EZHgxQHQSR4m4HF/CCdyXCAwMRqGQBrd+Sztw91BceqzolQvI5AqtJaCBTmz?= =?us-ascii?Q?CPVeSwQeD7+OR/IintIF6mOEuF4JlFu1+FMZ3LA0kBiERbid3pYac9iDRw8h?= =?us-ascii?Q?whsK/37RiO97uf0ZIKXVQTtU7Hd4ysF4Hr3xhGLIaqNwuefCUGtFdurER88F?= =?us-ascii?Q?2aaKdBNLWkv8jU7jikO6zL9uWbuLcghS/SuytwSK1nBI1qxoBu2utjK33pHI?= =?us-ascii?Q?tw69ucqIQKphuqYmIghiEVmZNUj9uIAho/35ZbpWKK/trdcEzup8Gn72oK1B?= =?us-ascii?Q?Goh+vZqWsCU6fgB+B3nvH+Ltkq678im1vSoXhIOYozx8mc/pAyBJgS7XOde2?= =?us-ascii?Q?JbZk+30ES7xipFSHSF//+gteqWskRpJw90eQpDCNF9UCZexCFTEcgY59fkek?= =?us-ascii?Q?2+lr4d+Kh2mmOvZvmy+l8ccMR6nAMFKACXjGvPy6VWRQLfKk4E1aVCNgjibq?= =?us-ascii?Q?dK7Zi+hgQVs/9UPaXXj7OwGrIIksdYiqz6qxvReAHdOXZ+Ty3A37wVJjLJlz?= =?us-ascii?Q?QtagykKhGQOkIRbOgO2IV0jijKp2goramGmAZm5avB3grENA2fwTClWdlamP?= =?us-ascii?Q?buXIxTdg3LDQd/h011Of3IsLKoj4wWmuDlh64cefdnEVt38cKLrGJ9rL5gy/?= =?us-ascii?Q?1C3ZT9pBoCQ8RjAjfEGWPR7yerIfKm9SCBQzVxkUi8fntgK2H4FmVDEgYwfR?= =?us-ascii?Q?AX3IOjya7oGiQB2ZbEG/YH/nC9sJkjQpNVjSpYQKs4u6HZ/EeN+MhmfI3pBa?= =?us-ascii?Q?i8WNTTKQcKIWtVumUPRriFedAYRv/ddSNXnkiBk3FmO6TQutw8qECFOZuU43?= =?us-ascii?Q?Ex1gj6IQkuz2k9HLd/OAt6Aguc24izF6ss7JAQUNTtt8zC+HIm8hWc7avKPZ?= =?us-ascii?Q?mxYIj8ZZHRuS485GkbH1F4z0dRAHYwurPcuLadOz780CYQvDuAyN5EkA3pRa?= =?us-ascii?Q?CPXKbJapFteRt21DPH8H1KTY94uX55aibjbyYcqlWfLqX2YBEdNEfUOGmygS?= =?us-ascii?Q?+Y4BCcL+L/GI3ZOoVOIfGlEKWfsUONW1Gf2CRVVnLKrxluKz15qT68ZhLS5+?= =?us-ascii?Q?1No8xWnbDEDzdsf1GoTVIFecaOCi5LRvpHwUVrjZk92K0pbCGAInDC5SzjPR?= =?us-ascii?Q?NtjgzWffTH6rm2I0y/FQgo7dqYiD+AsJLnZqGJBUqHJj6xH7sZvANH2EZWkX?= =?us-ascii?Q?/i74ZBXWNLzoAFXXpYB/ct4k2RPMS7nKpAOHjiXE7WwVZBhyfkKl3RdJOSSr?= =?us-ascii?Q?CF98rOTTl4b10i2yevgwp7ySc2/X/HBIEB/cKJ8c7eK6DCh8PZu3D+4YEdrY?= =?us-ascii?Q?RUJH4Z2uBxOoVPQcm8jL6QfKdMZ7jSrf8upF5wVCyQVoQSlouFcZpk1o7nxG?= =?us-ascii?Q?8MbIvZqBJUl+RH8yzuHPzih61TZ/ODVAJwda+QKzs8kO+ve5yRcQNn89vbLr?= =?us-ascii?Q?NKRs704JuLZsKKTbsDtJI2lK6ir/m3pK4eeKq2E6s2EyCgV7BkPjBSy1G/AW?= =?us-ascii?Q?aJztxieSRLqVTgpwNyBiHUSCvepWUT1Ca30r3BqmSv0tGLM3/Fpc0ZWbAujg?= =?us-ascii?Q?+PhTTtLpMgEgvF1JrdTLCXhmyc3fdwli06dy7ZyKxMKaKKV3biXw3YziyHUO?= =?us-ascii?Q?bLp0E8tdKmYQ0QEndKjXVI4=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: ef2448f9-ffd7-4a4a-56ba-08de3d7f4093 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:28.7809 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L4ObfIoECtQcIfL9GKNLxyPhSOTcK5dcyDNUxaX45PsGCMdib59Hh5k06HYqVG6Gfti6G8PSs3/bXpnsevh1RQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Remote eDMA users (e.g. NTB) may need to expose the integrated DW eDMA register block through a memory window. Add a helper function that returns the physical base and size for a given DesignWare EP controller. Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 1 + drivers/pci/controller/dwc/pcie-designware.c | 25 +++++++++++++++++++ include/linux/dma/edma.h | 24 ++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 9480aebaa32a..46d18e7945db 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -12,6 +12,7 @@ #include =20 #include "pcie-designware.h" +#include #include #include =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 75fc8b767fcc..1de88df7b1af 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -162,8 +162,12 @@ int dw_pcie_get_resources(struct dw_pcie *pci) pci->edma.reg_base =3D devm_ioremap_resource(pci->dev, res); if (IS_ERR(pci->edma.reg_base)) return PTR_ERR(pci->edma.reg_base); + pci->edma.reg_phys =3D res->start; + pci->edma.reg_size =3D resource_size(res); } else if (pci->atu_size >=3D 2 * DEFAULT_DBI_DMA_OFFSET) { pci->edma.reg_base =3D pci->atu_base + DEFAULT_DBI_DMA_OFFSET; + pci->edma.reg_phys =3D pci->atu_phys_addr + DEFAULT_DBI_DMA_OFFSET; + pci->edma.reg_size =3D pci->atu_size - DEFAULT_DBI_DMA_OFFSET; } } =20 @@ -1204,3 +1208,24 @@ resource_size_t dw_pcie_parent_bus_offset(struct dw_= pcie *pci, =20 return cpu_phys_addr - reg_addr; } + +int dw_edma_get_reg_window(struct pci_epc *epc, phys_addr_t *phys, size_t = *sz) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci; + + if (!ep) + return -ENODEV; + + pci =3D to_dw_pcie_from_ep(ep); + if (!pci->edma.reg_base || !pci->edma.reg_phys) + return -ENODEV; + + if (phys) + *phys =3D pci->edma.reg_phys; + if (sz) + *sz =3D pci->edma.reg_size; + + return 0; +} +EXPORT_SYMBOL_GPL(dw_edma_get_reg_window); diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3080747689f6..11d6eeb19fff 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -11,6 +11,7 @@ =20 #include #include +#include =20 #define EDMA_MAX_WR_CH 8 #define EDMA_MAX_RD_CH 8 @@ -60,6 +61,27 @@ enum dw_edma_chip_flags { DW_EDMA_CHIP_LOCAL =3D BIT(0), }; =20 +#if IS_REACHABLE(CONFIG_PCIE_DW) +/** + * dw_edma_get_reg_window - get eDMA register base and size + * + * @epc: the EPC device with which the eDMA instance is integrated + * @phys: the output parameter that returns the register base address + * @sz: the output parameter that returns the register space size + * + * Remote eDMA users (e.g. NTB) may need to expose the integrated DW eDMA + * register block through a memory window. This helper returns the physical + * base and size for a given DesignWare EP controller. + */ +int dw_edma_get_reg_window(struct pci_epc *epc, phys_addr_t *phys, size_t = *sz); +#else +static inline int dw_edma_get_reg_window(struct pci_epc *epc, phys_addr_t = *phys, + size_t *sz) +{ + return -ENODEV; +} +#endif /* CONFIG_PCIE_DW */ + /** * struct dw_edma_chip - representation of DesignWare eDMA controller hard= ware * @dev: struct device of the eDMA controller @@ -85,6 +107,8 @@ struct dw_edma_chip { u32 flags; =20 void __iomem *reg_base; + phys_addr_t reg_phys; + size_t reg_size; =20 u16 ll_wr_cnt; u16 ll_rd_cnt; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010053.outbound.protection.outlook.com [52.101.229.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10008349B06; Wed, 17 Dec 2025 16:51:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990271; cv=fail; b=bAMRXHj91ZZQhXqINBETNlsFofOIfbgPIbtkf5+A7H8lcZsGJc1oG2v/G9BgMkqcq3LO3PgzqvcasiCvq6024i3c9W4zZydpA8/Enk9j4GtMqjcVSoH5NusQYinEV1BA8bWZswYAx1f16gMF5D9IriUGdtWHgqb9pwCNe+JNYZ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990271; c=relaxed/simple; bh=ylI98fwT+/hYImWzY3eMWp6QcjILvYfNA+tyY3F/P1c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=csfg1tJRq/9Xn8zbV52+cWAregXbJwQlDwanXFKHCbluDx0Ka5TjaOtOO2KNna1YZW61780H4wcHGnRZucKGqDwLYjZfiy8KAHu2LxEraWGU1EohPI0NcuwLfnxkyEVQiqs/KH0nH1a+2FLf/haYleYuB41xdQeaihsBx4kkhNk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=LxOESZ29; arc=fail smtp.client-ip=52.101.229.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="LxOESZ29" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fI+c4zmE6vm/MM7lvE77gms8ZszY0L/YFmWpbEeJsTiSAoMpCdrGzxf0XJuuXPXyfQyF/dHLfMEH/eFGBk67L3qEboDXFW+iYlt3ez7ZPbLwgr77i4+FDkznP9X5jXgSz4KNfUsFlneo4/UwJNOEfixB+OdHr/3Ik14eygY9EqTP4wA7NTNst2j909P+tQiPhgaaKPNXzP2JEX2IADmeu7x7qYRmYsh0OsLkzWmnLGsa2QYm8ImiRuFURrjMjb27W4ohBOqaNPOhefaUOmgoIys1Ez6WQtcqcCzM24Tis69GxGTFYDKk+JObk2U3ZQCdO3Gx44nsyU5622BbnJr+4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=6YYcrDuPtoMFX/JbuSd1wp5KoLwbFTSYKMRD/fEs81Y=; b=h+5qUOKSjrqpgFeMNmuK47GbUCR2UKM7G77UBdX6HSttM/f0Nv7q0VYtVQufk3Nil9FvEzPuqdxgqyRkxFPbS/pUGCIwVvWeYkX641ucA+h34mUmOLUY6QeGJI7wXXbXvnUA938Go0pskGpcz68AltfsxEX6GS1mvJa2eSqB/cqigQgJjKsTR7aLqHa7iUTV2GbZw2kWnMnm0wptKahVDtzwTa2bCaLQOWSIzDmwHnNdWDCxmVSQK72sAUzL+oRpgiTkAwZQoggh6bPJYiTQKGAjPiZcS0hLL1jiK1MrVr8RE61Yi2vThxQIgaxt0xUoJF77q2Ee74Eh4wq8DTf4Lw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6YYcrDuPtoMFX/JbuSd1wp5KoLwbFTSYKMRD/fEs81Y=; b=LxOESZ29NKdX9KORMCmsarUSnN6JiXE/xhvjf3j4qz3broUxgF5gmOAr3ZFWXKPi6r9BPJBJkdt4QR6M3ZTo+8b9BtvlLvocPa/Jq/vNfB/dAGoI3lGbJn1vnx7rae2qh4J+JVW434FbASnIcVwQi3jh/CytyYIZaL+5Z/snjC0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:29 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:29 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 18/35] dmaengine: dw-edma: Add per-channel interrupt routing mode Date: Thu, 18 Dec 2025 00:15:52 +0900 Message-ID: <20251217151609.3162665-19-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0060.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:371::8) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: bf9b95bd-280f-484c-3c47-08de3d7f4119 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Fji93WD+ctlGmeuwNFC9DB+xZ1BXxPjy7E7ReMVX22XxMb0jnIR0V9D0rhzg?= =?us-ascii?Q?DQPkhCIYnDZgMjRyScD2nDXXl+NatN4dmEI/VgFWzSI8voTx1TzMT1WuSUUG?= =?us-ascii?Q?2LaqiZIc/D2hJg0kQercKSWMh9fKPr0HyEktT9egTqGV80dCgCoogomlKeWX?= =?us-ascii?Q?oE2JyMnAvIZ1s8RQuujNCEZWQsIuVqohBPYvO2LPNZhLfVgepfqtNIFMKTZi?= =?us-ascii?Q?1hN9t+N5GsmxnRDANsbbVTHCnO432i3sMx6soyyJWj5UOQJzE8atYtlzs81R?= =?us-ascii?Q?u6vdp+k6JTMur1FmEIXx6gej1XvyuNSnYONaf5UqFmtT45EGswgPt5IU7AUy?= =?us-ascii?Q?XJrda+zJq6hsG6uQGU8ryS2uSvBrjd+fawRo5SWG7pbxivMtaLAK96jKV5k8?= =?us-ascii?Q?kdnoiD6hYcn/x7hIUom9Zcq631k9XbE5b7YnRpoPmY1KU9KOvnk8QjZy3jJX?= =?us-ascii?Q?IFFfRo7nqGyLI+JRCxVKsAzU9inxabAwSAw+4yEM6k2RemaOIKZZe1bixKgT?= =?us-ascii?Q?vEeTidJ814qIu9yD9tQIWsr/N4ojX3GotaxgBalM5riNFBNuxPkNRrrB0XeW?= =?us-ascii?Q?QJuA9xjD1O57S5HscI4H/m0ZBBMC8FaiQwre8eRNXbgPFww7LWzbh3UGTOMK?= =?us-ascii?Q?zuB/bYBtbMand6uofecHQJgiP6BcYEhTrmgqG3EUzVhU2zm9Zofs5YDbSp3z?= =?us-ascii?Q?IAdqc6h7AAdxT2wyJ6n0g1myOfMDEAYxSwVqZ98lFQmGku6wjlgzxD0HOZ4d?= =?us-ascii?Q?Ik/A1teu9EyMdEteWVGwDKmuZn3AyMWKDQJUX5HxUsEdRWvioQbNvHwDxBqo?= =?us-ascii?Q?9Svf/E4RRvEskhC/myvvnVj3xfBlWRngDv46sxMt6lSly9glyDU987z2F02k?= =?us-ascii?Q?PS+COPAQnUDUYmLSR+YjIbBdtLtdr6l+OAmS+y3MZkx5yWPxrt88bv6RprjZ?= =?us-ascii?Q?JiN7ZjovdJM8AO2UfiYjtIQ7BZIavIL0BObO24jzMAG+4XVi16e4P7iaJvK6?= =?us-ascii?Q?B30wzVMdo0iRzYlntBoXllLlu8H6lwSsPpcZrW7qAXCNicwgEHIet76VX6Nl?= =?us-ascii?Q?zFDtzbpz1WuLeTnmkXhN5njam05SSvFuRUjpTEvV2BHDtlgsT4s98+wS4An5?= =?us-ascii?Q?OUNTriO1dp7ffQG3YcCixrqcZZos2AzQ2RgP8BvHq0fbZKn6CjfW3DCzF68X?= =?us-ascii?Q?hQ+mLmVdv99HaRgYX3QxVJt1CuJfpTLN5EdJzQllOTUgtMRlpTHppCBHm1Wp?= =?us-ascii?Q?63q+APF1fIfP7ODNKqEzgpQag9Do5FofgCvG2wRfEuUwsF8W5qrR5btiYdRG?= =?us-ascii?Q?shIoLy1oey+xcvKJzchLaTPwPgHS67fs0PyL/qSzwCE/vk8Xr8b7ZfgTzGKk?= =?us-ascii?Q?AoF+xAQ44ZYSW9t9yEs6nVh71DrZ9z2ru71d2PcMNWtFCfnjWP0beyTkGUOz?= =?us-ascii?Q?fYDuG7JQr2RAYFNFylEUi5J8/HFxZfiO?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OhpW3UnPSNJLm9kfskc2AMTBE7x+bcWoTP1a0OTdR61sHYLbG/0ZvqC43Iu2?= =?us-ascii?Q?lvQ4k8F8JE6H7reUj/QDOvTqTW5QZ/pmC5P000DPUP4gM3xQS6XXWViQkhjz?= =?us-ascii?Q?EOrVdpEiGejV2ubQ+x8z9ttPjcnDActv88lnZ/YXAxmCP9F9bojPsQ2nPLtf?= =?us-ascii?Q?HO3iglVQvAOkZOasl2SKJ0me9QEuRR9angRlsckLLTD5e7hhg53v+A2oVkRU?= =?us-ascii?Q?XHjr6Hq9O2g7Sgu6CCbkfRNkPn9RrpcRiqBTH+bDkOcatznR2vrTZ0ifRWDs?= =?us-ascii?Q?Z2DdmHiJx+d+8r1WmUAiJ+w92+9724bJA0FfZQKLKXvDp9A8F7A5qn+GrFM8?= =?us-ascii?Q?iVT9cJC/nNFgHn06GKp3sX5eb/3lJlpK2o5YgW0zpS0YvDt1fyMTQTU9gm1h?= =?us-ascii?Q?qapWFPpVpx2zdibDfYZqiEUB2dWSAmXpZuoU/nezrSv3Inc0ZrdUe4JD/Mlf?= =?us-ascii?Q?XXZAjsFf8gg0vJDjQluibpnEgjtp1iULLlmFhbWUGCu4cHv7rSHnm4tyOtWT?= =?us-ascii?Q?HpE1yBEFthDRpysjiEMY8Ov9dQ35flvPQvAS9P5s1MwOv8gBfJHW8Yk7dOcW?= =?us-ascii?Q?hSUcAGs/8vGPctwA8iTvO3bPblMmIoL8dYyt16vaUhg/kh+S7sz4Q58mHUFa?= =?us-ascii?Q?72wIc4IDdVaOTLL4+45gvO1in8h27DpjyOoSraha+7I0OMlswWi1+Njz6uH6?= =?us-ascii?Q?mzSQEX2aii5btJWFWcPIGhC8FmJc34BjaLRx23XA7xJoJO1EnnfugnaCBpV5?= =?us-ascii?Q?gBAZZXbACojB92X8u9vTmxg+cm0FEByL3UI8lWwxQndWSF10Zh623OgHOE+a?= =?us-ascii?Q?KKa8Wxkj6BSdI1bV7k6G3qBPSjZDnMSKYvDQTaM2Bf701wkhJ3iUezMC+COb?= =?us-ascii?Q?V7LlCzNWwdwLZWVd3h0b1IKnOjKGg66g4eTUmo/N/ZKcorpl8yMTAh2l3/M/?= =?us-ascii?Q?UkVIVI6te/3T0Pg5REUBicYF6xF8WlDjpFpEPRFN8uDHWaddWkewHRNW8eIZ?= =?us-ascii?Q?1xnJrRm9pcWqLrz4yvPyDZRkC76WnSbZpuCvWbFoulrRU73pjG3OljQi4O8j?= =?us-ascii?Q?76MVLCuDYHjkmG7ySV6CgLQ08C0lp/bhBdvd9zgdvGhJ91PDbtLEJTiq9bBe?= =?us-ascii?Q?w4FbzBpGTiTCeXgiAjUQtwSh9u8Hhdbk3bLocwQ6lugibIx0gPDvrFhP453C?= =?us-ascii?Q?a1z+gr7Uu/sq06+kOZA5DhbwTZ4BNS8+iF55phddB1W+D0M2U8cFpnUDv4TV?= =?us-ascii?Q?1QM58tWo4VOfUG7bCy805jGd4YEkRHY2J4T1dKjzUKqs3uDxo5q5N3zDm2ZA?= =?us-ascii?Q?b3iMXgZVgzFxOWT5/FGy8jZQBI3wOe36IkY9rHIzNt6vhFipgvCZhsomzKa+?= =?us-ascii?Q?O5Q+1F427HgkqoajRVpiAxqspc6rcURfz/nD6nh0BID7ktgbYcnBFFmkF9w6?= =?us-ascii?Q?EikEPrxXu62m0O4zGQdvMCiN/Dpdv6HK0eHgxbrwTibEqDeaEykSFfWgsO5L?= =?us-ascii?Q?l4OhPK6UkL/Bt3xttobX2rvszWHoX61i4AAF8kdiiM2VGjRbnelWAu/25ZBJ?= =?us-ascii?Q?zBlkBOhN9IIr7fLH9fgMG3K98Ek6IyXpxmsGEW+9Gioq2rDtPSRd3tAOmrPs?= =?us-ascii?Q?XnaNAUJAHDaNSXnEKsDO7F0=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: bf9b95bd-280f-484c-3c47-08de3d7f4119 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:29.6291 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: g1tGRkTKsicqlTOeeAZgtzHZgLW21KhBOQtn4Tu/WMXD4iPRL9BTNnPf5K4YuHr5v6bR2xlcq4QhQ7CqKsX3Ug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" DesignWare eDMA linked-list mode supports both local and remote completion interrupts (LIE/RIE). For remote eDMA users, we need to decide per-channel whether completion should be handled locally, remotely, or both. Introduce a per-channel interrupt routing mode and export a small API to configure/query it. Update v0 programming so that RIE and local done/abort interrupt masking follow the selected mode. The default mode keeps the original behavior, so unless the new APIs are explicitly used, no functional changes. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 49 +++++++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 2 ++ drivers/dma/dw-edma/dw-edma-v0-core.c | 26 +++++++++----- include/linux/dma/edma.h | 46 +++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 1b935da65d05..0bceca2d56c5 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -765,6 +765,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) chan->configured =3D false; chan->request =3D EDMA_REQ_NONE; chan->status =3D EDMA_ST_IDLE; + chan->irq_mode =3D DW_EDMA_CH_IRQ_DEFAULT; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) chan->ll_max =3D (chip->ll_region_wr[chan->id].sz / EDMA_LL_SZ); @@ -1059,6 +1060,54 @@ int dw_edma_remove(struct dw_edma_chip *chip) } EXPORT_SYMBOL_GPL(dw_edma_remove); =20 +int dw_edma_chan_irq_config(struct dma_chan *dchan, + enum dw_edma_ch_irq_mode mode) +{ + struct dw_edma_chan *chan; + + /* Only LOCAL/REMOTE bits are valid. Zero keeps legacy behaviour. */ + if (mode & ~(DW_EDMA_CH_IRQ_LOCAL | DW_EDMA_CH_IRQ_REMOTE)) + return -EINVAL; + + if (!dchan || !dchan->device || + dchan->device->device_prep_slave_sg_config !=3D dw_edma_device_prep_s= lave_sg_config) + return -ENODEV; + + chan =3D dchan2dw_edma_chan(dchan); + if (!chan) + return -ENODEV; + + chan->irq_mode =3D mode; + + dev_vdbg(chan->dw->chip->dev, "Channel: %s[%u] set irq_mode=3D%u\n", + str_write_read(chan->dir =3D=3D EDMA_DIR_WRITE), + chan->id, mode); + + return 0; +} +EXPORT_SYMBOL_GPL(dw_edma_chan_irq_config); + +bool dw_edma_chan_ignore_irq(struct dma_chan *dchan) +{ + struct dw_edma_chan *chan; + struct dw_edma *dw; + + if (!dchan || !dchan->device || + dchan->device->device_prep_slave_sg_config !=3D dw_edma_device_prep_s= lave_sg_config) + return false; + + chan =3D dchan2dw_edma_chan(dchan); + if (!chan) + return false; + + dw =3D chan->dw; + if (dw->chip->flags & DW_EDMA_CHIP_LOCAL) + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE; + else + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_LOCAL; +} +EXPORT_SYMBOL_GPL(dw_edma_chan_ignore_irq); + MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Synopsys DesignWare eDMA controller core driver"); MODULE_AUTHOR("Gustavo Pimentel "); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 71894b9e0b15..8458d676551a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -81,6 +81,8 @@ struct dw_edma_chan { =20 struct msi_msg msi; =20 + enum dw_edma_ch_irq_mode irq_mode; + enum dw_edma_request request; enum dw_edma_status status; u8 configured; diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index b75fdaffad9a..42a254eb9379 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -256,8 +256,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_done_int(chan); - done(chan); + if (!dw_edma_chan_ignore_irq(&chan->vc.chan)) { + dw_edma_v0_core_clear_done_int(chan); + done(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -267,8 +269,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_abort_int(chan); - abort(chan); + if (!dw_edma_chan_ignore_irq(&chan->vc.chan)) { + dw_edma_v0_core_clear_abort_int(chan); + abort(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -331,7 +335,8 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) j--; if (!j) { control |=3D DW_EDMA_V0_LIE; - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) && + chan->irq_mode !=3D DW_EDMA_CH_IRQ_LOCAL) control |=3D DW_EDMA_V0_RIE; } =20 @@ -407,10 +412,15 @@ static void dw_edma_v0_core_start(struct dw_edma_chun= k *chunk, bool first) break; } } - /* Interrupt unmask - done, abort */ + /* Interrupt mask/unmask - done, abort */ tmp =3D GET_RW_32(dw, chan->dir, int_mask); - tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); - tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + if (chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE) { + tmp |=3D FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp |=3D FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + } else { + tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + } SET_RW_32(dw, chan->dir, int_mask, tmp); /* Linked list error */ tmp =3D GET_RW_32(dw, chan->dir, linked_list_err_en); diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 11d6eeb19fff..8c1b1d25fa44 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -61,6 +61,40 @@ enum dw_edma_chip_flags { DW_EDMA_CHIP_LOCAL =3D BIT(0), }; =20 +/* + * enum dw_edma_ch_irq_mode - per-channel interrupt routing control + * @DW_EDMA_CH_IRQ_DEFAULT: LIE=3D1/RIE=3D1, local interrupt unmasked + * @DW_EDMA_CH_IRQ_LOCAL: LIE=3D1/RIE=3D0 + * @DW_EDMA_CH_IRQ_REMOTE: LIE=3D1/RIE=3D1, local interrupt masked + * + * Some implementations require using LIE=3D1/RIE=3D1 with the local inter= rupt + * masked to generate a remote-only interrupt (rather than LIE=3D0/RIE=3D1= ). + * See the DesignWare endpoint databook 5.40, "Hint" below "Figure 8-22 + * Write Interrupt Generation". + */ +enum dw_edma_ch_irq_mode { + DW_EDMA_CH_IRQ_DEFAULT =3D 0, + DW_EDMA_CH_IRQ_LOCAL, + DW_EDMA_CH_IRQ_REMOTE, +}; + +/** + * dw_edma_chan_irq_config - configure per-channel interrupt routing + * @chan: DMA channel obtained from dma_request_channel() + * @mode: interrupt routing mode + * + * Returns 0 on success, -EINVAL for invalid @mode, or -ENODEV if @chan do= es + * not belong to the DesignWare eDMA driver. + */ +int dw_edma_chan_irq_config(struct dma_chan *chan, + enum dw_edma_ch_irq_mode mode); + +/** + * dw_edma_chan_ignore_irq - tell whether local IRQ handling should be ign= ored + * @chan: DMA channel obtained from dma_request_channel() + */ +bool dw_edma_chan_ignore_irq(struct dma_chan *chan); + #if IS_REACHABLE(CONFIG_PCIE_DW) /** * dw_edma_get_reg_window - get eDMA register base and size @@ -141,4 +175,16 @@ static inline int dw_edma_remove(struct dw_edma_chip *= chip) } #endif /* CONFIG_DW_EDMA */ =20 +#if !IS_ENABLED(CONFIG_DW_EDMA) +static inline int dw_edma_chan_irq_config(struct dma_chan *chan, + enum dw_edma_ch_irq_mode mode) +{ + return -ENODEV; +} +static inline bool dw_edma_chan_ignore_irq(struct dma_chan *chan) +{ + return false; +} +#endif + #endif /* _DW_EDMA_H */ --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E675B34D4F1; Wed, 17 Dec 2025 15:16:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984601; cv=fail; b=ibc6HzLaYLsWhNK6Uq0DzkL2IC2zS5A1BVhhL+c+y8K1EkJSnH3q5U4rm7Xo5ivVIIYDClZ1mzckuBMVXxI5rY/x/Vu/yqA39etFE/PzbsJdZZhyoMYA46wa5WQtZweHXFDoPjbH+u3NyRQEqCOD7PSRil5jpvE0f/ik3DCw724= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984601; c=relaxed/simple; bh=5zqyBJOpEKSXnGAGV2M8EAE84LUa4/L6yLnivtqfkCc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kU+ohEH1o5TL4ASQY9L1vO5rqFTCEzLllvAHxiUdytVVRdGbQyYFPRQ/hY6wR/OfQCLxeVc/Vd+JCbYO3921CxX7S6xQc31KgTHXhOPJ3i0U8uPfu7CML3nycISBTPbNGuQK7X2tDjgNPnCdsTCHDxOk2NcuAfkSLiDzgE/hCqo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=jQ4YC731; arc=fail smtp.client-ip=40.107.74.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="jQ4YC731" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dt6W/q1T90F9ncxsskAp1q74JgmwRTKmdO8GYVRfVKlEbHYgJOKLF356aiv1DHgcIuW6lhOYnYiv21u9/D4qROiBgNW51/GCOSW9sxSWkRJEPMtsgVJvB9cyW0ggqKm7eaGStaloJ9Pw/wt+qnvyIinl0quSUht4XPzPIbtnu9vHlp47zclI765lC9pw4f0Xo6JRhc/z1KFErWSi0A8vT7TrAYFLt6RZq4NGi5CPRXOcfSVuCN5cU0PPIO5zrVbVVUfpYbtL47xg6J2wFnXgxDeNa546V5TolIiAsPyopJ91ygCeceqPxUfhUYzDFW0oGovq3oM9jsyKj+FDifgPAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=bLzUNjy/oXeER3ILFYYjuUL7EuoIyktAk5SU4q8+TmI=; b=abI2IsBsN9/1z03XOFUHBImZn7L1tiVigT42/4/JfQITlwgrvG9fpai6z4Z8sTCMvEdTsu4rk3i5m18SRr13aycYT2tzUz8OvoGPj9n+YuLUO4idg8Fvtox86Mosod/UGck/2D34FKBhedwQdk5RD6jhRWa7mWJP+z8bM/Q3ufEFRTwudaup+BnNG0f6yORHYonwU6rwYqgcxMM0+eEeaJr0Uw+MR04Zhq26Jjj6zLftCDn4ek84RvZBNFAGL2ctcPKyOWTkjOK0yXBjeNS4gGdHDM/xiVgQ4DLsyQycuuHvuzd45TzZv058oMn2OB/M2g/RSMEyAoZIZ/o+2AWc7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bLzUNjy/oXeER3ILFYYjuUL7EuoIyktAk5SU4q8+TmI=; b=jQ4YC731qZbJapXsGOPoGGUr0xm+PJYz7l2ufcFXQIDnyMjj/2Zu+t10+yoUoeu6WdyXRkrTUv2i0dZEqzysBsl5XZVaZ7TH/WRIbTERHtZbjUhJkTO7oj0sztsWcGDQVO9IAQBzCzuvjd4JFrwGDCBqRbwnIbPJH40BqXsItKY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:30 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:30 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 19/35] dmaengine: dw-edma: Poll completion when local IRQ handling is disabled Date: Thu, 18 Dec 2025 00:15:53 +0900 Message-ID: <20251217151609.3162665-20-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0036.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d74163c-de22-4c25-c9ac-08de3d7f419b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1yQnKvRZzomHKbZLBV87yPo6/Aq/w5KzaDJU11N5iYn9RqgsGAXlwcnChCxK?= =?us-ascii?Q?atXSuPuh8L2Df7rSYxOn62EHLZwE+dt0Pf3GBSptFOwUbmItLlpIvztn8uSg?= =?us-ascii?Q?rOhgVpgoGaI4P0KW0yXWPedlnVeLPwgdNF4EwWSlSWhSumhu9yUaMYK5LQ1c?= =?us-ascii?Q?ntq1VkvbHYOvQxxaol+QSz2n7SH1hagtrb8c56IXhlKIpU0MtGpib+djHuBS?= =?us-ascii?Q?+VaAMu+tfyutqWz2oamSyAuugUJraOdGqPSzYkedbC8SYHqgK0buBLlzxAaM?= =?us-ascii?Q?IsQpZ0tcUixlwju3cF6imaHr1FXJWftwWopj4SK7PZyt3Ss2jBnOGxoH1/1u?= =?us-ascii?Q?ajkUtcWsrNYIfFZ9XXiZV28HBVzOeWc3ef7Ahw02hJrNeKyOaNVU09DZOvyO?= =?us-ascii?Q?hHepFeS9+HZEd1oMwQOS4Exbz5W1okYYzhWbS7LRCXc9I9UmyGFY1Nuq/MsK?= =?us-ascii?Q?+/6R0CJyWyC8nkZ6VVtr/3hq/BuZtupWiw9DzML08k3i9BZMGWVVCVAt/qCC?= =?us-ascii?Q?tRVW2aNz75yaISXueJmARq5w6cMGcpEGajgZw0bgKndamG5NM35k8x791UKi?= =?us-ascii?Q?ZRZVuyTXEPPBiv9HODIl4gtrHJfq5WD1K9GSlvg/0gMdan+DwXIFk6L37oLw?= =?us-ascii?Q?Q1YhoJo7NCKYsn2XCbvBZUkiL87Ar0bvALBe1Y/BBr+aEsvluWAHQf6xdbuy?= =?us-ascii?Q?AelfGU3JXYTdvaJ7VcascvfBWGfa1NndOUNlpqklI2LKM1BCyv7wuBsBmS12?= =?us-ascii?Q?yiLfwB9mbjUmMYu/VATufmLt2nK57UBDmTiCD6dZf/tzh75uQJ6VeQV665Fu?= =?us-ascii?Q?GH23gU9iwyV1lpJ1iHxU5uosEhR1RPh9kjS8PDtU4Y8K3SnJ0e9/tWxzY1cc?= =?us-ascii?Q?08mbwUdDFjJInpUa0k/tAnTf+R4Y6OorvjgVcFpn25p33dW7Gp0rEC/gsqsU?= =?us-ascii?Q?EPLRX7SG/o/RobGnipLVajRzClbKUPEcm37rQhv7MBMH7fmqaGBWIEoMAT0s?= =?us-ascii?Q?Kk4UzOVGTjhPa5c0GqrMEWsozi9PnNUFBb2Gj1WirmlLH+Y0k2RNnLXIUC5/?= =?us-ascii?Q?cgsPmDlqJ0CjdeX2FR5Or3IsyF7QCB/BM4TMXtvg0OHb8Ta4eaSP3q1ua+to?= =?us-ascii?Q?GK14GMkHnz1LiZf3yj4dMaq+qgrwnhXqtWUOKWIYL1i5uTztcwMXJFDxn/rw?= =?us-ascii?Q?I3j7fcJ7dRg5mtc75wQwra99XFWzkdTYURENHSR+0LKv9iJpt2VfRa9GsDpf?= =?us-ascii?Q?KWTK96Un8czgBn+n/iTH8mOt0zBctKvxdcIWD+qCRbs4zqiFhYdOPhCtAagp?= =?us-ascii?Q?dlFF048LAy+HKGM/6rwqaHO2L8QtUMTNRNsX5gKTkRLLcXTyfUKSnGeH6jdD?= =?us-ascii?Q?JmzRDBWl0Lzaenp9KlQP4j2KpgqIu6XC+EpBkIHNi9boiOBEjxEAmDJETl0v?= =?us-ascii?Q?s9oUpQKbtcxtr4ThW+Gn9R1Hqo8q27VE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?U9NFYJCjWNQE2pTI/arGeY8s5DR+oIdo/7JjowRy9s0MTZ1SeCfJDMS88w//?= =?us-ascii?Q?fiJoUw2AG0yPJlYipu48J7gYu4fL1hjV05ZafDMOVMsBF1qisSBG37pP4OcP?= =?us-ascii?Q?tFP3Vp3kcc/NcbDb09wcHjopi2NX8w5DsIzzofJCOqbjp2lUUPdCmgGbW/KA?= =?us-ascii?Q?bBJu0dcDHWe5xNOteozjGHQi0FU2+9JczcKoNSkHo+Kd1vPIGJSgFsoViPn7?= =?us-ascii?Q?erL7bfO74QZDueN292Za4UBD0IOuZBWck1+c1vJsZHTtJY+5IuqDAxLa7HAD?= =?us-ascii?Q?pSEvUhaRI6QS599qbMahqGIkvKqfMqONmeiam1ofArmwYis95FWPKt0B/U3s?= =?us-ascii?Q?WAz61Jr8emtmTRHppmWx4elFBNNtojpUI1C6mACPGxIj1dKxSCpTBeTAH0v4?= =?us-ascii?Q?vW2R3YyQz93ZYVU/3bAx9F2oGIhWTPcKrqrp25CeviOuMKxjM9JbTL24tBto?= =?us-ascii?Q?IArPanIjy5S/CHZ+L24spH0c/y65lAG5zKBAcOkge2HUo+S7sFwAH/zQDW2n?= =?us-ascii?Q?l1crjvfygyGVaCX0P4YNJiUw6/+xKDR4pdMcIHTjGQlg2SI4IIWzfM4/7/Os?= =?us-ascii?Q?hJ2Hrpp/7CGeZfn/QxDedrfaoYnbZ0vPPj5oRDXC4gFjUiTUzniJObnTenWI?= =?us-ascii?Q?kMUsaDbpVVYFSN8BjF7DhX9kKiwHqr+Cpr3e5EUyB0u5PdRyOS1HQrTDot5F?= =?us-ascii?Q?bstHg6Hj0Y5twzh+Vv5xMs/6y2n895gMFBmVk8oJlJw6HsoIiq1xh3mnnNG9?= =?us-ascii?Q?0EZGoM0V1f2S0R+wW5ncuIjFVA/Sqt0HGgzy6NHt7stze3GcPss5myomuTYw?= =?us-ascii?Q?0UXkYl86baLnOjPIUpTWnMhyBJniBk2r/MDlIBGG/aTW/YKurmd83sQiLkDD?= =?us-ascii?Q?SB/KRRzwhlOkYP1NWPMk6cmJDNCAgMsQ7Nwk3NQbpnPe2iFEwalE4pAHSEkR?= =?us-ascii?Q?XqQY1MppYjjM0ha29QCOv13iazoANw8DfIsd8VTVfwSkMXskDpwQ/NEFYzHN?= =?us-ascii?Q?kbfjuRwqaSyEPzsUdailAbSBlVLQqMKKT0t7GhGPcJ2OHfMaii9fbda8HG30?= =?us-ascii?Q?f4JOZ9Gu/3/IrktEuDhotUI5G5Nf07owEFG4bkX2YFh3Fd2ZdPyc5rqIpPdY?= =?us-ascii?Q?ZqtKw+Gtt1trelhJICuNuqTXY7pb0D2EVJgGs9xZFcWzQ3/rLIkcuNNyPNcn?= =?us-ascii?Q?eOQJKmFrKXejx4xChcx6A3gIzLv9HuM5AK5HlEKcKQbL7//hebDwaxmPOXhZ?= =?us-ascii?Q?wvECBC5LAGASt4LNqpvtKkXYCtqPQyqbzstW1Y019vvHxZxVRx9LwS00DX7b?= =?us-ascii?Q?juRtNeFiXgVJV6luJ4ZvMCH60hjOZds3fLCK8yoKWnS9wdDssntzy2SCyjxD?= =?us-ascii?Q?lzzDRz/vEiJxBbPbVEej1z54j1N7l/0Dd37k2KWiV03g/pfoNrsRKTh3BugX?= =?us-ascii?Q?KLQ/emLNYjejhphbwdBBn6MI+hZKwCYCkUOPuzllMJH/tkeiyXsJXHqEDiqb?= =?us-ascii?Q?CGj/xWjSUOUpCvIqFrnmJ0a8P5I5fbK8cu9iCUQ5gNeuSsZQ3hHB/HhFI3iY?= =?us-ascii?Q?rm9VABr82X580gHcC9j2Ofl+QXrX0gzP/biMl4yBat4napxSRpqz+zW3z5CQ?= =?us-ascii?Q?0GsN+wsziVjLC3679VYrUsw=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6d74163c-de22-4c25-c9ac-08de3d7f419b X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:30.4752 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +x7B5+xRqtBusGu5r7rTgBc6gaxBmwECwu9v2b+5DsS8NZnV//+pdv0LVZz0e5uzG9kPAnuLo8JqGW8LVmITkA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" When a channel is configured to suppress host side interruption (RIE=3D0), the host side driver cannot rely on IRQ-driven progress. Add an optional polling path for such channels. Polling is only enabled for channels where dw_edma_chan_ignore_irq() is true. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 97 ++++++++++++++++++++++++------ drivers/dma/dw-edma/dw-edma-core.h | 4 ++ 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 0bceca2d56c5..09b10ad1f38a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -303,23 +303,6 @@ static int dw_edma_device_terminate_all(struct dma_cha= n *dchan) return err; } =20 -static void dw_edma_device_issue_pending(struct dma_chan *dchan) -{ - struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); - unsigned long flags; - - if (!chan->configured) - return; - - spin_lock_irqsave(&chan->vc.lock, flags); - if (vchan_issue_pending(&chan->vc) && chan->request =3D=3D EDMA_REQ_NONE = && - chan->status =3D=3D EDMA_ST_IDLE) { - chan->status =3D EDMA_ST_BUSY; - dw_edma_start_transfer(chan); - } - spin_unlock_irqrestore(&chan->vc.lock, flags); -} - static enum dma_status dw_edma_device_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, struct dma_tx_state *txstate) @@ -707,6 +690,68 @@ static irqreturn_t dw_edma_interrupt_common(int irq, v= oid *data) return ret; } =20 +static void dw_edma_done_arm(struct dw_edma_chan *chan) +{ + if (!dw_edma_chan_ignore_irq(&chan->vc.chan)) + /* no need to arm since it's not to be ignored */ + return; + + queue_delayed_work(system_wq, &chan->poll_work, 1); +} + +static void dw_edma_chan_poll_done(struct dma_chan *dchan) +{ + struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + enum dma_status st; + + if (!dw_edma_chan_ignore_irq(dchan)) + /* no need to poll since it's not to be ignored */ + return; + + guard(spinlock_irqsave)(&chan->poll_lock); + + if (chan->status !=3D EDMA_ST_BUSY) + return; + + st =3D dw_edma_core_ch_status(chan); + + switch (st) { + case DMA_COMPLETE: + dw_edma_done_interrupt(chan); + if (chan->status =3D=3D EDMA_ST_BUSY) + dw_edma_done_arm(chan); + break; + case DMA_IN_PROGRESS: + dw_edma_done_arm(chan); + break; + case DMA_ERROR: + dw_edma_abort_interrupt(chan); + break; + default: + break; + } +} + +static void dw_edma_device_issue_pending(struct dma_chan *dchan) +{ + struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + unsigned long flags; + + if (!chan->configured) + return; + + dw_edma_chan_poll_done(dchan); + + spin_lock_irqsave(&chan->vc.lock, flags); + if (vchan_issue_pending(&chan->vc) && chan->request =3D=3D EDMA_REQ_NONE = && + chan->status =3D=3D EDMA_ST_IDLE) { + chan->status =3D EDMA_ST_BUSY; + dw_edma_start_transfer(chan); + } else + dw_edma_done_arm(chan); + spin_unlock_irqrestore(&chan->vc.lock, flags); +} + static int dw_edma_alloc_chan_resources(struct dma_chan *dchan) { struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); @@ -1060,6 +1105,19 @@ int dw_edma_remove(struct dw_edma_chip *chip) } EXPORT_SYMBOL_GPL(dw_edma_remove); =20 +static void dw_edma_poll_work(struct work_struct *work) +{ + struct delayed_work *dwork =3D to_delayed_work(work); + struct dw_edma_chan *chan =3D + container_of(dwork, struct dw_edma_chan, poll_work); + struct dma_chan *dchan =3D &chan->vc.chan; + + if (!chan->configured) + return; + + dw_edma_chan_poll_done(dchan); +} + int dw_edma_chan_irq_config(struct dma_chan *dchan, enum dw_edma_ch_irq_mode mode) { @@ -1083,6 +1141,11 @@ int dw_edma_chan_irq_config(struct dma_chan *dchan, str_write_read(chan->dir =3D=3D EDMA_DIR_WRITE), chan->id, mode); =20 + if (dw_edma_chan_ignore_irq(&chan->vc.chan)) { + spin_lock_init(&chan->poll_lock); + INIT_DELAYED_WORK(&chan->poll_work, dw_edma_poll_work); + } + return 0; } EXPORT_SYMBOL_GPL(dw_edma_chan_irq_config); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 8458d676551a..11fe4532f0bf 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -11,6 +11,7 @@ =20 #include #include +#include =20 #include "../virt-dma.h" =20 @@ -83,6 +84,9 @@ struct dw_edma_chan { =20 enum dw_edma_ch_irq_mode irq_mode; =20 + struct delayed_work poll_work; + spinlock_t poll_lock; + enum dw_edma_request request; enum dw_edma_status status; u8 configured; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11010020.outbound.protection.outlook.com [52.101.228.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECBC235CBD5; Wed, 17 Dec 2025 15:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984668; cv=fail; b=sSYBGF9fmfL+LU4pLcNfRdonjjN4U4HbYGa9MjgrYSWXIoV+HCd6SKMP4nnt9nBNp28BQQO6kNKPfUhZ5KhxaI7IXZMsU02xz5Gb02CVUXM2TOHswywAJGcw7UCOie+7ktDr14RsMeyIDa/xn/+5DD1Zdxytmigsfp5S9ucAdjo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984668; c=relaxed/simple; bh=1Y9bU92YdEUA/d81fMwuTKdzIC3gHlad9y6sgvRh99A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sgG9EFjM7p95/gM+74FIN0D5r0yCXXAE+OJMojqCE5K9xCzqBVjUbRveoObyUoCSmbSzLHo//R4ny1y/JcMhfBWf9z9fBY53PGZUweNBSQjHbo7cHHWRYACpZOxxR6wahCHDPkw2cVpL22G+A71tZ6aXhuKkydc0Todlqc6GijQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=U6lkX6n3; arc=fail smtp.client-ip=52.101.228.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="U6lkX6n3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Vd0UONTDQ4BaW6fSB9nnnugAV+GPq8lJ6IDqx6OGbh2MTgT1Bwiu+HLkHLxiqux0VmCnrCKIIX8CocuFmWX0ltV5jKCDWhVdrq6y9DiSjjljTKNRmH8DFjSOQAk03cpCIk5rH+LcOUF54rvvKvt3WaTvysf5emn+JnRVrX7dIb2xAbm35b5B/cozKTMteWqMXywjLZyrK8kTnUJ+tOEA72cLDelqlB6FHobD8zp9rtLRF9BxFgPfBtYdG4RhpAeO4aLtcvG6MjAc2ShMEr7vf7W4jCI14eNiT8NHZb2Pc7uMTJNsxDdKd5FNxpsY/VLk+PGXs46mp1AAu0KzYscxUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=lBHhV8flWb08jkfgSrsYDEjcKE4stA0DKcw1IQNChX8=; b=QMS7UAWHmbfHjHBOjUPXu+SCmfWMIa21li9O4YOY+ccMURjj8Imi4iqkVYVgOua+9K0koRanhzF1wDiuG2aI39HL0neneUGpI61Tijy4rto4Yt4rDqc70tKF4RJkWtYVXsvZnDbzfpQ3UHUqBtYuaXQaws/F1Ru58OgMPdrK7WKZ+nTNm1NElJyoZUntF/2RU29LfIw2FKrNzo22XvWbWUr+u5ElDbDHUt/tQQvhJh8aeqbB7UJtQqxWVjrX4rtG4MFbaKVTwvnznO6RSf0qZiAudFXDyBAZLPlofe+qWVlbUNz3ys5lbW7UHBO8zq4AB0LveiGfxe9p/GhBmfIZ2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lBHhV8flWb08jkfgSrsYDEjcKE4stA0DKcw1IQNChX8=; b=U6lkX6n3xMtDG1BIz4td3w98KjelghQqPwv/zKoXJcwETn5DHcxnF1zOawyjojTOqfaX+1rfdMgo9FupxtVfi846/jFTo9OaLWrEh369dSf7P4pkood9YeSwS3q8cTLX75lSwQRht2CuoL54KAIYuo377ie6TQbxfI+5tjmDlJk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:31 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:31 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 20/35] dmaengine: dw-edma: Add notify-only channels support Date: Thu, 18 Dec 2025 00:15:54 +0900 Message-ID: <20251217151609.3162665-21-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0119.jpnprd01.prod.outlook.com (2603:1096:405:4::35) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b848c19-2894-4397-792c-08de3d7f4249 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sLG43AwZPQPuvufAMICIVDhtA8iR+tcq8JAZjDcin8dEIopfQRAohtEgdg7H?= =?us-ascii?Q?OiC8UmIJB3BeMgFg299O5DpQW2Y9ws/6VGBLERC4hxfbeHWoYooBw0j4Ij9y?= =?us-ascii?Q?X2AFBjdv/LsXz7bH0645pnbcOUNmYsdl7CKFHcijxXPIOxoliM+L+dKZXFCL?= =?us-ascii?Q?I+l1lw07x0ds/2U3TwZMyP15VGd4oPB6nDurOPWVukT8upnSHlkmsFW1ZUxA?= =?us-ascii?Q?l7FR+a1tGy/ztC5x78mInDDBxnFlh0IKvh4K1fdVyWJjE32VacZY4vpQGIeo?= =?us-ascii?Q?gJ/Fy16xKMwBpYeH+z5q65CNilJw3CuCFJCAfzG4y+j49I5q+E9jexOeVWfz?= =?us-ascii?Q?YTTlwmeAsLFV49fODXV567nWVSbthuWot9NKJKW1f15xWyzJ1dkZ5qzxpLTo?= =?us-ascii?Q?3rXeOU/+MxLINKHmVq0i3DMvWvHwUPtf/M67AyT7VCDLivbsDu3uq7J8X4Z/?= =?us-ascii?Q?tUTB+IdHQj6MStkVTKra7VKF01EF1enpeXeTJy0CN6rsz68kZ4oLF0Kk5YtI?= =?us-ascii?Q?K3p0XfNHZQJjDAAFzDfhY708TwoKd7NC9dZDK9IZ8R6ziyHkfVWiHumQW2wz?= =?us-ascii?Q?zVQMMqUaj1ll/ag5KHqeyb0d7meHxNbFv8TtyP2f+JPaSmV0O0+2WyyzSB9b?= =?us-ascii?Q?TthNYia7WSa2jWk6/5Wp8IdymSMLhrhQO/98xs4xuakt5nTQJn84ybLlXV8V?= =?us-ascii?Q?+n2lTrqW0CL3PTuV7V6sToNBY3OJ7Gms0LLezTYe2bJTsH7iv8d9og2vqDdD?= =?us-ascii?Q?UHL9tV4YRTGZiUfJUSX/v5aGK6Bk0btRHnOW83Rq1lfncczctQVyIxpZ6E9N?= =?us-ascii?Q?Jio2hdshgsr6S2W0VM9zafx+Lu/pWRmMwSmNFGlbJAgvjRt6rT3YT73JaTz/?= =?us-ascii?Q?uYw4okecCV5QZdeY+SHwNjKyB+G8rPVAPGaTUQYEx5J4ucifrhuZidDGO5GU?= =?us-ascii?Q?OSICO70W6AA9BQjMQsYjDf8YZkK7dbadgoVOArGmvlcJg36Xmq7wdQTeMRKY?= =?us-ascii?Q?5MZqcSGaa7YNic5ZWrQq/L0FOHJuPTTJqX9aiPol7F/PyTdrRn28BNaxFtav?= =?us-ascii?Q?4kHeq1MAN3dWuQ+YpuKIGuEbyjCCaXg3XcT/W9DT9O9LEYVnzg0BY4cR0uKv?= =?us-ascii?Q?RyQ9IJWQHGSW19by+cZXnj+9ed45f0xHdDuc7u3dZx917CQlLHYyzhgm57mj?= =?us-ascii?Q?RHXCoe0s9TkTW7+zm2Z4G7CzMS+c3NYeXN6YNOIySM3K0iOKtgBPvlBQQZqd?= =?us-ascii?Q?4GyqDUmbe5FFJyxeRid9/kZmvKCdsAH2hUND2SyijHdzxC/+vxL3USI+bvy1?= =?us-ascii?Q?bimcv/wWDCGsFORRonHH43hPcmyY1qaLKcPt5wOE7TCBJxqFmDz5Jil9Me6K?= =?us-ascii?Q?stpMAobCNskyP18BM6enUhvt9e/aALrosPtOxF219dIVsSnH4LyluzZyZ7fj?= =?us-ascii?Q?iQvE7rHejwLjubclmc1TFLG/v1UVxz6b?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TCzE4IQEv8z7TILvR7w2acsGkwtyUpJLMyNh/Wqhpbb/D3Y1jNP3HHf29HzZ?= =?us-ascii?Q?V6/TrLFHn9uxCbafnWlew7WfstugtoGby0pKdLo9CIikcuEmZOofjhVwYAWz?= =?us-ascii?Q?0xnG23ud88JEBTlAR/hogEdqLulltRA6r5Wxv/+G5oYIX056osoNAiK0D0ER?= =?us-ascii?Q?MFAy0Xr4FV0monTC93wqOYTNs25Oqh5Xb04StzpYZBFUbghQe2NyPf5I7p7U?= =?us-ascii?Q?mUXKRxOC0DzBwy618EHQ3gyWjY9QvZ2L7aqvQ8lHDTumHxTnGg7dYxrCqIv4?= =?us-ascii?Q?cXpQ10M1U3aSob4we/nt5s2EoIQe7lclGu+ZUesM783QNu8M6bVqT38no1B9?= =?us-ascii?Q?He7cWp5THiKvf6PcVYq5uiQKYOmHH9H2RjNaI2YKbaufkllWpQvy46qhoq9S?= =?us-ascii?Q?roq9K2Nhe8i9161MlAqfDo5qFHvWMcAJbj3UlCtlecIPK09cGj65tKtygKN9?= =?us-ascii?Q?mPOHhm9vxDTtMN02zSIRDb2uXdwIHKkFcz2JsSwWN2IxxYtH3lmuaxPw2fsb?= =?us-ascii?Q?ZF47chqE74y6+tN1at6k5NiRqXD3cDZxgAqIVaWkrq5+1JDZoR32jkMG3tM8?= =?us-ascii?Q?HTRrjnMnjeIjw8k0ovXFTMz+5SG3f0/JdCYbG2Z4gaYucuIyF33+ehCj7Bty?= =?us-ascii?Q?oRF0wWZyQUtkhx6tn4KVx3Ac7QQpLxVEmsgPFiEwOF64m/gNaHSxf+UVvyu7?= =?us-ascii?Q?nhOl9Z1CgaZmBHSb640GRd+8NAHtUENCR7iDcC+pDzXVJq4R5VybYQV7o+Yw?= =?us-ascii?Q?wxnOXGJw1TrMdk1V6GLILDlVmbTEOpUiS14ssrMBhGCwqhMFYKL++EwxDzy4?= =?us-ascii?Q?eowv94JcsCOB7xNqDwQ5YhqIxGRCFvbWr8hMcbjwXYwVKUe3Hg9q37WKt8u9?= =?us-ascii?Q?ijkPhCLQcdaOZxu0o6fchZwCzHtWHYYB+/ZDtkvorU97n225yti5bfY72uUK?= =?us-ascii?Q?I1mYmjoyxRXnDTNsLNLVEd2iE8btU1dJPfz43Ee/0GOac/8Ae5zDnfIozxRo?= =?us-ascii?Q?l25BPlWWrjMXKdzCVcTYGdtRjjsFPEdVF4VWLroHE35cjoEIQN9SPS+LRzkQ?= =?us-ascii?Q?ocBDXCaV+n3wM0o8YkAl2YZqfDrKnGSYJjlIdV7eXENHb0zwXda2f7ZwNZo7?= =?us-ascii?Q?RfnUNP4Te6Xe+z689ArWsedp7AsjPu9ZDoERPhvGakuqPYeYyPJIjtNzEpWE?= =?us-ascii?Q?j5d/cPafXTMvkUtaGTOs6z2sPxhjdhzZ1PxVPdym+OZr07g/V/lvQiwU2DAC?= =?us-ascii?Q?jOQrMkaZ8DdEuNdjfynzUWsDtWnuVBFBT5kq0hknWswxmPWNQLVmiDkPp2p4?= =?us-ascii?Q?2bxQjUnrDTo6kzk9suDlIFAqoz/vTw0X0Cy8GCrDLCPCGrSeIqRAwgRIzysI?= =?us-ascii?Q?GkqVecOybhdwVjFsMHbeXJYYX8rpSynPcRJcqZMbrbPYKenRoTyIGOHO8cMq?= =?us-ascii?Q?F6MvH3yqSkAeGVXoVRNS0bkC31XT9uT8PrbBA17AsEbhYlfDTq03vq26qZkw?= =?us-ascii?Q?0zuJxTzqGYG06Bva/63S9AqJja88WCRLSEeH/nIk4YL4agJ0slE1ky2rISLq?= =?us-ascii?Q?qirJrOd21azKN2TtxnnFYLZS56ilHM3K2Wa0ihElqdkHxbh86HYc3mLhfZA8?= =?us-ascii?Q?LVcloDpRoq0y0jsNEW3q+7E=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0b848c19-2894-4397-792c-08de3d7f4249 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:31.6140 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2cgrHeotYXTbPDtpiFU54i+YqoA87nMT3B45UosmgeROQ9vzpbLXvLKEuShFuhyh3nlh9aI+nfHyXF0yQU3xnQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Remote eDMA users may want to prepare descriptors on the remote side while the local side only needs completion notifications (no cookie-based accounting). Provide a lightweight per-channel notification callback infrastructure. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 32 ++++++++++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 4 ++++ include/linux/dma/edma.h | 22 ++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 09b10ad1f38a..8e262f61f02d 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -608,6 +608,13 @@ static void dw_edma_done_interrupt(struct dw_edma_chan= *chan) struct virt_dma_desc *vd; unsigned long flags; =20 + if (chan->notify_only) { + if (chan->notify_cb) + chan->notify_cb(&chan->vc.chan, chan->notify_cb_param); + /* no cookie on this side, just return */ + return; + } + spin_lock_irqsave(&chan->vc.lock, flags); vd =3D vchan_next_desc(&chan->vc); if (vd) { @@ -811,6 +818,9 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) chan->request =3D EDMA_REQ_NONE; chan->status =3D EDMA_ST_IDLE; chan->irq_mode =3D DW_EDMA_CH_IRQ_DEFAULT; + chan->notify_cb =3D NULL; + chan->notify_cb_param =3D NULL; + chan->notify_only =3D false; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) chan->ll_max =3D (chip->ll_region_wr[chan->id].sz / EDMA_LL_SZ); @@ -1171,6 +1181,28 @@ bool dw_edma_chan_ignore_irq(struct dma_chan *dchan) } EXPORT_SYMBOL_GPL(dw_edma_chan_ignore_irq); =20 +int dw_edma_chan_register_notify(struct dma_chan *dchan, + void (*cb)(struct dma_chan *chan, void *user), + void *user) +{ + struct dw_edma_chan *chan; + + if (!dchan || !dchan->device || + dchan->device->device_prep_slave_sg_config !=3D dw_edma_device_prep_s= lave_sg_config) + return -ENODEV; + + chan =3D dchan2dw_edma_chan(dchan); + if (!chan) + return -ENODEV; + + chan->notify_cb =3D cb; + chan->notify_cb_param =3D user; + chan->notify_only =3D !!cb; + + return dw_edma_chan_irq_config(dchan, DW_EDMA_CH_IRQ_LOCAL); +} +EXPORT_SYMBOL_GPL(dw_edma_chan_register_notify); + MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Synopsys DesignWare eDMA controller core driver"); MODULE_AUTHOR("Gustavo Pimentel "); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 11fe4532f0bf..f652d2e38843 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -84,6 +84,10 @@ struct dw_edma_chan { =20 enum dw_edma_ch_irq_mode irq_mode; =20 + void (*notify_cb)(struct dma_chan *chan, void *user); + void *notify_cb_param; + bool notify_only; + struct delayed_work poll_work; spinlock_t poll_lock; =20 diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 8c1b1d25fa44..4caf5cc5c368 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -95,6 +95,21 @@ int dw_edma_chan_irq_config(struct dma_chan *chan, */ bool dw_edma_chan_ignore_irq(struct dma_chan *chan); =20 +/** + * dw_edma_chan_register_notify - register local completion callback for a + * notification-only channel + * @chan: DMA channel obtained from dma_request_channel() + * @cb: callback invoked in hardirq context when LIE interrupt is raised + * @user: opaque pointer passed back to @cb + * + * Intended for channels where descriptors are prepared on the remote side= and + * the local side only wants completion notifications. This forces LOCAL m= ode + * so that the local side receives LIE interrupts. + */ +int dw_edma_chan_register_notify(struct dma_chan *chan, + void (*cb)(struct dma_chan *chan, void *user), + void *user); + #if IS_REACHABLE(CONFIG_PCIE_DW) /** * dw_edma_get_reg_window - get eDMA register base and size @@ -185,6 +200,13 @@ static inline bool dw_edma_chan_ignore_irq(struct dma_= chan *chan) { return false; } +static inline int dw_edma_chan_register_notify(struct dma_chan *chan, + void (*cb)(struct dma_chan *chan, + void *user), + void *user) +{ + return -ENODEV; +} #endif =20 #endif /* _DW_EDMA_H */ --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5C9B31A56B; Wed, 17 Dec 2025 15:17:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984662; cv=fail; b=ak/wYOlsWwwXwHBrAqdzCuy+83wVybcoAxGRLKkf3Hbf6UBrbFku2KWZv9+TlsqsBCiEfO0f1BJMNwgaPMB3WqVrz+toEtN/PozUOCzEkBKjB9ICf4AbcF1y3meFYSKMGC3JjpTtg6tHtwhXGnCsPT7nHrSobT7LkPTVhz2t3xw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984662; c=relaxed/simple; bh=pcMvzx+ypf03MqbD/g3qJhWZzoaKKlK3H/UYlz1XWHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QevF+coYCs6eYJAjUZguAMyLGDEJu/FfiVTcNXZgbpigIz5mtpWImKxJ3DDGt+v4VfrbNI1TZX7AUDJNnJr4k7Aq9Js+1rVYWfP69qzF5NN8cfbt80LW2ANTu67zl2Ao1idxE83fSgKVYrfgtfnKaNhE+yOqKba8NVmIfwh4KDY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=FpYbeuan; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="FpYbeuan" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fT/FtZUhis9OXA7SFMIcxPXuq6RRY6l5Eut99Vimhb3NUp+KdbCT5uWBwRlx82yirLG2xsYSmApbIPws7D0OWzL7gy82w/k+XoI7PDUNdA7c+tebg6tC9TfVHptrmDuauguA1Ayrz1y0loZquF8FlMQcG6nHUd7/lsyXncFmn2F/I7bG7j/DQoJeR07ByLVUPCV7YsaTng4xyBFyh4EemkhZxuWCgYets1+WRWKU7ZcCdYtn6AZa2ZK7eNEHsZRs9zmV7drRoLR2GkkrVHahxDF0BKuTWH4Y3UziAYzeuF2gIQKmyxjmVLu7A3LXMettFZkOqeg2XDr4TkBKVOAidQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=8Y0lLodyJucNadOovaGYXyFEz6UX4NrVKsR5R8tKTW4=; b=zHxPsAXfwc7l3n9azi03NQpD2tDwS/4KxEsWjfZ4FY6R6sZD6gdCY08WM3WzJfYkyw4ZTQ7Bue+nHpPBSjGP+hH+vqKqlBdSAPG5rBeUW3NxzLTeehhcGanJxPrHy4yfXDRgzx3/XeunFxdY1bhe3YDalLBNo91tqCgIEJSYNCexK+fzkEeTMG9Kw4KYbpua3N7hvlU1yoKzDRD551VBWawLw8NzFSV0D3EkFFGEmqhKhf1Zv+/jd6ERIzjzW+5FIvNkSfded5fDIqCs39GVeb7wFsFiRXWVmcylKJtUQ/YtLkiLp0oaxwNZh6zJE9MpSXFqoougnyvNMzyNmvM42A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8Y0lLodyJucNadOovaGYXyFEz6UX4NrVKsR5R8tKTW4=; b=FpYbeuan2twGH2i/RxeBU0lzFjKNKuCa2tp5XosvBx9jTVrganrdu7QACgpoexBF7sJvDKWiAL8JpM76ER3Ckr/lbcM5ZNvsjO6YZ54GivL0oqGgbqCcDAG67YK+TymVZc9m2ZSBhWNqJf3ypVskO758rN5uwAI8kmxIZbVCFkw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:32 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:32 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 21/35] dmaengine: dw-edma: Add a helper to retrieve LL (Linked List) region Date: Thu, 18 Dec 2025 00:15:55 +0900 Message-ID: <20251217151609.3162665-22-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0162.jpnprd01.prod.outlook.com (2603:1096:400:2b1::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 640e0a5f-0bfc-4c83-1f32-08de3d7f42cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MW7qLq2hrNTLj0ywH/dwFeSjYnhQnK+wP0NRAjtnGZrO4Ma9Brr4dsgYGPnE?= =?us-ascii?Q?UVNXjabi85wy2SZx8A8TmOxqIuZOPesmYwO3kMYYVY4xw5sH4fbxYgAxhNoG?= =?us-ascii?Q?/k5br4mWYXzOU2gZ5+57Wk0VW1XVXIhPn6OhZCQMlL2urSIreyiL3F4U+9HY?= =?us-ascii?Q?vurmTBPiNv7a9/uLk00Ssjew4NZDKOSG+pOJSQWNFZA+6V2RO4S1vbmdMmzY?= =?us-ascii?Q?Nxz8Spr4P+xh0IhjbzeiBvCsLlt6Pgkiql3nXBkqlKwpp6rVIeN2QqR8q323?= =?us-ascii?Q?tX1VpKbq2x7P1ry5bKLgXzTXozFqLzt95zMGFbNvF1l+zBMhJIhNLT6SOT06?= =?us-ascii?Q?izJkaHDw81ZwtS+qxanzLsbPYZ0niD0Zn4wdNCPncSGpbuqx2oc1MSkqN6/f?= =?us-ascii?Q?2SlaVgZrr54fNzGpoHabzUtAipEC39Fu2DqXQ0Vc+P6Y/5Rye37za/zlezYL?= =?us-ascii?Q?TMPvkw7He8PQkUsE6OapCeCUfA1JKYv1DZ5ej4mxeFYOueAQEXYiRxjHi0s7?= =?us-ascii?Q?eH5NzYkEp76hBwsQWQ4CYVzvM+YesCWSzzvAladdBttd9zXKASE65RbwzAlt?= =?us-ascii?Q?Dehwsop875iWsIAYfQNvET0d4RmnYyW55qGewe+jH3jT39NntrElovRPJU7N?= =?us-ascii?Q?jXdA31+PH0ZO35+dFb7ACMQAxWvwqkq4gGXlrMYB8I4RONevz5AgE9e2+6/o?= =?us-ascii?Q?PjhKYVFZmZFT67IiPpiSWSatCD7ErWtCf4+hXPgernxtxP2qotly20XBykOY?= =?us-ascii?Q?sdZM2xEmxd8wXDH7PymAOW+z5ixzNnF8RjrIxg1AzKGrcazcW+Aoekutaimp?= =?us-ascii?Q?9PlwesI2cEaiU+by6BZG3gxMCuyyW8uwch0bPjQIaF/+dymL7FeCT9wFaLwS?= =?us-ascii?Q?lXc21U+12Vm1nPDxroFaTXGtRcY2V+RTc9lqgCGXITyy/QYJ8PeypvyFMaGN?= =?us-ascii?Q?9gA8cszVO31BpTntkLWVFGTbF1824VOuZwy41oRv5OAJE4sbTYlT0KP8/+th?= =?us-ascii?Q?BzST7rT27UobXKMqVnVx42v930Iy8gqnggI0nmETb3jw8OpVypNUm2kVv87N?= =?us-ascii?Q?21gM1Yu2P3L3VpAz3grBJYURuDXkD2Hmnw3D9yLkyJIY5CBYkui6Jk+PBZpR?= =?us-ascii?Q?2hSYfRtvR5jToy/cKFqly1GyF7A5qjR6vS4KmmEhdpht0uyBtK3X+f0sJkVu?= =?us-ascii?Q?ffwXK02Xl7AfcA62xLCk/xFNbeLpDxJGOgvMAz/SDo/kNzInIvZ6WBYBdqIa?= =?us-ascii?Q?+BZmxELRNEiEQkj4uHeBVB2w0RNIS8h0hT+p3I4zxfYNhnrO1Yg8ZsCdFvsg?= =?us-ascii?Q?n3ctgvcUsoF3oFiXMiYujSnfFx2S90/jXvFe3zj6qyxq3B8Ol0n6ic6qnStV?= =?us-ascii?Q?iRxVTFIWrRbpfHXtbYqkGVd+H9j1Ah+X+fDPkOb5qWP/KmbcNkS7JI1xvhbe?= =?us-ascii?Q?ICrPyVvA8kA7C4jMFf8wF13PQ6q/0K5s?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FtKN8dz2dwKqsM0SmZklErhiJPH/7jKUW0sjCffYq5V8b4TTuRCoLgqhneHY?= =?us-ascii?Q?ruvq6B99uMbJuDkfy8oOAww5LRqM4t2E92aJUDSDkBq8799/na0vYaNLDMHv?= =?us-ascii?Q?uizOAYTB1PcKjh7jW54mAHPAhcopfCDzGTRjzwQXdv3RRUEHegVOT7zMTRNV?= =?us-ascii?Q?gcdqWIlXahXFDKo/5gNoX73Opt6xaNDGBqBhvWMcyyUMhWmV8RLyIvqM2YOa?= =?us-ascii?Q?iHcXxkd4aBL8wzD0jW8P0WMr/2l065dwoMS/g31JlqTTKV8l4P9ps0YY7MYd?= =?us-ascii?Q?L5PPZwwTCYtirVQrRytlSfK1t46v3bkfAr0fLI2kQLfKqNUvhKy3tFUEcDzw?= =?us-ascii?Q?hZcn+QAxPSoEeS/LLt2gW4ZhG+LBWS6QghbM8VxyzOtjyt3GuCB4NG0Bip1c?= =?us-ascii?Q?6L8yW9nsk+1vT1p1lDyjGMiN9wNp6shOT8nLfyhwPDH10KaLdoPCXBjjQv6R?= =?us-ascii?Q?KBvP6Q9GPhfs6PtOB26DPXRY8/CycVPc+NyS0yP/Eaf0YQa24xs2TrbKpWkG?= =?us-ascii?Q?nPeSa3iZeHwqMCpR0We7Fdqh1Kxa45Ag6NwgN6GWmNuDPpBJcoJV5UDmqNOg?= =?us-ascii?Q?u3qt0ZQfp1bymmUzbpT47n2Snkuig2kctvnvsxEZHic3gephiclyzLWq7HLg?= =?us-ascii?Q?mdwv9FBui0g+CCPt1GXls+iokQg+/wRw5hqFbm+spRwSngubR303urMqfsPh?= =?us-ascii?Q?kKq5cLMz2KLL5n5SDhqq8MjhtKPhrXtZAH2mlefI8rRWytCS+vaNLJIeh1H1?= =?us-ascii?Q?knYR4qA/+XOdcCvLeNUX0wWs9pfbtmsg6VGbvyNjcTqL0MUHCNtMUD6OPqiy?= =?us-ascii?Q?y9tA7hciE0B4HfbKSoiLvAh+pqNDkX+DwXDikiwx0m/YGtCoPNerkkYXGMDl?= =?us-ascii?Q?+yc75orHDqgPJGVcebXZaN98v37dKcRLjGusoVfRVQEUDFr/DdelkIif0c7G?= =?us-ascii?Q?O8GaNCwxUjIO2vqtB6GGDLDAzW/YIsP4lNqB/b4ZcIMU1FIioC0ct5hcfuza?= =?us-ascii?Q?m1/YaWngkZzi2Dwq5kNCtFODPA8rn6QGUH7uQMkx1rVj4yRHKil+Wz4L81q/?= =?us-ascii?Q?wpKDiTu+p0/r8lYk6NnQdajnRQqlv4rkUykrqhBzWT7JU7tK8KKNjqm+wEk3?= =?us-ascii?Q?0omgLEv1mA7ZoNdoiShCkBiCk4AQKnGV9VEt905a/A91en46jJi79l0Xvt2B?= =?us-ascii?Q?rM7tCOW90zqIaEj0DiInm5zuJokVYUD+pOrANyaLzMV5i2rjQY0IP/mhIDJs?= =?us-ascii?Q?OxRqfvo/8jSYQJadw2UPQl0TWggW6gYcVuEnTFQcVO1XJjHl8Lyz3aT2HS7y?= =?us-ascii?Q?EsaOncJjA3tVvJ4GbwlcH1K6e685OqYzF3NESLMwlndYwYIsCV2fOI+/8jX/?= =?us-ascii?Q?HnAkN78n7O+5x5FOZELHKjN4wcCJb99TmQOJQviY/8bQquH5r0Y5GR6Q6x9S?= =?us-ascii?Q?3kEMzWkq2xIbCgd+o/18/ARTV1457/pPsv0xV1YAixMkXu+APo0+RUoBht8j?= =?us-ascii?Q?FVDqh0afqn6QUQT18ddHb2eUo2hWSuHKNCqmBp6HgnUawx158wpELKyeSkZ8?= =?us-ascii?Q?ld0ouFhX4zYoZhSb51v4nRILJcJpktC8izu2FMCgfEjdvJhF/QpcQz/wPTpF?= =?us-ascii?Q?+or04S6ACe7XM12Rk5touUU=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 640e0a5f-0bfc-4c83-1f32-08de3d7f42cb X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:32.4810 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7+kQa4SoP83wi9Vb0MywI6p2r73U22a2EE7GsK80R8jKxYPd7YXcCWbriWK9J0XA3aULoXjPzOZ0CDSyAMsbYg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Remote eDMA users may want to know LL memory region addresses that were configured perhaps on boot time by SoC glue driver, so that those regions can later be exposed to the remote host side, who will run dw_edma_probe() to configure remote eDMA. Export a helper to query the LL region associated with a dma_chan. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 27 +++++++++++++++++++++++++++ include/linux/dma/edma.h | 14 ++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 8e262f61f02d..77f523f40038 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -1203,6 +1203,33 @@ int dw_edma_chan_register_notify(struct dma_chan *dc= han, } EXPORT_SYMBOL_GPL(dw_edma_chan_register_notify); =20 +int dw_edma_chan_get_ll_region(struct dma_chan *dchan, + struct dw_edma_region *region) +{ + struct dw_edma_chip *chip; + struct dw_edma_chan *chan; + + if (!dchan || !region || !dchan->device || + dchan->device->device_prep_slave_sg_config !=3D dw_edma_device_prep_s= lave_sg_config) + return -ENODEV; + + chan =3D dchan2dw_edma_chan(dchan); + if (!chan) + return -ENODEV; + + chip =3D chan->dw->chip; + if (!(chip->flags & DW_EDMA_CHIP_LOCAL)) + return -EINVAL; + + if (chan->dir =3D=3D EDMA_DIR_WRITE) + *region =3D chip->ll_region_wr[chan->id]; + else + *region =3D chip->ll_region_rd[chan->id]; + + return 0; +} +EXPORT_SYMBOL_GPL(dw_edma_chan_get_ll_region); + MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Synopsys DesignWare eDMA controller core driver"); MODULE_AUTHOR("Gustavo Pimentel "); diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 4caf5cc5c368..1f40e027fa56 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -110,6 +110,15 @@ int dw_edma_chan_register_notify(struct dma_chan *chan, void (*cb)(struct dma_chan *chan, void *user), void *user); =20 +/** + * dw_edma_chan_get_ll_region - get linked list (LL) memory for a dma_chan + * @chan: the target DMA channel + * @region: output parameter returning the corresponding LL region + */ +int dw_edma_chan_get_ll_region(struct dma_chan *chan, + struct dw_edma_region *region); + + #if IS_REACHABLE(CONFIG_PCIE_DW) /** * dw_edma_get_reg_window - get eDMA register base and size @@ -207,6 +216,11 @@ static inline int dw_edma_chan_register_notify(struct = dma_chan *chan, { return -ENODEV; } +static inline int dw_edma_chan_get_ll_region(struct dma_chan *chan, + struct dw_edma_region *region) +{ + return -EINVAL; +} #endif =20 #endif /* _DW_EDMA_H */ --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B86CC334C3C; Wed, 17 Dec 2025 15:17:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984664; cv=fail; b=nBSyTUpDT5mqfLrrnoTSbTpvN1lKbGBluluhNcA5wwx8TNrbMRRSN06ajhxz5f+wiOet3qiKyl1Pg94SjwLtednkge2RyEgP/HKoI6SVFFXNmYPTNVZUqW5+0BxicTQOcflTSAWDO+XNw7fGgbHVK1rlmg6/2aEOeBuAAb07B+Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984664; c=relaxed/simple; bh=DAEix9MDDCfrjOvRnRB1FL/9rVvY1942DyeRzPRmYBQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=I8OGy33uhOzlnrLalzK3hY6ogGIUruCFIxxCtdnOiDRBxwRcmKubuv3R6Wjak6SJ11tysdIkbKwtU1G9SmZ33myMQ4+O1dsUEuYBoDmNnTwuReboksw2ciJ4Z18j9omBTaGQsi/vFbn8KQFYgWaGMMv/uztPb3G0zahnQZ8eQAE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=N+zdelqE; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="N+zdelqE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gFA8Qoq4MoVhq6TMAptODA575I6ZuDweE8fgMheaJI7Fg0RJA8y9GJNBozErPy9t+9PcXG6QnpoS6eAn096P4XnJqQJh3DZjzHhpHV2PBvibSrSHOVCx/VPGZZKXbUSEG0viJVAuFYelaWfsWui+EOirLZclboOA4DenNGMN0Nrv8aiteEVku+y9R3ye/fu9VWPOb4V47xinmj4RjVd0oGKrYBCLiK4B12WRuT2MtFv4RNiXGGSntbf6MNgidKyXWBYfoQYQqn4bgwcxcRrHG+leJZcMCryw2sKe3LQT/hsnf/mervWs8mqCR+EAuLNpnnpkj8rhrOJeIkNRm3Eexw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=tUoju2dkZjW3upEzmalpCmz+unTj6bHhTmBwkFo8YzA=; b=uyc3lReUBh7jCcxj9ATJ49/W6/LlStbHiiY6UUxnn9uj61Mc7YZH5zVqvi0dwhwXjoe2M+OalTNk+7bIV0jV0ZBpR4aK+lRd2VJaik5iMAksqS8dcrbhFtMcltRrTg2K7QBgNq2Q/m6wRuUbfholja3mishmxn5uiDRp4FNOdBG/4ROzicWQrB4cEnDoz4gBDTyjTwdSc2xFKUOj1JawWQ07xC1ZGMK/70/HTD93QBIwTUFea/XG0yq0N2H0FhZ/hlBELbnIwg0zFhQOEKfj9UB404nWMBe5rI8cfDTj0hkZXgytQTUjPYWzQlq3EW8dk4bKCb2Eu4ifv9SdSw4VHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tUoju2dkZjW3upEzmalpCmz+unTj6bHhTmBwkFo8YzA=; b=N+zdelqE+JKLFLiuHZf1w/h5tLSMIor8v4hT6oEq84elJvR9Wlpt2Koldqbj2V9oQFhck+oGP1GWLPYlLuab2bTzG9ML5CeRN/fG0s7ed63PsVRikzTjJl3cK1eOXzrIvF5CtpQ7GCF37ooN6q4AH5MoAXH1Qo8WX5BNatnIVTg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:33 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:33 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 22/35] dmaengine: dw-edma: Serialize RMW on shared interrupt registers Date: Thu, 18 Dec 2025 00:15:56 +0900 Message-ID: <20251217151609.3162665-23-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0037.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::12) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 34da8626-ba19-4028-b25d-08de3d7f4345 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?e5d9zYJNxSwOV4HTW+sbHhYyyFUtFbcK6c+7O0VbPOVkfyoa4/Npcm+hru9u?= =?us-ascii?Q?yznfxqm5iPzPQQ2/O7B6JEKCnIH3rmwC8evZq16bzjc4BB/4CgvSZyGaUGrM?= =?us-ascii?Q?JhZmrDDwo6be6PW43VCWEqqWSB8wRFx4LWYaD6B1KPLyaqhTxsy4lNm/3bh9?= =?us-ascii?Q?nRuGsu/0LRto9zhUYkZSnKP9BrfFC+XAHA7esYqF9xAekAK/sZafBUpcW5bX?= =?us-ascii?Q?T6SlBdCuNtg+pKPtxhrY+kJkDMrwGKGbVnbWzlVziyd6Oy0VlcowUTQNTMG5?= =?us-ascii?Q?K7/mmbOKvt1VV9iKWUcp0X1YpXllXT/tv9wqlPipgAAJv27dgbZ7BFhASZXB?= =?us-ascii?Q?Mm4XTlhIKRNXtX7gb3xJxqPEu6m33t718yJ/CiyENySkY5Wh4ji1V5MxY5ei?= =?us-ascii?Q?LRTwZnkevNX6w2nKO0L5S4CFFp8lvCa/YugVpLeo03a0Svyeq8rwed0+zGMv?= =?us-ascii?Q?TyRhdA7XJiEM6eC86oJa6lE3TQJI/h8Ussd6NoDmFuLeWCWnWJB2TMwmX8RV?= =?us-ascii?Q?OWQaGm6qXHpmy0s3OkPTPYQm8KcrCRsFeDUBL8AaWQPoVKG+t288ppJuyWgs?= =?us-ascii?Q?ULeQ4o4DaJfpdDA1SnxKgqaFGDuQ8ae+XNgeE8IGZxqZzqx8Zc48DQU9Yn1Z?= =?us-ascii?Q?poFaPnj8i5FuTNfHp0CAWveBpSlOn3j8FnUKVfexYG+axxUMoaqQbXEkiegz?= =?us-ascii?Q?pGsXK110ZqgCS+gKlMqnxuTx2hYpoQ7X4qddL1FUidKm4cHbZGvG2b/sVDe5?= =?us-ascii?Q?89KN2phDFhKtRPCdld/e2MrdirkHKQPcbK1upaIzjfA7xQkte52+MMP0KwhR?= =?us-ascii?Q?R0TkwwTAhznfChIFlUXu+fDto27SN7wzcOb1cBPg2tphDA+Xc4/2HCmge/mC?= =?us-ascii?Q?vpAwvaD+3UQyquRb/ffvAHnBhQl10eFLJeKsISMMqi0lzWpRT2rkQ3Pzq0Zl?= =?us-ascii?Q?GlpmvoRgd8uyLczgpM078JM4Lz+SINHyhqzzLwlCtSv6bLcvmNU84HtDVlit?= =?us-ascii?Q?F7uR6nxIzqBmO5+dpTmJQs5ruDGRz1IGk0SURiqZ8GTCu/oslD3CNn0feQB9?= =?us-ascii?Q?Bsublw/7mIgFFv10SDnm3aq7RezFy5ZymJvQRGbes8pJt+RMuhAAbaGUKmU3?= =?us-ascii?Q?ryjcbrmQZC57IVzj5GP/Q1Yz0A+bydpaD0fBoc2Pmupj8BFdzS4Jr6pdZqAf?= =?us-ascii?Q?qoioFFmqxubH6qMz+AuOY1etFFn9CHVAqjChtdz5RmaJc3pr+iPKtPum1MLF?= =?us-ascii?Q?ZrLBN7w4u7fdgVFpzulWNI7JZx8XamTQB2OZBQEJkVSffg5/I3+RSZCnMwnr?= =?us-ascii?Q?KQvQHr2Ev9NBZoV6fWUrwzis/cDVAqrflGLFxMC0VXyeQ8EXHNjvVecOy5kx?= =?us-ascii?Q?RVSQaCATrnc7ZzpTY+1H/vvPhzKYqt5PTl0JT3QfapPS6Fj8GgY94LBw5SSc?= =?us-ascii?Q?7vjpjKgAfccX8YxOePwA1TMpDyz/jaJe?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Afkc8KjcGqfGzqWjMgS84LMztR7w4NpxBek0a8TcNUyKTfwLhDD7SXh6mwVJ?= =?us-ascii?Q?Al5YdKB5qHknsBinhvAgE0D+U9r36g5hLj0ggHSLI09V09D1cx1MtuFUutcr?= =?us-ascii?Q?44CkGTHOI5UhtotHhOfxlakLR1VLNSoyGSnotPa3IRU5uC/aBTturJxPyNYm?= =?us-ascii?Q?vvAJPCU4K/CBXlhFxtsMiGQHQZAgzB2JlDOaPkrU4WTLksdLJ+M6K9b0OxZq?= =?us-ascii?Q?sYsxjpPtCPi9dH1by6G+az4ZYqkgNG8h9EjraRT1gXKpJ8q4ROk6tynmU/DV?= =?us-ascii?Q?MptPDlM4xXJw7zpAODyGNwKooD6Y6N9B+iunjQWS2ietBDTbJ8jWIeTFYDA4?= =?us-ascii?Q?sTKYEvV68VA40HqMCISB3P+2Vr0nLYyvQm23EKXMrdeJ1yR1o6VDGhWzchrO?= =?us-ascii?Q?MCbcA/WU3Q/6NNaNNtKi3V3ZEAqeDPZzB2zSRTfl2D3TtMMuDhs9aFYoB/m5?= =?us-ascii?Q?BI46HCJcrmhE+I7tnnaf1O5eJiea5cBoWS/d6MCIDbDIzPsZsok3/XQoIIz4?= =?us-ascii?Q?yMSbkwjK8E56UXL0ZoroOKxkT1RNGwzK87BIR46SasMHuImKWYz2gZpylOFG?= =?us-ascii?Q?g8kexvwRbmtDLv6KVuA6oqf0tP9wUl1EkRGdYmcvrGzIXBYLqYYSjMxiJhOl?= =?us-ascii?Q?VxQtyBvD4VZQu5NkY+ActBK/ZLK47h3ROv1sJtMXjHSg9EsLYA2Mim2AlivK?= =?us-ascii?Q?JZvncHNGlcGfjBsTG/iqK0RoCbiOn97q0VWYtBmD57rRKV27BPXfw0Egfq+U?= =?us-ascii?Q?gxc7TGBCkNBTWSY5MNtd7iwOvtY1sjhNfXyE1SrczuWSmgREMs0va4HHLbuB?= =?us-ascii?Q?QxvvmWGlLzYnmhv/Df3OzYRGDxoh1ixD3bPSS3QJU/MBLXR37EJ1eoEhzJJc?= =?us-ascii?Q?z6MP49oBXGlpBk5RmzFBIr3h+4pEZwQjDC4kGsECDzp7VyrXnBTyH74Y/amO?= =?us-ascii?Q?hy5N9wBhlfFK/QZJKIS/a0zf2xThG1kl/VvQ0bXItMvOP/hF6Q33iKN7HWjw?= =?us-ascii?Q?gKK6gUFW3LJbOTEoTf9oNnr06uZiS77FskzAxaO5gPWmvwxlpHBi4FMNIRqQ?= =?us-ascii?Q?wIItubRCu6x7FEkUW2RDq3ewmyUkg5nW9UQvkg8epkv0LaaWNujqmDCYuHdm?= =?us-ascii?Q?UYikUFScqvlxIR/29hirtqvyNr6IvBhgzwYCtL9MUEilievCHJteU4Yfj2rM?= =?us-ascii?Q?hN1yXkak2tj6Bg5jiwjbSucgFjz36kP2NrSEsZovT2SnII6z5OW+22Jtkwpy?= =?us-ascii?Q?OqXwMshAtuS9XJI1SNdUptVUWF7AuK7TR+IMQAAO3k4hS1Hs59deoltq14mv?= =?us-ascii?Q?iGvEB/n4pMzGLczCd5QEqUdZqMBhCwB7ISVqH3h7gX3o4BBCv8+Uz6FP6brg?= =?us-ascii?Q?1hCi/hX/E1qitVnbrPptPV5iN40fVEBjuyvnlgBk1jVzFpAtPJt0MAyvqv5n?= =?us-ascii?Q?snV4NidADwi1wqsmjGVjRYSn2Su91uVkynMfPag34xPgm+RYNj2iAGbkEqE0?= =?us-ascii?Q?/HTha4YNmfyEL4Fw+4VEsZPS9BKzgfrFuSvgO9V+LU99++EUJMVneBdXAKXv?= =?us-ascii?Q?3Nd35DK9VyHeneqNq4wserG5uGWchoFK1gscNejhlwUB60vV5KN061Jf/e+Q?= =?us-ascii?Q?LEp5xp0Po/XyC2fkFLqqmSY=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 34da8626-ba19-4028-b25d-08de3d7f4345 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:33.2599 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: laA8zGsySCfMmyY/45k+plZwxPHyywrdl9V7G1SkQI/d5XdeVUnzHMcP7EfmT0qGVlbNZov4XbUmwWdM3zUGBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" The per-direction int_mask and linked_list_err_en registers are shared between all channels. Updating them requires a read-modify-write sequence, which can lose concurrent updates when multiple channels are started in parallel. This may leave interrupts masked and stall transfers under high load. Protect the RMW sequences with dw->lock. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.h | 3 ++- drivers/dma/dw-edma/dw-edma-v0-core.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index f652d2e38843..d393976a8bfc 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -118,7 +118,8 @@ struct dw_edma { =20 struct dw_edma_chan *chan; =20 - raw_spinlock_t lock; /* Only for legacy */ + /* For legacy + shared regs RMW among channels */ + raw_spinlock_t lock; =20 struct dw_edma_chip *chip; =20 diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 42a254eb9379..770b011ba3e4 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -369,7 +369,8 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk = *chunk, bool first) { struct dw_edma_chan *chan =3D chunk->chan; struct dw_edma *dw =3D chan->dw; - u32 tmp; + unsigned long flags; + u32 tmp, orig; =20 dw_edma_v0_core_write_chunk(chunk); =20 @@ -413,7 +414,9 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk = *chunk, bool first) } } /* Interrupt mask/unmask - done, abort */ + raw_spin_lock_irqsave(&dw->lock, flags); tmp =3D GET_RW_32(dw, chan->dir, int_mask); + orig =3D tmp; if (chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE) { tmp |=3D FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); tmp |=3D FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); @@ -421,11 +424,15 @@ static void dw_edma_v0_core_start(struct dw_edma_chun= k *chunk, bool first) tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); } - SET_RW_32(dw, chan->dir, int_mask, tmp); + if (tmp !=3D orig) + SET_RW_32(dw, chan->dir, int_mask, tmp); /* Linked list error */ tmp =3D GET_RW_32(dw, chan->dir, linked_list_err_en); + orig =3D tmp; tmp |=3D FIELD_PREP(EDMA_V0_LINKED_LIST_ERR_MASK, BIT(chan->id)); - SET_RW_32(dw, chan->dir, linked_list_err_en, tmp); + if (tmp !=3D orig) + SET_RW_32(dw, chan->dir, linked_list_err_en, tmp); + raw_spin_unlock_irqrestore(&dw->lock, flags); /* Channel control */ SET_CH_32(dw, chan->dir, chan->id, ch_control1, (DW_EDMA_V0_CCS | DW_EDMA_V0_LLE)); --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C27FD35CBB2; Wed, 17 Dec 2025 15:17:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984666; cv=fail; b=M8MtI16LYm3BtP6oRADIvjQUpeJJrDFPRexwcjRMr74HQHmNq/lurjqyPZvGfc4BblohM6RhfVFF/ulceDiaGGwZQqAX/87MflUs6lwFlTpeOR1fe9jnAXI8XQscBeZOO6CakGMCTcg5aSE9x7+yA6Kl+Y2jzPfClvbAb1108Yw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984666; c=relaxed/simple; bh=CuXA6CLx+C40qYVXl0sQLb+ak9zreWm8g+SfaoP5aS0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gSqooDnxRQs2FrqnDgOfrGEcSfQajouhNWHjLuSc+yEyNIegXxSVbDhev3QFPtwQE+ws9YUQw6DgLw0+RQGbdq2cP7WzwmMtUZzp9aScbrK+4++3DxCzQOWfVR1SWO+gjv1puJuiBnJ31XoBrenrE/awI2Z5u7zmsBxSWaYWvI4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=MY+v1sWK; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="MY+v1sWK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DYXjbgxBJUohAo40vBiy2dlAiNSkW6UnK/FtwXe6Ipo30aGkLWWp5wUE4SyQs82KcR5L2v0Jt+V7McbIB24ymYFk3NkELLB9uGTY0kKhZ7Y6VzKAaN/TPZspdYNXA5vnqgrGwUaOp3dKNrNyTeOrNU62Yfzw63H9o+SZ0UHXAJ+W95O4lMLJu4NmGRXTJP4AddAMb3+LZKjbw42bLH77uf2z0EYwuKj/c9LjYalDOBvaLeBoDVtLoB4jc42y4qGKd4JpjjTZJLGuGCqbtSJMTzL50frYjhzNxwAa+kswx8RdupNPf+HACMynMJEbagMZL6feD996xqY9vS+6myjSAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=rK4aS01haA71dFOZIC7AYLdaEBAEIhMDlQ8qU787w9k=; b=UZH3yB+WIyC/0TQxwMlaC1zdLiWvE6tmm8f8YZZm64jv8I+H9mcS+NZVWTHl1/umSZlPxiftQGgskcFCWr81zh3cVW8TkMM1abI4tvSIFb2jeNAQHZuKywLcYod0yBp9EnLDoPpyK9XUDKw0GklArrz+rYqFpZrBHTyAjhksBnB02SSIe6RG/ZGg0ODc8oDhxLR6srQbdc4hJLtYYtq6G3rVEKKffjWSousG/3bYAgiN2b8HjUHrzHYrqHWDSpV32/rYXN6iz+53EXhIyV7RAIIQitQbZGMH3T0d3ZPX9/xSeNh6Ex+WPfDwSvb+BWHI1WDDHPFR9AqCKpCtGV9DYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rK4aS01haA71dFOZIC7AYLdaEBAEIhMDlQ8qU787w9k=; b=MY+v1sWKqsjFCLf/JZ64+CuBE5cHLugAQG0kL/A1N4Fja1MCPS0FnbICeph2mlqe0Ga7b9/zrIdIFxsK4WX2GliMghnqki5UuPOoMMSKchdv1OaScPepnZGuIKBli/P5HVWcUnBSPOYO93c22NzPeohyjXSmb+0Yxx7wVTqJ+F8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:34 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:34 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 23/35] NTB: ntb_transport: Split core into ntb_transport_core.c Date: Thu, 18 Dec 2025 00:15:57 +0900 Message-ID: <20251217151609.3162665-24-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0076.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::10) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f11b204-cfea-418c-0ff6-08de3d7f43f1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ntOvK35RQbWAQklYOCr1JmX37kZ9gC+LZyXaDnRYu8yjOpaW2NT4oqv4vvVt?= =?us-ascii?Q?H6x4ZB29Xm5F2maPTyJehDLp5v1To6LDAXN3WMvsALYYBLVt5ec3KTUZodJO?= =?us-ascii?Q?X981NM1EtKbnVSubDUQvd5oR92whgzhTCl8WOc8B++ukxzy7ggbbqXpP0O/U?= =?us-ascii?Q?4npzlmnLw2fePchbQgyoS3bpSAQau2d7/O5tyRsxzPa67DvYSn7ZNm+Ld9gx?= =?us-ascii?Q?XjiMA9mWa7aQnhLHPJ1wBj2NSVL8Dk7JRGGBA7D50mCGNYU1pHfHXxvIjdUu?= =?us-ascii?Q?leG3ixsv8CKZMkuU1qlWZ94N63u64Anuxy6nrB27H9sA3D4ITs+q9HDRdSgM?= =?us-ascii?Q?jmhqiHMKjfKfe/9SYe7jtVjQdGG4CSJxDlEUJn/JuiwArmnHtNF/+k39v6Di?= =?us-ascii?Q?5Q1yl+wgqWbQmu9zdx8DRS47NCI1jcF0E/nnSlSCPiKCmV9P+jhuxOj3DSEJ?= =?us-ascii?Q?X9dINw47bAxMmF17s2+1DoJ3MRo3qLlAlyrwwu0grYjhffM2GB+5VOL0BFKr?= =?us-ascii?Q?YC5mLsYhDVSglM9H45czkrAgu6FjzarWPi/mSvc4PZy97BtohCyoMKpli7Dz?= =?us-ascii?Q?cnYT02rWHLuCdzdQGNjwX/9HJ+cLNLrImwBSl5+RYlEJjy0MjK9brkd/9GfR?= =?us-ascii?Q?SkHzZ7shQMzyUSffZoIWF7Z65xyNO2/dW3NH0faUyW9KwINHfmX2M0EfQqqn?= =?us-ascii?Q?gRykxRUDyms1E9rIB6zKJRzDrb4GvklOZ5SbM6K2BLe5cJjN+nKixyw2QerS?= =?us-ascii?Q?3TWpow+/Oh59IpuCcCAADu1MQ+EdasQddJ2JKB3kuIJzJ9GHXaVxz7fVk4DX?= =?us-ascii?Q?j132Bz2/PvR/YRksn1SyyFj5th3uEJVE2vcpRcJLRuFXczJPp4yISzjqLi2E?= =?us-ascii?Q?z531+ljyou4DUg8937b3H1Wgi7kHa2uilcCRN3aKTOXsZCkHWxCBmeTM79C9?= =?us-ascii?Q?+VLgI0284uw/Z1NGb1ZI3L/ufqIJtUU+AzeD4swiQ8YZdJ4ZlH+7eFQStpYG?= =?us-ascii?Q?ZcI3d/V6GmDUTH8pfIzRQkayxDLxfgxQawFmTtI89qH8mM+ikwJe9+YfrM1i?= =?us-ascii?Q?nlyt6TvyZrfTycPKHfKk96xFuxC8VGs3BU5kKKrWMspA9ZV7UcOrLn9S/1RD?= =?us-ascii?Q?wtKuVpuCs0WPg/HR6a8RkNpRgSlwL0mQu4Mv0UjCAq31B7P9FWsyir9gEYVa?= =?us-ascii?Q?oblncrUUjnSCCijHnpxEZf2zd9nQPuKBSys4rOvPszos+gzpIkpzDQ3bKo2j?= =?us-ascii?Q?s7XaRy+v96AXEHMrnJWCJJUetDORrRdbRLEkZCgkGfyyp2kZAz/uzJIMhYrb?= =?us-ascii?Q?IdCJgmlpC2UEx+KF8RMhgixWBuG5GU4tD+0dgqLijErjB6sfB+OZVG8TrUzy?= =?us-ascii?Q?zgM6G35e/R6pV0qLbP59g7JL6aJDzmIwlqBOVKzQYn8dbYHU26Eq3kknXVaJ?= =?us-ascii?Q?ibIrkOlunnEl1C0lPKd+FMeQTye5+6+P?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rKFYMD/vJMihz7qpdrdWtDpo8GXwKaMHVRwAF6LRLG54yZbtF8sbpcNw7hvD?= =?us-ascii?Q?rX3sTpGuUNZPmTPgsDmYE82zS+ROBPdG1R796UXARGjycOwYmAtSq1M6pE2v?= =?us-ascii?Q?tZdtrq9sCsfclTehPo43udr73JVTzodeeBCFx/2jj2TRakrpK2lM+4mtPOY0?= =?us-ascii?Q?/Bq6eChXu9VNaBF3+BdLGGxfJLlrcsWhFzrI0Lha9w0YHAVXCf7XXIshSGhW?= =?us-ascii?Q?h9cf4+SMHOqVgcVMyagV47lstflUCRS0suq/MoIIcxboHTKZRp5g1+s94l6s?= =?us-ascii?Q?VIY5+2QhoWOwQyKTvMfqoUCc+1zRkhka8JbUTZRpxpqxi+HeTlwmq8xfkBbc?= =?us-ascii?Q?CwP2W6RJA9JPPO1xvkYe27wh35IhkG5BaCevwIkwJMnyG/TgCrVSUUHUY6hS?= =?us-ascii?Q?T5zJjApk57r8kMBkZsrj2a6b2aYMWhUpzHPF7e5UxWz2cLvkAGAuL371wm2R?= =?us-ascii?Q?cYZMIcfd3fs4pECt3utcb5KDfH0p/Ky2gOGvq/ckRnUR2WPYw+yv5kcOF8KS?= =?us-ascii?Q?KI7pA52eDtTPJeOleGwgf4SH132xEWbWPxkULnWh3H9AC4E9Y19IKu6e+vKj?= =?us-ascii?Q?TEYwRhXV/rJy75WcH2EFmcM5I0yNDba37Wz+X4wYq01HtQts7E6XNqstcHrj?= =?us-ascii?Q?qBwlpDE5/kVptE8QUUwYpfhL14qql3t2kEuFUKLD+cUJ6RGNtLL9ABeOa7Qg?= =?us-ascii?Q?Okh/qbMwXh7osIzd+VZhnEKjBPny3eer8LYBeOEk0m3kPK2Teyf3MdEBEAnc?= =?us-ascii?Q?2t+Ojv7WLO91RjNNE4r/GAiggpm8msHDJzBeepd8fwV9C7TpH2+JWYB1vQio?= =?us-ascii?Q?dlYbhPZUzDZW8pojiPJqQYdtxB1h44+9XZh9BpznDM3kh8HgWJ3ADNkrRXZM?= =?us-ascii?Q?wjxRpdMbv2JAtFAiM4OHrXXn0mpEVGhubhHjw/iFUj2+CJhremQXbKj4l6xC?= =?us-ascii?Q?TEjrHSmEnKLe3U3ClI38ShZwk0+adIK2sdyTVcyZyBbQqT2W8LrzZHt+Ervf?= =?us-ascii?Q?QjbriuPprhPL3Mgf64lKkxrNIn6WokFZEQ1kT5IwLTuLQlBdFHh/9gcX0mbP?= =?us-ascii?Q?QOzbIa/ElLe5a2/oikcWLKVdTq0CnYry1t/hmn7cJsYbDKTaa/CzJzdjPD/j?= =?us-ascii?Q?19p92kIBvj0GNpJfDHg3Tfwd++LleoyguWVKshnTBHvgNDCZU0Xtt40otzi5?= =?us-ascii?Q?+14sWwLyCg2b1vlSliQaBoYD4szg67kTXRnqMH+PmRXsFcEE6SzS3pvpA10L?= =?us-ascii?Q?2RHOO0ZfM4VQoS5EknDyjgsKnAUxG6JNXGkzifJRsz9m03kDkT+x218iLFnr?= =?us-ascii?Q?sfcbrHf3EilNYQr4kKhkJX8+eTqWcYhNTbM09M9pGw8N9wiuse8OKGw+Gqdg?= =?us-ascii?Q?jsF9hLT8vKTD9jYI2HD4fLdNaoigN9W/JVh4zSO6Aes6+9vCOp86ZPlSylcA?= =?us-ascii?Q?f21WqteXXphWRnf5gr7YIUacOjoNpokZ8xHgo/hXW91erl4K9Wlnfwa5EobC?= =?us-ascii?Q?/hP9eWIxCubP0oKwF1vr5UggIE9RcN19BiFVIEh+59CGkOEyb5GHGsqRHkfW?= =?us-ascii?Q?nBukxaZnDpvVtDh4v66jyAO/SJ5jL2A2SgqaNwnX2lRUbdtDuJ1aPYOevAIe?= =?us-ascii?Q?WUMXrBto4yJ7GV1//VDZZy8=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6f11b204-cfea-418c-0ff6-08de3d7f43f1 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:34.3847 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EcNSbd/T7rlgkAmeIKYIxskb2BteapPV2fel+I9qyoIufVZu7nF+DFX43HwyiBNki9bFLBKmOpt7ZHM/1jTIJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Prepare ntb_transport for alternative backend by renaming the current implementation to ntb_transport_core.c and switching the module build to ntb_transport-y. No functional change. Signed-off-by: Koichiro Den --- drivers/ntb/Makefile | 2 ++ drivers/ntb/{ntb_transport.c =3D> ntb_transport_core.c} | 0 2 files changed, 2 insertions(+) rename drivers/ntb/{ntb_transport.c =3D> ntb_transport_core.c} (100%) diff --git a/drivers/ntb/Makefile b/drivers/ntb/Makefile index 3a6fa181ff99..9b66e5fafbc0 100644 --- a/drivers/ntb/Makefile +++ b/drivers/ntb/Makefile @@ -4,3 +4,5 @@ obj-$(CONFIG_NTB_TRANSPORT) +=3D ntb_transport.o =20 ntb-y :=3D core.o ntb-$(CONFIG_NTB_MSI) +=3D msi.o + +ntb_transport-y :=3D ntb_transport_core.o diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport_core.c similarity index 100% rename from drivers/ntb/ntb_transport.c rename to drivers/ntb/ntb_transport_core.c --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010014.outbound.protection.outlook.com [52.101.229.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6B3C2BE7B1; Wed, 17 Dec 2025 16:50:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990257; cv=fail; b=F5dN8JMDk04d/XrJH2xgzjqmt8aDhISFdHw6ySLb2dj3aaUcxK+sHflfMj9IVjGkTeldghqMt0ouaKtSp5vXFvKfJllhDOD7IvnapVhDK6usVJZr6PdStwnWBdDUou/zsAWQaMJAGcntdYs45qTfa8GUzRUelVr7T4zU3rnM9Ws= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990257; c=relaxed/simple; bh=hsgWHebgbZ7qaNTh7eWfnVKFa5C3pnSOqRVD7sIEvLU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=i1O87xso8RkMIJYAV/hnwJPbOsjflNZ0DTFN/lgsNXYejFCj7ZRe6QjjvkG56YFaJclqlubxu4NI+Ouxj/U0CHjIypdRVkvYvoFFOqb3HNJjbFR4/eUKyqaF7aN7dgS50YoAlpGAySiVzTxaNX1PhO2rTgrmzGkgrKgD2CUVmXo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=ZlKLYduP; arc=fail smtp.client-ip=52.101.229.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="ZlKLYduP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V8KmA8tOU2e3DjUBYKT6FaCzYSrLUNJ0txQqNId5rdCTr9xiUw6BrgGLWoRBg3iEr3Ic9FW19WRJhfhwLMtC3jxSD+bIrdnJuVO8Asmhbvapt5U/RQ3i56+Zia5fa4Pg1YkjkH+pe7yK44SZ6IgZHL9F5s7Pf0BjcoREk2JHCsqs/v1vkzeGLkNcVysJkb12MvyPh3/f6qWw2BL0/2Ex8gB4DOlGYtWOZIGc1ppVheR839AUpNVlDoKbx3OQk4GJesl7mSq/KnOEQS9/XJOzsuAONvAZuy6fL8UIcYa966abxS2qJsoeuJ1438Dr/MsC4WR4hIIcvAckm4/O6NRSpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=sIxR6FHb6BD3dwk32/h4Ah/ip1PqsRaKSxFcTmP4GPI=; b=ZSXvuWpuMvgn8s3Ap3EO3HhjlOPGdNPwXlOJ32ZguAHvWDkH9Ec9lsq8wRqExNjv+fCN56dRLwoSNYXHAnvrpGw9UPZo+kLbB8eh+2kq6f+5U2slOUP8L1CKZq0QSgvVzP9lsD5JS8vHEGIOqrT/RRseEB2NEW5U1rvDWBRPjI1Vg8dwN16oS8ZC+yqb2JHExcKp439QQUiCuqkB2SNHI1L0aQmAySIhKuY5SOa9kX6RQ8ji7emC08oRV3X192guGpIQVtBOtdLd4GfDLYZD9TsqOx4V3ES+GPJ1dOdX4miXfhBLi/hDxWfK2bejjkf2f/8vF4UR0BuxlYrfvLQHxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sIxR6FHb6BD3dwk32/h4Ah/ip1PqsRaKSxFcTmP4GPI=; b=ZlKLYduPfTWFKfzJ04KJcl55IsD6MjFEaD6XXP67URWyRUg+62jVtQKbvHwP70nYjeIdyZyYH1gp2l8H9WcR1Bw8J5GM05fWLpSWnIjBA0j9W5niwMzPNjJtG2vGhFV9vRZRzNdzPyA+7fHV3i3a7ifTWXkcotd+VYvDQM/Alm4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:35 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:35 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 24/35] NTB: ntb_transport: Add additional hooks for DW eDMA backend Date: Thu, 18 Dec 2025 00:15:58 +0900 Message-ID: <20251217151609.3162665-25-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0295.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c8::10) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0bd2cec7-1526-43f4-e6cc-08de3d7f44a3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v8u+jxhTgvZfXg7xWwkC7bAcpGX/RRw2iZL29BPKWYfNYeaON4fJVdzKj7so?= =?us-ascii?Q?hXHuyFn7fi4HQlnSqfpWeryZAP6wecfJglulXznvZfSwT0njiUUhgmYQgU6W?= =?us-ascii?Q?7eoPOdZWMRedQtTv9pmg48b3Zht5W6qxfDLgVDJHmJKTha4bqsXDcYjemT7H?= =?us-ascii?Q?TegcRpJhltOvC9s8d1CUF+4XIV8xbWRXyUhv6nCt8UJ5WtxNkfIJlA3KVNrE?= =?us-ascii?Q?NPoC31NsGw0xjxuz6xakpDPWQhb/QW6xq7bRA3dhfQaFFs1arpY4HmCacJm+?= =?us-ascii?Q?pHSi5xiicMVpol0whkZKxdidDtVbFDZd2qedGcrhGYM8OcG6G5YRXNjOeJc6?= =?us-ascii?Q?DuoJ1kjPr5frww7Dqw96ePX/mk5RvYqzs+ZULdHeAatQAs2JbJRw7qrv9ASF?= =?us-ascii?Q?ZX+LGTbwqeYV65vekR7ktZb5dVFXdrHyAsGHmDgK6vrxjzwLuZ6+XvsYQorN?= =?us-ascii?Q?bo41faqB8wAKAXmuQ3yp5+ONUx3QmWNxSphyaoR8R9/jPgwf77K0KQm/Uo6T?= =?us-ascii?Q?bSNMvZYFvEDud+KyW6e9L6QnyGVxBGuZe9D8FkWCJHAb5zlNOTexxKNnTWrJ?= =?us-ascii?Q?c30c/QyDpkWqB5KNPiJq8E5tC9Ew2aWHZS9q6Lq+zuQe5gf4HLqFvyS58bsj?= =?us-ascii?Q?oV8BudyxTzyAcvq8uwmt7SXNojeqKBKyvkkOKZzAEZEBWu/d2aH62PBQ552G?= =?us-ascii?Q?tU4D1K8h7wwsM0DfkUoojleuU/imo7+hbNNJcdoyUxBQY8Fcrggxs2DOsusp?= =?us-ascii?Q?KW4bC4l0BI5r7TLrJlfrQOATwvYaM/ea79N4zKz7o5QG/oxA0UrrkRyKLYL2?= =?us-ascii?Q?nBTKEIdIDJVqJiRsl5QH3rUN2NfWPXWUv0S1zuIuHVCnPVVspakOIDXJ8lQi?= =?us-ascii?Q?pAm+vWBwL6HXozm50Opnk0eROTD8Sn4HB7aT+bLW973w52EZ9tbV06X0T1KQ?= =?us-ascii?Q?tznL3U5fxa/G5TgIa28rKHRTu3SLePcu7+l0F5QzwDNhvLLEREqEA213m7sP?= =?us-ascii?Q?YSQfMuGR9gYEcvF33JlQ+5rcY3xZf4Wfu55Pk0WYy+rpISVdf6m2E662IimW?= =?us-ascii?Q?GP3BUiPXM5tXijFWl7wfLg2Uq7jSNMsNh96CviCvucjfJesIPt9WIPu3qv+L?= =?us-ascii?Q?NdM8rL1+H/SkA9rFAvWbTnAElkNGsvr5W96ZSwlH+wT55cr4a/hCmcyAy9dj?= =?us-ascii?Q?NUFMUbZJ7GXZIn8HHSTCrTpenCT9u4IwYr7V3DHJPS6nNdn9iKu6pUrQhyGa?= =?us-ascii?Q?/6tDYWdgslKHW9UY/pqScq469dVTgiinL7KgPwCnG6MxtRtKufOWlVjUCySf?= =?us-ascii?Q?wBJzmb4gzP7dgoySLaPDVvc40PGKmVXA7mTn0Gt0SdKLuoD8n//UmT5yMRsX?= =?us-ascii?Q?yNdqlG7gj+Ls4Ao3wq9KpOVoNmf0i2WCmWSSsgcGfsQh3dB36LkUPAaYOsJj?= =?us-ascii?Q?Bs04poth0iGxnHy4tZlGN/qNXInp7Rxs?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?PI4yBi82Q4LcY8nKrjCPpcMZAacLMcRnJWN9n6KW4DWRHzC+Qc6cGlX1DXf0?= =?us-ascii?Q?QyeTdvIHSNX0SaFOyw1V9U7RJDQ3dkpmDQBp9Gdk+fFrvAFY4DKep88o/7oT?= =?us-ascii?Q?N1KrX+BqE4buSikosls2cTdwQvfflU1soEEtFmZr27z/DX2kRWtR0zQJ7Ane?= =?us-ascii?Q?DECvf0cyMzDkNhPqxYQkRmSdsbek2vW0rWyTOmTTyWv34leO2nz9+YD/mAcT?= =?us-ascii?Q?z4JRdgYjL+YauxkLAEbk5hBYupMwKINzJ8FoCIlBTNtoCjlZzixpQ8KheNjw?= =?us-ascii?Q?7ySxjsP5e4xHJJ3ZfmNxz9mtQfFRBIDt532+EALiJKDwFQo8oJ1PPnMavium?= =?us-ascii?Q?wS90XqzQWUH+UbiAIVAh3nFNr+5SThpb02VI6dcIxudiQvdYOZXaoP3Scyx0?= =?us-ascii?Q?bHZ+YCCH9gD0E0rDlScIBXA3Dn8DP+CkiXU/XUieu+3QZJQBtqws55VvNSxW?= =?us-ascii?Q?Q69O+sE2jb0L/PcZ7goLG7Q4wD8eB/1Kh2iMBHAxePzbpHQTAtdZ+VazMvR3?= =?us-ascii?Q?BslQLPHfFIpER7SCb07QOTEep3D4xfN9XnqMwaSe3LfWNliETZ4Kbg4MZP6r?= =?us-ascii?Q?eYM40Q4TkcbtgktuQ+Brw4wN+oFA7HZR21rT2jg7Y6hCfSMVoYsn7UBWC0Yc?= =?us-ascii?Q?k0HeuQqTEmXDpsk2hnA/S5NUp04qpkDOgkQ1rYFyGA7nx5gtOZFGEqiHyMH/?= =?us-ascii?Q?B/BPy5AbHxWz9GiPYcBE6fE3XbUX+RX2jWo06jA17J5vOyYIelp3sr/bXZec?= =?us-ascii?Q?IKZa98dBd3k24W1dFlRLjHq+V5RDOZDo1qf1ZH8ylr+B/g0WYTyWnyT4uYFX?= =?us-ascii?Q?qzAuSwWO/tDx9d523t7ROtTjsxmu7WoVqCL78RTvRUZrtXowUFEJ2TzRjuJ/?= =?us-ascii?Q?5enJLjzJhtRorEDoV1JUmRoIw2OxlccRQMAEPyRUEHA+uTFhAjEKk+J0NJy/?= =?us-ascii?Q?3vY2sqxxteiftz0VVbW3WyTxHuNNlAtnASt9jWg8EXBDUtBLZOobIn2S6NNB?= =?us-ascii?Q?0cyZdYWb9vY4Es8/Jir8gz4m2jA2MX7HRtEGiFenIjDO6/vHzI4uKxtYLUjY?= =?us-ascii?Q?ifYppf6uVz4xKB7U7QCovvFGYMhLkRKmdWMLvv1j6EMYjFxYd1+OCsi1Fqk8?= =?us-ascii?Q?oXAYFgAPlj8VlW1FxXEKzOS7HTFhY9q50VxYvzhw+84kJcowXn1XKSiD52QZ?= =?us-ascii?Q?McSrZBcrUq0JOxUx9zV1bNMRwZAeMoUgaOrul3MYWC+yua/Gxft6fNf5KYJl?= =?us-ascii?Q?2J9Y2+7TDJz/v3H1JcaueKGI3ars0svixaEZJZ2GXWZUWpYgP6BXkRR1F2tE?= =?us-ascii?Q?1ZEbGYbcncv+cn+0TDW5DnyfsO7M3+nOntTLdezwaXlzDN3nRzoXaHydpp6M?= =?us-ascii?Q?8DmWm+qVtCY+RSRNBsh79w1VYw1vZe851ZrIc1DFAIqMzLcxhgzt/vYha+6K?= =?us-ascii?Q?TSqyYKcwQr1GzagCheCua309dw8lmK1OnHiundCraVUaFhwoTuheSqUSa7h7?= =?us-ascii?Q?dfUmgRH2JPJxKzjo/IDCkyhJ/W8TYQM146LOendb1SjaYKMhywbidizNt3CT?= =?us-ascii?Q?Sr1RDoNOO5qSSA9sqLbEqjn1D1jwMZ1LbSeOChqRsaqA7CB/i/ffHvh2Hmzc?= =?us-ascii?Q?B7AFYzpsNMsaMs/0xjz2bk0=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0bd2cec7-1526-43f4-e6cc-08de3d7f44a3 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:35.5548 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6FZKB1fsYGu+hH6yE3w1gF2RcNGPMhaL8dwoetOR3FaLkAc8hEkA0vOqRhkXdk8O5npXWfXK48kinVJOj99DPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add the infrastructure needed by the upcoming DW eDMA backed backend: - add hooks and those invocations (.enable/.disable/.pre_link_up/.post_link_up/.qp_init/.qp_free) - store backend-private pointers in ctx/qp No functional changes. Signed-off-by: Koichiro Den --- drivers/ntb/ntb_transport_core.c | 34 ++++++++++++++++++++++++++++ drivers/ntb/ntb_transport_internal.h | 20 ++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/drivers/ntb/ntb_transport_core.c b/drivers/ntb/ntb_transport_c= ore.c index bff8b41a0d3e..40c2548f5930 100644 --- a/drivers/ntb/ntb_transport_core.c +++ b/drivers/ntb/ntb_transport_core.c @@ -879,6 +879,9 @@ static void ntb_transport_link_cleanup(struct ntb_trans= port_ctx *nt) count =3D ntb_spad_count(nt->ndev); for (i =3D 0; i < count; i++) ntb_spad_write(nt->ndev, i, 0); + + if (nt->backend_ops.disable) + nt->backend_ops.disable(nt); } =20 static void ntb_transport_link_cleanup_work(struct work_struct *work) @@ -915,6 +918,12 @@ static void ntb_transport_link_work(struct work_struct= *work) =20 /* send the local info, in the opposite order of the way we read it */ =20 + if (nt->backend_ops.pre_link_up) { + rc =3D nt->backend_ops.pre_link_up(nt); + if (rc) + return; + } + if (nt->use_msi) { rc =3D ntb_msi_setup_mws(ndev); if (rc) { @@ -996,6 +1005,12 @@ static void ntb_transport_link_work(struct work_struc= t *work) =20 nt->link_is_up =3D true; =20 + if (nt->backend_ops.post_link_up) { + rc =3D nt->backend_ops.post_link_up(nt); + if (rc) + return; + } + for (i =3D 0; i < nt->qp_count; i++) { struct ntb_transport_qp *qp =3D &nt->qp_vec[i]; =20 @@ -1178,6 +1193,12 @@ static int ntb_transport_probe(struct ntb_client *se= lf, struct ntb_dev *ndev) if (rc) return rc; =20 + if (nt->backend_ops.enable) { + rc =3D nt->backend_ops.enable(nt, &mw_count); + if (rc) + goto err; + } + /* * If we are using MSI, and have at least one extra memory window, * we will reserve the last MW for the MSI window. @@ -1267,6 +1288,12 @@ static int ntb_transport_probe(struct ntb_client *se= lf, struct ntb_dev *ndev) rc =3D ntb_transport_init_queue(nt, i); if (rc) goto err2; + + if (nt->backend_ops.qp_init) { + rc =3D nt->backend_ops.qp_init(nt, i); + if (rc) + goto err2; + } } =20 INIT_DELAYED_WORK(&nt->link_work, ntb_transport_link_work); @@ -1298,6 +1325,9 @@ static int ntb_transport_probe(struct ntb_client *sel= f, struct ntb_dev *ndev) } kfree(nt->mw_vec); err: + if (nt->backend_ops.disable) + nt->backend_ops.disable(nt); + kfree(nt); return rc; } @@ -2021,6 +2051,7 @@ EXPORT_SYMBOL_GPL(ntb_transport_create_queue); */ void ntb_transport_free_queue(struct ntb_transport_qp *qp) { + struct ntb_transport_ctx *nt =3D qp->transport; struct pci_dev *pdev; struct ntb_queue_entry *entry; u64 qp_bit; @@ -2074,6 +2105,9 @@ void ntb_transport_free_queue(struct ntb_transport_qp= *qp) =20 cancel_delayed_work_sync(&qp->link_work); =20 + if (nt->backend_ops.qp_free) + nt->backend_ops.qp_free(qp); + qp->cb_data =3D NULL; qp->rx_handler =3D NULL; qp->tx_handler =3D NULL; diff --git a/drivers/ntb/ntb_transport_internal.h b/drivers/ntb/ntb_transpo= rt_internal.h index 33c06be36dfd..51ff08062d73 100644 --- a/drivers/ntb/ntb_transport_internal.h +++ b/drivers/ntb/ntb_transport_internal.h @@ -106,6 +106,9 @@ struct ntb_transport_qp { int msi_irq; struct ntb_msi_desc msi_desc; struct ntb_msi_desc peer_msi_desc; + + /* Backend-specific */ + void *priv; }; =20 struct ntb_transport_mw { @@ -122,6 +125,14 @@ struct ntb_transport_mw { =20 /** * struct ntb_transport_backend_ops - backend-specific transport hooks + * @enable: Optional. Enable backend. Called once on + * ntb_transport_probe(). + * @disable: Optional. Backend teardown hook. + * @qp_init: Optional. QP initialization hook called on + * ntb_transport_probe(). + * @qp_free: Optional. Undo qp_init. + * @pre_link_up: Optional. Called before link-up handshake. + * @post_link_up: Optional. Called after link-up handshake. * @setup_qp_mw: Set up memory windows for a given queue pair. * @tx_free_entry: Return the number of free TX entries for the queue pai= r. * @tx_enqueue: Backend-specific TX enqueue implementation. @@ -130,6 +141,12 @@ struct ntb_transport_mw { * @debugfs_stats_show: Dump backend-specific statistics, if any. */ struct ntb_transport_backend_ops { + int (*enable)(struct ntb_transport_ctx *nt, unsigned int *mw_count); + void (*disable)(struct ntb_transport_ctx *nt); + int (*qp_init)(struct ntb_transport_ctx *nt, unsigned int qp_num); + void (*qp_free)(struct ntb_transport_qp *qp); + int (*pre_link_up)(struct ntb_transport_ctx *nt); + int (*post_link_up)(struct ntb_transport_ctx *nt); int (*setup_qp_mw)(struct ntb_transport_ctx *nt, unsigned int qp_num); unsigned int (*tx_free_entry)(struct ntb_transport_qp *qp); int (*tx_enqueue)(struct ntb_transport_qp *qp, struct ntb_queue_entry *en= try, @@ -166,6 +183,9 @@ struct ntb_transport_ctx { =20 /* Make sure workq of link event be executed serially */ struct mutex link_event_lock; + + /* Backend-specific context */ + void *priv; }; =20 enum { --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A885935E55A; Wed, 17 Dec 2025 15:17:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984669; cv=fail; b=c28jkWNWEmzJ6AQMxDK5TT5RW5WApEelZp7VN8H2Nr03T8ndnnx6tdXBbeexUVeQ5ECxSJfBC8S6FpBvV/fNceieklJnQw48JXpPfNC+eAKGpY/Ksuqp8v1rxplC3x8NLReeMI8VqprGtRE3up8s/7ky6FiA/uxI6kGKh9QQQ24= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984669; c=relaxed/simple; bh=d0rACje9YjjOsG5lQZ7JZ5/XwL3Df1IiGPbPtd6KSxo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Z6UVd5lypjRxSgQUGXWLXBW7QG7m/iVzPeqKDgPARt8h++H4xa3RQVMwCXZhKPBCLpUh3zy2MeFaC8/mdtOBozRIv35ESIwfLSDQGGW85tDV4NJAZ1lvnJyo3mIHELDm4JKDsGgjFxMOabhLaS/yN1NsYYNUktWQXUt3CMWIj+0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Vrppv7b9; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Vrppv7b9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rdsn95x3hV+v9H5iJbEdARDHCDj98oNtEcSa1PwPC6J5PxAgKAueF2RJrL+yCqV++XOlwK0X94p1mdJfdbs1QAthL+wOJ9hMyk6rnCo9tBmgHhfjQM8VLpDkAJNbXtkF5fBD8WezmppHvk6ak4BlyKJ30TC91wUXxVrumkqaj/7m5yewGUpbJL/kBfovrRdJERFaNiagp8YCSBu/5s9j949f2didgXFJTglT7B2DIYLmtOZtDtjRiIeJZQyIz9dLKI7b82pZ8km2Fli8TCZHIp5uaRE5m6zf3E68d1VugZNLjFZlMuUB/AC4I3NCPGBVCJ5e8kt0Iom9QvDCFNwowQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=rL83BuiDgQhlPZrb1PXPTF4fyQ31mx307j1bQxvQqP0=; b=rciSIdAmy75kgmxAMnnTl3xthyJf9Ho7GNtjhS76Gu4nVKxJmDIJfR/UhSSXKs+k6+i18rxWu4WJBKI3fHqm2AnXafU4QE6YYi0nNTwkxf0QFIZfYHfI8P5qc2ttzGBELY0sc/rIqjAO82VCu9tTTIyvBHkQgx+fzXDab3Q5Px2gyeq4BC8Qj/zHToKsHochrIwlaUo+H4ZYfCfaH2L9PvcbwJu6n+v2R7f6LmCptQhRuxKCg+KRvTVDzGQRD2bHOP9OpNfmsk9GxEC098E3yprhs1ltEDgjAh49fAOQR0Zq/laRe9+c2M+Rr9LKkXPsjLewsVCCkLf8bxIq5v8U2g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rL83BuiDgQhlPZrb1PXPTF4fyQ31mx307j1bQxvQqP0=; b=Vrppv7b9Lqm5f8bZU//HIiHyITcIPLxKTjf7jYHrwB4duz88iWmZthiwHTKGznEcADoA16BW18tOdfKYa5S4t5mRJac2l04BkEmvPDJ3CfPUzMCQ+9QWkkDIQAThSU3LZVm61t+CSScsA3HMiaOKPgw+EI284axn2nHqpEa9goI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:36 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:36 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 25/35] NTB: hw: Introduce DesignWare eDMA helper Date: Thu, 18 Dec 2025 00:15:59 +0900 Message-ID: <20251217151609.3162665-26-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0088.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:369::19) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f9fab2d-e9a2-4516-cdf9-08de3d7f4521 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LhFmzEObNAFdIJTiUV+FiPJogMkZKZKugFDf5JC06L/IO8opSVDVWQUdFoQb?= =?us-ascii?Q?/snk3vrFRMIWxGBxEj3D+1VHmSMnDUT8jZFeXLr9WACzS8iQzOlzANrZmqEo?= =?us-ascii?Q?/pxW824+zDDVRY0Z6jTIsZk63ft5ZfyXUJ5+FNHnQaIfsbAmafemaCmOIR4h?= =?us-ascii?Q?Ii5plO8hqr4IARssVMNr7HZlp2hHnz0lre+i5yXB5qZ2AAUHwO3q11PEC55x?= =?us-ascii?Q?w8CBqeq0VK/SLqGy4Mw0+yY/MuJTQ8BRIvx3XYkuLlpC9mJugurzoPrbiSdU?= =?us-ascii?Q?XmSYiIYJrK0vsCa9Pxh7pt7SRF5gL5NlQ8rm8+tZXJeH2cNwERAadG4QDJkP?= =?us-ascii?Q?Ae4OSTt8cSARBpuF9kJKOR0wzEJQ/I8ZLQl6OQfifIvECYajv2JSXzVgvWaA?= =?us-ascii?Q?yadsDN7mECNnDXgGPmAU4mLsXu3+re2pWb4xdcD8yFix3XXKJe04Utugb+4r?= =?us-ascii?Q?RF9mrZsub7x2f9qn/DH2VM7LZSDwhY9uIdcTV/j151kOw8t0DosSoI1pioVb?= =?us-ascii?Q?C2pDBMYWRqqn4wR3ICp5/xF72/e2pdV4qPA+P2XwMQL49AEz4aPAcLxkRRQu?= =?us-ascii?Q?TB4hbJ+jqaaUcbYHxPXPQp57bmq6iZpe+0gUEcwkFAjweDoRPo7mxk+wTjeS?= =?us-ascii?Q?fu3uY1pqOkMXPRBkJmfmITasaZiWCfqeRbY1+oWdoTCQLphvUcThtKEOfT0c?= =?us-ascii?Q?jFkZbZhqfgtoSMy4ZUlmPQE80OImMaAh/ca//oGfoR1+GOVbNNR+gTWzrt0I?= =?us-ascii?Q?L1D5OsbCJZ/WmlsanqCt7h2SZrNoH6jKKCII0+lipiZqMgCetTF/QHqSU80u?= =?us-ascii?Q?Pza7EFMqJ4Bvg4HJpc2zf1G32BB+7Ff/eMtG8yTWNZ206txYjaSplCRFvWZW?= =?us-ascii?Q?QmhANSzbonmZWJ4YLNYTo9LEkpDTnn7LYqOlpkExxY93qKzDsAAB2Zsfp2Di?= =?us-ascii?Q?sHH1pNoBDFPkUbitpr0VYmFvnWjxRpum4uACfGBzbUmSapZPC+zh2wzfZquf?= =?us-ascii?Q?ZD2NgdrQSnkAbJCZzuuBgVYPZYdgjYwcdWDtiMQNu0lv3NI5UDqDUQApGMiD?= =?us-ascii?Q?Z7z/HIe0TI/FwKqLRvbpEd+Iu9tO01aAJor2IHAhIuJZmUIaIjN6Ob8ANAs8?= =?us-ascii?Q?/FKFaqSIlhtM6czwq/ehVs16qa7WxLC+KWQ+ux5W1bXLE/00FgnC9nTh0cUx?= =?us-ascii?Q?+0PWaq93Zf3Rg0UOsw3KbkevZ3AVJaPd/mW8img0gwkIhv1QbyrCytc6pyIZ?= =?us-ascii?Q?fLfHX2ihLvw5Y4DbyGKiFTzWCSVbJxnBZFHRg627/H6JL7E7TIT6gAg989Af?= =?us-ascii?Q?iHL/Zdv1S5fEIS2eSGVTpBmUkVwenfaon51ERccR7KVWvnzJTIlXCED+ADBG?= =?us-ascii?Q?WH37+9ozPq9oGd51lYOM4K7N68gfoT7Fm42jeJRQ2rGmGchcSeQwllIQoT32?= =?us-ascii?Q?Ogg5xUsK+0Qf7bc131QvJ+3Snk/r9Lmq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?p2F742udNjpquDKzD/7V3zViRHsKBkX8qFf+iweKMVPbprCexq6Mqpe+uROq?= =?us-ascii?Q?XlG4dSwSdHAnkLLYmSRHU90TqkqbkbWUt4TOIQOFAL0TcxkypyK6ji3wjVFy?= =?us-ascii?Q?WbBrJh96x4bgJFsJW3ubJ4XSVU/+FAlkAKp99j4OPPfjOdarHgNv+IGeO7fi?= =?us-ascii?Q?s+OuDt6tjMy0CiVhHaaPfrycq1htDVVHDskfGdau9i6zQjoQBjhcF08+oBZO?= =?us-ascii?Q?0hewKl5VG78jbucsCik4fPoarjRql7gU3ORI0pKbv1KSV+hWN4CLfbSOBzGv?= =?us-ascii?Q?AP1gCqHoFSetRuVfKJ2X2o7B+o3mRP2K2Ps+GMvnKWH+nh4nrRXvbXoaE/5G?= =?us-ascii?Q?miutG1hFND7B2mJqJiEQwMwCpSpO1C0x6JXpXwBLqC1SU/AXn+Hwv9jf61e4?= =?us-ascii?Q?vve5aa47fuJy57U2MTCAGZIe2czLMNI1K1Ed9brHHoXwTeHFnMQLhnlMKCpN?= =?us-ascii?Q?b42lHYs1vdllIn03hYDRNdpZGmOn9uD2YMJ/AbScgLU3hRhEIBDqJZanEuFW?= =?us-ascii?Q?Jsu6tmZdbqRi2pLOyAmKFQ0cA4FejctULdsvLNRyphsnJfeISqpnJjzLfnKc?= =?us-ascii?Q?UcHh1HVvr1xicR4y+ZGjqe+Bo48IWYbPfek4RZYnQne/6549i/haWkPOTDs0?= =?us-ascii?Q?KCjbWjQMQFJc2rgtMpudEZg+CMvJfVjw2eojrapNZahcVkbduSUxwLSkQrM9?= =?us-ascii?Q?oRWTzPBYG60HjyQsnV99SOzJg/VSUhehUi8q/NFxEg8GdYydBLBnZ+N8yb9o?= =?us-ascii?Q?mL2C1Ux2tdr7sKW6hOgnBDyPxNhb7YL6knbtz6h8Lh8f6T+i42sWNZpocskf?= =?us-ascii?Q?JGP9V7+7PU7fg9K+86vioHtxbSLoOeZKsTE61YUu84pHGC8XSGR0OplR6S6r?= =?us-ascii?Q?r+iUlIYrGyC7RraZrmpvU+8tiwBWJ6SQKBh12QRSOsGxoS5kIh+9a9CzJLW1?= =?us-ascii?Q?Yx2+sd+c2tGgJdDDD1zX5GZgErc2hqr+Org72UryC6TxHdukqJrweyJvTnue?= =?us-ascii?Q?OubiRByr0q+K8TKyjRe1HcRh+QWLvwLHTYwn8IfWxfe4OTBMwDZuU6qclzXo?= =?us-ascii?Q?fNTbD69u4w+zkF5yzYuODAcGbeuWXWgmuUuCdNhcSVvzmWSs+nvD9Uh3e3oF?= =?us-ascii?Q?Yboz8fZh/jSO7lEJRwvRQI/HfZmJ/nZC4I6zHPEYtYbqMD+Crxm+MJL3jlF1?= =?us-ascii?Q?28CUOUECCPU90lhSW6ZWkYR2O/4mbhPveNmfzyKUJRUHz3RqMxllp001+RZS?= =?us-ascii?Q?Dy++b3W512uIY6pGqesY30ughq+wU3FSZ15raOuD/oshQYBd6VoI5vTWCqjL?= =?us-ascii?Q?1LDehfnAFLEfxHjfo/YDwR6Wy/AD3+FiYLMYSEcnf9nRYdej8HkL+s/1rh9/?= =?us-ascii?Q?IPEV+uDtWX8vdsgNizvKl4idYuxFHSzfvhyFK+M2UW/Vg0SM1wF+9ITrztvz?= =?us-ascii?Q?BasnD2GFFbFdDJgD7zAZRQ7Jc+zJobbqvB6mNhrockIeWEEL1UMQRez33FkP?= =?us-ascii?Q?9DA8rNC5DvcM/u+o7JU7kY2EpiNowqjrJ+IybWi5R0gNDydirXNVJPeQpNPe?= =?us-ascii?Q?0NDBLKbsqbqTJv3dYa0xpm92C9rdYF+W+6usuqoUbNLeqCZfXbaYYyGLOfjs?= =?us-ascii?Q?CGk7BQvbme5GB2AdyoXI/N4=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 1f9fab2d-e9a2-4516-cdf9-08de3d7f4521 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:36.4009 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yAA92okvx5MyQrC4axPVpfSAZmBcjp/khICAHUaUBmiqyvSJtpvvpQEToMkVNKzcxwNnoI9b65lEjZXoIBkBAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add a helper library under drivers/ntb/hw/edma/ that is to be used by the NTB transport remote eDMA backend. This is not an NTB hardware driver but rather encapsulates DesignWare eDMA specific plumbing. Signed-off-by: Koichiro Den --- drivers/ntb/hw/edma/ntb_hw_edma.c | 754 ++++++++++++++++++++++++++++++ drivers/ntb/hw/edma/ntb_hw_edma.h | 76 +++ 2 files changed, 830 insertions(+) create mode 100644 drivers/ntb/hw/edma/ntb_hw_edma.c create mode 100644 drivers/ntb/hw/edma/ntb_hw_edma.h diff --git a/drivers/ntb/hw/edma/ntb_hw_edma.c b/drivers/ntb/hw/edma/ntb_hw= _edma.c new file mode 100644 index 000000000000..50c4ddee285f --- /dev/null +++ b/drivers/ntb/hw/edma/ntb_hw_edma.c @@ -0,0 +1,754 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * NTB remote DesignWare eDMA helpers + * + * This file is a helper library used by the NTB transport remote-eDMA bac= kend, + * not a standalone NTB hardware driver. It contains the DesignWare eDMA + * specific plumbing needed to expose/map peer-accessible resources via an= NTB + * memory window and to manage DMA channels and peer notifications. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ntb_hw_edma.h" + +/* Default eDMA LLP memory size */ +#define DMA_LLP_MEM_SIZE PAGE_SIZE + +#define NTB_EDMA_MW_IDX_INVALID (-1) + +struct ntb_edma_ctx { + bool initialized; + + /* Fields for the notification handling */ + u32 qp_count; + u32 *notify_src_virt; + dma_addr_t notify_src_phys; + struct scatterlist sgl; + + /* Host to EP scratch buffer to tell the event info */ + union { + struct ntb_edma_db *db_virt; + struct ntb_edma_db __iomem *db_io; + }; + dma_addr_t db_phys; + + /* Below are the records for teardown path */ + + /* For ntb_edma_info to be unmapped on teardown */ + struct ntb_edma_info *info_virt; + dma_addr_t info_phys; + size_t info_bytes; + + int mw_index; + bool mw_trans_set; + + /* eDMA register window IOMMU mapping (EP side) */ + bool reg_mapped; + struct iommu_domain *iommu_dom; + unsigned long reg_iova; + size_t reg_iova_size; + + /* Read channels delegated to the host side (EP side) */ + struct dma_chan *dchan[NTB_EDMA_TOTAL_CH_NUM]; + + /* RC-side state */ + bool peer_initialized; + bool peer_probed; + struct dw_edma_chip *peer_chip; + void __iomem *peer_virt; + resource_size_t peer_virt_size; +}; + +typedef void (*ntb_edma_interrupt_cb_t)(void *data, int qp_num); + +struct ntb_edma_interrupt { + ntb_edma_interrupt_cb_t cb; + void *data; +}; + +struct ntb_edma_filter { + struct device *dma_dev; + u32 direction; +}; + +static struct ntb_edma_ctx edma_ctx; +static struct ntb_edma_interrupt intr; + +static DEFINE_SPINLOCK(ntb_edma_notify_lock); + +static bool ntb_edma_filter_fn(struct dma_chan *chan, void *arg) +{ + struct ntb_edma_filter *filter =3D arg; + u32 dir =3D filter->direction; + struct dma_slave_caps caps; + int ret; + + if (chan->device->dev !=3D filter->dma_dev) + return false; + + ret =3D dma_get_slave_caps(chan, &caps); + if (ret < 0) + return false; + + return !!(caps.directions & dir); +} + +static void ntb_edma_notify_cb(struct dma_chan *dchan, void *data) +{ + struct ntb_edma_interrupt *v =3D data; + ntb_edma_interrupt_cb_t cb; + struct ntb_edma_db *db; + void *cb_data; + u32 qp_count; + u32 i, val; + + guard(spinlock_irqsave)(&ntb_edma_notify_lock); + + cb =3D v->cb; + cb_data =3D v->data; + qp_count =3D edma_ctx.qp_count; + db =3D edma_ctx.db_virt; + if (!cb || !db) + return; + + for (i =3D 0; i < qp_count; i++) { + val =3D READ_ONCE(db->db[i]); + if (!val) + continue; + + WRITE_ONCE(db->db[i], 0); + cb(cb_data, i); + } +} + +static void ntb_edma_undelegate_chans(struct ntb_edma_ctx *ctx) +{ + unsigned int i; + + if (!ctx) + return; + + scoped_guard(spinlock_irqsave, &ntb_edma_notify_lock) { + intr.cb =3D NULL; + intr.data =3D NULL; + } + + for (i =3D 0; i < NTB_EDMA_TOTAL_CH_NUM; i++) { + if (!ctx->dchan[i]) + continue; + + if (i =3D=3D NTB_EDMA_CH_NUM) + dw_edma_chan_register_notify(ctx->dchan[i], NULL, NULL); + + dma_release_channel(ctx->dchan[i]); + ctx->dchan[i] =3D NULL; + } +} + +static int ntb_edma_delegate_chans(struct device *dev, struct ntb_edma_ctx= *ctx, + struct ntb_edma_info *info, + ntb_edma_interrupt_cb_t cb, void *data) +{ + struct ntb_edma_filter filter; + struct dw_edma_region region; + dma_cap_mask_t dma_mask; + struct dma_chan *chan; + unsigned int i; + int rc; + + dma_cap_zero(dma_mask); + dma_cap_set(DMA_SLAVE, dma_mask); + + filter.dma_dev =3D dev; + + /* Configure read channels, which will be driven by the host side */ + for (i =3D 0; i < NTB_EDMA_TOTAL_CH_NUM; i++) { + filter.direction =3D BIT(DMA_DEV_TO_MEM); + chan =3D dma_request_channel(dma_mask, ntb_edma_filter_fn, + &filter); + if (!chan) { + rc =3D -ENODEV; + goto err; + } + ctx->dchan[i] =3D chan; + + if (i =3D=3D NTB_EDMA_CH_NUM) { + scoped_guard(spinlock_irqsave, &ntb_edma_notify_lock) { + intr.cb =3D cb; + intr.data =3D data; + } + rc =3D dw_edma_chan_register_notify( + chan, ntb_edma_notify_cb, &intr); + if (rc) + goto err; + } else { + rc =3D dw_edma_chan_irq_config(chan, DW_EDMA_CH_IRQ_REMOTE); + if (rc) + dev_warn(dev, "irq config failed (i=3D%u %d)\n", + i, rc); + } + + rc =3D dw_edma_chan_get_ll_region(chan, ®ion); + if (rc) + goto err; + + info->ll_rd_phys[i] =3D region.paddr; + } + + return 0; + +err: + ntb_edma_undelegate_chans(ctx); + return rc; +} + +static void ntb_edma_ctx_reset(struct ntb_edma_ctx *ctx) +{ + ctx->initialized =3D false; + ctx->mw_index =3D NTB_EDMA_MW_IDX_INVALID; + ctx->mw_trans_set =3D false; + ctx->reg_mapped =3D false; + ctx->iommu_dom =3D NULL; + ctx->reg_iova =3D 0; + ctx->reg_iova_size =3D 0; + ctx->db_phys =3D 0; + ctx->qp_count =3D 0; + ctx->info_virt =3D NULL; + ctx->info_phys =3D 0; + ctx->info_bytes =3D 0; + ctx->db_virt =3D NULL; + memset(ctx->dchan, 0, sizeof(ctx->dchan)); +} + +int ntb_edma_setup_mws(struct ntb_dev *ndev, int mw_index, + unsigned int qp_count, ntb_edma_interrupt_cb_t cb, + void *data) +{ + struct ntb_edma_ctx *ctx =3D &edma_ctx; + const size_t info_bytes =3D PAGE_SIZE; + resource_size_t size_max, offset; + dma_addr_t db_phys, info_phys; + size_t reg_size, reg_size_mw; + struct ntb_edma_info *info; + phys_addr_t edma_reg_phys; + struct iommu_domain *dom; + struct ntb_edma_db *db; + size_t ll_bytes, size; + struct pci_epc *epc; + struct device *dev; + unsigned long iova; + phys_addr_t phys; + u64 need; + int rc; + u32 i; + + if (ctx->initialized) + return 0; + + /* Clean up stale state from a previous failed attempt. */ + ntb_edma_teardown_mws(ndev); + + epc =3D (struct pci_epc *)ntb_get_private_data(ndev); + if (!epc) + return -ENODEV; + dev =3D epc->dev.parent; + + ntb_edma_ctx_reset(ctx); + + ctx->mw_index =3D mw_index; + ctx->qp_count =3D qp_count; + + info =3D dma_alloc_coherent(dev, info_bytes, &info_phys, GFP_KERNEL); + if (!info) + return -ENOMEM; + memset(info, 0, info_bytes); + + ctx->info_virt =3D info; + ctx->info_phys =3D info_phys; + ctx->info_bytes =3D info_bytes; + + /* Get eDMA reg base and size, IOMMU map it if necessary */ + rc =3D dw_edma_get_reg_window(epc, &edma_reg_phys, ®_size); + if (rc) { + dev_err(&ndev->pdev->dev, + "failed to get eDMA register window: %d\n", rc); + goto err; + } + dom =3D iommu_get_domain_for_dev(dev); + if (dom) { + phys =3D edma_reg_phys & PAGE_MASK; + size =3D PAGE_ALIGN(reg_size + edma_reg_phys - phys); + iova =3D phys; + + rc =3D iommu_map(dom, iova, phys, size, + IOMMU_READ | IOMMU_WRITE | IOMMU_MMIO, + GFP_KERNEL); + if (rc) { + dev_err(&ndev->dev, + "failed to direct map eDMA reg: %d\n", rc); + goto err; + } + + ctx->reg_mapped =3D true; + ctx->iommu_dom =3D dom; + ctx->reg_iova =3D iova; + ctx->reg_iova_size =3D size; + } + + /* Read channels are driven by the peer (host side) */ + rc =3D ntb_edma_delegate_chans(dev, ctx, info, cb, data); + if (rc) { + dev_err(&ndev->pdev->dev, + "failed to prepare channels to delegate: %d\n", rc); + goto err; + } + + /* Scratch buffer for notification */ + db =3D dma_alloc_coherent(dev, sizeof(*db), &db_phys, GFP_KERNEL); + if (!db) { + rc =3D -ENOMEM; + goto err; + } + memset(db, 0, sizeof(*db)); + + ctx->db_virt =3D db; + ctx->db_phys =3D db_phys; + + /* Prep works for IB iATU mappings */ + ll_bytes =3D NTB_EDMA_TOTAL_CH_NUM * DMA_LLP_MEM_SIZE; + reg_size_mw =3D roundup_pow_of_two(reg_size); + need =3D info_bytes + PAGE_SIZE + reg_size_mw + ll_bytes; + + rc =3D ntb_mw_get_align(ndev, 0, mw_index, NULL, NULL, &size_max, &offset= ); + if (rc) + goto err; + + if (size_max < need) { + rc =3D -ENOSPC; + goto err; + } + + /* iATU map ntb_edma_info */ + rc =3D ntb_mw_set_trans(ndev, 0, mw_index, info_phys, info_bytes, offset); + if (rc) + goto err; + ctx->mw_trans_set =3D true; + offset +=3D info_bytes; + + /* iATU map ntb_edma_db */ + rc =3D ntb_mw_set_trans(ndev, 0, mw_index, db_phys, PAGE_SIZE, offset); + if (rc) + goto err; + offset +=3D PAGE_SIZE; + + /* iATU map eDMA reg */ + rc =3D ntb_mw_set_trans(ndev, 0, mw_index, edma_reg_phys, reg_size_mw, + offset); + if (rc) + goto err; + offset +=3D reg_size_mw; + + /* iATU map LL location */ + for (i =3D 0; i < NTB_EDMA_TOTAL_CH_NUM; i++) { + rc =3D ntb_mw_set_trans(ndev, 0, mw_index, info->ll_rd_phys[i], + DMA_LLP_MEM_SIZE, offset); + if (rc) + goto err; + offset +=3D DMA_LLP_MEM_SIZE; + } + + /* Fill in info */ + info->magic =3D NTB_EDMA_INFO_MAGIC; + info->reg_size =3D reg_size_mw; + info->ch_cnt =3D NTB_EDMA_TOTAL_CH_NUM; + info->db_base =3D db_phys; + + ctx->initialized =3D true; + return 0; + +err: + ntb_edma_teardown_mws(ndev); + return rc; +} + +static int ntb_edma_irq_vector(struct device *dev, unsigned int nr) +{ + struct pci_dev *pdev =3D to_pci_dev(dev); + int ret, nvec; + + nvec =3D pci_msi_vec_count(pdev); + for (; nr < nvec; nr++) { + ret =3D pci_irq_vector(pdev, nr); + if (!irq_has_action(ret)) + return ret; + } + return 0; +} + +static const struct dw_edma_plat_ops ntb_edma_ops =3D { + .irq_vector =3D ntb_edma_irq_vector, +}; + +int ntb_edma_setup_peer(struct ntb_dev *ndev, int mw_index, + unsigned int qp_count) +{ + struct ntb_edma_ctx *ctx =3D &edma_ctx; + struct ntb_edma_info __iomem *info; + struct dw_edma_chip *chip; + void __iomem *edma_virt; + resource_size_t mw_size; + phys_addr_t edma_phys; + unsigned int ch_cnt; + unsigned int i; + int ret; + u64 off; + + if (ctx->peer_initialized) + return 0; + + /* Clean up stale state from a previous failed attempt. */ + ntb_edma_teardown_peer(ndev); + + ret =3D ntb_peer_mw_get_addr(ndev, mw_index, &edma_phys, &mw_size); + if (ret) + return ret; + + edma_virt =3D ioremap(edma_phys, mw_size); + if (!edma_virt) + return -ENOMEM; + + ctx->peer_virt =3D edma_virt; + ctx->peer_virt_size =3D mw_size; + + info =3D edma_virt; + if (readl(&info->magic) !=3D NTB_EDMA_INFO_MAGIC) { + ret =3D -EINVAL; + goto err; + } + + ch_cnt =3D readw(&info->ch_cnt); + if (ch_cnt !=3D NTB_EDMA_TOTAL_CH_NUM) { + ret =3D -EINVAL; + goto err; + } + + chip =3D devm_kzalloc(&ndev->dev, sizeof(*chip), GFP_KERNEL); + if (!chip) { + ret =3D -ENOMEM; + goto err; + } + + off =3D 2 * PAGE_SIZE; + chip->dev =3D &ndev->pdev->dev; + chip->nr_irqs =3D 4; + chip->ops =3D &ntb_edma_ops; + chip->flags =3D 0; + chip->reg_base =3D edma_virt + off; + chip->mf =3D EDMA_MF_EDMA_UNROLL; + chip->ll_wr_cnt =3D 0; + chip->ll_rd_cnt =3D ch_cnt; + + ctx->db_io =3D (void __iomem *)edma_virt + PAGE_SIZE; + ctx->qp_count =3D qp_count; + ctx->db_phys =3D readq(&info->db_base); + + ctx->notify_src_virt =3D dma_alloc_coherent(&ndev->pdev->dev, + sizeof(*ctx->notify_src_virt), + &ctx->notify_src_phys, + GFP_KERNEL); + if (!ctx->notify_src_virt) { + ret =3D -ENOMEM; + goto err; + } + + off +=3D readl(&info->reg_size); + + for (i =3D 0; i < ch_cnt; i++) { + chip->ll_region_rd[i].vaddr.io =3D edma_virt + off; + chip->ll_region_rd[i].paddr =3D readq(&info->ll_rd_phys[i]); + chip->ll_region_rd[i].sz =3D DMA_LLP_MEM_SIZE; + off +=3D DMA_LLP_MEM_SIZE; + } + + if (!pci_dev_msi_enabled(ndev->pdev)) { + ret =3D -ENXIO; + goto err; + } + + ret =3D dw_edma_probe(chip); + if (ret) { + dev_err(&ndev->dev, "dw_edma_probe failed: %d\n", ret); + goto err; + } + + ctx->peer_chip =3D chip; + ctx->peer_probed =3D true; + ctx->peer_initialized =3D true; + return 0; + +err: + ntb_edma_teardown_peer(ndev); + return ret; +} + +void ntb_edma_teardown_mws(struct ntb_dev *ndev) +{ + struct ntb_edma_ctx *ctx =3D &edma_ctx; + struct device *dev =3D NULL; + struct pci_epc *epc; + struct ntb_edma_db *db; + struct ntb_edma_info *info; + dma_addr_t db_phys, info_phys; + size_t info_bytes; + + epc =3D (struct pci_epc *)ntb_get_private_data(ndev); + WARN_ON(!epc); + if (epc) + dev =3D epc->dev.parent; + + scoped_guard(spinlock_irqsave, &ntb_edma_notify_lock) { + db =3D ctx->db_virt; + db_phys =3D ctx->db_phys; + + /* Make callbacks no-op first. */ + intr.cb =3D NULL; + intr.data =3D NULL; + ctx->db_virt =3D NULL; + ctx->qp_count =3D 0; + } + + info =3D ctx->info_virt; + info_phys =3D ctx->info_phys; + info_bytes =3D ctx->info_bytes; + + /* Disconnect the MW before freeing its backing memory */ + if (ctx->mw_trans_set && ctx->mw_index !=3D NTB_EDMA_MW_IDX_INVALID) + ntb_mw_clear_trans(ndev, 0, ctx->mw_index); + + ntb_edma_undelegate_chans(ctx); + + if (ctx->reg_mapped) + iommu_unmap(ctx->iommu_dom, ctx->reg_iova, ctx->reg_iova_size); + + if (db && dev) + dma_free_coherent(dev, sizeof(*db), db, db_phys); + + if (info && dev && info_bytes) + dma_free_coherent(dev, info_bytes, info, info_phys); + + ntb_edma_ctx_reset(ctx); +} + +void ntb_edma_teardown_peer(struct ntb_dev *ndev) +{ + struct ntb_edma_ctx *ctx =3D &edma_ctx; + void __iomem *peer_virt =3D ctx->peer_virt; + struct dw_edma_chip *chip =3D ctx->peer_chip; + u32 *notify_src =3D ctx->notify_src_virt; + dma_addr_t notify_src_phys =3D ctx->notify_src_phys; + + /* Stop using peer MMIO early. */ + ctx->db_io =3D NULL; + ctx->db_phys =3D 0; + ctx->qp_count =3D 0; + + if (ctx->peer_probed && chip) + dw_edma_remove(chip); + + ctx->peer_initialized =3D false; + ctx->peer_probed =3D false; + ctx->peer_chip =3D NULL; + + if (notify_src) + dma_free_coherent(&ndev->pdev->dev, sizeof(*notify_src), + notify_src, notify_src_phys); + + ctx->notify_src_virt =3D NULL; + ctx->notify_src_phys =3D 0; + memset(&ctx->sgl, 0, sizeof(ctx->sgl)); + + if (peer_virt) + iounmap(peer_virt); + + ctx->peer_virt =3D NULL; + ctx->peer_virt_size =3D 0; +} + +void ntb_edma_teardown_chans(struct ntb_edma_chans *edma) +{ + unsigned int i; + + if (!edma) + return; + + for (i =3D 0; i < NTB_EDMA_CH_NUM; i++) { + if (!edma->chan[i]) + continue; + dma_release_channel(edma->chan[i]); + edma->chan[i] =3D NULL; + } + edma->num_chans =3D 0; + + if (edma->intr_chan) { + dma_release_channel(edma->intr_chan); + edma->intr_chan =3D NULL; + } + + atomic_set(&edma->cur_chan, 0); +} + +int ntb_edma_setup_chans(struct device *dev, struct ntb_edma_chans *edma, + bool remote) +{ + struct ntb_edma_filter filter; + dma_cap_mask_t dma_mask; + unsigned int i; + int rc; + + dma_cap_zero(dma_mask); + dma_cap_set(DMA_SLAVE, dma_mask); + + memset(edma, 0, sizeof(*edma)); + edma->dev =3D dev; + + mutex_init(&edma->lock); + + filter.dma_dev =3D dev; + filter.direction =3D BIT(DMA_MEM_TO_DEV); + for (i =3D 0; i < NTB_EDMA_CH_NUM; i++) { + edma->chan[i] =3D dma_request_channel( + dma_mask, ntb_edma_filter_fn, &filter); + if (!edma->chan[i]) + break; + edma->num_chans++; + + if (remote) + rc =3D dw_edma_chan_irq_config(edma->chan[i], + DW_EDMA_CH_IRQ_REMOTE); + else + rc =3D dw_edma_chan_irq_config(edma->chan[i], + DW_EDMA_CH_IRQ_LOCAL); + + if (rc) { + dev_err(dev, "irq config failed on ch%u: %d\n", i, rc); + goto err; + } + } + + if (!edma->num_chans) { + dev_warn(dev, "Remote eDMA channels failed to initialize\n"); + ntb_edma_teardown_chans(edma); + return -ENODEV; + } + return 0; +err: + ntb_edma_teardown_chans(edma); + return rc; +} + +int ntb_edma_setup_intr_chan(struct device *dev, struct ntb_edma_chans *ed= ma) +{ + struct ntb_edma_filter filter; + dma_cap_mask_t dma_mask; + struct dma_slave_config cfg; + struct scatterlist *sgl =3D &edma_ctx.sgl; + int rc; + + if (edma->intr_chan) + return 0; + + if (!edma_ctx.notify_src_virt || !edma_ctx.db_phys) + return -EINVAL; + + dma_cap_zero(dma_mask); + dma_cap_set(DMA_SLAVE, dma_mask); + + filter.dma_dev =3D dev; + filter.direction =3D BIT(DMA_MEM_TO_DEV); + + edma->intr_chan =3D dma_request_channel(dma_mask, ntb_edma_filter_fn, + &filter); + if (!edma->intr_chan) { + dev_warn(dev, + "Remote eDMA notify channel could not be allocated\n"); + return -ENODEV; + } + + rc =3D dw_edma_chan_irq_config(edma->intr_chan, DW_EDMA_CH_IRQ_LOCAL); + if (rc) + goto err_release; + + /* Ensure store is visible before kicking DMA transfer */ + wmb(); + + sg_init_table(sgl, 1); + sg_dma_address(sgl) =3D edma_ctx.notify_src_phys; + sg_dma_len(sgl) =3D sizeof(u32); + + memset(&cfg, 0, sizeof(cfg)); + cfg.dst_addr =3D edma_ctx.db_phys; /* The first 32bit is 'target' */ + cfg.src_addr_width =3D DMA_SLAVE_BUSWIDTH_4_BYTES; + cfg.dst_addr_width =3D DMA_SLAVE_BUSWIDTH_4_BYTES; + cfg.direction =3D DMA_MEM_TO_DEV; + + rc =3D dmaengine_slave_config(edma->intr_chan, &cfg); + if (rc) + goto err_release; + + return 0; + +err_release: + dma_release_channel(edma->intr_chan); + edma->intr_chan =3D NULL; + return rc; +} + +struct dma_chan *ntb_edma_pick_chan(struct ntb_edma_chans *edma, + unsigned int idx) +{ + return edma->chan[idx % edma->num_chans]; +} + +int ntb_edma_notify_peer(struct ntb_edma_chans *edma, int qp_num) +{ + struct dma_async_tx_descriptor *txd; + dma_cookie_t cookie; + + if (!edma || !edma->intr_chan) + return -ENXIO; + + if (qp_num < 0 || qp_num >=3D edma_ctx.qp_count) + return -EINVAL; + + if (!edma_ctx.db_io) + return -EINVAL; + + guard(mutex)(&edma->lock); + + writel(1, &edma_ctx.db_io->db[qp_num]); + + /* Ensure store is visible before kicking the DMA transfer */ + wmb(); + + txd =3D dmaengine_prep_slave_sg(edma->intr_chan, &edma_ctx.sgl, 1, + DMA_MEM_TO_DEV, + DMA_CTRL_ACK | DMA_PREP_INTERRUPT); + if (!txd) + return -ENOSPC; + + cookie =3D dmaengine_submit(txd); + if (dma_submit_error(cookie)) + return -ENOSPC; + + dma_async_issue_pending(edma->intr_chan); + return 0; +} diff --git a/drivers/ntb/hw/edma/ntb_hw_edma.h b/drivers/ntb/hw/edma/ntb_hw= _edma.h new file mode 100644 index 000000000000..46b50e504389 --- /dev/null +++ b/drivers/ntb/hw/edma/ntb_hw_edma.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef _NTB_HW_EDMA_H_ +#define _NTB_HW_EDMA_H_ + +#include +#include +#include + +#define NTB_EDMA_CH_NUM 4 + +/* One extra channel is reserved for notification (RC to EP interrupt kick= ). */ +#define NTB_EDMA_TOTAL_CH_NUM (NTB_EDMA_CH_NUM + 1) + +#define NTB_EDMA_INFO_MAGIC 0x45444D41 /* "EDMA" */ + +#define NTB_EDMA_NOTIFY_MAX_QP 64 + +typedef void (*ntb_edma_interrupt_cb_t)(void *data, int qp_num); + +/* + * REMOTE_EDMA_EP: + * Endpoint owns the eDMA engine and pushes descriptors into a shared MW. + * + * REMOTE_EDMA_RC: + * Root Complex controls the endpoint eDMA through the shared MW and + * drives reads/writes on behalf of the host. + */ +typedef enum { + REMOTE_EDMA_UNKNOWN, + REMOTE_EDMA_EP, + REMOTE_EDMA_RC, +} remote_edma_mode_t; + +struct ntb_edma_info { + u32 magic; + u32 reg_size; + u16 ch_cnt; + u64 db_base; + u64 ll_rd_phys[NTB_EDMA_TOTAL_CH_NUM]; +}; + +struct ntb_edma_db { + u32 target; + u32 db[NTB_EDMA_NOTIFY_MAX_QP]; +}; + +struct ntb_edma_chans { + struct device *dev; + + struct dma_chan *chan[NTB_EDMA_CH_NUM]; + struct dma_chan *intr_chan; + + unsigned int num_chans; + atomic_t cur_chan; + + struct mutex lock; +}; + +int ntb_edma_setup_mws(struct ntb_dev *ndev, int mw_index, + unsigned int qp_count, ntb_edma_interrupt_cb_t cb, + void *data); +int ntb_edma_setup_peer(struct ntb_dev *ndev, int mw_index, + unsigned int qp_count); +void ntb_edma_teardown_mws(struct ntb_dev *ndev); +void ntb_edma_teardown_peer(struct ntb_dev *ndev); +int ntb_edma_setup_chans(struct device *dma_dev, struct ntb_edma_chans *ed= ma, + bool remote); +int ntb_edma_setup_intr_chan(struct device *dma_dev, + struct ntb_edma_chans *edma); +struct dma_chan *ntb_edma_pick_chan(struct ntb_edma_chans *edma, + unsigned int idx); +void ntb_edma_teardown_chans(struct ntb_edma_chans *edma); +int ntb_edma_notify_peer(struct ntb_edma_chans *edma, int qp_num); + +#endif --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11010020.outbound.protection.outlook.com [52.101.228.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9162369987; Wed, 17 Dec 2025 15:17:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984681; cv=fail; b=EtyuEJ7p5VIBAfDk+Z5pohqtdboOcj2OTTsxHx0fl+/qSSLt4k5gvslUN1PMnnW1Wiv0ZO1CWNUad91s7+vi3gZp9hFb9y6yB9upmkTFiPGGN/4781hAqObBSPjT1XEcOXZJK22bsq9upjOiF6z468vvfQYLmJFV+gGgII+Mf94= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984681; c=relaxed/simple; bh=g9w1J7/ZEjbSLI0H9IYjPXrn9NLNX10s8CgJG6cB384=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KM/8PBDLSAY4lRYpJ4m+/4SS1HxAovsM7V1gWVqnDleen/Gq/1jNSJqE/DugrmUw9bE+zLozw6FFJtPNaAhsjG0XDXyegDJ6t6aDMtKHcSBnUXVvS8KIUKuQ101Vl1pMNdsgTvu0Eh0+3bfUdb4YYjcPxwmrLxrySIa3c3zqa2Q= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=CidfA6cW; arc=fail smtp.client-ip=52.101.228.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="CidfA6cW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LO1bWkoFS811cf712X/m/FWTRZVfv+qgpbhc7cz4QPeeMds2tY/Z0XRJy8/rI5I1nW/WeKR1gcEjEBWiNsOYR6BxUGWGyUX6cJUQcoB+nGlUcv8liCH8vpZvW5CggWgNpVVzY3E/lV4Oza0CYToz39L8ySMIe27KfBqSYEJKZtSDORUvwrCXvoMRIPdmwymZZjHBLAqmykriqpnyLcV7HMOhCdS5GZh7Bly807fJ6zZN24SdaV1ei6A6M/cBYmm0izHi/Di1McncTUdRs9pWJro3uZ3jtnsdekrqmLPiS6VwrVIpzH6rstNq/LwVihgQlcPXF6jWDDI7qfCANtuecQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=upbR1KCMeIs2DM48PtwJNwJBzPLA5l4dOeMx6TDWdPE=; b=Y0T6AITeLRLeLd4HTWYowNxVDgiJXOitjmqSq5sgwE7v3H/JA77YY9kSASEUgakGJoaN6D7SBAzJHQsuZw/hndj1e9rasaVxixdRAQtBVXGMZ6Sscu3+f+K6YGqAEZ3rmV+S1ZiRndFCWCNoHjdRgndKWOJVyKnMJmn6ZR3HBdAgh5iVQ/DTleZtPYCJaK7uY9Cm4m+n6oMdJi0yHpcVd0iNLlfhyuk+c9QJVH1xPMjKHFF5hRtzlF47zVAWWA4AAJVNcv8v9K9NktYcfiLDzu8xZfVi6R3HcI/fshkSXF+isbYyOuc+TJxQKS+NsDcnRmfLFMPM/UcgTMG2kmdn/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=upbR1KCMeIs2DM48PtwJNwJBzPLA5l4dOeMx6TDWdPE=; b=CidfA6cWGQYxiGWh5KiHiqk1Qck3rb21OmSV8USh+laNfN5PYqFwlvFDhchgJKJms1lRevsBgqwunXTx2PTvntfOuSWYWoWPp+sMn5c52hpmbMqfSjw+AAP04EpassyQ9QuinT3xwH+qRPRDiY4EHDWVAGz4z1F6YSzAgD/sA1w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:37 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:37 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 26/35] NTB: ntb_transport: Introduce DW eDMA backed transport mode Date: Thu, 18 Dec 2025 00:16:00 +0900 Message-ID: <20251217151609.3162665-27-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: aaf6cf86-2274-4725-ce24-08de3d7f459e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?S3V7jzYr6nRDnjL6JW1+NGOSLeBVX1AVUkZR7JAn5soFdtTzhABH6/SzWWEG?= =?us-ascii?Q?csxVQrKuYKaSeTmpJfGxf0K6QTAg7gas45QT7RjK4JeZv2g+h9AdTZNxOWVW?= =?us-ascii?Q?nc/R1YlrjHhph5Awth7qi4eFs5aCBpj7fdSMU3sGcfzd8JxjHeW/G7WsnV+n?= =?us-ascii?Q?ft2K8n4q92BJxDQOlwFYw+40q5Zxe5JefYW2S0Cddi6XHfXq9BTQAZ0d4Djl?= =?us-ascii?Q?Lb+08pl+S+3byHq60tNWaYApNrMLFaQ8nID/lrltM0NSiDQAcfwjwa0PO7VD?= =?us-ascii?Q?LylCUVwuIedQ/99ua+bQ+aiJLgIZFn1l0StnIC0hxnuW96ypOz1C3cDu30nD?= =?us-ascii?Q?PJd9/30ag7AnLid8R5qExH2xOBJ8yoCfNZKKVeWyzUUP7zMsrle80s74zRQC?= =?us-ascii?Q?lNyay2c8sGzt50W0tDYZ4bHwhvz/tz9IVBrkhZz56R2wu4fimjQTtdTXoAb2?= =?us-ascii?Q?d+Pkqcg5WEc7+q1pPPzeo+8aztIqvHDK94YOz8JgRWX6HpkSmy1czjQqFCV+?= =?us-ascii?Q?1xtvFheOv1cUtoORT6MvWw1jZZQqWZMBmMqXKa5LvLuyJPqRqaT/6eAOp3pd?= =?us-ascii?Q?iVAXD76zIvd/TdkHacDCEtWOwev1onEmeb0lCUq/Gz4YOWXP/7cp3PrmszAK?= =?us-ascii?Q?exrGSPMOR5KEj+QyI3ABCJ9m2UzmvDRy57tfbnfW5+TgzWL79QGHq6RL00Sh?= =?us-ascii?Q?dAQb+oEqXqlzvdCYLLAUpofbla/N+2dG0Nckb27aD2ldxLcixaJmowZJq6aW?= =?us-ascii?Q?EfY2mVy0KAhLfpmhUpU6pHsVAtpsgjly148Iuua3nDYjNeaEbB9q2Ex9Ij3q?= =?us-ascii?Q?rZugC9VYzeszWnKAdvBQaF4S16Z3lVSLfTWghwRbkNkIuWjd1U+cKN8cqwBn?= =?us-ascii?Q?BvYZHrs9xNUhACWXi0jEL00+mmVHO8LjS/ORFlrua+Q87KyQcGKfRhS9SVM3?= =?us-ascii?Q?t9x++6iTn8lhV/f/GG0AbvT/h1V3JusYNGhCsR+nrikj6/x0mND5WTcMvhdn?= =?us-ascii?Q?Wcj3w+qLkdkipd5X7Zsbtea3Ukyme4xogAeleOV6X+bbF8m+ogeS8SVNQA4o?= =?us-ascii?Q?qYjKchb5xsE6GrhpWKWXiSknc+tdRDmPGkFuHZFM6hDOi8KYvWongAIYBs5f?= =?us-ascii?Q?13cd8hORVvVDog5oIdiqJTYobXO2xNgaswKLRUoubH7J6XdeQB7F19scyDTj?= =?us-ascii?Q?VN9uISnzIywKr0Z85W1SYzcstDD7ODwAI0Lkqe9BiU1kL7N3i+JMSKVTmstk?= =?us-ascii?Q?la8l7mreJ5YX80vkZp5w+0RgZRLesJADphja2kmaXY2Ju0bHlRZucKl0dz5i?= =?us-ascii?Q?xi8Qv0sPDaukvCrAVCrbcXBT4SaD2U7vJts38A+NtmfpZBBA1CmrdAKRAS3w?= =?us-ascii?Q?3oJ9s87Tv6cT5vgh3ODgJ+NKvwNZiwOiqgk47vi1F698ZjLJTlTOK60emW8Q?= =?us-ascii?Q?xcrd0yz8IIJA+A5S4HMZk/lbojyYp5MK?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7ncvDeaMNkcp7cjLbFD/BI3+BLmAwzTijZ3Tb4cyGvH4B3b4hdVBLfvJPB8m?= =?us-ascii?Q?9rNXM+yezT5y6j17mPh3cfVZQ3AqMptSjlE2gF/LO+J7BtkfGr1XppLHBjq0?= =?us-ascii?Q?yfmIUCojW4M1freKEa08gkdA1E1kX5K+NIjewLHahNi9LLdZ8r6+Ua+em6bn?= =?us-ascii?Q?lIX/07JRQGryGCdWH3KozZUDm0Rb9hUrilqOkLhUlieCA9pxvpJGjqpppUtA?= =?us-ascii?Q?gW9jwMHhZGw1XIxnqNQt+q6AsKu0ZIt5wRvnIjXvnLLU+XqZW8kPDFm3NlGP?= =?us-ascii?Q?2EXL5e6U9fjjjIhgBI5PmMKuygNc9mOm+vwdY9BVMcCUgSQNJOCfRc6k2CMg?= =?us-ascii?Q?qX6j6I/RxkxnSsEf+AJG60zbDIc0DHJFRZA0LjNlS+YpiUc+YQ9vWYAScMhY?= =?us-ascii?Q?Hm8/dNIqZWGHlS3L0pm18GDCKT5Tg23yd2DytzNE8lp0sMmUDH4ZLi3mMnt6?= =?us-ascii?Q?RJTLtnJTf06jVsnSuAxuRXTLnZ7dLXSGVuS0amWxs0vxuWATDsUx/sCSAsqf?= =?us-ascii?Q?Ywzb+OtIXssqUyrlTTVqA3vBRqaZZEnT63ci/kJfyQW9zhmIzHwm4/eKSiNF?= =?us-ascii?Q?SQIWmXxhIDD0YazGfWN3hnatvb635mFuhRljVwHVYhQpPepiGxH8v5l9tJHC?= =?us-ascii?Q?dHml7zmxG+UySuRpZCGk9anFSuXijSnsZhqJDpjNwyNLQCSVJzB6bgIDqdH1?= =?us-ascii?Q?1IdCdGeX9HpV5wlt73X3BDaQ6/0I1XlwruHXaoN26gzPfS4AQB9PK/Nm5duD?= =?us-ascii?Q?FyCpvLCyxKAE4z0aP/72YgHcO+IjkN8Vn9ydH3OYI7kqAGdwAzWmiZx1G0kO?= =?us-ascii?Q?7hG1daAymBCR0myvhjotXjfK0hm9NQyGLhCj8ar6jagWUH9Yeh787OU1YWvB?= =?us-ascii?Q?v2kgT8N2netqpvLt90mG7vGIQdr1Dl4abN+0nAJ6J+OyTxJsPjdOQ4fspt7H?= =?us-ascii?Q?LtEuWBnMDbjWX7RyJ21gLmeQ5tuMwxLQyZoZLEWP7kVtnmvUj4rTam8vhk/G?= =?us-ascii?Q?B2evcE+qwsusJdDJZpAFDmAIL2vzOzXhSJXKC/hEBb+RSBqv4v3zGRFOsLb7?= =?us-ascii?Q?0RDWg0a0XAeopvjvYLr8kx7SsqKz4L1T8AVBtpaeWsgCH1lVtrNtcdaQ3nBl?= =?us-ascii?Q?pxtN/VOWs9ysK7QYkbyKTjlr8HEFVngdt+/GKZbtT+EftFbcclMOlBV0xbfc?= =?us-ascii?Q?KOWZRoc/H5hQJ8dOU8zQT3OCHtl5gaDOFW8ROnyUFQ7fluWasqpPlMV5sdTX?= =?us-ascii?Q?331jRBtofoLknQ4MoIepzIgW75Eo7HrAszY4tqjZ1P+hBcn9J0WYLPJ2v40e?= =?us-ascii?Q?9GLwFA8wSbhY2siCKRsYugKw/ayuoAM6W3fBcCf0fxCC2wVgHNxXITlEJ+uK?= =?us-ascii?Q?r0ChlTbzoVZ9PngsrOo2TM7MGUPzAshRv4NaUYhUa8OvwZFQRoa9HaKyVaSx?= =?us-ascii?Q?Cb6FXhskyom/e8FOxh/Q55BXc3MWwBqmRymYhLJarED5frBf7C+os1s5PeXh?= =?us-ascii?Q?I0ZOLKGi+fpTJHiS4MeUOaTkMUqytDqY5TtlCmv7KncyNluFiWhJjD1ugO0p?= =?us-ascii?Q?8Q45OOJtGSMC/3IEu8QU0Qo3klx+s9qUMQUVRRtjgZwiKfdxFsdms/BuI2Jv?= =?us-ascii?Q?5+Zsx3jJdtiwK7iJnGjqCsc=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: aaf6cf86-2274-4725-ce24-08de3d7f459e X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:37.2474 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8c8/bQ09WLncXZW6yLHE4ZTCm6nT5JvpYl3H4Ijrd8RmG8FIcAg/Yu4mEkB21/57dhKgyEywVZ3xv+T+1Lca8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add a new ntb_transport backend that uses a DesignWare eDMA engine located on the endpoint, to be driven by both host and endpoint. The endpoint exposes a dedicated memory window which contains the eDMA register block, a small control structure (struct ntb_edma_info) and per-channel linked-list (LL) rings for read channels. Endpoint drives its local eDMA write channels for its transmission, while host side uses the remote eDMA read channels for its transmission. A key benefit of this backend is that the memory window no longer needs to carry data-plane payload. This makes the design less sensitive to limited memory window space and allows scaling to multiple queue pairs. The memory window layout is specific to the eDMA-backed backend, so there is no automatic fallback to the memcpy-based default transport that requires the different layout. Signed-off-by: Koichiro Den --- drivers/ntb/Kconfig | 12 + drivers/ntb/Makefile | 2 + drivers/ntb/ntb_transport_core.c | 15 +- drivers/ntb/ntb_transport_edma.c | 987 +++++++++++++++++++++++++++ drivers/ntb/ntb_transport_internal.h | 15 + 5 files changed, 1029 insertions(+), 2 deletions(-) create mode 100644 drivers/ntb/ntb_transport_edma.c diff --git a/drivers/ntb/Kconfig b/drivers/ntb/Kconfig index df16c755b4da..5ba6d0b7f5ba 100644 --- a/drivers/ntb/Kconfig +++ b/drivers/ntb/Kconfig @@ -37,4 +37,16 @@ config NTB_TRANSPORT =20 If unsure, say N. =20 +config NTB_TRANSPORT_EDMA + bool "NTB Transport backed by remote eDMA" + depends on NTB_TRANSPORT + depends on PCI + select DMA_ENGINE + select NTB_EDMA + help + Enable a transport backend that uses a remote DesignWare eDMA engine + exposed through a dedicated NTB memory window. The host uses the + endpoint's eDMA engine to move data in both directions. + Say Y here if you intend to use the 'use_remote_edma' module parameter. + endif # NTB diff --git a/drivers/ntb/Makefile b/drivers/ntb/Makefile index 9b66e5fafbc0..b9086b32ecde 100644 --- a/drivers/ntb/Makefile +++ b/drivers/ntb/Makefile @@ -6,3 +6,5 @@ ntb-y :=3D core.o ntb-$(CONFIG_NTB_MSI) +=3D msi.o =20 ntb_transport-y :=3D ntb_transport_core.o +ntb_transport-$(CONFIG_NTB_TRANSPORT_EDMA) +=3D ntb_transport_edma.o +ntb_transport-$(CONFIG_NTB_TRANSPORT_EDMA) +=3D hw/edma/ntb_hw_edma.o diff --git a/drivers/ntb/ntb_transport_core.c b/drivers/ntb/ntb_transport_c= ore.c index 40c2548f5930..bd21232f26fe 100644 --- a/drivers/ntb/ntb_transport_core.c +++ b/drivers/ntb/ntb_transport_core.c @@ -104,6 +104,12 @@ module_param(use_msi, bool, 0644); MODULE_PARM_DESC(use_msi, "Use MSI interrupts instead of doorbells"); #endif =20 +bool use_remote_edma; +#ifdef CONFIG_NTB_TRANSPORT_EDMA +module_param(use_remote_edma, bool, 0644); +MODULE_PARM_DESC(use_remote_edma, "Use remote eDMA mode (when enabled, use= _msi is ignored)"); +#endif + static struct dentry *nt_debugfs_dir; =20 /* Only two-ports NTB devices are supported */ @@ -156,7 +162,7 @@ enum { #define drv_client(__drv) \ container_of((__drv), struct ntb_transport_client, driver) =20 -#define NTB_QP_DEF_NUM_ENTRIES 100 +#define NTB_QP_DEF_NUM_ENTRIES 128 #define NTB_LINK_DOWN_TIMEOUT 10 =20 static void ntb_transport_rxc_db(unsigned long data); @@ -1189,7 +1195,11 @@ static int ntb_transport_probe(struct ntb_client *se= lf, struct ntb_dev *ndev) =20 nt->ndev =3D ndev; =20 - rc =3D ntb_transport_default_init(nt); + if (use_remote_edma) + rc =3D ntb_transport_edma_init(nt); + else + rc =3D ntb_transport_default_init(nt); + if (rc) return rc; =20 @@ -1950,6 +1960,7 @@ ntb_transport_create_queue(void *data, struct device = *client_dev, =20 nt->qp_bitmap_free &=3D ~qp_bit; =20 + qp->qp_bit =3D qp_bit; qp->cb_data =3D data; qp->rx_handler =3D handlers->rx_handler; qp->tx_handler =3D handlers->tx_handler; diff --git a/drivers/ntb/ntb_transport_edma.c b/drivers/ntb/ntb_transport_e= dma.c new file mode 100644 index 000000000000..6ae5da0a1367 --- /dev/null +++ b/drivers/ntb/ntb_transport_edma.c @@ -0,0 +1,987 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * NTB transport backend for remote DesignWare eDMA. + * + * This implements the backend_ops used when use_remote_edma=3D1 and + * relies on drivers/ntb/hw/edma/ for low-level eDMA/MW programming. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hw/edma/ntb_hw_edma.h" +#include "ntb_transport_internal.h" + +#define NTB_EDMA_RING_ORDER 7 +#define NTB_EDMA_RING_ENTRIES (1U << NTB_EDMA_RING_ORDER) +#define NTB_EDMA_RING_MASK (NTB_EDMA_RING_ENTRIES - 1) + +#define NTB_EDMA_MAX_POLL 32 + +/* + * Remote eDMA mode implementation + */ +struct ntb_transport_ctx_edma { + remote_edma_mode_t remote_edma_mode; + struct device *dma_dev; + struct workqueue_struct *wq; + struct ntb_edma_chans chans; +}; + +struct ntb_transport_qp_edma { + struct ntb_transport_qp *qp; + + /* + * For ensuring peer notification in non-atomic context. + * ntb_peer_db_set might sleep or schedule. + */ + struct work_struct db_work; + + u32 rx_prod; + u32 rx_cons; + u32 tx_cons; + u32 tx_issue; + + spinlock_t rx_lock; + spinlock_t tx_lock; + + struct work_struct rx_work; + struct work_struct tx_work; +}; + +struct ntb_edma_desc { + u32 len; + u32 flags; + u64 addr; /* DMA address */ + u64 data; +}; + +struct ntb_edma_ring { + struct ntb_edma_desc desc[NTB_EDMA_RING_ENTRIES]; + u32 head; + u32 tail; +}; + +static inline bool ntb_qp_edma_is_rc(struct ntb_transport_qp *qp) +{ + struct ntb_transport_ctx_edma *ctx =3D qp->transport->priv; + + return ctx->remote_edma_mode =3D=3D REMOTE_EDMA_RC; +} + +static inline bool ntb_qp_edma_is_ep(struct ntb_transport_qp *qp) +{ + struct ntb_transport_ctx_edma *ctx =3D qp->transport->priv; + + return ctx->remote_edma_mode =3D=3D REMOTE_EDMA_EP; +} + +static inline bool ntb_qp_edma_enabled(struct ntb_transport_qp *qp) +{ + return ntb_qp_edma_is_rc(qp) || ntb_qp_edma_is_ep(qp); +} + +static inline unsigned int ntb_edma_ring_sel(struct ntb_transport_qp *qp, + unsigned int n) +{ + return n ^ !!ntb_qp_edma_is_ep(qp); +} + +static inline struct ntb_edma_ring * +ntb_edma_ring_local(struct ntb_transport_qp *qp, unsigned int n) +{ + unsigned int r =3D ntb_edma_ring_sel(qp, n); + + return &((struct ntb_edma_ring *)qp->rx_buff)[r]; +} + +static inline struct ntb_edma_ring __iomem * +ntb_edma_ring_remote(struct ntb_transport_qp *qp, unsigned int n) +{ + unsigned int r =3D ntb_edma_ring_sel(qp, n); + + return &((struct ntb_edma_ring __iomem *)qp->tx_mw)[r]; +} + +static inline struct ntb_edma_desc * +ntb_edma_desc_local(struct ntb_transport_qp *qp, unsigned int n, unsigned = int i) +{ + return &ntb_edma_ring_local(qp, n)->desc[i]; +} + +static inline struct ntb_edma_desc __iomem * +ntb_edma_desc_remote(struct ntb_transport_qp *qp, unsigned int n, + unsigned int i) +{ + return &ntb_edma_ring_remote(qp, n)->desc[i]; +} + +static inline u32 *ntb_edma_head_local(struct ntb_transport_qp *qp, + unsigned int n) +{ + return &ntb_edma_ring_local(qp, n)->head; +} + +static inline u32 __iomem *ntb_edma_head_remote(struct ntb_transport_qp *q= p, + unsigned int n) +{ + return &ntb_edma_ring_remote(qp, n)->head; +} + +static inline u32 *ntb_edma_tail_local(struct ntb_transport_qp *qp, + unsigned int n) +{ + return &ntb_edma_ring_local(qp, n)->tail; +} + +static inline u32 __iomem *ntb_edma_tail_remote(struct ntb_transport_qp *q= p, + unsigned int n) +{ + return &ntb_edma_ring_remote(qp, n)->tail; +} + +/* The 'i' must be generated by ntb_edma_ring_idx() */ +#define NTB_DESC_TX_O(qp, i) ntb_edma_desc_remote(qp, 0, i) +#define NTB_DESC_TX_I(qp, i) ntb_edma_desc_local(qp, 0, i) +#define NTB_DESC_RX_O(qp, i) ntb_edma_desc_remote(qp, 1, i) +#define NTB_DESC_RX_I(qp, i) ntb_edma_desc_local(qp, 1, i) + +#define NTB_HEAD_TX_I(qp) ntb_edma_head_local(qp, 0) +#define NTB_HEAD_RX_O(qp) ntb_edma_head_remote(qp, 1) + +#define NTB_TAIL_TX_O(qp) ntb_edma_tail_remote(qp, 0) +#define NTB_TAIL_RX_I(qp) ntb_edma_tail_local(qp, 1) + +/* ntb_edma_ring helpers */ +static __always_inline u32 ntb_edma_ring_idx(u32 v) +{ + return v & NTB_EDMA_RING_MASK; +} + +static __always_inline u32 ntb_edma_ring_used_entry(u32 head, u32 tail) +{ + if (head >=3D tail) { + WARN_ON_ONCE((head - tail) > (NTB_EDMA_RING_ENTRIES - 1)); + return head - tail; + } + + WARN_ON_ONCE((U32_MAX - tail + head + 1) > (NTB_EDMA_RING_ENTRIES - 1)); + return U32_MAX - tail + head + 1; +} + +static __always_inline u32 ntb_edma_ring_free_entry(u32 head, u32 tail) +{ + return NTB_EDMA_RING_ENTRIES - ntb_edma_ring_used_entry(head, tail) - 1; +} + +static __always_inline bool ntb_edma_ring_full(u32 head, u32 tail) +{ + return ntb_edma_ring_free_entry(head, tail) =3D=3D 0; +} + +static unsigned int ntb_transport_edma_tx_free_entry(struct ntb_transport_= qp *qp) +{ + struct ntb_transport_qp_edma *edma =3D qp->priv; + unsigned int head, tail; + + scoped_guard(spinlock_irqsave, &edma->tx_lock) { + /* In this scope, only 'head' might proceed */ + tail =3D READ_ONCE(edma->tx_issue); + head =3D READ_ONCE(*NTB_HEAD_TX_I(qp)); + } + /* + * 'used' amount indicates how much the other end has refilled, + * which are available for us to use for TX. + */ + return ntb_edma_ring_used_entry(head, tail); +} + +static void ntb_transport_edma_debugfs_stats_show(struct seq_file *s, + struct ntb_transport_qp *qp) +{ + seq_printf(s, "rx_bytes - \t%llu\n", qp->rx_bytes); + seq_printf(s, "rx_pkts - \t%llu\n", qp->rx_pkts); + seq_printf(s, "rx_err_no_buf - %llu\n", qp->rx_err_no_buf); + seq_printf(s, "rx_buff - \t0x%p\n", qp->rx_buff); + seq_printf(s, "rx_max_entry - \t%u\n", qp->rx_max_entry); + seq_printf(s, "rx_alloc_entry - \t%u\n\n", qp->rx_alloc_entry); + + seq_printf(s, "tx_bytes - \t%llu\n", qp->tx_bytes); + seq_printf(s, "tx_pkts - \t%llu\n", qp->tx_pkts); + seq_printf(s, "tx_ring_full - \t%llu\n", qp->tx_ring_full); + seq_printf(s, "tx_err_no_buf - %llu\n", qp->tx_err_no_buf); + seq_printf(s, "tx_mw - \t0x%p\n", qp->tx_mw); + seq_printf(s, "tx_max_entry - \t%u\n", qp->tx_max_entry); + seq_printf(s, "free tx - \t%u\n", ntb_transport_tx_free_entry(qp)); + seq_putc(s, '\n'); + + seq_puts(s, "Using Remote eDMA - Yes\n"); + seq_printf(s, "QP Link - \t%s\n", qp->link_is_up ? "Up" : "Down"); +} + +static void ntb_transport_edma_uninit(struct ntb_transport_ctx *nt) +{ + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + + if (ctx->wq) + destroy_workqueue(ctx->wq); + ctx->wq =3D NULL; + + ntb_edma_teardown_chans(&ctx->chans); + + switch (ctx->remote_edma_mode) { + case REMOTE_EDMA_EP: + ntb_edma_teardown_mws(nt->ndev); + break; + case REMOTE_EDMA_RC: + ntb_edma_teardown_peer(nt->ndev); + break; + case REMOTE_EDMA_UNKNOWN: + default: + break; + } + + ctx->remote_edma_mode =3D REMOTE_EDMA_UNKNOWN; +} + +static void ntb_transport_edma_db_work(struct work_struct *work) +{ + struct ntb_transport_qp_edma *edma =3D + container_of(work, struct ntb_transport_qp_edma, db_work); + struct ntb_transport_qp *qp =3D edma->qp; + + ntb_peer_db_set(qp->ndev, qp->qp_bit); +} + +static void ntb_transport_edma_notify_peer(struct ntb_transport_qp_edma *e= dma) +{ + struct ntb_transport_qp *qp =3D edma->qp; + struct ntb_transport_ctx_edma *ctx =3D qp->transport->priv; + + if (!ntb_edma_notify_peer(&ctx->chans, qp->qp_num)) + return; + + /* + * Called from contexts that may be atomic. Since ntb_peer_db_set() + * may sleep, delegate the actual doorbell write to a workqueue. + */ + queue_work(system_highpri_wq, &edma->db_work); +} + +static void ntb_transport_edma_isr(void *data, int qp_num) +{ + struct ntb_transport_ctx *nt =3D data; + struct ntb_transport_qp_edma *edma; + struct ntb_transport_ctx_edma *ctx; + struct ntb_transport_qp *qp; + + if (qp_num < 0 || qp_num >=3D nt->qp_count) + return; + + qp =3D &nt->qp_vec[qp_num]; + if (WARN_ON(!qp)) + return; + + ctx =3D (struct ntb_transport_ctx_edma *)qp->transport->priv; + edma =3D qp->priv; + + queue_work(ctx->wq, &edma->rx_work); + queue_work(ctx->wq, &edma->tx_work); +} + +static int ntb_transport_edma_rc_init(struct ntb_transport_ctx *nt) +{ + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + struct ntb_dev *ndev =3D nt->ndev; + struct pci_dev *pdev =3D ndev->pdev; + int peer_mw; + int rc; + + if (!use_remote_edma || ctx->remote_edma_mode !=3D REMOTE_EDMA_UNKNOWN) + return 0; + + peer_mw =3D ntb_peer_mw_count(ndev); + if (peer_mw <=3D 0) + return -ENODEV; + + rc =3D ntb_edma_setup_peer(ndev, peer_mw - 1, nt->qp_count); + if (rc) { + dev_err(&pdev->dev, "Failed to enable remote eDMA: %d\n", rc); + return rc; + } + + rc =3D ntb_edma_setup_chans(get_dma_dev(ndev), &ctx->chans, true); + if (rc) { + dev_err(&pdev->dev, "Failed to setup eDMA channels: %d\n", rc); + goto err_teardown_peer; + } + + rc =3D ntb_edma_setup_intr_chan(get_dma_dev(ndev), &ctx->chans); + if (rc) { + dev_err(&pdev->dev, "Failed to setup eDMA notify channel: %d\n", + rc); + goto err_teardown_chans; + } + + ctx->remote_edma_mode =3D REMOTE_EDMA_RC; + return 0; + +err_teardown_chans: + ntb_edma_teardown_chans(&ctx->chans); +err_teardown_peer: + ntb_edma_teardown_peer(ndev); + return rc; +} + + +static int ntb_transport_edma_ep_init(struct ntb_transport_ctx *nt) +{ + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + struct ntb_dev *ndev =3D nt->ndev; + struct pci_dev *pdev =3D ndev->pdev; + int peer_mw; + int rc; + + if (!use_remote_edma || ctx->remote_edma_mode =3D=3D REMOTE_EDMA_EP) + return 0; + + /** + * This check assumes that the endpoint (pci-epf-vntb.c) + * ntb_dev_ops implements .get_private_data() while the host side + * (ntb_hw_epf.c) does not. + */ + if (!ntb_get_private_data(ndev)) + return 0; + + peer_mw =3D ntb_peer_mw_count(ndev); + if (peer_mw <=3D 0) + return -ENODEV; + + rc =3D ntb_edma_setup_mws(ndev, peer_mw - 1, nt->qp_count, + ntb_transport_edma_isr, nt); + if (rc) { + dev_err(&pdev->dev, + "Failed to set up memory window for eDMA: %d\n", rc); + return rc; + } + + rc =3D ntb_edma_setup_chans(get_dma_dev(ndev), &ctx->chans, false); + if (rc) { + dev_err(&pdev->dev, "Failed to setup eDMA channels: %d\n", rc); + ntb_edma_teardown_mws(ndev); + return rc; + } + + ctx->remote_edma_mode =3D REMOTE_EDMA_EP; + return 0; +} + + +static int ntb_transport_edma_setup_qp_mw(struct ntb_transport_ctx *nt, + unsigned int qp_num) +{ + struct ntb_transport_qp *qp =3D &nt->qp_vec[qp_num]; + struct ntb_dev *ndev =3D nt->ndev; + struct ntb_queue_entry *entry; + struct ntb_transport_mw *mw; + unsigned int mw_num, mw_count, qp_count; + unsigned int qp_offset, rx_info_offset; + unsigned int mw_size, mw_size_per_qp; + unsigned int num_qps_mw; + size_t edma_total; + unsigned int i; + int node; + + mw_count =3D nt->mw_count; + qp_count =3D nt->qp_count; + + mw_num =3D QP_TO_MW(nt, qp_num); + mw =3D &nt->mw_vec[mw_num]; + + if (!mw->virt_addr) + return -ENOMEM; + + if (mw_num < qp_count % mw_count) + num_qps_mw =3D qp_count / mw_count + 1; + else + num_qps_mw =3D qp_count / mw_count; + + mw_size =3D min(nt->mw_vec[mw_num].phys_size, mw->xlat_size); + if (max_mw_size && mw_size > max_mw_size) + mw_size =3D max_mw_size; + + mw_size_per_qp =3D round_down((unsigned int)mw_size / num_qps_mw, SZ_64); + qp_offset =3D mw_size_per_qp * (qp_num / mw_count); + rx_info_offset =3D mw_size_per_qp - sizeof(struct ntb_rx_info); + + qp->tx_mw_size =3D mw_size_per_qp; + qp->tx_mw =3D nt->mw_vec[mw_num].vbase + qp_offset; + if (!qp->tx_mw) + return -EINVAL; + qp->tx_mw_phys =3D nt->mw_vec[mw_num].phys_addr + qp_offset; + if (!qp->tx_mw_phys) + return -EINVAL; + qp->rx_info =3D qp->tx_mw + rx_info_offset; + qp->rx_buff =3D mw->virt_addr + qp_offset; + qp->remote_rx_info =3D qp->rx_buff + rx_info_offset; + + /* Due to housekeeping, there must be at least 2 buffs */ + qp->tx_max_frame =3D min(transport_mtu, mw_size_per_qp / 2); + qp->rx_max_frame =3D min(transport_mtu, mw_size_per_qp / 2); + + /* In eDMA mode, decouple from MW sizing and force ring-sized entries */ + edma_total =3D 2 * sizeof(struct ntb_edma_ring); + if (rx_info_offset < edma_total) { + dev_err(&ndev->dev, "Ring space requires %zuB (>=3D%uB)\n", + edma_total, rx_info_offset); + return -EINVAL; + } + qp->tx_max_entry =3D NTB_EDMA_RING_ENTRIES; + qp->rx_max_entry =3D NTB_EDMA_RING_ENTRIES; + + /* + * Checking to see if we have more entries than the default. + * We should add additional entries if that is the case so we + * can be in sync with the transport frames. + */ + node =3D dev_to_node(&ndev->dev); + for (i =3D qp->rx_alloc_entry; i < qp->rx_max_entry; i++) { + entry =3D kzalloc_node(sizeof(*entry), GFP_KERNEL, node); + if (!entry) + return -ENOMEM; + + entry->qp =3D qp; + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, + &qp->rx_free_q); + qp->rx_alloc_entry++; + } + + memset(qp->rx_buff, 0, edma_total); + + qp->rx_pkts =3D 0; + qp->tx_pkts =3D 0; + + return 0; +} + +static int ntb_transport_edma_rx_complete(struct ntb_transport_qp *qp) +{ + struct device *dma_dev =3D get_dma_dev(qp->ndev); + struct ntb_transport_qp_edma *edma =3D qp->priv; + struct ntb_queue_entry *entry; + struct ntb_edma_desc *in; + unsigned int len; + bool link_down; + u32 idx; + + if (ntb_edma_ring_used_entry(READ_ONCE(*NTB_TAIL_RX_I(qp)), + edma->rx_cons) =3D=3D 0) + return 0; + + idx =3D ntb_edma_ring_idx(edma->rx_cons); + in =3D NTB_DESC_RX_I(qp, idx); + if (!(in->flags & DESC_DONE_FLAG)) + return 0; + + link_down =3D in->flags & LINK_DOWN_FLAG; + in->flags =3D 0; + len =3D in->len; /* might be smaller than entry->len */ + + entry =3D (struct ntb_queue_entry *)(uintptr_t)in->data; + if (WARN_ON(!entry)) + return 0; + + if (link_down) { + ntb_qp_link_down(qp); + edma->rx_cons++; + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_free_q); + return 1; + } + + dma_unmap_single(dma_dev, entry->addr, entry->len, DMA_FROM_DEVICE); + + qp->rx_bytes +=3D len; + qp->rx_pkts++; + edma->rx_cons++; + + if (qp->rx_handler && qp->client_ready) + qp->rx_handler(qp, qp->cb_data, entry->cb_data, len); + + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_free_q); + return 1; +} + +static void ntb_transport_edma_rx_work(struct work_struct *work) +{ + struct ntb_transport_qp_edma *edma =3D container_of( + work, struct ntb_transport_qp_edma, rx_work); + struct ntb_transport_qp *qp =3D edma->qp; + struct ntb_transport_ctx_edma *ctx =3D qp->transport->priv; + unsigned int i; + + for (i =3D 0; i < NTB_EDMA_MAX_POLL; i++) { + if (!ntb_transport_edma_rx_complete(qp)) + break; + } + + if (ntb_transport_edma_rx_complete(qp)) + queue_work(ctx->wq, &edma->rx_work); +} + +static void ntb_transport_edma_tx_work(struct work_struct *work) +{ + struct ntb_transport_qp_edma *edma =3D container_of( + work, struct ntb_transport_qp_edma, tx_work); + struct ntb_transport_qp *qp =3D edma->qp; + struct ntb_edma_desc *in, __iomem *out; + struct ntb_queue_entry *entry; + unsigned int len; + void *cb_data; + u32 idx; + + while (ntb_edma_ring_used_entry(READ_ONCE(edma->tx_issue), + edma->tx_cons) !=3D 0) { + /* Paired with smp_wmb() in ntb_transport_edma_tx_enqueue_inner() */ + smp_rmb(); + + idx =3D ntb_edma_ring_idx(edma->tx_cons); + in =3D NTB_DESC_TX_I(qp, idx); + entry =3D (struct ntb_queue_entry *)(uintptr_t)in->data; + if (!entry || !(entry->flags & DESC_DONE_FLAG)) + break; + + in->data =3D 0; + + cb_data =3D entry->cb_data; + len =3D entry->len; + + out =3D NTB_DESC_TX_O(qp, idx); + + WRITE_ONCE(edma->tx_cons, edma->tx_cons + 1); + + /* + * No need to add barrier in-between to enforce ordering here. + * The other side proceeds only after both flags and tail are + * updated. + */ + iowrite32(entry->flags, &out->flags); + iowrite32(edma->tx_cons, NTB_TAIL_TX_O(qp)); + + ntb_transport_edma_notify_peer(edma); + + ntb_list_add(&qp->ntb_tx_free_q_lock, &entry->entry, + &qp->tx_free_q); + + if (qp->tx_handler) + qp->tx_handler(qp, qp->cb_data, cb_data, len); + + /* stat updates */ + qp->tx_bytes +=3D len; + qp->tx_pkts++; + } +} + +static void ntb_transport_edma_tx_cb(void *data, + const struct dmaengine_result *res) +{ + struct ntb_queue_entry *entry =3D data; + struct ntb_transport_qp *qp =3D entry->qp; + struct ntb_transport_ctx *nt =3D qp->transport; + struct device *dma_dev =3D get_dma_dev(qp->ndev); + enum dmaengine_tx_result dma_err =3D res->result; + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + struct ntb_transport_qp_edma *edma =3D qp->priv; + + switch (dma_err) { + case DMA_TRANS_READ_FAILED: + case DMA_TRANS_WRITE_FAILED: + case DMA_TRANS_ABORTED: + entry->errors++; + entry->len =3D -EIO; + break; + case DMA_TRANS_NOERROR: + default: + break; + } + dma_unmap_sg(dma_dev, &entry->sgl, 1, DMA_TO_DEVICE); + sg_dma_address(&entry->sgl) =3D 0; + + entry->flags |=3D DESC_DONE_FLAG; + + queue_work(ctx->wq, &edma->tx_work); +} + +static int ntb_transport_edma_submit(struct device *d, struct dma_chan *ch= an, + size_t len, void *rc_src, dma_addr_t dst, + struct ntb_queue_entry *entry) +{ + struct scatterlist *sgl =3D &entry->sgl; + struct dma_async_tx_descriptor *txd; + struct dma_slave_config cfg; + dma_cookie_t cookie; + int nents, rc; + + if (!d) + return -ENODEV; + + if (!chan) + return -ENXIO; + + if (WARN_ON(!rc_src || !dst)) + return -EINVAL; + + if (WARN_ON(sg_dma_address(sgl))) + return -EINVAL; + + sg_init_one(sgl, rc_src, len); + nents =3D dma_map_sg(d, sgl, 1, DMA_TO_DEVICE); + if (nents <=3D 0) + return -EIO; + + memset(&cfg, 0, sizeof(cfg)); + cfg.dst_addr =3D dst; + cfg.src_addr_width =3D DMA_SLAVE_BUSWIDTH_4_BYTES; + cfg.dst_addr_width =3D DMA_SLAVE_BUSWIDTH_4_BYTES; + cfg.direction =3D DMA_MEM_TO_DEV; + + txd =3D dmaengine_prep_slave_sg_config(chan, sgl, 1, DMA_MEM_TO_DEV, + DMA_CTRL_ACK | DMA_PREP_INTERRUPT, &cfg); + if (!txd) { + rc =3D -EIO; + goto out_unmap; + } + + txd->callback_result =3D ntb_transport_edma_tx_cb; + txd->callback_param =3D entry; + + cookie =3D dmaengine_submit(txd); + if (dma_submit_error(cookie)) { + rc =3D -EIO; + goto out_unmap; + } + dma_async_issue_pending(chan); + return 0; +out_unmap: + dma_unmap_sg(d, sgl, 1, DMA_TO_DEVICE); + return rc; +} + +static int ntb_transport_edma_tx_enqueue_inner(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry) +{ + struct device *dma_dev =3D get_dma_dev(qp->ndev); + struct ntb_transport_qp_edma *edma =3D qp->priv; + struct ntb_transport_ctx *nt =3D qp->transport; + struct ntb_edma_desc *in, __iomem *out; + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + unsigned int len =3D entry->len; + struct dma_chan *chan; + u32 issue, idx, head; + dma_addr_t dst; + int rc; + + WARN_ON_ONCE(entry->flags & DESC_DONE_FLAG); + + scoped_guard(spinlock_irqsave, &edma->tx_lock) { + head =3D READ_ONCE(*NTB_HEAD_TX_I(qp)); + issue =3D edma->tx_issue; + if (ntb_edma_ring_used_entry(head, issue) =3D=3D 0) { + qp->tx_ring_full++; + return -ENOSPC; + } + + /* + * ntb_transport_edma_tx_work() checks entry->flags + * so it needs to be set before tx_issue++. + */ + idx =3D ntb_edma_ring_idx(issue); + in =3D NTB_DESC_TX_I(qp, idx); + in->data =3D (uintptr_t)entry; + + /* Make in->data visible before tx_issue++ */ + smp_wmb(); + + WRITE_ONCE(edma->tx_issue, edma->tx_issue + 1); + } + + /* Publish the final transfer length to the other end */ + out =3D NTB_DESC_TX_O(qp, idx); + iowrite32(len, &out->len); + ioread32(&out->len); + + if (unlikely(!len)) { + entry->flags |=3D DESC_DONE_FLAG; + queue_work(ctx->wq, &edma->tx_work); + return 0; + } + + /* Paired with dma_wmb() in ntb_transport_edma_rx_enqueue_inner() */ + dma_rmb(); + + /* kick remote eDMA read transfer */ + dst =3D (dma_addr_t)in->addr; + chan =3D ntb_edma_pick_chan(&ctx->chans, qp->qp_num); + rc =3D ntb_transport_edma_submit(dma_dev, chan, len, + entry->buf, dst, entry); + if (rc) { + entry->errors++; + entry->len =3D -EIO; + entry->flags |=3D DESC_DONE_FLAG; + queue_work(ctx->wq, &edma->tx_work); + } + return 0; +} + +static int ntb_transport_edma_tx_enqueue(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry, + void *cb, void *data, unsigned int len, + unsigned int flags) +{ + struct device *dma_dev; + + if (entry->addr) { + /* Deferred unmap */ + dma_dev =3D get_dma_dev(qp->ndev); + dma_unmap_single(dma_dev, entry->addr, entry->len, + DMA_TO_DEVICE); + } + + entry->cb_data =3D cb; + entry->buf =3D data; + entry->len =3D len; + entry->flags =3D flags; + entry->errors =3D 0; + entry->addr =3D 0; + + WARN_ON_ONCE(!ntb_qp_edma_enabled(qp)); + + return ntb_transport_edma_tx_enqueue_inner(qp, entry); +} + +static int ntb_transport_edma_rx_enqueue_inner(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry) +{ + struct device *dma_dev =3D get_dma_dev(qp->ndev); + struct ntb_transport_qp_edma *edma =3D qp->priv; + struct ntb_edma_desc *in, __iomem *out; + unsigned int len =3D entry->len; + void *data =3D entry->buf; + dma_addr_t dst; + u32 idx; + int rc; + + dst =3D dma_map_single(dma_dev, data, len, DMA_FROM_DEVICE); + rc =3D dma_mapping_error(dma_dev, dst); + if (rc) + return rc; + + guard(spinlock_bh)(&edma->rx_lock); + + if (ntb_edma_ring_full(READ_ONCE(edma->rx_prod), + READ_ONCE(edma->rx_cons))) { + rc =3D -ENOSPC; + goto out_unmap; + } + + idx =3D ntb_edma_ring_idx(edma->rx_prod); + in =3D NTB_DESC_RX_I(qp, idx); + out =3D NTB_DESC_RX_O(qp, idx); + + iowrite32(len, &out->len); + iowrite64(dst, &out->addr); + + WARN_ON(in->flags & DESC_DONE_FLAG); + in->data =3D (uintptr_t)entry; + entry->addr =3D dst; + + /* Ensure len/addr are visible before the head update */ + dma_wmb(); + + WRITE_ONCE(edma->rx_prod, edma->rx_prod + 1); + iowrite32(edma->rx_prod, NTB_HEAD_RX_O(qp)); + + return 0; +out_unmap: + dma_unmap_single(dma_dev, dst, len, DMA_FROM_DEVICE); + return rc; +} + +static int ntb_transport_edma_rx_enqueue(struct ntb_transport_qp *qp, + struct ntb_queue_entry *entry) +{ + int rc; + + rc =3D ntb_transport_edma_rx_enqueue_inner(qp, entry); + if (rc) { + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, + &qp->rx_free_q); + return rc; + } + + ntb_list_add(&qp->ntb_rx_q_lock, &entry->entry, &qp->rx_pend_q); + + if (qp->active) + tasklet_schedule(&qp->rxc_db_work); + + return 0; +} + +static void ntb_transport_edma_rx_poll(struct ntb_transport_qp *qp) +{ + struct ntb_transport_ctx *nt =3D qp->transport; + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + struct ntb_transport_qp_edma *edma =3D qp->priv; + + queue_work(ctx->wq, &edma->rx_work); + queue_work(ctx->wq, &edma->tx_work); +} + +static int ntb_transport_edma_qp_init(struct ntb_transport_ctx *nt, + unsigned int qp_num) +{ + struct ntb_transport_qp *qp =3D &nt->qp_vec[qp_num]; + struct ntb_transport_qp_edma *edma; + struct ntb_dev *ndev =3D nt->ndev; + int node; + + node =3D dev_to_node(&ndev->dev); + + qp->priv =3D kzalloc_node(sizeof(*edma), GFP_KERNEL, node); + if (!qp->priv) + return -ENOMEM; + + edma =3D (struct ntb_transport_qp_edma *)qp->priv; + edma->qp =3D qp; + edma->rx_prod =3D 0; + edma->rx_cons =3D 0; + edma->tx_cons =3D 0; + edma->tx_issue =3D 0; + + spin_lock_init(&edma->rx_lock); + spin_lock_init(&edma->tx_lock); + + INIT_WORK(&edma->db_work, ntb_transport_edma_db_work); + INIT_WORK(&edma->rx_work, ntb_transport_edma_rx_work); + INIT_WORK(&edma->tx_work, ntb_transport_edma_tx_work); + + return 0; +} + +static void ntb_transport_edma_qp_free(struct ntb_transport_qp *qp) +{ + struct ntb_transport_qp_edma *edma =3D qp->priv; + + cancel_work_sync(&edma->db_work); + cancel_work_sync(&edma->rx_work); + cancel_work_sync(&edma->tx_work); + + kfree(qp->priv); +} + +static int ntb_transport_edma_pre_link_up(struct ntb_transport_ctx *nt) +{ + struct ntb_dev *ndev =3D nt->ndev; + struct pci_dev *pdev =3D ndev->pdev; + int rc; + + rc =3D ntb_transport_edma_ep_init(nt); + if (rc) + dev_err(&pdev->dev, "Failed to init EP: %d\n", rc); + + return rc; +} + +static int ntb_transport_edma_post_link_up(struct ntb_transport_ctx *nt) +{ + struct ntb_dev *ndev =3D nt->ndev; + struct pci_dev *pdev =3D ndev->pdev; + int rc; + + rc =3D ntb_transport_edma_rc_init(nt); + if (rc) + dev_err(&pdev->dev, "Failed to init RC: %d\n", rc); + + return rc; +} + +static int ntb_transport_edma_enable(struct ntb_transport_ctx *nt, + unsigned int *mw_count) +{ + struct ntb_dev *ndev =3D nt->ndev; + struct ntb_transport_ctx_edma *ctx =3D nt->priv; + + if (!use_remote_edma) + return 0; + + /* + * We need at least one MW for the transport plus one MW reserved + * for the remote eDMA window (see ntb_edma_setup_mws/peer). + */ + if (*mw_count <=3D 1) { + dev_err(&ndev->dev, + "remote eDMA requires at least two MWS (have %u)\n", + *mw_count); + return -ENODEV; + } + + ctx->wq =3D alloc_workqueue("ntb-edma-wq", WQ_UNBOUND | WQ_SYSFS, 0); + if (!ctx->wq) { + ntb_transport_edma_uninit(nt); + return -ENOMEM; + } + + /* Reserve the last peer MW exclusively for the eDMA window. */ + *mw_count -=3D 1; + + return 0; +} + +static void ntb_transport_edma_disable(struct ntb_transport_ctx *nt) +{ + ntb_transport_edma_uninit(nt); +} + +static const struct ntb_transport_backend_ops edma_backend_ops =3D { + .enable =3D ntb_transport_edma_enable, + .disable =3D ntb_transport_edma_disable, + .qp_init =3D ntb_transport_edma_qp_init, + .qp_free =3D ntb_transport_edma_qp_free, + .pre_link_up =3D ntb_transport_edma_pre_link_up, + .post_link_up =3D ntb_transport_edma_post_link_up, + .setup_qp_mw =3D ntb_transport_edma_setup_qp_mw, + .tx_free_entry =3D ntb_transport_edma_tx_free_entry, + .tx_enqueue =3D ntb_transport_edma_tx_enqueue, + .rx_enqueue =3D ntb_transport_edma_rx_enqueue, + .rx_poll =3D ntb_transport_edma_rx_poll, + .debugfs_stats_show =3D ntb_transport_edma_debugfs_stats_show, +}; + +int ntb_transport_edma_init(struct ntb_transport_ctx *nt) +{ + struct ntb_dev *ndev =3D nt->ndev; + int node; + + node =3D dev_to_node(&ndev->dev); + nt->priv =3D kzalloc_node(sizeof(struct ntb_transport_ctx_edma), GFP_KERN= EL, + node); + if (!nt->priv) + return -ENOMEM; + + nt->backend_ops =3D edma_backend_ops; + /* + * On remote eDMA mode, one DMA read channel is used for Host side + * to interrupt EP. + */ + use_msi =3D false; + return 0; +} diff --git a/drivers/ntb/ntb_transport_internal.h b/drivers/ntb/ntb_transpo= rt_internal.h index 51ff08062d73..9fff65980d3d 100644 --- a/drivers/ntb/ntb_transport_internal.h +++ b/drivers/ntb/ntb_transport_internal.h @@ -8,6 +8,7 @@ extern unsigned long max_mw_size; extern unsigned int transport_mtu; extern bool use_msi; +extern bool use_remote_edma; =20 #define QP_TO_MW(nt, qp) ((qp) % nt->mw_count) =20 @@ -29,6 +30,11 @@ struct ntb_queue_entry { struct ntb_payload_header __iomem *tx_hdr; struct ntb_payload_header *rx_hdr; }; + +#ifdef CONFIG_NTB_TRANSPORT_EDMA + dma_addr_t addr; + struct scatterlist sgl; +#endif }; =20 struct ntb_rx_info { @@ -202,4 +208,13 @@ int ntb_transport_init_queue(struct ntb_transport_ctx = *nt, unsigned int qp_num); struct device *get_dma_dev(struct ntb_dev *ndev); =20 +#ifdef CONFIG_NTB_TRANSPORT_EDMA +int ntb_transport_edma_init(struct ntb_transport_ctx *nt); +#else +static inline int ntb_transport_edma_init(struct ntb_transport_ctx *nt) +{ + return -EOPNOTSUPP; +} +#endif /* CONFIG_NTB_TRANSPORT_EDMA */ + #endif /* _NTB_TRANSPORT_INTERNAL_H_ */ --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010024.outbound.protection.outlook.com [52.101.229.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5622034C986; Wed, 17 Dec 2025 16:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990289; cv=fail; b=uH0IcDTdumiHbgmDMwkhZ5kJkIEU6LSD2paaaPXXWWfD6EyjD7UF97jKOqxhmR0UTKkd0b71fNSZDLDspP+XooJHlA9ZUZPUqK7jOVs4n3xBhYDUCID+kjVGAep6aOMTIZCbFRaVYE8e5xN/+RUG3LTjrPaVORrpZ/NFnEk9wtA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765990289; c=relaxed/simple; bh=8/qQNmtlnXto+tyqn4YMVyv35slMxXS48SuROZp6/as=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=IiopoQHnXqbQNrG9Xt+Uh2QD8ULd57jtMp2ipncHxs0F+UmIyXEtAm1suas1wWEFj4LrvSDsQt/Bq0Km2ufY5/SVJR9DnT4cuaQ5B3TYANmUQZ+72wFGyREGiqG7mQV4C+qFutfC2+kZMMJkc0ZGQIt4aq7ig+COY4j0uH0muk4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=Gc9MiSa2; arc=fail smtp.client-ip=52.101.229.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="Gc9MiSa2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XHD8cods0irIIy09MyOugNPY6GA9FcP0QdcezMFDHXq1vQJH92IR7enu2LS8ywJvrlvhOGCS5WqIKAlIvubO7IeSLov79P3aujA1coLEpv/XqoPQam8XhMbjkO4ARM0G7Am6b7H4JRwNtyujTLs9wKS7xIfdfCo181a03A2v60V88crTJG5px/iR34Wv8X+/+MoD9Q/zmuVrTa3RTezXxnTkyB8VPt2qyeSiTHU5beFjqvS96mbs41Osmofv7bZOgnkwLrkhUtRZU3/7Xaru8J7+cVIsdIH1tj9tgP3HUphRNxdANWpqZI3upwgBd6Zp+LMN7nPG4njGdRB4Px5rjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=CJyF2DKW5ad2jiOFfko7k3RP3AiZhrVA2ovXjyjQ77Q=; b=Q9ci9XPopzCU/+XuoWaG4fXNJMVa74UieTmoBrHZTxEd8645O4v1WjKm/AU4oYBx6ILC96MSAuJ2sVt7OouJeIgiubvwvaXGDVqXfKKEtI4yoUuesKxf70NG6KdBbTFMDXMHc+XHPP2GHE2OE5G+a63ZzyJob0Wz2ZsnEHsY6pM+L6w858TkFZDL2DJ9JB1LJxqhLml/tZZNjQsnICEu6+ZzN3ybiTMKdPavM+T9rVqd1pp24s3L2VKzc2Xayn4B7mkD15pbtHA2V7R0NjmOqWkfbT+p11W1P3BbIGqNF11JmmFIsucay/D4TR7J12lsTOyQC0glDJQlnI5oq9Kc6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CJyF2DKW5ad2jiOFfko7k3RP3AiZhrVA2ovXjyjQ77Q=; b=Gc9MiSa2Tfr+j3un14KOLs/L9hNedfzAOngxTmLXj82Cmld2fxFmt3kMnC83l3Tz/oAqphI3+MeYcLd2W/GK71nhCBv/EwKj4QjiyC8Wv4uUsCYOTFjwS5SrYrR/4zmV8Durj2s1JzAnA3XdrZ3NdZLNPaGnXYyIBcueC9FdiIA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:38 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:38 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 27/35] NTB: epf: Provide db_vector_count/db_vector_mask callbacks Date: Thu, 18 Dec 2025 00:16:01 +0900 Message-ID: <20251217151609.3162665-28-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0098.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b4::19) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: bed16d64-fd65-4656-614a-08de3d7f4656 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bxnUK0xs6gXzHDZs+BMj+kl3mVIJxFuJqyoW3wNLcrlIIz+m77IoWZYoKKOM?= =?us-ascii?Q?YFBbJ0NPfhZcIk+LVbKCCBt2V/oEoavdvgnvk+X8NOn0su/Z4hMxr1hJT4Xh?= =?us-ascii?Q?cksdMwGwAARbMDvZyzlFIf+yZwUBwy0/RyS9hng1n8L1g7+DzASdQgt9NyTy?= =?us-ascii?Q?FGhpoNKEkRHJqjWMcRHjNNFsaYEJU+Y8ESkR2xVZQsDjaFHnxf8yqaqy7PyI?= =?us-ascii?Q?qIHeyVxW1M47zZ6JIFcPpyi27slQbOizQQHpFEE06spobLLSRGWWxgZI0bUt?= =?us-ascii?Q?9iX7qOjAD4vYXsN78FpgPFNb4KJX3VWXwkA3mWUyh6VP441eVAlbcV057fos?= =?us-ascii?Q?JUZi6uGrjaSjiiihIa5jNPiFVJbboyWs4QgCpURHTHyMzImDrxoWla0Y3ucH?= =?us-ascii?Q?Ln49CrVE868amXfIE7UNpqXsWWXEuHZ8n+O99pDyiJLDUqO0RLZOGOgCRVG/?= =?us-ascii?Q?/82/CF4CBUAeSjNb0kktPQkd5Q5F8E77kgqVONrHDsmYhwIHd59+FWgQYokI?= =?us-ascii?Q?U0rx+slQePmFb4Y/zg1RBBM/anMP/5JE+s1iAs5XKnek09bvU0/fdYQD6mJU?= =?us-ascii?Q?soIJH+LnhUSfc0Y7oaXZPqZQLoSIAgHZlyNNPKUPp4SRM8+E6jt/2qi3w8fn?= =?us-ascii?Q?R1RES0jBnhdgt7DttZHQ6BMWzPF5oW/aQCgYeT4PCL8J1WC5BZmJ+zt/ASDb?= =?us-ascii?Q?oiunxANPekXszQeHWNvityV1QejOnCVsUQV3VraoWLAFNVVqWvqeawouJLhz?= =?us-ascii?Q?RJI2v4ek4QItFIW9xl5q4FMUCocsIJ3UXGyy7uO4kcLOF+lLhivQsf9WXS6y?= =?us-ascii?Q?HnKboiQTEwsO+gUVCrcBrTJHVa1JXOfXMdmdDjFcnVPVJ4hC5jOBDbGKncAA?= =?us-ascii?Q?7vJ5RSB6qEy0rv6cs5SqOhFv/pCvKFQ5/8iKo67lzd28pvkpA5rCRebUkRen?= =?us-ascii?Q?0BvkIQKFb3fwitJP4x1KzC1vaN93o18TokhWRw7SID7Gj2Uta5YgQIsiyS+/?= =?us-ascii?Q?lFgAzUWn04DqMVC1ggF32HSuDuwHNZIaiJxXiwbEvK9n1eoXh86O+4MvdCL+?= =?us-ascii?Q?ji3txYmAF3B/T/VHFLJPZHXQ4J0yqtsUZc8LWOBB9zgv+GUZuXEynFoctx5A?= =?us-ascii?Q?TDAavRmpoGMPdOE1qZVvvPhN6TkBcmfRnB/ZwcNs5wiNkABdxeh9msCTSKB/?= =?us-ascii?Q?gDhw8kij7jQBYDjDt0RVwT2Z2ms0nPYHwxe7kTLYJoVqDW5PGV2+PnsWNpQq?= =?us-ascii?Q?zWFJutpySc5e+o9FtyJj5hzKXn6wnV3xmSOIkBW0hmQA3kTGdHEIAf9BGNZk?= =?us-ascii?Q?gqRAP1JOViHGZ7UaZbWFbHvFCSiGW4rNHHk0WbeGByyPM4W+dYlOGwOQ6kEm?= =?us-ascii?Q?fD50uC0B3nJA4m+38O9bNSI0pwPmVqtM/kA+RDsZ2Os/WbTkSwvQEcPnIGd8?= =?us-ascii?Q?Gnp/Iia+uwN1YNZmgL/e80sMP/RJCOqY?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FVV/dTVZFs/i686KLFGOiLpYbOhgHhBJBpswRdHSOsGWvloMFXam/6kakbEE?= =?us-ascii?Q?NfTD8aXX5rFT+GVKq8r+uFYP92st8F/08hPSlJJmfWMdXEVPhAIuhlSgaOkA?= =?us-ascii?Q?Ko7ToFaU2owSTe7sheFh7MqaMP8nsvGLQOCotUgh9U5r586zkFB93u+hfYdh?= =?us-ascii?Q?AN6WR99SaDjt9uapWN/QgpVIM/hps0PDaW8iyUbN53m/jS7KebCQCypJoLb4?= =?us-ascii?Q?W6ltQ6XOPb5e2s9erAC4g3RvDIx+HtUnmqcMi+HkBBfaCm+tDWmWK2v+TB/h?= =?us-ascii?Q?3D4/zcyj07ykcvH45Qgm7t/yvmXxRJ6OG9lLcTcd0FVBFwYFBBMUw5q0HrjK?= =?us-ascii?Q?rCDshhV3QvQ7YXCf18mw+qVr1KN0yitV5Lwf7Zlot+LiTLYJ1R/fXbTLxs3O?= =?us-ascii?Q?HtTfXjxpkzr+4NouwM9FTy/rWavUI4O/qpOwuDU8U1sjUwMfswcpZpYpK2bi?= =?us-ascii?Q?NVzgK9vCI0fkaTG9MJhhYE6P3iNEeYgm12SzuEkHUgAdtPn62zhx8H03h7e2?= =?us-ascii?Q?N5VHwS/49quqCEyRZdhD+hcv5XJKcOKio+cCwEf0OUl0+cM6onzSTD2zy7g7?= =?us-ascii?Q?akHsMeDUuJrxGqcwc6F6/v8S43NbQUMxsIC7X++JHdyBhAcQhRngRiUIPeJd?= =?us-ascii?Q?7b0podBQHsDKH0xNko6tEQaGxW/fHQJBvNQkYLsSx1W8Vegp0qqFfNshjSd3?= =?us-ascii?Q?3MnKmJ+zgUYRpve3SnXGE0HQUbXJlphy0SRxOlEwdrtHpACQ5L8qdydF9UKS?= =?us-ascii?Q?Ypk/oEtwGtG62Rg9EbBEgE+BxQYOjXBv7ZaoU1K8v+Gt4lnLSiiuzkjyphM9?= =?us-ascii?Q?lDOVF5wX4wDgmWCVTztruhOFjnOkUyhvor91GnQEGtEnbaFJ+0c5WTBHg/zN?= =?us-ascii?Q?lPQvsOLZO1H/DdJrUvupF50MiYxOG+A+f4Ne5xBggNYrxaznU2qVTSDddKnQ?= =?us-ascii?Q?ImQ7zULa6/Thg6fmWipEz8qkDQn0MrNSwK2oO4VAPsvZKMog3/k+WBdl1R6y?= =?us-ascii?Q?LRaKYNEhut1pO+cp2ibtU+G+Bv51C+Lzjj6oe45jOkmps9Qz3XF/4qgKcY0W?= =?us-ascii?Q?WUraZJ5/G9hwUQYhXssLn88od9I5xhY3yR2lMK812+jck9gybomwNeTWCJUz?= =?us-ascii?Q?qQJISHMQNC36HhNKVx41aSpl4CheKlC2gRuL3ZYcXM2aU+ub7tZV9j5878/Y?= =?us-ascii?Q?1jXE/ZgPhE6o/LyDZGGuCAGouYL/R2usJcmtKW2JdTrso4eukQNJHHQ0+52G?= =?us-ascii?Q?KQInui7YWlVJa11rolgEcLabnuMRKiemFXjDpBDH3czlyrNAs8l9EGU57HP5?= =?us-ascii?Q?EkeDEpvLqElM0SaENgnOagtLh5qAFVhVG/o1UkNcTQuyP9JIX5e/ytTSPlCQ?= =?us-ascii?Q?M5wPLPCRuFvZDzcFZRs5BEylrAT0xTCKqhtNBcqPCeyYPKwah8fOhf0pJEMR?= =?us-ascii?Q?/S9nXV/jY8h6uIVwaYlPaPtcqJCvi8yM2FVvgTpax07QLsFESzbBDbs3tYXs?= =?us-ascii?Q?njTs/PW9a9mzvbW11e2YRmjsBuszdkW1nbXnOqP725U4nR6O1heG6YilFltq?= =?us-ascii?Q?auRBmA2R7JOoIUB74tOPKRXWaxiLZUZwVB7cdOefIHAXaTFp6+Ej3uoFtvQb?= =?us-ascii?Q?YrONHuQ4U/aEpw64kEsyOC8=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: bed16d64-fd65-4656-614a-08de3d7f4656 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:38.4206 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2ohPDDGGsA3cX41B+LwtYzL59olKhS28UD7AIV1KW1Yj+CGL+ZiyzCcmDrDzIamGPZPOeo7NUOoQwJP00b1wZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Provide db_vector_count() and db_vector_mask() implementations for both ntb_hw_epf and pci-epf-vntb so that ntb_transport can map MSI vectors to doorbell bits. Without them, the upper layer cannot identify which doorbell vector fired and ends up scheduling rxc_db_work() for all queue pairs, resulting in a thundering-herd effect when multiple queue pairs (QPs) are enabled. With this change, .peer_db_set() must honor the db_bits mask and raise all requested doorbell interrupts, so update those implementations accordingly. Signed-off-by: Koichiro Den --- drivers/ntb/hw/epf/ntb_hw_epf.c | 47 ++++++++++++------- drivers/pci/endpoint/functions/pci-epf-vntb.c | 40 +++++++++++++--- 2 files changed, 63 insertions(+), 24 deletions(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index 4ecc6b2177b4..5303a8944019 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -375,7 +375,7 @@ static int ntb_epf_init_isr(struct ntb_epf_dev *ndev, i= nt msi_min, int msi_max) } } =20 - ndev->db_count =3D irq; + ndev->db_count =3D irq - 1; =20 ret =3D ntb_epf_send_command(ndev, CMD_CONFIGURE_DOORBELL, argument | irq); @@ -409,6 +409,22 @@ static u64 ntb_epf_db_valid_mask(struct ntb_dev *ntb) return ntb_ndev(ntb)->db_valid_mask; } =20 +static int ntb_epf_db_vector_count(struct ntb_dev *ntb) +{ + return ntb_ndev(ntb)->db_count; +} + +static u64 ntb_epf_db_vector_mask(struct ntb_dev *ntb, int db_vector) +{ + struct ntb_epf_dev *ndev =3D ntb_ndev(ntb); + + db_vector--; /* vector 0 is reserved for link events */ + if (db_vector < 0 || db_vector >=3D ndev->db_count) + return 0; + + return ndev->db_valid_mask & BIT_ULL(db_vector); +} + static int ntb_epf_db_set_mask(struct ntb_dev *ntb, u64 db_bits) { return 0; @@ -492,26 +508,21 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *n= tb, int idx, static int ntb_epf_peer_db_set(struct ntb_dev *ntb, u64 db_bits) { struct ntb_epf_dev *ndev =3D ntb_ndev(ntb); - u32 interrupt_num =3D ffs(db_bits) + 1; - struct device *dev =3D ndev->dev; + u32 interrupt_num; u32 db_entry_size; u32 db_offset; u32 db_data; - - if (interrupt_num >=3D ndev->db_count) { - dev_err(dev, "DB interrupt %d greater than Max Supported %d\n", - interrupt_num, ndev->db_count); - return -EINVAL; - } + int i; =20 db_entry_size =3D readl(ndev->ctrl_reg + NTB_EPF_DB_ENTRY_SIZE); =20 - db_data =3D readl(ndev->ctrl_reg + NTB_EPF_DB_DATA(interrupt_num)); - db_offset =3D readl(ndev->ctrl_reg + NTB_EPF_DB_OFFSET(interrupt_num)); - - writel(db_data, ndev->db_reg + (db_entry_size * interrupt_num) + - db_offset); - + for_each_set_bit(i, (unsigned long *)&db_bits, ndev->db_count) { + interrupt_num =3D i + 1; + db_data =3D readl(ndev->ctrl_reg + NTB_EPF_DB_DATA(interrupt_num)); + db_offset =3D readl(ndev->ctrl_reg + NTB_EPF_DB_OFFSET(interrupt_num)); + writel(db_data, ndev->db_reg + (db_entry_size * interrupt_num) + + db_offset); + } return 0; } =20 @@ -541,6 +552,8 @@ static const struct ntb_dev_ops ntb_epf_ops =3D { .spad_count =3D ntb_epf_spad_count, .peer_mw_count =3D ntb_epf_peer_mw_count, .db_valid_mask =3D ntb_epf_db_valid_mask, + .db_vector_count =3D ntb_epf_db_vector_count, + .db_vector_mask =3D ntb_epf_db_vector_mask, .db_set_mask =3D ntb_epf_db_set_mask, .mw_set_trans =3D ntb_epf_mw_set_trans, .mw_clear_trans =3D ntb_epf_mw_clear_trans, @@ -591,8 +604,8 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev) int ret; =20 /* One Link interrupt and rest doorbell interrupt */ - ret =3D ntb_epf_init_isr(ndev, NTB_EPF_MIN_DB_COUNT + NTB_EPF_IRQ_RESERVE, - NTB_EPF_MAX_DB_COUNT + NTB_EPF_IRQ_RESERVE); + ret =3D ntb_epf_init_isr(ndev, NTB_EPF_MIN_DB_COUNT + 1 + NTB_EPF_IRQ_RES= ERVE, + NTB_EPF_MAX_DB_COUNT + 1 + NTB_EPF_IRQ_RESERVE); if (ret) { dev_err(dev, "Failed to init ISR\n"); return ret; diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index c89f5b0775fa..c47186fe4f75 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -1384,6 +1384,22 @@ static u64 vntb_epf_db_valid_mask(struct ntb_dev *nt= b) return BIT_ULL(ntb_ndev(ntb)->db_count) - 1; } =20 +static int vntb_epf_db_vector_count(struct ntb_dev *ntb) +{ + return ntb_ndev(ntb)->db_count; +} + +static u64 vntb_epf_db_vector_mask(struct ntb_dev *ntb, int db_vector) +{ + struct epf_ntb *ndev =3D ntb_ndev(ntb); + + db_vector--; /* vector 0 is reserved for link events */ + if (db_vector < 0 || db_vector >=3D ndev->db_count) + return 0; + + return BIT_ULL(db_vector); +} + static int vntb_epf_db_set_mask(struct ntb_dev *ntb, u64 db_bits) { return 0; @@ -1509,20 +1525,28 @@ static int vntb_epf_peer_spad_write(struct ntb_dev = *ndev, int pidx, int idx, u32 =20 static int vntb_epf_peer_db_set(struct ntb_dev *ndev, u64 db_bits) { - u32 interrupt_num =3D ffs(db_bits) + 1; struct epf_ntb *ntb =3D ntb_ndev(ndev); u8 func_no, vfunc_no; - int ret; + u64 failed =3D 0; + int i; =20 func_no =3D ntb->epf->func_no; vfunc_no =3D ntb->epf->vfunc_no; =20 - ret =3D pci_epc_raise_irq(ntb->epf->epc, func_no, vfunc_no, - PCI_IRQ_MSI, interrupt_num + 1); - if (ret) - dev_err(&ntb->ntb.dev, "Failed to raise IRQ\n"); + for_each_set_bit(i, (unsigned long *)&db_bits, ntb->db_count) { + /* + * DB bit i is MSI interrupt (i + 2). + * Vector 0 is used for link events and MSI vectors are + * 1-based for pci_epc_raise_irq(). + */ + if (pci_epc_raise_irq(ntb->epf->epc, func_no, vfunc_no, + PCI_IRQ_MSI, i + 2)) + failed |=3D BIT_ULL(i); + } + if (failed) + dev_err(&ntb->ntb.dev, "Failed to raise IRQ (0x%llx)\n", failed); =20 - return ret; + return failed ? -EIO : 0; } =20 static u64 vntb_epf_db_read(struct ntb_dev *ndev) @@ -1596,6 +1620,8 @@ static const struct ntb_dev_ops vntb_epf_ops =3D { .spad_count =3D vntb_epf_spad_count, .peer_mw_count =3D vntb_epf_peer_mw_count, .db_valid_mask =3D vntb_epf_db_valid_mask, + .db_vector_count =3D vntb_epf_db_vector_count, + .db_vector_mask =3D vntb_epf_db_vector_mask, .db_set_mask =3D vntb_epf_db_set_mask, .mw_set_trans =3D vntb_epf_mw_set_trans, .mw_clear_trans =3D vntb_epf_mw_clear_trans, --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11010020.outbound.protection.outlook.com [52.101.228.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40691361DAD; Wed, 17 Dec 2025 15:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984672; cv=fail; b=bqKahxvMH5zqqWIAv/wyOwtvha3+YG/AJIvevgch2oJHdsKHIFXXix24v9GiFc9MAQeAdf+uqkQkq6gDUujIXePsXnEJCzofl287HwGGZjwOjS3EIdoocFpdNtfsqfhMdC53cCD4TgyIthduVhqxDApj6In++mXxiK4lGmYAUVU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984672; c=relaxed/simple; bh=fOSJLrLrFLoKv0qHk+W+c7m9DC4dwJUYznyFzyvl1sU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nJdMBb6dslm5taLpoB8BSOhK25kVnwSYLzPhnS4UrMAayShtr1/ePcRSDpGAyfXLQ6x5BS/0lr3A1t5I1E0XzEkeA7DSjhiweu93HgeXwP3uU6VLeQSOmGgSf0eB6twU/35qIlCr3xGX6Fu1FqOVFPfN6zHIe6K9/20DeeFnus8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=dwCQeaGR; arc=fail smtp.client-ip=52.101.228.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="dwCQeaGR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NAFviUgJ/eYPP00FdjelQ6molxSmQTtVrxnMQ0y0cCYy7JIssqUUG2UQdz/BTrJE19BxpP2h8k+gTTOLb+wZLl0RX/0nR0UYkqM/Vij59AaA6zC1BzdR6jz2/tJhIV42aMB5C5+ndvokfWlvspzNTfI4ADrb80LtFL/MOwtSJO6dpeDAETY4Yd3IydwCqX7mZ/GuDc7NANOLc7vTsXzkBIVvUhmT7K1P6MHLBnF4X1ZbdCQdOrUqF1AsXYNBvr+tCzMCP3HVzDaFDL4jR+f+DetIlTlAm9Y1QLpGBr5bDqvbYQwH6qYSWZoU+vyr/bTWz5RGNdxXjG8LpQU6UFTtLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=d06MQL3alOxYyQ0pwMZdFFY6ArVfMDxTphVx+kcblwo=; b=xscci4InYLdJQrmUZHL37StNEZZnHp+OLU4mBwMOMl0w/tjiuhuRR8vWWieFxnxq5n0fvrhGzDBY9OlNAlBs/c9oroRzkRy4Za1GYPIJF1gCRMYNJOIaEy/UQ41bQXsgkexwRtTurs2JfLoyDtc4fIWx/VcFPQv9Bo+k//K+C6a+wTkEgfsTLZc3T03fdvxCJWBvuQK3fvJJgP4iC/vSZUWTAbDybmED+zeJmLmu2waN5nRkw7nYvU+7ZBBJvUGG0CcrzNV4lmX1lxtP9wEfYj4Mgv7UNvmJycCaqmufBBIx/Ud35Tz4G5ghHUI+9z85uyddz7LikbzJnxVf5awyPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=d06MQL3alOxYyQ0pwMZdFFY6ArVfMDxTphVx+kcblwo=; b=dwCQeaGRhcQPG0WBOm6ufnjbXhhBqP8NfFzCr4sYY5Edz2RLx/RlZM3DCXbC6ukktcehEdcCG1sbrmPQNbbKrYl2g+rRPqabx1xsm93Asm1JT+mLm9Fax0sNfEZx8Rc2kNbMoOExy53BDQ3OXHqgyLgA8Q8gddmnyA01u62cqL0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:39 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:39 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 28/35] ntb_netdev: Multi-queue support Date: Thu, 18 Dec 2025 00:16:02 +0900 Message-ID: <20251217151609.3162665-29-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0106.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37b::17) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: a4c5e57e-be89-4e7f-4e21-08de3d7f46d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4yLkxDCH/B/xkFCekL5/KbJSw76bENkIpzfPTySCCZB4NEszX9t83ZHNzOmI?= =?us-ascii?Q?9UdO3wz/gt7MtNR0zzSmjzVB+Oj7lysUEC1odb41xdFza9jd7t7OItMYzBp1?= =?us-ascii?Q?etCYnzdfkH4vG4kmnfago33T8uxHCkRPeR/6nyh7PgKB2QfKYMSxKOBBzudh?= =?us-ascii?Q?Z6Keu7ZDWxXL0X0hERZ8KFk2czEux0UtL2tgbW5GYKax0CwCGnjQ/Z3x6gts?= =?us-ascii?Q?wE63QKgtczGQTj0IC1Edl4SO1RIbVNatzvabjtGaAdPieFpOwjZHb5h3hOjS?= =?us-ascii?Q?xC18qAogu4+hwz3K0d7/eED7lb4q4jSua3vbCzWfdZaOCwLtrYURNS0kyePx?= =?us-ascii?Q?V/qjQ/uR5W9vu4C+8/Mxd3IEPUPHMpZE1DPrxj5iX19WSIWLFl62k+re1fbz?= =?us-ascii?Q?9RYuMPzaYAHAxZS1LJurPvBn06TxqwUg8mVFEQumX+WwnKl9ATHrsMe8ZhPu?= =?us-ascii?Q?94X8TQ8XaNFmy+G+s6CqV3dmJ+Rr0U0DdGv9MbYdjlaiGi+lx8o0ImPWJSPn?= =?us-ascii?Q?YdQ5LcamHwq03v9w5AleQ9BgGL6QcO6/fTOY29/PODEOaU2zp98U74E07hoA?= =?us-ascii?Q?+uBf2kWE+ay7ItdkZRMdHGGzQ5amfWLTV/1pDSrkqkeXY7Vt/EVijNvT4mQi?= =?us-ascii?Q?ycyYbBWwt3UfkSXJ4g9a1y0AgLjU2RXHFsbzi22NdE9TVX3iANgippEILEgQ?= =?us-ascii?Q?euMIQHS3YVThEni6YHfE+lxZAUODSHg1PEJW10zc7RZCyMNPR9YAw8zTJ74R?= =?us-ascii?Q?GB1Iw0IP1KIGVj8rXY03qFk9h6Y271P0+4pRP61qYiz2XoNmJjbccaK/CF9/?= =?us-ascii?Q?0uGKQaYWuKm1gsUqgYpXlxQ9na1nTrm95N7vAah3mUAc2hUkJoMI3RDijwt7?= =?us-ascii?Q?6264TghOMXixzaXXKAYaUe2p1WGQmvZaGCIYM8W6a+ZfN/Y3OTkmpTvmJ/rQ?= =?us-ascii?Q?VcbRRXMytWrfb9JC4HDBUyPV7XzJDpMtpARWowkP8Eu6JQfSBEPIRLxrpYeo?= =?us-ascii?Q?/PI72UKTU/cgdJsymAyOqYwUmq0LO6RZroxQDHlV0ffz7OvxGTY2VYPIRODx?= =?us-ascii?Q?8K4NyJ7Npu3YbtVJcloTUv7PwPlreS6X5GzzN9K9tgOCKj1epegDloAiKlgz?= =?us-ascii?Q?SAtuHa3JJ6cViXmlASgHRj9F9/hRWkQ1Tg4nl01QaqZ6+d0vnzs4+TOECYcS?= =?us-ascii?Q?fgr6VLiFxkoXZGkqgAD0VzAMzfWS6T70C1tlBXR26nRXlTR1EN5sP7OnDgnK?= =?us-ascii?Q?6EXb4I6tw+1yfoRZ9bt6f1avBLkjEGzvNKVjVz+J6Al1uIBiQMpJiMiA65IS?= =?us-ascii?Q?TtrKjWwbhOPOR8xao1zmM3n9hP4qSMacRvXyN/Ghsh7BmkSWmCU+QqDwd1NK?= =?us-ascii?Q?u8XocNjIB6ZC2oGg9Ua2ec12spAUGapZIL6qo+NSLVjoGiEQc9sTZP6/P/n5?= =?us-ascii?Q?MWgcgcaryNSeJ0MY1rESkqwyhbZ98YVZ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RhEjU/OxcZtLuYJqNF0xsB7I/ypfSQMhebXCpyfzWXA/ElsFl4lIxAdIrOXn?= =?us-ascii?Q?U1IOfZM8+B0quMrdDeqx0qCdSbmEpDMiWXUnoq2YXx/RSLlgtxSjJe1C/bR6?= =?us-ascii?Q?QgR4ZnF3hM7pQSX9PwA+9N0NBZw27vRZATTwOM2fIjQX818cJt4/STUfjlT5?= =?us-ascii?Q?fa9G8GUa9XxBOkxJcU+yS7CoF8b/NQSESByLnL09r1vqDHkznP6C1G6eY0Pv?= =?us-ascii?Q?SP+NjMXFH1g7sHF1GA0fhPN4uMp2Bj8n9yirFhWv8FrGfDDCyCgTnmkKxl30?= =?us-ascii?Q?hZOl4vaOKfucsw7/boC4KUOX7GXCB0NxvYnW9gyIDjPyiDlL4+/R+qKQcBkS?= =?us-ascii?Q?B4MrDU1VRAcKg3wVtC8C9vDBrG70jeCHfA8MXMoq6F1OUBUTF56wOpR8/9yp?= =?us-ascii?Q?BIlbbuxD3+Iz0S6duE6YmTzeqInuHbbutWlFfzYKhN8Xxfx6xu8B6Y1MqL0u?= =?us-ascii?Q?y44ZFPx38O07NsJ6M6EYDR6jIF3gWG1dbl4/7urRQpcLs4ZqEsS1hqmn6YDl?= =?us-ascii?Q?MOhHA1emja+N0/cULiIahujqvpn8IT26ScGpPgZo02MxsBbsXaTG5Eh7hqiV?= =?us-ascii?Q?2EULgWeCxec6cw8O6SR9TLk1eb3cR3sXQRMM+cpZ0t2ud25sqkMltGeRATGm?= =?us-ascii?Q?5ErGHdDhVE5e6Po9ikQIBP36YmytAlvN5adc6hrU1Ul+lv7D+marM/TyPlIl?= =?us-ascii?Q?al2+fnUuIMc5jZaIaoqhkzUesLai41MlgLjZ97plfKoSLkYji1MlcBrpyA1d?= =?us-ascii?Q?QNcytlFul9+FAXCVHgrzC+6VcbQgsHoEA5gfihe2gQQqw2y2WJWcgybqxzuV?= =?us-ascii?Q?nXN0ZihOEXYB30S5uCD58J/CmxvNJh/Apx9JBC7ziueKSPAtiXwXCDgy3MDt?= =?us-ascii?Q?3eIQuEf/xxXomrG5A2pKsBAE8ldmgCE9Jv0SJiBO2/+yPXdOWs6kN50XOGyk?= =?us-ascii?Q?jYHWVhcu+Ykk+t+RjcRpszx+3d/2Q7pl1BnFH/UvyzIsezklETl/WkySBbJz?= =?us-ascii?Q?kOi/g6pbedvXo8hsgJLyKJxb2C2k8gZnbi+NgwOCeC2hiNx20xzGDB3eJQBI?= =?us-ascii?Q?WFTo2CBzm6XUjalf3UEsdmjbdZs16Vu9YFALZqjasMTolGAd4iX62c0rOhn9?= =?us-ascii?Q?gl6ntGAZLjF7rBg9Z0cF9x/+GocxScvCCr1AaM9Ex2HaAzBjkNFYAUL6ZgHP?= =?us-ascii?Q?z3oZqL9oc7YRvn24PWsAByaNkL8PDREe8ERulO2OfwowLG1N8qovPy7rB2HG?= =?us-ascii?Q?OgeuS6J3pMmyZQ2v8B9HHIHy5CcibeMMlLoyNCnPYAyBgWDtV9sKULGK7B1+?= =?us-ascii?Q?3KiF6lGkzvG4Uu/OF+kcVdOe6wzHBIn/3O+NsqrSm0z0J5gAENRYA4qfbebw?= =?us-ascii?Q?49jXqr+V7+3KavN4uVxLXm5TgVa7K89FVO6rNki4y7O3KNAlv3tSTxLdR7KI?= =?us-ascii?Q?1eHNfZt00QJgnj96Ecno8iLc6H9YudyB79AJOJwjmH9m/6onGd5HvWraXjED?= =?us-ascii?Q?r0AQI8sT9xCBST9IX9p2kTp0S+tly7qKgr2hjAqBQiix/6qzrQMiaB5BGOXH?= =?us-ascii?Q?OlvRWJGRjBRGLH1QfM1jDYZcIeavAlB/c1l+NyRZLlfPT8FLzkkYDV4t7CT3?= =?us-ascii?Q?yhV0lvXaONye1eSoK6nyU00=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a4c5e57e-be89-4e7f-4e21-08de3d7f46d9 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:39.2912 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JZ6dB9yXjKs/zvwAdw+a44MfdhOKlRc6fvBng4/eYTD8XOgcvE1TJ68vkCf5d/dKTC6xwdLcHMvpSus++SfcVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" In eDMA-backed mode (use_remote_edma=3D1), ntb_transport can scale throughput across multiple queue pairs without being constrained by scarce PCI memory window space used for data-plane buffers. It contrasts with the default backend mode, where even with a single queue pair, only up to 15 in-flight descriptors fit in a 1 MiB MW. Teach ntb_netdev to allocate multiple ntb_transport queue pairs and expose them as a multi-queue net_device. With this patch, up to N queue pairs are created, where N is chosen as follows: - By default, N is num_online_cpus(), to give each CPU its own queue. - If the ntb_num_queues module parameter is non-zero, it overrides the default and requests that many queues. - In both cases the requested value is capped at a fixed upper bound to avoid unbounded allocations, and by the number of queue pairs actually available from ntb_transport. If only one queue pair can be created (or ntb_num_queues=3D1 is set), the driver effectively falls back to the previous single-queue behaviour. Signed-off-by: Koichiro Den --- drivers/net/ntb_netdev.c | 341 ++++++++++++++++++++++++++++----------- 1 file changed, 243 insertions(+), 98 deletions(-) diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index fbeae05817e9..7aeca35b46c5 100644 --- a/drivers/net/ntb_netdev.c +++ b/drivers/net/ntb_netdev.c @@ -53,6 +53,8 @@ #include #include #include +#include +#include =20 #define NTB_NETDEV_VER "0.7" =20 @@ -70,26 +72,84 @@ static unsigned int tx_start =3D 10; /* Number of descriptors still available before stop upper layer tx */ static unsigned int tx_stop =3D 5; =20 +/* + * Upper bound on how many queue pairs we will try to create even if + * ntb_num_queues or num_online_cpus() is very large. This is an + * arbitrary safety cap to avoid unbounded allocations. + */ +#define NTB_NETDEV_MAX_QUEUES 64 + +/* + * ntb_num_queues =3D=3D 0 (default) means: + * - use num_online_cpus() as the desired queue count, capped by + * NTB_NETDEV_MAX_QUEUES. + * ntb_num_queues > 0: + * - try to create exactly ntb_num_queues queue pairs (again capped + * by NTB_NETDEV_MAX_QUEUES), but fall back to the number of queue + * pairs actually available from ntb_transport. + */ +static unsigned int ntb_num_queues; +module_param(ntb_num_queues, uint, 0644); +MODULE_PARM_DESC(ntb_num_queues, + "Number of NTB netdev queue pairs to use (0 =3D per-CPU)"); + +struct ntb_netdev; + +struct ntb_netdev_queue { + struct ntb_netdev *ntdev; + struct ntb_transport_qp *qp; + struct timer_list tx_timer; + u16 qid; +}; + struct ntb_netdev { struct pci_dev *pdev; struct net_device *ndev; - struct ntb_transport_qp *qp; - struct timer_list tx_timer; + unsigned int num_queues; + struct ntb_netdev_queue *queues; }; =20 #define NTB_TX_TIMEOUT_MS 1000 #define NTB_RXQ_SIZE 100 =20 +static unsigned int ntb_netdev_default_queues(void) +{ + unsigned int n; + + if (ntb_num_queues) + n =3D ntb_num_queues; + else + n =3D num_online_cpus(); + + if (!n) + n =3D 1; + + if (n > NTB_NETDEV_MAX_QUEUES) + n =3D NTB_NETDEV_MAX_QUEUES; + + return n; +} + static void ntb_netdev_event_handler(void *data, int link_is_up) { - struct net_device *ndev =3D data; - struct ntb_netdev *dev =3D netdev_priv(ndev); + struct ntb_netdev_queue *q =3D data; + struct ntb_netdev *dev =3D q->ntdev; + struct net_device *ndev =3D dev->ndev; + bool any_up =3D false; + unsigned int i; =20 - netdev_dbg(ndev, "Event %x, Link %x\n", link_is_up, - ntb_transport_link_query(dev->qp)); + netdev_dbg(ndev, "Event %x, Link %x, qp %u\n", link_is_up, + ntb_transport_link_query(q->qp), q->qid); =20 if (link_is_up) { - if (ntb_transport_link_query(dev->qp)) + for (i =3D 0; i < dev->num_queues; i++) { + if (ntb_transport_link_query(dev->queues[i].qp)) { + any_up =3D true; + break; + } + } + + if (any_up) netif_carrier_on(ndev); } else { netif_carrier_off(ndev); @@ -99,7 +159,9 @@ static void ntb_netdev_event_handler(void *data, int lin= k_is_up) static void ntb_netdev_rx_handler(struct ntb_transport_qp *qp, void *qp_da= ta, void *data, int len) { - struct net_device *ndev =3D qp_data; + struct ntb_netdev_queue *q =3D qp_data; + struct ntb_netdev *dev =3D q->ntdev; + struct net_device *ndev =3D dev->ndev; struct sk_buff *skb; int rc; =20 @@ -135,7 +197,8 @@ static void ntb_netdev_rx_handler(struct ntb_transport_= qp *qp, void *qp_data, } =20 enqueue_again: - rc =3D ntb_transport_rx_enqueue(qp, skb, skb->data, ndev->mtu + ETH_HLEN); + rc =3D ntb_transport_rx_enqueue(q->qp, skb, skb->data, + ndev->mtu + ETH_HLEN); if (rc) { dev_kfree_skb_any(skb); ndev->stats.rx_errors++; @@ -143,42 +206,37 @@ static void ntb_netdev_rx_handler(struct ntb_transpor= t_qp *qp, void *qp_data, } } =20 -static int __ntb_netdev_maybe_stop_tx(struct net_device *netdev, - struct ntb_transport_qp *qp, int size) +static int ntb_netdev_maybe_stop_tx(struct ntb_netdev_queue *q, int size) { - struct ntb_netdev *dev =3D netdev_priv(netdev); + struct net_device *ndev =3D q->ntdev->ndev; + + if (ntb_transport_tx_free_entry(q->qp) >=3D size) + return 0; + + netif_stop_subqueue(ndev, q->qid); =20 - netif_stop_queue(netdev); /* Make sure to see the latest value of ntb_transport_tx_free_entry() * since the queue was last started. */ smp_mb(); =20 - if (likely(ntb_transport_tx_free_entry(qp) < size)) { - mod_timer(&dev->tx_timer, jiffies + usecs_to_jiffies(tx_time)); + if (likely(ntb_transport_tx_free_entry(q->qp) < size)) { + mod_timer(&q->tx_timer, jiffies + usecs_to_jiffies(tx_time)); return -EBUSY; } =20 - netif_start_queue(netdev); - return 0; -} - -static int ntb_netdev_maybe_stop_tx(struct net_device *ndev, - struct ntb_transport_qp *qp, int size) -{ - if (netif_queue_stopped(ndev) || - (ntb_transport_tx_free_entry(qp) >=3D size)) - return 0; + netif_wake_subqueue(ndev, q->qid); =20 - return __ntb_netdev_maybe_stop_tx(ndev, qp, size); + return 0; } =20 static void ntb_netdev_tx_handler(struct ntb_transport_qp *qp, void *qp_da= ta, void *data, int len) { - struct net_device *ndev =3D qp_data; + struct ntb_netdev_queue *q =3D qp_data; + struct ntb_netdev *dev =3D q->ntdev; + struct net_device *ndev =3D dev->ndev; struct sk_buff *skb; - struct ntb_netdev *dev =3D netdev_priv(ndev); =20 skb =3D data; if (!skb || !ndev) @@ -194,13 +252,12 @@ static void ntb_netdev_tx_handler(struct ntb_transpor= t_qp *qp, void *qp_data, =20 dev_kfree_skb_any(skb); =20 - if (ntb_transport_tx_free_entry(dev->qp) >=3D tx_start) { + if (ntb_transport_tx_free_entry(qp) >=3D tx_start) { /* Make sure anybody stopping the queue after this sees the new * value of ntb_transport_tx_free_entry() */ smp_mb(); - if (netif_queue_stopped(ndev)) - netif_wake_queue(ndev); + netif_wake_subqueue(ndev, q->qid); } } =20 @@ -208,16 +265,26 @@ static netdev_tx_t ntb_netdev_start_xmit(struct sk_bu= ff *skb, struct net_device *ndev) { struct ntb_netdev *dev =3D netdev_priv(ndev); + u16 qid =3D skb_get_queue_mapping(skb); + struct ntb_netdev_queue *q; int rc; =20 - ntb_netdev_maybe_stop_tx(ndev, dev->qp, tx_stop); + if (unlikely(!dev->num_queues)) + goto err; + + if (unlikely(qid >=3D dev->num_queues)) + qid =3D qid % dev->num_queues; =20 - rc =3D ntb_transport_tx_enqueue(dev->qp, skb, skb->data, skb->len); + q =3D &dev->queues[qid]; + + ntb_netdev_maybe_stop_tx(q, tx_stop); + + rc =3D ntb_transport_tx_enqueue(q->qp, skb, skb->data, skb->len); if (rc) goto err; =20 /* check for next submit */ - ntb_netdev_maybe_stop_tx(ndev, dev->qp, tx_stop); + ntb_netdev_maybe_stop_tx(q, tx_stop); =20 return NETDEV_TX_OK; =20 @@ -229,80 +296,103 @@ static netdev_tx_t ntb_netdev_start_xmit(struct sk_b= uff *skb, =20 static void ntb_netdev_tx_timer(struct timer_list *t) { - struct ntb_netdev *dev =3D timer_container_of(dev, t, tx_timer); + struct ntb_netdev_queue *q =3D container_of(t, struct ntb_netdev_queue, t= x_timer); + struct ntb_netdev *dev =3D q->ntdev; struct net_device *ndev =3D dev->ndev; =20 - if (ntb_transport_tx_free_entry(dev->qp) < tx_stop) { - mod_timer(&dev->tx_timer, jiffies + usecs_to_jiffies(tx_time)); + if (ntb_transport_tx_free_entry(q->qp) < tx_stop) { + mod_timer(&q->tx_timer, jiffies + usecs_to_jiffies(tx_time)); } else { - /* Make sure anybody stopping the queue after this sees the new + /* + * Make sure anybody stopping the queue after this sees the new * value of ntb_transport_tx_free_entry() */ smp_mb(); - if (netif_queue_stopped(ndev)) - netif_wake_queue(ndev); + netif_wake_subqueue(ndev, q->qid); } } =20 static int ntb_netdev_open(struct net_device *ndev) { struct ntb_netdev *dev =3D netdev_priv(ndev); + struct ntb_netdev_queue *queue; struct sk_buff *skb; - int rc, i, len; - - /* Add some empty rx bufs */ - for (i =3D 0; i < NTB_RXQ_SIZE; i++) { - skb =3D netdev_alloc_skb(ndev, ndev->mtu + ETH_HLEN); - if (!skb) { - rc =3D -ENOMEM; - goto err; - } + int rc =3D 0, i, len; + unsigned int q; =20 - rc =3D ntb_transport_rx_enqueue(dev->qp, skb, skb->data, - ndev->mtu + ETH_HLEN); - if (rc) { - dev_kfree_skb(skb); - goto err; + /* Add some empty rx bufs for each queue */ + for (q =3D 0; q < dev->num_queues; q++) { + queue =3D &dev->queues[q]; + + for (i =3D 0; i < NTB_RXQ_SIZE; i++) { + skb =3D netdev_alloc_skb(ndev, ndev->mtu + ETH_HLEN); + if (!skb) { + rc =3D -ENOMEM; + goto err; + } + + rc =3D ntb_transport_rx_enqueue(queue->qp, skb, skb->data, + ndev->mtu + ETH_HLEN); + if (rc) { + dev_kfree_skb(skb); + goto err; + } } - } =20 - timer_setup(&dev->tx_timer, ntb_netdev_tx_timer, 0); + timer_setup(&queue->tx_timer, ntb_netdev_tx_timer, 0); + } =20 netif_carrier_off(ndev); - ntb_transport_link_up(dev->qp); - netif_start_queue(ndev); + + for (q =3D 0; q < dev->num_queues; q++) + ntb_transport_link_up(dev->queues[q].qp); + + netif_tx_start_all_queues(ndev); =20 return 0; =20 err: - while ((skb =3D ntb_transport_rx_remove(dev->qp, &len))) - dev_kfree_skb(skb); + for (q =3D 0; q < dev->num_queues; q++) { + queue =3D &dev->queues[q]; + + while ((skb =3D ntb_transport_rx_remove(queue->qp, &len))) + dev_kfree_skb(skb); + } return rc; } =20 static int ntb_netdev_close(struct net_device *ndev) { struct ntb_netdev *dev =3D netdev_priv(ndev); + struct ntb_netdev_queue *queue; struct sk_buff *skb; + unsigned int q; int len; =20 - ntb_transport_link_down(dev->qp); + netif_tx_stop_all_queues(ndev); + + for (q =3D 0; q < dev->num_queues; q++) { + queue =3D &dev->queues[q]; =20 - while ((skb =3D ntb_transport_rx_remove(dev->qp, &len))) - dev_kfree_skb(skb); + ntb_transport_link_down(queue->qp); =20 - timer_delete_sync(&dev->tx_timer); + while ((skb =3D ntb_transport_rx_remove(queue->qp, &len))) + dev_kfree_skb(skb); =20 + timer_delete_sync(&queue->tx_timer); + } return 0; } =20 static int ntb_netdev_change_mtu(struct net_device *ndev, int new_mtu) { struct ntb_netdev *dev =3D netdev_priv(ndev); + struct ntb_netdev_queue *queue; struct sk_buff *skb; - int len, rc; + unsigned int q, i; + int len, rc =3D 0; =20 - if (new_mtu > ntb_transport_max_size(dev->qp) - ETH_HLEN) + if (new_mtu > ntb_transport_max_size(dev->queues[0].qp) - ETH_HLEN) return -EINVAL; =20 if (!netif_running(ndev)) { @@ -311,41 +401,54 @@ static int ntb_netdev_change_mtu(struct net_device *n= dev, int new_mtu) } =20 /* Bring down the link and dispose of posted rx entries */ - ntb_transport_link_down(dev->qp); + for (q =3D 0; q < dev->num_queues; q++) + ntb_transport_link_down(dev->queues[0].qp); =20 if (ndev->mtu < new_mtu) { - int i; - - for (i =3D 0; (skb =3D ntb_transport_rx_remove(dev->qp, &len)); i++) - dev_kfree_skb(skb); + for (q =3D 0; q < dev->num_queues; q++) { + queue =3D &dev->queues[q]; =20 - for (; i; i--) { - skb =3D netdev_alloc_skb(ndev, new_mtu + ETH_HLEN); - if (!skb) { - rc =3D -ENOMEM; - goto err; - } - - rc =3D ntb_transport_rx_enqueue(dev->qp, skb, skb->data, - new_mtu + ETH_HLEN); - if (rc) { + for (i =3D 0; + (skb =3D ntb_transport_rx_remove(queue->qp, &len)); + i++) dev_kfree_skb(skb); - goto err; + + for (; i; i--) { + skb =3D netdev_alloc_skb(ndev, + new_mtu + ETH_HLEN); + if (!skb) { + rc =3D -ENOMEM; + goto err; + } + + rc =3D ntb_transport_rx_enqueue(queue->qp, skb, + skb->data, + new_mtu + + ETH_HLEN); + if (rc) { + dev_kfree_skb(skb); + goto err; + } } } } =20 WRITE_ONCE(ndev->mtu, new_mtu); =20 - ntb_transport_link_up(dev->qp); + for (q =3D 0; q < dev->num_queues; q++) + ntb_transport_link_up(dev->queues[q].qp); =20 return 0; =20 err: - ntb_transport_link_down(dev->qp); + for (q =3D 0; q < dev->num_queues; q++) { + struct ntb_netdev_queue *queue =3D &dev->queues[q]; + + ntb_transport_link_down(queue->qp); =20 - while ((skb =3D ntb_transport_rx_remove(dev->qp, &len))) - dev_kfree_skb(skb); + while ((skb =3D ntb_transport_rx_remove(queue->qp, &len))) + dev_kfree_skb(skb); + } =20 netdev_err(ndev, "Error changing MTU, device inoperable\n"); return rc; @@ -404,6 +507,7 @@ static int ntb_netdev_probe(struct device *client_dev) struct net_device *ndev; struct pci_dev *pdev; struct ntb_netdev *dev; + unsigned int q, desired_queues; int rc; =20 ntb =3D dev_ntb(client_dev->parent); @@ -411,7 +515,9 @@ static int ntb_netdev_probe(struct device *client_dev) if (!pdev) return -ENODEV; =20 - ndev =3D alloc_etherdev(sizeof(*dev)); + desired_queues =3D ntb_netdev_default_queues(); + + ndev =3D alloc_etherdev_mq(sizeof(*dev), desired_queues); if (!ndev) return -ENOMEM; =20 @@ -420,6 +526,15 @@ static int ntb_netdev_probe(struct device *client_dev) dev =3D netdev_priv(ndev); dev->ndev =3D ndev; dev->pdev =3D pdev; + dev->num_queues =3D 0; + + dev->queues =3D kcalloc(desired_queues, sizeof(*dev->queues), + GFP_KERNEL); + if (!dev->queues) { + rc =3D -ENOMEM; + goto err_free_netdev; + } + ndev->features =3D NETIF_F_HIGHDMA; =20 ndev->priv_flags |=3D IFF_LIVE_ADDR_CHANGE; @@ -436,26 +551,51 @@ static int ntb_netdev_probe(struct device *client_dev) ndev->min_mtu =3D 0; ndev->max_mtu =3D ETH_MAX_MTU; =20 - dev->qp =3D ntb_transport_create_queue(ndev, client_dev, - &ntb_netdev_handlers); - if (!dev->qp) { + for (q =3D 0; q < desired_queues; q++) { + struct ntb_netdev_queue *queue =3D &dev->queues[q]; + + queue->ntdev =3D dev; + queue->qid =3D q; + queue->qp =3D ntb_transport_create_queue(queue, client_dev, + &ntb_netdev_handlers); + if (!queue->qp) + break; + + dev->num_queues++; + } + + if (!dev->num_queues) { rc =3D -EIO; - goto err; + goto err_free_queues; } =20 - ndev->mtu =3D ntb_transport_max_size(dev->qp) - ETH_HLEN; + rc =3D netif_set_real_num_tx_queues(ndev, dev->num_queues); + if (rc) + goto err_free_qps; + + rc =3D netif_set_real_num_rx_queues(ndev, dev->num_queues); + if (rc) + goto err_free_qps; + + ndev->mtu =3D ntb_transport_max_size(dev->queues[0].qp) - ETH_HLEN; =20 rc =3D register_netdev(ndev); if (rc) - goto err1; + goto err_free_qps; =20 dev_set_drvdata(client_dev, ndev); - dev_info(&pdev->dev, "%s created\n", ndev->name); + dev_info(&pdev->dev, "%s created with %u queue pairs\n", + ndev->name, dev->num_queues); return 0; =20 -err1: - ntb_transport_free_queue(dev->qp); -err: +err_free_qps: + for (q =3D 0; q < dev->num_queues; q++) + ntb_transport_free_queue(dev->queues[q].qp); + +err_free_queues: + kfree(dev->queues); + +err_free_netdev: free_netdev(ndev); return rc; } @@ -464,9 +604,14 @@ static void ntb_netdev_remove(struct device *client_de= v) { struct net_device *ndev =3D dev_get_drvdata(client_dev); struct ntb_netdev *dev =3D netdev_priv(ndev); + unsigned int q; + =20 unregister_netdev(ndev); - ntb_transport_free_queue(dev->qp); + for (q =3D 0; q < dev->num_queues; q++) + ntb_transport_free_queue(dev->queues[q].qp); + + kfree(dev->queues); free_netdev(ndev); } =20 --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68F4B362157; Wed, 17 Dec 2025 15:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984671; cv=fail; b=cDqnNTkgJeM96Jgk6oDvnKPoLn3+jnR2ccsNYHX3Ws+CbKUzK8idGZ4RplAj7BmjxteyPhOzz0nBW2DSADgk8IY3wHiew0O4sWGKMEUkBRZbg8V/G6XF2t0mxlAAvOh5Dl5W44REWq5CrB7D6SZw49D2BnrugCeR68oP+XaToag= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984671; c=relaxed/simple; bh=a4G9QRnVsPt/uuqkfe9kUrRCGOW9nceP9hOOxskp0WE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=IZxdMC9t3VkINhXyxgWLo6L7g4uNXtEfV39//RhvoD6VHbu7nsCxfZcpRBQjvPjJAVoXHu6YLBGHc8f75jWoJ+AydKb4DYRqeBrBDcjoPECeiMZnGCRdqZ9/6TrXlX8w535F32ZBFnzdZWeYxX61ILF6oMSIn1wiB8mFJ0j/F5k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=rPuhCfeq; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="rPuhCfeq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jcbFjJdcW9cBdP1aVH3sVRpsiE2CN+LeJLCjjfg7X+7LC5chkQuop50kiZ2RvajXeGoKMoQwWweL05q+XR7uGCHekBcrTexHJWi4NHdLxE2ZIGJlqWY7364el6P6EuGWRLrBXY30YQBDRLFlLTU+MZpsO1LIQNNmgtQPNIumLxSV2pHJXHNn7seOdCC/ARGQRmzDoVzQCMABTahMbn4APoGnZ2IYP6dwr3vk1IeDubVbx+L2tEKIZPDpLILA4Ld5JzlCrUaGXiw8rLVV14FN3DBmBYTbdKHvnYH0Jvt8u1aIwvealnoVzYLhYoU624QFs+Um/4O/nu9MItYDXlHuIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=fGCTgygFHcBT4UMiTZRF4kncO36Fu1a7I/tGPUBEN0I=; b=cEruZ6sSWHUUWiW+VwS2BP2DB1CM03qc60JxmIxX4EQIXolP9dUGAbEsMp50xlrbtZxVETVz5fHUbzJ6eT/HK7lJ61+b9ih7nkP7ws6KsLW9xoBb8DKjjYnZIfG7p25pl+MwcUo7YOh+t1eJxy76F/Bufw2PxkbWlPWdL5CkNPFAoOUR88PrIrackxgzuLPetAl6C8e5nEqGj6G57d/hHGQt/vOAnlYiyVceuT0m1xGMLEs55ucoJktXrlF1RkHQi94Hvjxh2L8DRpCbRkqZfsY8YIKkCgvIPU5nslvIUB7BziyATw7o9B2CqhTRhZ2rwRmRpzVpfhhvZXNucOFXAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fGCTgygFHcBT4UMiTZRF4kncO36Fu1a7I/tGPUBEN0I=; b=rPuhCfeq3Jn8Uo56hRV9IH8kVmavYoOZ28FZNx/H+ll51odi59hFY1V9F8twTDB/O4Vjt4PdfoR+N0q57SSKdUQQ8jhFf9C0ysTX8qR25zhn2AW4a8nyLcliRdpd8T9u+cvXDm3kPGmivQq9wJTP7YBkbzzl13KVuETdlaK9sPA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:16:40 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:16:40 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 29/35] NTB: epf: Add per-SoC quirk to cap MRRS for DWC eDMA (128B for R-Car) Date: Thu, 18 Dec 2025 00:16:03 +0900 Message-ID: <20251217151609.3162665-30-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0005.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::9) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0a7de7a2-4218-4c83-0d26-08de3d7f4757 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qIF/ch9/irPNPtkDzULZ1PKRHG4qAWuaBYjhOT2FnLJnsp3MHMcF5cktBiyL?= =?us-ascii?Q?4H5odU8KFmgj4zlyAobvzFow0XsCi6S619AYLWWx5ELsvZSVy9R64dpSa/Fq?= =?us-ascii?Q?TZ5n2+s6FMnJpd7keMdyueIc6nzY+G0lQ79c2JeDwSETw9jzNZjVR/fwNUiw?= =?us-ascii?Q?D94d25AscRx6S/TZ3vEEUMhHfJkJMmLdsHpFGYwHnCNYw5PWvoC2MCVAW4iN?= =?us-ascii?Q?P+BRldJ8kazFkXLPRJidukGhRauKr4FUI0woUjVIf3QKJsZ9ngnikBRiuQ09?= =?us-ascii?Q?5arqAaP/v4ms6uf7KRJYLxFfY/sDlCetXgJpFMfPuxFQ5JXNR6w3tWEh95aD?= =?us-ascii?Q?RQEyS/BMvQIUpM9i9aAi24N2PgsVRDlIKBuF75zfr8B1XIIEYBPQrBu3V7VC?= =?us-ascii?Q?TFZsLozoxKW+6vy3ESxZTormzMoOsjDEd7PkkaxTjAdkvC+SXa/9Xvvdxaee?= =?us-ascii?Q?iZZxzz65X3Uznvm5UUA/pdq15cGFn1cAqbMETzJ7+cJj66ySQycZ1EkTVWx9?= =?us-ascii?Q?RRM3L+Cwf3/yppRzSpGuMpdhchWNQot+6A6tM9X12zBOzfFwmJS5roUg7epK?= =?us-ascii?Q?DqLy9OBDjCzTO7oqbq9fKEY31yUSbEPqY7FUcF4Y91+X9OKXDg56UymBbVvz?= =?us-ascii?Q?6F5mZNMdfjRJgICGSOYNPZCYRrJKyX+zDwiSgiymq87FM74roLt7U2Zk8BV0?= =?us-ascii?Q?YH5pZKGaWYakhoNMyT5gobzQa3cT5954CtN5WIf+KTlABQC0HhwweIO7YUBe?= =?us-ascii?Q?wUCfIMlDPp0Q1b52xyFB12svu3mYeFdLEoYtKskgg8fkB+9fmaVL+n++24sv?= =?us-ascii?Q?fFrBdCLl0Jj7OsRS8R+ShEfJTFGxsnMB6w/hU8SdTl5fnyYH5VyZliv2BcOx?= =?us-ascii?Q?5e2vfP2hnpctQ+iUDHJU20PlL3kY9RCZrfo+DP1wNAnk/GggirOkmzxsLimp?= =?us-ascii?Q?X8/mC36YV7iuDV8TpHi6hPqSUlPgsFp4NMulkPIk7PRLgaDcAqz7rl+kcTKO?= =?us-ascii?Q?PG2cO/fqq6NGDtnKVoJZrmmpyn/+JOyYfAnVWqP8PiEo32E9F/T0GHDa1uTz?= =?us-ascii?Q?vsAHSrcDkdVTY7cPUtg8nr9oTXyv3ByT8/zloNd92dWpIz9gFeNpbY6HMBpV?= =?us-ascii?Q?72mTEjPh+NaWww58/AkgXHEp9fp9SjaJLN770co65WwJ4xomKTCxBWE7Yd/M?= =?us-ascii?Q?WYl11GF+5OGeDJpsJt8TGrhZHD2wCmRA/2bu0C8ANpxbKSnkGvtH7cBxNDTg?= =?us-ascii?Q?eBxk//Z+XIG0G+XE5EZW8mm/69QWV1mxANIgdHZpg8bvJNAVY1jEYysMNg9C?= =?us-ascii?Q?qSXC5hqm8mrw7QGiaQrBLRkGkFxTesON/GHe/RBPBHIZVVNtDbsh6WtV/pIf?= =?us-ascii?Q?W+cauoKr4ehRxPBeleH9ACvUJkbjxlxcC3Vtsw3CqG5Xl0deh2ME7CeZoze/?= =?us-ascii?Q?jrrBGKmUELKTKdn7iM4nQYCUF2H58BH6?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qiRxN8GdRJwFGPVsFTPfMTuMrQy7M8+ND54WQ1n842IyjXCRIwO0uwzQ37g8?= =?us-ascii?Q?ncfVlnwzq15BtLTgS44NBs6JQsmtoWqCBwsd3vjPRt82oiqbQsjvbhLm7GPX?= =?us-ascii?Q?O5kmjLdt1svijAShTftK6UT/XznKWnvOnWt3TTwintC0XxnuxfzfUF3Jw5jO?= =?us-ascii?Q?uH6Kn1dZquWBbg2Gt/1yhFA+kyQGxSpAn35vmtGcaBnBlV5ofHw2Yl6RQ2v9?= =?us-ascii?Q?v+t9HM9d9fst5lHLL5wcDJReUsWNEotyNzKLLq/MxhnkZGtDKbyqdALPt+kc?= =?us-ascii?Q?wQHcwvpDDKEW+HW3R02qeJ5N+SB6qiCwRKs5lai22sk04PxG9XogIM98kbRB?= =?us-ascii?Q?D1El1n1QEIN5I/QalLF0e29MsLeaDo3rbbYDgxGKtM4631yI+g8r6OQE1t5w?= =?us-ascii?Q?AcsOP0NA2BgXCqEq+6NhEr9Y+/3wCNyFX1k530gdv7bxS7CDqNmKEuHakDGJ?= =?us-ascii?Q?2gIGoV8vu4jy2jQgevBUHha2Ht+JrbSlw1dChiZK2aJJh/atlGf80Won6gSq?= =?us-ascii?Q?fSZDVcQKb0zRnEN6IjiangjJHkz1e1HH1PyaO4Yw8jA6Mp4E5pCGfey+qg5i?= =?us-ascii?Q?S4bPkOQ+YfZdRlwdM6+9XOPwvxt4zX6nU9POK2aXrcMNq6JIqUgg9uXKc2Nk?= =?us-ascii?Q?qH7WVKHHzENUNc9/FOTaCi9uQv9BgYYoWHpPW9bOzx5Y0QAZDwt8gKoFKgb1?= =?us-ascii?Q?AUvT7eibqJp3WJrzEHFgsZATsqvU7AkazMbieQqVihxBPjhcMyxw5VbYkshN?= =?us-ascii?Q?6h5xXO5WgHdqhx1u9MyzFM1tulmBeNSxMHk/FNrzPemh1PhkUZGnhxjjAQ20?= =?us-ascii?Q?wpdwkrRuX08Sp3kKvrO1HpMYNvtnTu0xk76SEUpt0OYT5efhJwQOEobTk3Nr?= =?us-ascii?Q?pn5KFpTIiTmj6jWz5+6RXbmnkGgUjNCLdzfODX6YqHBw71QehvWl1aIbl/xZ?= =?us-ascii?Q?sgi7Jx99sddOY9N7qNWuPKe7BNA8PBOQ7fulO89KapxMc1L8a/YbYO0w9hVV?= =?us-ascii?Q?41sOhNLncJM43buZSeuobo/33iYFJvRW30M2c32F4/5KbJ9loJWzGsuQPBHG?= =?us-ascii?Q?VnXa9d1mcenlX+1FwzdkUBDem3On3zFRlC6kD4rgoS3bMv2dXHeknfD9znW7?= =?us-ascii?Q?Zp+MBhg5JyVtZeAtb2+pF6HKsfUYdruO1iN8qlla48R5OFZeRfKpUx35ucSG?= =?us-ascii?Q?A5bz17hSqsNB7YjJI8jc9o1nD7VU3PvzEXrYC0CnPpWWWMKVxb3fysLbrPh0?= =?us-ascii?Q?MWNa7ncIm3Xoopx1JdWRmYkXk/u8UloUWnBe+DDxJN+ijE1PGGmVilqWMbDs?= =?us-ascii?Q?tknrmnDIY4TKCTrCcT33AAAWIkqCjzP5dA74lym7IXSE2HgkVv6iNbC93NDD?= =?us-ascii?Q?tUYlw5l1cI9SoFaTo1FXFuv1KbSTf6s2XGJuKe/5V3ed4sIF4BOyb3OjFk8R?= =?us-ascii?Q?EoB6oLVD+F4NlreRKDbhInOkqtxI5ez0dh3Zp8+3FMOR5dIysD/pJFTp+umc?= =?us-ascii?Q?xt/KLcfDWYOpncjh5SyUL2+JMc9GcOB0s0pnYKg2T4lgye9a/5u6Na9Z/x7v?= =?us-ascii?Q?XaCu3iFptKLSSOwlDOy2btX7+Z6mnwWXoLAR8BZQ7sxf0mSQ5gDIwqmOiN9j?= =?us-ascii?Q?iWXkI3mnG0ni2a3F5ZQE4Ic=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0a7de7a2-4218-4c83-0d26-08de3d7f4757 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:40.0862 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: F9kQBDRlVH61IbI2v1DnVQAF6q9WKPe2/Sf5dF+pU8zt0yE3t4SAIxHWL8fK38K0J5J/EPx4ZWKkhuu239XybA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Some R-Car platforms using Synopsys DesignWare PCIe with the integrated eDMA exhibit reproducible payload corruption in RC->EP remote DMA read traffic whenever the endpoint issues 256-byte Memory Read (MRd) TLPs. The eDMA injects multiple MRd requests of size less than or equal to min(MRRS, MPS), so constraining the endpoint's MRd request size removes 256-byte MRd TLPs and avoids the issue. This change adds a per-SoC knob in the ntb_hw_epf driver and sets MRRS=3D128 on R-Car. We intentionally do not change the endpoint's MPS. Per PCIe Base Specification, MPS limits the payload size of TLPs with data transmitted by the Function, while Max_Read_Request_Size limits the size of read requests produced by the Function as a Requester. Limiting MRRS is sufficient to constrain MRd Byte Count, while lowering MPS would also throttle unrelated traffic (e.g. endpoint-originated Posted Writes and Completions with Data) without being necessary for this fix. This quirk is scoped to the affected endpoint only and can be removed once the underlying issue is resolved in the controller/IP. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/ntb/hw/epf/ntb_hw_epf.c | 66 +++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index 5303a8944019..efe540a8c734 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -74,6 +74,12 @@ enum epf_ntb_bar { NTB_BAR_NUM, }; =20 +struct ntb_epf_soc_data { + const enum pci_barno *barno_map; + /* non-zero to override MRRS for this SoC */ + int force_mrrs; +}; + #define NTB_EPF_MAX_MW_COUNT (NTB_BAR_NUM - BAR_MW1) =20 struct ntb_epf_dev { @@ -624,11 +630,12 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev) } =20 static int ntb_epf_init_pci(struct ntb_epf_dev *ndev, - struct pci_dev *pdev) + struct pci_dev *pdev, + const struct ntb_epf_soc_data *soc) { struct device *dev =3D ndev->dev; size_t spad_sz, spad_off; - int ret; + int ret, cur; =20 pci_set_drvdata(pdev, ndev); =20 @@ -646,6 +653,17 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev, =20 pci_set_master(pdev); =20 + if (soc && pci_is_pcie(pdev) && soc->force_mrrs) { + cur =3D pcie_get_readrq(pdev); + ret =3D pcie_set_readrq(pdev, soc->force_mrrs); + if (ret) + dev_warn(&pdev->dev, "failed to set MRRS=3D%d: %d\n", + soc->force_mrrs, ret); + else + dev_info(&pdev->dev, "capped MRRS: %d->%d for ntb-epf\n", + cur, soc->force_mrrs); + } + ret =3D dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)); if (ret) { ret =3D dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32)); @@ -720,6 +738,7 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *nde= v) static int ntb_epf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { + const struct ntb_epf_soc_data *soc =3D (const void *)id->driver_data; struct device *dev =3D &pdev->dev; struct ntb_epf_dev *ndev; int ret; @@ -731,16 +750,16 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev, if (!ndev) return -ENOMEM; =20 - ndev->barno_map =3D (const enum pci_barno *)id->driver_data; - if (!ndev->barno_map) + if (!soc || !soc->barno_map) return -EINVAL; =20 + ndev->barno_map =3D soc->barno_map; ndev->dev =3D dev; =20 ntb_epf_init_struct(ndev, pdev); mutex_init(&ndev->cmd_lock); =20 - ret =3D ntb_epf_init_pci(ndev, pdev); + ret =3D ntb_epf_init_pci(ndev, pdev, soc); if (ret) { dev_err(dev, "Failed to init PCI\n"); return ret; @@ -812,21 +831,52 @@ static const enum pci_barno rcar_barno[NTB_BAR_NUM] = =3D { [BAR_MW4] =3D NO_BAR, }; =20 +static const struct ntb_epf_soc_data j721e_soc =3D { + .barno_map =3D j721e_map, +}; + +static const struct ntb_epf_soc_data mx8_soc =3D { + .barno_map =3D mx8_map, +}; + +static const struct ntb_epf_soc_data rcar_soc =3D { + .barno_map =3D rcar_barno, + /* + * On some R-Car platforms using the Synopsys DWC PCIe + eDMA we + * observe data corruption on RC->EP Remote DMA Read paths whenever + * the EP issues large MRd requests. The corruption consistently + * hits the tail of each 256-byte segment (e.g. offsets + * 0x00E0..0x00FF within a 256B block, and again at 0x01E0..0x01FF + * for larger transfers). + * + * The DMA injects multiple MRd requests of size less than or equal + * to the min(MRRS, MPS) into the outbound request path. By + * lowering MRRS to 128 we prevent 256B MRd TLPs from being + * generated and avoid the issue on the affected hardware. We + * intentionally keep MPS unchanged and scope this quirk to this + * endpoint to avoid impacting unrelated devices. + * + * Remove this once the issue is resolved (maybe controller/IP + * level) or a more preferable workaround becomes available. + */ + .force_mrrs =3D 128, +}; + static const struct pci_device_id ntb_epf_pci_tbl[] =3D { { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E), .class =3D PCI_CLASS_MEMORY_RAM << 8, .class_mask =3D 0xffff00, - .driver_data =3D (kernel_ulong_t)j721e_map, + .driver_data =3D (kernel_ulong_t)&j721e_soc, }, { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809), .class =3D PCI_CLASS_MEMORY_RAM << 8, .class_mask =3D 0xffff00, - .driver_data =3D (kernel_ulong_t)mx8_map, + .driver_data =3D (kernel_ulong_t)&mx8_soc, }, { PCI_DEVICE(PCI_VENDOR_ID_RENESAS, 0x0030), .class =3D PCI_CLASS_MEMORY_RAM << 8, .class_mask =3D 0xffff00, - .driver_data =3D (kernel_ulong_t)rcar_barno, + .driver_data =3D (kernel_ulong_t)&rcar_soc, }, { }, }; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB8DC3644DC; Wed, 17 Dec 2025 15:17:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984673; cv=fail; b=Q2OKCLhFCHIVm6Qs2AwKj7k2LAldgLdJcJwTU5Xx30CMSH6nVA0VjuS+q8D+Pm3sjtzdBurBUtCzLjUGB1yZzxg+BVlEbh07J/MYvwGZ8o4Q5mt6aa9Iii93HRqkU3mDIC8T8XUSVcSV7Su2w9HfpGE0Oop4EAWKQAdcxm9LSGU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984673; c=relaxed/simple; bh=0A3xkqVWiRQ/04TfgJdKO+PKB+im5i+bWqzGfyELq3k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dxELWfccPCy1u93+geogV4OJUhvKlodo5nXCis8j4+HBAsKDm2IAVUGbDEsu5SwWcVH8M5fuM6Bz5QwbA+iazGfrqsEqWJtrx1dpct6mQxR5M9XhK2LqnGno7sTRXeO6vSCxQ8DVkfRCM821Cl6HfF0XeBknaK340yp4EdMg6jI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=b9DZKFgX; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="b9DZKFgX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hdg+oPOyhrw2IAXUM7ojY/qnBoJLLLNtkO35xKNAJkzi/L0ddCiLZOqr+7oBtD2LSbCke0lomOW/02CArXY0rRCA0/bJlE7BlHw1NVwpaNogEqeQRDzjq6Yek5940C3i0HjKhno4YJnYhRdJjEqw5k6yG12w9EkOQ64HdEVqpmC+OFIfaTTzNbvIr5XRXSgO5MuGR8W0Yw/xrhweWcgZOLbztnaaAOhjh2OQC3wKi+4OfSz5wy7Zbjycke2YM5H3m4w5Ifh+7yLY371/hh94Xi9gDxyArzISgWbaMskDen65EMB8JtW55v5sQ05Mx+RN6dNYSvgk4Wg/ahVZ1J36fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=0UDTuV4vVEOzVHwmwk1GDcwOpMfmBdbAREqdadxzsRs=; b=T7eYgY9S3VeJKReeo9H34b8viSgT9P/rTZEgG1fhv/S9yYEBUB9TasPIASA0jn0Hex1SORlVSygsyB92egSKTxnW2gvl5uaoFDAbUWM5ziHQ2ibS3unLhqQvBbMDXqwYtZKX8H6sHjPWQ6uOSMcq3Af7siDgoKuZJpskTD+dECySMdS7p6MorE+CtytcbHHcGldtUP9tTBr/VP9IoLItZk96v67EA+GW5hJOozXU5wAVu6f22TKGuOJW90SXGS5TwCrw6SNeUjfVZOGrWKCK1gc2AviD6SK46ZBq5UmwnH16wtEpDniYnQgEY5lYmvB82GY6SMJGW0+W2HibFXT6gg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0UDTuV4vVEOzVHwmwk1GDcwOpMfmBdbAREqdadxzsRs=; b=b9DZKFgXW+gpBrptliDHeCq450vMTozBpG6CsPZTTT9kB/mdxKWjYheBynCKHCtryioMt33Lp+0n/vbyCrkOJH4N4r2nvFgwD/dVBvd1gUGhDBI5akf083Lpi2QRBRQhCssMizopd8eq4Nc0EQbEedM+vNrcLIJY9CVeZehBaUs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:11 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:10 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 30/35] iommu: ipmmu-vmsa: Add PCIe ch0 to devices_allowlist Date: Thu, 18 Dec 2025 00:16:04 +0900 Message-ID: <20251217151609.3162665-31-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0103.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37b::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fd0522c-29d1-47d1-e69d-08de3d7f47d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qQOje/ItnzaUThsMbim9/kOeV3pFBMrmUDUo5uJAthWR9KAhr4ECaNk/bP1F?= =?us-ascii?Q?b3bBJDGbc+hiVAZJajAK24gYWxZE+kkiClziNmk3ocbNwUJRxdApG7BeV6dS?= =?us-ascii?Q?iQbDZgwuZWK5+z5gRorAlgH01QRIa7sQ+Uk1VXPvoiFSI4zpSJ+m4BWJ2sHx?= =?us-ascii?Q?o9ZS8P5ZBLvGUEltkDjC6E0Mj8a3NbLU0wjfNdFRL4aol/dPIPgXDZHc0F9G?= =?us-ascii?Q?ew2bPLWvySmlWNwgAw5CogcTLlCQ/nm+lip0j7hSwTwoYlgq5TVRW1HLlz1o?= =?us-ascii?Q?gC/7tc7C2R/bCkCRMirS9BS5mUP+PGMsg98NWzThGLkdFsCXjRScUsKbigkE?= =?us-ascii?Q?N+RIyp1RjA4qKB37HIQnP0A6bhY14hr0gq269mDs1RinyzXb9u9m5da9bPSC?= =?us-ascii?Q?HAy6u4FxRdLIEWFs6rhpZ/qVr+RLkbWafIpygMCG0kS8FVbfGdZhifCFWy9+?= =?us-ascii?Q?DK/NmxDvtT6WpXyC9aYjU+xWcN1X2FMIXtKi8sB+HzYy0YSgiANWcXWslEDQ?= =?us-ascii?Q?VPxh+dE1gxi4wEYSOGC7AA0xwh7NrpDQTzUy09BMglOEVblSUf3iEzAVQEeL?= =?us-ascii?Q?hfcFks5faN84F48kulQIGAjG6uU/Zl6sjOlzpSPDl3DnFxSjjJrvz7VpVwTB?= =?us-ascii?Q?d3K9FykwAHoUjZqS3VkzUC4/0WHLwM4GEp4Hq/oBaesdbbAG7ZSUBjzDlbqC?= =?us-ascii?Q?D5h4dA9y7mLOP/hOG5+zKZyNhs0P74ElADXhlVc85iSZb2fd96eGJYE1N2JK?= =?us-ascii?Q?VpFtjziIv1BEkok33VlPtAXGfWcM0mgDlqtf7LcdT1QgUeyMzwPIvNrLqBbV?= =?us-ascii?Q?55gcSmoQ8Pcj4XxsrQtcd4iG3g80KlcBJ7dKXriPpbLfzV/yL8NrT9+nySJa?= =?us-ascii?Q?ZA1NWQ6DQTKoShXC1sMAyqjqdsgSzwCwkhMgxphVr2zTyIZ9XpYcdRcTYbx5?= =?us-ascii?Q?ZjM2dHMmuWb1OlL8pLfYaPENT3sVS5rCfLNp6TyRBzBkAnme7S2M9GxCLlTY?= =?us-ascii?Q?dtM9UglztVcX8L7v1BDlf+DXYTbVunVGX+1YjJUqp1ev/jQX6hebuvh1UVT2?= =?us-ascii?Q?6unhVu6csyw2SHMc7ge0I801ZavZ9CFw7PyPBASHfFaOzLLgzJILcMQX4JY6?= =?us-ascii?Q?8cuYsQ+3wTOOmHBRA94Q7/8wgPCVMGkr9xxbTPqSQNLCL/QWLUhqA/64hVj0?= =?us-ascii?Q?aEewfiJ1kCujXuQ4TBKYbUgFw0XK9VeeXTgaxfkuOtTODwcRSWZYXSD7xEMA?= =?us-ascii?Q?8GV6YkUJ10S53umzt1PaE8a/A6ySl1yAxQW31ATm1l3vWI5dlyedEC7lgKJ4?= =?us-ascii?Q?d6kU/nCLPStZy4V0kxiFnb0sopNWcY+kqnluJrHJAQlAjf2jx/Rn6Lcxx/8z?= =?us-ascii?Q?pFRvR3P7JRQAIYmXtMlaX3IB34iutvIPqGEzRmp69KvsjW6MRrhaQ/EWYPZ4?= =?us-ascii?Q?/0GeeBijhrE+STRTkQ/9pByABY1K758s?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Tpzimicbd58QbSu3nPHcXQR1B0Z9Q+hzXXMncHGPEWHDb0Wv6bC38xgV+M4p?= =?us-ascii?Q?PeKdWz3X+DRtTaUKYQZvK2QZMeqodqwuGupldFdS1izF9Ll//Ddo4XpXLjs2?= =?us-ascii?Q?bgBW8h6n4Y/EzquHoe4oAEEd7JzQ7WgktHDR75DjAlKzdX5XZlDdgACmqsNv?= =?us-ascii?Q?jSZoyrx2YvVdzPxBqybpGeylSbpcBoL3tx5zDUAmk4N0D8+vobwlN/Xo8YMQ?= =?us-ascii?Q?E2ktzlpSLxe+fMVRJg99thf7G8xZKDHlJ+R7BylAFPc27f8sRD9ZP2E7O4aj?= =?us-ascii?Q?CVNory5Y9WNK882sxZYHJEvk9CjpRLrv90p1OqDLy8aUtlFoX8jfvnGgk2R2?= =?us-ascii?Q?0S/epp+AV0v3mWU1rhi4ub8x5nRxKbZRMbgYCEC4zc2ZVx/5IKZ2/aDNEo8R?= =?us-ascii?Q?NiXUUK4jmMRgFw5TAybujiawSKAkooS7XLQ8a72K0q1DJ3EDdm+DuM5yaimZ?= =?us-ascii?Q?ZoqttGPsP2R8gHpdL1u0TszmYIanPXYTU21FSnxd16/hh6SOZj3E8r8uPoU/?= =?us-ascii?Q?GCqUQjWZsyJx29/0Wud3hQckPIObl1a7T2NUOaiQYdq4xBr078pu5wYJfHji?= =?us-ascii?Q?XTQzKvBqCCgcOAqjJ7CkmQx1cSmf554KwLKTR7XOUlDrJxqITCcbgR0pcw+h?= =?us-ascii?Q?/iirza0w5QUai63dinlBDj1Xii9+lvw1NW1C0ad5T7IKTk+MvzlFO9N0RzRg?= =?us-ascii?Q?Mr1frxEEdFOVowjvzDp6g1QmhMCQDnV+6eCkzycJMjfOQr50aEkMN6rNg/a2?= =?us-ascii?Q?dDVjDHmcILJfpmWeuv6SWimBRRo+1BEP02jXZ6UHypT9Oy6Vi1YBjDuKSdpz?= =?us-ascii?Q?BEZw/HV47sTHM6kQMGkZkT+z0l65H+4u112O9oV+Whhs/Jpcig7ZP99XX7Xx?= =?us-ascii?Q?EgxJT02ms0kZ63M+8rlSPesFyPVtm+PQhDTKALvsq7tRqwC9HcEQgy8ypvQV?= =?us-ascii?Q?55RZxMTftHfFaxI4ujo+SZ8vlhFtaBGMCeKboqIUjiU8yTUTYuUP+wM6CpNk?= =?us-ascii?Q?Ya6t2zBfHtI9calZJuFDNJoH9q9dqCqY/8IzY2H5uOw72PNT44N9Tz5LKA/f?= =?us-ascii?Q?vKA55kZbrnFWt0ot1kr1LsUnf9S5gVgIvT+8cQeyeG9rmBqQx2kXd6O7C41n?= =?us-ascii?Q?wVJ3rJo3Y07MKH6znFLFXNFq+DqjJAztrSmneXjvGuUkHqgoKLRxCcMmb8Hq?= =?us-ascii?Q?HM+o4iOjjGQOq0SOQ9uAq4NYYvyKRWoNjfv/1jsM2pxJafQixRhcx8MdFRhn?= =?us-ascii?Q?4IfD2f26fr3Zpno/dS/SD2rkHr0IB7n1TEhqX2AUqMxS0YFhITJHhpaLSXBt?= =?us-ascii?Q?gYcLifDOhIXKLhkCYYnTW/rom5x0fOfrtOt/v7MF71ZNvs/EPGYIMwZnmsxc?= =?us-ascii?Q?OWsKSiaJKRXhc9emqJJKRmyc9FiIkGBs3xQqAGMXD9lOkd51/WSqK192aTwB?= =?us-ascii?Q?x55dDIuoCMFwvt8g2VT53ufmbIwB2Vt33ba3IfYEWte96ZNPW/Ecj6MlSLpg?= =?us-ascii?Q?kTg/NsIrUCmPVjmfh33qWPi70VXucIyDm4HkKohc76Q4sMG/UmwWfYpw/PFM?= =?us-ascii?Q?19vfSm7/P9LxvJ5QkmfuS0TYQrnGwzxeRnPA27Jhoq77w/v2+Axwu0oZDIHq?= =?us-ascii?Q?vVdbrHUGe9UCMuFNFTIQk04=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0fd0522c-29d1-47d1-e69d-08de3d7f47d0 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:40.9005 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aGe3+Imlhe/Mica2YDizBkDcxMKZeBVSR7ozUlgZgdTDupYgK7MRb+bBC8G63DNmNnINi2eSfpzaaAryfXNK6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add the PCIe ch0 to the ipmmu-vmsa devices_allowlist so that traffic routed through this PCIe instance can be translated by the IOMMU. Signed-off-by: Koichiro Den --- drivers/iommu/ipmmu-vmsa.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c index ca848288dbf2..724d67ad5ef2 100644 --- a/drivers/iommu/ipmmu-vmsa.c +++ b/drivers/iommu/ipmmu-vmsa.c @@ -743,7 +743,9 @@ static const char * const devices_allowlist[] =3D { "ee100000.mmc", "ee120000.mmc", "ee140000.mmc", - "ee160000.mmc" + "ee160000.mmc", + "e65d0000.pcie", + "e65d0000.pcie-ep", }; =20 static bool ipmmu_device_is_allowed(struct device *dev) --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11010020.outbound.protection.outlook.com [52.101.228.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5005834575E; Wed, 17 Dec 2025 15:17:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984674; cv=fail; b=a1+fsQ6UwGisfNMpHUVEkm/ml7YC8s2kQRVNQFghLdAVIvexpKxQOp9aZoJnLzHCFWXQYh0mFg01FM+3kvD24LMNMs0ruj43lYB9YrBAFQpHbrb72K2Qc0siV3sA0Nae05HPB0itucJt36jTxX5m9bTBvNA7kIzdSW7Cwv8mCPg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984674; c=relaxed/simple; bh=7y01TviDYCFP/OTuFTh5SMbzmrAUj1Yo4q84GVIFXEE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oJr7KsF6VPemPuniBd2H1Bd8ply+TJx+MBx/j0oe0i0boIz23ZfmPUvY3UUmeNLsq9GntPRJHTxcjMJP7fE/YjOOYkqXFIQFT+GBHZ+XHN0XL6js9M1YXfdYNFqnIEHMmAkaEoKwDrHXhPqzzozIfE+SRVyVK6b2l8tguHFLVIo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=VIQUZDbH; arc=fail smtp.client-ip=52.101.228.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="VIQUZDbH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rs8RiZARyMTG+kRi+doNO2eRwL1gaDFteLwhrVwWvfPg5RdoJJdRP/hZH30KGY1jlcNbhtEPvNXMoThxxgXyt9t61cPKTx8Zh9qvUBBJD4c9BcNZ7ru4zyim893d0wzlbMGsLPozSbCSE7hjmhW9Hu8J8OpLMVKDH+lYwmQYzspYjgbZ9ZLs5UDWXn3vaxdRteHS8sylePNVfELSiQ7d9jqm0g9wHoimuP1nWEAoKkLZIP8E/br17lH3fm52LaZbcItlyArXh8lQD8LLVvd1VxAaUz0aoSREVwoKNmx1w2XL5Ir/Es6N31EiRoAE6yWr7ATrGLgY0Vg0o7R+XcAGfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=9SZni+m8Up+trZkWVtYU2nXw/H2fvWLTQUnEPIEJoK4=; b=erM5b0AKHU98L9avorpzFFwDXJ0j8ByEtbscMHEyBJl1oo8qPXE1D8v5G2yoS27oDwcu+Q0MLTzZoNgjkXW1HX0LpzaR4G8jzH7mHpQ9djx2KLoR2IgF0O0Y543SJT6JLcOqK9Q5ug9XJtStW2P0G7eU+A5+ZKXuUbjg2eFdkdtfSx+MpHkOhwsdSWdquOJw4lrJvYus7iw+tS04bswMdRnd0hRkXltkyqr39bZjSjqSkGE2cNmXDAmBcxzqN3U7/fSfF3nNxb7qT5TQ30nb9biqMp6PqAY+RgyRuMHyVfmoEvh2y+/cgyqUr65TP0fUtPcEk96A1zZmX0hOiOtaEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9SZni+m8Up+trZkWVtYU2nXw/H2fvWLTQUnEPIEJoK4=; b=VIQUZDbHrJCtjUcHYM/Woz5pcwdaqib0z2MK9jSp1Iw/7RXAg8PfHlPhwdgHgaBbF9TmpyqRjZxr58BqLFfsj5unfHDm4c0eZXBisvD939KY/3dhB0eWPkgqAOsFj8o+xKhhsL61//oeu/CxGBdOE+nYMsb6nqR6G+rJ7qIW79Q= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:11 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:11 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 31/35] iommu: ipmmu-vmsa: Add support for reserved regions Date: Thu, 18 Dec 2025 00:16:05 +0900 Message-ID: <20251217151609.3162665-32-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0010.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::8) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 284a47a9-9b9d-47cf-de99-08de3d7f4848 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?nac9WznWwmiJc7E7WItosXEzlJ6VpHy/93wnDsl/eaAGY5k4YNKYD1J7HTVg?= =?us-ascii?Q?mqnT8Kej/JOHj0bJOCYSyH8A4FFXyTud0BCh6hk8lo7AScZnpMsmlX4zO576?= =?us-ascii?Q?UQwQ6VJ+BSdLMb1dH5qtZpNFrutD6LzdekR+ETP8xItQeQMetImaKPJq6c+W?= =?us-ascii?Q?EoK7zkoy4mqx2esEQoFr//QkutA675Rx7U89QaXQQ+MCW9DQ1bMvH6Jh/1zb?= =?us-ascii?Q?aNnFr1G/2MfvMkRI/0+Q9S3i/SkImX+2O2F4fkyTmQxxOS8EcgyWfiZ+rCbi?= =?us-ascii?Q?xH9hU+EB/0IMq3HUvElTriP0DcGBkcFMDw4aK1KfGXpEMAewTx6cv66KsMSA?= =?us-ascii?Q?WQ/1Q45KT1CKlve9QYJTWxjopjvNQdzTj5gZbu6NHUB3buDX8XAMU/XIthOg?= =?us-ascii?Q?1cOJAmlruOGn0lexATjxEzsXVQCqEoVke4lLiarnFUcVBRUkcx0G/bECuXyT?= =?us-ascii?Q?YMqa7IcRrg3UEDlHnm3kPL9SBoghUUHMFvmGVbxnOTZfvelB6+Y0DKNzidFh?= =?us-ascii?Q?c6ReqSrdRIp7ECJTaIiDblhe9I9DZROP8vF5rdT7R94l0jdEEdfhkveRMEfw?= =?us-ascii?Q?yHHVeIozj0LNSCjHk2HaoGuZCct9dnF4PohcU1FSjV54ptsoXSzN6Ww5ajxm?= =?us-ascii?Q?B3ZziqjkAHES66pdkPjAzjwXyclHRE+I+GRnWqVJ4/knIPaF2Z+OsWKYRrYn?= =?us-ascii?Q?U/gltZPVqaG5S8/pq1EK44CWrt2g53dUVBlGvx5WvsA0u6C8aA7tNXUN20P5?= =?us-ascii?Q?7yBINTb/QjMnb07EhNYIi87GYcaOrxR3JnIuuhe0ctQSJq5j//W3l2v6Y5M6?= =?us-ascii?Q?ZM17KiPX1zTDMP7keTDKmGvmoH3hfDUV08xoOE2hRaH+AM0n9Ggn3ue1bl8v?= =?us-ascii?Q?NGAT1uJMAksZ/PsiXZ5wx+dm82TFiWI7HnmQ9nRme2SfMSloAi8QcTWreVcg?= =?us-ascii?Q?uJYJeFi8RHsTtqIQC42QyGllPb2WPYJ+mcaygas/C9mJHcwiIOqx6YvWb72Y?= =?us-ascii?Q?IT46XVyGisjdIDC81CtyRPx4kk11qW8ywTZN7tHScqSYtP1nv6cML7klyoMG?= =?us-ascii?Q?KvF5tNjgZG34xIKhHJxgq8vTxq73yAf8H5FfapC1VrR0t3N9g6HuS7PKkOTx?= =?us-ascii?Q?xXxGmNOVSyo9WbPZUJ/IFxD/gaMTxKd1urMb8njkME3AQv089kmpZ3Bbkr79?= =?us-ascii?Q?M/TGT/hXp+kUh6wOPJNHnx+XU9JgTbSw2llapWzQCORSihDO/znbHea1GdPL?= =?us-ascii?Q?jPNRzVGprjPvZfMNFYNG5xNhvByy8+FV8xQIz9Hu8K3b+/z6FqAU7Q4VOKmV?= =?us-ascii?Q?KceOy3JPE+qL1b0XbnCkDcD1UuP9nZyl/lPdFbdnEd5v1makzOy7g4UYFjlg?= =?us-ascii?Q?4RTrF1mFUN4F1wVtzPuXYLURRHhIu57EKnVY6VM4JXHQrLOPyorHd4tfKr13?= =?us-ascii?Q?jzXoQWElcDAch1wWiYqlu31Qd/1vMd+G?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5mvRqMhtd0P/nVaZA5hdO0pncT+YtmFxxwt6BeHl75NM6qnGU2V2uNNMTI6Y?= =?us-ascii?Q?qqtm4SEtsSgbQCQQauuPELXmrxAz1Zc273ktlIx9S9+nVh6kHTPZJp4Etk30?= =?us-ascii?Q?Ey6XdN9T5HW/Ckw+QGKi7/4cZWsIeMf7icMEl1Y22bvlF8zYnf1bzvi9FE6h?= =?us-ascii?Q?+/jT8ewf/C5m9Bn+ZItCx5uBgTbN8r7TSHGxED42gbkg9bWebzlJ0joqLbJK?= =?us-ascii?Q?4NrT1gMsW7tpHbsXHn+icxQ/sM1vrcJ1OcRj79J3NDaLTkKSGTR7mKXpdzKs?= =?us-ascii?Q?/eBfgVv1NNiHh7RhjXCETBdLpJ+lE3DZLije4bPYBK0MXJyrfwYhw13vdXhd?= =?us-ascii?Q?IBegkftoHgSmjt2jCQ+99F+WjtRkA0PiVZ6F4Wh4QTL/et2e4+bZx7N/REwX?= =?us-ascii?Q?gd44NpXVTtzQXX5f6yGo1FgrgtSnciQYq12uNgM0neWSGTgNJiYbcWMuaCri?= =?us-ascii?Q?eMXeRkxnaAQp/6EHxgWrrmdCNcu8H8BLfV6SZqCj3GBVNANi2U5ZNI9SOcmG?= =?us-ascii?Q?k/Xfljb/JGaiPvAqQDtGNkQoJ/LFNOBzGqi9Jt6FwE5aG3Pm9IQIf7PV82yD?= =?us-ascii?Q?7cRU0hn1TYiofskpbU2BtrXo49Lpb7cji5Z+tnUrT7bYPVK+m+q+m14pET+e?= =?us-ascii?Q?ZsA0Nofgx7VtPPzGH7Y4ahXy+Oc+Hpfx9eDrY+uwBL14HgcuSBrbbF8AYrNQ?= =?us-ascii?Q?4KXzS02tvMMLumcnVB8HuTvhjncy3SNhU70Lg14h4PtcdiddTQG5FD0yvJJZ?= =?us-ascii?Q?h/WoLRGebnkGHgdFfQFgtAYA6rdtudSKFWtzMEWzzyp2seQPKQA8B7I0nIwd?= =?us-ascii?Q?5OBBt/Mqlgox0eNCednsJfmrVc6bEqygUmAMQ/Wb8NpqzyAJl3MrVwhmYOPm?= =?us-ascii?Q?Y4bhf6FzSKDxJvIGKC2rhICcXN7GpekryF1RpfrHnvJOY9fHT05KumDSPAU6?= =?us-ascii?Q?NUxMiOVNpPDSQoNEYMI7onYlaq26I86qVJgekTLo/lCLEWhhrKKdzxccRSKn?= =?us-ascii?Q?mzrMF8Ph8UQt9vXD37fHAxeqqSZnCETS3tclLcqM+A6AZrqPmTznc3rM8USl?= =?us-ascii?Q?7XOB7RleKOvTQuqRz44Ec3J1J2B1XyG4TYZ2E5oBSnpVXQKrhw1x4oh90nDh?= =?us-ascii?Q?qdps2mLyohalgx3ZakdbSpJmsSKzui90GVEFvEphSTyx8To/71FBf8j6+i9O?= =?us-ascii?Q?JlT/sBbe8RBvUVmcdwbYHXy8IFPJWom5B2peuLVSMIcWgNuA02JdtCyudd5+?= =?us-ascii?Q?oQr1bbrqeOGIFe50WwbHq6lUxkcxAt+FuwU3DsmeOauXls7s9T5RzHk+fE6H?= =?us-ascii?Q?CDVifsyTX38stxVQJuYW110BYiyyOegT3rYJ607tInjixlu2OZUIcmUIWwU/?= =?us-ascii?Q?NI+dKF/tDy+5qa+qleTqLM7M0f/707yrfiUv35syhzuya0f7rK9oWSzG4i2j?= =?us-ascii?Q?fKyjCOqkmKrGmyHKjedCc+Tu+gAwlYkI59LDl2w2cAenVGlvlG9/FNkVZ7uJ?= =?us-ascii?Q?UCcZbN+soY35LsMUnOVB8HDFWQ/530jVmAPJorj81oXzvf/VsfI3yh1cDhy0?= =?us-ascii?Q?A/ejjqT2Y3/ySwjHgODrK+3LLUxpnzGN3ktkpBH85hcKFFgXfunPkDm3OFGW?= =?us-ascii?Q?iJMTsFmNQOOsnzGyzgjElSE=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 284a47a9-9b9d-47cf-de99-08de3d7f4848 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:41.6684 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SyTtRFxlBaAqzHBxJdtk0b+yOKiayoyNVQzzQAcq+SNQBn6rndnOdQCf+Q5alYgGr/VdhB9OmT7Kb++X4igpJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add support for reserved regions using iommu_dma_get_resv_regions(). Signed-off-by: Koichiro Den --- drivers/iommu/ipmmu-vmsa.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c index 724d67ad5ef2..4a89d95db0f8 100644 --- a/drivers/iommu/ipmmu-vmsa.c +++ b/drivers/iommu/ipmmu-vmsa.c @@ -25,6 +25,8 @@ #include #include =20 +#include "dma-iommu.h" + #if defined(CONFIG_ARM) && !defined(CONFIG_IOMMU_DMA) #include #else @@ -888,6 +890,7 @@ static const struct iommu_ops ipmmu_ops =3D { .device_group =3D IS_ENABLED(CONFIG_ARM) && !IS_ENABLED(CONFIG_IOMMU_DMA) ? generic_device_group : generic_single_device_group, .of_xlate =3D ipmmu_of_xlate, + .get_resv_regions =3D iommu_dma_get_resv_regions, .default_domain_ops =3D &(const struct iommu_domain_ops) { .attach_dev =3D ipmmu_attach_device, .map_pages =3D ipmmu_map, --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F086E36657C; Wed, 17 Dec 2025 15:17:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984676; cv=fail; b=EMCnuSA4yf3rq4CQU7HGM8Elc6LRcsp2+3AL1oVtNIEL8l1u9wouPMF7Pkwkzo/6H+8sTgttYfi8pkvEHbQioyqJU25s3OMvnv5IXXCEktGDlX0Cv9HHIk9CdrAyHp6mKS9ZO5EDaGSYRW1wy8z+kD8GL4wriWFXgpd2/LrKMbg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984676; c=relaxed/simple; bh=/1OXLMEl0+xEGADqX4N+3aFF3M9YFod1lihNvIzYdlo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pLgA/sB6PL3cqbMYASORkkNL/C03ii8OCH7UzGe9Ww4joKF756G1Y9dslcbHZ/rrCZfxeIvXaPKduFahxoCCvHFyO2WKEHldeljBRlqJrQzFXnTweq3o3t0Mj1ZBC83Bs5QiYqp9dWNG1kDqflA+KI0fiRi6xNrhtshQC+W95is= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=PkHoPuKZ; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="PkHoPuKZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hcsrjkzKDGVldEdbKKTPNSclfH4EXp9psQHkPMUZ2lrO352WNz5N0X5dpmLApqJxZogtUv1itZGjq7mq5n/Rn8w0Lqtz5FJEtPEhYCtF5Q92GLcHgfJS3hYrjRBXpklHM1m+NMXJ/6MJzQxSr80DUr0dKzb7DoFElbUsGrAeW3p7otjz7DddBwdVlCrjKe9/9MKQdMyCXSK+ZXDNv1/W93FxY8sRR8wQG8y6xwZn8KxTzlk5rxkX9DuqvPxn/w7kEYiUjrzJbXw4bXxmFwUN0ZTVv1xcHu32qF7Zs4AJDQ9wLaNED9blphBThRM+Cp9znXSyYKbb96Dys47oh6UJgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=jP2NFmFhezNJzOBBHMSBbmnhldv6+xAK3DW3wXhut7w=; b=t5f4LzLR7qP4m2i3/HTc5nc+ObMqXqpyhE3f4p6UX5y0nSetk01CuoSi+n6NcVF2TQcB0toS651pBku3W9GMwzu2ohKVt1JNTOjakgC3OeQ/dzmevitcAb7jSz28vLs1BVQrqhJZAriKHWkXO9j/sUxZYSZMcRQyxEvQ+/HfURvdX43KUBGaSCZMgjWkp3c93o9j3im2YJAJtNO4/4A5jcZ1VOSnH+SdpmCtWZULTzOcS58wMnJ6mJ482Yt+09CnzztLio7vAPz6xfdqw+ihEqJ6ff8JkQTgYkl4eQYA3NH3BsGdrtFeCW9hCELRSnBqpIu/NBud2ofPWUSXGBnHIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jP2NFmFhezNJzOBBHMSBbmnhldv6+xAK3DW3wXhut7w=; b=PkHoPuKZmkyzIBnWwFExK4+Onb9EipTagd5w4Mar8EODBASEybyiySNhqI1e2dzuyEkf/XKz4gUUy36rLZeNC1NEZ6I/le+79rkzeTiwaVygwzjf1fug/nkmYpQBHNOt0M4V3IyJO3HaKCR+KM3vEU8qEQ0XnNswT37Ecz2OHck= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:11 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:11 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 32/35] arm64: dts: renesas: Add Spider RC/EP DTs for NTB with remote DW PCIe eDMA Date: Thu, 18 Dec 2025 00:16:06 +0900 Message-ID: <20251217151609.3162665-33-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0031.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::19) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: f4f302e8-3ca2-4242-58bc-08de3d7f48bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UkNuwyJ7ZgHFpV+z3f+5TOHkZCTqA72dcD5+4EEcG7ifBetYg2tb1r6FF7al?= =?us-ascii?Q?Pjn81bQLeQr/ZgfnlymqrPAwBMozXVvAbIHRc4WRUTvtKsXEGdcGwqa7SzcM?= =?us-ascii?Q?aPBO+5jk+IUSCqwZ+dpE0EEsGsyyZuJ3gFCEzOY4v03nKIvtAQjJPM3SuB/D?= =?us-ascii?Q?YzLScmw2jnFh9NX3HYkGZ2cZiqudiEfxh+cD1Fpd61PXk26mENYRWDZE4fos?= =?us-ascii?Q?fhfTTffMEUJJwLiT2HizRJ+dBSxvEm/XzF9sVkRcCBzL+DmdCxid7CeRvfwU?= =?us-ascii?Q?3scA3ozg7kkfrSNEdQrerM45x+DRRnhi3BhDSjfT2zMpv0sV68PAmyGKKQET?= =?us-ascii?Q?sA2OHsYPh2hv8qyJpXf8ZoAOjUKD7YbVCeBWzu85i+PoQVeW+vEsCw7B8ttN?= =?us-ascii?Q?H8Xv8jVeHAMPmT1tUfA9Rle3UXumIViI4NcYTXQIYeFzX0f0vFP4RBwDj4gp?= =?us-ascii?Q?KN0KJgE7oSTgWznNDXh+ucpR+dAACImtgEJHh53UMhQdqimrbq/zSQzW1C2q?= =?us-ascii?Q?KssXtlw3wlAIDxfw0MeOqIBqCx3102pFfWVIGUiXQ1Z5RGLjOzbIqdqAV8UZ?= =?us-ascii?Q?KcbN41pGNYXSLzE9nyezvt3wKV3ohziFhDoEK3HFdcgZq5Q4dRxfSr1GQb+A?= =?us-ascii?Q?BnH9au8mW8LbsoxFXlqKXSyIt+Yqvnevr+HQDDQbttgIVPgCPv2ufNA7GqPU?= =?us-ascii?Q?5+773CvdapUnukI1u4GxKO8TOrtUTMBCypBJLA9B3EsJcYBJanzWSxe4yBjM?= =?us-ascii?Q?lK0T5kvWfJo011H+fDjcopGY0CA+kbKzhTugIZDf2rAD0zIilYG+zvhM42WZ?= =?us-ascii?Q?/IA1XhkcDEtxRv1RjbGKcagh46NALrP1TF6teZgftJn/humqx8/NmCUTdfz0?= =?us-ascii?Q?dzcWhMZXkyaRjop3Ikr0f9CTdbKIJB8+rypS8NZNhyM6SmckpmgZjLHwLTHg?= =?us-ascii?Q?UyxL1HzbWA0scGCcCZemTLPExeLDU6xkiX4RouoGiGeFXq0DI4i0wIXZeW+O?= =?us-ascii?Q?5vMmdd+xIc2e/AE4bxDkKBp/e5wt8Up/jHHz3HFMZqi01qRROrW1ZcOfGi+E?= =?us-ascii?Q?JBWvPH9kIPm0avxlIrfXKxF75Ab90/FZkkM6o3e8CQdZzYf8ftxm9KMXnPzC?= =?us-ascii?Q?QQMwKMo7QfIYswc24B7N30kb+MebKte475HX1bUCXIVYHuASFoPoJRC8YbZj?= =?us-ascii?Q?RbhFOEsM7D/HwJ30WNFOv/I1U2HcpruQNFf3XWhfw5JcpXufJBmn4pKsn5xM?= =?us-ascii?Q?KWBrB5ZksAopIOOPAqHVQnepoIeOUmKDkIEydfrhOr5drFVprpgSGcguKnNm?= =?us-ascii?Q?JwF6a9TxeXSJzPWqfezra9K0ddONoAtvJ2eyMpXxNF8DI9uRd8brCMgBaKQx?= =?us-ascii?Q?zv+38hEByeM3tQ0da/ziGY+LCjFkTsl8zJC4ax9BPW1k8Rkw3qqpARPdqs8g?= =?us-ascii?Q?MQQPqjSoJ86RkGzjTlKsaeoC5VBCSZ52?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bLqHYW3hWW2Ak0Y+3zKiHqOshVsiz4cxQDqmu7oXx8+5nSBkwIgcfY58ibs9?= =?us-ascii?Q?AizHGAqW6jO4OneiOI1zDu02E8/5kDKp1iGaKBXfQ1uJ+AZ/UQmcqx2RUP14?= =?us-ascii?Q?24NVs8v9yQOY+8PRBxyqKW5eHwpRNxdSvL1LjDzA+hKfjs6bC7oMFzy6Bcv7?= =?us-ascii?Q?2vP0bLC+XxjnVgpAKOPZbUfBDEQ9Bl3sYH7Syr+G6YLSe8Yc19QdpHgfJ/QE?= =?us-ascii?Q?tf77vVSSX/4Qgz3h5E8qRe60W07zmEYdP7ijhcyLdmfn1Vec9P1vXEvmDd10?= =?us-ascii?Q?O7Oe4kaQ+B3ygNpeNAxEknnm6t+jwH8U037TgARpfpnYSnMvcq3MmuyG5Qa9?= =?us-ascii?Q?lHZFRZzB2dizvH6yjiDlTGmF30H5CCGysop0mgAlZQZsPsBiXKOWFWHu4oPc?= =?us-ascii?Q?QcqMQzt4A516QbQ67bao8VkULconUlZFI2wBjcz2Exf7wBs1Ur+69t083nrd?= =?us-ascii?Q?CDvqCGsqYQp7imf2HWVZ4l7+yPqJQF4AjRH2mwhR5/+MkAivXXDak/U7SFra?= =?us-ascii?Q?/nJIJg4+Y+40i8kP5bPwCw9DZmpAcWdYbiw/7kkO52a9b3Xj6mZsJQvb55mX?= =?us-ascii?Q?4AmNIjo0hCodyiEw0RJOMgiZ+i5rt7FBwKpTj6zi7Ke+wmLdfLIYzzoP5xyI?= =?us-ascii?Q?hFTeH89ooaLBdzTQY9c2+KdKrZXZ9dpMAEtZPPNXmcoGmH7tW64JsSSnf0Lo?= =?us-ascii?Q?3YLaS+827ok7D8y1d8sC2b5/D8y3PY1xvx1SHv49Qs8qJsORCc2exqNlpHxg?= =?us-ascii?Q?h5D2yD7Mvf6qn09YbWpy1b+Z7INFpCsIIBqtvQ9F0iafsjhumZAfxJh3OYiv?= =?us-ascii?Q?RnsrShiTs/VGfuOBRhkKKJHesL570X6A1PTdXeZ3HbA/uAd6r2uVUW2i64wH?= =?us-ascii?Q?RW5uJIAezV/xUZdq+ZTPp0eVQEhZJehNckEcv3p1Kjonnr/Z9VJ0oO2IHvXs?= =?us-ascii?Q?o+EREuxW35X6FVVXBqvyDe5Wp/LemzFKH/t8CYJ2eq3zIa23NJlE7qN6pfGL?= =?us-ascii?Q?ePMI5LLA2Y0+BJ6J5rAfTypJ30Fd1p/+OuI+FydOfI4xtZBA1oJrr3iYLXH8?= =?us-ascii?Q?YrYWZ9S5yTnquKv986n0yJNHoCyB6N1WhufKqptfF8qvGCbiQaKMjNDiQUop?= =?us-ascii?Q?ws1Erc+S7IFEeg848W8J9sV9YgcEo617MeuTttfbPdCO/fdoOkbC1/QbVSTa?= =?us-ascii?Q?4x37Ex17hjQtvVi43ala2mYLj5l3JKZgAEu9CfvqMF95HPF5VGgIVsNJQz8h?= =?us-ascii?Q?HTe93NSXIDU/0tQ9woGsDc17fmpcCy86h/Zh1Oxw/dl1FE5YfOGNTgH4GBfH?= =?us-ascii?Q?lo7XJiEYIhDTZGcHZCqQ8gTWSkWZF7yGo/JMMv15h1U6d3HyfZ3WNwhapHqC?= =?us-ascii?Q?LxBTGf/Yz5zmmJA9SyeItUOKRDsXgsir5GsN8R8do8rKAjrcNRU1oGW79rc9?= =?us-ascii?Q?axIS+4LfeEKuzyvalkIiOhANwQQZSpVxHJ/2Q3o2uY3kqCQdsowI0DTzbqcm?= =?us-ascii?Q?qFvBQzmIq2giWAljNTZcBhgIukS4ZqSMjQflw74gb3MqbSPB4ZpEa0e6n/MP?= =?us-ascii?Q?h4JHENQLFYI1Y5yXUrTGczpiNlZRqVwOBjHCoxS1fLcjHVtL4NtcFRAOuohU?= =?us-ascii?Q?/TzrJPoz6dlabbrjmQQl8Sw=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f4f302e8-3ca2-4242-58bc-08de3d7f48bb X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:42.4198 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p62KTlN83cAZQl6OLISeg+irWBGnY6CvKdBI3Zr/hT/Z5wIug4xjeQw7E10RIdgc2/FaBxNLZQ53vtd+ljRHQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add dedicated DTs for the Spider CPU+BreakOut boards when used in PCIe RC/EP mode with DW PCIe eDMA based NTB transport. * r8a779f0-spider-rc.dts describes the board in RC mode. It reserves 4 MiB of IOVA starting at 0xfe000000, which on this SoC is the ECAM/Config aperture of the PCIe host bridge. In stress testing with the remote eDMA, allowing generic DMA mappings to occupy this range led to immediate instability. The exact mechanism is under investigation, but reserving the range avoids the issue in practice. * r8a779f0-spider-ep.dts describes the board in EP mode. The RC interface is disabled and the EP interface is enabled. IPMMU usage matches the RC case. The base r8a779f0-spider.dts is intentionally left unchanged and continues to describe the default RC-only board configuration. Signed-off-by: Koichiro Den --- arch/arm64/boot/dts/renesas/Makefile | 2 + .../boot/dts/renesas/r8a779f0-spider-ep.dts | 37 +++++++++++++ .../boot/dts/renesas/r8a779f0-spider-rc.dts | 52 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 arch/arm64/boot/dts/renesas/r8a779f0-spider-ep.dts create mode 100644 arch/arm64/boot/dts/renesas/r8a779f0-spider-rc.dts diff --git a/arch/arm64/boot/dts/renesas/Makefile b/arch/arm64/boot/dts/ren= esas/Makefile index 1fab1b50f20e..e8d312be515b 100644 --- a/arch/arm64/boot/dts/renesas/Makefile +++ b/arch/arm64/boot/dts/renesas/Makefile @@ -82,6 +82,8 @@ dtb-$(CONFIG_ARCH_R8A77995) +=3D r8a77995-draak-panel-aa1= 04xd12.dtb dtb-$(CONFIG_ARCH_R8A779A0) +=3D r8a779a0-falcon.dtb =20 dtb-$(CONFIG_ARCH_R8A779F0) +=3D r8a779f0-spider.dtb +dtb-$(CONFIG_ARCH_R8A779F0) +=3D r8a779f0-spider-ep.dtb +dtb-$(CONFIG_ARCH_R8A779F0) +=3D r8a779f0-spider-rc.dtb dtb-$(CONFIG_ARCH_R8A779F0) +=3D r8a779f4-s4sk.dtb =20 dtb-$(CONFIG_ARCH_R8A779G0) +=3D r8a779g0-white-hawk.dtb diff --git a/arch/arm64/boot/dts/renesas/r8a779f0-spider-ep.dts b/arch/arm6= 4/boot/dts/renesas/r8a779f0-spider-ep.dts new file mode 100644 index 000000000000..6753f8497d0d --- /dev/null +++ b/arch/arm64/boot/dts/renesas/r8a779f0-spider-ep.dts @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Device Tree Source for the Spider CPU and BreakOut boards + * (PCIe EP mode with DW PCIe eDMA used for NTB transport) + * + * Based on the base r8a779f0-spider.dts. + * + * Copyright (C) 2025 Renesas Electronics Corp. + */ + +/dts-v1/; +#include "r8a779f0-spider-cpu.dtsi" +#include "r8a779f0-spider-ethernet.dtsi" + +/ { + model =3D "Renesas Spider CPU and Breakout boards based on r8a779f0"; + compatible =3D "renesas,spider-breakout", "renesas,spider-cpu", + "renesas,r8a779f0"; +}; + +&i2c4 { + eeprom@51 { + compatible =3D "rohm,br24g01", "atmel,24c01"; + label =3D "breakout-board"; + reg =3D <0x51>; + pagesize =3D <8>; + }; +}; + +&pciec0 { + status =3D "disabled"; +}; + +&pciec0_ep { + iommus =3D <&ipmmu_hc 32>; + status =3D "okay"; +}; diff --git a/arch/arm64/boot/dts/renesas/r8a779f0-spider-rc.dts b/arch/arm6= 4/boot/dts/renesas/r8a779f0-spider-rc.dts new file mode 100644 index 000000000000..c7112862e1e1 --- /dev/null +++ b/arch/arm64/boot/dts/renesas/r8a779f0-spider-rc.dts @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Device Tree Source for the Spider CPU and BreakOut boards + * (PCIe RC mode with remote DW PCIe eDMA used for NTB transport) + * + * Based on the base r8a779f0-spider.dts. + * + * Copyright (C) 2025 Renesas Electronics Corp. + */ + +/dts-v1/; +#include "r8a779f0-spider-cpu.dtsi" +#include "r8a779f0-spider-ethernet.dtsi" + +/ { + model =3D "Renesas Spider CPU and Breakout boards based on r8a779f0"; + compatible =3D "renesas,spider-breakout", "renesas,spider-cpu", + "renesas,r8a779f0"; + + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + /* + * Reserve 4 MiB of IOVA starting at 0xfe000000. Allowing DMA + * writes whose DAR (destination IOVA) falls numerically inside + * the ECAM/config window has been observed to trigger + * controller misbehavior. + */ + pciec0_iova_resv: pcie-iova-resv { + iommu-addresses =3D <&pciec0 0x0 0xfe000000 0x0 0x00400000>; + }; + }; +}; + +&i2c4 { + eeprom@51 { + compatible =3D "rohm,br24g01", "atmel,24c01"; + label =3D "breakout-board"; + reg =3D <0x51>; + pagesize =3D <8>; + }; +}; + +&pciec0 { + iommus =3D <&ipmmu_hc 32>; + iommu-map =3D <0 &ipmmu_hc 32 1>; + iommu-map-mask =3D <0>; + + memory-region =3D <&pciec0_iova_resv>; +}; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11010020.outbound.protection.outlook.com [52.101.228.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62287364EAB; Wed, 17 Dec 2025 15:17:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984676; cv=fail; b=ed+Axlz8RnK0QPT4zRFQiIv+fx3b4VvBq2ljebopHhlr7zhZoD/SJZOBdr2LCb7jYuhWeRxtUMEjrXLUDlb//8JiGLuroWu/4/2oE0gaDCaljZr89dQ96PKxfxwrnsd9TWFv7uo+Ep+BEhJGVnJIgdDlgA1rvYZRDbGaIPuxw0s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984676; c=relaxed/simple; bh=woB06NkymuQMz4leOTLhvgJLQVdNeKEJIZ9thr0VS2o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=O18wyDmKRlKyMqrRkTYQ2L2kRjH3q2Qqvh7/XK4o9E9wO/UwS8DhV0gFPSEx5IoGprvOPkI9NCrk3+NYJJ5T1dd8R6bj8pzEpobhYfl8538fs6y+ct6uKrJRFzvSOQz+W35xxkVe6IywT3c/OXNtG6M9wumX2pM85qQDIjBs3uQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=oxfZ4vRM; arc=fail smtp.client-ip=52.101.228.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="oxfZ4vRM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aVNu7IEj99CfnOpDcpNHKJLjfcUDSRv8a1IwD8CMdAMG0tn98aklbb76pgk7RACFrgZjeviHrQ328Oez+PS+W371Y4XkY592uOC1OJwtyPv0h1Whe6ZtQsr9ENjzxZTrxT11m+WFJpGbDQd0GfoGsM1ANbYDamzwmDFUfnIlwl4aYUnG+anCVm7rJ1+cImBZU6+oIU0lMrRfHTBC5r8pO2Rfj267tk5MrZ6DtbX5vnqsf16wz02NPvL5KXeNevPNXpd2a2tz+N/9tVhfEhYRYGsFiZCAEmUn7HRWvCi74zrq16oeb/MfP5q3DUQfbROv5Tu3OEFu8INe0V529N5G/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=MAVmbXBmrEALoCTWYu49qfxKawjYIsxIDI1OIzbn8cU=; b=TDN891NQRr7aP/GNhvuivATFuq10j4I/BIwhAJhzIeBNpUf5ON8GbBh04SLgMrlV38t0dhNBgE8/YRBor9blMWqCNAqyBPZkYENQvNz/zFZ7n5wWEQBT8yw0cxUYKw8lw9kTyUNfMPlKpiKw7inpC/MHUtgbaBJadYjrcHl7Xa4Sht6ADB8DvhE8/i31CZ9756rxRKcdSEnrqY8QOHsE3YvW5DETcMb/xdKKnzQmQKZGkG6iSPOztWR9Sab+K03C+L9zea6mjaJhdEfD9AhstmVFy8Vwv5sv/Hz970KRU+M9LSlpp/nsNPQaTwsIc+zh7JBGGsHe/S+SMsR5XgEqpw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MAVmbXBmrEALoCTWYu49qfxKawjYIsxIDI1OIzbn8cU=; b=oxfZ4vRMOh3m7EFVElGqQ8cQVIbgaqoFYwv3uBXZ8Lv/0lokO0W1rctBJxoybhHLHLYTihv/o+GYqemAv+gRn5iwvprzqEbd+Ke46fFYDKslJmML+uyk3j46LmvSLY3KUCcakkTPFgYb6hCn0W3T9Uh6zisoYbfriWpD9qpphN8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:11 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:11 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 33/35] NTB: epf: Add an additional memory window (MW2) barno mapping on Renesas R-Car Date: Thu, 18 Dec 2025 00:16:07 +0900 Message-ID: <20251217151609.3162665-34-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0103.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37b::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: 52e5d0e4-7ff5-411f-03a4-08de3d7f4937 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?D/vv/oLGwynS/Wn9IVZIBchARkfdYIlTdq4xBMfNZq5UOiX4pGmDvkXoOhMb?= =?us-ascii?Q?DaHpkCreXsnRyBEBKA/1vAlx5rzrHkH9L6ehobVGjDWe+ih8aul/NaMJ0EV5?= =?us-ascii?Q?FXF+wKPKxC1grbonP43705qJkNNVrg6ELVIiU5qpm+2VB5XkpcQAj/XTzJEZ?= =?us-ascii?Q?0QiQfvAAJDaTL0ASMcAhlQ/Bnp49miOzWac6w15fUlQwntQ2PTTstx82MpSK?= =?us-ascii?Q?c2xWqTCejXesQYildCAjZ/Pck937g6vt4sYl41huBVcdc0In5WSKIl0yEi8M?= =?us-ascii?Q?d5uD+LapTH6g+tG0sLagJJf3SxzMPKehY4WSdsHB0m4xbS9w380+wvaJHjkf?= =?us-ascii?Q?e7gApiCiNF68KYzAnTyEtpigcQNei6R6hDqxeBkplkZ4opTFZOpm9qFR5l8l?= =?us-ascii?Q?0SxmkdT4X69RO4RPrY33cjZYzPT4SxR9Lt7E5viyqLyazyLpnQlICnfQVHHG?= =?us-ascii?Q?TMA3R2pcKzS++Roz/JerPj2Nb+KR8nNtAKQvQR9YBJ+TwWf7XRKYTxxZ+lwX?= =?us-ascii?Q?v3uby32I3g9tqH7irArfmqqbMwOl7CT997bhwrApz+3WvpY4vwDWQ0WbOvab?= =?us-ascii?Q?a70kK0wDSxyk23ehJGVDOdtu6HGymNQo9kutCSk1aTQ+dYwnakzDMaV5OWh9?= =?us-ascii?Q?XPN/OEn8+Et51kq4VV/LpGYKytLa2xoe/8cJ36XGtHDX2jbaaf99jz2Lq5No?= =?us-ascii?Q?emwePIv6YRrwsv+4E7bz2PVB8YCqpWkOQJe7vaY+AX4lF9wBqEGh915qNNi2?= =?us-ascii?Q?KkfC4l7+wf/AwWgBcSPMeJW1sxEgYbW/pfK5hoPvQBIGyZULL1SBIVIgvsC0?= =?us-ascii?Q?6OpdNrUM4Uu2XNFY2lFNCZce5cXDUcUKZYb3X0z891KRMe1Ac4qetBafGRfA?= =?us-ascii?Q?Lc789aizY1J3/q1haj7ChbZscRtGii8rwsux+KXhp/vjrwT5hZUgAIaCBjRi?= =?us-ascii?Q?SsKxSKYa7TN07G5VHWCJM+cwRmQzIugfEmClzc7aJYd/oxQJ0Sr/bzfixb+Y?= =?us-ascii?Q?iCdCiPtwHuI3ugt2NlUKuFKwuCncKXaenAgBgz9iuMIdrMjnR4WpsfO3821S?= =?us-ascii?Q?d5VEPplSXlwps7vEwZDyjV5+EUr6GRALrM0Kyhukc7YBHue8bmlI00/6C/VF?= =?us-ascii?Q?QMLJXDe8Mx/3wKqcb00RlHxDJVINU24v6/j+ZS7B5Wt3rZBZ8iJRnk/8QX2s?= =?us-ascii?Q?NUcJWgv8001zsg5aTnc01oSf6FBgQgYOs09uhwFXhT5+/31rZSnVSN7BzKYu?= =?us-ascii?Q?13lqh27L5gYKK83twZAO67/MPokIpBDF40vC4BQz5/TTdIU+96OZk8vqjxNh?= =?us-ascii?Q?zx1ppRqOeLg25Raa6/GIsjHIEXU4F2l85MuJWXauvYbAE+xMSRez+RLZ5I+E?= =?us-ascii?Q?wojf8g1KUGNoo7eZ1qRSF80wUpTpMpPKN1lnei6oY0/kHIMa+IvvpdXAjySM?= =?us-ascii?Q?EwNlYq7k4YOepTAQOHK4nz9hnfFFH40n?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TODbqSpMRtddSOZR9hPo5hUbWO6QS44gB84nBbNKqUZvPf7x2WeS/nfvPvxy?= =?us-ascii?Q?QfKh6wO/Ry2Z8G8I4WBpSwSEbhNekuEwKtfahqphNtUQvWyrooUiIlNwirpp?= =?us-ascii?Q?BHNVXRoGWim/hJzrD6fFZgqqfRoVnJ6gNZNWv1zyGp376rZQwZle0NauLI9l?= =?us-ascii?Q?0/2fIfVwMMz62lRDriaqPHxs9ypVowtqY/loUKIqGK+ieVGK1wpGD29Nm0X4?= =?us-ascii?Q?0FYxtf2T5iXrNsp7i+U2zDvajkPEejRcdW1Ftb/ZNzMqltuvDiHuBvKWj/77?= =?us-ascii?Q?rKer+0CqxNmovyZXW1aRJoum7cFsknkoHp1GggjQaxtBwRiWz21/o+bBB8La?= =?us-ascii?Q?k5SagymLi3cUZfvUzFCTB1h8dK+MBT6BdHRCwUp8z28KpYhB2GNXaf6zRh1z?= =?us-ascii?Q?krXqql827psL9bgF+GgZ7hCm5D3ZnFXaURsVFjNCKLu/PKVJItON4FGmwL6K?= =?us-ascii?Q?ii7PKe4sGkOuTpnWwBhwIDwmhxPzzh2NHX8FtCZ9LGfxIv9TJkmqsbN1g15e?= =?us-ascii?Q?ZjE5LV4ieQGlsiOncaMZtmI0EvNFDxENvgvpz0KK0dAqrYBC97Q+ju3spPB+?= =?us-ascii?Q?SHUvzltYWtgNNbNwbxAXjaGfE8XPICSzsABOaNBYcyw9guQKPIP5QGugx17I?= =?us-ascii?Q?fmDepnXDfbaFtR2h+bYdCc3+NrtqWjy3JhXrA5dHKUb/65hbvz0yMELnSAxo?= =?us-ascii?Q?rH3lRpFguBB6rUnvxox4W9N+x1S1yykjDmS3R0J+omKauZqGETdJeQd5+6av?= =?us-ascii?Q?sQ6QnBvJ53J5VchdDDjdiPEwrKhOAow1euHS3xoa8rR0ma/SOxGeouWjcIjs?= =?us-ascii?Q?4OBZVQjUKs8exUP4n7Q/eHVJoVPmvCJPHPDb50bl5eKj1CSDuCMahq8b2Khn?= =?us-ascii?Q?cReNqlutSzhEPGvnBCUtus0TfI2jOphEahXEL372d5c1rgDeMKQx4mCFTHy2?= =?us-ascii?Q?0LWjHzCoGVqdVo5eeO/zOaSxRnG/D/J+ihHWr54O1bo1l3vRG6yxnMvUnc71?= =?us-ascii?Q?nBwNMiP0xpXEXdka4kfIpIZ/+GGobl3H3G64axLeQ8wz8qEg50eyeMufMasd?= =?us-ascii?Q?XZXmhFglsOAW5dkWrE4om+5bN4jZ0g0po6UQBCiuN2rOA/O/rf7QUj4QcPo6?= =?us-ascii?Q?uxqar1FXnpz98lL55TWCNA8QVmcFD4gE77sHGtUmi+dvqMZV4I0IF6L0fA6p?= =?us-ascii?Q?NWuaWzxvB7txCWJUGJJLC3Ps0k+/zuYMyImAKIok5OBnAvkuYaPMAjHNCTCQ?= =?us-ascii?Q?O+y6IZvRXOMjCQtd04UxxdQRYbrf9rH6EQ4fWVPfs3mn64nfzAPjZPuOxH1N?= =?us-ascii?Q?6QVeQC8cg7iKmBqP9BH6sxvPYuYetoTSkriXOLQ63diShBDY3PHgEi+133w3?= =?us-ascii?Q?2VbwnQsJUCGZ6wS1yGc1XIR5PWX9WMnIUk0BQKlzDjfqDVe67oA4R0DWuk8t?= =?us-ascii?Q?Gq7PphFp8CXB1dhdPwoJBC3B+CddKvyUmh2UJ1Lo1ZoKjBlSGJiE+2NA8l6E?= =?us-ascii?Q?jHUK9n2LfpGnC+l3FtuXqnj1/9nulOVCCwOM/VDwC/g8+FwyznDav34U3eca?= =?us-ascii?Q?iXLJ5s8XLEOSiR42HkmhefruNMt36tVuMlthdOwKP7VLWqFt2ADbbb6coNxd?= =?us-ascii?Q?jQRywO/kfYEr8sTlKCBHplM=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 52e5d0e4-7ff5-411f-03a4-08de3d7f4937 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:43.2285 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8OrsiPET/W9IY9CcFYdoG0DgklRJGy8JesSb8xG13F2M1v2mv0bCc/IN2mY4+7lYSAszsnW+qVuARamdLJo3ZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" To enable remote eDMA mode on NTB transport, one additional memory window is required. Since a single BAR can now be split into multiple memory windows, add MW2 to BAR2 on R-Car. For pci_epf_vntb configfs settings, users who want to use MW2 (e.g. to enable remote eDMA mode for NTB transport as mentioned above) may configure as follows: $ echo 2 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/num_mws $ echo 0xE0000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1 $ echo 0x20000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2 $ echo 0xE0000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2_offset $ echo 2 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1_bar $ echo 2 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2_bar Signed-off-by: Koichiro Den --- drivers/ntb/hw/epf/ntb_hw_epf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index efe540a8c734..18d27ba9b6f4 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -826,7 +826,7 @@ static const enum pci_barno rcar_barno[NTB_BAR_NUM] =3D= { [BAR_PEER_SPAD] =3D BAR_0, [BAR_DB] =3D BAR_4, [BAR_MW1] =3D BAR_2, - [BAR_MW2] =3D NO_BAR, + [BAR_MW2] =3D BAR_2, [BAR_MW3] =3D NO_BAR, [BAR_MW4] =3D NO_BAR, }; --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11010013.outbound.protection.outlook.com [52.101.229.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76923369961; Wed, 17 Dec 2025 15:17:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984679; cv=fail; b=cnmdaEFPvXyXeFjv0dr64uezJbTIfdMC3LPbnRWzUXOn6jMphRTVGi/bpIkzuySuCRzXaGteo8hGdJLehQu7IRzWFlLhKGmTly4XuTP7g6ByJnZbqEJxCX2dneNWquxi5LKPUJFPxTW0tLrgYbv0RBPjaPEAdcKq7a4S8OQCgOk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984679; c=relaxed/simple; bh=KHczLRKzEU9I7MUN93nztdFnC/jY1SAO4ejFo/LWSQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ulp/ypoMeHcWn40+1m+wfhXOVr8NS1JSLd3QVJkPssXt/fb7TmUGdDJv6vOJCDxhrMWt6ZJUDZr7j/Fy8yd5lVGxbi1uCnJ5lpvNXxVpJLcDV7/NEYroIrrb2wH3us3rendGZy2bMVAAHsdoD5sWgNGQq2OWAbSFXMbCNMTsDhE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=hOXZdmzD; arc=fail smtp.client-ip=52.101.229.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="hOXZdmzD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s4mAVSqkHO6p4Q5/l6YuR4Pl+rBUz19s1bDtPl5bXTf4zqisNIzoh4oK4w0uShHQHgtYCBSIXGw3l5yJF+7kUxTfBs6Cr7OOntFmUb53fTbEfi54BQ8WvvzZEOPOHZbos2gDb/Jx48PHb0Hv4l42S+V8wpcXEL5iRFXlytZaEcE2MbHQpXO0J3k6WJtSxvQc/fdGgp+xCUpDxt8W0vKKF9GzMvYtoEqk75zSfYz3SX3qn+VtNC3eeyQaVy8CPJncTTrBhs+PDP3tnWqyTvdZYRj0f8uqooIbtm656d8+HlFb66szooUOOBuXOdvoIgvTmtNF0u2PrsUvSuaqgP26tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=JMf1cAyKI/b2jaj6QuU0SVT1Up8xyU1sjq6QlDS2O+I=; b=JTnh0E3PAN/8FkGm9/47pGI35l8l+GLNFcyvxZQfGWacfprWSGW8WY9iG2Npp1wERkK6Nl+ks2zrUs4JQJiEDSSpv/iLN3QAKGu+h7ocGhUXRqIjZ+bpvQhWkfyxkICL9X9wAIB2Wfr2wWw+Vu1mcq9SeuFyiLG1fEOiHjgtlmVLO4bRkTheOocO14gihMe/9ybOIiS2WBW/cX0dBtkIcHJen0oRO8ba1FWXyQzYUMtciuNl82J+y6SxpGDkcK7HxctAqETAfGFRbE4SkqnNJD2kUVFgEUmvXJw6ws6Sqn+L8aTgo6A1/tCMpjE97v/8nqa3pKKZQS+8+QMMNqk2PA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JMf1cAyKI/b2jaj6QuU0SVT1Up8xyU1sjq6QlDS2O+I=; b=hOXZdmzDEEABt0mXbuvxcSX2JjCE/xzgwZjhvvXbirpmeVIFXAFscc+LUfooxJ+4V69f+qGjqzgAhfU3IGQfVx+nmTmTCRUhVZjM2rT7JaUkg0C89lcki1yWSkjKD3UCRNgQ+OZhIokP43+nyLiHW9AZGFWl/CD+bA6tpncu4UU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:12 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:12 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 34/35] Documentation: PCI: endpoint: pci-epf-vntb: Update and add mwN_offset usage Date: Thu, 18 Dec 2025 00:16:08 +0900 Message-ID: <20251217151609.3162665-35-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0074.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::17) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB2863:EE_ X-MS-Office365-Filtering-Correlation-Id: c36a75aa-56c4-4471-f1cb-08de3d7f49ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dVelX3u2lSeJSj1aXcAarKN1ChGvPs6StLyxzFqTfM/tt17rchVCyiGoQgCw?= =?us-ascii?Q?yics2JGkxIJFmM0CkRCNgzJmV2aT4iD6y5xWhlku4bHU12Im4tiqWI5yXKN2?= =?us-ascii?Q?MpLNCRbDlGebk+cRX7spWYL68CKwzDezIVV/4/WItVQLIR82wMHZz94SBpUW?= =?us-ascii?Q?NW1NhbaaE+fS7tsxIIPNMeqzbq97auysHph1Gpd00Y8TfT/pjelcmqVIPR4q?= =?us-ascii?Q?lju8aiFlKe2pCVdeSJrkA8Y4ZfI8b4zN/CgQhIM14XXtTm8ZdClm6SOnj8Px?= =?us-ascii?Q?ufUQsOQ1N4LZBOWkPVaZIEAlAwPxIgRHeyXy2mHAsyictpgpjF/nh2ofqOux?= =?us-ascii?Q?yFzzn+SGjlQh5iZYf2AVNZBoo74hSydzqr8LCWtyq21h81n3l1q3Hs4LGMjC?= =?us-ascii?Q?2EP+Hrlum8Vv97md5LUh7wtHaG9qZ/22jJRY6jUs81osPrMmGjtYW5zxtxvC?= =?us-ascii?Q?IYezIixtVxU7sFeLh3IdLz7UVtpohPNIjhMS3+02WF/xl9HH0KE6dIuYmOHF?= =?us-ascii?Q?GLDmYclXNkE/xMYCzVdOAfD8ZmmULpkYsuFkIAY2h4X8h9OHIp06S+cUPIuU?= =?us-ascii?Q?bym9vGf5WqE9T8USVUnuSrgdNxSc6QygKxhXgy+4jWhkdVRDz8BudXI3jwfZ?= =?us-ascii?Q?NLka8oDp2hg9I9CN+z9o5Ey+Ay3NAEGOpIRV1smP/uYrddPkdmcIe1Nc0fxd?= =?us-ascii?Q?7izNZb4jpOHVwWz9xhNb0jqBMv3gfE++cBiuMcKHLiEMyiiDFtQUeG9eYJow?= =?us-ascii?Q?0vDKK9zB2RwP1sELA+5LH0pIVqRUubewV5ohvpy+Up397dzJe5xFVAEgEU4+?= =?us-ascii?Q?FnTeumGz4MzSTAY5NM5SJifVmWMtCmO5CaXZ1ZXaBj0FuNQ7kSSKx2+RdagP?= =?us-ascii?Q?Iax4ZhOpaBp8ovda/MtQB6bsUbBxwbr3nCqWDW+nXic1IE05J9TGbyTRqQ/B?= =?us-ascii?Q?/ip6LnIJ7z7JRi7JzAxQx+RnB2g73Zt939m2ZVokc+3UquEap7V6ow7uaj4q?= =?us-ascii?Q?V34pBEZQJC/MGZc/AJQY2k6/m1+8LUJgIiRrumfqk9Ug06I5ll6nqxFhZVyt?= =?us-ascii?Q?c+I+axorXtRNiDgRx0g8aXEm0pYjF/Rwf0wTJrF6Is4iSFUBagndZVVOVc1B?= =?us-ascii?Q?uc0+F5gBJ7vjim7d4IdokWdjXGgWzPotmX5nzecL5JfWT4w4+at+BdWWrCH1?= =?us-ascii?Q?5QrWH+dLdVZxjUBXGPPtNA7a8e3VfmJdP4bUFk/1RA4x2Bo6Aryy91/+vfDt?= =?us-ascii?Q?/PZ2NEjxOcHzhBVW1pG2Vay38MURWPIhsm//3d0wzoNzC080mTirshGt6St9?= =?us-ascii?Q?nx5IV+QZ2hGIJzuIfbNuyLIOzroJpTtSBzxqYJNLEgVr7/IphxjY9Q2W3bWl?= =?us-ascii?Q?ZyMCOsHduHRyUmWtZIy8N6R9gqdMCj1hI5L7QhPAkgMsHNcaizxF8tDKsH/B?= =?us-ascii?Q?cTvcNW3UKw/RX184daI+9eTdZUoqvd/0?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?d+fLMdc8hg9l3WBx6hq0V2Dp+mxkM3Yev0oHAPLj0G1CDpvwpwJhzGVuZGh2?= =?us-ascii?Q?c2a8w/QrHkAzlOlttr8ebMYDZRrsXGVQcaEXMCLnHBu+LeL+guQzT3hAkw0+?= =?us-ascii?Q?CuHgTfYfPSbxmc2Qv0LBOiKINtTLcUv1i8mfEogiIqnUI9lyRg2+LBxVfxtu?= =?us-ascii?Q?tYNhU92vpiqDP1nOO4yWuRiSAp0Em2eWPOWcj8BikY65avloy5AI4/eJOEzh?= =?us-ascii?Q?j6lK94ef2LtFnzJ5UhJaw8K4t5rKL65vBL4rvP9Bo6JWZpBRW6bW5qWQIJ9Q?= =?us-ascii?Q?Lca96ArAKoYKcTb4X2l88FRbn+b3U4IOjwycbDOLu/XCRBeLSuh3cuEMSBFi?= =?us-ascii?Q?5wHpDg7S0Uuk2Ht5WrDqqgBXDRECOazNqKBGITzOEvs05fF7XISFV1aPvCMy?= =?us-ascii?Q?wtfm5BiAbBRQ0wxCqWNew4qcfF0FTzg5GGdUemStdRbZqnMLbD0oI9WfKywN?= =?us-ascii?Q?nVALOKvGj6WGRJR9yXGOOteLCEFGDZ35zD/M/wq3T2MhklDv32ve51lIa61k?= =?us-ascii?Q?ELSqoSW2n5Q1q2O4VCMqWxqVY6qI+tUZLnwcJGX8Iy3D6f6DutwmVzrxGCYW?= =?us-ascii?Q?NaW8lb9vaJPTmdwCBiuY1I40uVVs7P7n+H/THNkkOmzG/z6IKTPEamndM6qT?= =?us-ascii?Q?GCXomhv40KnhScv5l0ZZoG5TkdaqHgw0A/zdxR9iEHWnZ5utNMff4cJ4wC5Q?= =?us-ascii?Q?i8zxsXujVblMBahmIhOy+2ALBV8OREWZHHCfT557TVh7OPucS2gviO+kI8pG?= =?us-ascii?Q?cf9FCbF9VLeq2CVx/I/W/yV+T4CBcPwwM0iNO+fHqKOzBJFCka3pLjrGudhA?= =?us-ascii?Q?umc3ZfDHqvgoUYFSD2I8iLliiht4nB3X6TUna8OhnzJtMxnD+/NObmMATLeQ?= =?us-ascii?Q?MpSK+qPvf9m5/B0vg9fO6E3tNBOsxoTjbjHHnbuhBck23VysgqWe4BvZ7xIF?= =?us-ascii?Q?FSw91AGZl7gD7jCFq+HjFQbcySwAWgJNwOdj1BQZFegHqhwlbOK4eOY84NBQ?= =?us-ascii?Q?uLRPueeIuu5sI2Rhdke0U0S2Vt+Itro6c8y2mLaQ3n7cukPNEvkJIb7rBvok?= =?us-ascii?Q?ETZ7zxJk7Sj2shyzWBu7dVJCenDxTlhg1NGLKnEpoXavt5mZFa77xGOrP+PM?= =?us-ascii?Q?FYdbOmX4/eA8tVzwUId8qfIabAcKYAY2y5b/XTDUpBogA57Pf+zgBotT6DxI?= =?us-ascii?Q?4ddzCJVfugPuAFd2pZC7IU68YCSGjb559nUprEeTR/uyprUzx1DK5wsON46z?= =?us-ascii?Q?3qxryWKQhxpiAPHm41ZBgvDtdGrkhN+unWR84cvAsZkqzm0HN/ZUuNCFl6Wb?= =?us-ascii?Q?CSg9ZMwzX1AEgdXY2C0ZbGuBd0vqdNK9EzO2Qk/d74aQ0mX6D3Bd+LzTFO/s?= =?us-ascii?Q?B7AV1YFR8d4VxJzZMUYDzfZ1FRbR3o/1C6t0YF46fH2I+oDyzNL8dlYXkwYF?= =?us-ascii?Q?SOla1rODhigbljo1rg/dQip/EGUqZrSvLAVbkGe6uwHaHJMjpo9wgw4Bjs9y?= =?us-ascii?Q?ZGsUljF8csnTWQz8i6zwwz7afuuZYwzuyuqs70lTjo5hwCD1E6b1LdXlG4EV?= =?us-ascii?Q?HFSkCI6tn2K4IBMUk8uN11oDeMu9SnVLiU1164TsvVE13Y1RuOLOjPGkX6Mz?= =?us-ascii?Q?5195GhfEXqgfMCZNe0k5vRc=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c36a75aa-56c4-4471-f1cb-08de3d7f49ad X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:44.0229 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: T03rdMcUHyyvS+SIkFMgBHZV7CHPBw4baT7GVXh1ETk+RZQLSgN7a51TQG6aewJRFXFfDcWIeYmAmwfazbNZbQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2863 Content-Type: text/plain; charset="utf-8" Add a concrete example showing how to place multiple memory windows in the same BAR (one for data, one for interrupts) by using 'mwN_offset' and 'mwN_bar'. Signed-off-by: Koichiro Den --- Documentation/PCI/endpoint/pci-vntb-howto.rst | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Documentation/PCI/endpoint/pci-vntb-howto.rst b/Documentation/= PCI/endpoint/pci-vntb-howto.rst index 9a7a2f0a6849..bfc3e51ab79f 100644 --- a/Documentation/PCI/endpoint/pci-vntb-howto.rst +++ b/Documentation/PCI/endpoint/pci-vntb-howto.rst @@ -90,9 +90,9 @@ of the function device and is populated with the followin= g NTB specific attributes that can be configured by the user:: =20 # ls functions/pci_epf_vntb/func1/pci_epf_vntb.0/ - ctrl_bar db_count mw1_bar mw2_bar mw3_bar mw4_bar spad_count - db_bar mw1 mw2 mw3 mw4 num_mws vbus_number - vntb_vid vntb_pid + ctrl_bar mw1 mw2 mw3 mw4 num_mws vn= tb_pid + db_bar mw1_bar mw2_bar mw3_bar mw4_bar spad_count vn= tb_vid + db_count mw1_offset mw2_offset mw3_offset mw4_offset vbus_number =20 A sample configuration for NTB function is given below:: =20 @@ -111,6 +111,16 @@ A sample configuration for virtual NTB driver for virt= ual PCI bus:: # echo 0x080A > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_pid # echo 0x10 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vbus_number =20 +When BAR resources are tight but you still need to create many memory +windows, you can pack multiple windows into a single BAR via 'mwN_offset' +and 'mwN_bar' as shown below:: + + # echo 0xE0000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1 + # echo 0x20000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2 + # echo 0xE0000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2_offset + # echo 2 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1_bar + # echo 2 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw2_bar + Binding pci-epf-ntb Device to EP Controller -------------------------------------------- =20 --=20 2.51.0 From nobody Sun Feb 8 23:54:14 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11011057.outbound.protection.outlook.com [52.101.125.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA8C433FE27; Wed, 17 Dec 2025 15:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984641; cv=fail; b=ja1TZdj5dwQ7iPFbEi/u6z+jkPNy/CqPSo8dsfgeYszOuQM28LOdsgUyHunC/qV1JgLsHichsU5whwUT/6LF+ElKNLL4FVenNoDUzbsQwY+uumi5KPBMNskc3xoDdLoN9RMDJ7HfSkkTJgqp7OAQsKjLNgnMYXXiQKHrQ1OrMHc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765984641; c=relaxed/simple; bh=QSUHcsskYTBKX0EzCQA3OX8U+fK2bACW3TRIRm+525o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Tzjq50W3E7c345wI8ouYbzx06rE2eBcVeWQEN0Jbdpw+r3MPW4hF2jlr0BbC66oumtoE2uGRA0HV769M0Qy+FlBdDSYMad4HneSwhtA6BM1QtZSbPXwtkhuWuAJUKUM6BPPQTV8v2XTQibP+NAO9/fP8Fug3wZSmXWqUn1SsTQg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=CVnzTFwA; arc=fail smtp.client-ip=52.101.125.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="CVnzTFwA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DlhLqXp3tAC3e0X+5p20e+uRxpCC/3veNiPBkGhPgKEW9/Q/r+M78/M22xPZoQttyPGGWv0Nddoj3SlRm8mGZH1C83I1BILqMuGdO5xHZLmMS2xGE0PfWi4xOH2XoFb/taE3Gg6FMlQshVd6iYUUmTqLPk8sCf51lM9pWJKwMvKlS1bH7b1OOQPvwiW3HE6ZM5WjG+WXWqWhzSJJRz2OdcxKjUx4H8uPy3MvyWK4YDS/rjtkbTg3F3zM5DItWXHYzgkVXTsZp9cDmeQg0r5WJvHuKYRw6O0P1cGnVjeaqH6oKo/LvIiJvxARmMZzUsn29c9BD655VPZxMNLivMcuYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=hyUe2vS/QRyNbmh36k1mjp3mvMKi5eTaqFoHSB6xHnw=; b=M7GI3SpySN+F544ToZtJzYY/RRPZgKYpYCW09nn5pDGp0yECpR3GkWkkTltc0IEyuirm0DYgC4DIhheJs3MQ2gnBr4lltx17ZTOVHbn0iISon7Exurrf9EskYStTE5fSc6/njKUJnkPreXueZIpD/Gvqx3v+HXa/Y/I8fLfumxIRmTbjZcgNjpukBnAsbBu7RMjU+5dl9nQajy+Q0pZKuuFAn8OWcH0YmfKU6x6cU3EtRHsGQbRNozyaNpewGqPqqauStUpJD6JHiJkxq78XUCdOaHHjcmATOEDSKvAK1iKmLOuDEXdaYSr2VLpk9A1AJ6UCN5PGR+4XdQq+K3WxeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hyUe2vS/QRyNbmh36k1mjp3mvMKi5eTaqFoHSB6xHnw=; b=CVnzTFwAob/ErXCWlM07UGVAxEwjiEOl849GR/VF3vvxjePuc7ctnRIVuv6pRIJwLvMo04C33XnwB982BraC1wfCY7NXhBFg9bVKaHMFUBN7RvDnEGrJHvbpRcdTWokAHhmNFKWNaUJMd1jZyBNIQNIJb0lQShcR7apRv4LN5Lw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) by TYCP286MB3469.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3ab::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec 2025 15:17:12 +0000 Received: from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025 15:17:12 +0000 From: Koichiro Den To: Frank.Li@nxp.com, dave.jiang@intel.com, ntb@lists.linux.dev, linux-pci@vger.kernel.org, dmaengine@vger.kernel.org, linux-renesas-soc@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mani@kernel.org, kwilczynski@kernel.org, kishon@kernel.org, bhelgaas@google.com, corbet@lwn.net, geert+renesas@glider.be, magnus.damm@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, jdmason@kudzu.us, allenbh@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, Basavaraj.Natikar@amd.com, Shyam-sundar.S-k@amd.com, kurt.schwemmer@microsemi.com, logang@deltatee.com, jingoohan1@gmail.com, lpieralisi@kernel.org, utkarsh02t@gmail.com, jbrunet@baylibre.com, dlemoal@kernel.org, arnd@arndb.de, elfring@users.sourceforge.net, den@valinux.co.jp Subject: [RFC PATCH v3 35/35] Documentation: driver-api: ntb: Document remote eDMA transport backend Date: Thu, 18 Dec 2025 00:16:09 +0900 Message-ID: <20251217151609.3162665-36-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251217151609.3162665-1-den@valinux.co.jp> References: <20251217151609.3162665-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0094.jpnprd01.prod.outlook.com (2603:1096:405:37d::18) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYWP286MB2697:EE_|TYCP286MB3469:EE_ X-MS-Office365-Filtering-Correlation-Id: 2833e91d-766d-47c4-e1ac-08de3d7f4a58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dpvn3XzDXRiU1fzE0ox1CxVrmNbETEHxKSxRgluaUn2LS2IVG74iQ6rzvxlV?= =?us-ascii?Q?uokneXdryVNJSHGPribYEFxowt2jjXIZCScBc+z+grTXKEDo9wqohnhR1jX5?= =?us-ascii?Q?JxrqzgsP3ufoOqNImgDzXoaFj0AzKVK+8xiYZ5B7uZ05AmIoWqAt2D2IIN9q?= =?us-ascii?Q?rNNambO0QBZLO/I84YsfmyPqqQPXQbyQwt9Cl0qcEuM59pt5i7ock6tihDKW?= =?us-ascii?Q?GSd67UvcYOpaRP6rLBaYUFykEPrd+jiH4bcpdxrqn9lqmH5DFRfAx/BNtvKR?= =?us-ascii?Q?/KLjGjbuCVnWDUQkBa9fb0hQ6c4lHlay5Psd05303OPGOgzIBWf9JOF5caCm?= =?us-ascii?Q?iZcesBF5nQCQ2hAad3dc6AaIQ3n484DVT/KaoRIEjtKDPqyoAeOhvQ2SZ/ll?= =?us-ascii?Q?5phzsEnqIrHkqpNXRkU8nRo4YcT3I1XqC9FAdXGdZAERCt84fSgKv87++6gr?= =?us-ascii?Q?TJXW2b4mICk+sJR0bnK2mewZW8fN+vRfG8Qs268Tg0sxWSAYuH0NcK75r2D1?= =?us-ascii?Q?WMllP5g/Zxmg4ZqnCK77DXeEjo13bplAdP7JNwtgfJsjrNzSdauFZe8vb0Fe?= =?us-ascii?Q?4BqyBTOXV624CHwNOXdObuLSBdIiTUFJjuPqLjfk5ir21UlTW0/bMYoJSVt4?= =?us-ascii?Q?n42SPZULO88yzR8y1kTL1Vef3OP5C+paIk1J0j61eZjGGs4FKmY4FjyVH/ya?= =?us-ascii?Q?CRmr7tvKsoxJrZkectFpj9sfy7ai8tZEzWUirsEcIvYlKcScjix7Ef2p+esW?= =?us-ascii?Q?DlOhNOn1QvTeRJUktsYgZWcoPalQgg/VeePPWqCW1STXtaD/q18ef25uPKP3?= =?us-ascii?Q?lw72Q+ZH1h5ZvL7t68AzflM20gNxUNW3NYyp4PLaJ6dlYEIlp75/yzfZmaGa?= =?us-ascii?Q?u6GY1LbIqlE2TbgChMC4jdpwimxVyCW2jk8bMcXW4+DaMIMdv2sSMZBXUXp/?= =?us-ascii?Q?aL/4QKQtqveDLabb1vNaei3dZSYzWbcp1qzNL/uuBIhK+Tps8Dy+UOglsNjd?= =?us-ascii?Q?0NCRmAGS+sHDdmcKs9nTMLN6ZQriFdeQVhzHK9t8NxwJYe+qZNYsQ8gUNHt6?= =?us-ascii?Q?dsR91J3EeIPC1MlFhXGv6VZHoeMHWeh7Pke5d1eCMYSk+mDgA+Ncy6rjldpy?= =?us-ascii?Q?P0JVGnN/je/cd9ZV/vkk38wmNtvALzwL81PTcwG3aRJdAUShdPj3cHzK3j4r?= =?us-ascii?Q?aqbp38f2xrT1Y9mVbteAnAWRUoSWbPDN4AydRXHfJrfxJe/1Rt/3GwxN98G4?= =?us-ascii?Q?iGSx+Pv+tuNC2dMuFz6opoGLhxheL07neH8CvKtkJi1lQAoU8WRJ59jypQbP?= =?us-ascii?Q?vW/P2RCWuBxQ4UWOsKzV7qaXiZW+o62dOVLf+lW4Y1cMfw4wL6p5JCeVQSeX?= =?us-ascii?Q?dG+DhcM6iTUmV/iS1/IbyMl1PLpvfQa/T7ZxZRelHy0t1yAhY1JaDUuNWhUL?= =?us-ascii?Q?WxS5J2EGxlPR5LGArc1g5AbBEPcqszOl?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(7416014)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wkce+hLEHGlPbePIJdf6XJreNRzGXE2PFMvdIPFvH/5eJR9fcl8/g6jDw/mt?= =?us-ascii?Q?IOCtoyT6WRrpXL4deVzv1H8oMEamb4BQJZfziyU5p4HBV/3WfvJcyYhWvgtH?= =?us-ascii?Q?sBgB3/t+axC5CVGigCaArFpYB8JBVIFfaPSSVMOvhC9flt0FDTKRmmefHZya?= =?us-ascii?Q?zQrpKt4a+BGy1fUxlCwgNXtVHXD3uiLLHh/AK3H77DKogmGVEzvA4KbCc3tw?= =?us-ascii?Q?Wgz2c45L15ARxL6ABP566fFa3mg2hV/q/MKD/iaDrGUxLUqceDEg2tOQlkiC?= =?us-ascii?Q?DeAQlHKwnlWCuKYjQ/O4xQG1YbK13eW9dnamncMMm7o9Jrs0RW7lF2c1/taE?= =?us-ascii?Q?t+Upen8Xvmuw9w0ZuWKZXNEgyojuhUJhIbLbeuDo6tEcDzZvJvF6bry5b1Ui?= =?us-ascii?Q?GBkMFicUjODMTOW3J1Z8pwV4PbIjrJE12Mm+9F1MxC4qzMm4HygVozkXJ7VI?= =?us-ascii?Q?8O/M+J8SM2hsLKmRDXPofR0vYtwW8sM2bQtfxemTHQd2hyUBEc7FMfmULZq6?= =?us-ascii?Q?FgOdVFFKiAFIgBrZYSTI6wWIbLWy+isTkJMgCdZn0YGILoFABddBPszcW8Rk?= =?us-ascii?Q?CK6Qziokw2waUcdTuXrYoeFo24RNtYJEri12RZ+Zm+oOuzZBPpW/YzKcyVHn?= =?us-ascii?Q?pcNsnumLLJ1UPeI6r2QXS3cNognb+Hmc8uf37w686kYLHZ9bBTvHIYn2Nfm/?= =?us-ascii?Q?eKsmm7rNRqWvGOnv7b9p2aLG/lG7PZp3Lvu+pqHO2coIbPn2aNWRi+apkA3w?= =?us-ascii?Q?Lxar8w8aMOQcf9z8MRBWw2j2R4qrkoShHJneZfFx6y4AIpWcQQPMg1NY10cW?= =?us-ascii?Q?+HaW9Lnvg8feH3M3d7BRPC4BCq3fDNph7UMY8U7T6rc+3xhGK7B0ed4dCQUc?= =?us-ascii?Q?nHJdX69FqFLUlBiU13aZ7TKYF68C+UxiaWhA+1BVF6cKJWYcCQhdKz1Mrs7C?= =?us-ascii?Q?Z4YBd3S56cIkyLIF3UC5rhBYU+/w1X88LOG+C6LeVrsN6eJ+s1PaGgaR6dK9?= =?us-ascii?Q?1Pa9z9eNBdRn99miV6M4xN6fXMqUzw/9qFDe5W+kHGUrIopNYdx3TMwXXgxY?= =?us-ascii?Q?B8Lw5/fgyHBtVBBdkmtZrGxh8JvXDCm8VJHDBqV+j8p1KboVlSvEcNnTfXVP?= =?us-ascii?Q?2a+PxF51FKTKDRv4uwASD9XNa13ti4yL+0ZxEAZazubGVdzsQ2DwjxgXQHWr?= =?us-ascii?Q?f8nlDgJZeNheqQYTiOqgcmoY43RHfsBq9vTnCN691XcvSIIqs/4o0dkyEucn?= =?us-ascii?Q?bv1LpOQ4yfROeWHoZsb0lz+TDKW59jB8e1dLR08hpDY4mhhtHHi2M7RloctR?= =?us-ascii?Q?DmXnTJW0pUQmMq8zqsTe1wEjCs2BO9ghMg4VTopPMmbNRtVKwTyRFRPqw6c2?= =?us-ascii?Q?sXczDrUjtkpnbfadjEgrVWYuMEc6fB0Eey5gTq9LDHCuglRaaQzCEo1vYfkT?= =?us-ascii?Q?vF/C3+gYGO0r1znO7oAMppoO+w3UAhrx6ZjPYoKeU/TZCnDdmzRZ3btd8hwd?= =?us-ascii?Q?DCl+YXI5dk7ShbT6gh0vYOfWObDTUPlrnY+ktArL+Ye5kGsV3hDYkJSMMCim?= =?us-ascii?Q?eTAGQUphyetqroUabUnKAK8BJvoVyeSOtsMP/cx0Lza8o3joWyhXpEf3srTF?= =?us-ascii?Q?l6NdzpGgEa1tavAmqM/glHY=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2833e91d-766d-47c4-e1ac-08de3d7f4a58 X-MS-Exchange-CrossTenant-AuthSource: TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2025 15:16:45.1237 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: taR9tcpx4UPf3xwSGHmAimSDJ5/Obw+n0/S9vmtB5wG0vnVZ/DkOUYXqCK/1SXFvk4e9Fy4TDxwbXhsSCyZWWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB3469 Content-Type: text/plain; charset="utf-8" Add a description of the ntb_transport backend architecture and the new remote eDMA backed mode introduced by CONFIG_NTB_TRANSPORT_EDMA and the use_remote_edma module parameter. Signed-off-by: Koichiro Den --- Documentation/driver-api/ntb.rst | 58 ++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Documentation/driver-api/ntb.rst b/Documentation/driver-api/nt= b.rst index a49c41383779..eb7b889d17c4 100644 --- a/Documentation/driver-api/ntb.rst +++ b/Documentation/driver-api/ntb.rst @@ -132,6 +132,64 @@ Transport queue pair. Network data is copied between = socket buffers and the Transport queue pair buffer. The Transport client may be used for other t= hings besides Netdev, however no other applications have yet been written. =20 +Transport backends +~~~~~~~~~~~~~~~~~~ + +The ``ntb_transport`` core driver implements a generic "queue pair" +abstraction on top of the memory windows exported by the NTB hardware. Each +queue pair has a TX and an RX ring and is used by client drivers such as +``ntb_netdev`` to exchange variable sized payloads with the peer. + +There are currently two ways for ``ntb_transport`` to move payload data +between the local system memory and the peer: + +* The default backend copies data between the caller buffers and the TX/RX + rings in the memory windows using ``memcpy()`` on the local CPU or, when + the ``use_dma`` module parameter is set, a local DMA engine via the + standard dmaengine ``DMA_MEMCPY`` interface. + +* When ``CONFIG_NTB_TRANSPORT_EDMA`` is enabled in the kernel configuration + and the ``use_remote_edma`` module parameter is set at run time, a second + backend uses a DesignWare eDMA engine that resides on the endpoint side + of the NTB. In this mode the endpoint driver exposes a dedicated peer + memory window that contains the eDMA register block together with a small + control structure and per-channel linked-list rings only for read + channels. The host ioremaps this window and configures a dmaengine + device. The endpoint uses its local eDMA write channels for its TX + transfer, while the host side uses the remote eDMA read channels for its + TX transfer. + +The ``ntb_transport`` core routes queue pair operations (enqueue, +completion polling, link bring-up/teardown etc.) through a small +backend-ops structure so that both implementations can coexist in the same +module without affecting the public queue pair API used by clients. From a +client driver's point of view (for example ``ntb_netdev``) the queue pair +interface is the same regardless of which backend is active. + +When ``use_remote_edma`` is not enabled, ``ntb_transport`` behaves as in +previous kernels before the optional ``use_remote_edma`` parameter was +introduced, and continues to use the shared-memory backend. Existing +configurations that do not select the eDMA backend therefore see no +behavioural change. + +In the remote eDMA mode host-to-endpoint notifications are delivered via a +dedicated DMA read channel located at the endpoint. In both the default +backend mode and the remote eDMA mode, endpoint-to-host notifications are +backed by native MSI support on DW EPC, even when ``use_msi=3D0``. Because +of this, the ``use_msi`` module parameter has no effect when +``use_remote_edma=3D1`` on the host. + +At a high level, enabling the remote eDMA transport backend requires: + +* building the kernel with ``CONFIG_NTB_TRANSPORT`` and + ``CONFIG_NTB_TRANSPORT_EDMA`` enabled, +* configuring the NTB endpoint so that it exposes a memory window containi= ng + the eDMA register block, descriptor rings and control structure expected= by + the helper driver, and +* loading ``ntb_transport`` on the host with ``use_remote_edma=3D1`` so th= at + the eDMA-backed backend is selected instead of the default shared-memory + backend. + NTB Ping Pong Test Client (ntb\_pingpong) ----------------------------------------- =20 --=20 2.51.0