From nobody Wed Oct 1 21:24:15 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010014.outbound.protection.outlook.com [52.101.84.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBD06267F58; Tue, 30 Sep 2025 20:39:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264802; cv=fail; b=IvKoEw1R8Y5QQSjnnbuTATkTysYIeTHTrt5+F/wNXAsXeDUz9g3Jrt5qT05LklYbI8e25L6FTQBqntk6E8TNvFqN1in67foZlb+M6Bt7H/DnxogYeXFb722ASg8LcL3waCvZGDaAg6jEwsU8AhBl8CYn3kz1ZgfFfOx6kTbMX9M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264802; c=relaxed/simple; bh=fTrTjuDm4abymF4MrLYzrfO5CZFR2oN9Jg/OqEXxR4M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KRg0RKVVZaduJoKOHMppTNgo0nacdgA1mHTAidBvqb0okeGLAdbd2rFpBw38CmE7fYWhboFJgzXwT6vkpWFp38JIeRXIJ4h+k1FwulXYMF9C5JQAhCdh2+zgxaXRp3yhI1xlNI1BQMmqXfNCB4rDNOKU2Fvt1JvE+vhTUeMNVlk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Ew/tbFP9; arc=fail smtp.client-ip=52.101.84.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Ew/tbFP9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wE3zBZhqhEkA+FWwubYi8q9sVBZihuoU5jfxiCHsocsScQ39tXNJnZOwbP7ToMOzDPR7GwGvBe4wYniBaHt6U53lhZrk+vbOTT5ZWqzTNIBT9LCSAEdlD4HQFVEK14/AOkKlvQYemCk2gtw+cIOoPtNt/hlLgotYwGoy5Kenpu4lSbz0X1iqM6NZhU/mdRw+bHYAq2uiSJgKRdyqhTp83QkX34Su//xzp6Ba2BjorkF3gyLF8NI9FZ7sv0eZeMyB4n6LRwKfglFb37NTSvJhupi2fBkCyzz4bO+mM6DirgVVft5rvRMSZJC+VPiickGIr3LJ+jwJmDkksQ23BtqXkg== 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=6X6Q8oFfA4CimXwW6+KFNR9yPz57gi53b0t3guauzBQ=; b=wNintQrKyQe326Z1TGcnDeNaTvX/f5J0WeaFqZmSQaaBFAagQ7TJKKj0NlVGh4qg6yfSj1nqHI9LtldGlXukyl4CbasQUTHeRtAlcpyBLv4nL0glW3c5aVX5WMfe+ITchUq3YqVrlo9ytK2kAm5bAGb+a1d/gMMrXORcvnKEiOajkm/AFUWJyc037Oj2fjFrPVvprUoB+xUY0LcHnrp6fYvb/Ge5khZR2+b70xbj/VTSpO2/m5KpWqStQk3GLmBT+sduCld0n7CLFByJEi46NOvP3NIIyRUbTplASUL56klVb9bU01thXDikDnNvAujbWCIUOR10v9p91z9zSX4D9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6X6Q8oFfA4CimXwW6+KFNR9yPz57gi53b0t3guauzBQ=; b=Ew/tbFP9CJ0C6VPWr4AmlA7nHKIUNhruP0SLoirl6nbSp5/FlLkW7GyPWpMkmYdLRFA5n9WtWgEHtsHigLszRNOSdij/PYCr/ExN92ySPrwMKKIlIFVtyUlwGCAHSdoDi/Mgbh2OKCUfz4SToRjvOfAh15N4Ra7vzqQT8Qg/F9NKowQyKJfPp8xJfbeDMm0YVrbMhQI2K+RVcaZqNJHn/kVLNpYE6f70Sola7ydIJP3LCxwF8hDbZnNllp0KtCdNjJV+M2OxpqzC5cgkNyz1jtJGSp54WU9M3mPI6uTRRsiS0ga2Nt0Zw0EcVfI3jNwju8h6tkoBYaqqig84i9dkIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by DBAPR04MB7366.eurprd04.prod.outlook.com (2603:10a6:10:1a0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9160.17; Tue, 30 Sep 2025 20:39:57 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9160.015; Tue, 30 Sep 2025 20:39:57 +0000 From: Frank Li Date: Tue, 30 Sep 2025 16:39:37 -0400 Subject: [PATCH v4 1/3] PCI: endpoint: Add helper function pci_epf_get_bar_required_size() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250930-vntb_msi_doorbell-v4-1-ea2c94c6ff2e@nxp.com> References: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> In-Reply-To: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> To: Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Jon Mason , Dave Jiang , Allen Hubbe Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev, imx@lists.linux.dev, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759264791; l=5111; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=fTrTjuDm4abymF4MrLYzrfO5CZFR2oN9Jg/OqEXxR4M=; b=dNdZVBMITIh5IRk+peL1++jIUlIigvjxvAdR4QdvrsQGUWDxOGVS2xVrNEKoCGpl0mV3CIUBb pSmH0gUZBeMD5h9M+YCqwhZsrnpxWA5ymsyrLNPLQBM8u0rldU3Vu+c X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR07CA0046.namprd07.prod.outlook.com (2603:10b6:510:2cf::24) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) 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: PAXSPRMB0053:EE_|DBAPR04MB7366:EE_ X-MS-Office365-Filtering-Correlation-Id: 744884d3-a856-4f08-1291-08de00618476 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|52116014|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OUFKd3p4ZGZEVk1Nbno1bCtqMTBGa2psRDlEUHBvdWtqS29VbUpUeDRXKzcv?= =?utf-8?B?YUI4WUk5VUMrRkM2aTBSd3p5eW9HZDFHUFgwRWNWb2lvMWhrdW52WFZMMFF0?= =?utf-8?B?VW9EQ1J5bG9uSkNNYnNueE55ZHJxNlp0emwzSkJ0QUZEWFcwZmJzQXh6MmhC?= =?utf-8?B?bFpmd01nMEMzMlVOOEhhOTlwYmVhbEdDb21QbHpNa2NtMHN5WUh4UklWZHZu?= =?utf-8?B?RU1id3ZEc3lOVFhVRGRralNIaWtZdXd3RXZuRWFlV21SZzcrZmZkb3ZkTFJN?= =?utf-8?B?Q24vWXVVYXJSbEplREtrM3B4SEozSnJpVHFtMWhUY2ZrYWRycWlMZjlyUTdE?= =?utf-8?B?VGFXVXlKaXVZQzE2ZVpTR3dhZlJmZFlFaFRpZ0xRM3EzTUROd0tQcTg4OExE?= =?utf-8?B?ZUl3T3V5YXJsZVNZUzVxZHlrc0ZOWTA5ZFBQMitWc3l3RGFpeWJvZ2kvcDB4?= =?utf-8?B?eDE1YUpub1pHK2w1SWovc09jeTlkTUF0VElndENjcFYvKzR1MGhwRmg4b2hk?= =?utf-8?B?dy9sWnFzT3EvTnI4dW9ZanlFS2JXM3l0cVZERm1FZGJmVTJJS1FsdWs1bWRZ?= =?utf-8?B?UWF4Z0VqOTBYRmZkOEdDNkg3T3RxTGhReFVvSmJQZzR6M2lseFU2N0VYUFlH?= =?utf-8?B?VVA3eWZYNlNyVW81cXpHZjlYQTB5cEdaUFd6dlhOV1Byc3N2dzVZV1ZZbzV5?= =?utf-8?B?S0orTG5jRTV2bHpoNG45Z0VFMEJBRHVXWDEyNGF0Zyt0QzBEOE5LVjBvUWtE?= =?utf-8?B?SnN0MXlyT2U5L3hDejNZRmxSQVNWRlZDTXJxWjVJQjJZU2trT2k5aHdxUm9l?= =?utf-8?B?MWQ0ZmxWVUZqUkNRR3kxeVh1b3V6MVV0SmJoY3JBUDMrZ2NpVlU0aWJSK3VN?= =?utf-8?B?VjR2Mnp6aEdyM1EzNHdsVnRDVERxMmRZNW5zcThlVVkybzBuNVd3NDdjUjh5?= =?utf-8?B?LzlFdGFiSjFWNmFud282dmJIRXB6U2FUNkFtajZJa3pxNDkvcjF1amdRdjNj?= =?utf-8?B?Sm8xSG14VXR0YnMzZCtVZzBPVDlJUXo3bm9RaXZjOWN0TnpVRk9RdGZkaGRB?= =?utf-8?B?STVwR0NOazU5aHdXMHRiWTN0aStOSmd2OTZib3JzVjB0MGVCZENPeC9zRFJW?= =?utf-8?B?bklxcFBpUVhZSHRGUFJrL1lOd2duRTN0eTExY2xtUWh3QlZsWDBLd0hSckpL?= =?utf-8?B?b0RQRHFtb05pOHp1NUNVc2Q5RjFJUXA3MEQydFUyNldweEIyaHZRVzJ0MDBl?= =?utf-8?B?Tzk4dSs0TFRmVWhxTTRlK2N2SjJ1V0lTMlpWdE1KL2lTN2lWa2lZazRkVmFY?= =?utf-8?B?QTlIZlpLYmZlK2NBeWcrZXp0Z2l1VVJLTFI5Zm5OaCtSeXR2SUFPZ3o0K1VV?= =?utf-8?B?eFBJYU9JOHRpM1Q0YW5sMGdpMHQySjBXQitrTUFwaDAxVmRVaGxUWVNHQlho?= =?utf-8?B?MGsrM2RHTndaN2E1MWV4TjFBYlY3NTNkUi9YTVFBaHZoSW4ya0lKNStaTFdU?= =?utf-8?B?ZkdqTnpEcFd6R09DQVgrajVwb3hGNEVHMmFhTmwzQ2VIczdvYWI4S05IVEJH?= =?utf-8?B?c25pUUVZMlFRZ0hsblhDZFVCYnFvRzNBKzNIZTRkOWdTdWswdUxkdlJ2NE1t?= =?utf-8?B?SzRSMnU3ZndNVUhSdGR2NU53Tm1WQlUveFl2STlyV0psTE1VdDFyTlRkb0E3?= =?utf-8?B?cHlmeXhMam9oL1p5YXpVdWVtNWZraTFSeTJuTWw3aHF2aCt4NnVSZURmMXFJ?= =?utf-8?B?bGhJYkZ2aHNNZm9hb1ZRbFNRUmI4ZTk5dndBWnQ3R1pyOVordHlwdHJWKzYw?= =?utf-8?B?TUtHaS9nbFVVNXpoQ2pEdXRsdVpMdW9WSnFqRGdNVU1aL3FNZjZ3ck5mNE1Q?= =?utf-8?B?R0duelFndHR1NkZQR1czOEtMengwT2JBbEVCQnRrZjh2dmZOY3lWQll1T0pS?= =?utf-8?B?cHpKYWxWdGhTNFFrMWcrSDh5MWQ2RTB5aTZodVNtZk1pcWtrWU1aZzNna2Ew?= =?utf-8?B?RzBUS0dxanAwZ1RHWmtucXJIWUgzVUE1aGtreTZLYWpKRDBod2lEY0tEbUw0?= =?utf-8?Q?yljYw5?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(52116014)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aG04U0dZTm5YRmh2RTNTRWY5ZE1hTWdSbndXSnJQUm1tU1FHWlRia1VWcFdH?= =?utf-8?B?c3VBQTV5Nm81RmNvTGFndWxEUUFHTTBTVkZRalJ1a1lsTkNGMllUMXdLakts?= =?utf-8?B?RkdEWE5VTlF5SmZCS20xLzNDTGErcTFxc1AvMlFIbHBZMlEvOG03amtZaHMw?= =?utf-8?B?aGVVWFFncjV5YjVERWhuZ2IwVXZPSUNaYWtPeHZmUERYcFNuL2N0aXRmb1hL?= =?utf-8?B?VEFneUhzeG1GSGhCVkp4eHpRdEhpdjBZZnBaTnVGbjFxREhoT085OERzakJz?= =?utf-8?B?anNWc0JhTEh2WWloUlRSelVKKzFyVk1YNVgwODRJcSsxQjA0OE12WTlUMFFR?= =?utf-8?B?YWlCWmN3d3ZvN2hJVjJRcTlQbHVNUnlzL1l2TVA0OForSHJqdllyQUhmRWdJ?= =?utf-8?B?OXFWRVE3ZmptMHcrTHYxYkRkNzdPUEN1VDBEYzQ0SkJqa05uNjk4MWlYckdN?= =?utf-8?B?a2orMlVYeStkaGVoR3lucEF4dmhvZ1VVVjYwTFVHQmhyMDZpdXVnNUVwajB4?= =?utf-8?B?QTFJcEZZWlorOThDbFZ0RzJaYW1EZ3YrR0IrWEZkSWxVMkxLeXNIeTJtL01q?= =?utf-8?B?dURZWGtXWFM1WlVtTGFoUjNTdmlUY3lWSmQyaTc5TFN5THgyOUxXcFlVM3dE?= =?utf-8?B?K3h6RWpZUGprVVJpOEFmNVlLSVdHTXdXSFF3aHhXTGhkUXNUQ2VwVmZ6eXVC?= =?utf-8?B?citvTjhJMC9zOWRCcnJSQW0vZEhxOWRQSm9tbFdIZEwvTUhUaGtoZnlZWENl?= =?utf-8?B?c2FqcWFhRml5ODlaeEoxWkJ2ZDdrSjV4eE1FZ3UrV3o5ck9GVElsMjdnOHJW?= =?utf-8?B?MDlUN29tQXNNY0tUVU9iTzZId2RJWVYrZVF5TFc1OHRVcFRPV21yRFlVVTlG?= =?utf-8?B?aEN5aTlDTnlpT1lyL1ZXNmlJY1ppVnRsOVNtS2QzK09BdXA0dHZUeUNGalpU?= =?utf-8?B?cVljQk9KbnByTm9FMkd4Sk1ORmF2R3hKWmt6d01iNlViKzFxTG1McUVJdndy?= =?utf-8?B?NWs3VVNoTXBlcExaaUppNjVNTHEzQ1VWRGViazRldDZlcitoM1RVdzYreHpD?= =?utf-8?B?cVhxekxtSGFCVW9ObzZkVWd4NXdLVGdvYjB5Vnk3QjB4L2VtS2N3RUpTeXFs?= =?utf-8?B?dWhRS1BFZEhHNytkYVM0TndFRHBuaiszN2tUQzJMVXdWbndQbEdvZ2ZlR0Na?= =?utf-8?B?enQyaWZSVU9XOXJ1dkVMVTJrUGZvWWZCc0FGa1hSbzVEOFNwV2lZZURMc2I2?= =?utf-8?B?QW1nUmtRdjJDcEJxYzF6UXlqMUJmdzRycTl5TVNDV2NBVTg5bzEyZkFhZGdG?= =?utf-8?B?bVoyUjZJTjBXenVlSS9QbzVnVlRibkJ4UmVOUWJMNTFjNklESTNoSEVMK2RS?= =?utf-8?B?MktIWk9DK1JpZUN1REVWV3ZycFFQVGhHZ2M1N1hnZGZ0WUVVMHBackVEeWh1?= =?utf-8?B?KzZuMnNrdG5POFBzSExVVkFWS28wMDZPcytoamorY2pydTZ6OTRGR0RJTzNV?= =?utf-8?B?YlZPdkZDVVdEaTA3MDBHRUtkL0IrdEZxdmVHaHcrQTZjT1hOQm9OYzJlMHRL?= =?utf-8?B?cHdUcDdhRmx3T3hrS2tJTWd3VzBBMDU3SUpRaEp6NnkveFIxc2EzeUlvU2R2?= =?utf-8?B?aEt6L1pud3kxQTJML1pjNC9pemFtRGhMWHhJRDdUV1R0NklOQ0lSQ3gweExD?= =?utf-8?B?dU1kaElnTk5KL29GaTBHeS9rVmxjd2NnZXBQRWhuc0trdzlqZCtlRHcrdnZt?= =?utf-8?B?N0grL0ZGSXFOVkIvT0p4elRBcXI2R2Yyb3YzUEltV09rYXJWR1BERXd1MjFI?= =?utf-8?B?aDJISk5EODBlNG8rNVpqUWJibWNvRUoyKzlHc0xsUDhrS1pNS3dmMDNSREVM?= =?utf-8?B?azNuMVJjYkxpWThLRFF0QTZnR0F1anpWZjdoQTF6K0k3dDJlWG12SEN5Mjkx?= =?utf-8?B?UG9oZ3ZJdERpYUQxbEpCRitPa29Bb2VlS3JMLzh5M1ZaaGo2SmliYVZ1Q2Fr?= =?utf-8?B?VmFucGFBd3ExQ2ZpSkhlRWdMdDFtR1prak1OMmVTQ0FHMDd4aHp2Q0VDSnFV?= =?utf-8?B?N241NlNwaGVOamlKYmw4L2FrQm54M211NjZMdWRuR08xQTF4eE42bXIvRmFz?= =?utf-8?Q?t58WSk5v61cp+4EHW6LdG/zrg?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 744884d3-a856-4f08-1291-08de00618476 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2025 20:39:57.0634 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fQIxdM2rNbFQnJ4lQl/mSg/xk4Lz8OwmTHwpeZLH5RHBLTJWeoA/NVidp8N7133ur9FpEipk1HokzYPwYgt2qQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7366 Introduce pci_epf_get_bar_required_size() to retrieve the required BAR size and memory size. Prepare for adding support to set an MMIO address to a specific BAR. Use two variables 'aligned_bar_size' and 'aligned_mem_size' to avoid confuse. No functional changes. Signed-off-by: Frank Li --- change in v4 - use size_t *bar_size as in/out arugment. change in v3 - change return value to int. - use two pointers return bar size aligned and memory start address aligned - update comments about why need memory align size. Actually iATU require start address match aligned requirement. Since kernel return align to size's address. - use two varible aligned_bar_size and aligned_mem_size to avoid confuse use 'size'. change in v2 - new patch --- drivers/pci/endpoint/pci-epf-core.c | 81 +++++++++++++++++++++++----------= ---- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci= -epf-core.c index d54e18872aefc07c655c94c104a347328ff7a432..db0420f601d81de426a3e805c7f= c309de58d54b7 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -208,6 +208,49 @@ void pci_epf_remove_vepf(struct pci_epf *epf_pf, struc= t pci_epf *epf_vf) } EXPORT_SYMBOL_GPL(pci_epf_remove_vepf); =20 +static int +pci_epf_get_bar_required_size(struct pci_epf *epf, size_t *bar_size, + size_t *aligned_mem_size, + enum pci_barno bar, + const struct pci_epc_features *epc_features, + enum pci_epc_interface_type type) +{ + u64 bar_fixed_size =3D epc_features->bar[bar].fixed_size; + size_t align =3D epc_features->align; + size_t size =3D *bar_size; + + if (size < 128) + size =3D 128; + + /* According to PCIe base spec, min size for a resizable BAR is 1 MB. */ + if (epc_features->bar[bar].type =3D=3D BAR_RESIZABLE && size < SZ_1M) + size =3D SZ_1M; + + if (epc_features->bar[bar].type =3D=3D BAR_FIXED && bar_fixed_size) { + if (size > bar_fixed_size) { + dev_err(&epf->dev, + "requested BAR size is larger than fixed size\n"); + return -ENOMEM; + } + size =3D bar_fixed_size; + } else { + /* BAR size must be power of two */ + size =3D roundup_pow_of_two(size); + } + + *bar_size =3D size; + + /* + * The EPC's BAR start address must meet alignment requirements. In most + * cases, the alignment will match the BAR size. However, differences + * can occur=E2=80=94for example, when the fixed BAR size (e.g., 128 byte= s) is + * smaller than the required alignment (e.g., 4 KB). + */ + *aligned_mem_size =3D align ? ALIGN(size, align) : size; + + return 0; +} + /** * pci_epf_free_space() - free the allocated PCI EPF register space * @epf: the EPF device from whom to free the memory @@ -264,40 +307,16 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t= size, enum pci_barno bar, const struct pci_epc_features *epc_features, enum pci_epc_interface_type type) { - u64 bar_fixed_size =3D epc_features->bar[bar].fixed_size; - size_t aligned_size, align =3D epc_features->align; struct pci_epf_bar *epf_bar; + size_t aligned_mem_size; dma_addr_t phys_addr; struct pci_epc *epc; struct device *dev; void *space; =20 - if (size < 128) - size =3D 128; - - /* According to PCIe base spec, min size for a resizable BAR is 1 MB. */ - if (epc_features->bar[bar].type =3D=3D BAR_RESIZABLE && size < SZ_1M) - size =3D SZ_1M; - - if (epc_features->bar[bar].type =3D=3D BAR_FIXED && bar_fixed_size) { - if (size > bar_fixed_size) { - dev_err(&epf->dev, - "requested BAR size is larger than fixed size\n"); - return NULL; - } - size =3D bar_fixed_size; - } else { - /* BAR size must be power of two */ - size =3D roundup_pow_of_two(size); - } - - /* - * Allocate enough memory to accommodate the iATU alignment - * requirement. In most cases, this will be the same as .size but - * it might be different if, for example, the fixed size of a BAR - * is smaller than align. - */ - aligned_size =3D align ? ALIGN(size, align) : size; + if (pci_epf_get_bar_required_size(epf, &size, &aligned_mem_size, bar, + epc_features, type)) + return NULL; =20 if (type =3D=3D PRIMARY_INTERFACE) { epc =3D epf->epc; @@ -308,7 +327,9 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t s= ize, enum pci_barno bar, } =20 dev =3D epc->dev.parent; - space =3D dma_alloc_coherent(dev, aligned_size, &phys_addr, GFP_KERNEL); + + space =3D dma_alloc_coherent(dev, aligned_mem_size, + &phys_addr, GFP_KERNEL); if (!space) { dev_err(dev, "failed to allocate mem space\n"); return NULL; @@ -317,7 +338,7 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t s= ize, enum pci_barno bar, epf_bar[bar].phys_addr =3D phys_addr; epf_bar[bar].addr =3D space; epf_bar[bar].size =3D size; - epf_bar[bar].aligned_size =3D aligned_size; + epf_bar[bar].aligned_size =3D aligned_mem_size; epf_bar[bar].barno =3D bar; if (upper_32_bits(size) || epc_features->bar[bar].only_64bit) epf_bar[bar].flags |=3D PCI_BASE_ADDRESS_MEM_TYPE_64; --=20 2.34.1 From nobody Wed Oct 1 21:24:15 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010014.outbound.protection.outlook.com [52.101.84.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6CBDF289821; Tue, 30 Sep 2025 20:40:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264805; cv=fail; b=ZYrAXMwOHVIwrlpDN/ByO4BGz/A2EJfZIbf48hBS0EC2Dw/pRd3UgwqYzYQw+NjCs5ENKXzWz27/1xrDlTzAzqOSWqMBVP7xpWKKLzXCtKfIssPB+stiEtf1usO+74UgKYYArPdODQGt/xk+2961WTXaQPmUIyiQbEuO5OATgV4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264805; c=relaxed/simple; bh=Cj+RN7is4qGa/62A4wVwq6dpqg/IKkxlmwiXTG7Xvm0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Xlysla8RgxlsGmbi8SKrDYXpzggll7ldiIZCLtdTgWruwDxtBU3yy5jilj6GX1TkdAxC6EWBoG518PnPTDe0SBnKopDvgtUc1I4ZxEyQ2FfHpK3u4uDIr0F0aS3jm6L9UEQpJFS/fQbdTfsVjRKGCultnUW91MtMXQdNlUW5A5w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=lTD6zoM5; arc=fail smtp.client-ip=52.101.84.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="lTD6zoM5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fv6Tlpw2vlG9mqAfpNv9jHyhpbTfuTSydum8xVOHOHo/WE73/dFOOKVSu9smfoU5HW1J0WteFDBEOlZfL/l7teLSlELE284R9cnj3FVLHv49zzaTAH00Tlog7Ghx/ShmxKyfSc2oxN6Xmu1vAVi6UI98jWlLiMHssgWFRxU1f4j9ulFxT21qI/yHGVZMqW+41UIF8cmuyjDQ+R1RHj5N0Ac4E5mhcjzFEPaIGX+GpNY5f9oIu3zXVihLUXiLldq5auaH5IyfyZ0VdElHH1ac5lLbwVKG9jVp9egDvgO42oRkaiXEHiv2nNK2JIZtEKDIDq/GOv6/ihLzjKHFSGWB8w== 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=iHWbRAiC8i5izt1HSGsiS/oW5+fUUvuFdDDyNEx7tsM=; b=jNczHyXH+wkdJtedNocbzBv8ZMv/We6L37/A360JIwg1pX2JVEe8ApZrkC+ZmTgxfMkPKoFEdGrrxqY2wIiA7L1sjw9tjlgK3E8/WXBYY9iOLfUOjFwxm57r18TbPxmxySV4/wIRQEqZ6EaCdSZydz5oniVCznqt484nSBNKSYiBHpEtWeec636XFKbX6/OiTQnl0vHz2X2Jk4E2SFbi0uM1EJ97ot1x6iWWI5CfbwO696xw77Veou3Z50d5DLzaq+pyWopsf1vlM/VcJxAl3LMDD2F6JnXL1Rs7GXXqTzgT7dMES6tVwfZpTlIft3CqYeL82GPOFn1vMzvJcqA0QA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iHWbRAiC8i5izt1HSGsiS/oW5+fUUvuFdDDyNEx7tsM=; b=lTD6zoM5+osjj+9qBkdbXtcZKNI8L/Dxc6KTWg2pOgOJ6aHpc1S1UkEmOEg7of8qZLt0Z+/Lws2NtpbZRUITxxvw2WACyB/OhmqLYoKBr+vAqbsJUMuPgtjVFydTWuf5rBgUwWfWCZSvKnCB1eXW/T/tycMJPHRTyG/24nnf9fqalniaeWr9MefhEDs91NeuovkjR7+M7AdLCZWeYvA2Gup7nPhNmC1wEYFw1VRzBxRHHri5damQNxCjBEwVSe11aQDErxdMaEpR9LdXs3VYenlsQX2id1qzGj12WvEfcTign/GHIWku88GZamUcYfTnfQSCjYdPef7mMzmibbdqvg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by DBAPR04MB7366.eurprd04.prod.outlook.com (2603:10a6:10:1a0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9160.17; Tue, 30 Sep 2025 20:40:00 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9160.015; Tue, 30 Sep 2025 20:40:00 +0000 From: Frank Li Date: Tue, 30 Sep 2025 16:39:38 -0400 Subject: [PATCH v4 2/3] PCI: endpoint: Add API pci_epf_assign_bar_space() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250930-vntb_msi_doorbell-v4-2-ea2c94c6ff2e@nxp.com> References: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> In-Reply-To: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> To: Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Jon Mason , Dave Jiang , Allen Hubbe Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev, imx@lists.linux.dev, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759264791; l=4917; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Cj+RN7is4qGa/62A4wVwq6dpqg/IKkxlmwiXTG7Xvm0=; b=VVuSkuFKcnrArFI8+eEQxvCERznuW1b5J5B2gbMHvG+v3Cct1PWiQvnHApruKHSrIBeZFfNKG k+EGjS/i+KBAaesRZRf6i/YTa1O7a9obMVSdjssFSNUX3sNiFJhcjbJ X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR07CA0046.namprd07.prod.outlook.com (2603:10b6:510:2cf::24) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) 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: PAXSPRMB0053:EE_|DBAPR04MB7366:EE_ X-MS-Office365-Filtering-Correlation-Id: dde34ba5-68ec-4cf0-70c7-08de00618645 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|52116014|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UmNWVHdhMWNIbnRIUkVVU3JvT01iMXdVTmwwaE9RNXFOZU9LMC9NTUozTkkw?= =?utf-8?B?RDFPZ2RoYlhPZlU0UktzZXFJdy9WWGl2ME9WWFoxNmpZQWFlUEdvNlJqdnMz?= =?utf-8?B?b21Nc1QyRFVRSFhVT1F0VW1xSGVNK2RrL0gyMEp2Nm1HUXRpM2VCRXpHazRI?= =?utf-8?B?eXZCTW1LL0tscWRJMDI3TW8rWDJORkNZYUJRT2QyOGUzVkpjL3FRaGZrNEdI?= =?utf-8?B?VERkcFZtRm9aVjFsZm5XSTlVUEtBMUUyUnltZTNqZEx2NDJpdy8wNUZRTnVB?= =?utf-8?B?bHRxam9RalBLVk1tUktGdUl2ck5RbjNOWW4yYlJCMThVbExIeStYelVCWTlu?= =?utf-8?B?YlBFMW1rUW9OQjJmUFlweURHTk5leFZ2SE5ISkNtM3phQTVtaDd5Uit6cDBp?= =?utf-8?B?Ylk5N0p5bDZzeG84UFlmSFR0ckNhNDJoUVdUazRDSWR4S2QwUXpFclJESjJ6?= =?utf-8?B?WEtZeUhkb2RMS1dCclhibEtDcmdVa0dFV0loVnNhNS9sWFhna0xSckxYelda?= =?utf-8?B?bkdzcysrMGttU0ZWQ21XMG1wSzRvbXlyWkk0ZDdGdnlBUXlzQ2ZubUg2Zitv?= =?utf-8?B?eDUvdEdTaUNlQ2RlejFKMitkRUo0VXpPSjNWdHQ2WG9RdkZ5aGRpODZWOFlz?= =?utf-8?B?NjAwclBHYWlLQjZ2M3B2dmlGdXBJTzNNRTMvaHlvbG1WLzNGT2tkZzZLWmpZ?= =?utf-8?B?ZW5PUjZZUXo5cUN0NzNTL2pKT0c2SFNrOFVLL005MjJnRHZrMzdLV2x6eWlT?= =?utf-8?B?U3VrbkZnOTd4U1p3S0xpeFVwRFVWa2xtV0VReUxXZmZtYmd2b2ZKeVF2UFZR?= =?utf-8?B?R1VuVlA2R3ZKUHdwbHpWUmVxNHVmUDhKRDAxam00S1Y0Q0R4eTRQUkZkUWF6?= =?utf-8?B?RDJRbVpPRlE0UW9JNWxEZ1FONW8vc1ErUFVvSUE2SXVENGdPaGM3R0JORWxV?= =?utf-8?B?b3lPa3kydU9jQko1SzJTQWg5dktVaG1yWmlOYngrQktHSWR3ZERCNUMwUjh6?= =?utf-8?B?K1RDVnFWQVkzUUdRWjh6YWtiVE5hWEh0YUQ5cTBhYXdIWU5jZTJ2KzdKcWtK?= =?utf-8?B?SzBhdmRZN0lycGM2My9rK29SMzZGeVcxaWR3d29tRzJMUFM5YnFsUGVFdDFi?= =?utf-8?B?SnQ5bElyWEcrZWNvNFBMVzhxUVFSQUVySVQ5YmIweXZIbDhCL3FlNGhOQXFt?= =?utf-8?B?YWVTREVsQVpVbGRsSjRsUGMra0xjUDhXalo0TjEyQ2NWb0hsbG5qTzFLVm8v?= =?utf-8?B?UUtuS3krS0hLTnJrTlpCNUw0RW1JMGdBRTg2cElqZHdvVk52MzlCdU5NNWdK?= =?utf-8?B?d3BXcXNIenI5cms0MlNvYzZhdGJHZ3BYczZ6UXgzWXk5eDRVcHdrRnlKSXpk?= =?utf-8?B?K3dHa1pySlE5Mm94eXlhazd5WjZmUTQvYnVjb0UwenNWcDZVWlZ3em96Y2xW?= =?utf-8?B?VlRiN2NxL2NyalMzSXphdDd5cTYxcEJyVDFFMllyVEpwWGUyb2hjekdZSkFq?= =?utf-8?B?aWY3ZU9LeTJuN3NJdTRFemFueWFvVHVETm4xYWNnUW1Nd3JkaTV1QzUxL1Fa?= =?utf-8?B?bk5ZTzA5dkN4Z0dmcjE0Uk5pZU9uYzRvYkh3N3Y4V1RwT1ZZQ2FFUWRUeGJu?= =?utf-8?B?enMwVzFnRXZ4UUNIUFQ3Uk5vdXRkaVJyR2RpOC9rWnRDOGZyZ1FWZW55VjJo?= =?utf-8?B?TWFQbERXT21zL09kUm5BUSs2VmIwVjVGSURGMmRMNG9NN0FCdS81ekI1Snho?= =?utf-8?B?UEgyZ29JYzFFTzVJWFdENmI5SmZXS0ordG8xbFYxZXIvR2dhd0E5bXhVTDZY?= =?utf-8?B?eUF0Y3VMdXF0aGlEQysvSUJ4VkpqV2VVVGYybG95eDdzckltSm1mQkg2a09r?= =?utf-8?B?UDBWSXNleVpCL0JxeGxyTTBUSUZmRC9mZEZpUGx6MHhkbkRkcjJuOHc5V3Vn?= =?utf-8?B?dEVWTUN0WHhPY1lhaFBWQThHbForS3V5KzRabVVkeGRIM2xrR0VUaHA4bUI2?= =?utf-8?B?Yk1ORTNXb3hNR3FXWGpKTnNpN3pVQ2R1MFBPSFdUQkZmeEovT0pMdThQRWFC?= =?utf-8?Q?dHeeu3?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(52116014)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MUhmQkRsTEpkZ295U0pqQ3NyaEtBZkVmakZ4NGJRaXBCVmlqdFlTTTZDVG03?= =?utf-8?B?LzhGM2lQeEVpRHBHUjVkYStiWTFnNXdBQVcwR29FSTJNQUNCdjkwOTNrZzhC?= =?utf-8?B?Ni9DRGpBaFlxZGdVZUxINmNIbUkyeTVzYTVHS1lJUWM0ZHJTTE9NbE9sUVND?= =?utf-8?B?eW9sOW5LUktQcitWbDBUaUxDL3lnUUJXdjBrWU92OTJ6NFZrcVJoWWUvTHNU?= =?utf-8?B?Rk9wQVludHhTWWFMR2Q1QkhzMUljbUZLd0tkUHZWd1NmMjU3UDFpVGpSZ1NU?= =?utf-8?B?LzBBaGpNMVZTandHREg4ajVNa280V2JrZEQyZHBSR2JSeE4wb0lCbXBJKzNV?= =?utf-8?B?QTI1SHhhZElpcENkQ3l5U0ZScHVSTVpZUXNwemNzdWpPeXN6aG91YUFUZHdt?= =?utf-8?B?MjZGRWdCSmY0TkF5NVRUMjFhS1ZNZmFvR25YblNQUFFVWGc5OXF4VFRCeWg4?= =?utf-8?B?ZmZiYWRNNjh1MCtUQlVXSFFycFUzMDk1c0RRekprNmxCUGc5TEo5MG5vSUtI?= =?utf-8?B?QUNoSi9OaWs2LzhDNzVraExDYjBHYW1GUU8xNThrZDU1Vy9vTGs0WmtaUXhl?= =?utf-8?B?OTZHTWhCVUFLalhsMk9mdDlNaTRwT0trM25za1JtN3JJYks4V0FSQ1BRZng0?= =?utf-8?B?UnpZMlJQajdlZ040OW92R2Q0UC9QM05Uc3c0VjVCK1YyNUw0aVMyVnNSNjZX?= =?utf-8?B?UjFnT2h1SzY2SXgzVzlxeHRJM0JaWW55QzdHR0NyVWIzU0pxcXN6cERxVk03?= =?utf-8?B?bVd3V05xenhVSzJnMThHbUorNE5QcWZIODhsdmVzOU5WTlBWTHlYdGwrSnpz?= =?utf-8?B?dE5wOTBzQ2I5YmxMcktmc1ZpMHRIUkxuVmtjb05aL0lQR2E4eit6Yndta2RB?= =?utf-8?B?dklpTHZBVFltMkdNWHh6bCtvNXpqSFlRQ25SK1RncFY0algyMHJyUWtOT2Ju?= =?utf-8?B?QmF3WVk4dkpTQjNHdmlpWWlVZE9IbUhWL2Y3UmdsQU9ERFB6ZjIxK0VmRXRj?= =?utf-8?B?dmJndlVXYytvb0tSWCt0dzBibno4akFlRkViSWtBU09JMnVwVFd2THZSMGYv?= =?utf-8?B?QldqUkpuUC9qdWVxcVVWM0thNStOVFk3L2s0Y015em0ya0l3b2FnQnYzUE40?= =?utf-8?B?Yng4NEo0TTNZSlBrOUNFSGp2amFxR3dGc2k0Z29yejRIRnN2UVdpOGdwdS9x?= =?utf-8?B?SjU1NER2cFpCSHViZUNIcDh6bFI2SGhKQ0QvME9LY3RJWHArdDRIVkR3dEU1?= =?utf-8?B?bzcxWmN2azdBaFRXbXJHV2dzUHNta3MzOStHUXFjeUVTdXlVOEFyNlVPWjZ1?= =?utf-8?B?RVgyUkdPVDBSeWJROWdBRmNLRnBQSEt2VW9NQ3N1Wk9JckQzcmtTR0hGYTJE?= =?utf-8?B?cDI4My9xNXd4UUcvVEdMM1FRTHhvSEtzZ2NGOWN4TEprcjArNENxalk4VXdu?= =?utf-8?B?QlpWQlFxcXQyUFRHeXZmdTZBUWFvYUNxR0xDRk1HZTFQajl0QjBoNC9QTmlO?= =?utf-8?B?RnRmV3NoREJxb1VFaHpkb0RkNnMwNm9XaVhhSTVIMk8zUnhmNTMzOEhkR3M3?= =?utf-8?B?VlFNTFlETGR1M1RwUndFaGdwTGxNSklzUGFSQlp4VWx5TDhyODJnMk9lcVJ1?= =?utf-8?B?akN4dkJneVBxcnEyTVhRai9DbTk0cGx0YS9Na2JVZVJyeXFWRUJaS0Mwb3BK?= =?utf-8?B?Njd1ZGRuQzZIWTMxRnAveFY1RW8vcGlka1FJcWF2MGtqdXJ5clRkbjB4eThS?= =?utf-8?B?WSs3ZXBoMWcwb254ZFNabXQzSzN4NUhLMWM1RW1HRkw5cUNxdEFlNTc3NCsx?= =?utf-8?B?R3NNSjJkWlFKQmtINUg1d0sreWdiTG85eGQyc2x0ZjhjZFQ5T2lNRDJJeUJy?= =?utf-8?B?ZkRVQmwzbGpwZG5tdWRIZjJhb3ZXdDltV1IwT2VDY2ZJMW9FTzlHaXQ0aWdQ?= =?utf-8?B?K0d1RFVxcGgxNU1pLzRIN0lxenJxNDE0a1g3cDltU0w3Tm5oYUFMN1o2ckp4?= =?utf-8?B?a2dYTjVnS3dGMDJHUkpNODVjYllwWmF6eTRGLzA1T0kyc3kyUDR5b0Z3U0ND?= =?utf-8?B?WGVmWm1FOEpXa05GV1Yyc2hQZDRDRXZxdVlNOVovVjE4UHlTN1FkWmpldU0w?= =?utf-8?Q?T1SQrljq7B9uQWI/QdAK0dSp6?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dde34ba5-68ec-4cf0-70c7-08de00618645 X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2025 20:39:59.9792 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fv2qlqEhd03vRKSvoDzBt2d9aCKeKItqy3MZg44TOfc3QNAXLdRxUj3RwhB17hblqnyJLNtPmPUWP0lwKPdcFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7366 Add pci_epf_assign_bar_space() to allow setting any physical address as inbound memory space, such as an MSI message base address. Since PCI BAR size must be a power of two, the input MMIO range [inbound_addr, inbound_addr + size) is mapped by finding n such that [base, base + 2^n) covers the range. The base address is also required to be aligned to 2^n. Signed-off-by: Frank Li --- change in v4 - use size for bar size. chagne in v3. - update function name to pci_epf_assign_bar_space() - s/allocated/assigned/ - add check when align down input address to memory align require, may not bar's size can't cover required ragion. change in v2 - add new API pci_epf_set_inbound_space() - fix bits 8 * size_of(dma_addr_t); --- drivers/pci/endpoint/pci-epf-core.c | 80 +++++++++++++++++++++++++++++++++= ++++ include/linux/pci-epf.h | 6 +++ 2 files changed, 86 insertions(+) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci= -epf-core.c index db0420f601d81de426a3e805c7fc309de58d54b7..d0b8a02c1de988873d28ede7680= 0d5d4e9810827 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -349,6 +349,86 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t = size, enum pci_barno bar, } EXPORT_SYMBOL_GPL(pci_epf_alloc_space); =20 +/** + * pci_epf_assign_bar_space() - Assign PCI EPF BAR space + * @epf: the EPF device to whom allocate the memory + * @size: the size of the memory that has to be assigned + * @bar: the BAR number corresponding to the assigned register space + * @epc_features: the features provided by the EPC specific to this EPF + * @type: Identifies if the assignment is for primary EPC or secondary EPC + * @bar_addr: Address to be assigned for the @bar + * + * Invoke to assigned memory for the PCI EPF register space. + * Flag PCI_BASE_ADDRESS_MEM_TYPE_64 will automatically get set if the BAR + * can only be a 64-bit BAR, or if the requested size is larger than 2 GB. + */ +int pci_epf_assign_bar_space(struct pci_epf *epf, size_t size, + enum pci_barno bar, + const struct pci_epc_features *epc_features, + enum pci_epc_interface_type type, + dma_addr_t bar_addr) +{ + size_t bar_size, aligned_mem_size; + struct pci_epf_bar *epf_bar; + struct pci_epc *epc; + dma_addr_t limit; + int pos; + + if (!size) + return -EINVAL; + + limit =3D bar_addr + size - 1; + + /* + * Bits: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + * bar_addr: U U U U U U 0 X X X X X X X X X + * limit: U U U U U U 1 X X X X X X X X X + * + * U means address bits have not change in Range [bar_addr, limit] + * X means bit 0 or 1. + * + * bar_addr^limit 0 0 0 0 0 0 1 X X X X X X X X X + * Find first bit 1 pos from MSB, 2 ^ pos windows will cover + * [bar_Addr, limit] range. + */ + for (pos =3D 8 * sizeof(dma_addr_t) - 1; pos > 0; pos--) + if ((limit ^ bar_addr) & BIT_ULL(pos)) + break; + + if (pos =3D=3D 8 * sizeof(dma_addr_t) - 1) + return -EINVAL; + + bar_size =3D BIT_ULL(pos + 1); + if (pci_epf_get_bar_required_size(epf, &bar_size, &aligned_mem_size, + bar, epc_features, type)) + return -ENOMEM; + + if (type =3D=3D PRIMARY_INTERFACE) { + epc =3D epf->epc; + epf_bar =3D epf->bar; + } else { + epc =3D epf->sec_epc; + epf_bar =3D epf->sec_epc_bar; + } + + epf_bar[bar].phys_addr =3D ALIGN_DOWN(bar_addr, aligned_mem_size); + + if (epf_bar[bar].phys_addr + bar_size < limit) + return -ENOMEM; + + epf_bar[bar].addr =3D NULL; + epf_bar[bar].size =3D bar_size; + epf_bar[bar].aligned_size =3D aligned_mem_size; + epf_bar[bar].barno =3D bar; + if (upper_32_bits(size) || epc_features->bar[bar].only_64bit) + epf_bar[bar].flags |=3D PCI_BASE_ADDRESS_MEM_TYPE_64; + else + epf_bar[bar].flags |=3D PCI_BASE_ADDRESS_MEM_TYPE_32; + + return 0; +} +EXPORT_SYMBOL_GPL(pci_epf_assign_bar_space); + static void pci_epf_remove_cfs(struct pci_epf_driver *driver) { struct config_group *group, *tmp; diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 2e85504ba2baf93827224884ca19ae2bd0e6906b..d2cdcc06d366ce61db0d7633105= 965e50cb49a7b 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -242,6 +242,12 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t = size, enum pci_barno bar, void pci_epf_free_space(struct pci_epf *epf, void *addr, enum pci_barno ba= r, enum pci_epc_interface_type type); =20 +int pci_epf_assign_bar_space(struct pci_epf *epf, size_t size, + enum pci_barno bar, + const struct pci_epc_features *epc_features, + enum pci_epc_interface_type type, + dma_addr_t inbound_addr); + int pci_epf_align_inbound_addr(struct pci_epf *epf, enum pci_barno bar, u64 addr, dma_addr_t *base, size_t *off); int pci_epf_bind(struct pci_epf *epf); --=20 2.34.1 From nobody Wed Oct 1 21:24:15 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010014.outbound.protection.outlook.com [52.101.84.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 110A1296BD3; Tue, 30 Sep 2025 20:40:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264808; cv=fail; b=KP1kiVMiXQqL8Z2TK3tTgeKEd1eEGjqQO82Qzi+cirj1Spmf9aQWzOLiF8E2RFpi3+17RkGJvrri76jrtMbS/jeYb6dj56K2AHCJjnUqMQF3GpU1oN+BRCCNtxlUzRnOiCpCUye9ajoVIRl7qaK89UW6wDhwK7joY5eC/tsAZjQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759264808; c=relaxed/simple; bh=OmjgalyMEz/bjO/mA0S3/047Me4ZtIMWQT+5JXdTrSo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=UG5nmug08iopKMb1WVmK8NEi2IUNk3RQPUmhAu3zV66DzSHyu5g3gq4n/CH03BcEoa0fIz7haWczqmnqCiiXSz71Ofun3Vi/YpiZWozVnHwZWB7oDfn/00VF7S4Y1AtbQJEjJ9EB7ztTii+o3s5UQweLlKM75BtWg3pG/PtDkow= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=YXA3xAJ5; arc=fail smtp.client-ip=52.101.84.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="YXA3xAJ5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RsZ65J2sgEenfj04q/U8OthUjKTQzaOt3gETU+TlIQxs4cJzPje699CD6SDhv5EH2dZ7snMK8btJZj1fZEh8tcrn5Ir8fT0W6sTEfZ6XpXqts089reEs757wY709uio55COqJ2SsiT81PFLpBmo8+ULdmN98Gs7S65uLzdRdVVLSbA/X3A/s/RXpaqe5LcjBeRkNWYraEFSCp9jMMOosK3sXExM75TsHAJHqoyxv9TYak6uL2Qd5TPHg4glMJkB0W2yGiFT/zJo2g5JH9VZ+QpO9/pDmu9zCtiGFiRoX5j8SKz9SCW/5zzP8b6xkxjsyWB3A2U/Y8NhzeUcEAiOmHg== 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=poDyOzGHkRUTlXAq3G+fe8PxDKzcy6duwGMjdYdKS1E=; b=oRPJz9GCUZ2CE4O1X4RlLRp5UpvrV+bpHSjqsMiBs8IyIL1m4e7Ks3bKmpAWcF6Z4F07ptmRr1JXXUGPqgRQY+TVnJBf1NBP074jKutclfyKk49mYqlPv7ysPqgcQ41oy3WJLVpKJMmXcawHDETaQOq/8PzcXAbEjxN4XuOEDCcsKLS25oZEzIDLRwqWgkLTnBKWIMXB4lDDFS/+50eixOPYHEa9bQgmLjsIPVDpn2p+7SN/cPwzuaCzYj+o2trVjSArAoCNFNIIhN+e+cMQQHCmbtXxqtKzwrvO9zdjorurbMX3lkFQEde7/5+pxIYGeDYwh7YpWOy14Si3ajn5uQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=poDyOzGHkRUTlXAq3G+fe8PxDKzcy6duwGMjdYdKS1E=; b=YXA3xAJ5KwTisDi7STO50+6M3gk6kiBoNd+1875kkSnASQ2o5oejemEkb8yi3/fYPLyPIL5KN5hveCg/laR31Y64YrAf+i9hM8ZcNggb9kxZYDsP9NccHhv36IYM3ttVoIEHR2zcvkl8hWwjLTvCWKqccxPg8YG1PK9cQEDu0TvfeEoSjD+KUOLGj/r3moWILs1bGg4NKloxqGXfaTU4gW8uBZeWEgJdI6xzlKLHcKwukiEHQJ+7528u9FkOwcrYMfVac+QjfOYllyFvchRjcR0OXzqXNhE5ltwk4n92+MSBryFmZUvuAinOloUu7GAeBdtDoSTvZvevdCeVxcwVUA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) by DBAPR04MB7366.eurprd04.prod.outlook.com (2603:10a6:10:1a0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9160.17; Tue, 30 Sep 2025 20:40:03 +0000 Received: from PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15]) by PAXSPRMB0053.eurprd04.prod.outlook.com ([fe80::504f:2a06:4579:5f15%6]) with mapi id 15.20.9160.015; Tue, 30 Sep 2025 20:40:03 +0000 From: Frank Li Date: Tue, 30 Sep 2025 16:39:39 -0400 Subject: [PATCH v4 3/3] PCI: endpoint: pci-epf-vntb: Add MSI doorbell support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250930-vntb_msi_doorbell-v4-3-ea2c94c6ff2e@nxp.com> References: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> In-Reply-To: <20250930-vntb_msi_doorbell-v4-0-ea2c94c6ff2e@nxp.com> To: Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Jon Mason , Dave Jiang , Allen Hubbe Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev, imx@lists.linux.dev, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759264791; l=7547; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=OmjgalyMEz/bjO/mA0S3/047Me4ZtIMWQT+5JXdTrSo=; b=seP9sSsCEx2JmKr0J12wEcioBdHTuAV6K9pTjW9U7ylHUZ1nb4Ik/K3giaGbFF0G8B+Xqn4LO +XgxbaHEVwgBaMkE2DSDd6wkWddhTtNHIiM67tNkPmWKll0w7Z+fZXT X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8PR07CA0046.namprd07.prod.outlook.com (2603:10b6:510:2cf::24) To PAXSPRMB0053.eurprd04.prod.outlook.com (2603:10a6:102:23f::21) 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: PAXSPRMB0053:EE_|DBAPR04MB7366:EE_ X-MS-Office365-Filtering-Correlation-Id: dbe52d50-a735-42b3-7b57-08de006187fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|52116014|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?V1pTR2NuMDB1Q2U3MUgrTk10bEFUQkJJa09Od3UwcTJjSGJTUkdQUlJjVHlo?= =?utf-8?B?MDN5R3AxS2NDVWRNK3pzV0V2ZkZHNVRabGpKS0Q3MmJIR21xYndJU3I1Z041?= =?utf-8?B?VHo2YkQrVEdUdGJqaU1hZERlNGtqUzAyOVFWSytObUMrbVVZQTFsNTNrTWpp?= =?utf-8?B?RnpRVmo1Q1JHdWc1YVNIbmVPMUp3RE5Wb1VWUHUyTE9MU3FrS1N6U01jSXVy?= =?utf-8?B?VmhhWVl4VFVoQW1KSEc3SVV0bDdDZW5TTkI3V3lJNUlJcnk3U0gvTDZMV3FR?= =?utf-8?B?ME8wSFFTQzhqS0JxM2VQblVQSStoMDNWQzlJRWNpOWFKMnI3NXVkZEJSQVY2?= =?utf-8?B?MjQ2T0ZIK0psbWJCUGI2b0hqc05aWHJqSWhGZk9oNGlja3hJOFhOSmFmeUEz?= =?utf-8?B?YXplK3dGYmg3d3Q5Qm1ITC9hd3pET3pWTXZhOGc2TENnR2F1dnpuaUZGY1B1?= =?utf-8?B?TjEzYWd2R0kydDdaajcxV2dKN0lkTWszUWdzSC9JTkJySkNsYWdUa2JOVGZ2?= =?utf-8?B?bnVHQjdFaC9XM1NJOVhRclo1aWdNb21jRXVsb1BNZk5PR2FGU3F2MUFVYVV1?= =?utf-8?B?QUVScEJmZ3RYSkxNVkVFbTNUVU9RVXZ0VkVHa0V0WWNjVnp1QVNZQ0VWZC9M?= =?utf-8?B?WWJBZnZDUEhJRnA1VjZMQmttM1BITUoyZWhXTElrU0crUTBLdkRFVVJDY2ta?= =?utf-8?B?bEZDUEpOWVh1a0lJTjN6Sk03M3FCUVgwNmJURHRRcWVSS0xDTlZMa01CYWlm?= =?utf-8?B?WnRWb2xHQXgyZFJQejdVcklZSFlSUGpSWGtTK09zbmtsMWd0WjJtOUIvN05O?= =?utf-8?B?YWUrSHozejJRUFB2RFFSL0k1UEVRYTBrbllZaTVRL1ZnUGNkYmIrOFl2UEN0?= =?utf-8?B?VUdZeUVrUkdoYnpZaDg1TFlUZmQ2bXIwcnZOTHpUOFlYVDQyZzNoc0ttekdX?= =?utf-8?B?U3ZxSGM0R2pBb3o5eGdlaDRTay9kYk9rT2xDZVRGS2tpd3V3eitDdWNRV2RM?= =?utf-8?B?b3dJdmpHTXRudENJSUsrWmsxaG5GZk15OWNpSUNCcC9WSmhaR05uOFlpZDRE?= =?utf-8?B?cFYyQkJWZnk2cUxDSjZzeEZucmdqeG5PUnVjbnp1TDdNYWtXOHdtRzFDY1BU?= =?utf-8?B?OXVyUzFRR2tjVWV1OU1mbDlDOThodXBUaU1tTStxam9WN01wNFdsTi9zODk0?= =?utf-8?B?T29lS3Mwc3YxTm9NNXY5N0JZMjhTMnIyYzVWVXQvRUdrMXNaZ2RldFRmTWl6?= =?utf-8?B?RkRzWVhUbXNSRWJ6WUpHVUg1QjBPbHZldWtsQ0FvbXVIbUMwUzNXYXRGMWVW?= =?utf-8?B?d0V6b0lnS3N2V1htQVFIVFVyd2RrWmpEMHo2K1pjQStqdUNaSG5ZVnQ2ZWZD?= =?utf-8?B?QTYyQ3pRSDBySnlRSGtjZmhxL3FZUUNIaS9yRlBtdXNGMGV1Sisvanl4cEFF?= =?utf-8?B?NEsrcVlFL0VPdHF5ZURMemxmQ1hFTEFzU2NjbE9QS3huT1ZRbkZ0ZHRhbzZS?= =?utf-8?B?RW51Uzl6RDFOYXltQjA3SEpOYjdjdlNkam1SbGxiR0JqUEcwclcwK29aZUM1?= =?utf-8?B?dTlqOWNrWkVwbktQbk84dldpeUNPeHFHT2IwUDlyUnhPdWp6S1gxMFpwMjlC?= =?utf-8?B?ODQrZWhaVmx6NEltd2VCMDV4TnI5eUpCaTlzalZYRXhnWTdQMjB0UHF0TnNn?= =?utf-8?B?RkMvUGdUYUlCbGNDcWF2Rnk5RWtYZ29RTHFnaUdQcVdCbHEvNGtaNitiRmd4?= =?utf-8?B?aytBbFJ2U3hEOFVOYXNHRmRucXJtYnpKWXNSVWphbDNpUS9HZm1wMmFUdW1F?= =?utf-8?B?RWJ4SkgxTDcwbG1iWVRsTmh2V0dyL3p6ZGdIVVFsM0VTV0QrZTl3S3o3c1BV?= =?utf-8?B?Z01mbkNwL0E4dEZESnh0eXZIWk1SdkpUb0h3cEgwSWlWMjlGQmJNc0ZXMStV?= =?utf-8?B?UUhxREpXNWxGMHBXcGhLcDlYcG9ocFVlZTFEcmg1TklOampwanUwZDJZNStv?= =?utf-8?B?OFh1dTEvRUIvcGRKU09pYzRtMXhrU1Q5bXlscG1MZlNKeUdHZngyMW05NEhu?= =?utf-8?Q?p3r/ZU?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXSPRMB0053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(52116014)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dFhWT0Jud05RTlN6c3d2d3ptZWU4akN2cmk2S3BNeTBHalJxSnJaL0E0bmxC?= =?utf-8?B?c1NjUmtiVmovbk9UTmNnMnQwRy9oK093TEdZbjBXUFdCU1FSNzdMajVGY0pP?= =?utf-8?B?Z3lhNWZZekkwSlpkM0FYbmovREpWS0lMZDZRZVAzWEE1MlNaMk9Ea3lFK1R4?= =?utf-8?B?aW1pSzNVUkNMbWNFVnBOeHIxVEFSOVVNWGZBVnNmOXViWTZSaDJTeHVIZm43?= =?utf-8?B?NEozbVllamdvTzVRRVZkVGwwMGd5aWxiSElsNWhmM0hMa2N2aEJvQ05jQWZl?= =?utf-8?B?c0F5WEJkSTBVSmIzeVUxSGgxYlFQWVBBem9uL1diU25VdEVuOVNrVDR6RzNv?= =?utf-8?B?dDRVWG1BRXlWdGcxQ0sxWGxvVlN3cGNlYjhIdWtFaW9yVkRsTlFxOXh6VU9t?= =?utf-8?B?M2d4QWh1NVlLQzg4ZUJGc3gzUkxyYWJxczQ5UkJSNThMWW5VME52UjQrVHI3?= =?utf-8?B?UnRTMWFGRXNyOVV3WHNxOW44STZoYUR0NnV2YVplYzZuQTNWTDZKdFd3YnVw?= =?utf-8?B?c2h5d2VGSEJXZjUvYlJzUVJVOXR6bDRUWWxEY0g4cm5sMi80am1kcC9JU1Ey?= =?utf-8?B?ZTdCR3NXSFBFTTRNeHhHbnhVdnFtWDMzdkVUTW9vZktJdkVnSDVvaEZMU0dM?= =?utf-8?B?MmNMVzNyODNUeHpGemRHa2crMzhLWVg2NkdheXFlSEllbXJ2VnZJN3BxK0x1?= =?utf-8?B?ZHBJSlVHR3NWYW9JT0ZNZzdvZ1pTVC9WaXdzTGNpWmR3dUJKYmtxcklST1Zy?= =?utf-8?B?b1ViYjl2N0F5VjdFMW1DaWJTU29XVCtvYnJ6bm85SGthNDZmS1NwV2lFOFdC?= =?utf-8?B?aHRoODRJamszenVYTUpIdUpUMW42QzA0YW40VVVmSHl1d21HcEFsTFY5RlE5?= =?utf-8?B?blJUcWdaVFRwalozTUhhakkrV2VJRlpiYkpJbXM1RnBxVEFGbDRnbFBQQVpH?= =?utf-8?B?RUdrbjRzcHQyamsybHFrLzlJcDBXS2hRSWZFM2VFYkVIRm1lbHN5R29yRno0?= =?utf-8?B?bDNuNXZFSHBUQ1M3czA0VzhPUWlGVWhxK2xqRFJnQVp6THM0aDY4T0xibXZV?= =?utf-8?B?S2JBenVBNnZsb1dDNTNzSFJjdHBBQjdoVE5iU0dUdThaUmQ4ZzhGclg1MHRY?= =?utf-8?B?c1dqUUdZZDllaGdWOEl3Wkx1ZlNCTjZQc1YyQ1FpYnVmS1paUGZWbkRVN3VF?= =?utf-8?B?RldXODVEREd6ZFpXK3NqOFhEQ0hnOE85emdOYUx2RGUvL3kwSGs2ZEFiVzJ2?= =?utf-8?B?YU14M29SL212eUxGUDYram1ZWkw2RFo2MnkxMmdMN2UwbHFudXgwYXNCelQx?= =?utf-8?B?RzdOYWo0cXV0MzNSV3phMkhOYnVXVHBQOUJUUGtZV01veXNwcHdoUnV6cHRs?= =?utf-8?B?Myt2SDl5eGYvZzI5VUo1WlVTNzRiZ0hQeTQ0TmhWRURMODBudWNCK05hcVda?= =?utf-8?B?SDg2d1d0VFliQzF5eHQvVmRDdHZxMVpaL3BRWFRCTzFMRVNCTmxyRTlnZC9q?= =?utf-8?B?c1hnL0NNQkk5SWxSRTVSQ0F5Y0xZNGthT3lRUnNNdEw0cktub3BwQm5ZWDZL?= =?utf-8?B?OE1COGYxQkVtbmtPeG13YXg4NStPc1huZjJxRjlwUmVDUmFTbnJJOTY1VnBm?= =?utf-8?B?UUJuOFNtM2Z3VjVldHJxaDg3aEhyZGdIcExFMmVucHRYb0tkRzdjTlhBV2tC?= =?utf-8?B?WGNCV3VJN043K2E1ZTdWN080ZnVMZUFwSHU5di9FejNjTEY2c0hDdStUZm1H?= =?utf-8?B?MVlWaGRBZDB0dmpEd3BLMWpMOXMrMmZlQUE4QTZZZVBGVXRQeFhSS1BQMzBm?= =?utf-8?B?RUlDdk5jZW5NY1M0VlBLZW84TkpUM2xoSGtoOGpWdDk3YnJNRk9xckw3d2NI?= =?utf-8?B?cU9zVjJNZjJ1a01tc3hsQmVwcUJkRFdDbXJURmdsNkdsVkF0UXJuZGNlV1NW?= =?utf-8?B?TjQvWWR2QThlMHp2ZzhvVjJCYW9kblYvcC9UeDRjcHp0SWZvYXlpSGxpQ3VZ?= =?utf-8?B?ODY1dG1MQ2o3T21FM1NTeW5HQ2cwUzVUdHJQc2lEenVCdmo2aXk2LzlKcGNt?= =?utf-8?B?bzMyUENRUzM4b1lrMTB3L21OWUlRV3hpTVJlU0pMeTlwUnVXdEg3VWthVHhy?= =?utf-8?Q?qpJmpMEWZOBh1IW0V4bSvp/TW?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbe52d50-a735-42b3-7b57-08de006187fe X-MS-Exchange-CrossTenant-AuthSource: PAXSPRMB0053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Sep 2025 20:40:03.1080 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TxMqVg+QXqRNqCCBHCvy9LI2+/YttngcrmQhNzaGbcTs4EbLWuJwnwg2yq6V5yaUYVJfJN7oql6a35nrEjMncg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR04MB7366 Add MSI doorbell support to reduce latency between PCI host and EP. Before this change: ping 169.254.172.137 64 bytes from 169.254.172.137: icmp_seq=3D1 ttl=3D64 time=3D0.575 ms 64 bytes from 169.254.172.137: icmp_seq=3D2 ttl=3D64 time=3D1.80 ms 64 bytes from 169.254.172.137: icmp_seq=3D3 ttl=3D64 time=3D8.19 ms 64 bytes from 169.254.172.137: icmp_seq=3D4 ttl=3D64 time=3D2.00 ms After this change: ping 169.254.144.71 64 bytes from 169.254.144.71: icmp_seq=3D1 ttl=3D64 time=3D0.215 ms 64 bytes from 169.254.144.71: icmp_seq=3D2 ttl=3D64 time=3D0.456 ms 64 bytes from 169.254.144.71: icmp_seq=3D3 ttl=3D64 time=3D0.448 ms Change u64 db to atomic_64 because difference doorbell may happen at the same time. Signed-off-by: Frank Li --- change in v4 - add check of return value pci_epf_assign_bar_space() change in v3 - update api pci_epf_assign_bar_space - remove dead code for db 0. change in v2 - update api pci_epf_set_inbound_space - atomic_64 should be enough, which just record doorbell events, which is similar with W1C irq status register. --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 152 ++++++++++++++++++++++= +--- 1 file changed, 135 insertions(+), 17 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 83e9ab10f9c4fc2b485d5463faa2172500f12999..6e48a1efe1eb267c4c80c7c09fe= 1c6f73c7ccf44 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -36,11 +36,13 @@ * PCIe Root Port PCI EP */ =20 +#include #include #include #include #include =20 +#include #include #include #include @@ -126,12 +128,13 @@ struct epf_ntb { u32 db_count; u32 spad_count; u64 mws_size[MAX_MW]; - u64 db; + atomic64_t db; u32 vbus_number; u16 vntb_pid; u16 vntb_vid; =20 bool linkup; + bool msi_doorbell; u32 spad_size; =20 enum pci_barno epf_ntb_bar[VNTB_BAR_NUM]; @@ -258,9 +261,9 @@ static void epf_ntb_cmd_handler(struct work_struct *wor= k) =20 ntb =3D container_of(work, struct epf_ntb, cmd_handler.work); =20 - for (i =3D 1; i < ntb->db_count; i++) { + for (i =3D 1; i < ntb->db_count && !ntb->msi_doorbell; i++) { if (ntb->epf_db[i]) { - ntb->db |=3D 1 << (i - 1); + atomic64_or(1 << (i - 1), &ntb->db); ntb_db_event(&ntb->ntb, i); ntb->epf_db[i] =3D 0; } @@ -319,7 +322,21 @@ static void epf_ntb_cmd_handler(struct work_struct *wo= rk) =20 reset_handler: queue_delayed_work(kpcintb_workqueue, &ntb->cmd_handler, - msecs_to_jiffies(5)); + ntb->msi_doorbell ? msecs_to_jiffies(500) : msecs_to_jiffies(5)); +} + +static irqreturn_t epf_ntb_doorbell_handler(int irq, void *data) +{ + struct epf_ntb *ntb =3D data; + int i =3D 0; + + for (i =3D 1; i < ntb->db_count; i++) + if (irq =3D=3D ntb->epf->db_msg[i].virq) { + atomic64_or(1 << (i - 1), &ntb->db); + ntb_db_event(&ntb->ntb, i); + } + + return IRQ_HANDLED; } =20 /** @@ -500,6 +517,93 @@ static int epf_ntb_configure_interrupt(struct epf_ntb = *ntb) return 0; } =20 +static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb, + struct pci_epf_bar *db_bar, + const struct pci_epc_features *epc_features, + enum pci_barno barno) +{ + struct pci_epf *epf =3D ntb->epf; + dma_addr_t low, high; + struct msi_msg *msg; + size_t sz; + int ret; + int i; + + ret =3D pci_epf_alloc_doorbell(epf, ntb->db_count); + if (ret) + return ret; + + for (i =3D 0; i < ntb->db_count; i++) { + ret =3D request_irq(epf->db_msg[i].virq, epf_ntb_doorbell_handler, + 0, "vntb_db", ntb); + + if (ret) { + dev_err(&epf->dev, + "Failed to request doorbell IRQ: %d\n", + epf->db_msg[i].virq); + goto err_request_irq; + } + } + + msg =3D &epf->db_msg[0].msg; + + high =3D 0; + low =3D (u64)msg->address_hi << 32 | msg->address_lo; + + for (i =3D 0; i < ntb->db_count; i++) { + struct msi_msg *msg =3D &epf->db_msg[i].msg; + dma_addr_t addr =3D (u64)msg->address_hi << 32 | msg->address_lo; + + low =3D min(low, addr); + high =3D max(high, addr); + } + + sz =3D high - low + sizeof(u32); + + ret =3D pci_epf_assign_bar_space(epf, sz, barno, epc_features, 0, low); + if (ret) { + dev_err(&epf->dev, "Doorbell BAR assign space failed\n"); + goto err_request_irq; + } + + ret =3D pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc= _no, db_bar); + if (ret) { + dev_err(&epf->dev, "Doorbell BAR set failed\n"); + goto err_request_irq; + } + + for (i =3D 0; i < ntb->db_count; i++) { + struct msi_msg *msg =3D &epf->db_msg[i].msg; + dma_addr_t addr; + size_t offset; + + ret =3D pci_epf_align_inbound_addr(epf, db_bar->barno, + ((u64)msg->address_hi << 32) | msg->address_lo, + &addr, &offset); + + if (ret) { + ntb->msi_doorbell =3D false; + goto err_request_irq; + } + + ntb->reg->db_data[i] =3D msg->data; + ntb->reg->db_offset[i] =3D offset; + } + + ntb->reg->db_entry_size =3D 0; + + ntb->msi_doorbell =3D true; + + return 0; + +err_request_irq: + for (i--; i >=3D 0; i--) + free_irq(epf->db_msg[i].virq, ntb); + + pci_epf_free_doorbell(ntb->epf); + return ret; +} + /** * epf_ntb_db_bar_init() - Configure Doorbell window BARs * @ntb: NTB device that facilitates communication between HOST and VHOST @@ -520,21 +624,25 @@ static int epf_ntb_db_bar_init(struct epf_ntb *ntb) ntb->epf->func_no, ntb->epf->vfunc_no); barno =3D ntb->epf_ntb_bar[BAR_DB]; - - mw_addr =3D pci_epf_alloc_space(ntb->epf, size, barno, epc_features, 0); - if (!mw_addr) { - dev_err(dev, "Failed to allocate OB address\n"); - return -ENOMEM; - } - - ntb->epf_db =3D mw_addr; - epf_bar =3D &ntb->epf->bar[barno]; =20 - ret =3D pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc= _no, epf_bar); + ret =3D epf_ntb_db_bar_init_msi_doorbell(ntb, epf_bar, epc_features, barn= o); if (ret) { - dev_err(dev, "Doorbell BAR set failed\n"); + /* fall back to polling mode */ + mw_addr =3D pci_epf_alloc_space(ntb->epf, size, barno, epc_features, 0); + if (!mw_addr) { + dev_err(dev, "Failed to allocate OB address\n"); + return -ENOMEM; + } + + ntb->epf_db =3D mw_addr; + + ret =3D pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, + ntb->epf->vfunc_no, epf_bar); + if (ret) { + dev_err(dev, "Doorbell BAR set failed\n"); goto err_alloc_peer_mem; + } } return ret; =20 @@ -554,6 +662,16 @@ static void epf_ntb_db_bar_clear(struct epf_ntb *ntb) { enum pci_barno barno; =20 + if (ntb->msi_doorbell) { + int i; + + for (i =3D 0; i < ntb->db_count; i++) + free_irq(ntb->epf->db_msg[i].virq, ntb); + } + + if (ntb->epf->db_msg) + pci_epf_free_doorbell(ntb->epf); + barno =3D ntb->epf_ntb_bar[BAR_DB]; pci_epf_free_space(ntb->epf, ntb->epf_db, barno, 0); pci_epc_clear_bar(ntb->epf->epc, @@ -1268,7 +1386,7 @@ static u64 vntb_epf_db_read(struct ntb_dev *ndev) { struct epf_ntb *ntb =3D ntb_ndev(ndev); =20 - return ntb->db; + return atomic64_read(&ntb->db); } =20 static int vntb_epf_mw_get_align(struct ntb_dev *ndev, int pidx, int idx, @@ -1308,7 +1426,7 @@ static int vntb_epf_db_clear(struct ntb_dev *ndev, u6= 4 db_bits) { struct epf_ntb *ntb =3D ntb_ndev(ndev); =20 - ntb->db &=3D ~db_bits; + atomic64_and(~db_bits, &ntb->db); return 0; } =20 --=20 2.34.1