From nobody Sat Oct 4 12:44:49 2025 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011027.outbound.protection.outlook.com [40.107.130.27]) (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 8E28C25F78D; Fri, 15 Aug 2025 22:21:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755296506; cv=fail; b=lY1RtID9x8eKRtWRTe+tFAWPeE9xOh4yb/zqTnt8rAN+oIIIDzrkArqrdmY7CIYK07tyKLjKIPq/LUtw4LT9Hc/5ROw1sGf0joT2BlH1UdlNMD1AJWyemu/UIhUUfhFG9dMLRdpjMvDaLTkaRWoXEKAwsoNFGOKw3F3M9bViM70= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755296506; c=relaxed/simple; bh=/ewaBgqKg6QF6pAR/4LoDeeqxxh8vtU9sJ3wJAtWxT0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=QUxRtWsr3RRP2Jk5CSE7YAwNCRk5QyfA2W7Y22nJWQMnAFwm7AJdbdp9zeAag8Cr1pamRmQCjJ6IQytkHMLny+jWMp6Ob+hG4fw+JvMzaK0mS283IMErTCSG2Yl9nHrcqW+K/2t549C5cCmSFM/RWdEohcMmlunyMt7oqoG/aos= 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=iQuLBdHb; arc=fail smtp.client-ip=40.107.130.27 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="iQuLBdHb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zCgUlmecbNZHQ8b8hKrKFkKjR6nK4lrgSYcddnRlFj7SBfZH9oluEyLFKKPUlJb9VTYFF8c2Zr4FEgN4Nl6cN4QGS7TWlcQ/o3P9vm04TQ3FC1EDCh6ChWygcu65tLVa0E/lcWZ6+Dm5QIJU7Asyscg1XevlClku4KPBpuFSOkebu6+2y+8GyBBB5TU4FzodcUUSkRA3vf+Y9z1Yu4NkX5E/OmMAA1VjW+CE4otX2ppuag+gzQnFCFv+goMr5viuiAg4fuIsjixAzI/t12SkFIULPYEAPayfiWzT9+AFvp0zzouvhMPOYz1/ALlFNK3UVjpDQ/itKcN/DFMMtScidw== 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=LNs/TkenyD23bp8b/i+p0+nsz/9eDvM2Wmg6eh6cuIM=; b=h/X6TTFNk/tiTGEco6jsH45k47K4Pwze/qPvcHrft0msQSBCPKTxBMYCIKk3rOKaInSVN0EF7Qp+W0isK2Xy/LLX8q+vgJypZ7hMPrReQyAHVkkDiYni59jZ7nfMNdLNNIplOwhyqbBzMB+xUOSVAJ03DblK3bK5I/7drEqHCl6ZL4b5CHp9J3jhHRG2ZqgHV9N++qKDQFZj6pKTflq6H/BPXlbhRA3Gnhxj+EVuJa+1MajpJIaW2kOd2x4mLBoIo8tub5fl25pi8da9NW3mSq4hJt+0ILKfb4L0F5FClRXVqTRuZIowm9w+udRgj9TWAvZXhyDHlaJm+j6AI3WXOw== 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=LNs/TkenyD23bp8b/i+p0+nsz/9eDvM2Wmg6eh6cuIM=; b=iQuLBdHb5WlDgrN5YCvGVIK3aGXxWUtgIYaikFbs6dnrl7YISx4gXE//XWAJMgyD4NX39+C+mduwvv9+oG7+zmi0NWxtvTT/oRk8WTm3X1b31R8IhN5HJFbum4lgLd2kPLQS/vGBWTI32btD1ACEMg+VQdpx6atvNJWADkvbAgvEvwslhQLn0i0gUfMS6yEzDOma3emu1tfp8dbYpjI4ZmIqL3sTawwbo2ZDqhKUe2dLlOPJ0ulPvPQA78e5wdujtG1IsDtUIPRaG1nV3zxVfwV62ztAloqTzALUndGcOhnYwgnRhzFz/C0ff2lCiJPfh2ZOSIMWclp/HfrFsgEjKQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by AM7PR04MB6949.eurprd04.prod.outlook.com (2603:10a6:20b:102::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.12; Fri, 15 Aug 2025 22:21:41 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.9052.006; Fri, 15 Aug 2025 22:21:41 +0000 From: Frank Li Date: Fri, 15 Aug 2025 18:20:53 -0400 Subject: [PATCH 1/2] PCI: endpoint: Enhance pci_epf_alloc_space() and rename to pci_epf_set_inbound_space() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250815-vntb_msi_doorbell-v1-1-32df6c4bf96c@nxp.com> References: <20250815-vntb_msi_doorbell-v1-0-32df6c4bf96c@nxp.com> In-Reply-To: <20250815-vntb_msi_doorbell-v1-0-32df6c4bf96c@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, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755296496; l=7383; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=/ewaBgqKg6QF6pAR/4LoDeeqxxh8vtU9sJ3wJAtWxT0=; b=xph1MA24fu5oqRB6unkO33bhPNNNkL7P+/n5HQJJcmZ1KsTIMejTrQsthb6a7YY4Gav2y04+S hZGa9YrYgZ2A3jwHLCJX1/qvv9wR4hTdYgi7SrgP1j4RO01vKu4AjAJ X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8P220CA0029.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:348::13) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) 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: PAXPR04MB9642:EE_|AM7PR04MB6949:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f47be6e-b2ef-4379-70cf-08dddc4a1c1a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|376014|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cFVNaDhHVEJDWHlzY01pSHdxQXNTckhCOHo0R2xQcUwxVjczelk4MWRMS09I?= =?utf-8?B?UlQ4SzlJME9mWTl0Z084Z2RMOHFKT1g3d1JqdzNIZHhOOVFFaDRxVy82R2lv?= =?utf-8?B?VmVYYmJsKzZUaHU3bjFkeFFwUCtEWFk0U2FXQTkwQVYybUVTUGlwQnVXZ0VP?= =?utf-8?B?ZlIvaldibG5HUVJRdGtyOG03bSs2UUIxVlR0VytzeTdlZ1g3WTBrYzBDRzZo?= =?utf-8?B?TU5SY0kxQmNWYncyS2pMb3hKZ1E1R1NjalN1MWZKRXArMW51UFRCTW1id2NE?= =?utf-8?B?K0lZOWt5OFBTZDRiOUF1aWRVaDV1OC9VQmZGaHQ2OGZTaG1UMitmOU8ra0Rn?= =?utf-8?B?TUVQNEdnUXk4K1htQll2aEFuV3puQlZFODIxZG5uakZWRlpzdXhrekZWT2RO?= =?utf-8?B?R0dYWFViQ2Y3OWtJOENGRGZBaHdJTXkxTVprUHNoZktMSmV2V1NyV2ZJSjhW?= =?utf-8?B?aE1VYWtFb2R3VWtXVmZqdHV3VVM2OEptdm1QWC8zT21hM0p4Z2QvT0NzUzFH?= =?utf-8?B?Q0NUeFV3aFYvWHpuODRuNUdWWlVseEVoUEk4cmJseTRpODR6dUFOSGg3M3VW?= =?utf-8?B?WEJhcHQ4L2dqaG00QlpNRkpiMVVIT285NFNGejhiTmxXOFVnclVMaU1ucU13?= =?utf-8?B?TUpGRmNxOTlLdzJQNGR2MVJ6eEJtbkUyQkJ3cUNjOGVHZjFwR21vYnJkb21Q?= =?utf-8?B?VENpeURrVllOelU4Q1paWEdabVdGdFFsTVNsaUsyaHR4alRsczNtM21DQ1BW?= =?utf-8?B?WG1RelJZN2ZlNTlza2dhUlVSZ2ZoZVE3a05uRys4Tm5aRnozeUZIWnYvK05K?= =?utf-8?B?RjZwYmZrOVZEZXdGb3lWUWtTcjZzdHFkVXFORkdYL0V6YUZaL1h4Q0YxMGxv?= =?utf-8?B?UnVFV2JOdEF6NVorQVJhY005b1hqbWtIZW9kbktRZloxOWZURnNQS3M3dFJN?= =?utf-8?B?MlZMTGsvUnp1OXp5cDBndFBHdElUdWU1MXI2b28wMVZ1M1BkNXVIY3JJN3Nq?= =?utf-8?B?elNlVk1ZSEd4RFEzNFRXaThBUmNHY2FPVG0wVlZ4QStQQVBOYkZYUFh6a1FH?= =?utf-8?B?dkhURmJYc0dzOUptT1dRd09pOGJLMUdxK1VQZ24xaWp0ZFdIWlkvOWpGWXJ3?= =?utf-8?B?NmpJdHBRVG1iVzJ5VjlCL3VSZG5tQ0hKZlZ4QmhtVTN5NjVmN29TTDhFdHcr?= =?utf-8?B?S0Uxc2hFdmZjTmEvb1AvMll2ZXJYRVZIcEMvZzNKdmV1dlN3L0FaR0lNL0Uz?= =?utf-8?B?dWJuSHF0MWx2UGlUd2xxNGRUY05HQ0MzT25TT1lGWjdjQUNoamdRQzJ0TDZG?= =?utf-8?B?R1BDRGlsaTI3dWVPd1RRKzJNMGpHdEhtMEZnM08vUDdiaXIzS2l5cWM1anpS?= =?utf-8?B?K29wTFVMTktGVitUbWc2OU91V3VZQlFGR1pGZlZrbFVWdGRVaHgxcmlwWTZD?= =?utf-8?B?MmdjQlhLUTc5WnIyVTFaVndaYmpuUVBLSzZGV0taTURDWWhmVzk0MFdiRHFQ?= =?utf-8?B?OEFWV05zUkVydDFFL3VFckNiQUhzYjlxMGxyNkNjZ24rbVRlUVRFbWh2Z24z?= =?utf-8?B?NzZIcUs2SnBXMU96NldpNnJCd3diRnBYSGNOZU9NRlFGUm9Nd21veGNqcmY3?= =?utf-8?B?SnA1cUp0M0l0azEwN1VSS1QwbGlaUkJwQjRrVmhJTjgyZVFLZHlvd05WclhG?= =?utf-8?B?Wi9OZHE1bE1EWmJWNDRZLzRBR3E0OFBObGh2Y2ROdmRBSE9OTW55alREVWdP?= =?utf-8?B?UHd4YjVvREN2NFV3ZEhHeWVhVE1lOVNCVlNnM1gvSTZBUGI4R0JFSG85eDhs?= =?utf-8?B?RDZ3ZWd4dUtSWlN1SENnUEJFcGpCajlzWk15UkJLakgxZHl3aTVOVHloNFlM?= =?utf-8?B?cStXdEttVVN2NU00T0kxYmNLVmo4bjVUYTFJRkFzZCt1TUhyZEtiRXdEdllP?= =?utf-8?B?SjBGY1JHVVR0UVdqeFVybVduVjZ5eGdDM1ZtZ2g3bk9CdHNqRTF6a0FqSGph?= =?utf-8?B?eWlpK1hpd2tBPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(376014)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NjMwNDNSVEFuOGFRNmlIaFVsTE9qZk5XMUxvdER0Qmh4VFhhWCs5YjhxMnBE?= =?utf-8?B?MmRMV2VEbFNmcHNxWUtFMzFyMi9jeXZici9SdktsMXRqWlNzZy9KYlV6dGlt?= =?utf-8?B?L2tPbU91VGlxY2ZybzhGcEttNHRVTFkzMTVqVmVhS3oxMk0yREF5WENUam9R?= =?utf-8?B?MDV4SlVkKzJ0QktQZkhHT1VnMml0dWVFc1A5UUtORjdzWTFualpKb0Y1Y1NK?= =?utf-8?B?dlVIKytzRWhQNDNYNGFMN01WZEJlL0Vrb1BhMmVuUkdoaWcwV3lrSHE4bnd3?= =?utf-8?B?NVNyOGxiaW1nb01MaUNBMHJKVzFMM0pHKzd1b1pneWlEZGR3b1J4T3pIeXpG?= =?utf-8?B?dE56NHBCZWZPSjdLZTFDUUJyUWZjYWs4OUUzN1JORE1TcllQcUNKbGh6QnI3?= =?utf-8?B?R2tCaTlmbVE2RmFyVy9VQnJUM1pJQjRsWDV5WWNrVGlOUGJnWVA4MEplMWdR?= =?utf-8?B?bnpvK3VjTXZCRjgreXhjVzM1QUNYRVhUcENqbCtmNkFVVmVNblNFOXFIeUVR?= =?utf-8?B?L0szYUpLcVBOOWZ1c1AvU1BOaUZFRU14TjJ4ODFGazduSjZMdE1BTVU2c2dT?= =?utf-8?B?cHFLMlN2YmpJZkxlTG5BQ0NteCtpMTdIOFhLMHJhQnJCY1pwdE9jT1d0cjlh?= =?utf-8?B?K1BTblY5VlRhajhlbGRDaVlXTkVuZ3VIVjdEbXlGSG5vT3U5TnI1T24xdEY5?= =?utf-8?B?NWhyWGxoaXE5aDlHdkVVd3VOK3htSmNRMXFJaWphbkV6WnFIaFpudG1RM1dW?= =?utf-8?B?YVIvRFBiY0JsMTdRbHNBSHJkb2I0UHp4VVY2TGlUN01ObFZGNmM0T0lqL0xM?= =?utf-8?B?c0pRcElyVWd1QkpBVUFTSExoNWJ6ejZyc29NdlhSMCsvYnJ0VDN4cElyeU9S?= =?utf-8?B?alJySjdSYWVlZUFvVU15a0RBcGJzRXpkRE5ZU1VtRFpZTmM3d2lPanFob2FG?= =?utf-8?B?ajdDWWtVWXFWdm1zdUcwa211YjFwOWx6WlVnY0FIZlE0VU5qRk9kZVEwa1U1?= =?utf-8?B?VHdwNUhpaGlxMGxBVjF5KzJRUTJyQzJUVWExMWQrNjhNWVBFK3VIcmFjbGN2?= =?utf-8?B?UFVVVUN1ckFkcS9yS0tpbUNvTXFVTUZSdy85UjZpWVpMbVNrVDFJOWJ6TVdL?= =?utf-8?B?ZnZVNnZWcyttaGtJamJkYWNtdE0xNUJNaEdlcy9SR2MwZGp2bGd0V2VIdStq?= =?utf-8?B?a0ZLZ2t6MzErdFoyVVlVcisya3RwOTRpWlNQazVjT1NlZG5zVitOMkJSQStv?= =?utf-8?B?bzFIQlBWdmdrTkwwWHd6TXV6OXRFR085dUJvTUJtVXhQQUx2eEI2WWRqbnhK?= =?utf-8?B?SFZYZ0NSdnZ6dU41MXZBMm43ZXdkZzdTVTVVZm4wMkplMGhaTWtpUU5iVm1q?= =?utf-8?B?T2tyRElhY1h2Vk0vTk5jM3lyai9sMGZ5QWZielFsVEtQOEhFY2R5UVpmV25X?= =?utf-8?B?QWNNT3RTdVJ5dVVWb2xscmNiMEV5WXZBbTNqOW1pRjhQY09HcTNLSzZUYmYw?= =?utf-8?B?ZVQxWmp3czdQVVpjUGZPZklGNmpvR1duSjJCTG9UdFNKRkRhZkpPa3VDSTdV?= =?utf-8?B?M2ovdmZvQ2IwaHFiR0hxRG8xQjJQM1piZSttZEIwZDZacXlyalJFUjBZVXpH?= =?utf-8?B?T2J5Y1owekhZWWV6SHk1LzFIYitYUzNDeGxBQ254dTZ0Z1JWZEowZzlqMnZk?= =?utf-8?B?K1l5Rm5FbkFmSUh2Z2QzTlZWQzFYc0xlL1piY2hNVTRzcG5MQ3dOUVhYSXV4?= =?utf-8?B?L1FmTEVTZ2QzclMzV1dHZlJrMGhDYkVzRU5ZQ2c4djgxUDl4emJMR1BjZzg5?= =?utf-8?B?ZG1rdzNBSW55dExGdU1nQW5DcERXcVBTY0RHSHRxRUNNWFRVQmZ1UFFneG9p?= =?utf-8?B?dmNOWEdzUkowYzd1TFg1WkJScWV1WkNxTEp6b2JSQ0NKcGdsT1J2R1dIT3k4?= =?utf-8?B?QjlPSUVyM2tEUFhoQlNKZGxqeVdKRXhucUtQSC8xVWlndlVmL1dUZFlLRHhG?= =?utf-8?B?dndwOU5ibHBFSzZYek5ybHZsV05uMzZDV3kwN2lpVkZBL2hOSmxzc25kb3VG?= =?utf-8?B?Um1BYXBBaHkzMGxtSklGc1hWR2xseVR3Q1dRRktwbjJvQjlDNFhSNHVicjI4?= =?utf-8?Q?AV1BTjdedhHnF7Q8u7OZAypgG?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f47be6e-b2ef-4379-70cf-08dddc4a1c1a X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2025 22:21:41.5224 (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: fgErCriuvIGZhj5UNNndXNe7Ouw6kJpHnt6nGy9Knybf1tPq6UELA308L16noxHme0AUSuJhoNhppojL6Erpng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6949 Enhance pci_epf_alloc_space() to handle setting any physical address as inbound memory space, such as an MSI message base address. The function already accounts for different alignment requirements for different BARs, so reuse this logic and rename the function to pci_epf_set_inbound_space(). Make pci_epf_alloc_space() inline and call pci_epf_set_inbound_space() with from_space set to true to maintain compatibility. Signed-off-by: Frank Li --- --- drivers/pci/endpoint/pci-epf-core.c | 69 ++++++++++++++++++++++++++++++---= ---- include/linux/pci-epc.h | 5 --- include/linux/pci-epf.h | 35 ++++++++++++++++--- 3 files changed, 87 insertions(+), 22 deletions(-) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci= -epf-core.c index d54e18872aefc07c655c94c104a347328ff7a432..5b802b1ea3e28a32e38f4ab6a64= 9cb97a2f29b95 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -249,20 +249,26 @@ void pci_epf_free_space(struct pci_epf *epf, void *ad= dr, enum pci_barno bar, EXPORT_SYMBOL_GPL(pci_epf_free_space); =20 /** - * pci_epf_alloc_space() - allocate memory for the PCI EPF register space + * pci_epf_set_inbound_space() - set memory for the PCI EPF inbound addres= s space * @epf: the EPF device to whom allocate the memory * @size: the size of the memory that has to be allocated * @bar: the BAR number corresponding to the allocated register space * @epc_features: the features provided by the EPC specific to this EPF * @type: Identifies if the allocation is for primary EPC or secondary EPC + * @from_memory: allocate from system memory + * @inbound_addr: Any physical address space such as MSI message address t= hat + * work as inbound address space. from_memory need be false. * * Invoke to allocate 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. */ -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) +int pci_epf_set_inbound_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, + bool from_memory, + dma_addr_t inbound_addr) { u64 bar_fixed_size =3D epc_features->bar[bar].fixed_size; size_t aligned_size, align =3D epc_features->align; @@ -270,7 +276,32 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t = size, enum pci_barno bar, dma_addr_t phys_addr; struct pci_epc *epc; struct device *dev; - void *space; + void *space =3D NULL; + dma_addr_t up; + + up =3D inbound_addr + size - 1; + + /* + * Bits: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + * Inbound_addr: U U U U U U 0 X X X X X X X X X + * Up: 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 [Inbound_Addr, Up] + * X means bit 0 or 1. + * + * Inbound_addr^Up 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 + * [Inbound_Addr, Up] range. + */ + if (!from_memory) { + int pos; + + for (pos =3D sizeof(dma_addr_t) - 1; pos > 0; pos--) + if ((up ^ inbound_addr) & BIT_ULL(pos)) + break; + + size =3D 1 << pos; + } =20 if (size < 128) size =3D 128; @@ -283,7 +314,7 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t s= ize, enum pci_barno bar, if (size > bar_fixed_size) { dev_err(&epf->dev, "requested BAR size is larger than fixed size\n"); - return NULL; + return -EINVAL; } size =3D bar_fixed_size; } else { @@ -308,13 +339,25 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t= size, enum pci_barno bar, } =20 dev =3D epc->dev.parent; - space =3D dma_alloc_coherent(dev, aligned_size, &phys_addr, GFP_KERNEL); - if (!space) { - dev_err(dev, "failed to allocate mem space\n"); - return NULL; + + if (from_memory) { + space =3D dma_alloc_coherent(dev, aligned_size, + &phys_addr, GFP_KERNEL); + if (!space) { + dev_err(dev, "failed to allocate mem space\n"); + return -ENOMEM; + } + } + + epf_bar[bar].phys_addr =3D from_memory ? + phys_addr : ALIGN_DOWN(inbound_addr, aligned_size); + + if (!from_memory && (epf_bar[bar].phys_addr + size < up)) { + dev_err(&epf->dev, + "Given bar can't fit required inbound memory region\n"); + return -EINVAL; } =20 - 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; @@ -324,9 +367,9 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t s= ize, enum pci_barno bar, else epf_bar[bar].flags |=3D PCI_BASE_ADDRESS_MEM_TYPE_32; =20 - return space; + return 0; } -EXPORT_SYMBOL_GPL(pci_epf_alloc_space); +EXPORT_SYMBOL_GPL(pci_epf_set_inbound_space); =20 static void pci_epf_remove_cfs(struct pci_epf_driver *driver) { diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 4286bfdbfdfad2754d763be2b8474e5d2d403a1f..5f1d8787c3bb7a6130adb54c079= a48c82d5afcf4 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -13,11 +13,6 @@ =20 struct pci_epc; =20 -enum pci_epc_interface_type { - UNKNOWN_INTERFACE =3D -1, - PRIMARY_INTERFACE, - SECONDARY_INTERFACE, -}; =20 static inline const char * pci_epc_interface_string(enum pci_epc_interface_type type) diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 2e85504ba2baf93827224884ca19ae2bd0e6906b..4311a8ba1081b8a8aa327c8ed10= f9c5d9af2feba 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -17,7 +17,12 @@ =20 struct pci_epf; struct pci_epc_features; -enum pci_epc_interface_type; + +enum pci_epc_interface_type { + UNKNOWN_INTERFACE =3D -1, + PRIMARY_INTERFACE, + SECONDARY_INTERFACE, +}; =20 enum pci_barno { NO_BAR =3D -1, @@ -236,9 +241,31 @@ void pci_epf_destroy(struct pci_epf *epf); int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner); void pci_epf_unregister_driver(struct pci_epf_driver *driver); -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); + +int pci_epf_set_inbound_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, + bool from_memory, + dma_addr_t inbound_addr); + +static inline 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) +{ + int ret; + + ret =3D pci_epf_set_inbound_space(epf, size, bar, epc_features, type, + true, 0); + + if (ret) + return NULL; + + return type =3D=3D PRIMARY_INTERFACE ? epf->bar[bar].addr : + epf->sec_epc_bar[bar].addr; +} + void pci_epf_free_space(struct pci_epf *epf, void *addr, enum pci_barno ba= r, enum pci_epc_interface_type type); =20 --=20 2.34.1 From nobody Sat Oct 4 12:44:49 2025 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011027.outbound.protection.outlook.com [40.107.130.27]) (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 F37C326E718; Fri, 15 Aug 2025 22:21:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755296509; cv=fail; b=YpHr93ZTWJ9FJwtm39L96s9eKB9BDwRiSpOZY7OHtsZByzo5hz7BCoLHuqbms45+8zdxlP9dYqUoA77AjNEwlOWirxNaPuftRuR+FLEHL6izChjtGIIIi7d9aWN9YMNncSpa2j60enARL74Uw5/d6AMEFb+2v42RIKd0TxT1EdU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755296509; c=relaxed/simple; bh=SNNG/R0sxGoyz5fGoAH02mj6T+ZgFUegAhr6avULASk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=po2hHIGbXysoZUZHoMnugnAZ1wAmUuCMFwIZtQYLemmc0D134iTAN1XFZTeqVvvHesifjuwjAq5wqQ7EfD709xqKOy8PZp9cRgRD/Z5N4it+stsTBdunQwKj2uqHDahhOqWTSC/oU5EVHEB2diahG9q7mEjU4s7XN1u9xqrN7Zw= 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=AVmxe2Kn; arc=fail smtp.client-ip=40.107.130.27 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="AVmxe2Kn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gABvlmVm7hffozVHKoF5F8E0zmxzW9/nNAvBf3kJfCBM01hvLPU4xa7u08uspCzzNMRoslWJbBrIRImoCkFcJp5yNYggs/xN/z23KkIRiYoZ8MTN4dqq7hyWuZlVbRUXnl52WPAFZIqCn9PE0dvVjKe4KSHax838qohqNpk23SVOyKnIY9qbTg79omcTC8HbsanZH5YO9ib9Y4UmFSpJ8OwtVf693lFSo1X5u4r3ra1fGVqR/BgfxUV/VUDoVcxXJ7PsjVEPh682k9OwWzhbDNCHvsZqAtN+zJSrSKDgYEDs35zRanCtIA6DzR1cQm3DpEwG+DJZyzNjEsTF0yAomg== 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=uoPV5lgwxkDwBOvUIsiV/UHJulWAyL+4/Ll26LhnMSU=; b=ywfcI9lbtKpwcekf85yAr9weIT6oNjHTeLCCKluBmOKWQcvnEw3Rwp/lioTuuS7q+GBWLvB0J1wnsxwzj4yVZPmYJtOsktIxGe1oVhlBObYn3NRUsz1JJFXmw0Xain8HQeWqn4s/ZbQtfJvO4Wvia5gUQgslbNeWtOkvmeDzKr9BpqQOOTBj8I/4wu8YGEj1SldTTBM/zkDJuWTn2B6yuOAVJweb0KRdq1dROny3CI5OGYVPykTiKG4pArYmRWUIvjohg6Mn9hTAEKF6mCrStU9XbXORTdNHlslp85jEXnE/oGjWwmwD1DUMeLwFD+WF5ffdBUTVe0zeBV6vA3+ihw== 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=uoPV5lgwxkDwBOvUIsiV/UHJulWAyL+4/Ll26LhnMSU=; b=AVmxe2Kn2xfnhLbnLfmbo19TUK0alGy1WkPnEBXjeTz8zOWaMxCDqYytquT+9ae4g/yiQjEQwfQJ9v9nowN9l2nGfaJILO0y+JLjzpA9fZFoPyxHEqdspA+YXNb/Ka2H4GCXuPcf4A2me4FmmmWvnMmUHmZOfampg0cDruO5G/coAQ+E2PzPlcYDtb4MdFWwh6GYGY4GaQLdEsAHcDG4v1YuHDA1L6olAZnZaoY2ZWthmEHTTZz6BaOBEcDk0RsZKqYNtWCci3SSl6Pdfy9seXdB1YqugKpkouD7NJvUVQ5riczMlWMWIR4TaoICWWk7ZUBgW9FY9CXXlGsjlL4fQw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by AM7PR04MB6949.eurprd04.prod.outlook.com (2603:10a6:20b:102::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.12; Fri, 15 Aug 2025 22:21:44 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%5]) with mapi id 15.20.9052.006; Fri, 15 Aug 2025 22:21:44 +0000 From: Frank Li Date: Fri, 15 Aug 2025 18:20:54 -0400 Subject: [PATCH 2/2] PCI: endpoint: pci-epf-vntb: Add MSI doorbell support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250815-vntb_msi_doorbell-v1-2-32df6c4bf96c@nxp.com> References: <20250815-vntb_msi_doorbell-v1-0-32df6c4bf96c@nxp.com> In-Reply-To: <20250815-vntb_msi_doorbell-v1-0-32df6c4bf96c@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, Frank Li X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755296496; l=7258; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=SNNG/R0sxGoyz5fGoAH02mj6T+ZgFUegAhr6avULASk=; b=fnW53V75lLRn7MsfE+n8rGbpCXk0SJCl0cYvg2Zv0qvkuhxfOL5DnLHKkFCZhidLSPz69Rflx XThczx7wiVbAHLlgzfJSAqljL+qE4uYjxznhGGlwN+8yn/3pAQ3qIjt X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: PH8P220CA0029.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:348::13) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) 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: PAXPR04MB9642:EE_|AM7PR04MB6949:EE_ X-MS-Office365-Filtering-Correlation-Id: e883b3ae-b530-45d0-75cb-08dddc4a1daf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|376014|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?M3M2QVY2aWRidFVYMGtCQUhFREd5WEVreXNFMlVxd0pGd0o3amFXVjFSd0xJ?= =?utf-8?B?akZxbFhUMTdNTEJQUW84L3lkNStraHNxL3RMQzdLTzVOak1qTEFQbitiRmtX?= =?utf-8?B?bllRYzEyUjhxWTYzRU1rRExEeVpLdTlubUpiNDlXWkVOU0poYVVRaXMraXNp?= =?utf-8?B?c291cndZRm5NY3BQQ1B6MWpvVFBxMUExSWxiLzloNkZURXJyZ01zVmxkM3NR?= =?utf-8?B?N1ByNUJ5WjI4d0VyUlExL1dVWWwvWDRlWVcyc0JrQ1dmSFJCdFFUV1RZVC9K?= =?utf-8?B?OG1haCtFLzNBYlFaMlp0NUZZMkEzWXdkSjZHWUV5MFhiSlZCM0t2RzVPVXlh?= =?utf-8?B?bEFFZmJLbkpDa2Jud2pNd09vSGM2S08zNC82V0NmRlJUL0dPc2MyWHRjd1cz?= =?utf-8?B?RVBUWVMvZ1lXVkxtSEV5bklHdHZBek5kNVlnWmRVVDlnY1hMR3p6N0QwcFFv?= =?utf-8?B?dVJpQlZBU0ZST3k1WHVvbHpTQ3N2VlJNRlRsN3dzNElzZi9hSjBpY3dFQjg4?= =?utf-8?B?VU5CdjNDbkRXbG1vaUt6TkdOaXd0YkZhaXQ0THVReHdZVGV5ZTh1d3pOQk5Z?= =?utf-8?B?MURwT3FpQ0hZWGxDYjZhdFpONzRBLzdONmY5eUNQWFAxMGdNengrK2p0QlVU?= =?utf-8?B?ZDNQUHhGV0VWVy9KaFJhL2NENE0zd3ozeExsRko5ejNhMGV5cGk5STQ4Q24y?= =?utf-8?B?UlZWRGRzZSszNmphNTNJam1RSFUreUVEWGtiNEZaeTdHOEhpUFBiTFRnRlFN?= =?utf-8?B?WmJHT05nMlV6NGRDM294aW9XWnVIbVpTL1BHV1hmajFNQ0dCU3NTVUdxeitn?= =?utf-8?B?SmQ2NkFUblJkOGVhV1RkUW9ZTi8xMk9Wb0NwNGNQMHJ4V2k4eE9lNlJxbEdN?= =?utf-8?B?S0pZeHpwb1NCV0trZk1SWFcyb0RUd0EyOXRCNGF4MHkwVk5QUnJGSytDTUtr?= =?utf-8?B?dkhGSGxLcVZLTE5CK2tjSnRVcVVSR1JHZzdNdXJsNlgrTlpqNEtWSUYxTEZo?= =?utf-8?B?UFRaZkk5dHQ0M3dSYUJEYWlIblQzSFFmZkgySEZsdzRIQXRIWFo0enkzM216?= =?utf-8?B?MHF4WlJIWFQxSWxzVHlLVDc0WktoR09qSjVmV3JTOGF1RHg3UFZHUWVoaFF5?= =?utf-8?B?WGRsRVZLNHNxWDZEMzdQUTRYZ2QwU1R5ZVNHZHhQQk9wb1c4cE41aEZPNXVv?= =?utf-8?B?Z0lvWmMxUmlWTURjTE9tQ3NIL011bERIanpucnZ6d24zYnNhb0NuUlQzWGYw?= =?utf-8?B?K21nY3paREs2enh6RC9MUkhnOGpPMGZvSy9LS0RNTVdTem8vYTVXK3ZCQmpa?= =?utf-8?B?ZllsZDZBYXB2cEVHdlJweUZwM0ZGcGhjc0RBaFRpYWZuUnZDSVhEUXpiZTAr?= =?utf-8?B?Z2hPZ0wyTThZMkNoc2hMOHZEdzhFaXBKbHdWdW5pVENMOE85M2xmd2FrdVJP?= =?utf-8?B?VE11eHRwZ0wwL0YyZWhDc3RhWU5oZXdCTUk2ZWRrQWNYZ0FZMTdHc25OQ2pw?= =?utf-8?B?VURaNTcyWnNqOG9oOExtb3JRMXZVSk5TYlFNZktHK0hiaEh6clRnSHpUbEZ6?= =?utf-8?B?ZTdkUjl5ZU1yVTNVc3F5bXgwenptTHJUa2FKOU9kZDJ3cnJRV3dHMDRBRmd3?= =?utf-8?B?Q3RmQWZTSHVwVk02ekZOb0xFRS9RUVhkWVB1d2NEcUU2SmJqbW82eGVsVXBs?= =?utf-8?B?c3BPK2dlRFE0Z0VnWjJZUVdNejZxNzg1cVBlQnAvSDZIcUVPQXYrMlNKRkc3?= =?utf-8?B?Um1TUmFxc25OVW0wL1NJZ1VxS3pOUEF6ay9WeTNsT0tPaWJTMHdTUUVPeEh5?= =?utf-8?B?Mmhlb29ld1NUZXUvMHB6NlBtaUsrQ2dWZ0VUcGpVTng0bGRwWjdHYmNreC9h?= =?utf-8?B?VkgzOEZncVVoSmtnWnQvMTduODBRQjZQbS94S2Y5dmgvbGp0b0pHNXdKM2VL?= =?utf-8?B?bXYzdzRNQk1TUmZxWFJvK2h2c2x6eUxhWjQ2U3V4d1BRQW5waGRMSkRaaUhh?= =?utf-8?B?RG1nMTN5YzBBPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(376014)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?b00zY0I4UXBkeHJHTUtoUGpFMThQbGhLOFdCS3RGMGZiNlQwTHNxZTkwbkVy?= =?utf-8?B?ZE91cHo1alZpbXNHVWJnY3Q3YmpHSnBsL1FzK3k2QWEraTVjZUhnL1pUdUlY?= =?utf-8?B?Ym4wa0ticlBybk9EcmFrOHJSNXpBTEVTQytRV2oyVnJ3SU1LRUpxdkI1aDhj?= =?utf-8?B?cE1rZ3Z5dnloTFI3SkVtZHV4UXpuK2k5bzhTdE0ydVdTV0V4Qm8xN1FSUnd6?= =?utf-8?B?TXVFR0t4ZDJVbzNvRVdadTJ4dGo4UmRGa1BNa2ZvZVBHcThxUmpaQVFBT25m?= =?utf-8?B?M2M0R2xDRXpYNFh0TlBjR1pSVWRmTjlSa0lVRU5tNkpybE5EREJFdlgva2Ur?= =?utf-8?B?Q0RHVCs1SUZrc2xOUUJiWllTWTFPbDJaQ2ttSUZSQjBoWlZSYllaQlpaNklT?= =?utf-8?B?b044c1pBeTZ3T0tmMW8xTEhPNU5OdktIMWZsU3RRbmRXdzhPYUVlSGNiL1M5?= =?utf-8?B?cDRWKzBVRCtRajJwUkRuY0o5dUlDdUNOeE5WbXVKNVgwZTJpaU9ieG1tMENp?= =?utf-8?B?cFFnc3l1dHVic0VtRE1kYUxDOU41ZndzTFBHQUpxd3NTanJjK1pLa1lsSjdE?= =?utf-8?B?VlJISTA2c2JPeHNPTnBFN1cwV1JXcHJCUkxPRXdLakhFTGlpdWp0YUpES1pQ?= =?utf-8?B?SG5xS1dSUVBIVFYrVXQxbUgxcnZLbWdnUTQ3M2FzcjRaWklkZlNINlFEQUVS?= =?utf-8?B?T3dOd2VCLzlnTGRmY045YmVIOWVvMlRKOWgwcEU2UW8zQ2JQN0pGWE5TMVBt?= =?utf-8?B?M2V5ei9iMXZXVGFmQ1kxMHFxMFFTWm9FczNTN2tSV0JadnplMzRCcXp0c0Ja?= =?utf-8?B?cE5yK1JxcEdsd216WVBjWUJ6TXhudytQZzhwelVGUjdTQWMybmZVQnV4ekdE?= =?utf-8?B?bE45ejcrMlMvbFJNdW4vZUpDQVMvbUdpenV5b0xsclJPTXgvU1kzUXk4c0JN?= =?utf-8?B?R1JWMUt4aDZ6U2k1QVgvK3BGTmZ2WURud3FUbHJWcWcwOXpNV2hOeEl4UERY?= =?utf-8?B?WnMzYkw2enlPQUFDSElvZndiRzV0dHNPamlqaUVJMmphcUJQZG5uNHYvVDNF?= =?utf-8?B?RndXaXNEL2xWc3FyWnQyQU9wMmxlbzRyVDdCS01CSExGVWlkaUpGVGUwRjRT?= =?utf-8?B?eTgxWW1XMFFvOGp3cGhKSEVNaXAxR0dVY0R6Wnp1K21oUk9LblkvSUQ4Q0FS?= =?utf-8?B?Q2pjcmRreHFOZjNvaWZld2gxTGQzb09SVWttNkFDRDNDendPVU0yL3BxaGpk?= =?utf-8?B?TVdnY3FuMkJmOHdpYnRwNWljS0hVUE5VYUJnbmhUenFlazE0WHRpNCsvNHJT?= =?utf-8?B?YVJsQnZuWDJqUWl6WVRTUWE5bVNjNVQzcHhJdTlwZzFTZm5PT3VEZlNZYnhH?= =?utf-8?B?UUN5NFNHdnYremxyQmxvY0J6NUVvNnpmK0FLMUZ5cWpFcVlpaGY3bDlJanRv?= =?utf-8?B?TUJKSkc4YmxnQTluUTR2SUs1MWR2WVA1SmJRUytzSHozUGdJNk0xOWJQc3A0?= =?utf-8?B?aHppcm8rL2k5UFpUVVZ6MU03T0lXZzBsTllINnU1VUhXK3JaaU5abklFaEU5?= =?utf-8?B?dWdIdUxjSUR1L2xuSWxHWmZuaU1jR1RNdFBWckl6U1ErYUN4MjFaYm4wREFm?= =?utf-8?B?ZVpYVHV2OWNPMjNHMXozR0t3MjZZMmhmNklFd2xPcU9VNi9KWHdkcnVhUmJZ?= =?utf-8?B?cFVFTjI0VnpwemRqZFAvenp1L1J5TWR5aVV3RE5aaFBvRWJoZ3J4Vis1bS9p?= =?utf-8?B?VXlkTWpENGdYVlY5eEQ1WTZIcE9LN05hN25ybm01RmY2ZjRMZkE3QmNmNWli?= =?utf-8?B?Wk5zWkVsTS9iaEJIY1JHbnBXUnI4TWpTUkx2SEJiNndKekEySjlnbzRHVnN2?= =?utf-8?B?MnA1TStrUHpYMkdXbG5jVFNPZ1ljci93QUhXeThPcTNlSmFaQWtBSkpMMThr?= =?utf-8?B?cWxhVFArODlWQjBwTGE2NVIyVnZHVWRlMkFWdnU1VWx5Vy9weTlGQm9rTnF3?= =?utf-8?B?MWFUbmhlRW8vWGE5YmlFV2JiWnF4R3FjMC81VXhCOWVYZlR6U2NkU2hKaGJi?= =?utf-8?B?U2xRYVRGZ0E5V1l1N3o5WkltcTEvZDJKNFFYeWNGa1pUeTRoWHhYd2VJckRB?= =?utf-8?Q?6sQdlRSJvrUdmasxwqo5M6UdT?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e883b3ae-b530-45d0-75cb-08dddc4a1daf X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2025 22:21:44.1695 (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: 84w6lBysGUQ9TZwVLb8azwh7OdwkCAPo+rWAQaIHegWOED9S/uB9qf6VpObVmxuo/ijkzYMsVCyqmWXxzS6QeQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6949 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 --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 153 ++++++++++++++++++++++= +--- 1 file changed, 136 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..1c586205835fe9c7c5352e74819= bccb4ece84438 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,24 @@ 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); + } + + if (irq =3D=3D ntb->epf->db_msg[0].virq) + queue_delayed_work(kpcintb_workqueue, &ntb->cmd_handler, 0); + + return IRQ_HANDLED; } =20 /** @@ -500,6 +520,90 @@ 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_set_inbound_space(epf, sz, barno, + epc_features, 0, false, low); + + 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,22 +624,27 @@ 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 err_alloc_peer_mem: @@ -554,6 +663,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 +1387,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 +1427,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