From nobody Sat Feb 7 07:30:41 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020140.outbound.protection.outlook.com [52.101.229.140]) (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 5D05C31C56D; Sat, 24 Jan 2026 14:50:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266222; cv=fail; b=BuFMPSU+5ttB4o+rBG6a+npw3V7d+qZL2IExAZHv1WVDbnEwrX3/W+y9ahQf5fNtk/GZvWOZqx+4W9AkigBkGRdfMJGvFOSJ4E1DLfTWntmBFxuoDsE1VhQC4RrMzBGeNzGrwSIydrifcFKYHkM/HTU74sruIT48cC1dSgIxT5g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266222; c=relaxed/simple; bh=hCBGilHfDFdoRdnbbfetuzA8hVAIJKht2PUZdgcxmnU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tB4VY/U4HJVU2n2J7OY4rS7e0bSKSvY1y6tYCniAG6HoOdC3QJAug8g/9Y4pStaxGAt11+E3S7gP7uWlHiYhNrkTZlAY7GXqCqCwkny+1Ig3x/CintTGNtBGfaEGNb3rbPCm2CD02xmqiPr26+Jn7mhZAiPvXIg+dzvjlgtuJ+E= 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=m7mFwJKy; arc=fail smtp.client-ip=52.101.229.140 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="m7mFwJKy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v3XzGn1On07XbwCoGj1tjFxZiaexfNH8f8owzjhGmMHQ45oaTlv2JWHkBk71DYsiLVVhcLdi1y8ZLaYtXLSk1LAvLrsQLBiLZueox1WIjPewpbyOGpQ72yVI4vosWY51qw89Mv2MSy9EbOTBrrwfjPcfL1ljmB82IsdNiN2JBsukvTG0Rns+EGddBhOoscT9/66tu/00XCmYlfIjlcA/qQH+Wux0gu6mCGuhy8Z+tmvnCNEZn3OxfhXJnlY3nEOrXuqBhQgxpPxJ1qn+nBZIu/rx4nqNfxO0UJLwB3seDyQlJJF4qXAc66VScOY3pcHX/vB1lodOr8vPdy+c6yxlvQ== 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=oSOa7lwvYj/v8UXgWdEwkRWBMUl1vIwFnICJRAYmAgE=; b=eTf10cbjfEBBBIWNN7fDeFGLE+gzroBSp6uNVkggSLyxfwnPqPAcKOZQt1lQYmAdlR4MalqPJmvDLm4b/wKSKv3e+vFnXuJoz6dTUqB0PLPwDbkg3U+Pqskwy1eaNH6VNsVQGfqL+L/fxFOWLe6kyx/UExxDYLu++CQrOhI0dbPNQ/Bd2VVbZpP8Y08Q4jJTSy+RVfwyI45+Jhi49H0ZgD/1QcdoZTxmJrpdNdV7/cuF2tzbCPEslkFy8L8ekk0DNkCJDmkcm3btYur6ZfoTHwc9qCt0ASpyRJtL0VdXne1QZUUUHdC5P+HVX8JDauAJsUsO+DlE4vD3pTT4f1EdQg== 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=oSOa7lwvYj/v8UXgWdEwkRWBMUl1vIwFnICJRAYmAgE=; b=m7mFwJKyWpDneNcTJBVkkacVQly5Wg0apMlluwMoJcgvIvdpha3NmY91xEovhzfRCISwKHUU3XD7Sp6eYTDwaWZprZxldo+c+oVOW/wemGYG1TZuIAAUeMMEWqpkqxMaFQOIBbF28soU2F/kTFC4LDBjI2zumRf5IT6eDLXbBLM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:16 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:16 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 1/8] PCI: endpoint: Add dynamic_inbound_mapping EPC feature Date: Sat, 24 Jan 2026 23:50:05 +0900 Message-ID: <20260124145012.2794108-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0044.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:380::6) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: c6152090-1354-4208-5131-08de5b57e363 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?YpqQj/k4tpfQJ7v9t3wV/hKMIjVuHwiFkv3ZYI5p2TC+66KD7JCxbk37YqJ0?= =?us-ascii?Q?5PZGKwr8GAnoWQ3otQ6e4gkCklBLuBwwvr4T4NsKG0seFL5sYg87sxf0L/5/?= =?us-ascii?Q?MzZcgZCPeWvKqUDi6HGfrypqVuD4XxQ+upvn81UWLnTRhgmQcH+ioP2F3E4W?= =?us-ascii?Q?bvFSYX6bS3Yho0hfc0GolQTHNRzn+47nvsCXutZaWOw6gDPmoX6UVNTqCc4J?= =?us-ascii?Q?VrbRnn0YnpBjisCsBF96kSdWQnqKIyi/jtA/CLC5ToulLyBD9B/lxVJBL9mL?= =?us-ascii?Q?9gyzvx2dbdZIlyS06y9I99XYpOJR48GGRMlbDbL42iD5Yy2q4mzapfKDpffH?= =?us-ascii?Q?JFuZYxFfbq7mr8J8RAsQtQFaRT6M4QXiG2nJGE8wmY179RbEphdiQ3dA9Zka?= =?us-ascii?Q?tC8CY7yUfsRbsFN4VB7f61p6aQ+vUErRkFEbRkmZNgaxZAcZstFLsZrO1mo0?= =?us-ascii?Q?dHeouNlixxnqOC0FoobhGITY8duxbZ7uK3QwftzvK7XpVy3EXt4nBcKIhdj4?= =?us-ascii?Q?eQAGdHVmVx+NnnFdTWi86eif3IsD60wZA/nVcpgexEjFie/uv8yHNvdykHXm?= =?us-ascii?Q?VzZDTgaxkpFHFMvfLpFO7KUBqbB9VDgaYrW4C0UT3BlVdowhg2OVfzoVJCz6?= =?us-ascii?Q?vTgTnBZ4VUscSCEj5zqNJFmYsRULaXq7bz+5uXImskQZBboKM5tSx9d0lA0T?= =?us-ascii?Q?J1rVtMiSPRi4QrnyT/RU2macnFRHXLrqezJf5wmktpZdtzHsNgYThfYotsuA?= =?us-ascii?Q?5BK2PUR+aSnXba5xyZP8mhrlgMLR8KmyqNase/Bck3urcfP42wQ8dUE/oFRo?= =?us-ascii?Q?Xgf2IUees27x93MPWhiuAwfdgi5Um8wsHiP+GlwERtRnuB4Tuty/aPFtTcS6?= =?us-ascii?Q?LN3xt1Fr1DQwdKxjNdVJGQahp/jYbyHqnXCfoZMcXJOgEiTPZrDNHltXUrtc?= =?us-ascii?Q?xcDDsvxfNuVszrUTiLaA2OEBG9B4JCzlVFqPkSlLsoF2us2kDSwh+OvnI9mU?= =?us-ascii?Q?5lyIsPTgPZKnnfZ5VHZA664ZGs4jH4e4vB9xdfB0ueT+Qp94VvB6bCEbtoUg?= =?us-ascii?Q?rG6nnDyGcxesEAnhzlbrFRe9B4D9QCYomIoA9Sf0w4/Fkl/e/+WltcPistm7?= =?us-ascii?Q?9Q1e7U80LsMXb9cLwbUiiVghTqQ+rtCoVWjXOtUOYheC8AYWyRNqSDZRQEp+?= =?us-ascii?Q?VifImowR3tIhFlipp1afHK1ns3JEW5jo/fvfUPmiJUXQl+17XdT/s/rUDAek?= =?us-ascii?Q?MGF50H8J2+tGC7KmAljYycKWwNiGZlH1LkO6AAGKFeiaEZ3jDBit3zvPryT6?= =?us-ascii?Q?IV8efuuFL/cNWhvrdRdqEXyRfoimaqe7MAaM6tkf0N+4BYlAwwsV1qWeTjx4?= =?us-ascii?Q?DBKCxxPx57HIcaLJkEblGtQ3xhnjVMxLOpPNMlooT64elcwVkady3wPYVydT?= =?us-ascii?Q?r5q6HrT3lydTqBuVB/jArjlbIQ7GT0ulRmWSunOU9UhqaAX+HO5/G5ajtA7l?= =?us-ascii?Q?ZBDjMyHtGH84NCUpFKOTcg5jXSDdXpokVwzNPTnwrApnLkIDyrTrawlI+S3G?= =?us-ascii?Q?ly5OwstPVBlcPL+AnWA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+W5M/htmI9sg531YUvxKMwWjIeD7e/oyp1fbw+3ii3GLPpa6ZlY/LkHwxcQa?= =?us-ascii?Q?pVTc2fL/i+83zw3aSeQaxTAQTDZUHBm0skQV8f+Y8oxG5uazCTcDCoJ94Hv6?= =?us-ascii?Q?wLmARWkYtuC6ljmfdrnYGGEf8uiFO+2p7G+QAhQknfBimHb4wR2uMIOAcwXi?= =?us-ascii?Q?PFIZoqUM9zBYRX/3QyIsAo9wnvqoE3TpldNqZzvwtHe2DOVjgdKUWV6sq3QZ?= =?us-ascii?Q?wLN7iA1TI3hxo5c01jc4QXeeJHgNGYy/iksbBNV1sLHKJDytG4KoDbKv3stS?= =?us-ascii?Q?ggIkTDWzUhp7Tnp6CWlNjL+7+ruOU9t7/diHxHKg6+tS4PNrCI5qB4XjNzVX?= =?us-ascii?Q?2R7W0ouEYV5jGxcFnxJ7cdAqi49E4U3nmjeIuN5IdpTcD+LK3OJb378thw4+?= =?us-ascii?Q?PUKkBH71hs6ws/cAty9EavTFOcN+Bcl7DhNkZdvZgJR0+5asFpXNxnXf76ft?= =?us-ascii?Q?25dG6RxBukI8bBITbFye7uRUqiWQc9wxwiYG+ZMbE9ZrUbddFr7B9DSRhk/x?= =?us-ascii?Q?b67pFIAJErT/DYAP747WAby/nh374NuucCIhUkA+5BaMqOx5xgJeJaHIVNPN?= =?us-ascii?Q?ADGetL88fxJm2CTk680cLRFh+9y6LTYcCaOHair1tEWBsqyML0Kl+Art4KWO?= =?us-ascii?Q?tUkY84HwQpyN/+xpVyUbn/9UMscSjodqSSiud5zR+FZ+HWy0W50eDG+nUCKq?= =?us-ascii?Q?gYhY87/WnlkmlLKedoIzZl1vUfZUOZgYOnuQMQPoqn2w9UBiNn15MXJkNVt7?= =?us-ascii?Q?+38FwaSrOQDix5m9M+BGTzPJrCoLW9NZf6OFQavBUrqykIm+sC9YrfoAex1k?= =?us-ascii?Q?kLkUMBFxlZjYv/UF8UQsuxb3ee8xCbgUmD/k+31xsOptpJY8PgU4ZboUCuQN?= =?us-ascii?Q?6esn1KydKZRtajvkz/MHGpIz0jo8ZvTAXIo/sj1RhZBr5e8EHZFdAOWrBq8D?= =?us-ascii?Q?/z1jBmP5Z2hSqH/qLuVyPy2A27NsqB0GnRNb9zIL+Dl7dX8ofid5LJ422CNC?= =?us-ascii?Q?m0PgfkAZoJOMXBuvdWQEl01APGnHQ0yHy+sELm4z6T/vMH1vhYDiRl4NxMit?= =?us-ascii?Q?a7emsWvkcefDGsNQRQyqv2Jw4tqAQjmixsw8jLBAv9Crt2MsCYjJq0eimc31?= =?us-ascii?Q?eH8kmSg2dLCEqVZEeJJRwjy2GL9fUXGevc37zmaYfz+5puWtAv9bZCeWW2we?= =?us-ascii?Q?qvvFOVg6TGRLnOCvR+Rx+hplmxMY9XwgbYkEqSdqx+kLWE4cxbfPCSzR2lfb?= =?us-ascii?Q?xEGr8mgAUbaL9Xe60pQcDDPaoJWSUJNmJTQXvU+9fGksIThKruo8CpfKJimB?= =?us-ascii?Q?GASRHDhMi1uI7WNQTKi+X4e5X1sEZaGmjF2SnJEphUmKe/RVXL105dEw0T61?= =?us-ascii?Q?AMOpLDwkDjJJN2e/fxhEQrFc3LhQv0H9Tlk5KvFZ+9gFoHTzupLEBd1217so?= =?us-ascii?Q?v3IvVVubvG2eagHovSakKkEVTyml89BsjmviOQd98x81q0st3f7+BlEGNBu4?= =?us-ascii?Q?rNRfS2mMZGWF16wovszFntKtYpN80a9Wo9MBb9ri+xrfJawpwgNNOgh/NG+H?= =?us-ascii?Q?3MuOjFmX65QN6dq68P0+Ys9fs77tfLv5odtSpbxmqxwgB/x/2VwIuvC2MG94?= =?us-ascii?Q?oo0bH1JYxk0cFFJ2vME5RR8TfQCJE2+NMhAsjr1q5CtXOcTOJpr1/fhCpeKF?= =?us-ascii?Q?xIouPawouhPohuykxQ+pMZX1VWhWQA6l3JVuLQmOPSW/7rHx9LSBptaLKECG?= =?us-ascii?Q?Lyr24Bg2oryD6og3Fn3NZl1xnqqtiA2uyieUbRx4KdKEFI2sehbF?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c6152090-1354-4208-5131-08de5b57e363 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:16.8857 (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: 6CPD0O4UvAhVBQdOqwYNtVPyEHGpZ0wZqoeHvEH04ohNLm2jbjLU7f8qyleonI2RLyclHDLKVQVJYDl2Y2B2bA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Introduce a new EPC feature bit (dynamic_inbound_mapping) that indicates whether an Endpoint Controller can update the inbound address translation for a BAR without requiring the EPF driver to clear/reset the BAR first. Endpoint Function drivers (e.g. vNTB) can use this information to decide whether it really is safe to call pci_epc_set_bar() multiple times to update inbound mappings for the BAR. Suggested-by: Niklas Cassel Reviewed-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- include/linux/pci-epc.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 4286bfdbfdfa..4c8516756c56 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -223,6 +223,10 @@ struct pci_epc_bar_desc { /** * struct pci_epc_features - features supported by a EPC device per functi= on * @linkup_notifier: indicate if the EPC device can notify EPF driver on l= ink up + * @dynamic_inbound_mapping: indicate if the EPC device supports updating + * inbound mappings for an already configured BAR + * (i.e. allow calling pci_epc_set_bar() again + * without first calling pci_epc_clear_bar()) * @msi_capable: indicate if the endpoint function has MSI capability * @msix_capable: indicate if the endpoint function has MSI-X capability * @intx_capable: indicate if the endpoint can raise INTx interrupts @@ -231,6 +235,7 @@ struct pci_epc_bar_desc { */ struct pci_epc_features { unsigned int linkup_notifier : 1; + unsigned int dynamic_inbound_mapping : 1; unsigned int msi_capable : 1; unsigned int msix_capable : 1; unsigned int intx_capable : 1; --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020140.outbound.protection.outlook.com [52.101.229.140]) (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 D683921B191; Sat, 24 Jan 2026 14:50:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266224; cv=fail; b=lnKkIxi/Owypy6vjFaNOCIQZFG5ti5LVk8AMaLxnXX5NX+5wTYBRPvnnEK4TV+sR/fCA3Eiv5QockNWAGyf+nMl27cHNR5fuHV0K46Z+Zm/DQuwBYQcem9nYDRrmH36AGp/yYWVLLq1ZmCifjkX+FH2FT+0NynYucRVUBemJt80= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266224; c=relaxed/simple; bh=wGixTIgM+2z2MRdZOJUCL9KdyPkBT7ub+AItH7DoSAY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sAcj8ISfz0MMalKakJ+YGS3N7aLtnf+RWQDwYDz97br7hIwJ/VqQhtAk/bqnYL7Y/jHA5rZp01HmllA615wysdrf53zaKqC6GqH3HZMPpI2o2U/zTsLk+E9Cv07+vEQubDBAgtm8ElNB350/HH7cR/xh7AG6+pmyLLXzqR/5BwI= 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=kdFmp401; arc=fail smtp.client-ip=52.101.229.140 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="kdFmp401" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FuhKgPZOjBIa5D1O/W5kZVt8YTpYOmlYBHewjZRInzDv3T2Mt0zGJE8nV0MBOaj6wUDMK6kLYxwlAW2vE5Ta8ZeX4MBQ3xUjIzVe8SzgVNLwbSuzltLJSq11Ut8Pe+r/D1ykFceNc65AlIW9R8OtCiz70Fw5NDUMHzEtsvQJjoJSC83ENK0wvC7ttYz4uZh63tFskRP8G7ezbkroFhBezXDy40lQmWBi90ThbOIjVC5g0uAJd7szJUMjSkj5mTVd1gzDMTNfIXtKmvCJTqxrN32qWW/3LREbLytAVEUO84C6Hn+MXbB08w6PctwKF0uqPlEVyoZ8xStWjZX7E4iXhw== 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=vEzHc0VI8bGBMWQhyZjB/BDURylEtL2z6TI3n+xTPXA=; b=TEbyZS9rJe7n7sCrix+e76ULOj+GqosoWmWLq0ljFCAqhJTEe+p2pltIW/FhYSTfzcDHXdGb2X2nZsx+zZKb5AKGki3nw4v6FM2833J2cLvgH1iXOy0OOAQwuz7hKW1SQgZ2Eo8rYweJPTdp//DhGDqbGAbiptWNi+KFG7FipxE0r2SxiL87FYq7mmTMW/kd5OdMmGYggplRKVHQWg9GT3WlJVeMXNOQ100dE1HZ/Q6D27B2DxU5D3TZdgMTVxpRbQqNBGzX+LQ7Tc2/lPS5oE8NfjgHWT3/KogILlB+w/ATUsnPoz1tnlwKWnshJlN1g1GxQeQvnhs8jmPzgDhlCA== 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=vEzHc0VI8bGBMWQhyZjB/BDURylEtL2z6TI3n+xTPXA=; b=kdFmp401mCSOfv5puq9FC+2GBtrouoDieUB2ic8ST6w8CFRXQakpFHu2aTc451HDsJ2qhfWYHXkf/sf/49Cq0cGPlJjCZO74Ed/r4n3vafIxQVGDWabFGRONwmw5Lksd9SsaIw/VjmSVgMTgiUcmRTQ1Cz9gpNkqmJZpUYdqDY4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:18 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:18 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 2/8] PCI: endpoint: Add BAR subrange mapping support Date: Sat, 24 Jan 2026 23:50:06 +0900 Message-ID: <20260124145012.2794108-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::15) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: 4dd2b301-b911-4b62-7284-08de5b57e40e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+5GoItwcbscs9wuAdv2EuSabtLmArrII/fvY7vSGkC384nx/OkqGe2ExJWGq?= =?us-ascii?Q?fcLD9UCUuzVAXtDUlnZNJlVSe2fpYbigYkjxODB5gAsjUhLNKEvD4/i/Z/Kw?= =?us-ascii?Q?QImYOdIpErOTbTvxRF/jlgwOaAvyBG6q6Crv0dd9yUtyqYLxuQ7Pca0Ja5jF?= =?us-ascii?Q?6gXBVUuYKuqCrPQL3oMdK/lrV1b0peJt6c3u+Odv6X5RlQwA+Q531NEXUd1z?= =?us-ascii?Q?CuG+QpCpGryDd9yFQqPArKHQDGR2bZmlkebQ2Lgkp/N1K9Ri2vayENyMIZWb?= =?us-ascii?Q?g8R+8ephY6QBJZ+Qy+I2UHUkg7SrRPZHNnIU8SbH50vHTw3VYPNzjnFn34ZN?= =?us-ascii?Q?psCfHCR74WnCWzCQcTAymjkA7vp13PnBSeo5UkU707zwNI1f/1K03sgIcwZg?= =?us-ascii?Q?Vbv/eS1mNQ1rFKf2QD6xb4g+CyYL6y/LCidcanAlvSE57iYyVvP1XUK/lUaK?= =?us-ascii?Q?yb54veFKH9tS+HE1brIvJO1EpIvkj2m1H4aQv4lh4vd387apP5yYkDEDRQjQ?= =?us-ascii?Q?x3MWypBAHr/aIRX7mq6Ebzqbf3QYgUoWo/0okdCn9YIUHxc8qZRhJasGZcFv?= =?us-ascii?Q?lmvHtMbLhSoX6q3uGX7c+l1w9N8p9Ko1XfXQMt6SLzJpI0+NGhNLmXvlDU95?= =?us-ascii?Q?S+DyJSTauLOfbR1wtgN87dJE6bPl688KjQ3kRtEUCdLrPngprBRLrL7aDKki?= =?us-ascii?Q?wlQ+ccfX1bJQiGZaUVvws1gzUIib/8bxDi3Bmi2RoRbDKqPJJqppciGNyuw7?= =?us-ascii?Q?VIbjoEi2FL2GZbilkjiClfxHFrMGxky7VxlgTdPZxeh/6D2SZfsLtuEFQoIT?= =?us-ascii?Q?c1Z61XR+kB8/UrO0zsapFAUZgoYl3/a9am2IDMFRhwmj7lO8Fyz1I3rMhSFZ?= =?us-ascii?Q?oqHvapy2tlNy0JbtygyY9kKZZ6bPCKmnAXhTsatDhxtNKy8UooYMDx3Fo52d?= =?us-ascii?Q?/nL30gDMBAe7ErYCS1SVRPZggXC4yTIurbFBYiJZ9IVoCybsFHcEvN5HfMEy?= =?us-ascii?Q?/I39NRV9mNoH8GJI3TTQeeCt+kezrK+9MrTGZa3Vypp2CQ7IMwdYAn73Ko8E?= =?us-ascii?Q?XgWPQ/qewSQTHTZoI+/bR30j6TgIh9xEEQppSzKKgtaQKOYxIkBRmGGMZWRE?= =?us-ascii?Q?OPIzKJwpkV3viCd7BGdsvRzerjj6ANZOeyaDer8r6S8Z9/96U5QSXSUUHibG?= =?us-ascii?Q?UNbfkZXfD9SQIuiIXQtK3vsHNHTFY7GmShJt1vQ2/Of0NZunMLpQCk5Oushn?= =?us-ascii?Q?3RjZjXjhKODGw6ow2pvUhw5Giga2+HNdyXEelPmwmQEHSP3zfhS+5eWxhl4D?= =?us-ascii?Q?zBL/3G14toXcDatg5/8iuVC5FqJB5mCRUZ+J8EQ0celWGCigQYwfWR5drzb+?= =?us-ascii?Q?LMDAy0szNQORH4k8o8sepg99rf3Gj9XhMc7qRXPdCKJW4N8zZpvTtPbpiX0K?= =?us-ascii?Q?8O0VMtQXnoRTJI7hwL0DLlcEfqJ3Ncy4mW3VFjg6qLQ75SrXcArIDjuzeY98?= =?us-ascii?Q?Wm2P8sLEFmTMwLdNMSV6mn8xujOa8rG9LHzlkM4jwC5cFgRgiRJsLPrTw1+O?= =?us-ascii?Q?Z5ipPBMEZYR6E4q5m30=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1xtyP7rUBqsC5vo2pMhS6FLP359o9zrB9ymETcIYifUlvQ8J2pJFDuKX5XvZ?= =?us-ascii?Q?jJ83J1IvsXEqANYHclG0bJkQ3n7l56UfrFSDg0vViXqKetL1Q1BAlmNEbSzv?= =?us-ascii?Q?zKTtaC92Q6R57Rb/SJDlDOv0viVrxuuW3b90LPyVPdfPiYR7hJ42+WacgBMb?= =?us-ascii?Q?LK7VCammAqybA5FOASMYjZ7o2DELSNibzP7UBq0HUMnbQOJVEG5WE3+mHmVb?= =?us-ascii?Q?QcjUOMoPxORiq6ILMDqlzA2cskSzOSJSgGklOzNvwQ3uu8D7FDUdoyByK1CJ?= =?us-ascii?Q?JWJlpt+Oi5/5CJT4ddFS8LbXBBS6wAl6FR5StUvNIHCGRM/ecR31gLV6LQTA?= =?us-ascii?Q?Q9VjA3fflB6icOkAG0nZcQqFjFldgzoFV/NZa4Fd7CvCpj9MYyoT5+AyEZRs?= =?us-ascii?Q?8r5bkDTQSLN0f2Ivu5MvdIZYzyFALwlYEIVEsh4vBsQy45F9S93qvzLnVj3o?= =?us-ascii?Q?KSg+rtv6ymhvkFlqdqx57ZrSmebO8fSUD1GFS9p7PaPiJIImdL+6dFOvP8r3?= =?us-ascii?Q?wBQH1CKE7z/ans+MafgLscLS8SUW3cGxUQyqJkHARnJPUp+8iQJ3rX7XJcU5?= =?us-ascii?Q?f/h3eP9UpPtfcXHDgOJZUfLXn9v04z6GtJnMaYydu4P8faxsBvK3cbUVivZ8?= =?us-ascii?Q?/9mx4MxJ/dBTqphDbRv92vmk0Ob6D14Y5n0fo8/y40b/i/BY82jonJwVNe5D?= =?us-ascii?Q?5p7LrWPxeeFg/HRxd4Z8MIhzvf6INKHPDaKZejE9FmryiQKoWPHpwP6Rx+Fq?= =?us-ascii?Q?4LMf6uYBv9IEFljTxAcqLgzSY+gnIadYXim8NRs67PGlBdIuSSchaAXWkZno?= =?us-ascii?Q?CbvhkNGgzmQSZ2u0aJIF7n1x8huKuaqzNCU49fOSXp70f8YYEWRw3frzOdUj?= =?us-ascii?Q?vboJUgCl5QEvJYiWRGcYU+awf6duHkj/Sy/9YIlx3xlVwxG+olSsXK+p3v+w?= =?us-ascii?Q?yypDbvG6xg6ie+gHguqAgl0en8LeJleBadFC3ALbdqW+G9nsvrEjNEKqTZiq?= =?us-ascii?Q?RY/jrRUJgdxFf6I7zqqkfq5XM9QfV+5hau3SmcQ51zn6HBtyJnHDigOu9sSf?= =?us-ascii?Q?W5DZVCJUFdWLlZE47c7EpSVZEmyqGoy5+pC0fosLLjUXvXKGqureFUvPbecf?= =?us-ascii?Q?R1iZYTmoMjlQG5CIZTeAGKyPYWrEq0hL6F6RAEiTOi5u6n4P/pvGIjv3SCpp?= =?us-ascii?Q?jTWWYmeojtZIxpiRYPzcF+FishO5tgKDksOaMsIlGmmvgOHKHLVv+52z1QbV?= =?us-ascii?Q?nrMZZsf0yyn8IirGQ2oZIlKD2xxRTFD/31Ef/te7Z3NPj5frcoqT0cj6UbZz?= =?us-ascii?Q?gSKX5C4dP6ECaCSBWHwf/6AR7NjYTbVapPMS7lGHqj4rx+6PinAW9jMGQnB2?= =?us-ascii?Q?R9N9Fh5QI9OGDCy351pCDvVx6EWM+c7Qv6LVtYlJ+PmSa7QDhbMOs+95j9pf?= =?us-ascii?Q?WYa1z6xfknwMm1cuCOr3mJpK5SE3frvKPb/3hzc+yyEAH3OP9m8BGVb+4roH?= =?us-ascii?Q?GJpBvJjMBvIoNp2JpQCLRMOFzAbct7yE3um04sq1FP1Zvw5Fatg21kITcSdj?= =?us-ascii?Q?qawf0b++kG0IzhDkQHvRlEuAF2iYS0SQZKgO3ijcR7YMsJKRQkP50PEU2Jvz?= =?us-ascii?Q?tJIZXHY1B/c4vaohN5RA3avd2qh8AtBHj7EufbPt4+5zCFUkJz5NHKWUbbj/?= =?us-ascii?Q?L/bUbrj3y3ViHST6bzR7t0FoS3h+M4E41IxlMKn9DITE5l0fk45/wd6RiDhS?= =?us-ascii?Q?VLJ4EmXZnLdgBg+Iyqte1XuKdzEVME3jiGVPpauQDZ9s4UiW2vvt?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4dd2b301-b911-4b62-7284-08de5b57e40e X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:18.0075 (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: 3k6kijG2ifnFL61Bnz7HQnsv6Lc8B1zgkrt3mvTVLjR3zR2x2JKD29G0j7tTRWmPxizpNVuZ9CWoi7t1G6Ic+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Some endpoint platforms have only a small number of usable BARs. At the same time, EPF drivers (e.g. vNTB) may need multiple independent inbound regions (control/scratchpad, one or more memory windows, and optionally MSI or other feature-related regions). Subrange mapping allows these to share a single BAR without consuming additional BARs that may not be available, or forcing a fragile layout by aggressively packing into a single contiguous memory range. Extend the PCI endpoint core to support mapping subranges within a BAR. Add an optional 'submap' field in struct pci_epf_bar so an endpoint function driver can request inbound mappings that fully cover the BAR. Introduce a new EPC feature bit, subrange_mapping, and reject submap requests from pci_epc_set_bar() unless the controller advertises both subrange_mapping and dynamic_inbound_mapping features. The submap array describes the complete BAR layout (no overlaps and no gaps are allowed to avoid exposing untranslated address ranges). This provides the generic infrastructure needed to map multiple logical regions into a single BAR at different offsets, without assuming a controller-specific inbound address translation mechanism. Reviewed-by: Niklas Cassel Signed-off-by: Koichiro Den --- drivers/pci/endpoint/pci-epc-core.c | 8 ++++++++ include/linux/pci-epc.h | 4 ++++ include/linux/pci-epf.h | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index ca7f19cc973a..068155819c57 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -596,6 +596,14 @@ int pci_epc_set_bar(struct pci_epc *epc, u8 func_no, u= 8 vfunc_no, if (!epc_features) return -EINVAL; =20 + if (epf_bar->num_submap && !epf_bar->submap) + return -EINVAL; + + if (epf_bar->num_submap && + !(epc_features->dynamic_inbound_mapping && + epc_features->subrange_mapping)) + return -EINVAL; + if (epc_features->bar[bar].type =3D=3D BAR_RESIZABLE && (epf_bar->size < SZ_1M || (u64)epf_bar->size > (SZ_128G * 1024))) return -EINVAL; diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 4c8516756c56..c021c7af175f 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -227,6 +227,9 @@ struct pci_epc_bar_desc { * inbound mappings for an already configured BAR * (i.e. allow calling pci_epc_set_bar() again * without first calling pci_epc_clear_bar()) + * @subrange_mapping: indicate if the EPC device can map inbound subranges= for a + * BAR. This feature depends on @dynamic_inbound_mapping + * feature. * @msi_capable: indicate if the endpoint function has MSI capability * @msix_capable: indicate if the endpoint function has MSI-X capability * @intx_capable: indicate if the endpoint can raise INTx interrupts @@ -236,6 +239,7 @@ struct pci_epc_bar_desc { struct pci_epc_features { unsigned int linkup_notifier : 1; unsigned int dynamic_inbound_mapping : 1; + unsigned int subrange_mapping : 1; unsigned int msi_capable : 1; unsigned int msix_capable : 1; unsigned int intx_capable : 1; diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 48f68c4dcfa5..7737a7c03260 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -110,6 +110,22 @@ 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 - BAR subrange for inbound mapping + * @phys_addr: target physical/DMA address for this subrange + * @size: the size of the subrange to be mapped + * + * When pci_epf_bar.num_submap is >0, pci_epf_bar.submap describes the + * complete BAR layout. This allows an EPC driver to program multiple + * inbound translation windows for a single BAR when supported by the + * controller. The array order defines the BAR layout (submap[0] at offset + * 0, and each immediately follows the previous one). + */ +struct pci_epf_bar_submap { + dma_addr_t phys_addr; + size_t size; +}; + /** * struct pci_epf_bar - represents the BAR of EPF device * @phys_addr: physical address that should be mapped to the BAR @@ -119,6 +135,9 @@ struct pci_epf_driver { * requirement * @barno: BAR number * @flags: flags that are set for the BAR + * @num_submap: number of entries in @submap + * @submap: array of subrange descriptors allocated by the caller. See + * struct pci_epf_bar_submap for the semantics in detail. */ struct pci_epf_bar { dma_addr_t phys_addr; @@ -127,6 +146,10 @@ struct pci_epf_bar { size_t mem_size; enum pci_barno barno; int flags; + + /* Optional sub-range mapping */ + unsigned int num_submap; + struct pci_epf_bar_submap *submap; }; =20 /** --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020140.outbound.protection.outlook.com [52.101.229.140]) (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 8F7D23242D2; Sat, 24 Jan 2026 14:50:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266226; cv=fail; b=BJrdd/V5KOAprRj9HYDQdA/ZJ5I9TOPnQhiarBRA3TDERcHBtCPG9w6NZjxANohlp99zoA32TaF0LudFwp/mqA1/fOykUNIoh4tLDZeinVV7UpPIzVx/DU/Nl4u2E1yRM7f5SYwnThnTeHpgATpW6ZrTjiwbeq8c3vNEkRjSgVU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266226; c=relaxed/simple; bh=tuVsPMsnw5OgvM6cK5CCrKGg2qPJ4NYvrdGb+tLWIu8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=o9mqqEFbfZ7xhk4aygCcVVTQISNIUSvoa+9E01O+8SnYtfucWmzNI9gb9PxEeveyVfQS3hQHYwkJRu4ZQoZzQuchgRjSap6rPE5hvz5Zh0umXligKQfRYur8suMePVioo3JbRSvyiByOPj73f+bTTNX7Mk7+UbodGyaVLJCGiFI= 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=tcWd1GZ9; arc=fail smtp.client-ip=52.101.229.140 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="tcWd1GZ9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LjWGhFVMDSB2kBkEXE2VxCbM0CQmvCsPLB0hD9y7p4bd+zFYlB9B2I/NzBquqQBvbh+CTkgiV8BlYiT/HCqZHhxZsRbSRUU/ePyfNw61/dvX1AfTpzrf7RQAXy9XciXf3nRQwIkdQTNA46euT5hWEzCS+RIag4ZvTBiUJJ3H9gK4kLXjnfHrr3oUl0l90k6or3cA+cGiQF3dUqzY366Lr3TUdUbmbfeJgIBxvAL1wgL59IWiVq85ZTemoUbkUrux3LTDvCjEYyjR0UbCHkf+4wKTvoucHQcABoTueTGQGNXTFHaODv4V7KVQKsJ3f8rs5p15pauo+YITEtw+X7yEDQ== 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=chFczwFFvy/TiqkqH263HVf+k+lSlM18M0he4pPOJlA=; b=yLxcjLsA71Hx5nClZZOSgW4GAzY/KA8rF8SPIHJ+UZRm7l6za4426D/p4v9heiUSNE5iX+wsS155Fc+kDqZF8kwBwo1BN8cr/odNvtdRXEvfNWOskuGVxPmbotXqDKRb25nZ9nuvK8/lYJgLeUDaPAkXq2dgswhcv+7A7K+OWdi/sr3BGq3bHR0g7Z5egD5tAEA4cP5TkCDiIXJSoljDdkXTrO1rwY+f42DnEu4ZN3MQqt6PNsMQ2w12OnzacKOMzUzYNFwk+oczSsDIYYZ57p3yePK3fCML2YAHvOBgq+nCRIr+zLVtoj0FpXsOUL9PovliMrHWw4bb/vixe0gb8g== 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=chFczwFFvy/TiqkqH263HVf+k+lSlM18M0he4pPOJlA=; b=tcWd1GZ9SND7KkW2vUAesubxRLw+H2wODhavmmxBmljKkGXcFjwJElAVi1/xCyVgpHCGaomlRMV+jYUxdkhSAh2T0rwSp+jPqYfkjs0yJhKXmGHmE7Dp9/3oRmu1gYFjOlOp5wKJ0RpNIb2h0tQp73QWn7aLXR5TYP2f8CUjgIs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:18 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:18 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 3/8] PCI: dwc: Advertise dynamic inbound mapping support Date: Sat, 24 Jan 2026 23:50:07 +0900 Message-ID: <20260124145012.2794108-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0012.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:26d::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ebe3c14-b081-4e9c-68f0-08de5b57e484 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?yHbRXkS5HAUm4q+0hUMSdxHNvUCR1WMw8DhS2pcc3RkllCJzkbd3lKDjS6OK?= =?us-ascii?Q?2ISOhilBtrmn6n/RvP96o5l85MMKIt6eK/ARjEKoZHMCHGPsKqQyh7c3H8uo?= =?us-ascii?Q?rJNh+qbbKSBBRpc6y2bMVr3xZDCAVSTQ975Z97FhD3oqPKS62F0nsBC6Mkij?= =?us-ascii?Q?7lWfnr9Tpeom5hblTAfTAnwCvives8A2+podRB7LHkP9b13rQ0+X4jKfG5/7?= =?us-ascii?Q?+muLQFlbdBA/hC1u/NX+r8M3jeJUyzKVHWSU9l07wSeSj3/3Pal0UvTsPZIT?= =?us-ascii?Q?VQsfmz9Orci/TYQYAfJWkGhejbREznqzeFEn8MRWEK8Jvl0AjS2P0FPxzLcn?= =?us-ascii?Q?cba5LHl2HmUdJzC3mY33mR3aUxyf2XM9DY+h7IvBBSurPTA+1h2rP0jShKF3?= =?us-ascii?Q?tueo5aqUCMIMfD6nu5b7AJJH9MczVAD0WBQCqCTMvc+xIUJquxgDV2B+5zrG?= =?us-ascii?Q?D1PpGuaeBtOZUXuli5AJj32r1sEabpgjZxdgCrdxQJIwk7ML3oxxyOW29GHd?= =?us-ascii?Q?D/Rf7X/NTV6jxePcRpUN7feDb/dkKhDQR8FsCoHHq5zgfTRn4E8PyXgg01Wi?= =?us-ascii?Q?OFH6nnkRJWL/IeDqQ7skLGoXK7npWSri2laxTPLzkUckzT825hXJW/ccIuDC?= =?us-ascii?Q?qsBHZJMen5qg5vvYkLcO5HzY6QJMSONgxNfWHW8Qk1k7C8o95dSKl0xuGXcd?= =?us-ascii?Q?M/lwBrurSXCUm/qYGnlI6ndWh2CRYERN05E8RogzpTlXYMU61yViM0FyIlct?= =?us-ascii?Q?sd4mErco8iGi2OWir3t9vtBMEklFFytm6mkS5rNY4AGCjvBJ+BbSfrGSO3GV?= =?us-ascii?Q?u/4ID3U66KrqfNiwZo9TD8ZQ6dH2oPOuy0Ra755ppq65+C/fxdgAC3MpeGTA?= =?us-ascii?Q?nROQm1g6+993WtehBWoyTMyVibZ4dTCqjEmJSl59FtGEpCXY6JzgyBkqXRhC?= =?us-ascii?Q?ropjzSXkpXigxEbElFZCLirV+CFXbJfku803+XAB5kPhSDRNi2MeMoYlwO98?= =?us-ascii?Q?YqlMO4dA3sOVZeyPdUKJOt+uoUSrprYLXdiD2HgDNPx8nq6Va8W+zd3SEPXf?= =?us-ascii?Q?WjAzoR63MbUbl6mv/4MhgE8GR3EKcLkcTqMyx+W028feqc8OMJKXJmSX8uXK?= =?us-ascii?Q?jnk5yI1KPQ70VTjAUkhQ9HcF2YUVePp7yko+YhiSXwYNQ6pJNZYErg8wL7UL?= =?us-ascii?Q?5uraf2YaPiho3P14fe3K9UM8zMWdbJRFYNRySWtkO52wr3CVa/UJlYWS2j8y?= =?us-ascii?Q?k6k9j1okU7iBuGteqmt3qJ5zADeEl0VGOEFlrLXgdTctpXqLRHUU209N8lOj?= =?us-ascii?Q?5apb4dN61ToNbAgybt35JSrwjRL60ms6q4Bhyc2oF2GRyx+ZZzPX19tANDiE?= =?us-ascii?Q?wHpawm7up83Z8BvSLyMx9jkQRX09h8efLfb8BVKfR9WJyIK7I887GRMn60eq?= =?us-ascii?Q?lt2dhKbBTAriZT/AJgLmjB1AwoNQDglR6UJd+a67cnnXT9yf4RHm6mHGob0U?= =?us-ascii?Q?PJZFGnfAza9qAtSOZQrlwLaTtZklQonMiJ/LrwmlwZUjEGacIehKVJPgU4qH?= =?us-ascii?Q?E+UhZYC9gWTuMkUPCLo=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vthKXZC/iXgHfBW9Srz/igIWSIgGJAxvEd0yBOKNZXd4gWQRRqJ68IwqvWek?= =?us-ascii?Q?xBGZMjCQYidEgKlD1/nKFyHQO8n761EOkjhEfyw4WKDeEK8KFyOXz+JzYqkV?= =?us-ascii?Q?fzeQ638xgMJcJP0u7h/AqSEMou0Ghh/lxSXIRosk1YsRMh3afFP81by50CwN?= =?us-ascii?Q?i8UEUbuULjGgRrfiiCX2fp7aKbQqMykaZoeHFQXehJp+68AkTs7L1JTOyW/y?= =?us-ascii?Q?VQTmLq/LWa/mBAtnqMERMRrNttk+2Y7TyZ47XaKcfHCueSLfUw+kn3YaMpqB?= =?us-ascii?Q?NqxFNpZe7LjdYk2lqwOAquccz2QeskA5IpgkPbuvdYieEt4fdfKiVayD1iEC?= =?us-ascii?Q?JXw0EcqcvwoldfhQfbBqyb3q5RSAO6p+DSY2eA4NBk9zm/g9mm60rCKqtYiV?= =?us-ascii?Q?Lmf2POiGtXUcfDHHZ5EwN6YOqtxyKt/uiUqxfXaaXzQZXHnf95LHmTz+ptl6?= =?us-ascii?Q?o9/5AkXks7JFTayqAAr6FJayLhxKw6ziFzPV5PivoCVnvPk7Dw0QU/nWTq5s?= =?us-ascii?Q?tkCid3jhTTGfknAfRRrLTIdrbu9AKK6Zsl0I6TZY/FaM3XfEsa3FgnKf4GEd?= =?us-ascii?Q?ha7TPGPGQ8l9TTx37y1nFOQY/UyauI6OM1+LVgsOBwDrQ2MDD3Boay2jVyN9?= =?us-ascii?Q?PcM2F+tabd7rUyNPXJKZQb5eClFv8YXbYXrSmC6jnPJstBmcrrpUhHVSRSTF?= =?us-ascii?Q?ZdogEDtONDh25S8Oyt3mmiV5TIVNLnBOf7kmJqyrxpOzR3RBhOivJ5KMcWOK?= =?us-ascii?Q?a9vm76A4QUcyeodq0MAMRrjNxGUmOY8G/U0y9+01ak6riM3ebAiggSSCKzcw?= =?us-ascii?Q?4s9Uk9YkPQEUNCT3YGF1Z69FUQnqP/o78nVfhhZ9L3QYr0Y2ZgTtY5iimulr?= =?us-ascii?Q?7bX+iEohavnTHfl9FoEdxpan4b7FqXDwC56HcJ7HpTbOwiPgBie0rzkFIDbl?= =?us-ascii?Q?gI6cl7jt/Ohh8TLdXTIZ3wvIDPuX6CW6uRmdiR+y56FTLtlucSluoNKkA61O?= =?us-ascii?Q?ju/yaoMhKjE0AfSEapP95dLjhQXsqTenRqn+NS2WPcUbK/MlAP02rxxmDxtk?= =?us-ascii?Q?aJNbwLzUepbM8SkcdLXs86Rv6UP1EjS0kIjsv/Q/VHVTWknepHr5BTNH/9y7?= =?us-ascii?Q?/+qtEnzhMTlFmuKGL+Ibra/PgdRpZL6A0VIF9ofc2KOZnM6xX58AFd2cEquO?= =?us-ascii?Q?kSfqgvlx/Ywg5VtU+yXTqS5+MYuHR4s0BsfweBpKnaXaCRgNFAibpCgL3uBI?= =?us-ascii?Q?LJTEwyknu3XLzLZayNNdFRmZBtCJeY4r+KJhZXhbzIKZKTgtalQU15hWKNo7?= =?us-ascii?Q?Uje4v1HBURvp9B+KkK3IxZ5ZZQPY7ekZjuJtuHODgeIlXbYTEhIiErxNsBb+?= =?us-ascii?Q?p8S22gC5H3r8MxbeVE/DwM33HFEFgJEa0dbiVCSdBW9Vts1ZSoDQtutlxz1y?= =?us-ascii?Q?VISvl1p99foy/2YbwR258on5B9Uv6gO/aljflXc8JFDi56ij6WmZJ+gaCQ4z?= =?us-ascii?Q?9ag/aI4nJFOHg9vaCopxSb3W7X5SV0/9zIXrIQmK4NkpihKtTZa+0qN+pCiX?= =?us-ascii?Q?8r+CqoKl74Psf9qxjwAi5Qm+7t9fME1+QzwK/Z34+knvP8XWvHdUvbGusAS4?= =?us-ascii?Q?1Ji9CDby5GyzmOpuqDpECHuR38X9c5fwRRgy6JexB7/2jIxguzlaMJ3R/yvV?= =?us-ascii?Q?lM6So1K2X4RTKjr531jL7YBoQJPpBCMP/XNNER30oRR8PR3SSLReb9Ch/LAk?= =?us-ascii?Q?g+67A8YOHWHWSnn0ooYMBuB4t5wOO0974gHknHrUjDXf1AY5ITBC?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3ebe3c14-b081-4e9c-68f0-08de5b57e484 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:18.7904 (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: ZVVzFdjmvJmFzgFzDihbOjA1tijxaMS2kX1JgamUGhhNrwKSk+8RaDH1SGN+YenrOO4HuBghh/uR+8SFwUIfrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" The DesignWare EP core has supported updating the inbound iATU mapping for an already configured BAR (i.e. allowing pci_epc_set_bar() to be called again without a prior pci_epc_clear_bar()) since commit 4284c88fff0e ("PCI: designware-ep: Allow pci_epc_set_bar() update inbound map address"). Now that this capability is exposed via the dynamic_inbound_mapping EPC feature bit, set it for DWC-based EP glue drivers using a common initializer macro to avoid duplicating the same flag in each driver. Note that pci-layerscape-ep.c is untouched. It currently constructs the feature struct dynamically in ls_pcie_ep_init(). Once converted to a static feature definition, it will use DWC_EPC_COMMON_FEATURES as well. Reviewed-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/pci/controller/dwc/pci-dra7xx.c | 1 + drivers/pci/controller/dwc/pci-imx6.c | 3 +++ drivers/pci/controller/dwc/pci-keystone.c | 1 + drivers/pci/controller/dwc/pcie-artpec6.c | 1 + drivers/pci/controller/dwc/pcie-designware-plat.c | 1 + drivers/pci/controller/dwc/pcie-designware.h | 3 +++ drivers/pci/controller/dwc/pcie-dw-rockchip.c | 2 ++ drivers/pci/controller/dwc/pcie-keembay.c | 1 + drivers/pci/controller/dwc/pcie-qcom-ep.c | 1 + drivers/pci/controller/dwc/pcie-rcar-gen4.c | 1 + drivers/pci/controller/dwc/pcie-stm32-ep.c | 1 + drivers/pci/controller/dwc/pcie-tegra194.c | 1 + drivers/pci/controller/dwc/pcie-uniphier-ep.c | 2 ++ 13 files changed, 19 insertions(+) diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controll= er/dwc/pci-dra7xx.c index 01cfd9aeb0b8..d5d26229063f 100644 --- a/drivers/pci/controller/dwc/pci-dra7xx.c +++ b/drivers/pci/controller/dwc/pci-dra7xx.c @@ -424,6 +424,7 @@ static int dra7xx_pcie_raise_irq(struct dw_pcie_ep *ep,= u8 func_no, } =20 static const struct pci_epc_features dra7xx_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D true, .msi_capable =3D true, }; diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller= /dwc/pci-imx6.c index dfe814469993..06f45e009d7d 100644 --- a/drivers/pci/controller/dwc/pci-imx6.c +++ b/drivers/pci/controller/dwc/pci-imx6.c @@ -1388,6 +1388,7 @@ static int imx_pcie_ep_raise_irq(struct dw_pcie_ep *e= p, u8 func_no, } =20 static const struct pci_epc_features imx8m_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .bar[BAR_1] =3D { .type =3D BAR_RESERVED, }, .bar[BAR_3] =3D { .type =3D BAR_RESERVED, }, @@ -1397,6 +1398,7 @@ static const struct pci_epc_features imx8m_pcie_epc_f= eatures =3D { }; =20 static const struct pci_epc_features imx8q_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .bar[BAR_1] =3D { .type =3D BAR_RESERVED, }, .bar[BAR_3] =3D { .type =3D BAR_RESERVED, }, @@ -1417,6 +1419,7 @@ static const struct pci_epc_features imx8q_pcie_epc_f= eatures =3D { * BAR5 | Enable | 32-bit | 64 KB | Programmable Size */ static const struct pci_epc_features imx95_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .bar[BAR_1] =3D { .type =3D BAR_FIXED, .fixed_size =3D SZ_64K, }, .align =3D SZ_4K, diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/contro= ller/dwc/pci-keystone.c index f86d9111f863..20fa4dadb82a 100644 --- a/drivers/pci/controller/dwc/pci-keystone.c +++ b/drivers/pci/controller/dwc/pci-keystone.c @@ -930,6 +930,7 @@ static int ks_pcie_am654_raise_irq(struct dw_pcie_ep *e= p, u8 func_no, } =20 static const struct pci_epc_features ks_pcie_am654_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .msix_capable =3D true, .bar[BAR_0] =3D { .type =3D BAR_RESERVED, }, diff --git a/drivers/pci/controller/dwc/pcie-artpec6.c b/drivers/pci/contro= ller/dwc/pcie-artpec6.c index f4a136ee2daf..e994b75986c3 100644 --- a/drivers/pci/controller/dwc/pcie-artpec6.c +++ b/drivers/pci/controller/dwc/pcie-artpec6.c @@ -370,6 +370,7 @@ static int artpec6_pcie_raise_irq(struct dw_pcie_ep *ep= , u8 func_no, } =20 static const struct pci_epc_features artpec6_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, }; =20 diff --git a/drivers/pci/controller/dwc/pcie-designware-plat.c b/drivers/pc= i/controller/dwc/pcie-designware-plat.c index 12f41886c65d..8530746ec5cb 100644 --- a/drivers/pci/controller/dwc/pcie-designware-plat.c +++ b/drivers/pci/controller/dwc/pcie-designware-plat.c @@ -61,6 +61,7 @@ static int dw_plat_pcie_ep_raise_irq(struct dw_pcie_ep *e= p, u8 func_no, } =20 static const struct pci_epc_features dw_plat_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .msix_capable =3D true, }; diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index c3301b3aedb7..7ca9d0f6b7f2 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -305,6 +305,9 @@ /* Default eDMA LLP memory size */ #define DMA_LLP_MEM_SIZE PAGE_SIZE =20 +/* Common struct pci_epc_feature bits among DWC EP glue drivers */ +#define DWC_EPC_COMMON_FEATURES .dynamic_inbound_mapping =3D true + struct dw_pcie; struct dw_pcie_rp; struct dw_pcie_ep; diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/co= ntroller/dwc/pcie-dw-rockchip.c index 77c4e6a4ddea..03ad8c242366 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -382,6 +382,7 @@ static int rockchip_pcie_raise_irq(struct dw_pcie_ep *e= p, u8 func_no, } =20 static const struct pci_epc_features rockchip_pcie_epc_features_rk3568 =3D= { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D true, .msi_capable =3D true, .msix_capable =3D true, @@ -402,6 +403,7 @@ static const struct pci_epc_features rockchip_pcie_epc_= features_rk3568 =3D { * BARs) would be overwritten, resulting in (all other BARs) no longer wor= king. */ static const struct pci_epc_features rockchip_pcie_epc_features_rk3588 =3D= { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D true, .msi_capable =3D true, .msix_capable =3D true, diff --git a/drivers/pci/controller/dwc/pcie-keembay.c b/drivers/pci/contro= ller/dwc/pcie-keembay.c index 60e74ac782af..2666a9c3d67e 100644 --- a/drivers/pci/controller/dwc/pcie-keembay.c +++ b/drivers/pci/controller/dwc/pcie-keembay.c @@ -309,6 +309,7 @@ static int keembay_pcie_ep_raise_irq(struct dw_pcie_ep = *ep, u8 func_no, } =20 static const struct pci_epc_features keembay_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .msix_capable =3D true, .bar[BAR_0] =3D { .only_64bit =3D true, }, diff --git a/drivers/pci/controller/dwc/pcie-qcom-ep.c b/drivers/pci/contro= ller/dwc/pcie-qcom-ep.c index f1bc0ac81a92..5e990c7a5879 100644 --- a/drivers/pci/controller/dwc/pcie-qcom-ep.c +++ b/drivers/pci/controller/dwc/pcie-qcom-ep.c @@ -820,6 +820,7 @@ static void qcom_pcie_ep_init_debugfs(struct qcom_pcie_= ep *pcie_ep) } =20 static const struct pci_epc_features qcom_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D true, .msi_capable =3D true, .align =3D SZ_4K, diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c b/drivers/pci/cont= roller/dwc/pcie-rcar-gen4.c index 80778917d2dd..a6912e85e4dd 100644 --- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c +++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c @@ -420,6 +420,7 @@ static int rcar_gen4_pcie_ep_raise_irq(struct dw_pcie_e= p *ep, u8 func_no, } =20 static const struct pci_epc_features rcar_gen4_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .bar[BAR_1] =3D { .type =3D BAR_RESERVED, }, .bar[BAR_3] =3D { .type =3D BAR_RESERVED, }, diff --git a/drivers/pci/controller/dwc/pcie-stm32-ep.c b/drivers/pci/contr= oller/dwc/pcie-stm32-ep.c index 2cecf32d2b0f..c1944b40ce02 100644 --- a/drivers/pci/controller/dwc/pcie-stm32-ep.c +++ b/drivers/pci/controller/dwc/pcie-stm32-ep.c @@ -70,6 +70,7 @@ static int stm32_pcie_raise_irq(struct dw_pcie_ep *ep, u8= func_no, } =20 static const struct pci_epc_features stm32_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .msi_capable =3D true, .align =3D SZ_64K, }; diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/contr= oller/dwc/pcie-tegra194.c index 0ddeef70726d..06571d806ab3 100644 --- a/drivers/pci/controller/dwc/pcie-tegra194.c +++ b/drivers/pci/controller/dwc/pcie-tegra194.c @@ -1988,6 +1988,7 @@ static int tegra_pcie_ep_raise_irq(struct dw_pcie_ep = *ep, u8 func_no, } =20 static const struct pci_epc_features tegra_pcie_epc_features =3D { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D true, .msi_capable =3D true, .bar[BAR_0] =3D { .type =3D BAR_FIXED, .fixed_size =3D SZ_1M, diff --git a/drivers/pci/controller/dwc/pcie-uniphier-ep.c b/drivers/pci/co= ntroller/dwc/pcie-uniphier-ep.c index d6e73811216e..d52753060970 100644 --- a/drivers/pci/controller/dwc/pcie-uniphier-ep.c +++ b/drivers/pci/controller/dwc/pcie-uniphier-ep.c @@ -420,6 +420,7 @@ static const struct uniphier_pcie_ep_soc_data uniphier_= pro5_data =3D { .init =3D uniphier_pcie_pro5_init_ep, .wait =3D NULL, .features =3D { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D false, .msi_capable =3D true, .msix_capable =3D false, @@ -438,6 +439,7 @@ static const struct uniphier_pcie_ep_soc_data uniphier_= nx1_data =3D { .init =3D uniphier_pcie_nx1_init_ep, .wait =3D uniphier_pcie_nx1_wait_ep, .features =3D { + DWC_EPC_COMMON_FEATURES, .linkup_notifier =3D false, .msi_capable =3D true, .msix_capable =3D false, --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020140.outbound.protection.outlook.com [52.101.229.140]) (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 C52C832571D; Sat, 24 Jan 2026 14:50:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266230; cv=fail; b=maJrwGFEVgBlQlO8PhhlOEE2bAeM1t1aBpDm0W5WFidUDxgAaBfNeqCr8XQsjOh8m5fk158Ld8u42EYTDp9z7B9n54BV+S8ftOnRCtTAAg8QWdjckCL6ZCYii6wiKBvlqi7o9vUlsPdqRKU8mRtgfK9cX6oBHEZbYV8K2JHOmjE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266230; c=relaxed/simple; bh=Nrr1N8YrAcN/x2RJ3s+AoXox1a1Wprq6uDFmtn4RU94=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kJyxV0Iw4khURYzabm+PnC4KtIPuHujKqCXetIxSLeu9oTH2+N2t6Q8pgMHYQCeK/hWkKIIivi0OIEhrX8CHkXlB/DHknEdwrHHL/gyLD/KL6BXWzl3v3crDUoYUI5OSpjRPl/Eyy9+CgBRX/0EfoDmciFWWtaGDdSNVF9Fwqqs= 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=DkAGHsqo; arc=fail smtp.client-ip=52.101.229.140 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="DkAGHsqo" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UeNNa2mE3T9KahkiOJaUJLb2cfXgcamib0+qNgKbVCjUBNIT9mcR7l6N19Kh1gdQn+Zv5A4C/yboMA/RBALqkePnTd2wjMIh9oY0ILUo0R/e4WQnZ7mbHN53vGp48Opy/OQi+5dss6t62UmUg1sX6SiyWFIj+jIrSNJJce1Qmay1Bjmyeaim8/nCxfqGCjMqvXOhcq7K0ywTDJF0diDDy9n0KSIBLpmfgVE+rKlRmN+bHyr+MWUsimdFWo325SYllX72tr63qpIdsm5Pjd6ucZJwPHxQ75F2xYZqRKADKnHMH8OEq4o0RPyx7xr72VWt2hNPhmkNAvbZjm+/pL63ng== 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=sVazY870yWu71QphbkyJ+nXef387QUAjnwNViDU/egk=; b=WFjyJT4wWpbIshdrD0P9/7W4imjyOyhAa9UezpjobhbCi688tR0vKrJd/fzl+1MtZt3rJjXw8dpP4tqkYQtIjjHA8DYwOhvsPk8df60xmH+7YPK378fdHtNDwDt47pNkECIQGLGsucVXycycQI0NhxDjIYyBEhd5nz99kheQ2gqcoKKuDdUI8P9YAwo7Slv3IREcPkEAqzqJWYkJmb+KgRKjvX3e9Oq3XLoWT4kjAu7kwvT9LZoAWIq7pjF7xyjSetyCQjhXzn2SZnIhWxqyNbyCgaaHkqC7X8CZQXEfIODeaE63iERunSvN6/P3TShhVYBLvZ8qL4itLhYSVqWoiA== 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=sVazY870yWu71QphbkyJ+nXef387QUAjnwNViDU/egk=; b=DkAGHsqo0t4MPBDx1eBw2el5ItC20xg0hn1hkJCKnuwVK2tUXs3TZy8OB6U1ShHfGCpMbJYiEcuZwOrkM16Z0g2RiazdJYHihA5JUveArWEwJiRNwe64QeNqdqvVk7eH+RHZYjlVgaOA9Vb1pQaIB5O2rds+88Mc+QCIb9caCe4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:19 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:19 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 4/8] PCI: dwc: ep: Support BAR subrange inbound mapping via Address Match Mode iATU Date: Sat, 24 Jan 2026 23:50:08 +0900 Message-ID: <20260124145012.2794108-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0017.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::19) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: 50f518f8-9f18-4aa1-22c9-08de5b57e508 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?PZfrxwa+5zGu5bv+4MYCzki3d4cV4SVRImrXM6rwj06sCo2YXfopoNQccMMy?= =?us-ascii?Q?NX79JCNrOQjelDDFec8CJ5veYDkNZDgRd2Lcq1mCyaxXG3TPSYxWSu169ly4?= =?us-ascii?Q?Iedlzof/zLiSbAgPRmj23MXsSNTtYZ2W9zKC7tGjJ7N4vF4XN7zilQ/YRGdL?= =?us-ascii?Q?zyYyw4fdrr3o6dr93Q+tbPSBtXjTw/oS/VJpTs2uxNzTslA16+LEXMvvAqf5?= =?us-ascii?Q?Mkow2LYtHseMhlaW37xLO2+aYi+lNuWepQboz9AH0JZDRSpN0rwlirm0y/VK?= =?us-ascii?Q?4vI7fE5ydA1og0HCX7Kae9dmi9lrbXgiySvUPynPpt0UiNi+nfvLsVaEuf1P?= =?us-ascii?Q?ITZCahVrDvYmQKPc53mieTlemjQWUn91T5py0xvjlaOkNg4LfAcIsT+M6npU?= =?us-ascii?Q?CzF6PbF2SPe7jdIK4NoWeXne+63bbkq5hELm/6i/0JnPJ/G0VocqIavHPsu5?= =?us-ascii?Q?aX2hV8x3VEByEou39uqpRNMIKqSEq0yQXSbAIabWUxsQZoKh2u7aI4P5Gt2i?= =?us-ascii?Q?XsM2vF2NKqv29r1tCqospySwEG+yU+smQBfPMf39VJdRhRoCWulGRqFRLoix?= =?us-ascii?Q?JQlEpoZZLDUhrHj+IvZB5pjKPeqIYoitL+u4FJu1XghGdLKeTbgz27kSDGbB?= =?us-ascii?Q?vIeHlCYzHREJiqtu0J4OzHZK22cPxmuE4aZ/FH/3X14vkeXpgeVaUE+zHWK2?= =?us-ascii?Q?DCZhZvFjVWCwfbyLKxLgeM/DjAotchWN4RkG5VgwqGdFY5ayCCrr9CWrnVdz?= =?us-ascii?Q?2DptJtSAbYZew+5ivYkodQl7Xh5yG2VkG5RMCGuhDxKXFdRw7ikMpDDuTNIa?= =?us-ascii?Q?Mm0mWrP2qAZSN7wTU/Qy3vlfBfUcJCBiI5ddT/z+nAbhJLuKhbZIPBC533tT?= =?us-ascii?Q?9AoJyglMELi+yvPSy15RqnB2A1lU7HHp9dAUGjRcve5Wk7qfUkRl8I+TULwc?= =?us-ascii?Q?two/onIJ7sHaH+xYsvxmZTi+aRnDHJBDXYBf4tWYmJayTPKO31Ae8GuoHbMQ?= =?us-ascii?Q?RI0WrTIbcFTEjMsJHLF6OVZyrJecyExOuKsi4nqT8vbukWBXlu1TjMpPs7jW?= =?us-ascii?Q?f3nfBh9R4EsaXIruQ+gDWDTST1ivhYVmI52rr21eeIr3ZMnQLU/dHrT2R7so?= =?us-ascii?Q?uu8NTRnpZp3wr3CQgrZPVnFGcU8YFmvlvZCMnoWq2RgVcgYrHlMAHtI6oZY9?= =?us-ascii?Q?YAghrWrZh1Xg7Cq4juBUY8Huc9p5vLIJ7rG3OOqDlMHMw1ZSwyBJkTFOLp4H?= =?us-ascii?Q?+K6S7lnACRgjTcJsBJN/GPG9VjLkLzgTcTb4iUUzGx5MMRpyjN/AeDqP35ya?= =?us-ascii?Q?GxeSrz6ovBg/TbmXlPxO0WfaD5FU1ritDbUFKVDVidDJoAsIJISItWFOnK3O?= =?us-ascii?Q?2uTT9EbUMnMHio/gGHWiYzeFyrJ18CTKz2O8kNrUYYrzcuA784Q9fAKWH5sI?= =?us-ascii?Q?SJFDPFPTgt8dHwXdO4rMLrgwvjqf/qr3eBjAr9EqTadag0aSCDRtlzzGeM/P?= =?us-ascii?Q?HqhgyO0Pj0kvcRSsyG4CqUmQJ8ujrz19DCi76lGNF9600uOuxmuaGTa8Xx2S?= =?us-ascii?Q?8Iya8YF0+xawRtdYybU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OXYRfCNp7nnH/pbScJTj+0K9qtYAO+tiPhuZ1RyFPtNDE1c83Jf6r7Gga3/r?= =?us-ascii?Q?JppovCn3NVnr6KMjvRJis/rHN42RKTFK9xlvmrid86MW1rATeziol+QgGAh4?= =?us-ascii?Q?8vKkrvB6j02v444mJKB0f+Wsq8KMX7lwak3wZSxnHI0mkU+RxUSkyl/hN6zX?= =?us-ascii?Q?piGdJg75BWvVWu4Ld7O/KGkUfZ49ToJnPnzVFeWHct/TBwcePl4MPSfIHVsx?= =?us-ascii?Q?MxpsPfBhTmkEqh8MYu/sLg7O/hx1iTO8+314e1VxLf9+lwMx+f0BVmCkFXrn?= =?us-ascii?Q?Tzb1LvrrJMcyXBps/Z4hRsIoGO8CPMtl6WYToM18Uqp03H7553tkUSrk0Z2J?= =?us-ascii?Q?5mppxqMu5Y3OPGj3II1lagmrytIIaXTK8NDiKR++PoPlVSRKAdLCVqnBMlBy?= =?us-ascii?Q?srfrsOzb7Jmouoksea0/Yzf9mfzG0c2/YTNzVBdAKbDcoXESBqcCplm4JccA?= =?us-ascii?Q?NucHYqFkrGrkW+ndpfH/oRwvTNyNoyMxZ3/DGIqxJ0r+V40vo22/hcQIX+hy?= =?us-ascii?Q?Xlbh97ZCBQO/p8nANlU+AFC12D7tT5yzUjypy3ebd6o5bWrpIRpF7HYdOJrD?= =?us-ascii?Q?n0i6XDUQfvMEvyv/6Yzqo+3+tAsn2Fu4HmI6oQJjgYTc9Q07VEvO/fD+6eV7?= =?us-ascii?Q?RruPfsM+sEwV0dH2NxXZy4W4VAUBkEEedBNEWvQnM7FAWDfeqDpvVQ3VFfGT?= =?us-ascii?Q?TaiUMUVMZvzKVSwNw86rt2bCpgLAI+liogBoRk5ucBxlvF+H2ooEALzGYeNc?= =?us-ascii?Q?xg6twV2M/I6joXN5EzXOdvrrk7bj0Q8jBV3NNdeFEIR6oJxJYAPPG7llonAe?= =?us-ascii?Q?mA1xDfLSGKqw4XkmY53Xilm2zKyQKh8/0G87eIybhv/5oU2DGuGSPGdntFOh?= =?us-ascii?Q?OI6dihV6eH8DnsI9IYjBPcFDYX6C5+gWU6Ch57k6j8EmEeMpzPJlD2sH9Wjr?= =?us-ascii?Q?+P33gFxU+RZLvc6lHD17zjQ8cTl3nOEdqTzVKyQxgPXzqTJFUbjw8dI3q4Dr?= =?us-ascii?Q?RcXWX0DUOJab0reoOw8Udb1G1Vpu9x+vzHzAEZvNEfDSGR/C+0uK1cAF/ANu?= =?us-ascii?Q?nf9j/VTM2bJFO3cyXJuAz6l4ls7C4v3dXQk9DFMh41rvD24+OArzMGgGJUDF?= =?us-ascii?Q?T7/6/vP/BuOFbUzOZ6e1QHTbhT43oMdiY6A4JuNESBTJq7cJYmwBOZ7Jq7k+?= =?us-ascii?Q?QEZl8p0Ky2+Yd4qkbhpt4S8UAyRanM9nrhgKlfDiXGaDeBZ14pW3dwBSGmyC?= =?us-ascii?Q?g+YzIAx6IYWO5P6smqreFNMXOMsQtHBg0plrQ19okoQZyAqnnDIYKSHQ5cSC?= =?us-ascii?Q?C+Zvi0JVJgMMhrPHMpNhXA3xpdGj0NsDDjIz0oMyuDJumulFRsQBx/RgYfPU?= =?us-ascii?Q?ybyNv1bHryx/Yhb/zJsZveRdzyzNVGQx90D8YlNLHkkFFUEttrpG9KzBD3/j?= =?us-ascii?Q?KzOsQbwERvZv1ftk5qq5embF6lxmarfe9wCblluzbP/QQhr+AheMaVXEgcxA?= =?us-ascii?Q?HrLVZ8Lzu3z595MQv8BJsbQIMkwAfFStumvviTxVzGskcr2NRr9ytVP3mb5d?= =?us-ascii?Q?n8IuGAeUGU6A4G+Koy9qCin1Ul/tq5FoTs+QMT/gpdb8WR+UhtoZi1DqiOEF?= =?us-ascii?Q?S/QQLJqeu/DZuqpSUgIOl5oSC3XevyvsQ4y/sM1Gcv5GxJDOXPnoT72NCi0d?= =?us-ascii?Q?74q/WS261NVwL73edEQV5cyGC132Ekiu4ayaopDd9gav/OflFs/aOQh2ZVO/?= =?us-ascii?Q?A9LDtwxfvMK+q40ryMSrt371PAITmgq+v0FdThsQIFtZEWHTgr6j?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 50f518f8-9f18-4aa1-22c9-08de5b57e508 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:19.6463 (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: +iYyQC9GcoWbEfqbe3jaYDcqC7Ed7+teK7aVo8fmIHbok66/9RjkQBw7Qkd9C79a/8om5YCa45a2w6WllcSVmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Extend dw_pcie_ep_set_bar() to support inbound mappings for BAR subranges using Address Match Mode IB iATU when pci_epf_bar.num_submap is non-zero. Rename the existing BAR-match helper into dw_pcie_ep_ib_atu_bar() and introduce dw_pcie_ep_ib_atu_addr() for Address Match Mode. When num_submap is non-zero, read the assigned BAR base address and program one inbound iATU window per subrange. Validate the submap array before programming: - each subrange is aligned to pci->region_align - subranges cover the whole BAR (no gaps and no overlaps) Track Address Match Mode mappings and tear them down on clear_bar() and on set_bar() error paths to avoid leaving half-programmed state or untranslated BAR holes. Advertise this capability by extending the common feature bit initializer macro (DWC_EPC_COMMON_FEATURES). This enables multiple inbound windows within a single BAR, which is useful on platforms where usable BARs are scarce but EPFs need multiple inbound regions. Reviewed-by: Frank Li Signed-off-by: Koichiro Den Reviewed-by: Niklas Cassel --- .../pci/controller/dwc/pcie-designware-ep.c | 212 +++++++++++++++++- drivers/pci/controller/dwc/pcie-designware.h | 7 +- 2 files changed, 208 insertions(+), 11 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index cfd59899c7b8..de09cd786edc 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -100,9 +100,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 inbound iATU mapping */ +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; @@ -135,6 +136,179 @@ static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *= ep, u8 func_no, int type, return 0; } =20 +static void dw_pcie_ep_clear_ib_maps(struct dw_pcie_ep *ep, enum pci_barno= bar) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct device *dev =3D pci->dev; + unsigned int i, num; + u32 atu_index; + u32 *indexes; + + /* Tear down the BAR Match Mode mapping, if any. */ + 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; + } + + /* Tear down all Address Match Mode mappings, if any. */ + indexes =3D ep->ib_atu_indexes[bar]; + num =3D ep->num_ib_atu_indexes[bar]; + ep->ib_atu_indexes[bar] =3D NULL; + ep->num_ib_atu_indexes[bar] =3D 0; + if (!indexes) + return; + for (i =3D 0; i < num; i++) { + dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, indexes[i]); + clear_bit(indexes[i], ep->ib_window_map); + } + devm_kfree(dev, indexes); +} + +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); +} + +static int dw_pcie_ep_validate_submap(struct dw_pcie_ep *ep, + const struct pci_epf_bar_submap *submap, + unsigned int num_submap, size_t bar_size) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + u32 align =3D pci->region_align; + size_t off =3D 0; + unsigned int i; + size_t size; + + if (!align || !IS_ALIGNED(bar_size, align)) + return -EINVAL; + + /* + * The submap array order defines the BAR layout (submap[0] starts + * at offset 0 and each entry immediately follows the previous + * one). Here, validate that it forms a strict, gapless + * decomposition of the BAR: + * - each entry has a non-zero size + * - sizes, implicit offsets and phys_addr are aligned to + * pci->region_align + * - each entry lies within the BAR range + * - the entries exactly cover the whole BAR + * + * Note: dw_pcie_prog_inbound_atu() also checks alignment for the + * PCI address and the target phys_addr, but validating up-front + * avoids partially programming iATU windows in vain. + */ + for (i =3D 0; i < num_submap; i++) { + size =3D submap[i].size; + + if (!size) + return -EINVAL; + + if (!IS_ALIGNED(size, align) || !IS_ALIGNED(off, align)) + return -EINVAL; + + if (!IS_ALIGNED(submap[i].phys_addr, align)) + return -EINVAL; + + if (off > bar_size || size > bar_size - off) + return -EINVAL; + + off +=3D size; + } + if (off !=3D bar_size) + return -EINVAL; + + return 0; +} + +/* Address Match Mode inbound iATU mapping */ +static int dw_pcie_ep_ib_atu_addr(struct dw_pcie_ep *ep, u8 func_no, int t= ype, + const struct pci_epf_bar *epf_bar) +{ + const 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 device *dev =3D pci->dev; + u64 pci_addr, parent_bus_addr; + u64 size, base, off =3D 0; + int free_win, ret; + unsigned int i; + u32 *indexes; + + if (!epf_bar->num_submap || !submap || !epf_bar->size) + return -EINVAL; + + ret =3D dw_pcie_ep_validate_submap(ep, submap, epf_bar->num_submap, + epf_bar->size); + if (ret) + return ret; + + 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; + } + + indexes =3D devm_kcalloc(dev, epf_bar->num_submap, sizeof(*indexes), + GFP_KERNEL); + if (!indexes) + return -ENOMEM; + + ep->ib_atu_indexes[bar] =3D indexes; + ep->num_ib_atu_indexes[bar] =3D 0; + + for (i =3D 0; i < epf_bar->num_submap; i++) { + size =3D submap[i].size; + parent_bus_addr =3D submap[i].phys_addr; + + if (off > (~0ULL) - base) { + ret =3D -EINVAL; + goto err; + } + + pci_addr =3D base + off; + off +=3D size; + + free_win =3D find_first_zero_bit(ep->ib_window_map, + pci->num_ib_windows); + if (free_win >=3D pci->num_ib_windows) { + ret =3D -ENOSPC; + goto err; + } + + ret =3D dw_pcie_prog_inbound_atu(pci, free_win, type, + parent_bus_addr, pci_addr, size); + if (ret) + goto err; + + set_bit(free_win, ep->ib_window_map); + indexes[i] =3D free_win; + ep->num_ib_atu_indexes[bar] =3D i + 1; + } + return 0; +err: + dw_pcie_ep_clear_ib_maps(ep, bar); + return ret; +} + static int dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, struct dw_pcie_ob_atu_cfg *atu) { @@ -165,17 +339,15 @@ 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; =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); + dw_pcie_ep_clear_ib_maps(ep, bar); + 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, @@ -331,11 +503,27 @@ static int dw_pcie_ep_set_bar(struct pci_epc *epc, u8= func_no, u8 vfunc_no, ep->epf_bar[bar]->flags !=3D flags) return -EINVAL; =20 + /* + * When dynamically changing a BAR, tear down any existing + * mappings before re-programming. + */ + if (ep->epf_bar[bar]->num_submap || epf_bar->num_submap) + dw_pcie_ep_clear_ib_maps(ep, bar); + /* * When dynamically changing a BAR, skip writing the BAR reg, as * that would clear the BAR's PCI address assigned by the host. */ goto config_atu; + } else { + /* + * Subrange mapping is an update-only operation. + * The BAR must have been configured once without submaps so that + * subsequent set_bar() calls can update inbound mappings without + * touching the BAR register (and clobbering the host-assigned address). + */ + if (epf_bar->num_submap) + return -EINVAL; } =20 bar_type =3D dw_pcie_ep_get_bar_type(ep, bar); @@ -369,8 +557,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->num_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 diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 7ca9d0f6b7f2..8f170122ad78 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -306,7 +306,8 @@ #define DMA_LLP_MEM_SIZE PAGE_SIZE =20 /* Common struct pci_epc_feature bits among DWC EP glue drivers */ -#define DWC_EPC_COMMON_FEATURES .dynamic_inbound_mapping =3D true +#define DWC_EPC_COMMON_FEATURES .dynamic_inbound_mapping =3D true, \ + .subrange_mapping =3D true =20 struct dw_pcie; struct dw_pcie_rp; @@ -487,6 +488,10 @@ struct dw_pcie_ep { phys_addr_t msi_mem_phys; struct pci_epf_bar *epf_bar[PCI_STD_NUM_BARS]; =20 + /* Only for Address Match Mode inbound iATU */ + u32 *ib_atu_indexes[PCI_STD_NUM_BARS]; + unsigned int num_ib_atu_indexes[PCI_STD_NUM_BARS]; + /* MSI outbound iATU state */ bool msi_iatu_mapped; u64 msi_msg_addr; --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020114.outbound.protection.outlook.com [52.101.228.114]) (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 3E9ED318B99; Sat, 24 Jan 2026 14:50:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266228; cv=fail; b=gnFPEiuIn7z/iMPsgeW3Vc2JuaZJeD6kMMF8UDMIfWljzMp+GHZsKwwDdBmaNJy4yLihCp1q1sTfLMiEuRewZt960FJzyWbU0ParPL2XM9dKfy9WuSmrB2TpRAhoJYItLgR/+pAGByaW9SIpJCPMhd8iO+nuwkZEl0t5Jrzw4Qk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266228; c=relaxed/simple; bh=eCCRoFPLuluLEqPvN5ZKW8GSM3jf+xIzMWfKZriYU8E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XX/NqZc4bgMwWysUScVqqH4GVj1bXw8ySdFxhgGPQ/iDucX8Sk+N8D9wmTcPDelAdUIHwuPoh7vgwLwcJkPhJzjVK9+BNLVvmitzOO5wACqIxa08cS5bixsVVd4eakdYLbQzbbUgg27hwCUG3b4uDMw3xIv03Zdt2SAdbIN1WII= 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=hs6dqvzQ; arc=fail smtp.client-ip=52.101.228.114 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="hs6dqvzQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HMo4i5u49+G3t4Aqb4ftdMLiWQzEA13EZsfhs7t2C92clbeYTN0IGhMmNbHJcus78ZcRTIFh+Yfs3T33HvOfRX0+JMbdJNxXb4X7Y5r3Ilsoy+yJNYidCt/8Of/Mr0ugbyaZj/SGj6lVpcx6gCbV36h6RELkbTBfamiOYJ1Vt2olNI3NFFHaMM6qVd/a9DHmk4sDM2cIy3YTGFRoiLzvfy9Uv809VDnQe+GF5UiymTqawCj2rIV/13xXkdlcm5Ox0o6G3SI6IsMHjoaK185DK8gNmj5HX+EdQBR8LS1TYsNcyvtkGPMdsuTVwWHFDYd5/4V8oTeGLjIhV27TaC8/hQ== 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=vzHmLHiHl09zdrtEBoESDXjnN4gnabBijgeRkh4Eo0Q=; b=RLkY0S5NckIrR/9WJ9dYMKPYLIms59t7PGlFje9uXLmctPtARFQXXOSKau/iDJ8JfgV/IG0bSENmEwUfjjhNwSkd/HPAGKfyJvKLRwPkOC5vPmGf7E72Ea+oxwLabH8gJ2LTEzw+7AT0/LeUCg9FtZVlpNiWnLKxeXeWCeDMpvSfOxtZE2O5Vo5Bm+NLKefWWb/9rQEuzn6RwDCnEuido8UGF+2CprKP+PoGvG4lJB5ouJjqfjvNISyJ/XSDqg5LyVSg03QstIujUSSg18jCZVczGCA0treE1kG7I7YqiDQsrvizWwWWoLR2y9qMCpb2oLdaUVcr2fZH9V8j9reIDw== 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=vzHmLHiHl09zdrtEBoESDXjnN4gnabBijgeRkh4Eo0Q=; b=hs6dqvzQH7/ufVPBXgpUkYR2PynTVpT+EFN/UDxYJuFvdRRNzbXa2WZbcC8HVN38Qu/aJaFImK4Duer9MI2jwhvilrOsTEyH9QfnusC1auKQ1Z8Ymm6sLLyP2Fk7Rh/ZyJ9FKJz9nXvWiQJI3oGyBwo2rNOy7n1n/TrvO1q+6Yk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:20 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:20 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 5/8] Documentation: PCI: endpoint: Clarify pci_epc_set_bar() usage Date: Sat, 24 Jan 2026 23:50:09 +0900 Message-ID: <20260124145012.2794108-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0051.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36b::12) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: 70290d38-5b3f-4a24-a272-08de5b57e595 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?SgXOns9ZjoM1KH4Opl0tz5zGjwbFS0fpipu/EX1FnHYV50bEMKiCSzcALdIR?= =?us-ascii?Q?n2hNCsDYSJ8bVG4rZcNNahu267HKad+QG8adxbvf6qIW43s3FNiyY1ZqDBJd?= =?us-ascii?Q?YgYvkEwupJdqARjQufbhKRKLp0gl0bZ4HZHs6Xq3pS7tVWNPim+dyIbmgoKS?= =?us-ascii?Q?t6rxArW1hgVyw0KKIVSFbwX7ci8cjfRiJNOG/cJu4VtgPJRfFaq8QSBg35ps?= =?us-ascii?Q?grhJNahcmOsd9/I6A4afL5v1MULQPFn+X5Z2JkQITBiA2NyjSDFY05cCzzkG?= =?us-ascii?Q?iya6915mZOpK+1AyeMNgxd13XZ3ZhSo41lzurUh80nMEcWPKGPGyWRzoJw+C?= =?us-ascii?Q?IMskEbWadnk7NSllJ3hye2Y2zUDENtnz7nimidsPwMGYrlVhh/OIY5HPf9iq?= =?us-ascii?Q?mwQ+hTBopCninoW7mYVskdphexExBXMTTWfSAAAGCukYZyVtlyg4J8rhzziL?= =?us-ascii?Q?Xo5ZrCJ1qH04++DrIVbrSJJ/w5/s1pfvyxwFqzT6s+GQGq6G7q/PebnkdvoP?= =?us-ascii?Q?0IenWFIxTi+sh6AzU7hlYMBjnNs1zhgil7nAEijzJGUUdJPdvRb348MtV7r3?= =?us-ascii?Q?zed1oPEKCkFzToJyS2RmeROiUdSMrZFFgAwoLvd1Jx3S0wbm6r0V1fhVcFLl?= =?us-ascii?Q?vz2gqw50lKvdBz+sXQiTLNTS2GU6AROOm1JAk7EmNDcq0hMn41QJRTdNbdoK?= =?us-ascii?Q?Yheo+dXz2PmS8dtegatknXA1tnvPrXbpB+XW/+EWccLjgwlmJpM4iX+xl83q?= =?us-ascii?Q?/GM7OABKVV6d04IrdQZbqBlGsmSDZlYoWtd72mOPJQg6jxt12bA0LBCfi42N?= =?us-ascii?Q?rKCUj/bPEAYC12i38HquALlE5WTVQ5l5WcXCNdaQ1LXC9yI7kAWOhwVGFoLk?= =?us-ascii?Q?zALLrx2BWcNGMo9ZFuuvIa4Svr9PtEM5pLSXtpljeU32e+tKTUuD9uk4W/D7?= =?us-ascii?Q?aQlT184mvX8fDnezPAJtuoz3Rk3g8HwQARIzdeMp2UA+gwrx2nFoHPiOTJR8?= =?us-ascii?Q?Qhpg83oae4i5UfCvN6qjqdSMht+wGv90hWg5OHqck621emhUyDhl0wJZNycs?= =?us-ascii?Q?ff8j9dTE2RtPrzD5Vzt3/w5SD3nBK3y2ZXNxKg2UKBAgwktCXK0yKWoqLsS+?= =?us-ascii?Q?n6BwtvQ1ahbx43Uly3UpRt5a+Fd5H2d8x/l8vrsyJZWc1MAtr68+kJi/5JQG?= =?us-ascii?Q?IVFGr2Wccr2DjD82+ld6dsf2kUzbphr6oqGol2C+en6cH0TEnXPl3XYUZUy0?= =?us-ascii?Q?mUpC2Xbz/+7n6BnTnO0nHsSKtWAX5rvc7/bba96MsczKd9w8g51gRAXXgTCs?= =?us-ascii?Q?Yw2Gnjljo4Q7FX+Auj4q5ONMxGtIk/8tdR5AWf9JadAj2X8QweKySAACcHjz?= =?us-ascii?Q?Fzf2j22UBBPOL4l/4vEUAjRMxBjsS8o0ZxccLS/LG/mTBJEVvRY+XQmJ6ru/?= =?us-ascii?Q?rz6gS8pxjNUt0X088bQysrpiENdjE2SIT9F8rvgLjOBW9tH6Ge8mZGD/3sRI?= =?us-ascii?Q?jkZwITaA7WvqBlDKM6SwwbLLWXM6MeyIEu+spQcYUTkxDS40H3p1szKI6Nmd?= =?us-ascii?Q?fBMOffsvaK7BXrnoVro=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9jDK2FJv/rXZN1cvlJZL8XFz08qOMIWZms4TffDAHVXVcLseDTpNk1QwAE1B?= =?us-ascii?Q?3KUghYAy2yjduQMKkX3iSKma5MWQP39dwNbrmHLZ0OGny4i4UfUyf5uLMveL?= =?us-ascii?Q?nioKzH9U0LbOOa6zsECMGn4AL5IBA6tWgrQ4t+691WnjzvlYpxCGcx9uPcbW?= =?us-ascii?Q?4vVzv3RFjurYWCv68taTndtj6PIIU/XalfuvMNiqvBbgz4rMy3ofSdnNcCiU?= =?us-ascii?Q?uS7MyzrfIKWnCWRkRYxlbP4pVsN4M7ob4+od58E35HxKSKwridr22ge7Idoa?= =?us-ascii?Q?b2vZQKFYwe3tATVMOHptaxJRAInXyJKYfibR35pfx/XFZ3SyHSbCwbZI5KJx?= =?us-ascii?Q?reHeZGUhGyHu6pb42xcsQxgPjtrRgjME07Az/V3B+ZdItVGzZwLvp9etw/Ud?= =?us-ascii?Q?rXH1Pkgy9qBU4qEuzrA1clSOFxwXM2AOqAk7FWVrxmlsd9S9wBbclpf8shhQ?= =?us-ascii?Q?zGQKafcdVAMTXqkq7J12C/oEm9PGuPOyo3Kpo2R58mTi9Dh2EmpcsXoJ3OHV?= =?us-ascii?Q?OwwMjik1efXMRjntlcX1+v+/rnmoXh7lJED6T069P+6O/kApSEs63QDN0CA5?= =?us-ascii?Q?n8eH9jwhaMgTHTHT+LiDb6xo+cTpK7Gqfmbntq3XhKwn34FU8Z1B0r6dgP+u?= =?us-ascii?Q?GP4nAccEQmhyLDcKIvIG4IhPFAxHyUf5tLGdga0o0McBBCJdT5ZrJwDcoXbW?= =?us-ascii?Q?iWRkYZ7Cp5lXrvZu90STacfVCPDDz+IkcezlObF3tw7CayIGwKN5zXwiYxnA?= =?us-ascii?Q?1kdoB7L9vQU8JG2OWuAO6VlOHCzwgm49gPoE4ZoQusKU6gcpoRK/j8S+2b++?= =?us-ascii?Q?4Zg4EA5oBVGld59bvkI4q8Eopg/ID1xNTTC5qOOtl4z2DDuyF6mkwdVwUNfv?= =?us-ascii?Q?zvH7ZHKoRYA6nxer4kaM2R4oOVMBemFLdlqRiZ4nC+7463dIODdURLSSIfGC?= =?us-ascii?Q?7ZUJGfGuDDpHjdilqOkkrVaQKTm4lo4+mYDNhcdihrLSJeY9F09oe7p1ocM0?= =?us-ascii?Q?vSNeur/vS6wUFsMQ2j8lwyBLfbI0ynTqUd1+9refSpLcxFN6F8gGxibldWlr?= =?us-ascii?Q?zkVCQrxZjKzbjuV1AwFah/ZsB+BwQIeHQ26CONvQcUMVTI7y7CQ26GGqPpZC?= =?us-ascii?Q?EXwzc9HylC4P8dS+uFT39UuOH7f7+6lWFrKiCRHCt9VqjFLENmTZo2NDxqce?= =?us-ascii?Q?aWnkJvCz/HT2ctCNKeJJnZpO5Nz3FkZY9bqze9lJQKSyNiqWq6k4gzNb2otr?= =?us-ascii?Q?vsqFpajqBVsGkk6t7EHD/wbeWI83GvFbJ2ZXDj3h4XoipAEUvLrJndbHLRo9?= =?us-ascii?Q?q+4g/Z0hNi6nSbvD01sMNF3UUwRVKF2FTuyYQG6HNUPxZbP76FTZAMRu8Yai?= =?us-ascii?Q?NvWsDPOwT4YoQyYKYilVkMslXSx9c5BCOV1SMVbLDgP7Wx76+iIaaDMCmN0u?= =?us-ascii?Q?xD3hhNzZ9OU54DOe3GS8E3QLpqY3x0eIYq882iTyu+U5ByqUa4NxwKst4OZx?= =?us-ascii?Q?p/jkZMOOkItdlNo48Sl19+JY/lr37U0WD99L1nt0mCAWD1zAMs0sHwD5ShYT?= =?us-ascii?Q?Ey6sGg1c3UDIMVx6GqicPVqmcGGpi5f8YqVUJqOq+9oj3LPtxZUvJwtRWbvo?= =?us-ascii?Q?77bpewWMJcqL8GNMEShfedUWgJcKcsnkvoT1Uu/ljytMleb3zzyCjdNjBzn3?= =?us-ascii?Q?/ZKfnC3ySipcXPHE8meuDOldG4zJrgKWUnynC/rlqeHfBg/uvZu07JxKOppB?= =?us-ascii?Q?yNapIYiFXr+kiT+5ckz+E6qrJGh20LR7THPX0YJJ8+jEi9KbTIqN?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 70290d38-5b3f-4a24-a272-08de5b57e595 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:20.5678 (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: 1Swawd/VRqLNxxCg8zpLw1hjAPR8zf0F40ivMYvbtBdoP5xOJIZcA1Sm3LST094hV7g7aRNQDZDI2mRl4hhkeQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" The current documentation implies that pci_epc_set_bar() is only used before the host enumerates the endpoint. In practice, some Endpoint Controllers support calling pci_epc_set_bar() multiple times for the same BAR (without clearing it) in order to update inbound address translations after the host has programmed the BAR base address, which some Endpoint Functions such as vNTB already rely on. Add document text for that. Also document the expected call flow for BAR subrange mapping (pci_epf_bar.num_submap / pci_epf_bar.submap), which may require a second pci_epc_set_bar() call after the host has programmed the BAR base address. Reviewed-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- Documentation/PCI/endpoint/pci-endpoint.rst | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Documentation/PCI/endpoint/pci-endpoint.rst b/Documentation/PC= I/endpoint/pci-endpoint.rst index 0741c8cbd74e..4697377adeae 100644 --- a/Documentation/PCI/endpoint/pci-endpoint.rst +++ b/Documentation/PCI/endpoint/pci-endpoint.rst @@ -95,6 +95,30 @@ by the PCI endpoint function driver. Register space of the function driver is usually configured using this API. =20 + Some endpoint controllers also support calling pci_epc_set_bar() again + for the same BAR (without calling pci_epc_clear_bar()) to update inbound + address translations after the host has programmed the BAR base address. + Endpoint function drivers can check this capability via the + dynamic_inbound_mapping EPC feature bit. + + When pci_epf_bar.num_submap is non-zero, the endpoint function driver is + requesting BAR subrange mapping using pci_epf_bar.submap. This requires + the EPC to advertise support via the subrange_mapping EPC feature bit. + + When an EPF driver wants to make use of the inbound subrange mapping + feature, it requires that the BAR base address has been programmed by + the host during enumeration. Thus, it needs to call pci_epc_set_bar() + twice for the same BAR (requires dynamic_inbound_mapping): first with + num_submap set to zero and configuring the BAR size, then after the PCIe + link is up and the host enumerates the endpoint and programs the BAR + base address, again with num_submap set to non-zero value. + + Note that when making use of the inbound subrange mapping feature, the + EPF driver must not call pci_epc_clear_bar() between the two + pci_epc_set_bar() calls, because clearing the BAR can clear/disable the + BAR register or BAR decode on the endpoint while the host still expects + the assigned BAR address to remain valid. + * pci_epc_clear_bar() =20 The PCI endpoint function driver should use pci_epc_clear_bar() to reset --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020140.outbound.protection.outlook.com [52.101.229.140]) (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 AA347318ECE; Sat, 24 Jan 2026 14:50:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.140 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266228; cv=fail; b=F6llxcXPw+lR1dlgawBH1iZOM5wVLSwGPxwxIdM3bXTnqOEV/HpcLAOuCXmvEuweJHM3Kl4yh+VlEW/kBdCZt32aVbIbEWRAqBKBchS41sASdRpcEfp5ZZmQAN7fOYvgpC4gTAr/YXGZUc0Yc7mOVte07rWwBTcemH3OWNgiAy4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266228; c=relaxed/simple; bh=oE0GzygmUPTFKq1IihAUboVxjrIYlRAUBP/1kWoinWY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oQrQPmijxPInorbDC/u6cXYhBwn0njy28tH/F2vWDmXYeUKpk3Yl6HzcUJtDwdNQHRO6pM2V9aCHqMbt8VImGyw1fw/OV/zvMfvNfPtBEC43BrGPi2Sk53Ey5SjQkxxid1HI3IqF87ED1zLpwBOkxUtcb59AuWCCwh3QB/1zbdQ= 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=ockLjkDX; arc=fail smtp.client-ip=52.101.229.140 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="ockLjkDX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YhROoJFCNhCP6iFqpzB7MBaRQzZ7hcRQxH7oPIPWL7hDrwmHwmUv/77scWLhpdk2tIxod0x4/g5Z9yMOBFp9w9Dvq8IEn4BUjuvh+ThqIupunlsFp3K2beQs9Crbc01h2Z8qZbLcj5TeD8Jh4dxRb7A2NTQbnUqzmY/hjqzel1E/LhuSCX1kM38ofrhArl1198enz2vqX++/MJ1JL/fEJufYPjKs+8ag4wM7cyhMhjdiTIt63NySS+fcj6CnYXGwo1akbpiyqOD4h9yuJhWBIUmLarViv/I9zK93u1AMaAzh1FrZVDIf2S5rMQerSkWCase1zZyszWmXcOd79sJxsw== 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=lrFY5/aIxzIIGCoLxuYNbQbTa7W/I1AYD7rFUrK+oIc=; b=h0GMgBIQHkPwHD5okL1c4A7NbNKmRxxKuAHDkUCdOEebI9OmUbC6dtP9zubnSCDzzvl5bYJHIDAgiQD5+v0cCEPBrdJzfGt1Cxs5qXieyiHcd6MSxP8CZxj79jbL7jSURXaf5bX6bJ93XmaeR2RF1KmVgjMbGfKAiieRXp2vCX5sCTX1hjCOd8cCAx2fPEOgCIB2hdgZ8oFe8OGlJ3VLC2AB0UrkpPvFaamoZmoXZWQWpyZWkO9TZ9DluXjRAOLqqPGgGepzC+VvJRVnTGvgwczCFNvboxth8br0U7+u0MUB4NmElRR+8b+zXRUvSn0SFecf9Bi+FXHK3x5BKtc9og== 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=lrFY5/aIxzIIGCoLxuYNbQbTa7W/I1AYD7rFUrK+oIc=; b=ockLjkDXEQRjIxiOrCpb/udPTXTNKs7bgZpxNLDNiiyRXpjVaIzNYqCD21vkpzJ20KwueLTe5XHiUtoSO6Jj1CrLyd/KIODq5hQGhyhSvd3GDbO+7n+JQz8GJYubPPM68gLV+VMGu5tVZbJe/9n4DQKcNwu3mCtg/b+Fi90tFbo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:21 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:21 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 6/8] PCI: endpoint: pci-epf-test: Add BAR subrange mapping test support Date: Sat, 24 Jan 2026 23:50:10 +0900 Message-ID: <20260124145012.2794108-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0009.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:26d::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: b64b4d2d-377a-4f30-1ff4-08de5b57e622 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?oMT/+pJLiReCXJyBL3siOdd9s7IaVUed4uOgdZ4RX5KDK42bY394+LQtKzeK?= =?us-ascii?Q?Po1Atqq5TR1N5I3LWZT1Hus2iPIDmCION1uHqsYMu9nGfN8XLpgW42eP4Gl5?= =?us-ascii?Q?1QEWZrhKlz72qGl/eDRuJB/1A5ZRcLZpQy4Od1SHtEbBOb7IvWfYsppC+cem?= =?us-ascii?Q?m9OcqVa4q341UCULMX/ayFkfaAR/ZzmNgv8wOt3j0ARlNOJzkfJS3Vs7D7eU?= =?us-ascii?Q?aWTCo1RNGUNd6+Dy3wSDAuM734Bs9Ih2vcau8JRWcK9hW/a3gAqk332oUeHh?= =?us-ascii?Q?ZqNYZOf97mXzY/oCXZWT2v7O/9HPShCBz6a++aFDnemtVIfaGDbMisN7cuaC?= =?us-ascii?Q?ZMOtWopxzfARnYco+zzBJZWHhIJN0aqXQ7qMAvxocqQOPjqOIWOtFUm9tcEc?= =?us-ascii?Q?syAaazTjvtWYw9ou9CfbyOxC02inCW+jbpq5S1d+2lW7WE4F4Ok6Ozkm459t?= =?us-ascii?Q?bDsiNbsxUDMlD8dgSLLB3lbR4ALJ+l2FxgfRTB/mVc/xxhmzOCPb3V7sB0Wo?= =?us-ascii?Q?ddmr+Mee9LYTRgf/Dx17KpV573pAlkanaMaIEjER7ra25zhp6Gz2oPnXUR+I?= =?us-ascii?Q?0BmRbnfqrchOd+tjFXeo4pAbc9bnk9vSzggeaeO8njW7/Wuvu2ys1gGhHzoC?= =?us-ascii?Q?4bhr49h2shQ2OwmqKv6avOALwPM35jTidAIXa+St01m4LfpALDtbwrAUkajR?= =?us-ascii?Q?46ewJriW9ME9VEs7WqoWSVz/fMe9MdSmRhHvmWBDVX0SDXYR03Og+wiyRPEK?= =?us-ascii?Q?d8TDoN9NzWpp2aY6SEXCLNyyLXrbwz1etafSFC3u/eEtxRxZNp7yV2fLiDP2?= =?us-ascii?Q?HsaYXzqb8HO9upcPupXdY8StoPnP6RfX39tZHyz7M4gowlPO/4Siy4xol/UW?= =?us-ascii?Q?oT6Pkbnkn0dOTYoSozMPBRWbL/S4kWXX8lBPAtIa5gsUtQRMFWR4EzRwSt4n?= =?us-ascii?Q?iF2qjLbqhZwdy9d9hdQ6LidJF4NvAW38Af7zo5kYEPHnnYjx+LA6tR4YgbNr?= =?us-ascii?Q?GziNx1NwTplk2HL9LtFw499jwAbCLBtOhrI3rDdrJKI6/fQJ6VMlRNYO+SXQ?= =?us-ascii?Q?5Sbdf0gBHy8bpVgDIOMejqJQAulhVBcBk81oFEGeDNIm5n2t0lVDCU//NFuF?= =?us-ascii?Q?anzhIlxYzLO3bNAGxjPn+H4FqbqQRpYKRejWNil3LknnY2BXj9iBUXDr4ImC?= =?us-ascii?Q?9gTz5278Yph5XDNQnLjxd2WO1PB0l73sZ/g9B3CnX1zu6qDD/XVCtzyMNLsC?= =?us-ascii?Q?1guCFsqLWKvgPTSomxLv4hqxvOgU/FX9sKM2jDsdcK4SLJemnagPw+Sdmnts?= =?us-ascii?Q?tkTodKQMF0meDiWClB9WhY8DIPlXZ4PnNgDB42WEj0+j3ReHjruXB4KOEWUe?= =?us-ascii?Q?gC1RuVt6EBL2gQaImYPmCqsDt46a9kZJDCKaPWN1/VvihR3Euaxp8qJPyr7n?= =?us-ascii?Q?b9OejToZGEv3P22IJd6qj+bIL7TlhPSxvxU/rU/zXsO6FQtDuBs4h+JWCxQI?= =?us-ascii?Q?oX8dRKCfISSE6PDaLqrrj7/W51GsIXk90uEKtixR2on50KX/v5GTr6QtFFB2?= =?us-ascii?Q?w7BaDqVosCoFQIwZu0E=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xDgnR026SnbVP+GCXYBaUJn8hfCXMcSegBczi8HDQnGgxF0GoRvvmzDm65/e?= =?us-ascii?Q?+LXFmmT+vxiXKh0a3wE/Q0nlt4W+aZhye4be+qWwk84sDZruG6rgqNs2ZLHX?= =?us-ascii?Q?b2WQIPSYxLNdU+eoj+ZZg1zDlu7kQfdjOMUB/uGKQazUwdkzK7uxHAxa8deo?= =?us-ascii?Q?Mx4XZqDB5na2DUFHuQHm9nxy7TT9tS7J8S3N5CwAVc5lDiV1RiLdQ0SKthKR?= =?us-ascii?Q?wXvyMKGAvjCjNJ6lejthaS+b7/kkvwYzFopygjXLtwyavySTYWxwppg2k7bL?= =?us-ascii?Q?+Hull31V+B05IivK6Z8srU5iK5KEI2IUJcL19tI0xvYWaGAhwmDbn9ftqRyo?= =?us-ascii?Q?wvq1mHDM63Ex6VtUpgXLx4lqMZ6VYIjuZ6Bn1J4BVy03F47tDU9yysxaB3It?= =?us-ascii?Q?8SUpwiHSwJ0kfbdF/cFeWn6/sSJJPcveACN0lTTQd+l95IKdumvHNOjY8buH?= =?us-ascii?Q?0+1xsd6zVgSOkRBx/0+KdeK208tAQkFc58KmGYdu8vHif5C9SXr4LThTPvI5?= =?us-ascii?Q?gtkk516yjcMA6eNta8uHNZV9Df9OwBTE1v8CNUelYJeHKOIB+knxcG+Fl32C?= =?us-ascii?Q?89T/OcxtmMEp9iXimmGw4MKYf8fcnKeP4YCSy5eLb1+uO/FBjT7owyjEEtyJ?= =?us-ascii?Q?6fS2TKJ9QnR4PyC5yGT9VbYAbcKp9B2a/x6AdCZkKlXHC0IQx3icfbXLHmqE?= =?us-ascii?Q?C7Ladi5Q9dQkAZ6XGT50SCTP7EUbZAYL2kG4ZKDDrsm23Hy3hZqg6hy+BKF1?= =?us-ascii?Q?W9iZasTu3EhcMILMkNvNBUAxFbx9IbMZlwotcTMESeplf0Vq+x86M94jNbwk?= =?us-ascii?Q?LAoB7JC+AClC9eO4r158nVOJlbPAmDffr//6LdOiPxJ6Eo8HmXNJdfSqh6mI?= =?us-ascii?Q?fiuFPl8cvL9AnRMqsBO+GhwfM5IPu6U+2qMicvMu8+ppzgGri167jcpCAJNT?= =?us-ascii?Q?7zjh2jNHfuLilpRHl/XDCpZKfOG5LSFvOM+3RA5aOsU23vO7EjMM5kPkjFfU?= =?us-ascii?Q?yrur5YPqGXmEU2Tf9hSy7JBDFJ33gxn3JtXpeqVbaxJYqcMF6uM763HR5434?= =?us-ascii?Q?famUd413CO9/fjsPavN1v92I1Bh4DLjhzr4/KjohDc6Nyi2VRJnxDvzQga8a?= =?us-ascii?Q?xs2Gg+TfX/Nw4rTvo8Q28g2WOny0knZVhSXvZI60hICBp2HRz5pio96be9Pm?= =?us-ascii?Q?4hRwuFoih5wVcSgV8RZtYU+wyPRapouKPzVR06dakxJdEMDLBi5M2FvG60Gx?= =?us-ascii?Q?Qx2H89rkwMOmN7hdwhCmqG1iaP9JNib28WitqSrFxMU1KOxtyEIWCYAbPUtH?= =?us-ascii?Q?oPMuBbyE0zXO5nIbq2sSxHo7uEnYqddeXUai0A6mv37xcyyxyxscnulWGf2H?= =?us-ascii?Q?YyFJjmMqm6e2enxvOnMkjlciVnJhyeNS01Mr2/iFDpTwI1c5/xG9PWiNhQ2Y?= =?us-ascii?Q?LC0N6iSCNJrvtzVNrxQuo7uNDPW+9W6cYj92oMiaULn06SK9P2pmQGWp9QNH?= =?us-ascii?Q?X9XmxOEqreaIU4TCn/QZyulHv9qgozbTIgrRaiH5bvVxUHg2TpgTGYkjcU7+?= =?us-ascii?Q?ChxQg9pN4JRM1DOz8s+CKAnQPsCZeiMr/PJ2arZDOZ52QyxRDBUB/tTp1oeK?= =?us-ascii?Q?DSe850hl5Lh8ETetRhxGA7dJQ5Y5lV7c0uKLYafwUTdTgHz7oMky/7a6pT7+?= =?us-ascii?Q?l6dbl2z48hUPoeFqjZNXNAiu3YnEZ/5DPSnOQWGNvkgfyvO1qN/csLjGPTk6?= =?us-ascii?Q?Wg9Oz/f5xuJsC9r4ts/J9IHanxjClje9dEcxnjvB6MiaqVeRxTMe?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: b64b4d2d-377a-4f30-1ff4-08de5b57e622 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:21.5001 (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: F/gT6w6xaQ9IX5dXuBt3Oc3P0v3HMYMtJVW4H0IEBOTlcTfNxTyumPM99Dhnul+gNCh7Tim1Kb+MHwtDptRT/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Extend pci-epf-test so that pci_endpoint_test can exercise BAR subrange mapping end-to-end. Add BAR_SUBRANGE_SETUP/CLEAR commands that program (and tear down) a simple 2-subrange layout for a selected BAR. The endpoint deliberately permutes the physical backing regions (swap the halves) and writes a deterministic signature byte per subrange. This allows the RC to verify that the submap order is actually applied, not just that reads/writes work with an identity mapping. Advertise CAP_SUBRANGE_MAPPING only when the underlying EPC supports dynamic_inbound_mapping and subrange_mapping. Also bump the default BAR sizes (BAR0-4) to 128 KiB so that split subranges are large enough to satisfy common inbound-translation alignment constraints. E.g. for DWC EP, the default and maximum CX_ATU_MIN_REGION_SIZE is 64 kB, so 128 KiB is sufficient for DWC-based EP platforms for 2-subrange testing. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 172 +++++++++++++++++- 1 file changed, 171 insertions(+), 1 deletion(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index debd235253c5..1cc630a2ee75 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -33,6 +33,8 @@ #define COMMAND_COPY BIT(5) #define COMMAND_ENABLE_DOORBELL BIT(6) #define COMMAND_DISABLE_DOORBELL BIT(7) +#define COMMAND_BAR_SUBRANGE_SETUP BIT(8) +#define COMMAND_BAR_SUBRANGE_CLEAR BIT(9) =20 #define STATUS_READ_SUCCESS BIT(0) #define STATUS_READ_FAIL BIT(1) @@ -48,6 +50,10 @@ #define STATUS_DOORBELL_ENABLE_FAIL BIT(11) #define STATUS_DOORBELL_DISABLE_SUCCESS BIT(12) #define STATUS_DOORBELL_DISABLE_FAIL BIT(13) +#define STATUS_BAR_SUBRANGE_SETUP_SUCCESS BIT(14) +#define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15) +#define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16) +#define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) =20 #define FLAG_USE_DMA BIT(0) =20 @@ -57,6 +63,9 @@ #define CAP_MSI BIT(1) #define CAP_MSIX BIT(2) #define CAP_INTX BIT(3) +#define CAP_SUBRANGE_MAPPING BIT(4) + +#define PCI_EPF_TEST_BAR_SUBRANGE_NSUB 2 =20 static struct workqueue_struct *kpcitest_workqueue; =20 @@ -102,7 +111,7 @@ static struct pci_epf_header test_header =3D { .interrupt_pin =3D PCI_INTERRUPT_INTA, }; =20 -static size_t bar_size[] =3D { 512, 512, 1024, 16384, 131072, 1048576 }; +static size_t bar_size[] =3D { 131072, 131072, 131072, 131072, 131072, 104= 8576 }; =20 static void pci_epf_test_dma_callback(void *param) { @@ -806,6 +815,155 @@ static void pci_epf_test_disable_doorbell(struct pci_= epf_test *epf_test, reg->status =3D cpu_to_le32(status); } =20 +static u8 pci_epf_test_subrange_sig_byte(enum pci_barno barno, + unsigned int subno) +{ + return 0x50 + (barno * 8) + subno; +} + +static void pci_epf_test_bar_subrange_setup(struct pci_epf_test *epf_test, + struct pci_epf_test_reg *reg) +{ + struct pci_epf_bar_submap *submap, *old_submap; + struct pci_epf *epf =3D epf_test->epf; + struct pci_epc *epc =3D epf->epc; + struct pci_epf_bar *bar; + unsigned int nsub =3D PCI_EPF_TEST_BAR_SUBRANGE_NSUB, old_nsub; + /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */ + enum pci_barno barno =3D le32_to_cpu(reg->size); + u32 status =3D le32_to_cpu(reg->status); + unsigned int i, phys_idx; + size_t sub_size; + u8 *addr; + int ret; + + if (barno >=3D PCI_STD_NUM_BARS) { + dev_err(&epf->dev, "Invalid barno: %d\n", barno); + goto err; + } + + /* Host side should've avoided test_reg_bar, this is a safeguard. */ + if (barno =3D=3D epf_test->test_reg_bar) { + dev_err(&epf->dev, "test_reg_bar cannot be used for subrange test\n"); + goto err; + } + + if (!epf_test->epc_features->dynamic_inbound_mapping || + !epf_test->epc_features->subrange_mapping) { + dev_err(&epf->dev, "epc driver does not support subrange mapping\n"); + goto err; + } + + bar =3D &epf->bar[barno]; + if (!bar->size || !bar->addr) { + dev_err(&epf->dev, "bar size/addr (%zu/%p) is invalid\n", + bar->size, bar->addr); + goto err; + } + + if (bar->size % nsub) { + dev_err(&epf->dev, "BAR size %zu is not divisible by %u\n", + bar->size, nsub); + goto err; + } + + sub_size =3D bar->size / nsub; + + submap =3D kcalloc(nsub, sizeof(*submap), GFP_KERNEL); + if (!submap) + goto err; + + for (i =3D 0; i < nsub; i++) { + /* Swap the two halves so RC can verify ordering. */ + phys_idx =3D i ^ 1; + submap[i].phys_addr =3D bar->phys_addr + (phys_idx * sub_size); + submap[i].size =3D sub_size; + } + + old_submap =3D bar->submap; + old_nsub =3D bar->num_submap; + + bar->submap =3D submap; + bar->num_submap =3D nsub; + + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar); + if (ret) { + dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret); + bar->submap =3D old_submap; + bar->num_submap =3D old_nsub; + kfree(submap); + goto err; + } + kfree(old_submap); + + /* + * Fill deterministic signatures into the physical regions that + * each BAR subrange maps to. RC verifies these to ensure the + * submap order is really applied. + */ + addr =3D (u8 *)bar->addr; + for (i =3D 0; i < nsub; i++) { + phys_idx =3D i ^ 1; + memset(addr + (phys_idx * sub_size), + pci_epf_test_subrange_sig_byte(barno, i), + sub_size); + } + + status |=3D STATUS_BAR_SUBRANGE_SETUP_SUCCESS; + reg->status =3D cpu_to_le32(status); + return; + +err: + status |=3D STATUS_BAR_SUBRANGE_SETUP_FAIL; + reg->status =3D cpu_to_le32(status); +} + +static void pci_epf_test_bar_subrange_clear(struct pci_epf_test *epf_test, + struct pci_epf_test_reg *reg) +{ + struct pci_epf *epf =3D epf_test->epf; + struct pci_epf_bar_submap *submap; + struct pci_epc *epc =3D epf->epc; + /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */ + enum pci_barno barno =3D le32_to_cpu(reg->size); + u32 status =3D le32_to_cpu(reg->status); + struct pci_epf_bar *bar; + unsigned int nsub; + int ret; + + if (barno >=3D PCI_STD_NUM_BARS) { + dev_err(&epf->dev, "Invalid barno: %d\n", barno); + goto err; + } + + bar =3D &epf->bar[barno]; + submap =3D bar->submap; + nsub =3D bar->num_submap; + + if (!submap || !nsub) + goto err; + + bar->submap =3D NULL; + bar->num_submap =3D 0; + + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar); + if (ret) { + bar->submap =3D submap; + bar->num_submap =3D nsub; + dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret); + goto err; + } + kfree(submap); + + status |=3D STATUS_BAR_SUBRANGE_CLEAR_SUCCESS; + reg->status =3D cpu_to_le32(status); + return; + +err: + status |=3D STATUS_BAR_SUBRANGE_CLEAR_FAIL; + reg->status =3D cpu_to_le32(status); +} + static void pci_epf_test_cmd_handler(struct work_struct *work) { u32 command; @@ -861,6 +1019,14 @@ static void pci_epf_test_cmd_handler(struct work_stru= ct *work) pci_epf_test_disable_doorbell(epf_test, reg); pci_epf_test_raise_irq(epf_test, reg); break; + case COMMAND_BAR_SUBRANGE_SETUP: + pci_epf_test_bar_subrange_setup(epf_test, reg); + pci_epf_test_raise_irq(epf_test, reg); + break; + case COMMAND_BAR_SUBRANGE_CLEAR: + pci_epf_test_bar_subrange_clear(epf_test, reg); + pci_epf_test_raise_irq(epf_test, reg); + break; default: dev_err(dev, "Invalid command 0x%x\n", command); break; @@ -933,6 +1099,10 @@ static void pci_epf_test_set_capabilities(struct pci_= epf *epf) if (epf_test->epc_features->intx_capable) caps |=3D CAP_INTX; =20 + if (epf_test->epc_features->dynamic_inbound_mapping && + epf_test->epc_features->subrange_mapping) + caps |=3D CAP_SUBRANGE_MAPPING; + reg->caps =3D cpu_to_le32(caps); } =20 --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020114.outbound.protection.outlook.com [52.101.228.114]) (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 3E80B325701; Sat, 24 Jan 2026 14:50:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266230; cv=fail; b=UqqvX91R3dS1/LORjtIRp41J54+m5fl0i7ZJKjxPB8MjRAFEOuHKx/y3RRylVxr6fGpF9Sq2OaFbrY479GvCPtQEb+sg5K2OAIgu602iunF96+lamLpbFrX7r0g9cBe1YnJVqkC1FNBpRPcfUd/5k+xkQ3koQ2GFOSm/wxQUUwU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266230; c=relaxed/simple; bh=h6PPy6BfAuEwUCuoHcXy5D4YzTOFKvaUymLvRMaWGVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=mTPPWBoW8cSSC0pORMOuE1pHkTG6cXpjrO0TsxW5Gk5t++jof68+fNiz6VFIT/Yb4lo270qIBwwfWzOIU0eGrzDo5Dzj6OL5W44tcmYAOTon0EUVpjICo4r3iLjZyCPnNjnlYmpwx9yXyIAFMXKfTqKqbWD5gK18QpHAEVZBKN4= 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=LrZR7ms8; arc=fail smtp.client-ip=52.101.228.114 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="LrZR7ms8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wPzsodHMVbNnGzekfoGi+VBmGDmuz/o6b+/RlcIBTnxpPoja4EIcLtvSzRrW1Gwk8vpNyjlyrQfAB58unPApee65boSAoDnAWVuV33hk3VFjFPir1x825IGC6HQxq+pAMEhab1RpVZb1Tmlj8vB8ngFPw+a1MpwKgJS55stmyonKup85asjR2W4B0Gq7znP+MHH7yooDqKirj5yBrpqOO52GMepSH2v5ed9+iaCm63stj/Rt/TQSg+2IvFQr+mMXh5wowox991ftr5lBAKJHY3CASyxF+Z1BGEPamcVBZBO4ow6ff4DF0fAyC7V1Lc3NMUvEh51iCvh5dW/b2iKhaQ== 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=cwlnVdKcfkr9c7S4oJTSjL+q1DJaft4DhvY6E8TLbBs=; b=CcpJOwLPnyXjfml/tDARIN8jTHMVPolqXKmZ27RteocKvM8Y8fauBHv1hegxyi/jmr0hmLZfCFtlGmoiQaMQouE8nkeTNPM6juFz6rGhdEZQYAgTEiGO+hK3m10g5cr+ypq9PwTcznISaxLb40897CR/FgxH6eMjNNg7n1y3O9VRsWvw6dNNNtyq8NiaMHjN/QRQNPU7HmnSusSk2GXV0q1PCNoms00G2AjiIXjsKQuhWGG9737hmsYP0cxa6eTdf0iyq2vNWdg258QocUJGeBW2wD3wlrpyURBcg4/u1xYqzZK8bMnmkIEETMLdkPtDB6nAGhwi++i25pcss/fTmA== 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=cwlnVdKcfkr9c7S4oJTSjL+q1DJaft4DhvY6E8TLbBs=; b=LrZR7ms8Xz+MBvOEvtBJyz9Q99aJNzdW9x/AEuMF3DrPMyr4E4dq7JjTcGmAFh/WYFDl4hp1fFMz2xg8mJgD/PdLgBkXLrgl6NMSR2pTQkAq6KiG3ez8v342onp+ceJeAXx0Us53qMC/n6VaXwvotn/I15IswifWazgI+CfhNe0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:22 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:22 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 7/8] misc: pci_endpoint_test: Add BAR subrange mapping test case Date: Sat, 24 Jan 2026 23:50:11 +0900 Message-ID: <20260124145012.2794108-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0025.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: e04e3b49-5ba9-4f49-fed6-08de5b57e69f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v5smrveKN1YYeM1rL13lAC1QscakRpJMZokCvB+kCFIO0adh2ddMNasd9kcQ?= =?us-ascii?Q?GscSyUURuQt9cjzdtbtiOgBsnD7H3RPvoq04hauiDDvEIGPDYcgMAqqTTrTg?= =?us-ascii?Q?7pvXFaSIwH28FeXxdt7WUvT6oaGYC3QyuI2SarZp3w0L+bNeRF6+cJijE1Nq?= =?us-ascii?Q?NR8W3DE/nmbEIlwtQntX/nqndwCosZoYSEIPJ+Lq3fSQ/UQzLF62eHCb1eOo?= =?us-ascii?Q?gdak0rsdr18IGj6PSJpKPDhSs2R6D1kMjzDzolnSY7dypi/n6gwTE/Wqb0lD?= =?us-ascii?Q?CBT2Uy2O/khqrJRU6njmcNkqRytl2BDV1XFZtrHHjEm9dqvP1om2yHfI0Pp3?= =?us-ascii?Q?exUx5WHk2sy6Mp/GWHTkCBA+F8JHdzj4UA4EvcqqRn3xxGcdjq46qC7/Kgf2?= =?us-ascii?Q?FoeZUeCne3XEiTgHWPfT5jtMlB23pb9MASekH66dUIKU0j8l9gHbKTVEUsA1?= =?us-ascii?Q?n6QQh2qGgnhB3r+H9kb/WZFt10s7bq6lqt7SeLVMIu9IXZzuzWaneRcbMH7Z?= =?us-ascii?Q?4fQfVUm4XqQKFwYPUM4s7w3RZhSjCOC/GjJCcpzOjX3VAns7ZQUeC0BCDkEZ?= =?us-ascii?Q?lmt8zSc3oHawWHlRbiDI6HR29OsnA1lNhnCEltCNnIiZatwI5FQ+uEkc4RyP?= =?us-ascii?Q?LSSwocPht83EN4rpOnUWFaSYiRYXaQ+tJ7zDGoMH70oMotOfQh6gep6kpEUT?= =?us-ascii?Q?lhD2Tu5iFp2Dm5y34j8Xdt4jn0kX9ts1IL7JvTy0ioydM/rudGQ+weOk7gX2?= =?us-ascii?Q?iPdwdJpsQi5A24BFUA7/42/PiJxD6jDNhO/aCBtfz+END1ViBZsOea72wunI?= =?us-ascii?Q?/jv9UbqQNc4MjxO6MEh//PJA6xBSnNU+TehM5x7FVMgq/JMjwx5ieHsMR0Kr?= =?us-ascii?Q?hvgp+QU1LzAudlrduvmd1kLB7SBhHlPbnMqaRYBsu5g/rb+hV1bN9mA3sHau?= =?us-ascii?Q?8ewAi/YyH6C70GTrmKESBRXv+f9iMHcnVKu/rzRIawlTtDcb5hrK1iC4HaVJ?= =?us-ascii?Q?qKECFe7vNx/GsFU/hMPa/edY0iA+Sox0gnYSDwQ2ytYLG+MlJA5j07HoVvb5?= =?us-ascii?Q?GUJ61Q+CxGsXs9MgH9+mAtdTvcUf78g6kxDrWAdMIvtgn2waMrYj9viJx/TK?= =?us-ascii?Q?p4qcVQPJixNtPm7SMOKh84RrijTCNMh7URXBeYUZuzlJy+GDHb1ZICX65EGn?= =?us-ascii?Q?hpljeEN4c3ON8DoyiZmVReh/uyS26h/O4pFEgN9lZSdoMiC3IIe68VA8TH3S?= =?us-ascii?Q?c7AUVL7d7ELQEslK77aCFoH48Fma6r3rJRWyZMS/YaLTJCPv16LutSPdjCLh?= =?us-ascii?Q?g65HoaMy30NLL4yS+bHKC/44SWTglFFTABzobLGhfbjRRMhafGbLmtxUjUys?= =?us-ascii?Q?rHhoMzTmSQ0eLDlzdql9gPGBLeA6zDA5bKwfMWpZHxzDydUYdffXMuGHjlUI?= =?us-ascii?Q?TXTF+ltlWOUGnnbCMsveL6+ICNDfelbbo5kN9uN/4CDbLst1N+d9NngZAdPR?= =?us-ascii?Q?k47LjLq95inTH1e6WTc685atEne7eVyUkFxoWu8+/eLW09LOXl0dg2kCjt8N?= =?us-ascii?Q?nWNAD8GRuG78OPt+f2w=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VTTRKBIZBGf2iO1nFUXN2Znxq3TyNTl0poCjNq+JZluL/fcIKk5JLB+dU2Ni?= =?us-ascii?Q?cKDeSr7GBiHLOl1pHhO1cm0ZR6nhKsBBdTNpGiIzLo1ipqrkelO9VgHsaV/s?= =?us-ascii?Q?Rtn2tAmwxOwLYf8SOPni7BfW/BBpI3KhPpnDTMxTYRdKAStAZOiz2TlorzpR?= =?us-ascii?Q?DYxgYQijF4y+JblPgsaXSfTh23lcy9RefZ/BUQykfKNUWDfUg9IWVRsE76Vi?= =?us-ascii?Q?ET/CFgxJXtIi4apih4AiZuWKc9ilwnMnHNWFHsSD7N2z/1QnfLDN0cYqmemb?= =?us-ascii?Q?FTR9OELUZ3Yx1XDBk1MyXZ2D1E6uqZ5n7ZqoXwPQM5pQ72G9QD5Fcl3g5tvX?= =?us-ascii?Q?QS0zmgqTKXLWO+79S2Ykt4mrP73T8571ZsaFn/wInfJF743IN47VMQO59Yzq?= =?us-ascii?Q?sK1FjevSgvT5DNskmZJvGOZX6EDBe00+pytOiMByHICpAEyeilDOAadw9uBN?= =?us-ascii?Q?FkUQp1xq8+cF9DhPpforXrEH+FzbZem8kSjsQQ2XAtNnNzZWthYS42lNg+dS?= =?us-ascii?Q?Tm8Po/J+pUldYJ8fnJjxCMNEAuwkzD4WIHfvL77mpy7jL6+zxq6dYzaUi4vx?= =?us-ascii?Q?2lsRgDN2rkaBkgs61FHJkU1VX7dpEGyK8wtYH8RK0ISB3CgwhXaoNWtkZau8?= =?us-ascii?Q?JxsiCKGdEkGa79IFfAwqWfHC7ZNTeapCRvj0WDUTxalCBMUn5SLQM25qbK1K?= =?us-ascii?Q?vu8mydss22jMrgfjZFBjLP3Er0NAe9opa33fG7/3zDMYO/cQn63IxLQOnQlJ?= =?us-ascii?Q?1F8P0WyUT921WPta9jWMu8zFfqpCNcJMFxm3dv9ypvHk1Qfuu5zTSapNGu3k?= =?us-ascii?Q?KiDa9jhCj3LmGBnd6ogmqMyrBptaCGkokooxZtvRdJVPx+R6hjQwVdSIMH2W?= =?us-ascii?Q?LIARzonKdo5v8Qh9nVIlo8bpQAu4/K28WcU/kYh2EgZpyIOiefBcAINxF7Ga?= =?us-ascii?Q?0Gx243lQAGL1R18j2bMBZf9FfpJjo4DD+hngOv06qZbn2sOfKc4QYN1ilVhP?= =?us-ascii?Q?rwPtjdrZ3pJfp6PiVKfZ6xmv6ucoQgspp7XDHDBxzKN1OM7WHS76BzB3r3Md?= =?us-ascii?Q?/SLNyK1H4EDPTWs7ucaLeQtYf46nR7jkzv9ziN2kF8J3AkqfEfns0PC//MJu?= =?us-ascii?Q?Y/Yj4m1nGeLFccK1Cf1lp3IbtRgYGzN7MNKFgU795H3ZtHQfoOGtZp6kMbLK?= =?us-ascii?Q?8txPaCDvq8CEefReGE4RFQ9yjMGyLlmF19RT/rRWtotpqtBkiBoBBUQPQAk+?= =?us-ascii?Q?izfDf4tP+rztA9zTjjBTd+Ryt500TwJdNa435k6kcKHLgusN/3GsjnTt+Lul?= =?us-ascii?Q?ZGlTlMOUojG+c76JXpyuVMuhti5H6gdo8LY1dyiTBRY7wStbbdw3pvDai8rB?= =?us-ascii?Q?Mow7bTbAzL6/9ldNhgyFvw6Vz3iQX8ux37KJykcOhrdx6iszvVMpR9tM1UjW?= =?us-ascii?Q?pVU5b4WXTHzHHRGnY7fUz7kZSFncIaQERcQ3UhSux4jRjCsrTUA1JUXSKsEJ?= =?us-ascii?Q?EBGi8Xl98XnrM4k4OU/60plyhdOPOPSGwQn2FgPBZeKZDKmUFmDbyOR/UHBf?= =?us-ascii?Q?ts6444jCaOXYRyBwWZ6iWdd2O7mxi7Bv8A6LlqQQ+ldooK98ymcj6a8tI1BI?= =?us-ascii?Q?QHh7vz69qaPQ/BZ7MnviDcOg9eqc61rElfakp+J+CEelY4Io73gBxcZNVnGk?= =?us-ascii?Q?6Z2YgU3T6DXzC21I5pvoPteZOwBLZD0pHEI/tMoCcLPSorTxhIDzj9dgDKyn?= =?us-ascii?Q?RDGcAb9afvrHXLd6qdX9OQXRImW3fsF01T0BUwv5/ePfUT0j77Ta?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e04e3b49-5ba9-4f49-fed6-08de5b57e69f X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:22.3201 (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: 9AFuoSA4HsZaImMwkf6WCA8udOOHG2J0IxGr/2odHlQhqV5/9ZjIfX0nEx+mgXzX5eZh6Sso4P4R011YpduXvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Add a new PCITEST_BAR_SUBRANGE ioctl to exercise EPC BAR subrange mapping end-to-end. The test programs a simple 2-subrange layout on the endpoint (via pci-epf-test) and verifies that: - the endpoint-provided per-subrange signature bytes are observed at the expected PCIe BAR offsets, and - writes to each subrange are routed to the correct backing region (i.e. the submap order is applied rather than accidentally working due to an identity mapping). Return -EOPNOTSUPP when the endpoint does not advertise subrange mapping, -ENODATA when the BAR is disabled, and -EBUSY when the BAR is reserved for the test register space. Signed-off-by: Koichiro Den --- drivers/misc/pci_endpoint_test.c | 203 ++++++++++++++++++++++++++++++- include/uapi/linux/pcitest.h | 1 + 2 files changed, 203 insertions(+), 1 deletion(-) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_t= est.c index 1c0fd185114f..74ab5b5b9011 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -39,6 +39,8 @@ #define COMMAND_COPY BIT(5) #define COMMAND_ENABLE_DOORBELL BIT(6) #define COMMAND_DISABLE_DOORBELL BIT(7) +#define COMMAND_BAR_SUBRANGE_SETUP BIT(8) +#define COMMAND_BAR_SUBRANGE_CLEAR BIT(9) =20 #define PCI_ENDPOINT_TEST_STATUS 0x8 #define STATUS_READ_SUCCESS BIT(0) @@ -55,6 +57,10 @@ #define STATUS_DOORBELL_ENABLE_FAIL BIT(11) #define STATUS_DOORBELL_DISABLE_SUCCESS BIT(12) #define STATUS_DOORBELL_DISABLE_FAIL BIT(13) +#define STATUS_BAR_SUBRANGE_SETUP_SUCCESS BIT(14) +#define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15) +#define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16) +#define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) =20 #define PCI_ENDPOINT_TEST_LOWER_SRC_ADDR 0x0c #define PCI_ENDPOINT_TEST_UPPER_SRC_ADDR 0x10 @@ -77,6 +83,7 @@ #define CAP_MSI BIT(1) #define CAP_MSIX BIT(2) #define CAP_INTX BIT(3) +#define CAP_SUBRANGE_MAPPING BIT(4) =20 #define PCI_ENDPOINT_TEST_DB_BAR 0x34 #define PCI_ENDPOINT_TEST_DB_OFFSET 0x38 @@ -100,6 +107,8 @@ =20 #define PCI_DEVICE_ID_ROCKCHIP_RK3588 0x3588 =20 +#define PCI_ENDPOINT_TEST_BAR_SUBRANGE_NSUB 2 + static DEFINE_IDA(pci_endpoint_test_ida); =20 #define to_endpoint_test(priv) container_of((priv), struct pci_endpoint_te= st, \ @@ -414,6 +423,193 @@ static int pci_endpoint_test_bars(struct pci_endpoint= _test *test) return 0; } =20 +static u8 pci_endpoint_test_subrange_sig_byte(enum pci_barno barno, + unsigned int subno) +{ + return 0x50 + (barno * 8) + subno; +} + +static u8 pci_endpoint_test_subrange_test_byte(enum pci_barno barno, + unsigned int subno) +{ + return 0xa0 + (barno * 8) + subno; +} + +static int pci_endpoint_test_bar_subrange_cmd(struct pci_endpoint_test *te= st, + enum pci_barno barno, u32 command, + u32 ok_bit, u32 fail_bit) +{ + struct pci_dev *pdev =3D test->pdev; + struct device *dev =3D &pdev->dev; + int irq_type =3D test->irq_type; + u32 status; + + if (irq_type < PCITEST_IRQ_TYPE_INTX || + irq_type > PCITEST_IRQ_TYPE_MSIX) { + dev_err(dev, "Invalid IRQ type\n"); + return -EINVAL; + } + + reinit_completion(&test->irq_raised); + + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_STATUS, 0); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); + /* Reuse SIZE as a command parameter: bar number. */ + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, barno); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, command); + + if (!wait_for_completion_timeout(&test->irq_raised, + msecs_to_jiffies(1000))) + return -ETIMEDOUT; + + status =3D pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); + if (status & fail_bit) + return -EIO; + + if (!(status & ok_bit)) + return -EIO; + + return 0; +} + +static int pci_endpoint_test_bar_subrange_setup(struct pci_endpoint_test *= test, + enum pci_barno barno) +{ + return pci_endpoint_test_bar_subrange_cmd(test, barno, + COMMAND_BAR_SUBRANGE_SETUP, + STATUS_BAR_SUBRANGE_SETUP_SUCCESS, + STATUS_BAR_SUBRANGE_SETUP_FAIL); +} + +static int pci_endpoint_test_bar_subrange_clear(struct pci_endpoint_test *= test, + enum pci_barno barno) +{ + return pci_endpoint_test_bar_subrange_cmd(test, barno, + COMMAND_BAR_SUBRANGE_CLEAR, + STATUS_BAR_SUBRANGE_CLEAR_SUCCESS, + STATUS_BAR_SUBRANGE_CLEAR_FAIL); +} + +static int pci_endpoint_test_bar_subrange(struct pci_endpoint_test *test, + enum pci_barno barno) +{ + u32 nsub =3D PCI_ENDPOINT_TEST_BAR_SUBRANGE_NSUB; + struct device *dev =3D &test->pdev->dev; + size_t sub_size, buf_size; + resource_size_t bar_size; + void __iomem *bar_addr; + void *read_buf =3D NULL; + int ret, clear_ret; + size_t off, chunk; + u32 i, exp, val; + u8 pattern; + + if (!(test->ep_caps & CAP_SUBRANGE_MAPPING)) + return -EOPNOTSUPP; + + /* + * The test register BAR is not safe to reprogram and write/read + * over its full size. BAR_TEST already special-cases it to a tiny + * range. For subrange mapping tests, let's simply skip it. + */ + if (barno =3D=3D test->test_reg_bar) + return -EBUSY; + + bar_size =3D pci_resource_len(test->pdev, barno); + if (!bar_size) + return -ENODATA; + + bar_addr =3D test->bar[barno]; + if (!bar_addr) + return -ENOMEM; + + ret =3D pci_endpoint_test_bar_subrange_setup(test, barno); + if (ret) + return ret; + + if (bar_size % nsub || bar_size / nsub > SIZE_MAX) { + ret =3D -EINVAL; + goto out_clear; + } + + sub_size =3D bar_size / nsub; + if (sub_size < sizeof(u32)) { + ret =3D -ENOSPC; + goto out_clear; + } + + /* Limit the temporary buffer size */ + buf_size =3D min_t(size_t, sub_size, SZ_1M); + + read_buf =3D kmalloc(buf_size, GFP_KERNEL); + if (!read_buf) { + ret =3D -ENOMEM; + goto out_clear; + } + + /* + * Step 1: verify EP-provided signature per subrange. This detects + * whether the EP actually applied the submap order. + */ + for (i =3D 0; i < nsub; i++) { + exp =3D (u32)pci_endpoint_test_subrange_sig_byte(barno, i) * + 0x01010101U; + val =3D ioread32(bar_addr + (i * sub_size)); + if (val !=3D exp) { + dev_err(dev, + "BAR%d subrange%u signature mismatch @%#zx: exp %#08x got %#08x\n", + barno, i, (size_t)i * sub_size, exp, val); + ret =3D -EIO; + goto out_clear; + } + val =3D ioread32(bar_addr + (i * sub_size) + sub_size - sizeof(u32)); + if (val !=3D exp) { + dev_err(dev, + "BAR%d subrange%u signature mismatch @%#zx: exp %#08x got %#08x\n", + barno, i, + ((size_t)i * sub_size) + sub_size - sizeof(u32), + exp, val); + ret =3D -EIO; + goto out_clear; + } + } + + /* Step 2: write unique pattern per subrange (write all first). */ + for (i =3D 0; i < nsub; i++) { + pattern =3D pci_endpoint_test_subrange_test_byte(barno, i); + memset_io(bar_addr + (i * sub_size), pattern, sub_size); + } + + /* Step 3: read back and verify (read all after all writes). */ + for (i =3D 0; i < nsub; i++) { + pattern =3D pci_endpoint_test_subrange_test_byte(barno, i); + for (off =3D 0; off < sub_size; off +=3D chunk) { + void *bad; + + chunk =3D min_t(size_t, buf_size, sub_size - off); + memcpy_fromio(read_buf, bar_addr + (i * sub_size) + off, + chunk); + bad =3D memchr_inv(read_buf, pattern, chunk); + if (bad) { + size_t bad_off =3D (u8 *)bad - (u8 *)read_buf; + + dev_err(dev, + "BAR%d subrange%u data mismatch @%#zx (pattern %#02x)\n", + barno, i, (size_t)i * sub_size + off + bad_off, + pattern); + ret =3D -EIO; + goto out_clear; + } + } + } + +out_clear: + kfree(read_buf); + clear_ret =3D pci_endpoint_test_bar_subrange_clear(test, barno); + return ret ?: clear_ret; +} + static int pci_endpoint_test_intx_irq(struct pci_endpoint_test *test) { u32 val; @@ -936,12 +1132,17 @@ static long pci_endpoint_test_ioctl(struct file *fil= e, unsigned int cmd, =20 switch (cmd) { case PCITEST_BAR: + case PCITEST_BAR_SUBRANGE: bar =3D arg; if (bar <=3D NO_BAR || bar > BAR_5) goto ret; if (is_am654_pci_dev(pdev) && bar =3D=3D BAR_0) goto ret; - ret =3D pci_endpoint_test_bar(test, bar); + + if (cmd =3D=3D PCITEST_BAR) + ret =3D pci_endpoint_test_bar(test, bar); + else + ret =3D pci_endpoint_test_bar_subrange(test, bar); break; case PCITEST_BARS: ret =3D pci_endpoint_test_bars(test); diff --git a/include/uapi/linux/pcitest.h b/include/uapi/linux/pcitest.h index d6023a45a9d0..710f8842223f 100644 --- a/include/uapi/linux/pcitest.h +++ b/include/uapi/linux/pcitest.h @@ -22,6 +22,7 @@ #define PCITEST_GET_IRQTYPE _IO('P', 0x9) #define PCITEST_BARS _IO('P', 0xa) #define PCITEST_DOORBELL _IO('P', 0xb) +#define PCITEST_BAR_SUBRANGE _IO('P', 0xc) #define PCITEST_CLEAR_IRQ _IO('P', 0x10) =20 #define PCITEST_IRQ_TYPE_UNDEFINED -1 --=20 2.51.0 From nobody Sat Feb 7 07:30:41 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020114.outbound.protection.outlook.com [52.101.228.114]) (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 B9A21314D0B; Sat, 24 Jan 2026 14:50:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266232; cv=fail; b=TkVJFhAknXZQbOGuHGrnaY+vv6Oery7a0XjS9dHqfxN8Xdvme9zIhTdmZj3l6ox2lvO5Gba+jj2MwYYHxfPj1HanyWRRKlhPV7yRqgs3L2ejH09qBEyAAScR/tSfXQzrs6P8iVh1t8guv374MFidRznhxjjyNE73RcaV/WhlHmQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769266232; c=relaxed/simple; bh=sussW5u4SZhCIEk/qmkz2rNLo1gsXnrnHuSC68IQ9J4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=E2McH360g6d6RfGkLLKJj1QNw4hagEXBr9tS4TTys5zgAYjY5Qv+SmIVmsZ+puvMKQYJ+sybtX0gGr/ss/jy11XkpNVQYEDPQ8jgfm0zG+uGGBFE20Lvn0mF1rea3IVb6QauakyX3FGB5vTlQFitbRPjm6CqSK460giH7m27jRo= 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=r19aWuLI; arc=fail smtp.client-ip=52.101.228.114 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="r19aWuLI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KsN8TxlnU69cD/aqhHAeQye35/ZXLhael4e5Ep78TyGFKx13HhEX0nh8e4xAPr0xfO0jOjReqpDsk8H35bRcmL3KJx3cxaO1CWZsMNZYHtx9CwgAFiJujLbcE8f1V9+sm+TcWo9zCNtuansu8TDM0uFOd7hZHZzXyut8nLXD56x1zI2DvjK9RxciPHfzhangtEdzuN5rnokntqiC+egYuHV8hG0uihGkYd9Olx/1cEVXoa7Jw6wSLILzefIrUuSnVfr2ClH1ITF63UZLOUEWlaewX1b9rh/nzAWS+zl+z2o5NATyTKdE/92gRw53BT0TBN2gZ6r81GuNg5i4J+43Ww== 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=uqv5b0rVdZWl6jWcBfaeDRjqb8MGukLgkiwYCtOwdTg=; b=DjLGqhwwgRcRfqNaDbvSymLnt8f1mBgYFUCQ+P9lAfgV0O/5Pt4y3W5Irn7rH1TNR1/DEDBGbOc1OOXpTWRhbw6sesv3OhGZ+Rij2Fv5IOwPoDaMF8TG5pNxXvfKtKbw4LyHzinzNtvuWC2FLr6xgBpJDk8Kz3Z1J6HCFthCwaJ0SVGg2p5bDkyaEDcFCxy0/Y/4AgHuvr8fbe2sC6QT9joyLrdkJSyYepUiawKuR9SU8s5uHti6pSrrM1w78NbbCR3jnjWgkkCSnmURD62g5vXtyNrWvTkHQyIbPAY26h1oWgukd3TULw1jruX9y/I7w7JDBRpxdRAkfVAbLDNSNw== 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=uqv5b0rVdZWl6jWcBfaeDRjqb8MGukLgkiwYCtOwdTg=; b=r19aWuLIzV/tn7R3YG2/357ivXX0mFbenCWDi3j88ckgStKVpelWcZfpydlg+RGgY+vnJjhD+XIQluTgeTdubQtWRSD9NNdrYo6tO8wS4/IFqXlhpnvTjoLgn7OiqCai+iNDKsWpbPUrawp29mIhFut40Jkn1N+0U+ijKGuXwCo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TYYP286MB4692.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:19c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.11; Sat, 24 Jan 2026 14:50:23 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9542.010; Sat, 24 Jan 2026 14:50:23 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, cassel@kernel.org, Frank.Li@nxp.com Cc: vigneshr@ti.com, s-vadapalli@ti.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, minghuan.Lian@nxp.com, mingkai.hu@nxp.com, roy.zang@nxp.com, jesper.nilsson@axis.com, heiko@sntech.de, srikanth.thokala@intel.com, marek.vasut+renesas@gmail.com, yoshihiro.shimoda.uh@renesas.com, geert+renesas@glider.be, magnus.damm@gmail.com, christian.bruel@foss.st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, thierry.reding@gmail.com, jonathanh@nvidia.com, hayashi.kunihiko@socionext.com, mhiramat@kernel.org, kishon@kernel.org, jirislaby@kernel.org, rongqianfeng@vivo.com, 18255117159@163.com, shawn.lin@rock-chips.com, nicolas.frattaroli@collabora.com, linux.amoon@gmail.com, vidyas@nvidia.com, shuah@kernel.org, linux-omap@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@axis.com, linux-rockchip@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-tegra@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v10 8/8] selftests: pci_endpoint: Add BAR subrange mapping test case Date: Sat, 24 Jan 2026 23:50:12 +0900 Message-ID: <20260124145012.2794108-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260124145012.2794108-1-den@valinux.co.jp> References: <20260124145012.2794108-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0025.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) 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: TY7P286MB7722:EE_|TYYP286MB4692:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e4416be-1f8d-4d82-b0f2-08de5b57e710 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?D/9mAJI4CnQC5Gq25UmNk5YJBIodjoH9QEpSGpABl159m2FfHi+2aE8mdp11?= =?us-ascii?Q?hiqMA1Z8MkBq6VH5QkcBbd3+B0s0UgUkY9qM4P8cwEeZyJHabTV0XLia4/EY?= =?us-ascii?Q?ORR4u06IEX1Nom298JTVL+zzn5VjdoZQgokH3UGGED6+LmPTCkSuf+NTEHXg?= =?us-ascii?Q?VTKKyt1t1roU93HfLsCQ9pbRaNvDum4ppD3S/s4qcXnU3nz7ugs90lcNdyrU?= =?us-ascii?Q?S0JjRvq7wq6G6PBuVUg+8Xi0oiStwK1DciGIdiNZO9TD2+Oe0zM/jxEl/nxH?= =?us-ascii?Q?gZMhlBc9NV1mxH9Cb/+2T7QQFyGNaK22W6sFT+TUezXrj5xzohH08tHO1Zpt?= =?us-ascii?Q?Iyw9RG9QtjzowCc9+xzUx85LcjWz1e6RYcb3iKdkgd/91ywDigkyP9b4O98/?= =?us-ascii?Q?1A03F7sB3JZ/yIuwtWOvZZLKlml4VXsc3mHXFv1z7unckXxUQ29vGjmLIOUO?= =?us-ascii?Q?5V0meYTiX/sDe7KqFRxPa9G6qhBzAETj+5H2hkgDI4/uaqnv6smw9djoyXei?= =?us-ascii?Q?bfkcj/yHJT/YRRFqGm7E6UN9wUOfa8ehOAkC+7voihI3c0GQ92YTT8ifByUa?= =?us-ascii?Q?Vkx+P4Gafa6MyCxnJybvj0NI7A1CNAeVafLtSTs4nYIdTQ7JFxs0OKlQmczj?= =?us-ascii?Q?Kb9lfs/aoXnluhequ/iqKhc8ubxxsMd1VHEz0QaElEKPni+rRO+654LEOl7P?= =?us-ascii?Q?7C2MGQJyAdF8jaKPq58oCjdIn8tfK83xGYo2VrXWrvCRQ/xtGcP3EnHDbNLS?= =?us-ascii?Q?+rGsveKBuO4hL4sp0BwQjOEx8AOBu0McNuPAx7rKT7kOOcFzFari9ZMs6M0h?= =?us-ascii?Q?7dzl/KQ1J5tFKD6fD1j22fyeKYy7rBikOfiON65B4Yq5k9fQuYJIF1guOwKd?= =?us-ascii?Q?kc3FQcQ9wIve0vhANTxIPeW2mIa/Jktj2ZZuu8/OoDaumdR453JqHQyOUZ0r?= =?us-ascii?Q?3JOb+tD+HZ6/oTDqSvdT5QLYcqG1seo16a1ZP9UY4V7ocjUWYtf8H1pJVykr?= =?us-ascii?Q?3pENXTuLeH5hwvFXos8O5qKqY8ppKCwMSlAOuQasABFswtZXz2hDVuqf3TIY?= =?us-ascii?Q?eGYJB5CRvan22uTXjeIc+aoCfjtXTYbCPnUPGGEtP7JRVJdJ1d28zqUeKpZ2?= =?us-ascii?Q?F1joYa5ScI7cmC1Vul4AXDH+oX0wnLEN/O67ZRpQwVOWfK4Bczo9+Rwc45Qq?= =?us-ascii?Q?KIyNY5JCIgh69cqbLVREsF0hdcfS8cNLtsOXb4zF6oIQICG3xSh+0/0tMtM2?= =?us-ascii?Q?yaENM06P/sgvfI25G4r91QhHg8iW9k9FeMuSTKOPv6JrZZyh8z+X7wRoiwAh?= =?us-ascii?Q?HOuA29YZs+7o1bXg9EKomonpggie4+Tm5nA4KyDCbl/XEt3gtpsS9fIbSddz?= =?us-ascii?Q?AI5WjSfxNDhyWBUxn+p1IbKxvmmd90T/4+c5f9UlYstgfF9Bgk8RyOeOJ/2M?= =?us-ascii?Q?wdKm0L/tbtuRpurSUNEaend0oLLprjInHNHSZh+cP/sHYBZitIqCtbMLOz+R?= =?us-ascii?Q?ccRgz8e0ZMNFBrRqI67fNlteyAp5xi9GD0IG+1kWeuvs3UisaUjqy02PaS2v?= =?us-ascii?Q?me+QvZddGVKerLn8aGM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(10070799003)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?I0TsZzlqHD5XzEP07kVA8GU3hqisVAKu7xeA6H7JdpSPhKe1VBlobH82vjmQ?= =?us-ascii?Q?9vdwl3iYyyAG3+R9vWW9YXcBeM6d1Tu1jakM4w6IhdvSedUTjH8sC800eKwq?= =?us-ascii?Q?o9TMvbSxXweQrESI6UAdK2G891qTYABRN8nfeH3rkAKMLsa31p/qooVvi29B?= =?us-ascii?Q?ouVsEByyU2ehHADKnASbCbDQIywPqj3KU0fKP9n7uGaR5m2fLnEi7Q/5ZwpB?= =?us-ascii?Q?6Ip4gNrOYiBE4kA3bSQ+VIn0l8KQYI9s4h/XY9iAu/bc/KkVvrFAGxo7VJ7j?= =?us-ascii?Q?r+Ovgfw0g+E5mpwCE7ZzsOK8ByG6QL96TxtJwvD78//esonZYNrhuGVtbHmP?= =?us-ascii?Q?HbMmeCiy9/ZYVzPHXmoJCoZS4gbaVyQx7XF22QbC02vCNVUiQzR9kTEMaLKj?= =?us-ascii?Q?2zBg9pGNDuFLZvoWQ+IFCc9fCVDFPD9oCECkpQEpmhQKKrBtost8LXWe/yWU?= =?us-ascii?Q?isNG28MfI28RyhP2/SyuZLlBeV+XJByQCcEcT3qxiYOI25zcAeFX2YSuXBQz?= =?us-ascii?Q?ByMzbuNMcNgEEZgWr4MLev5P2ba77YX95vxYLtGB13qb7D12XLUg+iaIvP77?= =?us-ascii?Q?Xx4eCl0E2/bjzIyCYU+vQZs07JEypisoQZ+/mtcEEYUVm57BzKvG0WT4GO1g?= =?us-ascii?Q?TQ55A8UO7BmeVyAmcDmHFbs15/Lm5st14UhyOrcCoFfyP/lLgY6VTZ8Evk0P?= =?us-ascii?Q?WLlXtPuZIaVP3G3ZAaFrwogESZn11ckrkSE1O+PVTkZ0suThcDKlWnUFJ/tM?= =?us-ascii?Q?gA/xWH+1Mz5xSrbvi6PZmzxf91L3MkQ89pN9tp7FRZy4TgqB0LTebtVWkLE3?= =?us-ascii?Q?uW+r+VMqVZ22hQy1dEiue8t7Hdn1Lt6nrLVt9YfUJsCpYApi+zulAoa+++LI?= =?us-ascii?Q?f0ueRa52z2aIWOigHJ1H9nY2qSQWDJz2FzhwUiEHBGUFybga1VUlGWOPpevt?= =?us-ascii?Q?hjToF7pLLOBEM1eCavSxTQjqkdT2KhG4BZHVwTXLYxbrS9c7vN3RU0hoFVHa?= =?us-ascii?Q?UyT+zPZ3kSJtCXLUJV0munK+kjFHZALo9upI4gX7ZhZb3PcM5XweNLgCldv2?= =?us-ascii?Q?CQkW1VFel4gIVoHpW7v1xZ4ZS461mCyaLWc2MLQbrbC8yubaW5pK3HyrmJql?= =?us-ascii?Q?xRSHoPF+awtSmKaApmVjVCjrJK6VjV7W77a2zX19W25y8vZTTFQTS9tAjT6C?= =?us-ascii?Q?/1hn3mGFnzzLpkFrtAZW7w75WdyZwOSv5ibWWJg2U8tIx6MNaHfjFmxJ+jHo?= =?us-ascii?Q?gOSWFZIi8tFSh7YJfh2WM2d4YMPDrzsZQzhXV/+HbxNh9XIJ0TtHPUrdOrCK?= =?us-ascii?Q?NXfyMnR3cvqiRVlhwHHnuKOb26PQbTBi19aNDw2SwTu9Jq7k8XJD8RB5wdDs?= =?us-ascii?Q?mj+qGQlTNOVNpycij0GPocCuKb+JABQCHWqcgg4iqYIYHHn/+UVnXNAeyPyb?= =?us-ascii?Q?tyw0cXTeCqfNX4C7gqsA0mRWdfhwUY8jir6WdNiNjVSI9Cg6fAy+Myx0iJNY?= =?us-ascii?Q?aCaXZvWrgJTCR9HthT+zLFZgVfQp0cFoR4S+cjvyXSR3YHO3RKvUvC5Kd9Dr?= =?us-ascii?Q?ukonoUlP1CleXrxKwGt3qcrQ9TeCEUoHCdIXNcZYR3W9VP9/HWWizMRHADZ+?= =?us-ascii?Q?+wvTb2I5QTvNZqnCCUcuoKiGXP16SWye/WcfwKiakmS9ywENNeJcTUoD4EuS?= =?us-ascii?Q?ZDuDqqkjUkW558lcPvU10C0dxTJmWeWOByqqi0XtkhY4tvCbBNAsTheTJKV7?= =?us-ascii?Q?kPGlhs1ioGZ1fDhOIp6SXgosZsI7z2u6RkZiIiJjEUfs7LhPDan8?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0e4416be-1f8d-4d82-b0f2-08de5b57e710 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2026 14:50:23.0544 (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: 3zOcbRiPmWjcKICTMDKjpSACieen+aDvYfGA0/5VcbJl+deWnrGdEvlmGrulOdMUCj4oFxcJduM4TfpD6LF4SA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4692 Content-Type: text/plain; charset="utf-8" Add BAR_SUBRANGE_TEST to the pci_endpoint kselftest suite. The test uses the PCITEST_BAR_SUBRANGE ioctl and will skip when the chosen BAR is disabled (-ENODATA), when the endpoint/controller does not support subrange mapping (-EOPNOTSUPP), or when the BAR is reserved for the test register space (-EBUSY). Signed-off-by: Koichiro Den --- .../selftests/pci_endpoint/pci_endpoint_test.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c b/too= ls/testing/selftests/pci_endpoint/pci_endpoint_test.c index 23aac6f97061..eecb776c33af 100644 --- a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c +++ b/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c @@ -70,6 +70,23 @@ TEST_F(pci_ep_bar, BAR_TEST) EXPECT_FALSE(ret) TH_LOG("Test failed for BAR%d", variant->barno); } =20 +TEST_F(pci_ep_bar, BAR_SUBRANGE_TEST) +{ + int ret; + + pci_ep_ioctl(PCITEST_SET_IRQTYPE, PCITEST_IRQ_TYPE_AUTO); + ASSERT_EQ(0, ret) TH_LOG("Can't set AUTO IRQ type"); + + pci_ep_ioctl(PCITEST_BAR_SUBRANGE, variant->barno); + if (ret =3D=3D -ENODATA) + SKIP(return, "BAR is disabled"); + if (ret =3D=3D -EBUSY) + SKIP(return, "BAR is test register space"); + if (ret =3D=3D -EOPNOTSUPP) + SKIP(return, "Subrange map is not supported"); + EXPECT_FALSE(ret) TH_LOG("Test failed for BAR%d", variant->barno); +} + FIXTURE(pci_ep_basic) { int fd; --=20 2.51.0